From 18e8e7b7c5f263810572460fc23d28a5214277b9 Mon Sep 17 00:00:00 2001
From: "fern-api[bot]" <115122769+fern-api[bot]@users.noreply.github.com>
Date: Thu, 15 Feb 2024 15:02:17 -0500
Subject: [PATCH] Request options support, Python version upgrade, and
serialized enum support (#77)
Co-authored-by: fern-api <115122769+fern-api[bot]@users.noreply.github.com>
Co-authored-by: Armando Belardo <11140328+armandobelardo@users.noreply.github.com>
---
.github/workflows/ci.yml | 21 +-
poetry.lock | 430 ++++-------
pyproject.toml | 9 +-
src/merge/core/__init__.py | 2 +
src/merge/core/client_wrapper.py | 2 +-
src/merge/core/request_options.py | 29 +
.../resources/account_details/client.py | 44 +-
.../resources/account_token/client.py | 66 +-
.../resources/accounting_periods/client.py | 152 +++-
.../accounting/resources/accounts/client.py | 321 ++++++--
.../accounting/resources/addresses/client.py | 94 ++-
.../resources/async_passthrough/client.py | 142 +++-
.../resources/attachments/client.py | 289 ++++++--
.../resources/audit_trail/client.py | 84 ++-
.../resources/available_actions/client.py | 62 +-
.../resources/balance_sheets/client.py | 186 +++--
.../resources/cash_flow_statements/client.py | 186 +++--
.../resources/company_info/client.py | 164 ++++-
.../accounting/resources/contacts/client.py | 367 ++++++---
.../resources/credit_notes/client.py | 214 ++++--
.../resources/delete_account/client.py | 50 +-
.../accounting/resources/expenses/client.py | 327 +++++---
.../resources/force_resync/client.py | 53 +-
.../resources/generate_key/client.py | 56 +-
.../resources/income_statements/client.py | 186 +++--
.../accounting/resources/invoices/client.py | 401 ++++++----
.../accounting/resources/issues/client.py | 192 +++--
.../accounting/resources/items/client.py | 224 ++++--
.../resources/journal_entries/client.py | 335 ++++++---
.../accounting/resources/link_token/client.py | 80 +-
.../resources/linked_accounts/client.py | 112 ++-
.../resources/passthrough/client.py | 100 ++-
.../accounting/resources/payments/client.py | 313 ++++++--
.../resources/phone_numbers/client.py | 78 +-
.../resources/purchase_orders/client.py | 397 ++++++----
.../resources/regenerate_key/client.py | 56 +-
.../resources/selective_sync/client.py | 185 ++++-
.../resources/sync_status/client.py | 72 +-
.../accounting/resources/tax_rates/client.py | 186 +++--
.../resources/tracking_categories/client.py | 240 +++---
.../resources/transactions/client.py | 192 +++--
.../resources/vendor_credits/client.py | 192 +++--
.../resources/webhook_receivers/client.py | 132 +++-
.../ats/resources/account_details/client.py | 44 +-
.../ats/resources/account_token/client.py | 66 +-
.../ats/resources/activities/client.py | 353 +++++++--
.../ats/resources/applications/client.py | 455 ++++++++++--
.../ats/resources/async_passthrough/client.py | 142 +++-
.../ats/resources/attachments/client.py | 385 +++++++---
.../ats/resources/audit_trail/client.py | 84 ++-
.../ats/resources/available_actions/client.py | 62 +-
.../ats/resources/candidates/client.py | 595 ++++++++++++---
.../ats/resources/delete_account/client.py | 50 +-
.../ats/resources/departments/client.py | 172 ++++-
.../resources/ats/resources/eeocs/client.py | 208 ++++--
.../ats/resources/force_resync/client.py | 53 +-
.../ats/resources/generate_key/client.py | 56 +-
.../ats/resources/interviews/client.py | 393 +++++++---
.../resources/ats/resources/issues/client.py | 192 +++--
.../resources/job_interview_stages/client.py | 186 +++--
.../resources/ats/resources/jobs/client.py | 318 +++++---
.../ats/resources/link_token/client.py | 80 +-
.../ats/resources/linked_accounts/client.py | 112 ++-
.../resources/ats/resources/offers/client.py | 228 ++++--
.../resources/ats/resources/offices/client.py | 172 ++++-
.../ats/resources/passthrough/client.py | 100 ++-
.../ats/resources/regenerate_key/client.py | 56 +-
.../ats/resources/reject_reasons/client.py | 172 ++++-
.../ats/resources/scorecards/client.py | 232 ++++--
.../ats/resources/selective_sync/client.py | 181 ++++-
.../ats/resources/sync_status/client.py | 72 +-
.../resources/ats/resources/tags/client.py | 96 ++-
.../resources/ats/resources/users/client.py | 216 ++++--
.../ats/resources/webhook_receivers/client.py | 132 +++-
.../crm/resources/account_details/client.py | 44 +-
.../crm/resources/account_token/client.py | 66 +-
.../crm/resources/accounts/client.py | 535 ++++++++++----
.../crm/resources/association_types/client.py | 359 +++++++--
.../crm/resources/associations/client.py | 208 ++++--
.../crm/resources/async_passthrough/client.py | 142 +++-
.../crm/resources/audit_trail/client.py | 84 ++-
.../crm/resources/available_actions/client.py | 62 +-
.../crm/resources/contacts/client.py | 695 ++++++++++++------
.../resources/custom_object_classes/client.py | 182 +++--
.../crm/resources/custom_objects/client.py | 351 +++++++--
.../crm/resources/delete_account/client.py | 50 +-
.../crm/resources/engagement_types/client.py | 242 ++++--
.../crm/resources/engagements/client.py | 507 ++++++++++---
.../crm/resources/force_resync/client.py | 53 +-
.../crm/resources/generate_key/client.py | 56 +-
.../resources/crm/resources/issues/client.py | 192 +++--
.../resources/crm/resources/leads/client.py | 445 +++++++----
.../crm/resources/link_token/client.py | 80 +-
.../crm/resources/linked_accounts/client.py | 112 ++-
.../resources/crm/resources/notes/client.py | 385 +++++++---
.../crm/resources/opportunities/client.py | 581 +++++++++++----
.../crm/resources/passthrough/client.py | 100 ++-
.../crm/resources/regenerate_key/client.py | 56 +-
.../crm/resources/selective_sync/client.py | 181 ++++-
.../resources/crm/resources/stages/client.py | 242 ++++--
.../crm/resources/sync_status/client.py | 72 +-
.../resources/crm/resources/tasks/client.py | 501 ++++++++++---
.../resources/crm/resources/users/client.py | 311 ++++++--
.../crm/resources/webhook_receivers/client.py | 132 +++-
.../resources/account_details/client.py | 44 +-
.../resources/account_token/client.py | 66 +-
.../resources/async_passthrough/client.py | 142 +++-
.../resources/audit_trail/client.py | 84 ++-
.../resources/available_actions/client.py | 62 +-
.../resources/delete_account/client.py | 50 +-
.../filestorage/resources/drives/client.py | 176 ++++-
.../filestorage/resources/files/client.py | 363 +++++++--
.../filestorage/resources/folders/client.py | 293 ++++++--
.../resources/force_resync/client.py | 53 +-
.../resources/generate_key/client.py | 56 +-
.../filestorage/resources/groups/client.py | 172 ++++-
.../filestorage/resources/issues/client.py | 192 +++--
.../resources/link_token/client.py | 80 +-
.../resources/linked_accounts/client.py | 112 ++-
.../resources/passthrough/client.py | 100 ++-
.../resources/regenerate_key/client.py | 56 +-
.../resources/selective_sync/client.py | 185 ++++-
.../resources/sync_status/client.py | 72 +-
.../filestorage/resources/users/client.py | 176 ++++-
.../resources/webhook_receivers/client.py | 132 +++-
.../hris/resources/account_details/client.py | 44 +-
.../hris/resources/account_token/client.py | 66 +-
.../resources/async_passthrough/client.py | 142 +++-
.../hris/resources/audit_trail/client.py | 84 ++-
.../resources/available_actions/client.py | 62 +-
.../hris/resources/bank_info/client.py | 252 ++++---
.../hris/resources/benefits/client.py | 186 +++--
.../hris/resources/companies/client.py | 172 ++++-
.../hris/resources/delete_account/client.py | 50 +-
.../hris/resources/dependents/client.py | 164 ++++-
.../resources/employee_payroll_runs/client.py | 188 +++--
.../hris/resources/employees/client.py | 481 +++++++++---
.../resources/employer_benefits/client.py | 172 ++++-
.../hris/resources/employments/client.py | 194 +++--
.../hris/resources/force_resync/client.py | 53 +-
.../hris/resources/generate_key/client.py | 56 +-
.../resources/hris/resources/groups/client.py | 216 ++++--
.../resources/hris/resources/issues/client.py | 192 +++--
.../hris/resources/link_token/client.py | 80 +-
.../hris/resources/linked_accounts/client.py | 112 ++-
.../hris/resources/locations/client.py | 216 ++++--
.../hris/resources/passthrough/client.py | 100 ++-
.../hris/resources/pay_groups/client.py | 172 ++++-
.../hris/resources/payroll_runs/client.py | 198 +++--
.../hris/resources/regenerate_key/client.py | 56 +-
.../hris/resources/selective_sync/client.py | 181 ++++-
.../hris/resources/sync_status/client.py | 72 +-
.../resources/hris/resources/teams/client.py | 186 +++--
.../hris/resources/time_off/client.py | 319 ++++++--
.../resources/time_off_balances/client.py | 244 +++---
.../resources/timesheet_entries/client.py | 309 ++++++--
.../resources/webhook_receivers/client.py | 132 +++-
.../resources/account_details/client.py | 44 +-
.../resources/account_token/client.py | 66 +-
.../ticketing/resources/accounts/client.py | 172 ++++-
.../resources/async_passthrough/client.py | 142 +++-
.../ticketing/resources/attachments/client.py | 381 ++++++++--
.../ticketing/resources/audit_trail/client.py | 84 ++-
.../resources/available_actions/client.py | 62 +-
.../ticketing/resources/collections/client.py | 326 +++++---
.../ticketing/resources/comments/client.py | 293 ++++++--
.../ticketing/resources/contacts/client.py | 182 +++--
.../resources/delete_account/client.py | 50 +-
.../resources/force_resync/client.py | 53 +-
.../resources/generate_key/client.py | 56 +-
.../ticketing/resources/issues/client.py | 192 +++--
.../ticketing/resources/link_token/client.py | 80 +-
.../resources/linked_accounts/client.py | 112 ++-
.../ticketing/resources/passthrough/client.py | 100 ++-
.../ticketing/resources/projects/client.py | 254 +++++--
.../resources/regenerate_key/client.py | 56 +-
.../ticketing/resources/roles/client.py | 172 ++++-
.../resources/selective_sync/client.py | 185 ++++-
.../ticketing/resources/sync_status/client.py | 72 +-
.../ticketing/resources/tags/client.py | 172 ++++-
.../ticketing/resources/teams/client.py | 172 ++++-
.../ticketing/resources/tickets/client.py | 695 +++++++++++++-----
.../ticketing/resources/users/client.py | 168 ++++-
.../resources/webhook_receivers/client.py | 132 +++-
184 files changed, 24328 insertions(+), 7674 deletions(-)
create mode 100644 src/merge/core/request_options.py
diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
index 8209273e..324bcbb4 100644
--- a/.github/workflows/ci.yml
+++ b/.github/workflows/ci.yml
@@ -23,13 +23,10 @@ jobs:
- name: Set up python
uses: actions/setup-python@v4
with:
- python-version: 3.7
+ python-version: 3.8
- name: Bootstrap poetry
run: |
- curl --location --show-error --silent --output poetry.py https://install.python-poetry.org \
- && echo '66db5477a597b6176202ef77792076057ce50d2c5a2d2d2978c63e1f144d7b95' poetry.py | sha256sum -c \
- && python poetry.py -y --version 1.5.1 \
- && rm poetry.py
+ curl -sSL https://install.python-poetry.org | python - -y --version 1.5.1
- name: Install dependencies
run: poetry install
- name: Compile
@@ -42,13 +39,10 @@ jobs:
- name: Set up python
uses: actions/setup-python@v4
with:
- python-version: 3.7
+ python-version: 3.8
- name: Bootstrap poetry
run: |
- curl --location --show-error --silent --output poetry.py https://install.python-poetry.org \
- && echo '66db5477a597b6176202ef77792076057ce50d2c5a2d2d2978c63e1f144d7b95' poetry.py | sha256sum -c \
- && python poetry.py -y --version 1.5.1 \
- && rm poetry.py
+ curl -sSL https://install.python-poetry.org | python - -y --version 1.5.1
- name: Install dependencies
run: poetry install
- name: Test
@@ -70,13 +64,10 @@ jobs:
- name: Set up python
uses: actions/setup-python@v4
with:
- python-version: 3.7
+ python-version: 3.8
- name: Bootstrap poetry
run: |
- curl --location --show-error --silent --output poetry.py https://install.python-poetry.org \
- && echo '66db5477a597b6176202ef77792076057ce50d2c5a2d2d2978c63e1f144d7b95' poetry.py | sha256sum -c \
- && python poetry.py -y --version 1.5.1 \
- && rm poetry.py
+ curl -sSL https://install.python-poetry.org | python - -y --version 1.5.1
- name: Install dependencies
run: poetry install
- name: Publish to pypi
diff --git a/poetry.lock b/poetry.lock
index 4145c40d..ea3f9dd4 100644
--- a/poetry.lock
+++ b/poetry.lock
@@ -2,13 +2,13 @@
[[package]]
name = "annotated-types"
-version = "0.5.0"
+version = "0.6.0"
description = "Reusable constraint types to use with typing.Annotated"
optional = false
-python-versions = ">=3.7"
+python-versions = ">=3.8"
files = [
- {file = "annotated_types-0.5.0-py3-none-any.whl", hash = "sha256:58da39888f92c276ad970249761ebea80ba544b77acddaa1a4d6cf78287d45fd"},
- {file = "annotated_types-0.5.0.tar.gz", hash = "sha256:47cdc3490d9ac1506ce92c7aaa76c579dc3509ff11e098fc867e5130ab7be802"},
+ {file = "annotated_types-0.6.0-py3-none-any.whl", hash = "sha256:0641064de18ba7a25dee8f96403ebc39113d0cb953a01429249d5c7564666a43"},
+ {file = "annotated_types-0.6.0.tar.gz", hash = "sha256:563339e807e53ffd9c267e99fc6d9ea23eb8443c08f112651963e24e22f84a5d"},
]
[package.dependencies]
@@ -16,35 +16,35 @@ typing-extensions = {version = ">=4.0.0", markers = "python_version < \"3.9\""}
[[package]]
name = "anyio"
-version = "3.7.1"
+version = "4.2.0"
description = "High level compatibility layer for multiple asynchronous event loop implementations"
optional = false
-python-versions = ">=3.7"
+python-versions = ">=3.8"
files = [
- {file = "anyio-3.7.1-py3-none-any.whl", hash = "sha256:91dee416e570e92c64041bd18b900d1d6fa78dff7048769ce5ac5ddad004fbb5"},
- {file = "anyio-3.7.1.tar.gz", hash = "sha256:44a3c9aba0f5defa43261a8b3efb97891f2bd7d804e0e1f56419befa1adfc780"},
+ {file = "anyio-4.2.0-py3-none-any.whl", hash = "sha256:745843b39e829e108e518c489b31dc757de7d2131d53fac32bd8df268227bfee"},
+ {file = "anyio-4.2.0.tar.gz", hash = "sha256:e1875bb4b4e2de1669f4bc7869b6d3f54231cdced71605e6e64c9be77e3be50f"},
]
[package.dependencies]
-exceptiongroup = {version = "*", markers = "python_version < \"3.11\""}
+exceptiongroup = {version = ">=1.0.2", markers = "python_version < \"3.11\""}
idna = ">=2.8"
sniffio = ">=1.1"
-typing-extensions = {version = "*", markers = "python_version < \"3.8\""}
+typing-extensions = {version = ">=4.1", markers = "python_version < \"3.11\""}
[package.extras]
-doc = ["Sphinx", "packaging", "sphinx-autodoc-typehints (>=1.2.0)", "sphinx-rtd-theme (>=1.2.2)", "sphinxcontrib-jquery"]
-test = ["anyio[trio]", "coverage[toml] (>=4.5)", "hypothesis (>=4.0)", "mock (>=4)", "psutil (>=5.9)", "pytest (>=7.0)", "pytest-mock (>=3.6.1)", "trustme", "uvloop (>=0.17)"]
-trio = ["trio (<0.22)"]
+doc = ["Sphinx (>=7)", "packaging", "sphinx-autodoc-typehints (>=1.2.0)", "sphinx-rtd-theme"]
+test = ["anyio[trio]", "coverage[toml] (>=7)", "exceptiongroup (>=1.2.0)", "hypothesis (>=4.0)", "psutil (>=5.9)", "pytest (>=7.0)", "pytest-mock (>=3.6.1)", "trustme", "uvloop (>=0.17)"]
+trio = ["trio (>=0.23)"]
[[package]]
name = "certifi"
-version = "2023.11.17"
+version = "2024.2.2"
description = "Python package for providing Mozilla's CA Bundle."
optional = false
python-versions = ">=3.6"
files = [
- {file = "certifi-2023.11.17-py3-none-any.whl", hash = "sha256:e036ab49d5b79556f99cfc2d9320b34cfbe5be05c5871b51de9329f0603b0474"},
- {file = "certifi-2023.11.17.tar.gz", hash = "sha256:9b469f3a900bf28dc19b8cfbf8019bf47f7fdd1a65a1d4ffb98fc14166beb4d1"},
+ {file = "certifi-2024.2.2-py3-none-any.whl", hash = "sha256:dc383c07b76109f368f6106eee2b593b04a011ea4d55f652c6ca24a754d1cdd1"},
+ {file = "certifi-2024.2.2.tar.gz", hash = "sha256:0569859f95fc761b18b45ef421b1290a0f65f147e92a1e5eb3e635f9a5e4e66f"},
]
[[package]]
@@ -83,44 +83,42 @@ files = [
{file = "h11-0.14.0.tar.gz", hash = "sha256:8f19fbbe99e72420ff35c00b27a34cb9937e902a8b810e2c88300c6f0a3b699d"},
]
-[package.dependencies]
-typing-extensions = {version = "*", markers = "python_version < \"3.8\""}
-
[[package]]
name = "httpcore"
-version = "0.17.3"
+version = "1.0.3"
description = "A minimal low-level HTTP client."
optional = false
-python-versions = ">=3.7"
+python-versions = ">=3.8"
files = [
- {file = "httpcore-0.17.3-py3-none-any.whl", hash = "sha256:c2789b767ddddfa2a5782e3199b2b7f6894540b17b16ec26b2c4d8e103510b87"},
- {file = "httpcore-0.17.3.tar.gz", hash = "sha256:a6f30213335e34c1ade7be6ec7c47f19f50c56db36abef1a9dfa3815b1cb3888"},
+ {file = "httpcore-1.0.3-py3-none-any.whl", hash = "sha256:9a6a501c3099307d9fd76ac244e08503427679b1e81ceb1d922485e2f2462ad2"},
+ {file = "httpcore-1.0.3.tar.gz", hash = "sha256:5c0f9546ad17dac4d0772b0808856eb616eb8b48ce94f49ed819fd6982a8a544"},
]
[package.dependencies]
-anyio = ">=3.0,<5.0"
certifi = "*"
h11 = ">=0.13,<0.15"
-sniffio = "==1.*"
[package.extras]
+asyncio = ["anyio (>=4.0,<5.0)"]
http2 = ["h2 (>=3,<5)"]
socks = ["socksio (==1.*)"]
+trio = ["trio (>=0.22.0,<0.24.0)"]
[[package]]
name = "httpx"
-version = "0.24.1"
+version = "0.26.0"
description = "The next generation HTTP client."
optional = false
-python-versions = ">=3.7"
+python-versions = ">=3.8"
files = [
- {file = "httpx-0.24.1-py3-none-any.whl", hash = "sha256:06781eb9ac53cde990577af654bd990a4949de37a28bdb4a230d434f3a30b9bd"},
- {file = "httpx-0.24.1.tar.gz", hash = "sha256:5853a43053df830c20f8110c5e69fe44d035d850b2dfe795e196f00fdb774bdd"},
+ {file = "httpx-0.26.0-py3-none-any.whl", hash = "sha256:8915f5a3627c4d47b73e8202457cb28f1266982d1159bd5779d86a80c0eab1cd"},
+ {file = "httpx-0.26.0.tar.gz", hash = "sha256:451b55c30d5185ea6b23c2c793abf9bb237d2a7dfb901ced6ff69ad37ec1dfaf"},
]
[package.dependencies]
+anyio = "*"
certifi = "*"
-httpcore = ">=0.15.0,<0.18.0"
+httpcore = "==1.*"
idna = "*"
sniffio = "*"
@@ -141,26 +139,6 @@ files = [
{file = "idna-3.6.tar.gz", hash = "sha256:9ecdbbd083b06798ae1e86adcbfe8ab1479cf864e4ee30fe4e46a003d12491ca"},
]
-[[package]]
-name = "importlib-metadata"
-version = "6.7.0"
-description = "Read metadata from Python packages"
-optional = false
-python-versions = ">=3.7"
-files = [
- {file = "importlib_metadata-6.7.0-py3-none-any.whl", hash = "sha256:cb52082e659e97afc5dac71e79de97d8681de3aa07ff18578330904a9d18e5b5"},
- {file = "importlib_metadata-6.7.0.tar.gz", hash = "sha256:1aaf550d4f73e5d6783e7acb77aec43d49da8017410afae93822cc9cca98c4d4"},
-]
-
-[package.dependencies]
-typing-extensions = {version = ">=3.6.4", markers = "python_version < \"3.8\""}
-zipp = ">=0.5"
-
-[package.extras]
-docs = ["furo", "jaraco.packaging (>=9)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-lint"]
-perf = ["ipython"]
-testing = ["flufl.flake8", "importlib-resources (>=1.3)", "packaging", "pyfakefs", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=1.3)", "pytest-mypy (>=0.9.1)", "pytest-perf (>=0.9.2)", "pytest-ruff"]
-
[[package]]
name = "iniconfig"
version = "2.0.0"
@@ -174,45 +152,49 @@ files = [
[[package]]
name = "mypy"
-version = "0.971"
+version = "1.8.0"
description = "Optional static typing for Python"
optional = false
-python-versions = ">=3.6"
+python-versions = ">=3.8"
files = [
- {file = "mypy-0.971-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:f2899a3cbd394da157194f913a931edfd4be5f274a88041c9dc2d9cdcb1c315c"},
- {file = "mypy-0.971-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:98e02d56ebe93981c41211c05adb630d1d26c14195d04d95e49cd97dbc046dc5"},
- {file = "mypy-0.971-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:19830b7dba7d5356d3e26e2427a2ec91c994cd92d983142cbd025ebe81d69cf3"},
- {file = "mypy-0.971-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:02ef476f6dcb86e6f502ae39a16b93285fef97e7f1ff22932b657d1ef1f28655"},
- {file = "mypy-0.971-cp310-cp310-win_amd64.whl", hash = "sha256:25c5750ba5609a0c7550b73a33deb314ecfb559c350bb050b655505e8aed4103"},
- {file = "mypy-0.971-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:d3348e7eb2eea2472db611486846742d5d52d1290576de99d59edeb7cd4a42ca"},
- {file = "mypy-0.971-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:3fa7a477b9900be9b7dd4bab30a12759e5abe9586574ceb944bc29cddf8f0417"},
- {file = "mypy-0.971-cp36-cp36m-win_amd64.whl", hash = "sha256:2ad53cf9c3adc43cf3bea0a7d01a2f2e86db9fe7596dfecb4496a5dda63cbb09"},
- {file = "mypy-0.971-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:855048b6feb6dfe09d3353466004490b1872887150c5bb5caad7838b57328cc8"},
- {file = "mypy-0.971-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:23488a14a83bca6e54402c2e6435467a4138785df93ec85aeff64c6170077fb0"},
- {file = "mypy-0.971-cp37-cp37m-win_amd64.whl", hash = "sha256:4b21e5b1a70dfb972490035128f305c39bc4bc253f34e96a4adf9127cf943eb2"},
- {file = "mypy-0.971-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:9796a2ba7b4b538649caa5cecd398d873f4022ed2333ffde58eaf604c4d2cb27"},
- {file = "mypy-0.971-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:5a361d92635ad4ada1b1b2d3630fc2f53f2127d51cf2def9db83cba32e47c856"},
- {file = "mypy-0.971-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:b793b899f7cf563b1e7044a5c97361196b938e92f0a4343a5d27966a53d2ec71"},
- {file = "mypy-0.971-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:d1ea5d12c8e2d266b5fb8c7a5d2e9c0219fedfeb493b7ed60cd350322384ac27"},
- {file = "mypy-0.971-cp38-cp38-win_amd64.whl", hash = "sha256:23c7ff43fff4b0df93a186581885c8512bc50fc4d4910e0f838e35d6bb6b5e58"},
- {file = "mypy-0.971-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:1f7656b69974a6933e987ee8ffb951d836272d6c0f81d727f1d0e2696074d9e6"},
- {file = "mypy-0.971-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:d2022bfadb7a5c2ef410d6a7c9763188afdb7f3533f22a0a32be10d571ee4bbe"},
- {file = "mypy-0.971-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:ef943c72a786b0f8d90fd76e9b39ce81fb7171172daf84bf43eaf937e9f220a9"},
- {file = "mypy-0.971-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:d744f72eb39f69312bc6c2abf8ff6656973120e2eb3f3ec4f758ed47e414a4bf"},
- {file = "mypy-0.971-cp39-cp39-win_amd64.whl", hash = "sha256:77a514ea15d3007d33a9e2157b0ba9c267496acf12a7f2b9b9f8446337aac5b0"},
- {file = "mypy-0.971-py3-none-any.whl", hash = "sha256:0d054ef16b071149917085f51f89555a576e2618d5d9dd70bd6eea6410af3ac9"},
- {file = "mypy-0.971.tar.gz", hash = "sha256:40b0f21484238269ae6a57200c807d80debc6459d444c0489a102d7c6a75fa56"},
+ {file = "mypy-1.8.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:485a8942f671120f76afffff70f259e1cd0f0cfe08f81c05d8816d958d4577d3"},
+ {file = "mypy-1.8.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:df9824ac11deaf007443e7ed2a4a26bebff98d2bc43c6da21b2b64185da011c4"},
+ {file = "mypy-1.8.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2afecd6354bbfb6e0160f4e4ad9ba6e4e003b767dd80d85516e71f2e955ab50d"},
+ {file = "mypy-1.8.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:8963b83d53ee733a6e4196954502b33567ad07dfd74851f32be18eb932fb1cb9"},
+ {file = "mypy-1.8.0-cp310-cp310-win_amd64.whl", hash = "sha256:e46f44b54ebddbeedbd3d5b289a893219065ef805d95094d16a0af6630f5d410"},
+ {file = "mypy-1.8.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:855fe27b80375e5c5878492f0729540db47b186509c98dae341254c8f45f42ae"},
+ {file = "mypy-1.8.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:4c886c6cce2d070bd7df4ec4a05a13ee20c0aa60cb587e8d1265b6c03cf91da3"},
+ {file = "mypy-1.8.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d19c413b3c07cbecf1f991e2221746b0d2a9410b59cb3f4fb9557f0365a1a817"},
+ {file = "mypy-1.8.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:9261ed810972061388918c83c3f5cd46079d875026ba97380f3e3978a72f503d"},
+ {file = "mypy-1.8.0-cp311-cp311-win_amd64.whl", hash = "sha256:51720c776d148bad2372ca21ca29256ed483aa9a4cdefefcef49006dff2a6835"},
+ {file = "mypy-1.8.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:52825b01f5c4c1c4eb0db253ec09c7aa17e1a7304d247c48b6f3599ef40db8bd"},
+ {file = "mypy-1.8.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:f5ac9a4eeb1ec0f1ccdc6f326bcdb464de5f80eb07fb38b5ddd7b0de6bc61e55"},
+ {file = "mypy-1.8.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:afe3fe972c645b4632c563d3f3eff1cdca2fa058f730df2b93a35e3b0c538218"},
+ {file = "mypy-1.8.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:42c6680d256ab35637ef88891c6bd02514ccb7e1122133ac96055ff458f93fc3"},
+ {file = "mypy-1.8.0-cp312-cp312-win_amd64.whl", hash = "sha256:720a5ca70e136b675af3af63db533c1c8c9181314d207568bbe79051f122669e"},
+ {file = "mypy-1.8.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:028cf9f2cae89e202d7b6593cd98db6759379f17a319b5faf4f9978d7084cdc6"},
+ {file = "mypy-1.8.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:4e6d97288757e1ddba10dd9549ac27982e3e74a49d8d0179fc14d4365c7add66"},
+ {file = "mypy-1.8.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7f1478736fcebb90f97e40aff11a5f253af890c845ee0c850fe80aa060a267c6"},
+ {file = "mypy-1.8.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:42419861b43e6962a649068a61f4a4839205a3ef525b858377a960b9e2de6e0d"},
+ {file = "mypy-1.8.0-cp38-cp38-win_amd64.whl", hash = "sha256:2b5b6c721bd4aabaadead3a5e6fa85c11c6c795e0c81a7215776ef8afc66de02"},
+ {file = "mypy-1.8.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:5c1538c38584029352878a0466f03a8ee7547d7bd9f641f57a0f3017a7c905b8"},
+ {file = "mypy-1.8.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:4ef4be7baf08a203170f29e89d79064463b7fc7a0908b9d0d5114e8009c3a259"},
+ {file = "mypy-1.8.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7178def594014aa6c35a8ff411cf37d682f428b3b5617ca79029d8ae72f5402b"},
+ {file = "mypy-1.8.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:ab3c84fa13c04aeeeabb2a7f67a25ef5d77ac9d6486ff33ded762ef353aa5592"},
+ {file = "mypy-1.8.0-cp39-cp39-win_amd64.whl", hash = "sha256:99b00bc72855812a60d253420d8a2eae839b0afa4938f09f4d2aa9bb4654263a"},
+ {file = "mypy-1.8.0-py3-none-any.whl", hash = "sha256:538fd81bb5e430cc1381a443971c0475582ff9f434c16cd46d2c66763ce85d9d"},
+ {file = "mypy-1.8.0.tar.gz", hash = "sha256:6ff8b244d7085a0b425b56d327b480c3b29cafbd2eff27316a004f9a7391ae07"},
]
[package.dependencies]
-mypy-extensions = ">=0.4.3"
+mypy-extensions = ">=1.0.0"
tomli = {version = ">=1.1.0", markers = "python_version < \"3.11\""}
-typed-ast = {version = ">=1.4.0,<2", markers = "python_version < \"3.8\""}
-typing-extensions = ">=3.10"
+typing-extensions = ">=4.1.0"
[package.extras]
dmypy = ["psutil (>=4.0)"]
-python2 = ["typed-ast (>=1.4.0,<2)"]
+install-types = ["pip"]
+mypyc = ["setuptools (>=50)"]
reports = ["lxml"]
[[package]]
@@ -239,36 +221,33 @@ files = [
[[package]]
name = "pluggy"
-version = "1.2.0"
+version = "1.4.0"
description = "plugin and hook calling mechanisms for python"
optional = false
-python-versions = ">=3.7"
+python-versions = ">=3.8"
files = [
- {file = "pluggy-1.2.0-py3-none-any.whl", hash = "sha256:c2fd55a7d7a3863cba1a013e4e2414658b1d07b6bc57b3919e0c63c9abb99849"},
- {file = "pluggy-1.2.0.tar.gz", hash = "sha256:d12f0c4b579b15f5e054301bb226ee85eeeba08ffec228092f8defbaa3a4c4b3"},
+ {file = "pluggy-1.4.0-py3-none-any.whl", hash = "sha256:7db9f7b503d67d1c5b95f59773ebb58a8c1c288129a88665838012cfb07b8981"},
+ {file = "pluggy-1.4.0.tar.gz", hash = "sha256:8c85c2876142a764e5b7548e7d9a0e0ddb46f5185161049a79b7e974454223be"},
]
-[package.dependencies]
-importlib-metadata = {version = ">=0.12", markers = "python_version < \"3.8\""}
-
[package.extras]
dev = ["pre-commit", "tox"]
testing = ["pytest", "pytest-benchmark"]
[[package]]
name = "pydantic"
-version = "2.4.2"
+version = "2.6.1"
description = "Data validation using Python type hints"
optional = false
-python-versions = ">=3.7"
+python-versions = ">=3.8"
files = [
- {file = "pydantic-2.4.2-py3-none-any.whl", hash = "sha256:bc3ddf669d234f4220e6e1c4d96b061abe0998185a8d7855c0126782b7abc8c1"},
- {file = "pydantic-2.4.2.tar.gz", hash = "sha256:94f336138093a5d7f426aac732dcfe7ab4eb4da243c88f891d65deb4a2556ee7"},
+ {file = "pydantic-2.6.1-py3-none-any.whl", hash = "sha256:0b6a909df3192245cb736509a92ff69e4fef76116feffec68e93a567347bae6f"},
+ {file = "pydantic-2.6.1.tar.gz", hash = "sha256:4fd5c182a2488dc63e6d32737ff19937888001e2a6d86e94b3f233104a5d1fa9"},
]
[package.dependencies]
annotated-types = ">=0.4.0"
-pydantic-core = "2.10.1"
+pydantic-core = "2.16.2"
typing-extensions = ">=4.6.1"
[package.extras]
@@ -276,117 +255,90 @@ email = ["email-validator (>=2.0.0)"]
[[package]]
name = "pydantic-core"
-version = "2.10.1"
+version = "2.16.2"
description = ""
optional = false
-python-versions = ">=3.7"
+python-versions = ">=3.8"
files = [
- {file = "pydantic_core-2.10.1-cp310-cp310-macosx_10_7_x86_64.whl", hash = "sha256:d64728ee14e667ba27c66314b7d880b8eeb050e58ffc5fec3b7a109f8cddbd63"},
- {file = "pydantic_core-2.10.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:48525933fea744a3e7464c19bfede85df4aba79ce90c60b94d8b6e1eddd67096"},
- {file = "pydantic_core-2.10.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ef337945bbd76cce390d1b2496ccf9f90b1c1242a3a7bc242ca4a9fc5993427a"},
- {file = "pydantic_core-2.10.1-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:a1392e0638af203cee360495fd2cfdd6054711f2db5175b6e9c3c461b76f5175"},
- {file = "pydantic_core-2.10.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:0675ba5d22de54d07bccde38997e780044dcfa9a71aac9fd7d4d7a1d2e3e65f7"},
- {file = "pydantic_core-2.10.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:128552af70a64660f21cb0eb4876cbdadf1a1f9d5de820fed6421fa8de07c893"},
- {file = "pydantic_core-2.10.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8f6e6aed5818c264412ac0598b581a002a9f050cb2637a84979859e70197aa9e"},
- {file = "pydantic_core-2.10.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:ecaac27da855b8d73f92123e5f03612b04c5632fd0a476e469dfc47cd37d6b2e"},
- {file = "pydantic_core-2.10.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:b3c01c2fb081fced3bbb3da78510693dc7121bb893a1f0f5f4b48013201f362e"},
- {file = "pydantic_core-2.10.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:92f675fefa977625105708492850bcbc1182bfc3e997f8eecb866d1927c98ae6"},
- {file = "pydantic_core-2.10.1-cp310-none-win32.whl", hash = "sha256:420a692b547736a8d8703c39ea935ab5d8f0d2573f8f123b0a294e49a73f214b"},
- {file = "pydantic_core-2.10.1-cp310-none-win_amd64.whl", hash = "sha256:0880e239827b4b5b3e2ce05e6b766a7414e5f5aedc4523be6b68cfbc7f61c5d0"},
- {file = "pydantic_core-2.10.1-cp311-cp311-macosx_10_7_x86_64.whl", hash = "sha256:073d4a470b195d2b2245d0343569aac7e979d3a0dcce6c7d2af6d8a920ad0bea"},
- {file = "pydantic_core-2.10.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:600d04a7b342363058b9190d4e929a8e2e715c5682a70cc37d5ded1e0dd370b4"},
- {file = "pydantic_core-2.10.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:39215d809470f4c8d1881758575b2abfb80174a9e8daf8f33b1d4379357e417c"},
- {file = "pydantic_core-2.10.1-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:eeb3d3d6b399ffe55f9a04e09e635554012f1980696d6b0aca3e6cf42a17a03b"},
- {file = "pydantic_core-2.10.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a7a7902bf75779bc12ccfc508bfb7a4c47063f748ea3de87135d433a4cca7a2f"},
- {file = "pydantic_core-2.10.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3625578b6010c65964d177626fde80cf60d7f2e297d56b925cb5cdeda6e9925a"},
- {file = "pydantic_core-2.10.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:caa48fc31fc7243e50188197b5f0c4228956f97b954f76da157aae7f67269ae8"},
- {file = "pydantic_core-2.10.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:07ec6d7d929ae9c68f716195ce15e745b3e8fa122fc67698ac6498d802ed0fa4"},
- {file = "pydantic_core-2.10.1-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:e6f31a17acede6a8cd1ae2d123ce04d8cca74056c9d456075f4f6f85de055607"},
- {file = "pydantic_core-2.10.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:d8f1ebca515a03e5654f88411420fea6380fc841d1bea08effb28184e3d4899f"},
- {file = "pydantic_core-2.10.1-cp311-none-win32.whl", hash = "sha256:6db2eb9654a85ada248afa5a6db5ff1cf0f7b16043a6b070adc4a5be68c716d6"},
- {file = "pydantic_core-2.10.1-cp311-none-win_amd64.whl", hash = "sha256:4a5be350f922430997f240d25f8219f93b0c81e15f7b30b868b2fddfc2d05f27"},
- {file = "pydantic_core-2.10.1-cp311-none-win_arm64.whl", hash = "sha256:5fdb39f67c779b183b0c853cd6b45f7db84b84e0571b3ef1c89cdb1dfc367325"},
- {file = "pydantic_core-2.10.1-cp312-cp312-macosx_10_7_x86_64.whl", hash = "sha256:b1f22a9ab44de5f082216270552aa54259db20189e68fc12484873d926426921"},
- {file = "pydantic_core-2.10.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:8572cadbf4cfa95fb4187775b5ade2eaa93511f07947b38f4cd67cf10783b118"},
- {file = "pydantic_core-2.10.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:db9a28c063c7c00844ae42a80203eb6d2d6bbb97070cfa00194dff40e6f545ab"},
- {file = "pydantic_core-2.10.1-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:0e2a35baa428181cb2270a15864ec6286822d3576f2ed0f4cd7f0c1708472aff"},
- {file = "pydantic_core-2.10.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:05560ab976012bf40f25d5225a58bfa649bb897b87192a36c6fef1ab132540d7"},
- {file = "pydantic_core-2.10.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d6495008733c7521a89422d7a68efa0a0122c99a5861f06020ef5b1f51f9ba7c"},
- {file = "pydantic_core-2.10.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:14ac492c686defc8e6133e3a2d9eaf5261b3df26b8ae97450c1647286750b901"},
- {file = "pydantic_core-2.10.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:8282bab177a9a3081fd3d0a0175a07a1e2bfb7fcbbd949519ea0980f8a07144d"},
- {file = "pydantic_core-2.10.1-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:aafdb89fdeb5fe165043896817eccd6434aee124d5ee9b354f92cd574ba5e78f"},
- {file = "pydantic_core-2.10.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:f6defd966ca3b187ec6c366604e9296f585021d922e666b99c47e78738b5666c"},
- {file = "pydantic_core-2.10.1-cp312-none-win32.whl", hash = "sha256:7c4d1894fe112b0864c1fa75dffa045720a194b227bed12f4be7f6045b25209f"},
- {file = "pydantic_core-2.10.1-cp312-none-win_amd64.whl", hash = "sha256:5994985da903d0b8a08e4935c46ed8daf5be1cf217489e673910951dc533d430"},
- {file = "pydantic_core-2.10.1-cp312-none-win_arm64.whl", hash = "sha256:0d8a8adef23d86d8eceed3e32e9cca8879c7481c183f84ed1a8edc7df073af94"},
- {file = "pydantic_core-2.10.1-cp37-cp37m-macosx_10_7_x86_64.whl", hash = "sha256:9badf8d45171d92387410b04639d73811b785b5161ecadabf056ea14d62d4ede"},
- {file = "pydantic_core-2.10.1-cp37-cp37m-macosx_11_0_arm64.whl", hash = "sha256:ebedb45b9feb7258fac0a268a3f6bec0a2ea4d9558f3d6f813f02ff3a6dc6698"},
- {file = "pydantic_core-2.10.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cfe1090245c078720d250d19cb05d67e21a9cd7c257698ef139bc41cf6c27b4f"},
- {file = "pydantic_core-2.10.1-cp37-cp37m-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:e357571bb0efd65fd55f18db0a2fb0ed89d0bb1d41d906b138f088933ae618bb"},
- {file = "pydantic_core-2.10.1-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b3dcd587b69bbf54fc04ca157c2323b8911033e827fffaecf0cafa5a892a0904"},
- {file = "pydantic_core-2.10.1-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9c120c9ce3b163b985a3b966bb701114beb1da4b0468b9b236fc754783d85aa3"},
- {file = "pydantic_core-2.10.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:15d6bca84ffc966cc9976b09a18cf9543ed4d4ecbd97e7086f9ce9327ea48891"},
- {file = "pydantic_core-2.10.1-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:5cabb9710f09d5d2e9e2748c3e3e20d991a4c5f96ed8f1132518f54ab2967221"},
- {file = "pydantic_core-2.10.1-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:82f55187a5bebae7d81d35b1e9aaea5e169d44819789837cdd4720d768c55d15"},
- {file = "pydantic_core-2.10.1-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:1d40f55222b233e98e3921df7811c27567f0e1a4411b93d4c5c0f4ce131bc42f"},
- {file = "pydantic_core-2.10.1-cp37-none-win32.whl", hash = "sha256:14e09ff0b8fe6e46b93d36a878f6e4a3a98ba5303c76bb8e716f4878a3bee92c"},
- {file = "pydantic_core-2.10.1-cp37-none-win_amd64.whl", hash = "sha256:1396e81b83516b9d5c9e26a924fa69164156c148c717131f54f586485ac3c15e"},
- {file = "pydantic_core-2.10.1-cp38-cp38-macosx_10_7_x86_64.whl", hash = "sha256:6835451b57c1b467b95ffb03a38bb75b52fb4dc2762bb1d9dbed8de31ea7d0fc"},
- {file = "pydantic_core-2.10.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:b00bc4619f60c853556b35f83731bd817f989cba3e97dc792bb8c97941b8053a"},
- {file = "pydantic_core-2.10.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0fa467fd300a6f046bdb248d40cd015b21b7576c168a6bb20aa22e595c8ffcdd"},
- {file = "pydantic_core-2.10.1-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:d99277877daf2efe074eae6338453a4ed54a2d93fb4678ddfe1209a0c93a2468"},
- {file = "pydantic_core-2.10.1-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:fa7db7558607afeccb33c0e4bf1c9a9a835e26599e76af6fe2fcea45904083a6"},
- {file = "pydantic_core-2.10.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:aad7bd686363d1ce4ee930ad39f14e1673248373f4a9d74d2b9554f06199fb58"},
- {file = "pydantic_core-2.10.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:443fed67d33aa85357464f297e3d26e570267d1af6fef1c21ca50921d2976302"},
- {file = "pydantic_core-2.10.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:042462d8d6ba707fd3ce9649e7bf268633a41018d6a998fb5fbacb7e928a183e"},
- {file = "pydantic_core-2.10.1-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:ecdbde46235f3d560b18be0cb706c8e8ad1b965e5c13bbba7450c86064e96561"},
- {file = "pydantic_core-2.10.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:ed550ed05540c03f0e69e6d74ad58d026de61b9eaebebbaaf8873e585cbb18de"},
- {file = "pydantic_core-2.10.1-cp38-none-win32.whl", hash = "sha256:8cdbbd92154db2fec4ec973d45c565e767ddc20aa6dbaf50142676484cbff8ee"},
- {file = "pydantic_core-2.10.1-cp38-none-win_amd64.whl", hash = "sha256:9f6f3e2598604956480f6c8aa24a3384dbf6509fe995d97f6ca6103bb8c2534e"},
- {file = "pydantic_core-2.10.1-cp39-cp39-macosx_10_7_x86_64.whl", hash = "sha256:655f8f4c8d6a5963c9a0687793da37b9b681d9ad06f29438a3b2326d4e6b7970"},
- {file = "pydantic_core-2.10.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:e570ffeb2170e116a5b17e83f19911020ac79d19c96f320cbfa1fa96b470185b"},
- {file = "pydantic_core-2.10.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:64322bfa13e44c6c30c518729ef08fda6026b96d5c0be724b3c4ae4da939f875"},
- {file = "pydantic_core-2.10.1-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:485a91abe3a07c3a8d1e082ba29254eea3e2bb13cbbd4351ea4e5a21912cc9b0"},
- {file = "pydantic_core-2.10.1-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f7c2b8eb9fc872e68b46eeaf835e86bccc3a58ba57d0eedc109cbb14177be531"},
- {file = "pydantic_core-2.10.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a5cb87bdc2e5f620693148b5f8f842d293cae46c5f15a1b1bf7ceeed324a740c"},
- {file = "pydantic_core-2.10.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:25bd966103890ccfa028841a8f30cebcf5875eeac8c4bde4fe221364c92f0c9a"},
- {file = "pydantic_core-2.10.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:f323306d0556351735b54acbf82904fe30a27b6a7147153cbe6e19aaaa2aa429"},
- {file = "pydantic_core-2.10.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:0c27f38dc4fbf07b358b2bc90edf35e82d1703e22ff2efa4af4ad5de1b3833e7"},
- {file = "pydantic_core-2.10.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:f1365e032a477c1430cfe0cf2856679529a2331426f8081172c4a74186f1d595"},
- {file = "pydantic_core-2.10.1-cp39-none-win32.whl", hash = "sha256:a1c311fd06ab3b10805abb72109f01a134019739bd3286b8ae1bc2fc4e50c07a"},
- {file = "pydantic_core-2.10.1-cp39-none-win_amd64.whl", hash = "sha256:ae8a8843b11dc0b03b57b52793e391f0122e740de3df1474814c700d2622950a"},
- {file = "pydantic_core-2.10.1-pp310-pypy310_pp73-macosx_10_7_x86_64.whl", hash = "sha256:d43002441932f9a9ea5d6f9efaa2e21458221a3a4b417a14027a1d530201ef1b"},
- {file = "pydantic_core-2.10.1-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:fcb83175cc4936a5425dde3356f079ae03c0802bbdf8ff82c035f8a54b333521"},
- {file = "pydantic_core-2.10.1-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:962ed72424bf1f72334e2f1e61b68f16c0e596f024ca7ac5daf229f7c26e4208"},
- {file = "pydantic_core-2.10.1-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2cf5bb4dd67f20f3bbc1209ef572a259027c49e5ff694fa56bed62959b41e1f9"},
- {file = "pydantic_core-2.10.1-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:e544246b859f17373bed915182ab841b80849ed9cf23f1f07b73b7c58baee5fb"},
- {file = "pydantic_core-2.10.1-pp310-pypy310_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:c0877239307b7e69d025b73774e88e86ce82f6ba6adf98f41069d5b0b78bd1bf"},
- {file = "pydantic_core-2.10.1-pp310-pypy310_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:53df009d1e1ba40f696f8995683e067e3967101d4bb4ea6f667931b7d4a01357"},
- {file = "pydantic_core-2.10.1-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:a1254357f7e4c82e77c348dabf2d55f1d14d19d91ff025004775e70a6ef40ada"},
- {file = "pydantic_core-2.10.1-pp37-pypy37_pp73-macosx_10_7_x86_64.whl", hash = "sha256:524ff0ca3baea164d6d93a32c58ac79eca9f6cf713586fdc0adb66a8cdeab96a"},
- {file = "pydantic_core-2.10.1-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3f0ac9fb8608dbc6eaf17956bf623c9119b4db7dbb511650910a82e261e6600f"},
- {file = "pydantic_core-2.10.1-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:320f14bd4542a04ab23747ff2c8a778bde727158b606e2661349557f0770711e"},
- {file = "pydantic_core-2.10.1-pp37-pypy37_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:63974d168b6233b4ed6a0046296803cb13c56637a7b8106564ab575926572a55"},
- {file = "pydantic_core-2.10.1-pp37-pypy37_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:417243bf599ba1f1fef2bb8c543ceb918676954734e2dcb82bf162ae9d7bd514"},
- {file = "pydantic_core-2.10.1-pp37-pypy37_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:dda81e5ec82485155a19d9624cfcca9be88a405e2857354e5b089c2a982144b2"},
- {file = "pydantic_core-2.10.1-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:14cfbb00959259e15d684505263d5a21732b31248a5dd4941f73a3be233865b9"},
- {file = "pydantic_core-2.10.1-pp38-pypy38_pp73-macosx_10_7_x86_64.whl", hash = "sha256:631cb7415225954fdcc2a024119101946793e5923f6c4d73a5914d27eb3d3a05"},
- {file = "pydantic_core-2.10.1-pp38-pypy38_pp73-macosx_11_0_arm64.whl", hash = "sha256:bec7dd208a4182e99c5b6c501ce0b1f49de2802448d4056091f8e630b28e9a52"},
- {file = "pydantic_core-2.10.1-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:149b8a07712f45b332faee1a2258d8ef1fb4a36f88c0c17cb687f205c5dc6e7d"},
- {file = "pydantic_core-2.10.1-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4d966c47f9dd73c2d32a809d2be529112d509321c5310ebf54076812e6ecd884"},
- {file = "pydantic_core-2.10.1-pp38-pypy38_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:7eb037106f5c6b3b0b864ad226b0b7ab58157124161d48e4b30c4a43fef8bc4b"},
- {file = "pydantic_core-2.10.1-pp38-pypy38_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:154ea7c52e32dce13065dbb20a4a6f0cc012b4f667ac90d648d36b12007fa9f7"},
- {file = "pydantic_core-2.10.1-pp38-pypy38_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:e562617a45b5a9da5be4abe72b971d4f00bf8555eb29bb91ec2ef2be348cd132"},
- {file = "pydantic_core-2.10.1-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:f23b55eb5464468f9e0e9a9935ce3ed2a870608d5f534025cd5536bca25b1402"},
- {file = "pydantic_core-2.10.1-pp39-pypy39_pp73-macosx_10_7_x86_64.whl", hash = "sha256:e9121b4009339b0f751955baf4543a0bfd6bc3f8188f8056b1a25a2d45099934"},
- {file = "pydantic_core-2.10.1-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:0523aeb76e03f753b58be33b26540880bac5aa54422e4462404c432230543f33"},
- {file = "pydantic_core-2.10.1-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2e0e2959ef5d5b8dc9ef21e1a305a21a36e254e6a34432d00c72a92fdc5ecda5"},
- {file = "pydantic_core-2.10.1-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:da01bec0a26befab4898ed83b362993c844b9a607a86add78604186297eb047e"},
- {file = "pydantic_core-2.10.1-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:f2e9072d71c1f6cfc79a36d4484c82823c560e6f5599c43c1ca6b5cdbd54f881"},
- {file = "pydantic_core-2.10.1-pp39-pypy39_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:f36a3489d9e28fe4b67be9992a23029c3cec0babc3bd9afb39f49844a8c721c5"},
- {file = "pydantic_core-2.10.1-pp39-pypy39_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:f64f82cc3443149292b32387086d02a6c7fb39b8781563e0ca7b8d7d9cf72bd7"},
- {file = "pydantic_core-2.10.1-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:b4a6db486ac8e99ae696e09efc8b2b9fea67b63c8f88ba7a1a16c24a057a0776"},
- {file = "pydantic_core-2.10.1.tar.gz", hash = "sha256:0f8682dbdd2f67f8e1edddcbffcc29f60a6182b4901c367fc8c1c40d30bb0a82"},
+ {file = "pydantic_core-2.16.2-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:3fab4e75b8c525a4776e7630b9ee48aea50107fea6ca9f593c98da3f4d11bf7c"},
+ {file = "pydantic_core-2.16.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:8bde5b48c65b8e807409e6f20baee5d2cd880e0fad00b1a811ebc43e39a00ab2"},
+ {file = "pydantic_core-2.16.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2924b89b16420712e9bb8192396026a8fbd6d8726224f918353ac19c4c043d2a"},
+ {file = "pydantic_core-2.16.2-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:16aa02e7a0f539098e215fc193c8926c897175d64c7926d00a36188917717a05"},
+ {file = "pydantic_core-2.16.2-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:936a787f83db1f2115ee829dd615c4f684ee48ac4de5779ab4300994d8af325b"},
+ {file = "pydantic_core-2.16.2-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:459d6be6134ce3b38e0ef76f8a672924460c455d45f1ad8fdade36796df1ddc8"},
+ {file = "pydantic_core-2.16.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4f9ee4febb249c591d07b2d4dd36ebcad0ccd128962aaa1801508320896575ef"},
+ {file = "pydantic_core-2.16.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:40a0bd0bed96dae5712dab2aba7d334a6c67cbcac2ddfca7dbcc4a8176445990"},
+ {file = "pydantic_core-2.16.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:870dbfa94de9b8866b37b867a2cb37a60c401d9deb4a9ea392abf11a1f98037b"},
+ {file = "pydantic_core-2.16.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:308974fdf98046db28440eb3377abba274808bf66262e042c412eb2adf852731"},
+ {file = "pydantic_core-2.16.2-cp310-none-win32.whl", hash = "sha256:a477932664d9611d7a0816cc3c0eb1f8856f8a42435488280dfbf4395e141485"},
+ {file = "pydantic_core-2.16.2-cp310-none-win_amd64.whl", hash = "sha256:8f9142a6ed83d90c94a3efd7af8873bf7cefed2d3d44387bf848888482e2d25f"},
+ {file = "pydantic_core-2.16.2-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:406fac1d09edc613020ce9cf3f2ccf1a1b2f57ab00552b4c18e3d5276c67eb11"},
+ {file = "pydantic_core-2.16.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:ce232a6170dd6532096cadbf6185271e4e8c70fc9217ebe105923ac105da9978"},
+ {file = "pydantic_core-2.16.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a90fec23b4b05a09ad988e7a4f4e081711a90eb2a55b9c984d8b74597599180f"},
+ {file = "pydantic_core-2.16.2-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:8aafeedb6597a163a9c9727d8a8bd363a93277701b7bfd2749fbefee2396469e"},
+ {file = "pydantic_core-2.16.2-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9957433c3a1b67bdd4c63717eaf174ebb749510d5ea612cd4e83f2d9142f3fc8"},
+ {file = "pydantic_core-2.16.2-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b0d7a9165167269758145756db43a133608a531b1e5bb6a626b9ee24bc38a8f7"},
+ {file = "pydantic_core-2.16.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dffaf740fe2e147fedcb6b561353a16243e654f7fe8e701b1b9db148242e1272"},
+ {file = "pydantic_core-2.16.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:f8ed79883b4328b7f0bd142733d99c8e6b22703e908ec63d930b06be3a0e7113"},
+ {file = "pydantic_core-2.16.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:cf903310a34e14651c9de056fcc12ce090560864d5a2bb0174b971685684e1d8"},
+ {file = "pydantic_core-2.16.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:46b0d5520dbcafea9a8645a8164658777686c5c524d381d983317d29687cce97"},
+ {file = "pydantic_core-2.16.2-cp311-none-win32.whl", hash = "sha256:70651ff6e663428cea902dac297066d5c6e5423fda345a4ca62430575364d62b"},
+ {file = "pydantic_core-2.16.2-cp311-none-win_amd64.whl", hash = "sha256:98dc6f4f2095fc7ad277782a7c2c88296badcad92316b5a6e530930b1d475ebc"},
+ {file = "pydantic_core-2.16.2-cp311-none-win_arm64.whl", hash = "sha256:ef6113cd31411eaf9b39fc5a8848e71c72656fd418882488598758b2c8c6dfa0"},
+ {file = "pydantic_core-2.16.2-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:88646cae28eb1dd5cd1e09605680c2b043b64d7481cdad7f5003ebef401a3039"},
+ {file = "pydantic_core-2.16.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:7b883af50eaa6bb3299780651e5be921e88050ccf00e3e583b1e92020333304b"},
+ {file = "pydantic_core-2.16.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7bf26c2e2ea59d32807081ad51968133af3025c4ba5753e6a794683d2c91bf6e"},
+ {file = "pydantic_core-2.16.2-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:99af961d72ac731aae2a1b55ccbdae0733d816f8bfb97b41909e143de735f522"},
+ {file = "pydantic_core-2.16.2-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:02906e7306cb8c5901a1feb61f9ab5e5c690dbbeaa04d84c1b9ae2a01ebe9379"},
+ {file = "pydantic_core-2.16.2-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d5362d099c244a2d2f9659fb3c9db7c735f0004765bbe06b99be69fbd87c3f15"},
+ {file = "pydantic_core-2.16.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3ac426704840877a285d03a445e162eb258924f014e2f074e209d9b4ff7bf380"},
+ {file = "pydantic_core-2.16.2-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:b94cbda27267423411c928208e89adddf2ea5dd5f74b9528513f0358bba019cb"},
+ {file = "pydantic_core-2.16.2-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:6db58c22ac6c81aeac33912fb1af0e930bc9774166cdd56eade913d5f2fff35e"},
+ {file = "pydantic_core-2.16.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:396fdf88b1b503c9c59c84a08b6833ec0c3b5ad1a83230252a9e17b7dfb4cffc"},
+ {file = "pydantic_core-2.16.2-cp312-none-win32.whl", hash = "sha256:7c31669e0c8cc68400ef0c730c3a1e11317ba76b892deeefaf52dcb41d56ed5d"},
+ {file = "pydantic_core-2.16.2-cp312-none-win_amd64.whl", hash = "sha256:a3b7352b48fbc8b446b75f3069124e87f599d25afb8baa96a550256c031bb890"},
+ {file = "pydantic_core-2.16.2-cp312-none-win_arm64.whl", hash = "sha256:a9e523474998fb33f7c1a4d55f5504c908d57add624599e095c20fa575b8d943"},
+ {file = "pydantic_core-2.16.2-cp38-cp38-macosx_10_12_x86_64.whl", hash = "sha256:ae34418b6b389d601b31153b84dce480351a352e0bb763684a1b993d6be30f17"},
+ {file = "pydantic_core-2.16.2-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:732bd062c9e5d9582a30e8751461c1917dd1ccbdd6cafb032f02c86b20d2e7ec"},
+ {file = "pydantic_core-2.16.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e4b52776a2e3230f4854907a1e0946eec04d41b1fc64069ee774876bbe0eab55"},
+ {file = "pydantic_core-2.16.2-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:ef551c053692b1e39e3f7950ce2296536728871110e7d75c4e7753fb30ca87f4"},
+ {file = "pydantic_core-2.16.2-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ebb892ed8599b23fa8f1799e13a12c87a97a6c9d0f497525ce9858564c4575a4"},
+ {file = "pydantic_core-2.16.2-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:aa6c8c582036275997a733427b88031a32ffa5dfc3124dc25a730658c47a572f"},
+ {file = "pydantic_core-2.16.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e4ba0884a91f1aecce75202473ab138724aa4fb26d7707f2e1fa6c3e68c84fbf"},
+ {file = "pydantic_core-2.16.2-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:7924e54f7ce5d253d6160090ddc6df25ed2feea25bfb3339b424a9dd591688bc"},
+ {file = "pydantic_core-2.16.2-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:69a7b96b59322a81c2203be537957313b07dd333105b73db0b69212c7d867b4b"},
+ {file = "pydantic_core-2.16.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:7e6231aa5bdacda78e96ad7b07d0c312f34ba35d717115f4b4bff6cb87224f0f"},
+ {file = "pydantic_core-2.16.2-cp38-none-win32.whl", hash = "sha256:41dac3b9fce187a25c6253ec79a3f9e2a7e761eb08690e90415069ea4a68ff7a"},
+ {file = "pydantic_core-2.16.2-cp38-none-win_amd64.whl", hash = "sha256:f685dbc1fdadb1dcd5b5e51e0a378d4685a891b2ddaf8e2bba89bd3a7144e44a"},
+ {file = "pydantic_core-2.16.2-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:55749f745ebf154c0d63d46c8c58594d8894b161928aa41adbb0709c1fe78b77"},
+ {file = "pydantic_core-2.16.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:b30b0dd58a4509c3bd7eefddf6338565c4905406aee0c6e4a5293841411a1286"},
+ {file = "pydantic_core-2.16.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:18de31781cdc7e7b28678df7c2d7882f9692ad060bc6ee3c94eb15a5d733f8f7"},
+ {file = "pydantic_core-2.16.2-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:5864b0242f74b9dd0b78fd39db1768bc3f00d1ffc14e596fd3e3f2ce43436a33"},
+ {file = "pydantic_core-2.16.2-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b8f9186ca45aee030dc8234118b9c0784ad91a0bb27fc4e7d9d6608a5e3d386c"},
+ {file = "pydantic_core-2.16.2-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:cc6f6c9be0ab6da37bc77c2dda5f14b1d532d5dbef00311ee6e13357a418e646"},
+ {file = "pydantic_core-2.16.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:aa057095f621dad24a1e906747179a69780ef45cc8f69e97463692adbcdae878"},
+ {file = "pydantic_core-2.16.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:6ad84731a26bcfb299f9eab56c7932d46f9cad51c52768cace09e92a19e4cf55"},
+ {file = "pydantic_core-2.16.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:3b052c753c4babf2d1edc034c97851f867c87d6f3ea63a12e2700f159f5c41c3"},
+ {file = "pydantic_core-2.16.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:e0f686549e32ccdb02ae6f25eee40cc33900910085de6aa3790effd391ae10c2"},
+ {file = "pydantic_core-2.16.2-cp39-none-win32.whl", hash = "sha256:7afb844041e707ac9ad9acad2188a90bffce2c770e6dc2318be0c9916aef1469"},
+ {file = "pydantic_core-2.16.2-cp39-none-win_amd64.whl", hash = "sha256:9da90d393a8227d717c19f5397688a38635afec89f2e2d7af0df037f3249c39a"},
+ {file = "pydantic_core-2.16.2-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:5f60f920691a620b03082692c378661947d09415743e437a7478c309eb0e4f82"},
+ {file = "pydantic_core-2.16.2-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:47924039e785a04d4a4fa49455e51b4eb3422d6eaacfde9fc9abf8fdef164e8a"},
+ {file = "pydantic_core-2.16.2-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e6294e76b0380bb7a61eb8a39273c40b20beb35e8c87ee101062834ced19c545"},
+ {file = "pydantic_core-2.16.2-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fe56851c3f1d6f5384b3051c536cc81b3a93a73faf931f404fef95217cf1e10d"},
+ {file = "pydantic_core-2.16.2-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:9d776d30cde7e541b8180103c3f294ef7c1862fd45d81738d156d00551005784"},
+ {file = "pydantic_core-2.16.2-pp310-pypy310_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:72f7919af5de5ecfaf1eba47bf9a5d8aa089a3340277276e5636d16ee97614d7"},
+ {file = "pydantic_core-2.16.2-pp310-pypy310_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:4bfcbde6e06c56b30668a0c872d75a7ef3025dc3c1823a13cf29a0e9b33f67e8"},
+ {file = "pydantic_core-2.16.2-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:ff7c97eb7a29aba230389a2661edf2e9e06ce616c7e35aa764879b6894a44b25"},
+ {file = "pydantic_core-2.16.2-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:9b5f13857da99325dcabe1cc4e9e6a3d7b2e2c726248ba5dd4be3e8e4a0b6d0e"},
+ {file = "pydantic_core-2.16.2-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:a7e41e3ada4cca5f22b478c08e973c930e5e6c7ba3588fb8e35f2398cdcc1545"},
+ {file = "pydantic_core-2.16.2-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:60eb8ceaa40a41540b9acae6ae7c1f0a67d233c40dc4359c256ad2ad85bdf5e5"},
+ {file = "pydantic_core-2.16.2-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7beec26729d496a12fd23cf8da9944ee338c8b8a17035a560b585c36fe81af20"},
+ {file = "pydantic_core-2.16.2-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:22c5f022799f3cd6741e24f0443ead92ef42be93ffda0d29b2597208c94c3753"},
+ {file = "pydantic_core-2.16.2-pp39-pypy39_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:eca58e319f4fd6df004762419612122b2c7e7d95ffafc37e890252f869f3fb2a"},
+ {file = "pydantic_core-2.16.2-pp39-pypy39_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:ed957db4c33bc99895f3a1672eca7e80e8cda8bd1e29a80536b4ec2153fa9804"},
+ {file = "pydantic_core-2.16.2-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:459c0d338cc55d099798618f714b21b7ece17eb1a87879f2da20a3ff4c7628e2"},
+ {file = "pydantic_core-2.16.2.tar.gz", hash = "sha256:0ba503850d8b8dcc18391f10de896ae51d37fe5fe43dbfb6a35c5c5cad271a06"},
]
[package.dependencies]
@@ -406,7 +358,6 @@ files = [
[package.dependencies]
colorama = {version = "*", markers = "sys_platform == \"win32\""}
exceptiongroup = {version = ">=1.0.0rc8", markers = "python_version < \"3.11\""}
-importlib-metadata = {version = ">=0.12", markers = "python_version < \"3.8\""}
iniconfig = "*"
packaging = "*"
pluggy = ">=0.12,<2.0"
@@ -437,83 +388,18 @@ files = [
{file = "tomli-2.0.1.tar.gz", hash = "sha256:de526c12914f0c550d15924c62d72abc48d6fe7364aa87328337a31007fe8a4f"},
]
-[[package]]
-name = "typed-ast"
-version = "1.5.5"
-description = "a fork of Python 2 and 3 ast modules with type comment support"
-optional = false
-python-versions = ">=3.6"
-files = [
- {file = "typed_ast-1.5.5-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:4bc1efe0ce3ffb74784e06460f01a223ac1f6ab31c6bc0376a21184bf5aabe3b"},
- {file = "typed_ast-1.5.5-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:5f7a8c46a8b333f71abd61d7ab9255440d4a588f34a21f126bbfc95f6049e686"},
- {file = "typed_ast-1.5.5-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:597fc66b4162f959ee6a96b978c0435bd63791e31e4f410622d19f1686d5e769"},
- {file = "typed_ast-1.5.5-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d41b7a686ce653e06c2609075d397ebd5b969d821b9797d029fccd71fdec8e04"},
- {file = "typed_ast-1.5.5-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:5fe83a9a44c4ce67c796a1b466c270c1272e176603d5e06f6afbc101a572859d"},
- {file = "typed_ast-1.5.5-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:d5c0c112a74c0e5db2c75882a0adf3133adedcdbfd8cf7c9d6ed77365ab90a1d"},
- {file = "typed_ast-1.5.5-cp310-cp310-win_amd64.whl", hash = "sha256:e1a976ed4cc2d71bb073e1b2a250892a6e968ff02aa14c1f40eba4f365ffec02"},
- {file = "typed_ast-1.5.5-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:c631da9710271cb67b08bd3f3813b7af7f4c69c319b75475436fcab8c3d21bee"},
- {file = "typed_ast-1.5.5-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:b445c2abfecab89a932b20bd8261488d574591173d07827c1eda32c457358b18"},
- {file = "typed_ast-1.5.5-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cc95ffaaab2be3b25eb938779e43f513e0e538a84dd14a5d844b8f2932593d88"},
- {file = "typed_ast-1.5.5-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:61443214d9b4c660dcf4b5307f15c12cb30bdfe9588ce6158f4a005baeb167b2"},
- {file = "typed_ast-1.5.5-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:6eb936d107e4d474940469e8ec5b380c9b329b5f08b78282d46baeebd3692dc9"},
- {file = "typed_ast-1.5.5-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:e48bf27022897577d8479eaed64701ecaf0467182448bd95759883300ca818c8"},
- {file = "typed_ast-1.5.5-cp311-cp311-win_amd64.whl", hash = "sha256:83509f9324011c9a39faaef0922c6f720f9623afe3fe220b6d0b15638247206b"},
- {file = "typed_ast-1.5.5-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:44f214394fc1af23ca6d4e9e744804d890045d1643dd7e8229951e0ef39429b5"},
- {file = "typed_ast-1.5.5-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:118c1ce46ce58fda78503eae14b7664163aa735b620b64b5b725453696f2a35c"},
- {file = "typed_ast-1.5.5-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:be4919b808efa61101456e87f2d4c75b228f4e52618621c77f1ddcaae15904fa"},
- {file = "typed_ast-1.5.5-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:fc2b8c4e1bc5cd96c1a823a885e6b158f8451cf6f5530e1829390b4d27d0807f"},
- {file = "typed_ast-1.5.5-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:16f7313e0a08c7de57f2998c85e2a69a642e97cb32f87eb65fbfe88381a5e44d"},
- {file = "typed_ast-1.5.5-cp36-cp36m-win_amd64.whl", hash = "sha256:2b946ef8c04f77230489f75b4b5a4a6f24c078be4aed241cfabe9cbf4156e7e5"},
- {file = "typed_ast-1.5.5-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:2188bc33d85951ea4ddad55d2b35598b2709d122c11c75cffd529fbc9965508e"},
- {file = "typed_ast-1.5.5-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0635900d16ae133cab3b26c607586131269f88266954eb04ec31535c9a12ef1e"},
- {file = "typed_ast-1.5.5-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:57bfc3cf35a0f2fdf0a88a3044aafaec1d2f24d8ae8cd87c4f58d615fb5b6311"},
- {file = "typed_ast-1.5.5-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:fe58ef6a764de7b4b36edfc8592641f56e69b7163bba9f9c8089838ee596bfb2"},
- {file = "typed_ast-1.5.5-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:d09d930c2d1d621f717bb217bf1fe2584616febb5138d9b3e8cdd26506c3f6d4"},
- {file = "typed_ast-1.5.5-cp37-cp37m-win_amd64.whl", hash = "sha256:d40c10326893ecab8a80a53039164a224984339b2c32a6baf55ecbd5b1df6431"},
- {file = "typed_ast-1.5.5-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:fd946abf3c31fb50eee07451a6aedbfff912fcd13cf357363f5b4e834cc5e71a"},
- {file = "typed_ast-1.5.5-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:ed4a1a42df8a3dfb6b40c3d2de109e935949f2f66b19703eafade03173f8f437"},
- {file = "typed_ast-1.5.5-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:045f9930a1550d9352464e5149710d56a2aed23a2ffe78946478f7b5416f1ede"},
- {file = "typed_ast-1.5.5-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:381eed9c95484ceef5ced626355fdc0765ab51d8553fec08661dce654a935db4"},
- {file = "typed_ast-1.5.5-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:bfd39a41c0ef6f31684daff53befddae608f9daf6957140228a08e51f312d7e6"},
- {file = "typed_ast-1.5.5-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:8c524eb3024edcc04e288db9541fe1f438f82d281e591c548903d5b77ad1ddd4"},
- {file = "typed_ast-1.5.5-cp38-cp38-win_amd64.whl", hash = "sha256:7f58fabdde8dcbe764cef5e1a7fcb440f2463c1bbbec1cf2a86ca7bc1f95184b"},
- {file = "typed_ast-1.5.5-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:042eb665ff6bf020dd2243307d11ed626306b82812aba21836096d229fdc6a10"},
- {file = "typed_ast-1.5.5-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:622e4a006472b05cf6ef7f9f2636edc51bda670b7bbffa18d26b255269d3d814"},
- {file = "typed_ast-1.5.5-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1efebbbf4604ad1283e963e8915daa240cb4bf5067053cf2f0baadc4d4fb51b8"},
- {file = "typed_ast-1.5.5-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f0aefdd66f1784c58f65b502b6cf8b121544680456d1cebbd300c2c813899274"},
- {file = "typed_ast-1.5.5-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:48074261a842acf825af1968cd912f6f21357316080ebaca5f19abbb11690c8a"},
- {file = "typed_ast-1.5.5-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:429ae404f69dc94b9361bb62291885894b7c6fb4640d561179548c849f8492ba"},
- {file = "typed_ast-1.5.5-cp39-cp39-win_amd64.whl", hash = "sha256:335f22ccb244da2b5c296e6f96b06ee9bed46526db0de38d2f0e5a6597b81155"},
- {file = "typed_ast-1.5.5.tar.gz", hash = "sha256:94282f7a354f36ef5dbce0ef3467ebf6a258e370ab33d5b40c249fa996e590dd"},
-]
-
[[package]]
name = "typing-extensions"
-version = "4.7.1"
-description = "Backported and Experimental Type Hints for Python 3.7+"
+version = "4.9.0"
+description = "Backported and Experimental Type Hints for Python 3.8+"
optional = false
-python-versions = ">=3.7"
+python-versions = ">=3.8"
files = [
- {file = "typing_extensions-4.7.1-py3-none-any.whl", hash = "sha256:440d5dd3af93b060174bf433bccd69b0babc3b15b1a8dca43789fd7f61514b36"},
- {file = "typing_extensions-4.7.1.tar.gz", hash = "sha256:b75ddc264f0ba5615db7ba217daeb99701ad295353c45f9e95963337ceeeffb2"},
+ {file = "typing_extensions-4.9.0-py3-none-any.whl", hash = "sha256:af72aea155e91adfc61c3ae9e0e342dbc0cba726d6cba4b6c72c1f34e47291cd"},
+ {file = "typing_extensions-4.9.0.tar.gz", hash = "sha256:23478f88c37f27d76ac8aee6c905017a143b0b1b886c3c9f66bc2fd94f9f5783"},
]
-[[package]]
-name = "zipp"
-version = "3.15.0"
-description = "Backport of pathlib-compatible object wrapper for zip files"
-optional = false
-python-versions = ">=3.7"
-files = [
- {file = "zipp-3.15.0-py3-none-any.whl", hash = "sha256:48904fc76a60e542af151aded95726c1a5c34ed43ab4134b597665c86d7ad556"},
- {file = "zipp-3.15.0.tar.gz", hash = "sha256:112929ad649da941c23de50f356a2b5570c954b65150642bccdd66bf194d224b"},
-]
-
-[package.extras]
-docs = ["furo", "jaraco.packaging (>=9)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-lint"]
-testing = ["big-O", "flake8 (<5)", "jaraco.functools", "jaraco.itertools", "more-itertools", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=1.3)", "pytest-flake8", "pytest-mypy (>=0.9.1)"]
-
[metadata]
lock-version = "2.0"
-python-versions = "^3.7"
-content-hash = "4ac84aae6b05a415337279868d39fe7ce44104dffcd6b159af9e12dcea350ba1"
+python-versions = "^3.8"
+content-hash = "3c8fae8de68e5484c48073bf191e51acbe3b9a32fd98e6b5e4d165e42a7fc7aa"
diff --git a/pyproject.toml b/pyproject.toml
index 98709950..f42cc0fd 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -1,6 +1,6 @@
[tool.poetry]
name = "MergePythonClient"
-version = "1.0.5"
+version = "1.0.6"
description = ""
readme = "README.md"
authors = []
@@ -9,12 +9,13 @@ packages = [
]
[tool.poetry.dependencies]
-python = "^3.7"
+python = "^3.8"
httpx = ">=0.21.2"
-pydantic = ">= 1.9.2, < 2.5.0"
+pydantic = ">= 1.9.2"
+typing_extensions = ">= 4.0.0"
[tool.poetry.dev-dependencies]
-mypy = "0.971"
+mypy = "^1.8.0"
pytest = "^7.4.0"
[build-system]
diff --git a/src/merge/core/__init__.py b/src/merge/core/__init__.py
index 24149550..e42d263c 100644
--- a/src/merge/core/__init__.py
+++ b/src/merge/core/__init__.py
@@ -5,11 +5,13 @@
from .datetime_utils import serialize_datetime
from .jsonable_encoder import jsonable_encoder
from .remove_none_from_dict import remove_none_from_dict
+from .request_options import RequestOptions
__all__ = [
"ApiError",
"AsyncClientWrapper",
"BaseClientWrapper",
+ "RequestOptions",
"SyncClientWrapper",
"jsonable_encoder",
"remove_none_from_dict",
diff --git a/src/merge/core/client_wrapper.py b/src/merge/core/client_wrapper.py
index 79379ac5..c99ea863 100644
--- a/src/merge/core/client_wrapper.py
+++ b/src/merge/core/client_wrapper.py
@@ -21,7 +21,7 @@ def get_headers(self) -> typing.Dict[str, str]:
headers: typing.Dict[str, str] = {
"X-Fern-Language": "Python",
"X-Fern-SDK-Name": "MergePythonClient",
- "X-Fern-SDK-Version": "1.0.5",
+ "X-Fern-SDK-Version": "1.0.6",
}
if self._account_token is not None:
headers["X-Account-Token"] = self._account_token
diff --git a/src/merge/core/request_options.py b/src/merge/core/request_options.py
new file mode 100644
index 00000000..32e86b03
--- /dev/null
+++ b/src/merge/core/request_options.py
@@ -0,0 +1,29 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+try:
+ from typing import NotRequired # type: ignore
+except ImportError:
+ from typing_extensions import NotRequired # type: ignore
+
+
+class RequestOptions(typing.TypedDict):
+ """
+ Additional options for request-specific configuration when calling APIs via the SDK.
+ This is used primarily as an optional final parameter for service functions.
+
+ Attributes:
+ - timeout_in_seconds: int. The number of seconds to await an API call before timing out.
+
+ - additional_headers: typing.Dict[str, typing.Any]. A dictionary containing additional parameters to spread into the request's header dict
+
+ - additional_query_parameters: typing.Dict[str, typing.Any]. A dictionary containing additional parameters to spread into the request's query parameters dict
+
+ - additional_body_parameters: typing.Dict[str, typing.Any]. A dictionary containing additional parameters to spread into the request's body parameters dict
+ """
+
+ timeout_in_seconds: NotRequired[int]
+ additional_headers: NotRequired[typing.Dict[str, typing.Any]]
+ additional_query_parameters: NotRequired[typing.Dict[str, typing.Any]]
+ additional_body_parameters: NotRequired[typing.Dict[str, typing.Any]]
diff --git a/src/merge/resources/accounting/resources/account_details/client.py b/src/merge/resources/accounting/resources/account_details/client.py
index 6d9441d1..972eb784 100644
--- a/src/merge/resources/accounting/resources/account_details/client.py
+++ b/src/merge/resources/accounting/resources/account_details/client.py
@@ -1,10 +1,14 @@
# This file was auto-generated by Fern from our API Definition.
+import typing
import urllib.parse
from json.decoder import JSONDecodeError
from .....core.api_error import ApiError
from .....core.client_wrapper import AsyncClientWrapper, SyncClientWrapper
+from .....core.jsonable_encoder import jsonable_encoder
+from .....core.remove_none_from_dict import remove_none_from_dict
+from .....core.request_options import RequestOptions
from ...types.account_details import AccountDetails
try:
@@ -17,10 +21,12 @@ class AccountDetailsClient:
def __init__(self, *, client_wrapper: SyncClientWrapper):
self._client_wrapper = client_wrapper
- def retrieve(self) -> AccountDetails:
+ def retrieve(self, *, request_options: typing.Optional[RequestOptions] = None) -> AccountDetails:
"""
Get details for a linked account.
+ Parameters:
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import Merge
@@ -33,8 +39,20 @@ def retrieve(self) -> AccountDetails:
_response = self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/accounting/v1/account-details"),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ request_options.get("additional_query_parameters") if request_options is not None else None
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(AccountDetails, _response.json()) # type: ignore
@@ -49,10 +67,12 @@ class AsyncAccountDetailsClient:
def __init__(self, *, client_wrapper: AsyncClientWrapper):
self._client_wrapper = client_wrapper
- async def retrieve(self) -> AccountDetails:
+ async def retrieve(self, *, request_options: typing.Optional[RequestOptions] = None) -> AccountDetails:
"""
Get details for a linked account.
+ Parameters:
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import AsyncMerge
@@ -65,8 +85,20 @@ async def retrieve(self) -> AccountDetails:
_response = await self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/accounting/v1/account-details"),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ request_options.get("additional_query_parameters") if request_options is not None else None
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(AccountDetails, _response.json()) # type: ignore
diff --git a/src/merge/resources/accounting/resources/account_token/client.py b/src/merge/resources/accounting/resources/account_token/client.py
index f880e167..45424c0d 100644
--- a/src/merge/resources/accounting/resources/account_token/client.py
+++ b/src/merge/resources/accounting/resources/account_token/client.py
@@ -1,10 +1,14 @@
# This file was auto-generated by Fern from our API Definition.
+import typing
import urllib.parse
from json.decoder import JSONDecodeError
from .....core.api_error import ApiError
from .....core.client_wrapper import AsyncClientWrapper, SyncClientWrapper
+from .....core.jsonable_encoder import jsonable_encoder
+from .....core.remove_none_from_dict import remove_none_from_dict
+from .....core.request_options import RequestOptions
from ...types.account_token import AccountToken
try:
@@ -17,20 +21,44 @@ class AccountTokenClient:
def __init__(self, *, client_wrapper: SyncClientWrapper):
self._client_wrapper = client_wrapper
- def retrieve(self, public_token: str) -> AccountToken:
+ def retrieve(self, public_token: str, *, request_options: typing.Optional[RequestOptions] = None) -> AccountToken:
"""
Returns the account token for the end user with the provided public token.
Parameters:
- public_token: str.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
+ ---
+ from merge.client import Merge
+
+ client = Merge(
+ account_token="YOUR_ACCOUNT_TOKEN",
+ api_key="YOUR_API_KEY",
+ )
+ client.accounting.account_token.retrieve(
+ public_token="string",
+ )
"""
_response = self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(
f"{self._client_wrapper.get_base_url()}/", f"api/accounting/v1/account-token/{public_token}"
),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ request_options.get("additional_query_parameters") if request_options is not None else None
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(AccountToken, _response.json()) # type: ignore
@@ -45,20 +73,46 @@ class AsyncAccountTokenClient:
def __init__(self, *, client_wrapper: AsyncClientWrapper):
self._client_wrapper = client_wrapper
- async def retrieve(self, public_token: str) -> AccountToken:
+ async def retrieve(
+ self, public_token: str, *, request_options: typing.Optional[RequestOptions] = None
+ ) -> AccountToken:
"""
Returns the account token for the end user with the provided public token.
Parameters:
- public_token: str.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
+ ---
+ from merge.client import AsyncMerge
+
+ client = AsyncMerge(
+ account_token="YOUR_ACCOUNT_TOKEN",
+ api_key="YOUR_API_KEY",
+ )
+ await client.accounting.account_token.retrieve(
+ public_token="string",
+ )
"""
_response = await self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(
f"{self._client_wrapper.get_base_url()}/", f"api/accounting/v1/account-token/{public_token}"
),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ request_options.get("additional_query_parameters") if request_options is not None else None
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(AccountToken, _response.json()) # type: ignore
diff --git a/src/merge/resources/accounting/resources/accounting_periods/client.py b/src/merge/resources/accounting/resources/accounting_periods/client.py
index ca9d8966..2b578f28 100644
--- a/src/merge/resources/accounting/resources/accounting_periods/client.py
+++ b/src/merge/resources/accounting/resources/accounting_periods/client.py
@@ -6,7 +6,9 @@
from .....core.api_error import ApiError
from .....core.client_wrapper import AsyncClientWrapper, SyncClientWrapper
+from .....core.jsonable_encoder import jsonable_encoder
from .....core.remove_none_from_dict import remove_none_from_dict
+from .....core.request_options import RequestOptions
from ...types.accounting_period import AccountingPeriod
from ...types.paginated_accounting_period_list import PaginatedAccountingPeriodList
@@ -27,6 +29,7 @@ def list(
include_deleted_data: typing.Optional[bool] = None,
include_remote_data: typing.Optional[bool] = None,
page_size: typing.Optional[int] = None,
+ request_options: typing.Optional[RequestOptions] = None,
) -> PaginatedAccountingPeriodList:
"""
Returns a list of `AccountingPeriod` objects.
@@ -39,6 +42,8 @@ def list(
- include_remote_data: typing.Optional[bool]. Whether to include the original data Merge fetched from the third-party to produce these models.
- page_size: typing.Optional[int]. Number of results to return per page.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import Merge
@@ -51,16 +56,32 @@ def list(
_response = self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/accounting/v1/accounting-periods"),
- params=remove_none_from_dict(
- {
- "cursor": cursor,
- "include_deleted_data": include_deleted_data,
- "include_remote_data": include_remote_data,
- "page_size": page_size,
- }
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "cursor": cursor,
+ "include_deleted_data": include_deleted_data,
+ "include_remote_data": include_remote_data,
+ "page_size": page_size,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(PaginatedAccountingPeriodList, _response.json()) # type: ignore
@@ -70,7 +91,13 @@ def list(
raise ApiError(status_code=_response.status_code, body=_response.text)
raise ApiError(status_code=_response.status_code, body=_response_json)
- def retrieve(self, id: str, *, include_remote_data: typing.Optional[bool] = None) -> AccountingPeriod:
+ def retrieve(
+ self,
+ id: str,
+ *,
+ include_remote_data: typing.Optional[bool] = None,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> AccountingPeriod:
"""
Returns an `AccountingPeriod` object with the given `id`.
@@ -78,6 +105,8 @@ def retrieve(self, id: str, *, include_remote_data: typing.Optional[bool] = None
- id: str.
- include_remote_data: typing.Optional[bool]. Whether to include the original data Merge fetched from the third-party to produce these models.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import Merge
@@ -86,7 +115,7 @@ def retrieve(self, id: str, *, include_remote_data: typing.Optional[bool] = None
api_key="YOUR_API_KEY",
)
client.accounting.accounting_periods.retrieve(
- id="id",
+ id="string",
)
"""
_response = self._client_wrapper.httpx_client.request(
@@ -94,9 +123,29 @@ def retrieve(self, id: str, *, include_remote_data: typing.Optional[bool] = None
urllib.parse.urljoin(
f"{self._client_wrapper.get_base_url()}/", f"api/accounting/v1/accounting-periods/{id}"
),
- params=remove_none_from_dict({"include_remote_data": include_remote_data}),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "include_remote_data": include_remote_data,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(AccountingPeriod, _response.json()) # type: ignore
@@ -118,6 +167,7 @@ async def list(
include_deleted_data: typing.Optional[bool] = None,
include_remote_data: typing.Optional[bool] = None,
page_size: typing.Optional[int] = None,
+ request_options: typing.Optional[RequestOptions] = None,
) -> PaginatedAccountingPeriodList:
"""
Returns a list of `AccountingPeriod` objects.
@@ -130,6 +180,8 @@ async def list(
- include_remote_data: typing.Optional[bool]. Whether to include the original data Merge fetched from the third-party to produce these models.
- page_size: typing.Optional[int]. Number of results to return per page.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import AsyncMerge
@@ -142,16 +194,32 @@ async def list(
_response = await self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/accounting/v1/accounting-periods"),
- params=remove_none_from_dict(
- {
- "cursor": cursor,
- "include_deleted_data": include_deleted_data,
- "include_remote_data": include_remote_data,
- "page_size": page_size,
- }
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "cursor": cursor,
+ "include_deleted_data": include_deleted_data,
+ "include_remote_data": include_remote_data,
+ "page_size": page_size,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(PaginatedAccountingPeriodList, _response.json()) # type: ignore
@@ -161,7 +229,13 @@ async def list(
raise ApiError(status_code=_response.status_code, body=_response.text)
raise ApiError(status_code=_response.status_code, body=_response_json)
- async def retrieve(self, id: str, *, include_remote_data: typing.Optional[bool] = None) -> AccountingPeriod:
+ async def retrieve(
+ self,
+ id: str,
+ *,
+ include_remote_data: typing.Optional[bool] = None,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> AccountingPeriod:
"""
Returns an `AccountingPeriod` object with the given `id`.
@@ -169,6 +243,8 @@ async def retrieve(self, id: str, *, include_remote_data: typing.Optional[bool]
- id: str.
- include_remote_data: typing.Optional[bool]. Whether to include the original data Merge fetched from the third-party to produce these models.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import AsyncMerge
@@ -177,7 +253,7 @@ async def retrieve(self, id: str, *, include_remote_data: typing.Optional[bool]
api_key="YOUR_API_KEY",
)
await client.accounting.accounting_periods.retrieve(
- id="id",
+ id="string",
)
"""
_response = await self._client_wrapper.httpx_client.request(
@@ -185,9 +261,29 @@ async def retrieve(self, id: str, *, include_remote_data: typing.Optional[bool]
urllib.parse.urljoin(
f"{self._client_wrapper.get_base_url()}/", f"api/accounting/v1/accounting-periods/{id}"
),
- params=remove_none_from_dict({"include_remote_data": include_remote_data}),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "include_remote_data": include_remote_data,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(AccountingPeriod, _response.json()) # type: ignore
diff --git a/src/merge/resources/accounting/resources/accounts/client.py b/src/merge/resources/accounting/resources/accounts/client.py
index 00b9e2db..ea4eb466 100644
--- a/src/merge/resources/accounting/resources/accounts/client.py
+++ b/src/merge/resources/accounting/resources/accounts/client.py
@@ -5,13 +5,12 @@
import urllib.parse
from json.decoder import JSONDecodeError
-import typing_extensions
-
from .....core.api_error import ApiError
from .....core.client_wrapper import AsyncClientWrapper, SyncClientWrapper
from .....core.datetime_utils import serialize_datetime
from .....core.jsonable_encoder import jsonable_encoder
from .....core.remove_none_from_dict import remove_none_from_dict
+from .....core.request_options import RequestOptions
from ...types.account import Account
from ...types.account_request import AccountRequest
from ...types.account_response import AccountResponse
@@ -42,7 +41,7 @@ def list(
created_after: typing.Optional[dt.datetime] = None,
created_before: typing.Optional[dt.datetime] = None,
cursor: typing.Optional[str] = None,
- expand: typing.Optional[typing_extensions.Literal["company"]] = None,
+ expand: typing.Optional[typing.Literal["company"]] = None,
include_deleted_data: typing.Optional[bool] = None,
include_remote_data: typing.Optional[bool] = None,
modified_after: typing.Optional[dt.datetime] = None,
@@ -51,6 +50,7 @@ def list(
remote_fields: typing.Optional[AccountsListRequestRemoteFields] = None,
remote_id: typing.Optional[str] = None,
show_enum_origins: typing.Optional[AccountsListRequestShowEnumOrigins] = None,
+ request_options: typing.Optional[RequestOptions] = None,
) -> PaginatedAccountList:
"""
Returns a list of `Account` objects.
@@ -64,7 +64,7 @@ def list(
- cursor: typing.Optional[str]. The pagination cursor value.
- - expand: typing.Optional[typing_extensions.Literal["company"]]. Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces.
+ - expand: typing.Optional[typing.Literal["company"]]. Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces.
- include_deleted_data: typing.Optional[bool]. Whether to include data that was marked as deleted by third party webhooks.
@@ -81,6 +81,8 @@ def list(
- remote_id: typing.Optional[str]. The API provider's ID for the given object.
- show_enum_origins: typing.Optional[AccountsListRequestShowEnumOrigins]. Which fields should be returned in non-normalized form.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import Merge
from merge.resources.accounting import (
@@ -101,25 +103,41 @@ def list(
_response = self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/accounting/v1/accounts"),
- params=remove_none_from_dict(
- {
- "company_id": company_id,
- "created_after": serialize_datetime(created_after) if created_after is not None else None,
- "created_before": serialize_datetime(created_before) if created_before is not None else None,
- "cursor": cursor,
- "expand": expand,
- "include_deleted_data": include_deleted_data,
- "include_remote_data": include_remote_data,
- "modified_after": serialize_datetime(modified_after) if modified_after is not None else None,
- "modified_before": serialize_datetime(modified_before) if modified_before is not None else None,
- "page_size": page_size,
- "remote_fields": remote_fields,
- "remote_id": remote_id,
- "show_enum_origins": show_enum_origins,
- }
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "company_id": company_id,
+ "created_after": serialize_datetime(created_after) if created_after is not None else None,
+ "created_before": serialize_datetime(created_before) if created_before is not None else None,
+ "cursor": cursor,
+ "expand": expand,
+ "include_deleted_data": include_deleted_data,
+ "include_remote_data": include_remote_data,
+ "modified_after": serialize_datetime(modified_after) if modified_after is not None else None,
+ "modified_before": serialize_datetime(modified_before) if modified_before is not None else None,
+ "page_size": page_size,
+ "remote_fields": remote_fields,
+ "remote_id": remote_id,
+ "show_enum_origins": show_enum_origins,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(PaginatedAccountList, _response.json()) # type: ignore
@@ -135,6 +153,7 @@ def create(
is_debug_mode: typing.Optional[bool] = None,
run_async: typing.Optional[bool] = None,
model: AccountRequest,
+ request_options: typing.Optional[RequestOptions] = None,
) -> AccountResponse:
"""
Creates an `Account` object with the given values.
@@ -145,6 +164,8 @@ def create(
- run_async: typing.Optional[bool]. Whether or not third-party updates should be run asynchronously.
- model: AccountRequest.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import Merge
from merge.resources.accounting import AccountRequest
@@ -167,10 +188,36 @@ def create(
_response = self._client_wrapper.httpx_client.request(
"POST",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/accounting/v1/accounts"),
- params=remove_none_from_dict({"is_debug_mode": is_debug_mode, "run_async": run_async}),
- json=jsonable_encoder({"model": model}),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "is_debug_mode": is_debug_mode,
+ "run_async": run_async,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ json=jsonable_encoder({"model": model})
+ if request_options is None or request_options.get("additional_body_parameters") is None
+ else {
+ **jsonable_encoder({"model": model}),
+ **(jsonable_encoder(remove_none_from_dict(request_options.get("additional_body_parameters", {})))),
+ },
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(AccountResponse, _response.json()) # type: ignore
@@ -184,10 +231,11 @@ def retrieve(
self,
id: str,
*,
- expand: typing.Optional[typing_extensions.Literal["company"]] = None,
+ expand: typing.Optional[typing.Literal["company"]] = None,
include_remote_data: typing.Optional[bool] = None,
remote_fields: typing.Optional[AccountsRetrieveRequestRemoteFields] = None,
show_enum_origins: typing.Optional[AccountsRetrieveRequestShowEnumOrigins] = None,
+ request_options: typing.Optional[RequestOptions] = None,
) -> Account:
"""
Returns an `Account` object with the given `id`.
@@ -195,13 +243,15 @@ def retrieve(
Parameters:
- id: str.
- - expand: typing.Optional[typing_extensions.Literal["company"]]. Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces.
+ - expand: typing.Optional[typing.Literal["company"]]. Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces.
- include_remote_data: typing.Optional[bool]. Whether to include the original data Merge fetched from the third-party to produce these models.
- remote_fields: typing.Optional[AccountsRetrieveRequestRemoteFields]. Deprecated. Use show_enum_origins.
- show_enum_origins: typing.Optional[AccountsRetrieveRequestShowEnumOrigins]. Which fields should be returned in non-normalized form.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import Merge
from merge.resources.accounting import (
@@ -214,7 +264,7 @@ def retrieve(
api_key="YOUR_API_KEY",
)
client.accounting.accounts.retrieve(
- id="id",
+ id="string",
expand="company",
remote_fields=AccountsRetrieveRequestRemoteFields.CLASSIFICATION,
show_enum_origins=AccountsRetrieveRequestShowEnumOrigins.CLASSIFICATION,
@@ -223,16 +273,32 @@ def retrieve(
_response = self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", f"api/accounting/v1/accounts/{id}"),
- params=remove_none_from_dict(
- {
- "expand": expand,
- "include_remote_data": include_remote_data,
- "remote_fields": remote_fields,
- "show_enum_origins": show_enum_origins,
- }
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "expand": expand,
+ "include_remote_data": include_remote_data,
+ "remote_fields": remote_fields,
+ "show_enum_origins": show_enum_origins,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(Account, _response.json()) # type: ignore
@@ -242,10 +308,12 @@ def retrieve(
raise ApiError(status_code=_response.status_code, body=_response.text)
raise ApiError(status_code=_response.status_code, body=_response_json)
- def meta_post_retrieve(self) -> MetaResponse:
+ def meta_post_retrieve(self, *, request_options: typing.Optional[RequestOptions] = None) -> MetaResponse:
"""
Returns metadata for `Account` POSTs.
+ Parameters:
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import Merge
@@ -258,8 +326,20 @@ def meta_post_retrieve(self) -> MetaResponse:
_response = self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/accounting/v1/accounts/meta/post"),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ request_options.get("additional_query_parameters") if request_options is not None else None
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(MetaResponse, _response.json()) # type: ignore
@@ -281,7 +361,7 @@ async def list(
created_after: typing.Optional[dt.datetime] = None,
created_before: typing.Optional[dt.datetime] = None,
cursor: typing.Optional[str] = None,
- expand: typing.Optional[typing_extensions.Literal["company"]] = None,
+ expand: typing.Optional[typing.Literal["company"]] = None,
include_deleted_data: typing.Optional[bool] = None,
include_remote_data: typing.Optional[bool] = None,
modified_after: typing.Optional[dt.datetime] = None,
@@ -290,6 +370,7 @@ async def list(
remote_fields: typing.Optional[AccountsListRequestRemoteFields] = None,
remote_id: typing.Optional[str] = None,
show_enum_origins: typing.Optional[AccountsListRequestShowEnumOrigins] = None,
+ request_options: typing.Optional[RequestOptions] = None,
) -> PaginatedAccountList:
"""
Returns a list of `Account` objects.
@@ -303,7 +384,7 @@ async def list(
- cursor: typing.Optional[str]. The pagination cursor value.
- - expand: typing.Optional[typing_extensions.Literal["company"]]. Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces.
+ - expand: typing.Optional[typing.Literal["company"]]. Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces.
- include_deleted_data: typing.Optional[bool]. Whether to include data that was marked as deleted by third party webhooks.
@@ -320,6 +401,8 @@ async def list(
- remote_id: typing.Optional[str]. The API provider's ID for the given object.
- show_enum_origins: typing.Optional[AccountsListRequestShowEnumOrigins]. Which fields should be returned in non-normalized form.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import AsyncMerge
from merge.resources.accounting import (
@@ -340,25 +423,41 @@ async def list(
_response = await self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/accounting/v1/accounts"),
- params=remove_none_from_dict(
- {
- "company_id": company_id,
- "created_after": serialize_datetime(created_after) if created_after is not None else None,
- "created_before": serialize_datetime(created_before) if created_before is not None else None,
- "cursor": cursor,
- "expand": expand,
- "include_deleted_data": include_deleted_data,
- "include_remote_data": include_remote_data,
- "modified_after": serialize_datetime(modified_after) if modified_after is not None else None,
- "modified_before": serialize_datetime(modified_before) if modified_before is not None else None,
- "page_size": page_size,
- "remote_fields": remote_fields,
- "remote_id": remote_id,
- "show_enum_origins": show_enum_origins,
- }
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "company_id": company_id,
+ "created_after": serialize_datetime(created_after) if created_after is not None else None,
+ "created_before": serialize_datetime(created_before) if created_before is not None else None,
+ "cursor": cursor,
+ "expand": expand,
+ "include_deleted_data": include_deleted_data,
+ "include_remote_data": include_remote_data,
+ "modified_after": serialize_datetime(modified_after) if modified_after is not None else None,
+ "modified_before": serialize_datetime(modified_before) if modified_before is not None else None,
+ "page_size": page_size,
+ "remote_fields": remote_fields,
+ "remote_id": remote_id,
+ "show_enum_origins": show_enum_origins,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(PaginatedAccountList, _response.json()) # type: ignore
@@ -374,6 +473,7 @@ async def create(
is_debug_mode: typing.Optional[bool] = None,
run_async: typing.Optional[bool] = None,
model: AccountRequest,
+ request_options: typing.Optional[RequestOptions] = None,
) -> AccountResponse:
"""
Creates an `Account` object with the given values.
@@ -384,6 +484,8 @@ async def create(
- run_async: typing.Optional[bool]. Whether or not third-party updates should be run asynchronously.
- model: AccountRequest.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import AsyncMerge
from merge.resources.accounting import AccountRequest
@@ -406,10 +508,36 @@ async def create(
_response = await self._client_wrapper.httpx_client.request(
"POST",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/accounting/v1/accounts"),
- params=remove_none_from_dict({"is_debug_mode": is_debug_mode, "run_async": run_async}),
- json=jsonable_encoder({"model": model}),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "is_debug_mode": is_debug_mode,
+ "run_async": run_async,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ json=jsonable_encoder({"model": model})
+ if request_options is None or request_options.get("additional_body_parameters") is None
+ else {
+ **jsonable_encoder({"model": model}),
+ **(jsonable_encoder(remove_none_from_dict(request_options.get("additional_body_parameters", {})))),
+ },
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(AccountResponse, _response.json()) # type: ignore
@@ -423,10 +551,11 @@ async def retrieve(
self,
id: str,
*,
- expand: typing.Optional[typing_extensions.Literal["company"]] = None,
+ expand: typing.Optional[typing.Literal["company"]] = None,
include_remote_data: typing.Optional[bool] = None,
remote_fields: typing.Optional[AccountsRetrieveRequestRemoteFields] = None,
show_enum_origins: typing.Optional[AccountsRetrieveRequestShowEnumOrigins] = None,
+ request_options: typing.Optional[RequestOptions] = None,
) -> Account:
"""
Returns an `Account` object with the given `id`.
@@ -434,13 +563,15 @@ async def retrieve(
Parameters:
- id: str.
- - expand: typing.Optional[typing_extensions.Literal["company"]]. Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces.
+ - expand: typing.Optional[typing.Literal["company"]]. Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces.
- include_remote_data: typing.Optional[bool]. Whether to include the original data Merge fetched from the third-party to produce these models.
- remote_fields: typing.Optional[AccountsRetrieveRequestRemoteFields]. Deprecated. Use show_enum_origins.
- show_enum_origins: typing.Optional[AccountsRetrieveRequestShowEnumOrigins]. Which fields should be returned in non-normalized form.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import AsyncMerge
from merge.resources.accounting import (
@@ -453,7 +584,7 @@ async def retrieve(
api_key="YOUR_API_KEY",
)
await client.accounting.accounts.retrieve(
- id="id",
+ id="string",
expand="company",
remote_fields=AccountsRetrieveRequestRemoteFields.CLASSIFICATION,
show_enum_origins=AccountsRetrieveRequestShowEnumOrigins.CLASSIFICATION,
@@ -462,16 +593,32 @@ async def retrieve(
_response = await self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", f"api/accounting/v1/accounts/{id}"),
- params=remove_none_from_dict(
- {
- "expand": expand,
- "include_remote_data": include_remote_data,
- "remote_fields": remote_fields,
- "show_enum_origins": show_enum_origins,
- }
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "expand": expand,
+ "include_remote_data": include_remote_data,
+ "remote_fields": remote_fields,
+ "show_enum_origins": show_enum_origins,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(Account, _response.json()) # type: ignore
@@ -481,10 +628,12 @@ async def retrieve(
raise ApiError(status_code=_response.status_code, body=_response.text)
raise ApiError(status_code=_response.status_code, body=_response_json)
- async def meta_post_retrieve(self) -> MetaResponse:
+ async def meta_post_retrieve(self, *, request_options: typing.Optional[RequestOptions] = None) -> MetaResponse:
"""
Returns metadata for `Account` POSTs.
+ Parameters:
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import AsyncMerge
@@ -497,8 +646,20 @@ async def meta_post_retrieve(self) -> MetaResponse:
_response = await self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/accounting/v1/accounts/meta/post"),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ request_options.get("additional_query_parameters") if request_options is not None else None
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(MetaResponse, _response.json()) # type: ignore
diff --git a/src/merge/resources/accounting/resources/addresses/client.py b/src/merge/resources/accounting/resources/addresses/client.py
index 4873eae4..6082a1bd 100644
--- a/src/merge/resources/accounting/resources/addresses/client.py
+++ b/src/merge/resources/accounting/resources/addresses/client.py
@@ -4,11 +4,11 @@
import urllib.parse
from json.decoder import JSONDecodeError
-import typing_extensions
-
from .....core.api_error import ApiError
from .....core.client_wrapper import AsyncClientWrapper, SyncClientWrapper
+from .....core.jsonable_encoder import jsonable_encoder
from .....core.remove_none_from_dict import remove_none_from_dict
+from .....core.request_options import RequestOptions
from ...types.address import Address
try:
@@ -26,8 +26,9 @@ def retrieve(
id: str,
*,
include_remote_data: typing.Optional[bool] = None,
- remote_fields: typing.Optional[typing_extensions.Literal["type"]] = None,
- show_enum_origins: typing.Optional[typing_extensions.Literal["type"]] = None,
+ remote_fields: typing.Optional[typing.Literal["type"]] = None,
+ show_enum_origins: typing.Optional[typing.Literal["type"]] = None,
+ request_options: typing.Optional[RequestOptions] = None,
) -> Address:
"""
Returns an `Address` object with the given `id`.
@@ -37,9 +38,11 @@ def retrieve(
- include_remote_data: typing.Optional[bool]. Whether to include the original data Merge fetched from the third-party to produce these models.
- - remote_fields: typing.Optional[typing_extensions.Literal["type"]]. Deprecated. Use show_enum_origins.
+ - remote_fields: typing.Optional[typing.Literal["type"]]. Deprecated. Use show_enum_origins.
+
+ - show_enum_origins: typing.Optional[typing.Literal["type"]]. Which fields should be returned in non-normalized form.
- - show_enum_origins: typing.Optional[typing_extensions.Literal["type"]]. Which fields should be returned in non-normalized form.
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import Merge
@@ -48,7 +51,7 @@ def retrieve(
api_key="YOUR_API_KEY",
)
client.accounting.addresses.retrieve(
- id="id",
+ id="string",
remote_fields="type",
show_enum_origins="type",
)
@@ -56,15 +59,31 @@ def retrieve(
_response = self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", f"api/accounting/v1/addresses/{id}"),
- params=remove_none_from_dict(
- {
- "include_remote_data": include_remote_data,
- "remote_fields": remote_fields,
- "show_enum_origins": show_enum_origins,
- }
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "include_remote_data": include_remote_data,
+ "remote_fields": remote_fields,
+ "show_enum_origins": show_enum_origins,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(Address, _response.json()) # type: ignore
@@ -84,8 +103,9 @@ async def retrieve(
id: str,
*,
include_remote_data: typing.Optional[bool] = None,
- remote_fields: typing.Optional[typing_extensions.Literal["type"]] = None,
- show_enum_origins: typing.Optional[typing_extensions.Literal["type"]] = None,
+ remote_fields: typing.Optional[typing.Literal["type"]] = None,
+ show_enum_origins: typing.Optional[typing.Literal["type"]] = None,
+ request_options: typing.Optional[RequestOptions] = None,
) -> Address:
"""
Returns an `Address` object with the given `id`.
@@ -95,9 +115,11 @@ async def retrieve(
- include_remote_data: typing.Optional[bool]. Whether to include the original data Merge fetched from the third-party to produce these models.
- - remote_fields: typing.Optional[typing_extensions.Literal["type"]]. Deprecated. Use show_enum_origins.
+ - remote_fields: typing.Optional[typing.Literal["type"]]. Deprecated. Use show_enum_origins.
- - show_enum_origins: typing.Optional[typing_extensions.Literal["type"]]. Which fields should be returned in non-normalized form.
+ - show_enum_origins: typing.Optional[typing.Literal["type"]]. Which fields should be returned in non-normalized form.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import AsyncMerge
@@ -106,7 +128,7 @@ async def retrieve(
api_key="YOUR_API_KEY",
)
await client.accounting.addresses.retrieve(
- id="id",
+ id="string",
remote_fields="type",
show_enum_origins="type",
)
@@ -114,15 +136,31 @@ async def retrieve(
_response = await self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", f"api/accounting/v1/addresses/{id}"),
- params=remove_none_from_dict(
- {
- "include_remote_data": include_remote_data,
- "remote_fields": remote_fields,
- "show_enum_origins": show_enum_origins,
- }
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "include_remote_data": include_remote_data,
+ "remote_fields": remote_fields,
+ "show_enum_origins": show_enum_origins,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(Address, _response.json()) # type: ignore
diff --git a/src/merge/resources/accounting/resources/async_passthrough/client.py b/src/merge/resources/accounting/resources/async_passthrough/client.py
index a4aa2d0a..989bc572 100644
--- a/src/merge/resources/accounting/resources/async_passthrough/client.py
+++ b/src/merge/resources/accounting/resources/async_passthrough/client.py
@@ -7,6 +7,8 @@
from .....core.api_error import ApiError
from .....core.client_wrapper import AsyncClientWrapper, SyncClientWrapper
from .....core.jsonable_encoder import jsonable_encoder
+from .....core.remove_none_from_dict import remove_none_from_dict
+from .....core.request_options import RequestOptions
from ...types.async_passthrough_reciept import AsyncPassthroughReciept
from ...types.data_passthrough_request import DataPassthroughRequest
from ...types.remote_response import RemoteResponse
@@ -24,18 +26,21 @@ class AsyncPassthroughClient:
def __init__(self, *, client_wrapper: SyncClientWrapper):
self._client_wrapper = client_wrapper
- def create(self, *, request: DataPassthroughRequest) -> AsyncPassthroughReciept:
+ def create(
+ self, *, request: DataPassthroughRequest, request_options: typing.Optional[RequestOptions] = None
+ ) -> AsyncPassthroughReciept:
"""
Asynchronously pull data from an endpoint not currently supported by Merge.
Parameters:
- request: DataPassthroughRequest.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import Merge
from merge.resources.accounting import (
DataPassthroughRequest,
MethodEnum,
- MultipartFormFieldRequest,
RequestFormatEnum,
)
@@ -48,14 +53,6 @@ def create(self, *, request: DataPassthroughRequest) -> AsyncPassthroughReciept:
method=MethodEnum.GET,
path="/scooters",
data='{"company": "Lime", "model": "Gen 2.5"}',
- multipart_form_data=[
- MultipartFormFieldRequest(
- name="resume",
- data="SW50ZWdyYXRlIGZhc3QKSW50ZWdyYXRlIG9uY2U=",
- file_name="resume.pdf",
- content_type="application/pdf",
- )
- ],
request_format=RequestFormatEnum.JSON,
),
)
@@ -63,9 +60,26 @@ def create(self, *, request: DataPassthroughRequest) -> AsyncPassthroughReciept:
_response = self._client_wrapper.httpx_client.request(
"POST",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/accounting/v1/async-passthrough"),
- json=jsonable_encoder(request),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ request_options.get("additional_query_parameters") if request_options is not None else None
+ ),
+ json=jsonable_encoder(request)
+ if request_options is None or request_options.get("additional_body_parameters") is None
+ else {
+ **jsonable_encoder(request),
+ **(jsonable_encoder(remove_none_from_dict(request_options.get("additional_body_parameters", {})))),
+ },
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(AsyncPassthroughReciept, _response.json()) # type: ignore
@@ -75,12 +89,26 @@ def create(self, *, request: DataPassthroughRequest) -> AsyncPassthroughReciept:
raise ApiError(status_code=_response.status_code, body=_response.text)
raise ApiError(status_code=_response.status_code, body=_response_json)
- def retrieve(self, async_passthrough_receipt_id: str) -> RemoteResponse:
+ def retrieve(
+ self, async_passthrough_receipt_id: str, *, request_options: typing.Optional[RequestOptions] = None
+ ) -> RemoteResponse:
"""
Retrieves data from earlier async-passthrough POST request
Parameters:
- async_passthrough_receipt_id: str.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
+ ---
+ from merge.client import Merge
+
+ client = Merge(
+ account_token="YOUR_ACCOUNT_TOKEN",
+ api_key="YOUR_API_KEY",
+ )
+ client.accounting.async_passthrough.retrieve(
+ async_passthrough_receipt_id="string",
+ )
"""
_response = self._client_wrapper.httpx_client.request(
"GET",
@@ -88,8 +116,20 @@ def retrieve(self, async_passthrough_receipt_id: str) -> RemoteResponse:
f"{self._client_wrapper.get_base_url()}/",
f"api/accounting/v1/async-passthrough/{async_passthrough_receipt_id}",
),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ request_options.get("additional_query_parameters") if request_options is not None else None
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(RemoteResponse, _response.json()) # type: ignore
@@ -104,18 +144,21 @@ class AsyncAsyncPassthroughClient:
def __init__(self, *, client_wrapper: AsyncClientWrapper):
self._client_wrapper = client_wrapper
- async def create(self, *, request: DataPassthroughRequest) -> AsyncPassthroughReciept:
+ async def create(
+ self, *, request: DataPassthroughRequest, request_options: typing.Optional[RequestOptions] = None
+ ) -> AsyncPassthroughReciept:
"""
Asynchronously pull data from an endpoint not currently supported by Merge.
Parameters:
- request: DataPassthroughRequest.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import AsyncMerge
from merge.resources.accounting import (
DataPassthroughRequest,
MethodEnum,
- MultipartFormFieldRequest,
RequestFormatEnum,
)
@@ -128,14 +171,6 @@ async def create(self, *, request: DataPassthroughRequest) -> AsyncPassthroughRe
method=MethodEnum.GET,
path="/scooters",
data='{"company": "Lime", "model": "Gen 2.5"}',
- multipart_form_data=[
- MultipartFormFieldRequest(
- name="resume",
- data="SW50ZWdyYXRlIGZhc3QKSW50ZWdyYXRlIG9uY2U=",
- file_name="resume.pdf",
- content_type="application/pdf",
- )
- ],
request_format=RequestFormatEnum.JSON,
),
)
@@ -143,9 +178,26 @@ async def create(self, *, request: DataPassthroughRequest) -> AsyncPassthroughRe
_response = await self._client_wrapper.httpx_client.request(
"POST",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/accounting/v1/async-passthrough"),
- json=jsonable_encoder(request),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ request_options.get("additional_query_parameters") if request_options is not None else None
+ ),
+ json=jsonable_encoder(request)
+ if request_options is None or request_options.get("additional_body_parameters") is None
+ else {
+ **jsonable_encoder(request),
+ **(jsonable_encoder(remove_none_from_dict(request_options.get("additional_body_parameters", {})))),
+ },
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(AsyncPassthroughReciept, _response.json()) # type: ignore
@@ -155,12 +207,26 @@ async def create(self, *, request: DataPassthroughRequest) -> AsyncPassthroughRe
raise ApiError(status_code=_response.status_code, body=_response.text)
raise ApiError(status_code=_response.status_code, body=_response_json)
- async def retrieve(self, async_passthrough_receipt_id: str) -> RemoteResponse:
+ async def retrieve(
+ self, async_passthrough_receipt_id: str, *, request_options: typing.Optional[RequestOptions] = None
+ ) -> RemoteResponse:
"""
Retrieves data from earlier async-passthrough POST request
Parameters:
- async_passthrough_receipt_id: str.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
+ ---
+ from merge.client import AsyncMerge
+
+ client = AsyncMerge(
+ account_token="YOUR_ACCOUNT_TOKEN",
+ api_key="YOUR_API_KEY",
+ )
+ await client.accounting.async_passthrough.retrieve(
+ async_passthrough_receipt_id="string",
+ )
"""
_response = await self._client_wrapper.httpx_client.request(
"GET",
@@ -168,8 +234,20 @@ async def retrieve(self, async_passthrough_receipt_id: str) -> RemoteResponse:
f"{self._client_wrapper.get_base_url()}/",
f"api/accounting/v1/async-passthrough/{async_passthrough_receipt_id}",
),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ request_options.get("additional_query_parameters") if request_options is not None else None
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(RemoteResponse, _response.json()) # type: ignore
diff --git a/src/merge/resources/accounting/resources/attachments/client.py b/src/merge/resources/accounting/resources/attachments/client.py
index cbeff1ac..a65afb4a 100644
--- a/src/merge/resources/accounting/resources/attachments/client.py
+++ b/src/merge/resources/accounting/resources/attachments/client.py
@@ -10,6 +10,7 @@
from .....core.datetime_utils import serialize_datetime
from .....core.jsonable_encoder import jsonable_encoder
from .....core.remove_none_from_dict import remove_none_from_dict
+from .....core.request_options import RequestOptions
from ...types.accounting_attachment import AccountingAttachment
from ...types.accounting_attachment_request import AccountingAttachmentRequest
from ...types.accounting_attachment_response import AccountingAttachmentResponse
@@ -42,6 +43,7 @@ def list(
modified_before: typing.Optional[dt.datetime] = None,
page_size: typing.Optional[int] = None,
remote_id: typing.Optional[str] = None,
+ request_options: typing.Optional[RequestOptions] = None,
) -> PaginatedAccountingAttachmentList:
"""
Returns a list of `AccountingAttachment` objects.
@@ -66,6 +68,8 @@ def list(
- page_size: typing.Optional[int]. Number of results to return per page.
- remote_id: typing.Optional[str]. The API provider's ID for the given object.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import Merge
@@ -78,22 +82,38 @@ def list(
_response = self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/accounting/v1/attachments"),
- params=remove_none_from_dict(
- {
- "company_id": company_id,
- "created_after": serialize_datetime(created_after) if created_after is not None else None,
- "created_before": serialize_datetime(created_before) if created_before is not None else None,
- "cursor": cursor,
- "include_deleted_data": include_deleted_data,
- "include_remote_data": include_remote_data,
- "modified_after": serialize_datetime(modified_after) if modified_after is not None else None,
- "modified_before": serialize_datetime(modified_before) if modified_before is not None else None,
- "page_size": page_size,
- "remote_id": remote_id,
- }
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "company_id": company_id,
+ "created_after": serialize_datetime(created_after) if created_after is not None else None,
+ "created_before": serialize_datetime(created_before) if created_before is not None else None,
+ "cursor": cursor,
+ "include_deleted_data": include_deleted_data,
+ "include_remote_data": include_remote_data,
+ "modified_after": serialize_datetime(modified_after) if modified_after is not None else None,
+ "modified_before": serialize_datetime(modified_before) if modified_before is not None else None,
+ "page_size": page_size,
+ "remote_id": remote_id,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(PaginatedAccountingAttachmentList, _response.json()) # type: ignore
@@ -109,6 +129,7 @@ def create(
is_debug_mode: typing.Optional[bool] = None,
run_async: typing.Optional[bool] = None,
model: AccountingAttachmentRequest,
+ request_options: typing.Optional[RequestOptions] = None,
) -> AccountingAttachmentResponse:
"""
Creates an `AccountingAttachment` object with the given values.
@@ -119,6 +140,8 @@ def create(
- run_async: typing.Optional[bool]. Whether or not third-party updates should be run asynchronously.
- model: AccountingAttachmentRequest.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import Merge
from merge.resources.accounting import AccountingAttachmentRequest
@@ -138,10 +161,36 @@ def create(
_response = self._client_wrapper.httpx_client.request(
"POST",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/accounting/v1/attachments"),
- params=remove_none_from_dict({"is_debug_mode": is_debug_mode, "run_async": run_async}),
- json=jsonable_encoder({"model": model}),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "is_debug_mode": is_debug_mode,
+ "run_async": run_async,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ json=jsonable_encoder({"model": model})
+ if request_options is None or request_options.get("additional_body_parameters") is None
+ else {
+ **jsonable_encoder({"model": model}),
+ **(jsonable_encoder(remove_none_from_dict(request_options.get("additional_body_parameters", {})))),
+ },
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(AccountingAttachmentResponse, _response.json()) # type: ignore
@@ -151,7 +200,13 @@ def create(
raise ApiError(status_code=_response.status_code, body=_response.text)
raise ApiError(status_code=_response.status_code, body=_response_json)
- def retrieve(self, id: str, *, include_remote_data: typing.Optional[bool] = None) -> AccountingAttachment:
+ def retrieve(
+ self,
+ id: str,
+ *,
+ include_remote_data: typing.Optional[bool] = None,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> AccountingAttachment:
"""
Returns an `AccountingAttachment` object with the given `id`.
@@ -159,6 +214,8 @@ def retrieve(self, id: str, *, include_remote_data: typing.Optional[bool] = None
- id: str.
- include_remote_data: typing.Optional[bool]. Whether to include the original data Merge fetched from the third-party to produce these models.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import Merge
@@ -167,15 +224,35 @@ def retrieve(self, id: str, *, include_remote_data: typing.Optional[bool] = None
api_key="YOUR_API_KEY",
)
client.accounting.attachments.retrieve(
- id="id",
+ id="string",
)
"""
_response = self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", f"api/accounting/v1/attachments/{id}"),
- params=remove_none_from_dict({"include_remote_data": include_remote_data}),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "include_remote_data": include_remote_data,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(AccountingAttachment, _response.json()) # type: ignore
@@ -185,10 +262,12 @@ def retrieve(self, id: str, *, include_remote_data: typing.Optional[bool] = None
raise ApiError(status_code=_response.status_code, body=_response.text)
raise ApiError(status_code=_response.status_code, body=_response_json)
- def meta_post_retrieve(self) -> MetaResponse:
+ def meta_post_retrieve(self, *, request_options: typing.Optional[RequestOptions] = None) -> MetaResponse:
"""
Returns metadata for `AccountingAttachment` POSTs.
+ Parameters:
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import Merge
@@ -201,8 +280,20 @@ def meta_post_retrieve(self) -> MetaResponse:
_response = self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/accounting/v1/attachments/meta/post"),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ request_options.get("additional_query_parameters") if request_options is not None else None
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(MetaResponse, _response.json()) # type: ignore
@@ -230,6 +321,7 @@ async def list(
modified_before: typing.Optional[dt.datetime] = None,
page_size: typing.Optional[int] = None,
remote_id: typing.Optional[str] = None,
+ request_options: typing.Optional[RequestOptions] = None,
) -> PaginatedAccountingAttachmentList:
"""
Returns a list of `AccountingAttachment` objects.
@@ -254,6 +346,8 @@ async def list(
- page_size: typing.Optional[int]. Number of results to return per page.
- remote_id: typing.Optional[str]. The API provider's ID for the given object.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import AsyncMerge
@@ -266,22 +360,38 @@ async def list(
_response = await self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/accounting/v1/attachments"),
- params=remove_none_from_dict(
- {
- "company_id": company_id,
- "created_after": serialize_datetime(created_after) if created_after is not None else None,
- "created_before": serialize_datetime(created_before) if created_before is not None else None,
- "cursor": cursor,
- "include_deleted_data": include_deleted_data,
- "include_remote_data": include_remote_data,
- "modified_after": serialize_datetime(modified_after) if modified_after is not None else None,
- "modified_before": serialize_datetime(modified_before) if modified_before is not None else None,
- "page_size": page_size,
- "remote_id": remote_id,
- }
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "company_id": company_id,
+ "created_after": serialize_datetime(created_after) if created_after is not None else None,
+ "created_before": serialize_datetime(created_before) if created_before is not None else None,
+ "cursor": cursor,
+ "include_deleted_data": include_deleted_data,
+ "include_remote_data": include_remote_data,
+ "modified_after": serialize_datetime(modified_after) if modified_after is not None else None,
+ "modified_before": serialize_datetime(modified_before) if modified_before is not None else None,
+ "page_size": page_size,
+ "remote_id": remote_id,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(PaginatedAccountingAttachmentList, _response.json()) # type: ignore
@@ -297,6 +407,7 @@ async def create(
is_debug_mode: typing.Optional[bool] = None,
run_async: typing.Optional[bool] = None,
model: AccountingAttachmentRequest,
+ request_options: typing.Optional[RequestOptions] = None,
) -> AccountingAttachmentResponse:
"""
Creates an `AccountingAttachment` object with the given values.
@@ -307,6 +418,8 @@ async def create(
- run_async: typing.Optional[bool]. Whether or not third-party updates should be run asynchronously.
- model: AccountingAttachmentRequest.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import AsyncMerge
from merge.resources.accounting import AccountingAttachmentRequest
@@ -326,10 +439,36 @@ async def create(
_response = await self._client_wrapper.httpx_client.request(
"POST",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/accounting/v1/attachments"),
- params=remove_none_from_dict({"is_debug_mode": is_debug_mode, "run_async": run_async}),
- json=jsonable_encoder({"model": model}),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "is_debug_mode": is_debug_mode,
+ "run_async": run_async,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ json=jsonable_encoder({"model": model})
+ if request_options is None or request_options.get("additional_body_parameters") is None
+ else {
+ **jsonable_encoder({"model": model}),
+ **(jsonable_encoder(remove_none_from_dict(request_options.get("additional_body_parameters", {})))),
+ },
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(AccountingAttachmentResponse, _response.json()) # type: ignore
@@ -339,7 +478,13 @@ async def create(
raise ApiError(status_code=_response.status_code, body=_response.text)
raise ApiError(status_code=_response.status_code, body=_response_json)
- async def retrieve(self, id: str, *, include_remote_data: typing.Optional[bool] = None) -> AccountingAttachment:
+ async def retrieve(
+ self,
+ id: str,
+ *,
+ include_remote_data: typing.Optional[bool] = None,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> AccountingAttachment:
"""
Returns an `AccountingAttachment` object with the given `id`.
@@ -347,6 +492,8 @@ async def retrieve(self, id: str, *, include_remote_data: typing.Optional[bool]
- id: str.
- include_remote_data: typing.Optional[bool]. Whether to include the original data Merge fetched from the third-party to produce these models.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import AsyncMerge
@@ -355,15 +502,35 @@ async def retrieve(self, id: str, *, include_remote_data: typing.Optional[bool]
api_key="YOUR_API_KEY",
)
await client.accounting.attachments.retrieve(
- id="id",
+ id="string",
)
"""
_response = await self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", f"api/accounting/v1/attachments/{id}"),
- params=remove_none_from_dict({"include_remote_data": include_remote_data}),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "include_remote_data": include_remote_data,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(AccountingAttachment, _response.json()) # type: ignore
@@ -373,10 +540,12 @@ async def retrieve(self, id: str, *, include_remote_data: typing.Optional[bool]
raise ApiError(status_code=_response.status_code, body=_response.text)
raise ApiError(status_code=_response.status_code, body=_response_json)
- async def meta_post_retrieve(self) -> MetaResponse:
+ async def meta_post_retrieve(self, *, request_options: typing.Optional[RequestOptions] = None) -> MetaResponse:
"""
Returns metadata for `AccountingAttachment` POSTs.
+ Parameters:
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import AsyncMerge
@@ -389,8 +558,20 @@ async def meta_post_retrieve(self) -> MetaResponse:
_response = await self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/accounting/v1/attachments/meta/post"),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ request_options.get("additional_query_parameters") if request_options is not None else None
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(MetaResponse, _response.json()) # type: ignore
diff --git a/src/merge/resources/accounting/resources/audit_trail/client.py b/src/merge/resources/accounting/resources/audit_trail/client.py
index cba8b343..40c1b6d5 100644
--- a/src/merge/resources/accounting/resources/audit_trail/client.py
+++ b/src/merge/resources/accounting/resources/audit_trail/client.py
@@ -6,7 +6,9 @@
from .....core.api_error import ApiError
from .....core.client_wrapper import AsyncClientWrapper, SyncClientWrapper
+from .....core.jsonable_encoder import jsonable_encoder
from .....core.remove_none_from_dict import remove_none_from_dict
+from .....core.request_options import RequestOptions
from ...types.paginated_audit_log_event_list import PaginatedAuditLogEventList
try:
@@ -28,6 +30,7 @@ def list(
page_size: typing.Optional[int] = None,
start_date: typing.Optional[str] = None,
user_email: typing.Optional[str] = None,
+ request_options: typing.Optional[RequestOptions] = None,
) -> PaginatedAuditLogEventList:
"""
Gets a list of audit trail events.
@@ -44,6 +47,8 @@ def list(
- start_date: typing.Optional[str]. If included, will only include audit trail events that occurred after this time
- user_email: typing.Optional[str]. If provided, this will return events associated with the specified user email. Please note that the email address reflects the user's email at the time of the event, and may not be their current email.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import Merge
@@ -56,18 +61,34 @@ def list(
_response = self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/accounting/v1/audit-trail"),
- params=remove_none_from_dict(
- {
- "cursor": cursor,
- "end_date": end_date,
- "event_type": event_type,
- "page_size": page_size,
- "start_date": start_date,
- "user_email": user_email,
- }
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "cursor": cursor,
+ "end_date": end_date,
+ "event_type": event_type,
+ "page_size": page_size,
+ "start_date": start_date,
+ "user_email": user_email,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(PaginatedAuditLogEventList, _response.json()) # type: ignore
@@ -91,6 +112,7 @@ async def list(
page_size: typing.Optional[int] = None,
start_date: typing.Optional[str] = None,
user_email: typing.Optional[str] = None,
+ request_options: typing.Optional[RequestOptions] = None,
) -> PaginatedAuditLogEventList:
"""
Gets a list of audit trail events.
@@ -107,6 +129,8 @@ async def list(
- start_date: typing.Optional[str]. If included, will only include audit trail events that occurred after this time
- user_email: typing.Optional[str]. If provided, this will return events associated with the specified user email. Please note that the email address reflects the user's email at the time of the event, and may not be their current email.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import AsyncMerge
@@ -119,18 +143,34 @@ async def list(
_response = await self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/accounting/v1/audit-trail"),
- params=remove_none_from_dict(
- {
- "cursor": cursor,
- "end_date": end_date,
- "event_type": event_type,
- "page_size": page_size,
- "start_date": start_date,
- "user_email": user_email,
- }
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "cursor": cursor,
+ "end_date": end_date,
+ "event_type": event_type,
+ "page_size": page_size,
+ "start_date": start_date,
+ "user_email": user_email,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(PaginatedAuditLogEventList, _response.json()) # type: ignore
diff --git a/src/merge/resources/accounting/resources/available_actions/client.py b/src/merge/resources/accounting/resources/available_actions/client.py
index e8b3e6fa..ccf1946f 100644
--- a/src/merge/resources/accounting/resources/available_actions/client.py
+++ b/src/merge/resources/accounting/resources/available_actions/client.py
@@ -1,10 +1,14 @@
# This file was auto-generated by Fern from our API Definition.
+import typing
import urllib.parse
from json.decoder import JSONDecodeError
from .....core.api_error import ApiError
from .....core.client_wrapper import AsyncClientWrapper, SyncClientWrapper
+from .....core.jsonable_encoder import jsonable_encoder
+from .....core.remove_none_from_dict import remove_none_from_dict
+from .....core.request_options import RequestOptions
from ...types.available_actions import AvailableActions
try:
@@ -17,15 +21,38 @@ class AvailableActionsClient:
def __init__(self, *, client_wrapper: SyncClientWrapper):
self._client_wrapper = client_wrapper
- def retrieve(self) -> AvailableActions:
+ def retrieve(self, *, request_options: typing.Optional[RequestOptions] = None) -> AvailableActions:
"""
Returns a list of models and actions available for an account.
+
+ Parameters:
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
+ ---
+ from merge.client import Merge
+
+ client = Merge(
+ account_token="YOUR_ACCOUNT_TOKEN",
+ api_key="YOUR_API_KEY",
+ )
+ client.accounting.available_actions.retrieve()
"""
_response = self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/accounting/v1/available-actions"),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ request_options.get("additional_query_parameters") if request_options is not None else None
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(AvailableActions, _response.json()) # type: ignore
@@ -40,15 +67,38 @@ class AsyncAvailableActionsClient:
def __init__(self, *, client_wrapper: AsyncClientWrapper):
self._client_wrapper = client_wrapper
- async def retrieve(self) -> AvailableActions:
+ async def retrieve(self, *, request_options: typing.Optional[RequestOptions] = None) -> AvailableActions:
"""
Returns a list of models and actions available for an account.
+
+ Parameters:
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
+ ---
+ from merge.client import AsyncMerge
+
+ client = AsyncMerge(
+ account_token="YOUR_ACCOUNT_TOKEN",
+ api_key="YOUR_API_KEY",
+ )
+ await client.accounting.available_actions.retrieve()
"""
_response = await self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/accounting/v1/available-actions"),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ request_options.get("additional_query_parameters") if request_options is not None else None
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(AvailableActions, _response.json()) # type: ignore
diff --git a/src/merge/resources/accounting/resources/balance_sheets/client.py b/src/merge/resources/accounting/resources/balance_sheets/client.py
index 0ce67567..f020cc61 100644
--- a/src/merge/resources/accounting/resources/balance_sheets/client.py
+++ b/src/merge/resources/accounting/resources/balance_sheets/client.py
@@ -5,12 +5,12 @@
import urllib.parse
from json.decoder import JSONDecodeError
-import typing_extensions
-
from .....core.api_error import ApiError
from .....core.client_wrapper import AsyncClientWrapper, SyncClientWrapper
from .....core.datetime_utils import serialize_datetime
+from .....core.jsonable_encoder import jsonable_encoder
from .....core.remove_none_from_dict import remove_none_from_dict
+from .....core.request_options import RequestOptions
from ...types.balance_sheet import BalanceSheet
from ...types.paginated_balance_sheet_list import PaginatedBalanceSheetList
@@ -31,13 +31,14 @@ def list(
created_after: typing.Optional[dt.datetime] = None,
created_before: typing.Optional[dt.datetime] = None,
cursor: typing.Optional[str] = None,
- expand: typing.Optional[typing_extensions.Literal["company"]] = None,
+ expand: typing.Optional[typing.Literal["company"]] = None,
include_deleted_data: typing.Optional[bool] = None,
include_remote_data: typing.Optional[bool] = None,
modified_after: typing.Optional[dt.datetime] = None,
modified_before: typing.Optional[dt.datetime] = None,
page_size: typing.Optional[int] = None,
remote_id: typing.Optional[str] = None,
+ request_options: typing.Optional[RequestOptions] = None,
) -> PaginatedBalanceSheetList:
"""
Returns a list of `BalanceSheet` objects.
@@ -51,7 +52,7 @@ def list(
- cursor: typing.Optional[str]. The pagination cursor value.
- - expand: typing.Optional[typing_extensions.Literal["company"]]. Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces.
+ - expand: typing.Optional[typing.Literal["company"]]. Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces.
- include_deleted_data: typing.Optional[bool]. Whether to include data that was marked as deleted by third party webhooks.
@@ -64,6 +65,8 @@ def list(
- page_size: typing.Optional[int]. Number of results to return per page.
- remote_id: typing.Optional[str]. The API provider's ID for the given object.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import Merge
@@ -78,23 +81,39 @@ def list(
_response = self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/accounting/v1/balance-sheets"),
- params=remove_none_from_dict(
- {
- "company_id": company_id,
- "created_after": serialize_datetime(created_after) if created_after is not None else None,
- "created_before": serialize_datetime(created_before) if created_before is not None else None,
- "cursor": cursor,
- "expand": expand,
- "include_deleted_data": include_deleted_data,
- "include_remote_data": include_remote_data,
- "modified_after": serialize_datetime(modified_after) if modified_after is not None else None,
- "modified_before": serialize_datetime(modified_before) if modified_before is not None else None,
- "page_size": page_size,
- "remote_id": remote_id,
- }
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "company_id": company_id,
+ "created_after": serialize_datetime(created_after) if created_after is not None else None,
+ "created_before": serialize_datetime(created_before) if created_before is not None else None,
+ "cursor": cursor,
+ "expand": expand,
+ "include_deleted_data": include_deleted_data,
+ "include_remote_data": include_remote_data,
+ "modified_after": serialize_datetime(modified_after) if modified_after is not None else None,
+ "modified_before": serialize_datetime(modified_before) if modified_before is not None else None,
+ "page_size": page_size,
+ "remote_id": remote_id,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(PaginatedBalanceSheetList, _response.json()) # type: ignore
@@ -108,8 +127,9 @@ def retrieve(
self,
id: str,
*,
- expand: typing.Optional[typing_extensions.Literal["company"]] = None,
+ expand: typing.Optional[typing.Literal["company"]] = None,
include_remote_data: typing.Optional[bool] = None,
+ request_options: typing.Optional[RequestOptions] = None,
) -> BalanceSheet:
"""
Returns a `BalanceSheet` object with the given `id`.
@@ -117,9 +137,11 @@ def retrieve(
Parameters:
- id: str.
- - expand: typing.Optional[typing_extensions.Literal["company"]]. Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces.
+ - expand: typing.Optional[typing.Literal["company"]]. Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces.
- include_remote_data: typing.Optional[bool]. Whether to include the original data Merge fetched from the third-party to produce these models.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import Merge
@@ -128,16 +150,37 @@ def retrieve(
api_key="YOUR_API_KEY",
)
client.accounting.balance_sheets.retrieve(
- id="id",
+ id="string",
expand="company",
)
"""
_response = self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", f"api/accounting/v1/balance-sheets/{id}"),
- params=remove_none_from_dict({"expand": expand, "include_remote_data": include_remote_data}),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "expand": expand,
+ "include_remote_data": include_remote_data,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(BalanceSheet, _response.json()) # type: ignore
@@ -159,13 +202,14 @@ async def list(
created_after: typing.Optional[dt.datetime] = None,
created_before: typing.Optional[dt.datetime] = None,
cursor: typing.Optional[str] = None,
- expand: typing.Optional[typing_extensions.Literal["company"]] = None,
+ expand: typing.Optional[typing.Literal["company"]] = None,
include_deleted_data: typing.Optional[bool] = None,
include_remote_data: typing.Optional[bool] = None,
modified_after: typing.Optional[dt.datetime] = None,
modified_before: typing.Optional[dt.datetime] = None,
page_size: typing.Optional[int] = None,
remote_id: typing.Optional[str] = None,
+ request_options: typing.Optional[RequestOptions] = None,
) -> PaginatedBalanceSheetList:
"""
Returns a list of `BalanceSheet` objects.
@@ -179,7 +223,7 @@ async def list(
- cursor: typing.Optional[str]. The pagination cursor value.
- - expand: typing.Optional[typing_extensions.Literal["company"]]. Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces.
+ - expand: typing.Optional[typing.Literal["company"]]. Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces.
- include_deleted_data: typing.Optional[bool]. Whether to include data that was marked as deleted by third party webhooks.
@@ -192,6 +236,8 @@ async def list(
- page_size: typing.Optional[int]. Number of results to return per page.
- remote_id: typing.Optional[str]. The API provider's ID for the given object.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import AsyncMerge
@@ -206,23 +252,39 @@ async def list(
_response = await self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/accounting/v1/balance-sheets"),
- params=remove_none_from_dict(
- {
- "company_id": company_id,
- "created_after": serialize_datetime(created_after) if created_after is not None else None,
- "created_before": serialize_datetime(created_before) if created_before is not None else None,
- "cursor": cursor,
- "expand": expand,
- "include_deleted_data": include_deleted_data,
- "include_remote_data": include_remote_data,
- "modified_after": serialize_datetime(modified_after) if modified_after is not None else None,
- "modified_before": serialize_datetime(modified_before) if modified_before is not None else None,
- "page_size": page_size,
- "remote_id": remote_id,
- }
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "company_id": company_id,
+ "created_after": serialize_datetime(created_after) if created_after is not None else None,
+ "created_before": serialize_datetime(created_before) if created_before is not None else None,
+ "cursor": cursor,
+ "expand": expand,
+ "include_deleted_data": include_deleted_data,
+ "include_remote_data": include_remote_data,
+ "modified_after": serialize_datetime(modified_after) if modified_after is not None else None,
+ "modified_before": serialize_datetime(modified_before) if modified_before is not None else None,
+ "page_size": page_size,
+ "remote_id": remote_id,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(PaginatedBalanceSheetList, _response.json()) # type: ignore
@@ -236,8 +298,9 @@ async def retrieve(
self,
id: str,
*,
- expand: typing.Optional[typing_extensions.Literal["company"]] = None,
+ expand: typing.Optional[typing.Literal["company"]] = None,
include_remote_data: typing.Optional[bool] = None,
+ request_options: typing.Optional[RequestOptions] = None,
) -> BalanceSheet:
"""
Returns a `BalanceSheet` object with the given `id`.
@@ -245,9 +308,11 @@ async def retrieve(
Parameters:
- id: str.
- - expand: typing.Optional[typing_extensions.Literal["company"]]. Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces.
+ - expand: typing.Optional[typing.Literal["company"]]. Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces.
- include_remote_data: typing.Optional[bool]. Whether to include the original data Merge fetched from the third-party to produce these models.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import AsyncMerge
@@ -256,16 +321,37 @@ async def retrieve(
api_key="YOUR_API_KEY",
)
await client.accounting.balance_sheets.retrieve(
- id="id",
+ id="string",
expand="company",
)
"""
_response = await self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", f"api/accounting/v1/balance-sheets/{id}"),
- params=remove_none_from_dict({"expand": expand, "include_remote_data": include_remote_data}),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "expand": expand,
+ "include_remote_data": include_remote_data,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(BalanceSheet, _response.json()) # type: ignore
diff --git a/src/merge/resources/accounting/resources/cash_flow_statements/client.py b/src/merge/resources/accounting/resources/cash_flow_statements/client.py
index 08636cd3..108012e2 100644
--- a/src/merge/resources/accounting/resources/cash_flow_statements/client.py
+++ b/src/merge/resources/accounting/resources/cash_flow_statements/client.py
@@ -5,12 +5,12 @@
import urllib.parse
from json.decoder import JSONDecodeError
-import typing_extensions
-
from .....core.api_error import ApiError
from .....core.client_wrapper import AsyncClientWrapper, SyncClientWrapper
from .....core.datetime_utils import serialize_datetime
+from .....core.jsonable_encoder import jsonable_encoder
from .....core.remove_none_from_dict import remove_none_from_dict
+from .....core.request_options import RequestOptions
from ...types.cash_flow_statement import CashFlowStatement
from ...types.paginated_cash_flow_statement_list import PaginatedCashFlowStatementList
@@ -31,13 +31,14 @@ def list(
created_after: typing.Optional[dt.datetime] = None,
created_before: typing.Optional[dt.datetime] = None,
cursor: typing.Optional[str] = None,
- expand: typing.Optional[typing_extensions.Literal["company"]] = None,
+ expand: typing.Optional[typing.Literal["company"]] = None,
include_deleted_data: typing.Optional[bool] = None,
include_remote_data: typing.Optional[bool] = None,
modified_after: typing.Optional[dt.datetime] = None,
modified_before: typing.Optional[dt.datetime] = None,
page_size: typing.Optional[int] = None,
remote_id: typing.Optional[str] = None,
+ request_options: typing.Optional[RequestOptions] = None,
) -> PaginatedCashFlowStatementList:
"""
Returns a list of `CashFlowStatement` objects.
@@ -51,7 +52,7 @@ def list(
- cursor: typing.Optional[str]. The pagination cursor value.
- - expand: typing.Optional[typing_extensions.Literal["company"]]. Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces.
+ - expand: typing.Optional[typing.Literal["company"]]. Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces.
- include_deleted_data: typing.Optional[bool]. Whether to include data that was marked as deleted by third party webhooks.
@@ -64,6 +65,8 @@ def list(
- page_size: typing.Optional[int]. Number of results to return per page.
- remote_id: typing.Optional[str]. The API provider's ID for the given object.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import Merge
@@ -78,23 +81,39 @@ def list(
_response = self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/accounting/v1/cash-flow-statements"),
- params=remove_none_from_dict(
- {
- "company_id": company_id,
- "created_after": serialize_datetime(created_after) if created_after is not None else None,
- "created_before": serialize_datetime(created_before) if created_before is not None else None,
- "cursor": cursor,
- "expand": expand,
- "include_deleted_data": include_deleted_data,
- "include_remote_data": include_remote_data,
- "modified_after": serialize_datetime(modified_after) if modified_after is not None else None,
- "modified_before": serialize_datetime(modified_before) if modified_before is not None else None,
- "page_size": page_size,
- "remote_id": remote_id,
- }
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "company_id": company_id,
+ "created_after": serialize_datetime(created_after) if created_after is not None else None,
+ "created_before": serialize_datetime(created_before) if created_before is not None else None,
+ "cursor": cursor,
+ "expand": expand,
+ "include_deleted_data": include_deleted_data,
+ "include_remote_data": include_remote_data,
+ "modified_after": serialize_datetime(modified_after) if modified_after is not None else None,
+ "modified_before": serialize_datetime(modified_before) if modified_before is not None else None,
+ "page_size": page_size,
+ "remote_id": remote_id,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(PaginatedCashFlowStatementList, _response.json()) # type: ignore
@@ -108,8 +127,9 @@ def retrieve(
self,
id: str,
*,
- expand: typing.Optional[typing_extensions.Literal["company"]] = None,
+ expand: typing.Optional[typing.Literal["company"]] = None,
include_remote_data: typing.Optional[bool] = None,
+ request_options: typing.Optional[RequestOptions] = None,
) -> CashFlowStatement:
"""
Returns a `CashFlowStatement` object with the given `id`.
@@ -117,9 +137,11 @@ def retrieve(
Parameters:
- id: str.
- - expand: typing.Optional[typing_extensions.Literal["company"]]. Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces.
+ - expand: typing.Optional[typing.Literal["company"]]. Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces.
- include_remote_data: typing.Optional[bool]. Whether to include the original data Merge fetched from the third-party to produce these models.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import Merge
@@ -128,7 +150,7 @@ def retrieve(
api_key="YOUR_API_KEY",
)
client.accounting.cash_flow_statements.retrieve(
- id="id",
+ id="string",
expand="company",
)
"""
@@ -137,9 +159,30 @@ def retrieve(
urllib.parse.urljoin(
f"{self._client_wrapper.get_base_url()}/", f"api/accounting/v1/cash-flow-statements/{id}"
),
- params=remove_none_from_dict({"expand": expand, "include_remote_data": include_remote_data}),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "expand": expand,
+ "include_remote_data": include_remote_data,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(CashFlowStatement, _response.json()) # type: ignore
@@ -161,13 +204,14 @@ async def list(
created_after: typing.Optional[dt.datetime] = None,
created_before: typing.Optional[dt.datetime] = None,
cursor: typing.Optional[str] = None,
- expand: typing.Optional[typing_extensions.Literal["company"]] = None,
+ expand: typing.Optional[typing.Literal["company"]] = None,
include_deleted_data: typing.Optional[bool] = None,
include_remote_data: typing.Optional[bool] = None,
modified_after: typing.Optional[dt.datetime] = None,
modified_before: typing.Optional[dt.datetime] = None,
page_size: typing.Optional[int] = None,
remote_id: typing.Optional[str] = None,
+ request_options: typing.Optional[RequestOptions] = None,
) -> PaginatedCashFlowStatementList:
"""
Returns a list of `CashFlowStatement` objects.
@@ -181,7 +225,7 @@ async def list(
- cursor: typing.Optional[str]. The pagination cursor value.
- - expand: typing.Optional[typing_extensions.Literal["company"]]. Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces.
+ - expand: typing.Optional[typing.Literal["company"]]. Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces.
- include_deleted_data: typing.Optional[bool]. Whether to include data that was marked as deleted by third party webhooks.
@@ -194,6 +238,8 @@ async def list(
- page_size: typing.Optional[int]. Number of results to return per page.
- remote_id: typing.Optional[str]. The API provider's ID for the given object.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import AsyncMerge
@@ -208,23 +254,39 @@ async def list(
_response = await self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/accounting/v1/cash-flow-statements"),
- params=remove_none_from_dict(
- {
- "company_id": company_id,
- "created_after": serialize_datetime(created_after) if created_after is not None else None,
- "created_before": serialize_datetime(created_before) if created_before is not None else None,
- "cursor": cursor,
- "expand": expand,
- "include_deleted_data": include_deleted_data,
- "include_remote_data": include_remote_data,
- "modified_after": serialize_datetime(modified_after) if modified_after is not None else None,
- "modified_before": serialize_datetime(modified_before) if modified_before is not None else None,
- "page_size": page_size,
- "remote_id": remote_id,
- }
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "company_id": company_id,
+ "created_after": serialize_datetime(created_after) if created_after is not None else None,
+ "created_before": serialize_datetime(created_before) if created_before is not None else None,
+ "cursor": cursor,
+ "expand": expand,
+ "include_deleted_data": include_deleted_data,
+ "include_remote_data": include_remote_data,
+ "modified_after": serialize_datetime(modified_after) if modified_after is not None else None,
+ "modified_before": serialize_datetime(modified_before) if modified_before is not None else None,
+ "page_size": page_size,
+ "remote_id": remote_id,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(PaginatedCashFlowStatementList, _response.json()) # type: ignore
@@ -238,8 +300,9 @@ async def retrieve(
self,
id: str,
*,
- expand: typing.Optional[typing_extensions.Literal["company"]] = None,
+ expand: typing.Optional[typing.Literal["company"]] = None,
include_remote_data: typing.Optional[bool] = None,
+ request_options: typing.Optional[RequestOptions] = None,
) -> CashFlowStatement:
"""
Returns a `CashFlowStatement` object with the given `id`.
@@ -247,9 +310,11 @@ async def retrieve(
Parameters:
- id: str.
- - expand: typing.Optional[typing_extensions.Literal["company"]]. Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces.
+ - expand: typing.Optional[typing.Literal["company"]]. Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces.
- include_remote_data: typing.Optional[bool]. Whether to include the original data Merge fetched from the third-party to produce these models.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import AsyncMerge
@@ -258,7 +323,7 @@ async def retrieve(
api_key="YOUR_API_KEY",
)
await client.accounting.cash_flow_statements.retrieve(
- id="id",
+ id="string",
expand="company",
)
"""
@@ -267,9 +332,30 @@ async def retrieve(
urllib.parse.urljoin(
f"{self._client_wrapper.get_base_url()}/", f"api/accounting/v1/cash-flow-statements/{id}"
),
- params=remove_none_from_dict({"expand": expand, "include_remote_data": include_remote_data}),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "expand": expand,
+ "include_remote_data": include_remote_data,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(CashFlowStatement, _response.json()) # type: ignore
diff --git a/src/merge/resources/accounting/resources/company_info/client.py b/src/merge/resources/accounting/resources/company_info/client.py
index f0cf79f7..d20d4b27 100644
--- a/src/merge/resources/accounting/resources/company_info/client.py
+++ b/src/merge/resources/accounting/resources/company_info/client.py
@@ -8,7 +8,9 @@
from .....core.api_error import ApiError
from .....core.client_wrapper import AsyncClientWrapper, SyncClientWrapper
from .....core.datetime_utils import serialize_datetime
+from .....core.jsonable_encoder import jsonable_encoder
from .....core.remove_none_from_dict import remove_none_from_dict
+from .....core.request_options import RequestOptions
from ...types.company_info import CompanyInfo
from ...types.paginated_company_info_list import PaginatedCompanyInfoList
from .types.company_info_list_request_expand import CompanyInfoListRequestExpand
@@ -37,6 +39,7 @@ def list(
modified_before: typing.Optional[dt.datetime] = None,
page_size: typing.Optional[int] = None,
remote_id: typing.Optional[str] = None,
+ request_options: typing.Optional[RequestOptions] = None,
) -> PaginatedCompanyInfoList:
"""
Returns a list of `CompanyInfo` objects.
@@ -61,6 +64,8 @@ def list(
- page_size: typing.Optional[int]. Number of results to return per page.
- remote_id: typing.Optional[str]. The API provider's ID for the given object.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import Merge
from merge.resources.accounting import CompanyInfoListRequestExpand
@@ -76,22 +81,38 @@ def list(
_response = self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/accounting/v1/company-info"),
- params=remove_none_from_dict(
- {
- "created_after": serialize_datetime(created_after) if created_after is not None else None,
- "created_before": serialize_datetime(created_before) if created_before is not None else None,
- "cursor": cursor,
- "expand": expand,
- "include_deleted_data": include_deleted_data,
- "include_remote_data": include_remote_data,
- "modified_after": serialize_datetime(modified_after) if modified_after is not None else None,
- "modified_before": serialize_datetime(modified_before) if modified_before is not None else None,
- "page_size": page_size,
- "remote_id": remote_id,
- }
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "created_after": serialize_datetime(created_after) if created_after is not None else None,
+ "created_before": serialize_datetime(created_before) if created_before is not None else None,
+ "cursor": cursor,
+ "expand": expand,
+ "include_deleted_data": include_deleted_data,
+ "include_remote_data": include_remote_data,
+ "modified_after": serialize_datetime(modified_after) if modified_after is not None else None,
+ "modified_before": serialize_datetime(modified_before) if modified_before is not None else None,
+ "page_size": page_size,
+ "remote_id": remote_id,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(PaginatedCompanyInfoList, _response.json()) # type: ignore
@@ -107,6 +128,7 @@ def retrieve(
*,
expand: typing.Optional[CompanyInfoRetrieveRequestExpand] = None,
include_remote_data: typing.Optional[bool] = None,
+ request_options: typing.Optional[RequestOptions] = None,
) -> CompanyInfo:
"""
Returns a `CompanyInfo` object with the given `id`.
@@ -117,6 +139,8 @@ def retrieve(
- expand: typing.Optional[CompanyInfoRetrieveRequestExpand]. Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces.
- include_remote_data: typing.Optional[bool]. Whether to include the original data Merge fetched from the third-party to produce these models.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import Merge
from merge.resources.accounting import CompanyInfoRetrieveRequestExpand
@@ -126,16 +150,37 @@ def retrieve(
api_key="YOUR_API_KEY",
)
client.accounting.company_info.retrieve(
- id="id",
+ id="string",
expand=CompanyInfoRetrieveRequestExpand.ADDRESSES,
)
"""
_response = self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", f"api/accounting/v1/company-info/{id}"),
- params=remove_none_from_dict({"expand": expand, "include_remote_data": include_remote_data}),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "expand": expand,
+ "include_remote_data": include_remote_data,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(CompanyInfo, _response.json()) # type: ignore
@@ -163,6 +208,7 @@ async def list(
modified_before: typing.Optional[dt.datetime] = None,
page_size: typing.Optional[int] = None,
remote_id: typing.Optional[str] = None,
+ request_options: typing.Optional[RequestOptions] = None,
) -> PaginatedCompanyInfoList:
"""
Returns a list of `CompanyInfo` objects.
@@ -187,6 +233,8 @@ async def list(
- page_size: typing.Optional[int]. Number of results to return per page.
- remote_id: typing.Optional[str]. The API provider's ID for the given object.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import AsyncMerge
from merge.resources.accounting import CompanyInfoListRequestExpand
@@ -202,22 +250,38 @@ async def list(
_response = await self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/accounting/v1/company-info"),
- params=remove_none_from_dict(
- {
- "created_after": serialize_datetime(created_after) if created_after is not None else None,
- "created_before": serialize_datetime(created_before) if created_before is not None else None,
- "cursor": cursor,
- "expand": expand,
- "include_deleted_data": include_deleted_data,
- "include_remote_data": include_remote_data,
- "modified_after": serialize_datetime(modified_after) if modified_after is not None else None,
- "modified_before": serialize_datetime(modified_before) if modified_before is not None else None,
- "page_size": page_size,
- "remote_id": remote_id,
- }
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "created_after": serialize_datetime(created_after) if created_after is not None else None,
+ "created_before": serialize_datetime(created_before) if created_before is not None else None,
+ "cursor": cursor,
+ "expand": expand,
+ "include_deleted_data": include_deleted_data,
+ "include_remote_data": include_remote_data,
+ "modified_after": serialize_datetime(modified_after) if modified_after is not None else None,
+ "modified_before": serialize_datetime(modified_before) if modified_before is not None else None,
+ "page_size": page_size,
+ "remote_id": remote_id,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(PaginatedCompanyInfoList, _response.json()) # type: ignore
@@ -233,6 +297,7 @@ async def retrieve(
*,
expand: typing.Optional[CompanyInfoRetrieveRequestExpand] = None,
include_remote_data: typing.Optional[bool] = None,
+ request_options: typing.Optional[RequestOptions] = None,
) -> CompanyInfo:
"""
Returns a `CompanyInfo` object with the given `id`.
@@ -243,6 +308,8 @@ async def retrieve(
- expand: typing.Optional[CompanyInfoRetrieveRequestExpand]. Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces.
- include_remote_data: typing.Optional[bool]. Whether to include the original data Merge fetched from the third-party to produce these models.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import AsyncMerge
from merge.resources.accounting import CompanyInfoRetrieveRequestExpand
@@ -252,16 +319,37 @@ async def retrieve(
api_key="YOUR_API_KEY",
)
await client.accounting.company_info.retrieve(
- id="id",
+ id="string",
expand=CompanyInfoRetrieveRequestExpand.ADDRESSES,
)
"""
_response = await self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", f"api/accounting/v1/company-info/{id}"),
- params=remove_none_from_dict({"expand": expand, "include_remote_data": include_remote_data}),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "expand": expand,
+ "include_remote_data": include_remote_data,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(CompanyInfo, _response.json()) # type: ignore
diff --git a/src/merge/resources/accounting/resources/contacts/client.py b/src/merge/resources/accounting/resources/contacts/client.py
index 12d3db95..5d576210 100644
--- a/src/merge/resources/accounting/resources/contacts/client.py
+++ b/src/merge/resources/accounting/resources/contacts/client.py
@@ -5,13 +5,12 @@
import urllib.parse
from json.decoder import JSONDecodeError
-import typing_extensions
-
from .....core.api_error import ApiError
from .....core.client_wrapper import AsyncClientWrapper, SyncClientWrapper
from .....core.datetime_utils import serialize_datetime
from .....core.jsonable_encoder import jsonable_encoder
from .....core.remove_none_from_dict import remove_none_from_dict
+from .....core.request_options import RequestOptions
from ...types.contact import Contact
from ...types.contact_request import ContactRequest
from ...types.contact_response import ContactResponse
@@ -48,9 +47,10 @@ def list(
modified_after: typing.Optional[dt.datetime] = None,
modified_before: typing.Optional[dt.datetime] = None,
page_size: typing.Optional[int] = None,
- remote_fields: typing.Optional[typing_extensions.Literal["status"]] = None,
+ remote_fields: typing.Optional[typing.Literal["status"]] = None,
remote_id: typing.Optional[str] = None,
- show_enum_origins: typing.Optional[typing_extensions.Literal["status"]] = None,
+ show_enum_origins: typing.Optional[typing.Literal["status"]] = None,
+ request_options: typing.Optional[RequestOptions] = None,
) -> PaginatedContactList:
"""
Returns a list of `Contact` objects.
@@ -80,11 +80,13 @@ def list(
- page_size: typing.Optional[int]. Number of results to return per page.
- - remote_fields: typing.Optional[typing_extensions.Literal["status"]]. Deprecated. Use show_enum_origins.
+ - remote_fields: typing.Optional[typing.Literal["status"]]. Deprecated. Use show_enum_origins.
- remote_id: typing.Optional[str]. The API provider's ID for the given object.
- - show_enum_origins: typing.Optional[typing_extensions.Literal["status"]]. Which fields should be returned in non-normalized form.
+ - show_enum_origins: typing.Optional[typing.Literal["status"]]. Which fields should be returned in non-normalized form.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import Merge
from merge.resources.accounting import ContactsListRequestExpand
@@ -102,27 +104,43 @@ def list(
_response = self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/accounting/v1/contacts"),
- params=remove_none_from_dict(
- {
- "company_id": company_id,
- "created_after": serialize_datetime(created_after) if created_after is not None else None,
- "created_before": serialize_datetime(created_before) if created_before is not None else None,
- "cursor": cursor,
- "expand": expand,
- "include_deleted_data": include_deleted_data,
- "include_remote_data": include_remote_data,
- "is_customer": is_customer,
- "is_supplier": is_supplier,
- "modified_after": serialize_datetime(modified_after) if modified_after is not None else None,
- "modified_before": serialize_datetime(modified_before) if modified_before is not None else None,
- "page_size": page_size,
- "remote_fields": remote_fields,
- "remote_id": remote_id,
- "show_enum_origins": show_enum_origins,
- }
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "company_id": company_id,
+ "created_after": serialize_datetime(created_after) if created_after is not None else None,
+ "created_before": serialize_datetime(created_before) if created_before is not None else None,
+ "cursor": cursor,
+ "expand": expand,
+ "include_deleted_data": include_deleted_data,
+ "include_remote_data": include_remote_data,
+ "is_customer": is_customer,
+ "is_supplier": is_supplier,
+ "modified_after": serialize_datetime(modified_after) if modified_after is not None else None,
+ "modified_before": serialize_datetime(modified_before) if modified_before is not None else None,
+ "page_size": page_size,
+ "remote_fields": remote_fields,
+ "remote_id": remote_id,
+ "show_enum_origins": show_enum_origins,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(PaginatedContactList, _response.json()) # type: ignore
@@ -138,6 +156,7 @@ def create(
is_debug_mode: typing.Optional[bool] = None,
run_async: typing.Optional[bool] = None,
model: ContactRequest,
+ request_options: typing.Optional[RequestOptions] = None,
) -> ContactResponse:
"""
Creates a `Contact` object with the given values.
@@ -148,12 +167,11 @@ def create(
- run_async: typing.Optional[bool]. Whether or not third-party updates should be run asynchronously.
- model: ContactRequest.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import Merge
- from merge.resources.accounting import (
- AccountingPhoneNumberRequest,
- ContactRequest,
- )
+ from merge.resources.accounting import ContactRequest
client = Merge(
account_token="YOUR_ACCOUNT_TOKEN",
@@ -167,22 +185,42 @@ def create(
tax_number="12-3456789",
currency="USD",
company="595c8f97-2ac4-45b7-b000-41bdf43240b5",
- phone_numbers=[
- AccountingPhoneNumberRequest(
- number="+3198675309",
- type="Mobile",
- )
- ],
),
)
"""
_response = self._client_wrapper.httpx_client.request(
"POST",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/accounting/v1/contacts"),
- params=remove_none_from_dict({"is_debug_mode": is_debug_mode, "run_async": run_async}),
- json=jsonable_encoder({"model": model}),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "is_debug_mode": is_debug_mode,
+ "run_async": run_async,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ json=jsonable_encoder({"model": model})
+ if request_options is None or request_options.get("additional_body_parameters") is None
+ else {
+ **jsonable_encoder({"model": model}),
+ **(jsonable_encoder(remove_none_from_dict(request_options.get("additional_body_parameters", {})))),
+ },
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(ContactResponse, _response.json()) # type: ignore
@@ -198,8 +236,9 @@ def retrieve(
*,
expand: typing.Optional[ContactsRetrieveRequestExpand] = None,
include_remote_data: typing.Optional[bool] = None,
- remote_fields: typing.Optional[typing_extensions.Literal["status"]] = None,
- show_enum_origins: typing.Optional[typing_extensions.Literal["status"]] = None,
+ remote_fields: typing.Optional[typing.Literal["status"]] = None,
+ show_enum_origins: typing.Optional[typing.Literal["status"]] = None,
+ request_options: typing.Optional[RequestOptions] = None,
) -> Contact:
"""
Returns a `Contact` object with the given `id`.
@@ -211,9 +250,11 @@ def retrieve(
- include_remote_data: typing.Optional[bool]. Whether to include the original data Merge fetched from the third-party to produce these models.
- - remote_fields: typing.Optional[typing_extensions.Literal["status"]]. Deprecated. Use show_enum_origins.
+ - remote_fields: typing.Optional[typing.Literal["status"]]. Deprecated. Use show_enum_origins.
+
+ - show_enum_origins: typing.Optional[typing.Literal["status"]]. Which fields should be returned in non-normalized form.
- - show_enum_origins: typing.Optional[typing_extensions.Literal["status"]]. Which fields should be returned in non-normalized form.
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import Merge
from merge.resources.accounting import ContactsRetrieveRequestExpand
@@ -223,7 +264,7 @@ def retrieve(
api_key="YOUR_API_KEY",
)
client.accounting.contacts.retrieve(
- id="id",
+ id="string",
expand=ContactsRetrieveRequestExpand.ADDRESSES,
remote_fields="status",
show_enum_origins="status",
@@ -232,16 +273,32 @@ def retrieve(
_response = self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", f"api/accounting/v1/contacts/{id}"),
- params=remove_none_from_dict(
- {
- "expand": expand,
- "include_remote_data": include_remote_data,
- "remote_fields": remote_fields,
- "show_enum_origins": show_enum_origins,
- }
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "expand": expand,
+ "include_remote_data": include_remote_data,
+ "remote_fields": remote_fields,
+ "show_enum_origins": show_enum_origins,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(Contact, _response.json()) # type: ignore
@@ -251,10 +308,12 @@ def retrieve(
raise ApiError(status_code=_response.status_code, body=_response.text)
raise ApiError(status_code=_response.status_code, body=_response_json)
- def meta_post_retrieve(self) -> MetaResponse:
+ def meta_post_retrieve(self, *, request_options: typing.Optional[RequestOptions] = None) -> MetaResponse:
"""
Returns metadata for `Contact` POSTs.
+ Parameters:
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import Merge
@@ -267,8 +326,20 @@ def meta_post_retrieve(self) -> MetaResponse:
_response = self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/accounting/v1/contacts/meta/post"),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ request_options.get("additional_query_parameters") if request_options is not None else None
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(MetaResponse, _response.json()) # type: ignore
@@ -298,9 +369,10 @@ async def list(
modified_after: typing.Optional[dt.datetime] = None,
modified_before: typing.Optional[dt.datetime] = None,
page_size: typing.Optional[int] = None,
- remote_fields: typing.Optional[typing_extensions.Literal["status"]] = None,
+ remote_fields: typing.Optional[typing.Literal["status"]] = None,
remote_id: typing.Optional[str] = None,
- show_enum_origins: typing.Optional[typing_extensions.Literal["status"]] = None,
+ show_enum_origins: typing.Optional[typing.Literal["status"]] = None,
+ request_options: typing.Optional[RequestOptions] = None,
) -> PaginatedContactList:
"""
Returns a list of `Contact` objects.
@@ -330,11 +402,13 @@ async def list(
- page_size: typing.Optional[int]. Number of results to return per page.
- - remote_fields: typing.Optional[typing_extensions.Literal["status"]]. Deprecated. Use show_enum_origins.
+ - remote_fields: typing.Optional[typing.Literal["status"]]. Deprecated. Use show_enum_origins.
- remote_id: typing.Optional[str]. The API provider's ID for the given object.
- - show_enum_origins: typing.Optional[typing_extensions.Literal["status"]]. Which fields should be returned in non-normalized form.
+ - show_enum_origins: typing.Optional[typing.Literal["status"]]. Which fields should be returned in non-normalized form.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import AsyncMerge
from merge.resources.accounting import ContactsListRequestExpand
@@ -352,27 +426,43 @@ async def list(
_response = await self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/accounting/v1/contacts"),
- params=remove_none_from_dict(
- {
- "company_id": company_id,
- "created_after": serialize_datetime(created_after) if created_after is not None else None,
- "created_before": serialize_datetime(created_before) if created_before is not None else None,
- "cursor": cursor,
- "expand": expand,
- "include_deleted_data": include_deleted_data,
- "include_remote_data": include_remote_data,
- "is_customer": is_customer,
- "is_supplier": is_supplier,
- "modified_after": serialize_datetime(modified_after) if modified_after is not None else None,
- "modified_before": serialize_datetime(modified_before) if modified_before is not None else None,
- "page_size": page_size,
- "remote_fields": remote_fields,
- "remote_id": remote_id,
- "show_enum_origins": show_enum_origins,
- }
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "company_id": company_id,
+ "created_after": serialize_datetime(created_after) if created_after is not None else None,
+ "created_before": serialize_datetime(created_before) if created_before is not None else None,
+ "cursor": cursor,
+ "expand": expand,
+ "include_deleted_data": include_deleted_data,
+ "include_remote_data": include_remote_data,
+ "is_customer": is_customer,
+ "is_supplier": is_supplier,
+ "modified_after": serialize_datetime(modified_after) if modified_after is not None else None,
+ "modified_before": serialize_datetime(modified_before) if modified_before is not None else None,
+ "page_size": page_size,
+ "remote_fields": remote_fields,
+ "remote_id": remote_id,
+ "show_enum_origins": show_enum_origins,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(PaginatedContactList, _response.json()) # type: ignore
@@ -388,6 +478,7 @@ async def create(
is_debug_mode: typing.Optional[bool] = None,
run_async: typing.Optional[bool] = None,
model: ContactRequest,
+ request_options: typing.Optional[RequestOptions] = None,
) -> ContactResponse:
"""
Creates a `Contact` object with the given values.
@@ -398,12 +489,11 @@ async def create(
- run_async: typing.Optional[bool]. Whether or not third-party updates should be run asynchronously.
- model: ContactRequest.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import AsyncMerge
- from merge.resources.accounting import (
- AccountingPhoneNumberRequest,
- ContactRequest,
- )
+ from merge.resources.accounting import ContactRequest
client = AsyncMerge(
account_token="YOUR_ACCOUNT_TOKEN",
@@ -417,22 +507,42 @@ async def create(
tax_number="12-3456789",
currency="USD",
company="595c8f97-2ac4-45b7-b000-41bdf43240b5",
- phone_numbers=[
- AccountingPhoneNumberRequest(
- number="+3198675309",
- type="Mobile",
- )
- ],
),
)
"""
_response = await self._client_wrapper.httpx_client.request(
"POST",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/accounting/v1/contacts"),
- params=remove_none_from_dict({"is_debug_mode": is_debug_mode, "run_async": run_async}),
- json=jsonable_encoder({"model": model}),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "is_debug_mode": is_debug_mode,
+ "run_async": run_async,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ json=jsonable_encoder({"model": model})
+ if request_options is None or request_options.get("additional_body_parameters") is None
+ else {
+ **jsonable_encoder({"model": model}),
+ **(jsonable_encoder(remove_none_from_dict(request_options.get("additional_body_parameters", {})))),
+ },
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(ContactResponse, _response.json()) # type: ignore
@@ -448,8 +558,9 @@ async def retrieve(
*,
expand: typing.Optional[ContactsRetrieveRequestExpand] = None,
include_remote_data: typing.Optional[bool] = None,
- remote_fields: typing.Optional[typing_extensions.Literal["status"]] = None,
- show_enum_origins: typing.Optional[typing_extensions.Literal["status"]] = None,
+ remote_fields: typing.Optional[typing.Literal["status"]] = None,
+ show_enum_origins: typing.Optional[typing.Literal["status"]] = None,
+ request_options: typing.Optional[RequestOptions] = None,
) -> Contact:
"""
Returns a `Contact` object with the given `id`.
@@ -461,9 +572,11 @@ async def retrieve(
- include_remote_data: typing.Optional[bool]. Whether to include the original data Merge fetched from the third-party to produce these models.
- - remote_fields: typing.Optional[typing_extensions.Literal["status"]]. Deprecated. Use show_enum_origins.
+ - remote_fields: typing.Optional[typing.Literal["status"]]. Deprecated. Use show_enum_origins.
- - show_enum_origins: typing.Optional[typing_extensions.Literal["status"]]. Which fields should be returned in non-normalized form.
+ - show_enum_origins: typing.Optional[typing.Literal["status"]]. Which fields should be returned in non-normalized form.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import AsyncMerge
from merge.resources.accounting import ContactsRetrieveRequestExpand
@@ -473,7 +586,7 @@ async def retrieve(
api_key="YOUR_API_KEY",
)
await client.accounting.contacts.retrieve(
- id="id",
+ id="string",
expand=ContactsRetrieveRequestExpand.ADDRESSES,
remote_fields="status",
show_enum_origins="status",
@@ -482,16 +595,32 @@ async def retrieve(
_response = await self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", f"api/accounting/v1/contacts/{id}"),
- params=remove_none_from_dict(
- {
- "expand": expand,
- "include_remote_data": include_remote_data,
- "remote_fields": remote_fields,
- "show_enum_origins": show_enum_origins,
- }
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "expand": expand,
+ "include_remote_data": include_remote_data,
+ "remote_fields": remote_fields,
+ "show_enum_origins": show_enum_origins,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(Contact, _response.json()) # type: ignore
@@ -501,10 +630,12 @@ async def retrieve(
raise ApiError(status_code=_response.status_code, body=_response.text)
raise ApiError(status_code=_response.status_code, body=_response_json)
- async def meta_post_retrieve(self) -> MetaResponse:
+ async def meta_post_retrieve(self, *, request_options: typing.Optional[RequestOptions] = None) -> MetaResponse:
"""
Returns metadata for `Contact` POSTs.
+ Parameters:
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import AsyncMerge
@@ -517,8 +648,20 @@ async def meta_post_retrieve(self) -> MetaResponse:
_response = await self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/accounting/v1/contacts/meta/post"),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ request_options.get("additional_query_parameters") if request_options is not None else None
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(MetaResponse, _response.json()) # type: ignore
diff --git a/src/merge/resources/accounting/resources/credit_notes/client.py b/src/merge/resources/accounting/resources/credit_notes/client.py
index 4d28f34d..47b4f998 100644
--- a/src/merge/resources/accounting/resources/credit_notes/client.py
+++ b/src/merge/resources/accounting/resources/credit_notes/client.py
@@ -8,7 +8,9 @@
from .....core.api_error import ApiError
from .....core.client_wrapper import AsyncClientWrapper, SyncClientWrapper
from .....core.datetime_utils import serialize_datetime
+from .....core.jsonable_encoder import jsonable_encoder
from .....core.remove_none_from_dict import remove_none_from_dict
+from .....core.request_options import RequestOptions
from ...types.credit_note import CreditNote
from ...types.paginated_credit_note_list import PaginatedCreditNoteList
from .types.credit_notes_list_request_expand import CreditNotesListRequestExpand
@@ -46,6 +48,7 @@ def list(
show_enum_origins: typing.Optional[CreditNotesListRequestShowEnumOrigins] = None,
transaction_date_after: typing.Optional[dt.datetime] = None,
transaction_date_before: typing.Optional[dt.datetime] = None,
+ request_options: typing.Optional[RequestOptions] = None,
) -> PaginatedCreditNoteList:
"""
Returns a list of `CreditNote` objects.
@@ -80,6 +83,8 @@ def list(
- transaction_date_after: typing.Optional[dt.datetime]. If provided, will only return objects created after this datetime.
- transaction_date_before: typing.Optional[dt.datetime]. If provided, will only return objects created before this datetime.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import Merge
from merge.resources.accounting import (
@@ -101,31 +106,47 @@ def list(
_response = self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/accounting/v1/credit-notes"),
- params=remove_none_from_dict(
- {
- "company_id": company_id,
- "created_after": serialize_datetime(created_after) if created_after is not None else None,
- "created_before": serialize_datetime(created_before) if created_before is not None else None,
- "cursor": cursor,
- "expand": expand,
- "include_deleted_data": include_deleted_data,
- "include_remote_data": include_remote_data,
- "modified_after": serialize_datetime(modified_after) if modified_after is not None else None,
- "modified_before": serialize_datetime(modified_before) if modified_before is not None else None,
- "page_size": page_size,
- "remote_fields": remote_fields,
- "remote_id": remote_id,
- "show_enum_origins": show_enum_origins,
- "transaction_date_after": serialize_datetime(transaction_date_after)
- if transaction_date_after is not None
- else None,
- "transaction_date_before": serialize_datetime(transaction_date_before)
- if transaction_date_before is not None
- else None,
- }
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "company_id": company_id,
+ "created_after": serialize_datetime(created_after) if created_after is not None else None,
+ "created_before": serialize_datetime(created_before) if created_before is not None else None,
+ "cursor": cursor,
+ "expand": expand,
+ "include_deleted_data": include_deleted_data,
+ "include_remote_data": include_remote_data,
+ "modified_after": serialize_datetime(modified_after) if modified_after is not None else None,
+ "modified_before": serialize_datetime(modified_before) if modified_before is not None else None,
+ "page_size": page_size,
+ "remote_fields": remote_fields,
+ "remote_id": remote_id,
+ "show_enum_origins": show_enum_origins,
+ "transaction_date_after": serialize_datetime(transaction_date_after)
+ if transaction_date_after is not None
+ else None,
+ "transaction_date_before": serialize_datetime(transaction_date_before)
+ if transaction_date_before is not None
+ else None,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(PaginatedCreditNoteList, _response.json()) # type: ignore
@@ -143,6 +164,7 @@ def retrieve(
include_remote_data: typing.Optional[bool] = None,
remote_fields: typing.Optional[CreditNotesRetrieveRequestRemoteFields] = None,
show_enum_origins: typing.Optional[CreditNotesRetrieveRequestShowEnumOrigins] = None,
+ request_options: typing.Optional[RequestOptions] = None,
) -> CreditNote:
"""
Returns a `CreditNote` object with the given `id`.
@@ -157,6 +179,8 @@ def retrieve(
- remote_fields: typing.Optional[CreditNotesRetrieveRequestRemoteFields]. Deprecated. Use show_enum_origins.
- show_enum_origins: typing.Optional[CreditNotesRetrieveRequestShowEnumOrigins]. Which fields should be returned in non-normalized form.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import Merge
from merge.resources.accounting import (
@@ -170,7 +194,7 @@ def retrieve(
api_key="YOUR_API_KEY",
)
client.accounting.credit_notes.retrieve(
- id="id",
+ id="string",
expand=CreditNotesRetrieveRequestExpand.ACCOUNTING_PERIOD,
remote_fields=CreditNotesRetrieveRequestRemoteFields.STATUS,
show_enum_origins=CreditNotesRetrieveRequestShowEnumOrigins.STATUS,
@@ -179,16 +203,32 @@ def retrieve(
_response = self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", f"api/accounting/v1/credit-notes/{id}"),
- params=remove_none_from_dict(
- {
- "expand": expand,
- "include_remote_data": include_remote_data,
- "remote_fields": remote_fields,
- "show_enum_origins": show_enum_origins,
- }
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "expand": expand,
+ "include_remote_data": include_remote_data,
+ "remote_fields": remote_fields,
+ "show_enum_origins": show_enum_origins,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(CreditNote, _response.json()) # type: ignore
@@ -221,6 +261,7 @@ async def list(
show_enum_origins: typing.Optional[CreditNotesListRequestShowEnumOrigins] = None,
transaction_date_after: typing.Optional[dt.datetime] = None,
transaction_date_before: typing.Optional[dt.datetime] = None,
+ request_options: typing.Optional[RequestOptions] = None,
) -> PaginatedCreditNoteList:
"""
Returns a list of `CreditNote` objects.
@@ -255,6 +296,8 @@ async def list(
- transaction_date_after: typing.Optional[dt.datetime]. If provided, will only return objects created after this datetime.
- transaction_date_before: typing.Optional[dt.datetime]. If provided, will only return objects created before this datetime.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import AsyncMerge
from merge.resources.accounting import (
@@ -276,31 +319,47 @@ async def list(
_response = await self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/accounting/v1/credit-notes"),
- params=remove_none_from_dict(
- {
- "company_id": company_id,
- "created_after": serialize_datetime(created_after) if created_after is not None else None,
- "created_before": serialize_datetime(created_before) if created_before is not None else None,
- "cursor": cursor,
- "expand": expand,
- "include_deleted_data": include_deleted_data,
- "include_remote_data": include_remote_data,
- "modified_after": serialize_datetime(modified_after) if modified_after is not None else None,
- "modified_before": serialize_datetime(modified_before) if modified_before is not None else None,
- "page_size": page_size,
- "remote_fields": remote_fields,
- "remote_id": remote_id,
- "show_enum_origins": show_enum_origins,
- "transaction_date_after": serialize_datetime(transaction_date_after)
- if transaction_date_after is not None
- else None,
- "transaction_date_before": serialize_datetime(transaction_date_before)
- if transaction_date_before is not None
- else None,
- }
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "company_id": company_id,
+ "created_after": serialize_datetime(created_after) if created_after is not None else None,
+ "created_before": serialize_datetime(created_before) if created_before is not None else None,
+ "cursor": cursor,
+ "expand": expand,
+ "include_deleted_data": include_deleted_data,
+ "include_remote_data": include_remote_data,
+ "modified_after": serialize_datetime(modified_after) if modified_after is not None else None,
+ "modified_before": serialize_datetime(modified_before) if modified_before is not None else None,
+ "page_size": page_size,
+ "remote_fields": remote_fields,
+ "remote_id": remote_id,
+ "show_enum_origins": show_enum_origins,
+ "transaction_date_after": serialize_datetime(transaction_date_after)
+ if transaction_date_after is not None
+ else None,
+ "transaction_date_before": serialize_datetime(transaction_date_before)
+ if transaction_date_before is not None
+ else None,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(PaginatedCreditNoteList, _response.json()) # type: ignore
@@ -318,6 +377,7 @@ async def retrieve(
include_remote_data: typing.Optional[bool] = None,
remote_fields: typing.Optional[CreditNotesRetrieveRequestRemoteFields] = None,
show_enum_origins: typing.Optional[CreditNotesRetrieveRequestShowEnumOrigins] = None,
+ request_options: typing.Optional[RequestOptions] = None,
) -> CreditNote:
"""
Returns a `CreditNote` object with the given `id`.
@@ -332,6 +392,8 @@ async def retrieve(
- remote_fields: typing.Optional[CreditNotesRetrieveRequestRemoteFields]. Deprecated. Use show_enum_origins.
- show_enum_origins: typing.Optional[CreditNotesRetrieveRequestShowEnumOrigins]. Which fields should be returned in non-normalized form.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import AsyncMerge
from merge.resources.accounting import (
@@ -345,7 +407,7 @@ async def retrieve(
api_key="YOUR_API_KEY",
)
await client.accounting.credit_notes.retrieve(
- id="id",
+ id="string",
expand=CreditNotesRetrieveRequestExpand.ACCOUNTING_PERIOD,
remote_fields=CreditNotesRetrieveRequestRemoteFields.STATUS,
show_enum_origins=CreditNotesRetrieveRequestShowEnumOrigins.STATUS,
@@ -354,16 +416,32 @@ async def retrieve(
_response = await self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", f"api/accounting/v1/credit-notes/{id}"),
- params=remove_none_from_dict(
- {
- "expand": expand,
- "include_remote_data": include_remote_data,
- "remote_fields": remote_fields,
- "show_enum_origins": show_enum_origins,
- }
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "expand": expand,
+ "include_remote_data": include_remote_data,
+ "remote_fields": remote_fields,
+ "show_enum_origins": show_enum_origins,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(CreditNote, _response.json()) # type: ignore
diff --git a/src/merge/resources/accounting/resources/delete_account/client.py b/src/merge/resources/accounting/resources/delete_account/client.py
index f6f12777..61478915 100644
--- a/src/merge/resources/accounting/resources/delete_account/client.py
+++ b/src/merge/resources/accounting/resources/delete_account/client.py
@@ -1,20 +1,26 @@
# This file was auto-generated by Fern from our API Definition.
+import typing
import urllib.parse
from json.decoder import JSONDecodeError
from .....core.api_error import ApiError
from .....core.client_wrapper import AsyncClientWrapper, SyncClientWrapper
+from .....core.jsonable_encoder import jsonable_encoder
+from .....core.remove_none_from_dict import remove_none_from_dict
+from .....core.request_options import RequestOptions
class DeleteAccountClient:
def __init__(self, *, client_wrapper: SyncClientWrapper):
self._client_wrapper = client_wrapper
- def delete(self) -> None:
+ def delete(self, *, request_options: typing.Optional[RequestOptions] = None) -> None:
"""
Delete a linked account.
+ Parameters:
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import Merge
@@ -27,8 +33,23 @@ def delete(self) -> None:
_response = self._client_wrapper.httpx_client.request(
"POST",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/accounting/v1/delete-account"),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ request_options.get("additional_query_parameters") if request_options is not None else None
+ ),
+ json=jsonable_encoder(remove_none_from_dict(request_options.get("additional_body_parameters", {})))
+ if request_options is not None
+ else None,
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return
@@ -43,10 +64,12 @@ class AsyncDeleteAccountClient:
def __init__(self, *, client_wrapper: AsyncClientWrapper):
self._client_wrapper = client_wrapper
- async def delete(self) -> None:
+ async def delete(self, *, request_options: typing.Optional[RequestOptions] = None) -> None:
"""
Delete a linked account.
+ Parameters:
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import AsyncMerge
@@ -59,8 +82,23 @@ async def delete(self) -> None:
_response = await self._client_wrapper.httpx_client.request(
"POST",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/accounting/v1/delete-account"),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ request_options.get("additional_query_parameters") if request_options is not None else None
+ ),
+ json=jsonable_encoder(remove_none_from_dict(request_options.get("additional_body_parameters", {})))
+ if request_options is not None
+ else None,
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return
diff --git a/src/merge/resources/accounting/resources/expenses/client.py b/src/merge/resources/accounting/resources/expenses/client.py
index a7df25de..59f05dbd 100644
--- a/src/merge/resources/accounting/resources/expenses/client.py
+++ b/src/merge/resources/accounting/resources/expenses/client.py
@@ -10,6 +10,7 @@
from .....core.datetime_utils import serialize_datetime
from .....core.jsonable_encoder import jsonable_encoder
from .....core.remove_none_from_dict import remove_none_from_dict
+from .....core.request_options import RequestOptions
from ...types.expense import Expense
from ...types.expense_request import ExpenseRequest
from ...types.expense_response import ExpenseResponse
@@ -47,6 +48,7 @@ def list(
remote_id: typing.Optional[str] = None,
transaction_date_after: typing.Optional[dt.datetime] = None,
transaction_date_before: typing.Optional[dt.datetime] = None,
+ request_options: typing.Optional[RequestOptions] = None,
) -> PaginatedExpenseList:
"""
Returns a list of `Expense` objects.
@@ -77,6 +79,8 @@ def list(
- transaction_date_after: typing.Optional[dt.datetime]. If provided, will only return objects created after this datetime.
- transaction_date_before: typing.Optional[dt.datetime]. If provided, will only return objects created before this datetime.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import Merge
from merge.resources.accounting import ExpensesListRequestExpand
@@ -92,29 +96,45 @@ def list(
_response = self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/accounting/v1/expenses"),
- params=remove_none_from_dict(
- {
- "company_id": company_id,
- "created_after": serialize_datetime(created_after) if created_after is not None else None,
- "created_before": serialize_datetime(created_before) if created_before is not None else None,
- "cursor": cursor,
- "expand": expand,
- "include_deleted_data": include_deleted_data,
- "include_remote_data": include_remote_data,
- "modified_after": serialize_datetime(modified_after) if modified_after is not None else None,
- "modified_before": serialize_datetime(modified_before) if modified_before is not None else None,
- "page_size": page_size,
- "remote_id": remote_id,
- "transaction_date_after": serialize_datetime(transaction_date_after)
- if transaction_date_after is not None
- else None,
- "transaction_date_before": serialize_datetime(transaction_date_before)
- if transaction_date_before is not None
- else None,
- }
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "company_id": company_id,
+ "created_after": serialize_datetime(created_after) if created_after is not None else None,
+ "created_before": serialize_datetime(created_before) if created_before is not None else None,
+ "cursor": cursor,
+ "expand": expand,
+ "include_deleted_data": include_deleted_data,
+ "include_remote_data": include_remote_data,
+ "modified_after": serialize_datetime(modified_after) if modified_after is not None else None,
+ "modified_before": serialize_datetime(modified_before) if modified_before is not None else None,
+ "page_size": page_size,
+ "remote_id": remote_id,
+ "transaction_date_after": serialize_datetime(transaction_date_after)
+ if transaction_date_after is not None
+ else None,
+ "transaction_date_before": serialize_datetime(transaction_date_before)
+ if transaction_date_before is not None
+ else None,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(PaginatedExpenseList, _response.json()) # type: ignore
@@ -130,6 +150,7 @@ def create(
is_debug_mode: typing.Optional[bool] = None,
run_async: typing.Optional[bool] = None,
model: ExpenseRequest,
+ request_options: typing.Optional[RequestOptions] = None,
) -> ExpenseResponse:
"""
Creates an `Expense` object with the given values.
@@ -140,9 +161,11 @@ def create(
- run_async: typing.Optional[bool]. Whether or not third-party updates should be run asynchronously.
- model: ExpenseRequest.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import Merge
- from merge.resources.accounting import ExpenseLineRequest, ExpenseRequest
+ from merge.resources.accounting import ExpenseRequest
client = Merge(
account_token="YOUR_ACCOUNT_TOKEN",
@@ -153,25 +176,42 @@ def create(
total_amount=10000.0,
exchange_rate="2.9",
memo="New employee supplies",
- lines=[
- ExpenseLineRequest(
- remote_id="121222",
- net_amount=25.54,
- company="595c8f97-2ac4-45b7-b000-41bdf43240b5",
- description="MacBook Pro",
- exchange_rate="2.9",
- )
- ],
),
)
"""
_response = self._client_wrapper.httpx_client.request(
"POST",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/accounting/v1/expenses"),
- params=remove_none_from_dict({"is_debug_mode": is_debug_mode, "run_async": run_async}),
- json=jsonable_encoder({"model": model}),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "is_debug_mode": is_debug_mode,
+ "run_async": run_async,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ json=jsonable_encoder({"model": model})
+ if request_options is None or request_options.get("additional_body_parameters") is None
+ else {
+ **jsonable_encoder({"model": model}),
+ **(jsonable_encoder(remove_none_from_dict(request_options.get("additional_body_parameters", {})))),
+ },
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(ExpenseResponse, _response.json()) # type: ignore
@@ -187,6 +227,7 @@ def retrieve(
*,
expand: typing.Optional[ExpensesRetrieveRequestExpand] = None,
include_remote_data: typing.Optional[bool] = None,
+ request_options: typing.Optional[RequestOptions] = None,
) -> Expense:
"""
Returns an `Expense` object with the given `id`.
@@ -197,6 +238,8 @@ def retrieve(
- expand: typing.Optional[ExpensesRetrieveRequestExpand]. Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces.
- include_remote_data: typing.Optional[bool]. Whether to include the original data Merge fetched from the third-party to produce these models.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import Merge
from merge.resources.accounting import ExpensesRetrieveRequestExpand
@@ -206,16 +249,37 @@ def retrieve(
api_key="YOUR_API_KEY",
)
client.accounting.expenses.retrieve(
- id="id",
+ id="string",
expand=ExpensesRetrieveRequestExpand.ACCOUNT,
)
"""
_response = self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", f"api/accounting/v1/expenses/{id}"),
- params=remove_none_from_dict({"expand": expand, "include_remote_data": include_remote_data}),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "expand": expand,
+ "include_remote_data": include_remote_data,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(Expense, _response.json()) # type: ignore
@@ -225,10 +289,12 @@ def retrieve(
raise ApiError(status_code=_response.status_code, body=_response.text)
raise ApiError(status_code=_response.status_code, body=_response_json)
- def meta_post_retrieve(self) -> MetaResponse:
+ def meta_post_retrieve(self, *, request_options: typing.Optional[RequestOptions] = None) -> MetaResponse:
"""
Returns metadata for `Expense` POSTs.
+ Parameters:
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import Merge
@@ -241,8 +307,20 @@ def meta_post_retrieve(self) -> MetaResponse:
_response = self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/accounting/v1/expenses/meta/post"),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ request_options.get("additional_query_parameters") if request_options is not None else None
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(MetaResponse, _response.json()) # type: ignore
@@ -273,6 +351,7 @@ async def list(
remote_id: typing.Optional[str] = None,
transaction_date_after: typing.Optional[dt.datetime] = None,
transaction_date_before: typing.Optional[dt.datetime] = None,
+ request_options: typing.Optional[RequestOptions] = None,
) -> PaginatedExpenseList:
"""
Returns a list of `Expense` objects.
@@ -303,6 +382,8 @@ async def list(
- transaction_date_after: typing.Optional[dt.datetime]. If provided, will only return objects created after this datetime.
- transaction_date_before: typing.Optional[dt.datetime]. If provided, will only return objects created before this datetime.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import AsyncMerge
from merge.resources.accounting import ExpensesListRequestExpand
@@ -318,29 +399,45 @@ async def list(
_response = await self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/accounting/v1/expenses"),
- params=remove_none_from_dict(
- {
- "company_id": company_id,
- "created_after": serialize_datetime(created_after) if created_after is not None else None,
- "created_before": serialize_datetime(created_before) if created_before is not None else None,
- "cursor": cursor,
- "expand": expand,
- "include_deleted_data": include_deleted_data,
- "include_remote_data": include_remote_data,
- "modified_after": serialize_datetime(modified_after) if modified_after is not None else None,
- "modified_before": serialize_datetime(modified_before) if modified_before is not None else None,
- "page_size": page_size,
- "remote_id": remote_id,
- "transaction_date_after": serialize_datetime(transaction_date_after)
- if transaction_date_after is not None
- else None,
- "transaction_date_before": serialize_datetime(transaction_date_before)
- if transaction_date_before is not None
- else None,
- }
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "company_id": company_id,
+ "created_after": serialize_datetime(created_after) if created_after is not None else None,
+ "created_before": serialize_datetime(created_before) if created_before is not None else None,
+ "cursor": cursor,
+ "expand": expand,
+ "include_deleted_data": include_deleted_data,
+ "include_remote_data": include_remote_data,
+ "modified_after": serialize_datetime(modified_after) if modified_after is not None else None,
+ "modified_before": serialize_datetime(modified_before) if modified_before is not None else None,
+ "page_size": page_size,
+ "remote_id": remote_id,
+ "transaction_date_after": serialize_datetime(transaction_date_after)
+ if transaction_date_after is not None
+ else None,
+ "transaction_date_before": serialize_datetime(transaction_date_before)
+ if transaction_date_before is not None
+ else None,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(PaginatedExpenseList, _response.json()) # type: ignore
@@ -356,6 +453,7 @@ async def create(
is_debug_mode: typing.Optional[bool] = None,
run_async: typing.Optional[bool] = None,
model: ExpenseRequest,
+ request_options: typing.Optional[RequestOptions] = None,
) -> ExpenseResponse:
"""
Creates an `Expense` object with the given values.
@@ -366,9 +464,11 @@ async def create(
- run_async: typing.Optional[bool]. Whether or not third-party updates should be run asynchronously.
- model: ExpenseRequest.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import AsyncMerge
- from merge.resources.accounting import ExpenseLineRequest, ExpenseRequest
+ from merge.resources.accounting import ExpenseRequest
client = AsyncMerge(
account_token="YOUR_ACCOUNT_TOKEN",
@@ -379,25 +479,42 @@ async def create(
total_amount=10000.0,
exchange_rate="2.9",
memo="New employee supplies",
- lines=[
- ExpenseLineRequest(
- remote_id="121222",
- net_amount=25.54,
- company="595c8f97-2ac4-45b7-b000-41bdf43240b5",
- description="MacBook Pro",
- exchange_rate="2.9",
- )
- ],
),
)
"""
_response = await self._client_wrapper.httpx_client.request(
"POST",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/accounting/v1/expenses"),
- params=remove_none_from_dict({"is_debug_mode": is_debug_mode, "run_async": run_async}),
- json=jsonable_encoder({"model": model}),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "is_debug_mode": is_debug_mode,
+ "run_async": run_async,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ json=jsonable_encoder({"model": model})
+ if request_options is None or request_options.get("additional_body_parameters") is None
+ else {
+ **jsonable_encoder({"model": model}),
+ **(jsonable_encoder(remove_none_from_dict(request_options.get("additional_body_parameters", {})))),
+ },
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(ExpenseResponse, _response.json()) # type: ignore
@@ -413,6 +530,7 @@ async def retrieve(
*,
expand: typing.Optional[ExpensesRetrieveRequestExpand] = None,
include_remote_data: typing.Optional[bool] = None,
+ request_options: typing.Optional[RequestOptions] = None,
) -> Expense:
"""
Returns an `Expense` object with the given `id`.
@@ -423,6 +541,8 @@ async def retrieve(
- expand: typing.Optional[ExpensesRetrieveRequestExpand]. Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces.
- include_remote_data: typing.Optional[bool]. Whether to include the original data Merge fetched from the third-party to produce these models.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import AsyncMerge
from merge.resources.accounting import ExpensesRetrieveRequestExpand
@@ -432,16 +552,37 @@ async def retrieve(
api_key="YOUR_API_KEY",
)
await client.accounting.expenses.retrieve(
- id="id",
+ id="string",
expand=ExpensesRetrieveRequestExpand.ACCOUNT,
)
"""
_response = await self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", f"api/accounting/v1/expenses/{id}"),
- params=remove_none_from_dict({"expand": expand, "include_remote_data": include_remote_data}),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "expand": expand,
+ "include_remote_data": include_remote_data,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(Expense, _response.json()) # type: ignore
@@ -451,10 +592,12 @@ async def retrieve(
raise ApiError(status_code=_response.status_code, body=_response.text)
raise ApiError(status_code=_response.status_code, body=_response_json)
- async def meta_post_retrieve(self) -> MetaResponse:
+ async def meta_post_retrieve(self, *, request_options: typing.Optional[RequestOptions] = None) -> MetaResponse:
"""
Returns metadata for `Expense` POSTs.
+ Parameters:
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import AsyncMerge
@@ -467,8 +610,20 @@ async def meta_post_retrieve(self) -> MetaResponse:
_response = await self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/accounting/v1/expenses/meta/post"),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ request_options.get("additional_query_parameters") if request_options is not None else None
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(MetaResponse, _response.json()) # type: ignore
diff --git a/src/merge/resources/accounting/resources/force_resync/client.py b/src/merge/resources/accounting/resources/force_resync/client.py
index dfd0d2d4..beec5ed8 100644
--- a/src/merge/resources/accounting/resources/force_resync/client.py
+++ b/src/merge/resources/accounting/resources/force_resync/client.py
@@ -6,6 +6,9 @@
from .....core.api_error import ApiError
from .....core.client_wrapper import AsyncClientWrapper, SyncClientWrapper
+from .....core.jsonable_encoder import jsonable_encoder
+from .....core.remove_none_from_dict import remove_none_from_dict
+from .....core.request_options import RequestOptions
from ...types.sync_status import SyncStatus
try:
@@ -18,10 +21,14 @@ class ForceResyncClient:
def __init__(self, *, client_wrapper: SyncClientWrapper):
self._client_wrapper = client_wrapper
- def sync_status_resync_create(self) -> typing.List[SyncStatus]:
+ def sync_status_resync_create(
+ self, *, request_options: typing.Optional[RequestOptions] = None
+ ) -> typing.List[SyncStatus]:
"""
Force re-sync of all models. This is available for all organizations via the dashboard. Force re-sync is also available programmatically via API for monthly, quarterly, and highest sync frequency customers on the Core, Professional, or Enterprise plans. Doing so will consume a sync credit for the relevant linked account.
+ Parameters:
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import Merge
@@ -34,8 +41,23 @@ def sync_status_resync_create(self) -> typing.List[SyncStatus]:
_response = self._client_wrapper.httpx_client.request(
"POST",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/accounting/v1/sync-status/resync"),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ request_options.get("additional_query_parameters") if request_options is not None else None
+ ),
+ json=jsonable_encoder(remove_none_from_dict(request_options.get("additional_body_parameters", {})))
+ if request_options is not None
+ else None,
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(typing.List[SyncStatus], _response.json()) # type: ignore
@@ -50,10 +72,14 @@ class AsyncForceResyncClient:
def __init__(self, *, client_wrapper: AsyncClientWrapper):
self._client_wrapper = client_wrapper
- async def sync_status_resync_create(self) -> typing.List[SyncStatus]:
+ async def sync_status_resync_create(
+ self, *, request_options: typing.Optional[RequestOptions] = None
+ ) -> typing.List[SyncStatus]:
"""
Force re-sync of all models. This is available for all organizations via the dashboard. Force re-sync is also available programmatically via API for monthly, quarterly, and highest sync frequency customers on the Core, Professional, or Enterprise plans. Doing so will consume a sync credit for the relevant linked account.
+ Parameters:
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import AsyncMerge
@@ -66,8 +92,23 @@ async def sync_status_resync_create(self) -> typing.List[SyncStatus]:
_response = await self._client_wrapper.httpx_client.request(
"POST",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/accounting/v1/sync-status/resync"),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ request_options.get("additional_query_parameters") if request_options is not None else None
+ ),
+ json=jsonable_encoder(remove_none_from_dict(request_options.get("additional_body_parameters", {})))
+ if request_options is not None
+ else None,
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(typing.List[SyncStatus], _response.json()) # type: ignore
diff --git a/src/merge/resources/accounting/resources/generate_key/client.py b/src/merge/resources/accounting/resources/generate_key/client.py
index 4484f7c0..e374cb6e 100644
--- a/src/merge/resources/accounting/resources/generate_key/client.py
+++ b/src/merge/resources/accounting/resources/generate_key/client.py
@@ -7,6 +7,8 @@
from .....core.api_error import ApiError
from .....core.client_wrapper import AsyncClientWrapper, SyncClientWrapper
from .....core.jsonable_encoder import jsonable_encoder
+from .....core.remove_none_from_dict import remove_none_from_dict
+from .....core.request_options import RequestOptions
from ...types.remote_key import RemoteKey
try:
@@ -22,12 +24,14 @@ class GenerateKeyClient:
def __init__(self, *, client_wrapper: SyncClientWrapper):
self._client_wrapper = client_wrapper
- def create(self, *, name: str) -> RemoteKey:
+ def create(self, *, name: str, request_options: typing.Optional[RequestOptions] = None) -> RemoteKey:
"""
Create a remote key.
Parameters:
- name: str.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import Merge
@@ -42,9 +46,26 @@ def create(self, *, name: str) -> RemoteKey:
_response = self._client_wrapper.httpx_client.request(
"POST",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/accounting/v1/generate-key"),
- json=jsonable_encoder({"name": name}),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ request_options.get("additional_query_parameters") if request_options is not None else None
+ ),
+ json=jsonable_encoder({"name": name})
+ if request_options is None or request_options.get("additional_body_parameters") is None
+ else {
+ **jsonable_encoder({"name": name}),
+ **(jsonable_encoder(remove_none_from_dict(request_options.get("additional_body_parameters", {})))),
+ },
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(RemoteKey, _response.json()) # type: ignore
@@ -59,12 +80,14 @@ class AsyncGenerateKeyClient:
def __init__(self, *, client_wrapper: AsyncClientWrapper):
self._client_wrapper = client_wrapper
- async def create(self, *, name: str) -> RemoteKey:
+ async def create(self, *, name: str, request_options: typing.Optional[RequestOptions] = None) -> RemoteKey:
"""
Create a remote key.
Parameters:
- name: str.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import AsyncMerge
@@ -79,9 +102,26 @@ async def create(self, *, name: str) -> RemoteKey:
_response = await self._client_wrapper.httpx_client.request(
"POST",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/accounting/v1/generate-key"),
- json=jsonable_encoder({"name": name}),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ request_options.get("additional_query_parameters") if request_options is not None else None
+ ),
+ json=jsonable_encoder({"name": name})
+ if request_options is None or request_options.get("additional_body_parameters") is None
+ else {
+ **jsonable_encoder({"name": name}),
+ **(jsonable_encoder(remove_none_from_dict(request_options.get("additional_body_parameters", {})))),
+ },
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(RemoteKey, _response.json()) # type: ignore
diff --git a/src/merge/resources/accounting/resources/income_statements/client.py b/src/merge/resources/accounting/resources/income_statements/client.py
index c7b8abe9..ab4c59b6 100644
--- a/src/merge/resources/accounting/resources/income_statements/client.py
+++ b/src/merge/resources/accounting/resources/income_statements/client.py
@@ -5,12 +5,12 @@
import urllib.parse
from json.decoder import JSONDecodeError
-import typing_extensions
-
from .....core.api_error import ApiError
from .....core.client_wrapper import AsyncClientWrapper, SyncClientWrapper
from .....core.datetime_utils import serialize_datetime
+from .....core.jsonable_encoder import jsonable_encoder
from .....core.remove_none_from_dict import remove_none_from_dict
+from .....core.request_options import RequestOptions
from ...types.income_statement import IncomeStatement
from ...types.paginated_income_statement_list import PaginatedIncomeStatementList
@@ -31,13 +31,14 @@ def list(
created_after: typing.Optional[dt.datetime] = None,
created_before: typing.Optional[dt.datetime] = None,
cursor: typing.Optional[str] = None,
- expand: typing.Optional[typing_extensions.Literal["company"]] = None,
+ expand: typing.Optional[typing.Literal["company"]] = None,
include_deleted_data: typing.Optional[bool] = None,
include_remote_data: typing.Optional[bool] = None,
modified_after: typing.Optional[dt.datetime] = None,
modified_before: typing.Optional[dt.datetime] = None,
page_size: typing.Optional[int] = None,
remote_id: typing.Optional[str] = None,
+ request_options: typing.Optional[RequestOptions] = None,
) -> PaginatedIncomeStatementList:
"""
Returns a list of `IncomeStatement` objects.
@@ -51,7 +52,7 @@ def list(
- cursor: typing.Optional[str]. The pagination cursor value.
- - expand: typing.Optional[typing_extensions.Literal["company"]]. Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces.
+ - expand: typing.Optional[typing.Literal["company"]]. Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces.
- include_deleted_data: typing.Optional[bool]. Whether to include data that was marked as deleted by third party webhooks.
@@ -64,6 +65,8 @@ def list(
- page_size: typing.Optional[int]. Number of results to return per page.
- remote_id: typing.Optional[str]. The API provider's ID for the given object.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import Merge
@@ -78,23 +81,39 @@ def list(
_response = self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/accounting/v1/income-statements"),
- params=remove_none_from_dict(
- {
- "company_id": company_id,
- "created_after": serialize_datetime(created_after) if created_after is not None else None,
- "created_before": serialize_datetime(created_before) if created_before is not None else None,
- "cursor": cursor,
- "expand": expand,
- "include_deleted_data": include_deleted_data,
- "include_remote_data": include_remote_data,
- "modified_after": serialize_datetime(modified_after) if modified_after is not None else None,
- "modified_before": serialize_datetime(modified_before) if modified_before is not None else None,
- "page_size": page_size,
- "remote_id": remote_id,
- }
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "company_id": company_id,
+ "created_after": serialize_datetime(created_after) if created_after is not None else None,
+ "created_before": serialize_datetime(created_before) if created_before is not None else None,
+ "cursor": cursor,
+ "expand": expand,
+ "include_deleted_data": include_deleted_data,
+ "include_remote_data": include_remote_data,
+ "modified_after": serialize_datetime(modified_after) if modified_after is not None else None,
+ "modified_before": serialize_datetime(modified_before) if modified_before is not None else None,
+ "page_size": page_size,
+ "remote_id": remote_id,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(PaginatedIncomeStatementList, _response.json()) # type: ignore
@@ -108,8 +127,9 @@ def retrieve(
self,
id: str,
*,
- expand: typing.Optional[typing_extensions.Literal["company"]] = None,
+ expand: typing.Optional[typing.Literal["company"]] = None,
include_remote_data: typing.Optional[bool] = None,
+ request_options: typing.Optional[RequestOptions] = None,
) -> IncomeStatement:
"""
Returns an `IncomeStatement` object with the given `id`.
@@ -117,9 +137,11 @@ def retrieve(
Parameters:
- id: str.
- - expand: typing.Optional[typing_extensions.Literal["company"]]. Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces.
+ - expand: typing.Optional[typing.Literal["company"]]. Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces.
- include_remote_data: typing.Optional[bool]. Whether to include the original data Merge fetched from the third-party to produce these models.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import Merge
@@ -128,7 +150,7 @@ def retrieve(
api_key="YOUR_API_KEY",
)
client.accounting.income_statements.retrieve(
- id="id",
+ id="string",
expand="company",
)
"""
@@ -137,9 +159,30 @@ def retrieve(
urllib.parse.urljoin(
f"{self._client_wrapper.get_base_url()}/", f"api/accounting/v1/income-statements/{id}"
),
- params=remove_none_from_dict({"expand": expand, "include_remote_data": include_remote_data}),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "expand": expand,
+ "include_remote_data": include_remote_data,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(IncomeStatement, _response.json()) # type: ignore
@@ -161,13 +204,14 @@ async def list(
created_after: typing.Optional[dt.datetime] = None,
created_before: typing.Optional[dt.datetime] = None,
cursor: typing.Optional[str] = None,
- expand: typing.Optional[typing_extensions.Literal["company"]] = None,
+ expand: typing.Optional[typing.Literal["company"]] = None,
include_deleted_data: typing.Optional[bool] = None,
include_remote_data: typing.Optional[bool] = None,
modified_after: typing.Optional[dt.datetime] = None,
modified_before: typing.Optional[dt.datetime] = None,
page_size: typing.Optional[int] = None,
remote_id: typing.Optional[str] = None,
+ request_options: typing.Optional[RequestOptions] = None,
) -> PaginatedIncomeStatementList:
"""
Returns a list of `IncomeStatement` objects.
@@ -181,7 +225,7 @@ async def list(
- cursor: typing.Optional[str]. The pagination cursor value.
- - expand: typing.Optional[typing_extensions.Literal["company"]]. Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces.
+ - expand: typing.Optional[typing.Literal["company"]]. Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces.
- include_deleted_data: typing.Optional[bool]. Whether to include data that was marked as deleted by third party webhooks.
@@ -194,6 +238,8 @@ async def list(
- page_size: typing.Optional[int]. Number of results to return per page.
- remote_id: typing.Optional[str]. The API provider's ID for the given object.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import AsyncMerge
@@ -208,23 +254,39 @@ async def list(
_response = await self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/accounting/v1/income-statements"),
- params=remove_none_from_dict(
- {
- "company_id": company_id,
- "created_after": serialize_datetime(created_after) if created_after is not None else None,
- "created_before": serialize_datetime(created_before) if created_before is not None else None,
- "cursor": cursor,
- "expand": expand,
- "include_deleted_data": include_deleted_data,
- "include_remote_data": include_remote_data,
- "modified_after": serialize_datetime(modified_after) if modified_after is not None else None,
- "modified_before": serialize_datetime(modified_before) if modified_before is not None else None,
- "page_size": page_size,
- "remote_id": remote_id,
- }
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "company_id": company_id,
+ "created_after": serialize_datetime(created_after) if created_after is not None else None,
+ "created_before": serialize_datetime(created_before) if created_before is not None else None,
+ "cursor": cursor,
+ "expand": expand,
+ "include_deleted_data": include_deleted_data,
+ "include_remote_data": include_remote_data,
+ "modified_after": serialize_datetime(modified_after) if modified_after is not None else None,
+ "modified_before": serialize_datetime(modified_before) if modified_before is not None else None,
+ "page_size": page_size,
+ "remote_id": remote_id,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(PaginatedIncomeStatementList, _response.json()) # type: ignore
@@ -238,8 +300,9 @@ async def retrieve(
self,
id: str,
*,
- expand: typing.Optional[typing_extensions.Literal["company"]] = None,
+ expand: typing.Optional[typing.Literal["company"]] = None,
include_remote_data: typing.Optional[bool] = None,
+ request_options: typing.Optional[RequestOptions] = None,
) -> IncomeStatement:
"""
Returns an `IncomeStatement` object with the given `id`.
@@ -247,9 +310,11 @@ async def retrieve(
Parameters:
- id: str.
- - expand: typing.Optional[typing_extensions.Literal["company"]]. Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces.
+ - expand: typing.Optional[typing.Literal["company"]]. Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces.
- include_remote_data: typing.Optional[bool]. Whether to include the original data Merge fetched from the third-party to produce these models.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import AsyncMerge
@@ -258,7 +323,7 @@ async def retrieve(
api_key="YOUR_API_KEY",
)
await client.accounting.income_statements.retrieve(
- id="id",
+ id="string",
expand="company",
)
"""
@@ -267,9 +332,30 @@ async def retrieve(
urllib.parse.urljoin(
f"{self._client_wrapper.get_base_url()}/", f"api/accounting/v1/income-statements/{id}"
),
- params=remove_none_from_dict({"expand": expand, "include_remote_data": include_remote_data}),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "expand": expand,
+ "include_remote_data": include_remote_data,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(IncomeStatement, _response.json()) # type: ignore
diff --git a/src/merge/resources/accounting/resources/invoices/client.py b/src/merge/resources/accounting/resources/invoices/client.py
index 0752f859..fc423f85 100644
--- a/src/merge/resources/accounting/resources/invoices/client.py
+++ b/src/merge/resources/accounting/resources/invoices/client.py
@@ -5,13 +5,12 @@
import urllib.parse
from json.decoder import JSONDecodeError
-import typing_extensions
-
from .....core.api_error import ApiError
from .....core.client_wrapper import AsyncClientWrapper, SyncClientWrapper
from .....core.datetime_utils import serialize_datetime
from .....core.jsonable_encoder import jsonable_encoder
from .....core.remove_none_from_dict import remove_none_from_dict
+from .....core.request_options import RequestOptions
from ...types.invoice import Invoice
from ...types.invoice_request import InvoiceRequest
from ...types.invoice_response import InvoiceResponse
@@ -50,10 +49,11 @@ def list(
modified_after: typing.Optional[dt.datetime] = None,
modified_before: typing.Optional[dt.datetime] = None,
page_size: typing.Optional[int] = None,
- remote_fields: typing.Optional[typing_extensions.Literal["type"]] = None,
+ remote_fields: typing.Optional[typing.Literal["type"]] = None,
remote_id: typing.Optional[str] = None,
- show_enum_origins: typing.Optional[typing_extensions.Literal["type"]] = None,
+ show_enum_origins: typing.Optional[typing.Literal["type"]] = None,
type: typing.Optional[InvoicesListRequestType] = None,
+ request_options: typing.Optional[RequestOptions] = None,
) -> PaginatedInvoiceList:
"""
Returns a list of `Invoice` objects.
@@ -85,16 +85,18 @@ def list(
- page_size: typing.Optional[int]. Number of results to return per page.
- - remote_fields: typing.Optional[typing_extensions.Literal["type"]]. Deprecated. Use show_enum_origins.
+ - remote_fields: typing.Optional[typing.Literal["type"]]. Deprecated. Use show_enum_origins.
- remote_id: typing.Optional[str]. The API provider's ID for the given object.
- - show_enum_origins: typing.Optional[typing_extensions.Literal["type"]]. Which fields should be returned in non-normalized form.
+ - show_enum_origins: typing.Optional[typing.Literal["type"]]. Which fields should be returned in non-normalized form.
- type: typing.Optional[InvoicesListRequestType]. If provided, will only return Invoices with this type
- `ACCOUNTS_RECEIVABLE` - ACCOUNTS_RECEIVABLE
- - `ACCOUNTS_PAYABLE` - ACCOUNTS_PAYABLE---
+ - `ACCOUNTS_PAYABLE` - ACCOUNTS_PAYABLE
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
+ ---
from merge.client import Merge
from merge.resources.accounting import (
InvoicesListRequestExpand,
@@ -115,31 +117,49 @@ def list(
_response = self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/accounting/v1/invoices"),
- params=remove_none_from_dict(
- {
- "company_id": company_id,
- "contact_id": contact_id,
- "created_after": serialize_datetime(created_after) if created_after is not None else None,
- "created_before": serialize_datetime(created_before) if created_before is not None else None,
- "cursor": cursor,
- "expand": expand,
- "include_deleted_data": include_deleted_data,
- "include_remote_data": include_remote_data,
- "issue_date_after": serialize_datetime(issue_date_after) if issue_date_after is not None else None,
- "issue_date_before": serialize_datetime(issue_date_before)
- if issue_date_before is not None
- else None,
- "modified_after": serialize_datetime(modified_after) if modified_after is not None else None,
- "modified_before": serialize_datetime(modified_before) if modified_before is not None else None,
- "page_size": page_size,
- "remote_fields": remote_fields,
- "remote_id": remote_id,
- "show_enum_origins": show_enum_origins,
- "type": type,
- }
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "company_id": company_id,
+ "contact_id": contact_id,
+ "created_after": serialize_datetime(created_after) if created_after is not None else None,
+ "created_before": serialize_datetime(created_before) if created_before is not None else None,
+ "cursor": cursor,
+ "expand": expand,
+ "include_deleted_data": include_deleted_data,
+ "include_remote_data": include_remote_data,
+ "issue_date_after": serialize_datetime(issue_date_after)
+ if issue_date_after is not None
+ else None,
+ "issue_date_before": serialize_datetime(issue_date_before)
+ if issue_date_before is not None
+ else None,
+ "modified_after": serialize_datetime(modified_after) if modified_after is not None else None,
+ "modified_before": serialize_datetime(modified_before) if modified_before is not None else None,
+ "page_size": page_size,
+ "remote_fields": remote_fields,
+ "remote_id": remote_id,
+ "show_enum_origins": show_enum_origins,
+ "type": type,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(PaginatedInvoiceList, _response.json()) # type: ignore
@@ -155,6 +175,7 @@ def create(
is_debug_mode: typing.Optional[bool] = None,
run_async: typing.Optional[bool] = None,
model: InvoiceRequest,
+ request_options: typing.Optional[RequestOptions] = None,
) -> InvoiceResponse:
"""
Creates an `Invoice` object with the given values.
@@ -165,37 +186,53 @@ def create(
- run_async: typing.Optional[bool]. Whether or not third-party updates should be run asynchronously.
- model: InvoiceRequest.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import Merge
- from merge.resources.accounting import InvoiceLineItemRequest, InvoiceRequest
+ from merge.resources.accounting import InvoiceRequest
client = Merge(
account_token="YOUR_ACCOUNT_TOKEN",
api_key="YOUR_API_KEY",
)
client.accounting.invoices.create(
- model=InvoiceRequest(
- line_items=[
- InvoiceLineItemRequest(
- remote_id="8765432",
- description="Pickleball lessons",
- unit_price=50.0,
- quantity=1.0,
- total_amount=50.0,
- exchange_rate="2.9",
- company="595c8f97-2ac4-45b7-b000-41bdf43240b5",
- )
- ],
- ),
+ model=InvoiceRequest(),
)
"""
_response = self._client_wrapper.httpx_client.request(
"POST",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/accounting/v1/invoices"),
- params=remove_none_from_dict({"is_debug_mode": is_debug_mode, "run_async": run_async}),
- json=jsonable_encoder({"model": model}),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "is_debug_mode": is_debug_mode,
+ "run_async": run_async,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ json=jsonable_encoder({"model": model})
+ if request_options is None or request_options.get("additional_body_parameters") is None
+ else {
+ **jsonable_encoder({"model": model}),
+ **(jsonable_encoder(remove_none_from_dict(request_options.get("additional_body_parameters", {})))),
+ },
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(InvoiceResponse, _response.json()) # type: ignore
@@ -211,8 +248,9 @@ def retrieve(
*,
expand: typing.Optional[InvoicesRetrieveRequestExpand] = None,
include_remote_data: typing.Optional[bool] = None,
- remote_fields: typing.Optional[typing_extensions.Literal["type"]] = None,
- show_enum_origins: typing.Optional[typing_extensions.Literal["type"]] = None,
+ remote_fields: typing.Optional[typing.Literal["type"]] = None,
+ show_enum_origins: typing.Optional[typing.Literal["type"]] = None,
+ request_options: typing.Optional[RequestOptions] = None,
) -> Invoice:
"""
Returns an `Invoice` object with the given `id`.
@@ -224,9 +262,11 @@ def retrieve(
- include_remote_data: typing.Optional[bool]. Whether to include the original data Merge fetched from the third-party to produce these models.
- - remote_fields: typing.Optional[typing_extensions.Literal["type"]]. Deprecated. Use show_enum_origins.
+ - remote_fields: typing.Optional[typing.Literal["type"]]. Deprecated. Use show_enum_origins.
+
+ - show_enum_origins: typing.Optional[typing.Literal["type"]]. Which fields should be returned in non-normalized form.
- - show_enum_origins: typing.Optional[typing_extensions.Literal["type"]]. Which fields should be returned in non-normalized form.
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import Merge
from merge.resources.accounting import InvoicesRetrieveRequestExpand
@@ -236,7 +276,7 @@ def retrieve(
api_key="YOUR_API_KEY",
)
client.accounting.invoices.retrieve(
- id="id",
+ id="string",
expand=InvoicesRetrieveRequestExpand.ACCOUNTING_PERIOD,
remote_fields="type",
show_enum_origins="type",
@@ -245,16 +285,32 @@ def retrieve(
_response = self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", f"api/accounting/v1/invoices/{id}"),
- params=remove_none_from_dict(
- {
- "expand": expand,
- "include_remote_data": include_remote_data,
- "remote_fields": remote_fields,
- "show_enum_origins": show_enum_origins,
- }
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "expand": expand,
+ "include_remote_data": include_remote_data,
+ "remote_fields": remote_fields,
+ "show_enum_origins": show_enum_origins,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(Invoice, _response.json()) # type: ignore
@@ -264,10 +320,12 @@ def retrieve(
raise ApiError(status_code=_response.status_code, body=_response.text)
raise ApiError(status_code=_response.status_code, body=_response_json)
- def meta_post_retrieve(self) -> MetaResponse:
+ def meta_post_retrieve(self, *, request_options: typing.Optional[RequestOptions] = None) -> MetaResponse:
"""
Returns metadata for `Invoice` POSTs.
+ Parameters:
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import Merge
@@ -280,8 +338,20 @@ def meta_post_retrieve(self) -> MetaResponse:
_response = self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/accounting/v1/invoices/meta/post"),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ request_options.get("additional_query_parameters") if request_options is not None else None
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(MetaResponse, _response.json()) # type: ignore
@@ -312,10 +382,11 @@ async def list(
modified_after: typing.Optional[dt.datetime] = None,
modified_before: typing.Optional[dt.datetime] = None,
page_size: typing.Optional[int] = None,
- remote_fields: typing.Optional[typing_extensions.Literal["type"]] = None,
+ remote_fields: typing.Optional[typing.Literal["type"]] = None,
remote_id: typing.Optional[str] = None,
- show_enum_origins: typing.Optional[typing_extensions.Literal["type"]] = None,
+ show_enum_origins: typing.Optional[typing.Literal["type"]] = None,
type: typing.Optional[InvoicesListRequestType] = None,
+ request_options: typing.Optional[RequestOptions] = None,
) -> PaginatedInvoiceList:
"""
Returns a list of `Invoice` objects.
@@ -347,16 +418,18 @@ async def list(
- page_size: typing.Optional[int]. Number of results to return per page.
- - remote_fields: typing.Optional[typing_extensions.Literal["type"]]. Deprecated. Use show_enum_origins.
+ - remote_fields: typing.Optional[typing.Literal["type"]]. Deprecated. Use show_enum_origins.
- remote_id: typing.Optional[str]. The API provider's ID for the given object.
- - show_enum_origins: typing.Optional[typing_extensions.Literal["type"]]. Which fields should be returned in non-normalized form.
+ - show_enum_origins: typing.Optional[typing.Literal["type"]]. Which fields should be returned in non-normalized form.
- type: typing.Optional[InvoicesListRequestType]. If provided, will only return Invoices with this type
- `ACCOUNTS_RECEIVABLE` - ACCOUNTS_RECEIVABLE
- - `ACCOUNTS_PAYABLE` - ACCOUNTS_PAYABLE---
+ - `ACCOUNTS_PAYABLE` - ACCOUNTS_PAYABLE
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
+ ---
from merge.client import AsyncMerge
from merge.resources.accounting import (
InvoicesListRequestExpand,
@@ -377,31 +450,49 @@ async def list(
_response = await self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/accounting/v1/invoices"),
- params=remove_none_from_dict(
- {
- "company_id": company_id,
- "contact_id": contact_id,
- "created_after": serialize_datetime(created_after) if created_after is not None else None,
- "created_before": serialize_datetime(created_before) if created_before is not None else None,
- "cursor": cursor,
- "expand": expand,
- "include_deleted_data": include_deleted_data,
- "include_remote_data": include_remote_data,
- "issue_date_after": serialize_datetime(issue_date_after) if issue_date_after is not None else None,
- "issue_date_before": serialize_datetime(issue_date_before)
- if issue_date_before is not None
- else None,
- "modified_after": serialize_datetime(modified_after) if modified_after is not None else None,
- "modified_before": serialize_datetime(modified_before) if modified_before is not None else None,
- "page_size": page_size,
- "remote_fields": remote_fields,
- "remote_id": remote_id,
- "show_enum_origins": show_enum_origins,
- "type": type,
- }
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "company_id": company_id,
+ "contact_id": contact_id,
+ "created_after": serialize_datetime(created_after) if created_after is not None else None,
+ "created_before": serialize_datetime(created_before) if created_before is not None else None,
+ "cursor": cursor,
+ "expand": expand,
+ "include_deleted_data": include_deleted_data,
+ "include_remote_data": include_remote_data,
+ "issue_date_after": serialize_datetime(issue_date_after)
+ if issue_date_after is not None
+ else None,
+ "issue_date_before": serialize_datetime(issue_date_before)
+ if issue_date_before is not None
+ else None,
+ "modified_after": serialize_datetime(modified_after) if modified_after is not None else None,
+ "modified_before": serialize_datetime(modified_before) if modified_before is not None else None,
+ "page_size": page_size,
+ "remote_fields": remote_fields,
+ "remote_id": remote_id,
+ "show_enum_origins": show_enum_origins,
+ "type": type,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(PaginatedInvoiceList, _response.json()) # type: ignore
@@ -417,6 +508,7 @@ async def create(
is_debug_mode: typing.Optional[bool] = None,
run_async: typing.Optional[bool] = None,
model: InvoiceRequest,
+ request_options: typing.Optional[RequestOptions] = None,
) -> InvoiceResponse:
"""
Creates an `Invoice` object with the given values.
@@ -427,37 +519,53 @@ async def create(
- run_async: typing.Optional[bool]. Whether or not third-party updates should be run asynchronously.
- model: InvoiceRequest.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import AsyncMerge
- from merge.resources.accounting import InvoiceLineItemRequest, InvoiceRequest
+ from merge.resources.accounting import InvoiceRequest
client = AsyncMerge(
account_token="YOUR_ACCOUNT_TOKEN",
api_key="YOUR_API_KEY",
)
await client.accounting.invoices.create(
- model=InvoiceRequest(
- line_items=[
- InvoiceLineItemRequest(
- remote_id="8765432",
- description="Pickleball lessons",
- unit_price=50.0,
- quantity=1.0,
- total_amount=50.0,
- exchange_rate="2.9",
- company="595c8f97-2ac4-45b7-b000-41bdf43240b5",
- )
- ],
- ),
+ model=InvoiceRequest(),
)
"""
_response = await self._client_wrapper.httpx_client.request(
"POST",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/accounting/v1/invoices"),
- params=remove_none_from_dict({"is_debug_mode": is_debug_mode, "run_async": run_async}),
- json=jsonable_encoder({"model": model}),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "is_debug_mode": is_debug_mode,
+ "run_async": run_async,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ json=jsonable_encoder({"model": model})
+ if request_options is None or request_options.get("additional_body_parameters") is None
+ else {
+ **jsonable_encoder({"model": model}),
+ **(jsonable_encoder(remove_none_from_dict(request_options.get("additional_body_parameters", {})))),
+ },
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(InvoiceResponse, _response.json()) # type: ignore
@@ -473,8 +581,9 @@ async def retrieve(
*,
expand: typing.Optional[InvoicesRetrieveRequestExpand] = None,
include_remote_data: typing.Optional[bool] = None,
- remote_fields: typing.Optional[typing_extensions.Literal["type"]] = None,
- show_enum_origins: typing.Optional[typing_extensions.Literal["type"]] = None,
+ remote_fields: typing.Optional[typing.Literal["type"]] = None,
+ show_enum_origins: typing.Optional[typing.Literal["type"]] = None,
+ request_options: typing.Optional[RequestOptions] = None,
) -> Invoice:
"""
Returns an `Invoice` object with the given `id`.
@@ -486,9 +595,11 @@ async def retrieve(
- include_remote_data: typing.Optional[bool]. Whether to include the original data Merge fetched from the third-party to produce these models.
- - remote_fields: typing.Optional[typing_extensions.Literal["type"]]. Deprecated. Use show_enum_origins.
+ - remote_fields: typing.Optional[typing.Literal["type"]]. Deprecated. Use show_enum_origins.
- - show_enum_origins: typing.Optional[typing_extensions.Literal["type"]]. Which fields should be returned in non-normalized form.
+ - show_enum_origins: typing.Optional[typing.Literal["type"]]. Which fields should be returned in non-normalized form.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import AsyncMerge
from merge.resources.accounting import InvoicesRetrieveRequestExpand
@@ -498,7 +609,7 @@ async def retrieve(
api_key="YOUR_API_KEY",
)
await client.accounting.invoices.retrieve(
- id="id",
+ id="string",
expand=InvoicesRetrieveRequestExpand.ACCOUNTING_PERIOD,
remote_fields="type",
show_enum_origins="type",
@@ -507,16 +618,32 @@ async def retrieve(
_response = await self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", f"api/accounting/v1/invoices/{id}"),
- params=remove_none_from_dict(
- {
- "expand": expand,
- "include_remote_data": include_remote_data,
- "remote_fields": remote_fields,
- "show_enum_origins": show_enum_origins,
- }
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "expand": expand,
+ "include_remote_data": include_remote_data,
+ "remote_fields": remote_fields,
+ "show_enum_origins": show_enum_origins,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(Invoice, _response.json()) # type: ignore
@@ -526,10 +653,12 @@ async def retrieve(
raise ApiError(status_code=_response.status_code, body=_response.text)
raise ApiError(status_code=_response.status_code, body=_response_json)
- async def meta_post_retrieve(self) -> MetaResponse:
+ async def meta_post_retrieve(self, *, request_options: typing.Optional[RequestOptions] = None) -> MetaResponse:
"""
Returns metadata for `Invoice` POSTs.
+ Parameters:
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import AsyncMerge
@@ -542,8 +671,20 @@ async def meta_post_retrieve(self) -> MetaResponse:
_response = await self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/accounting/v1/invoices/meta/post"),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ request_options.get("additional_query_parameters") if request_options is not None else None
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(MetaResponse, _response.json()) # type: ignore
diff --git a/src/merge/resources/accounting/resources/issues/client.py b/src/merge/resources/accounting/resources/issues/client.py
index 10e513f6..3851cbfe 100644
--- a/src/merge/resources/accounting/resources/issues/client.py
+++ b/src/merge/resources/accounting/resources/issues/client.py
@@ -8,7 +8,9 @@
from .....core.api_error import ApiError
from .....core.client_wrapper import AsyncClientWrapper, SyncClientWrapper
from .....core.datetime_utils import serialize_datetime
+from .....core.jsonable_encoder import jsonable_encoder
from .....core.remove_none_from_dict import remove_none_from_dict
+from .....core.request_options import RequestOptions
from ...types.issue import Issue
from ...types.paginated_issue_list import PaginatedIssueList
from .types.issues_list_request_status import IssuesListRequestStatus
@@ -39,6 +41,7 @@ def list(
page_size: typing.Optional[int] = None,
start_date: typing.Optional[str] = None,
status: typing.Optional[IssuesListRequestStatus] = None,
+ request_options: typing.Optional[RequestOptions] = None,
) -> PaginatedIssueList:
"""
Gets issues.
@@ -71,7 +74,9 @@ def list(
- status: typing.Optional[IssuesListRequestStatus]. Status of the issue. Options: ('ONGOING', 'RESOLVED')
- `ONGOING` - ONGOING
- - `RESOLVED` - RESOLVED---
+ - `RESOLVED` - RESOLVED
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
+ ---
from merge.client import Merge
from merge.resources.accounting import IssuesListRequestStatus
@@ -86,33 +91,49 @@ def list(
_response = self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/accounting/v1/issues"),
- params=remove_none_from_dict(
- {
- "account_token": account_token,
- "cursor": cursor,
- "end_date": end_date,
- "end_user_organization_name": end_user_organization_name,
- "first_incident_time_after": serialize_datetime(first_incident_time_after)
- if first_incident_time_after is not None
- else None,
- "first_incident_time_before": serialize_datetime(first_incident_time_before)
- if first_incident_time_before is not None
- else None,
- "include_muted": include_muted,
- "integration_name": integration_name,
- "last_incident_time_after": serialize_datetime(last_incident_time_after)
- if last_incident_time_after is not None
- else None,
- "last_incident_time_before": serialize_datetime(last_incident_time_before)
- if last_incident_time_before is not None
- else None,
- "page_size": page_size,
- "start_date": start_date,
- "status": status,
- }
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "account_token": account_token,
+ "cursor": cursor,
+ "end_date": end_date,
+ "end_user_organization_name": end_user_organization_name,
+ "first_incident_time_after": serialize_datetime(first_incident_time_after)
+ if first_incident_time_after is not None
+ else None,
+ "first_incident_time_before": serialize_datetime(first_incident_time_before)
+ if first_incident_time_before is not None
+ else None,
+ "include_muted": include_muted,
+ "integration_name": integration_name,
+ "last_incident_time_after": serialize_datetime(last_incident_time_after)
+ if last_incident_time_after is not None
+ else None,
+ "last_incident_time_before": serialize_datetime(last_incident_time_before)
+ if last_incident_time_before is not None
+ else None,
+ "page_size": page_size,
+ "start_date": start_date,
+ "status": status,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(PaginatedIssueList, _response.json()) # type: ignore
@@ -122,12 +143,14 @@ def list(
raise ApiError(status_code=_response.status_code, body=_response.text)
raise ApiError(status_code=_response.status_code, body=_response_json)
- def retrieve(self, id: str) -> Issue:
+ def retrieve(self, id: str, *, request_options: typing.Optional[RequestOptions] = None) -> Issue:
"""
Get a specific issue.
Parameters:
- id: str.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import Merge
@@ -136,14 +159,26 @@ def retrieve(self, id: str) -> Issue:
api_key="YOUR_API_KEY",
)
client.accounting.issues.retrieve(
- id="id",
+ id="string",
)
"""
_response = self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", f"api/accounting/v1/issues/{id}"),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ request_options.get("additional_query_parameters") if request_options is not None else None
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(Issue, _response.json()) # type: ignore
@@ -174,6 +209,7 @@ async def list(
page_size: typing.Optional[int] = None,
start_date: typing.Optional[str] = None,
status: typing.Optional[IssuesListRequestStatus] = None,
+ request_options: typing.Optional[RequestOptions] = None,
) -> PaginatedIssueList:
"""
Gets issues.
@@ -206,7 +242,9 @@ async def list(
- status: typing.Optional[IssuesListRequestStatus]. Status of the issue. Options: ('ONGOING', 'RESOLVED')
- `ONGOING` - ONGOING
- - `RESOLVED` - RESOLVED---
+ - `RESOLVED` - RESOLVED
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
+ ---
from merge.client import AsyncMerge
from merge.resources.accounting import IssuesListRequestStatus
@@ -221,33 +259,49 @@ async def list(
_response = await self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/accounting/v1/issues"),
- params=remove_none_from_dict(
- {
- "account_token": account_token,
- "cursor": cursor,
- "end_date": end_date,
- "end_user_organization_name": end_user_organization_name,
- "first_incident_time_after": serialize_datetime(first_incident_time_after)
- if first_incident_time_after is not None
- else None,
- "first_incident_time_before": serialize_datetime(first_incident_time_before)
- if first_incident_time_before is not None
- else None,
- "include_muted": include_muted,
- "integration_name": integration_name,
- "last_incident_time_after": serialize_datetime(last_incident_time_after)
- if last_incident_time_after is not None
- else None,
- "last_incident_time_before": serialize_datetime(last_incident_time_before)
- if last_incident_time_before is not None
- else None,
- "page_size": page_size,
- "start_date": start_date,
- "status": status,
- }
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "account_token": account_token,
+ "cursor": cursor,
+ "end_date": end_date,
+ "end_user_organization_name": end_user_organization_name,
+ "first_incident_time_after": serialize_datetime(first_incident_time_after)
+ if first_incident_time_after is not None
+ else None,
+ "first_incident_time_before": serialize_datetime(first_incident_time_before)
+ if first_incident_time_before is not None
+ else None,
+ "include_muted": include_muted,
+ "integration_name": integration_name,
+ "last_incident_time_after": serialize_datetime(last_incident_time_after)
+ if last_incident_time_after is not None
+ else None,
+ "last_incident_time_before": serialize_datetime(last_incident_time_before)
+ if last_incident_time_before is not None
+ else None,
+ "page_size": page_size,
+ "start_date": start_date,
+ "status": status,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(PaginatedIssueList, _response.json()) # type: ignore
@@ -257,12 +311,14 @@ async def list(
raise ApiError(status_code=_response.status_code, body=_response.text)
raise ApiError(status_code=_response.status_code, body=_response_json)
- async def retrieve(self, id: str) -> Issue:
+ async def retrieve(self, id: str, *, request_options: typing.Optional[RequestOptions] = None) -> Issue:
"""
Get a specific issue.
Parameters:
- id: str.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import AsyncMerge
@@ -271,14 +327,26 @@ async def retrieve(self, id: str) -> Issue:
api_key="YOUR_API_KEY",
)
await client.accounting.issues.retrieve(
- id="id",
+ id="string",
)
"""
_response = await self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", f"api/accounting/v1/issues/{id}"),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ request_options.get("additional_query_parameters") if request_options is not None else None
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(Issue, _response.json()) # type: ignore
diff --git a/src/merge/resources/accounting/resources/items/client.py b/src/merge/resources/accounting/resources/items/client.py
index 1997f740..bb7d1c9b 100644
--- a/src/merge/resources/accounting/resources/items/client.py
+++ b/src/merge/resources/accounting/resources/items/client.py
@@ -5,12 +5,12 @@
import urllib.parse
from json.decoder import JSONDecodeError
-import typing_extensions
-
from .....core.api_error import ApiError
from .....core.client_wrapper import AsyncClientWrapper, SyncClientWrapper
from .....core.datetime_utils import serialize_datetime
+from .....core.jsonable_encoder import jsonable_encoder
from .....core.remove_none_from_dict import remove_none_from_dict
+from .....core.request_options import RequestOptions
from ...types.item import Item
from ...types.paginated_item_list import PaginatedItemList
from .types.items_list_request_expand import ItemsListRequestExpand
@@ -39,9 +39,10 @@ def list(
modified_after: typing.Optional[dt.datetime] = None,
modified_before: typing.Optional[dt.datetime] = None,
page_size: typing.Optional[int] = None,
- remote_fields: typing.Optional[typing_extensions.Literal["status"]] = None,
+ remote_fields: typing.Optional[typing.Literal["status"]] = None,
remote_id: typing.Optional[str] = None,
- show_enum_origins: typing.Optional[typing_extensions.Literal["status"]] = None,
+ show_enum_origins: typing.Optional[typing.Literal["status"]] = None,
+ request_options: typing.Optional[RequestOptions] = None,
) -> PaginatedItemList:
"""
Returns a list of `Item` objects.
@@ -67,11 +68,13 @@ def list(
- page_size: typing.Optional[int]. Number of results to return per page.
- - remote_fields: typing.Optional[typing_extensions.Literal["status"]]. Deprecated. Use show_enum_origins.
+ - remote_fields: typing.Optional[typing.Literal["status"]]. Deprecated. Use show_enum_origins.
- remote_id: typing.Optional[str]. The API provider's ID for the given object.
- - show_enum_origins: typing.Optional[typing_extensions.Literal["status"]]. Which fields should be returned in non-normalized form.
+ - show_enum_origins: typing.Optional[typing.Literal["status"]]. Which fields should be returned in non-normalized form.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import Merge
from merge.resources.accounting import ItemsListRequestExpand
@@ -89,25 +92,41 @@ def list(
_response = self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/accounting/v1/items"),
- params=remove_none_from_dict(
- {
- "company_id": company_id,
- "created_after": serialize_datetime(created_after) if created_after is not None else None,
- "created_before": serialize_datetime(created_before) if created_before is not None else None,
- "cursor": cursor,
- "expand": expand,
- "include_deleted_data": include_deleted_data,
- "include_remote_data": include_remote_data,
- "modified_after": serialize_datetime(modified_after) if modified_after is not None else None,
- "modified_before": serialize_datetime(modified_before) if modified_before is not None else None,
- "page_size": page_size,
- "remote_fields": remote_fields,
- "remote_id": remote_id,
- "show_enum_origins": show_enum_origins,
- }
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "company_id": company_id,
+ "created_after": serialize_datetime(created_after) if created_after is not None else None,
+ "created_before": serialize_datetime(created_before) if created_before is not None else None,
+ "cursor": cursor,
+ "expand": expand,
+ "include_deleted_data": include_deleted_data,
+ "include_remote_data": include_remote_data,
+ "modified_after": serialize_datetime(modified_after) if modified_after is not None else None,
+ "modified_before": serialize_datetime(modified_before) if modified_before is not None else None,
+ "page_size": page_size,
+ "remote_fields": remote_fields,
+ "remote_id": remote_id,
+ "show_enum_origins": show_enum_origins,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(PaginatedItemList, _response.json()) # type: ignore
@@ -123,8 +142,9 @@ def retrieve(
*,
expand: typing.Optional[ItemsRetrieveRequestExpand] = None,
include_remote_data: typing.Optional[bool] = None,
- remote_fields: typing.Optional[typing_extensions.Literal["status"]] = None,
- show_enum_origins: typing.Optional[typing_extensions.Literal["status"]] = None,
+ remote_fields: typing.Optional[typing.Literal["status"]] = None,
+ show_enum_origins: typing.Optional[typing.Literal["status"]] = None,
+ request_options: typing.Optional[RequestOptions] = None,
) -> Item:
"""
Returns an `Item` object with the given `id`.
@@ -136,9 +156,11 @@ def retrieve(
- include_remote_data: typing.Optional[bool]. Whether to include the original data Merge fetched from the third-party to produce these models.
- - remote_fields: typing.Optional[typing_extensions.Literal["status"]]. Deprecated. Use show_enum_origins.
+ - remote_fields: typing.Optional[typing.Literal["status"]]. Deprecated. Use show_enum_origins.
- - show_enum_origins: typing.Optional[typing_extensions.Literal["status"]]. Which fields should be returned in non-normalized form.
+ - show_enum_origins: typing.Optional[typing.Literal["status"]]. Which fields should be returned in non-normalized form.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import Merge
from merge.resources.accounting import ItemsRetrieveRequestExpand
@@ -148,7 +170,7 @@ def retrieve(
api_key="YOUR_API_KEY",
)
client.accounting.items.retrieve(
- id="id",
+ id="string",
expand=ItemsRetrieveRequestExpand.COMPANY,
remote_fields="status",
show_enum_origins="status",
@@ -157,16 +179,32 @@ def retrieve(
_response = self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", f"api/accounting/v1/items/{id}"),
- params=remove_none_from_dict(
- {
- "expand": expand,
- "include_remote_data": include_remote_data,
- "remote_fields": remote_fields,
- "show_enum_origins": show_enum_origins,
- }
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "expand": expand,
+ "include_remote_data": include_remote_data,
+ "remote_fields": remote_fields,
+ "show_enum_origins": show_enum_origins,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(Item, _response.json()) # type: ignore
@@ -194,9 +232,10 @@ async def list(
modified_after: typing.Optional[dt.datetime] = None,
modified_before: typing.Optional[dt.datetime] = None,
page_size: typing.Optional[int] = None,
- remote_fields: typing.Optional[typing_extensions.Literal["status"]] = None,
+ remote_fields: typing.Optional[typing.Literal["status"]] = None,
remote_id: typing.Optional[str] = None,
- show_enum_origins: typing.Optional[typing_extensions.Literal["status"]] = None,
+ show_enum_origins: typing.Optional[typing.Literal["status"]] = None,
+ request_options: typing.Optional[RequestOptions] = None,
) -> PaginatedItemList:
"""
Returns a list of `Item` objects.
@@ -222,11 +261,13 @@ async def list(
- page_size: typing.Optional[int]. Number of results to return per page.
- - remote_fields: typing.Optional[typing_extensions.Literal["status"]]. Deprecated. Use show_enum_origins.
+ - remote_fields: typing.Optional[typing.Literal["status"]]. Deprecated. Use show_enum_origins.
- remote_id: typing.Optional[str]. The API provider's ID for the given object.
- - show_enum_origins: typing.Optional[typing_extensions.Literal["status"]]. Which fields should be returned in non-normalized form.
+ - show_enum_origins: typing.Optional[typing.Literal["status"]]. Which fields should be returned in non-normalized form.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import AsyncMerge
from merge.resources.accounting import ItemsListRequestExpand
@@ -244,25 +285,41 @@ async def list(
_response = await self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/accounting/v1/items"),
- params=remove_none_from_dict(
- {
- "company_id": company_id,
- "created_after": serialize_datetime(created_after) if created_after is not None else None,
- "created_before": serialize_datetime(created_before) if created_before is not None else None,
- "cursor": cursor,
- "expand": expand,
- "include_deleted_data": include_deleted_data,
- "include_remote_data": include_remote_data,
- "modified_after": serialize_datetime(modified_after) if modified_after is not None else None,
- "modified_before": serialize_datetime(modified_before) if modified_before is not None else None,
- "page_size": page_size,
- "remote_fields": remote_fields,
- "remote_id": remote_id,
- "show_enum_origins": show_enum_origins,
- }
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "company_id": company_id,
+ "created_after": serialize_datetime(created_after) if created_after is not None else None,
+ "created_before": serialize_datetime(created_before) if created_before is not None else None,
+ "cursor": cursor,
+ "expand": expand,
+ "include_deleted_data": include_deleted_data,
+ "include_remote_data": include_remote_data,
+ "modified_after": serialize_datetime(modified_after) if modified_after is not None else None,
+ "modified_before": serialize_datetime(modified_before) if modified_before is not None else None,
+ "page_size": page_size,
+ "remote_fields": remote_fields,
+ "remote_id": remote_id,
+ "show_enum_origins": show_enum_origins,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(PaginatedItemList, _response.json()) # type: ignore
@@ -278,8 +335,9 @@ async def retrieve(
*,
expand: typing.Optional[ItemsRetrieveRequestExpand] = None,
include_remote_data: typing.Optional[bool] = None,
- remote_fields: typing.Optional[typing_extensions.Literal["status"]] = None,
- show_enum_origins: typing.Optional[typing_extensions.Literal["status"]] = None,
+ remote_fields: typing.Optional[typing.Literal["status"]] = None,
+ show_enum_origins: typing.Optional[typing.Literal["status"]] = None,
+ request_options: typing.Optional[RequestOptions] = None,
) -> Item:
"""
Returns an `Item` object with the given `id`.
@@ -291,9 +349,11 @@ async def retrieve(
- include_remote_data: typing.Optional[bool]. Whether to include the original data Merge fetched from the third-party to produce these models.
- - remote_fields: typing.Optional[typing_extensions.Literal["status"]]. Deprecated. Use show_enum_origins.
+ - remote_fields: typing.Optional[typing.Literal["status"]]. Deprecated. Use show_enum_origins.
- - show_enum_origins: typing.Optional[typing_extensions.Literal["status"]]. Which fields should be returned in non-normalized form.
+ - show_enum_origins: typing.Optional[typing.Literal["status"]]. Which fields should be returned in non-normalized form.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import AsyncMerge
from merge.resources.accounting import ItemsRetrieveRequestExpand
@@ -303,7 +363,7 @@ async def retrieve(
api_key="YOUR_API_KEY",
)
await client.accounting.items.retrieve(
- id="id",
+ id="string",
expand=ItemsRetrieveRequestExpand.COMPANY,
remote_fields="status",
show_enum_origins="status",
@@ -312,16 +372,32 @@ async def retrieve(
_response = await self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", f"api/accounting/v1/items/{id}"),
- params=remove_none_from_dict(
- {
- "expand": expand,
- "include_remote_data": include_remote_data,
- "remote_fields": remote_fields,
- "show_enum_origins": show_enum_origins,
- }
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "expand": expand,
+ "include_remote_data": include_remote_data,
+ "remote_fields": remote_fields,
+ "show_enum_origins": show_enum_origins,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(Item, _response.json()) # type: ignore
diff --git a/src/merge/resources/accounting/resources/journal_entries/client.py b/src/merge/resources/accounting/resources/journal_entries/client.py
index 99c1599c..b5b8fe10 100644
--- a/src/merge/resources/accounting/resources/journal_entries/client.py
+++ b/src/merge/resources/accounting/resources/journal_entries/client.py
@@ -10,6 +10,7 @@
from .....core.datetime_utils import serialize_datetime
from .....core.jsonable_encoder import jsonable_encoder
from .....core.remove_none_from_dict import remove_none_from_dict
+from .....core.request_options import RequestOptions
from ...types.journal_entry import JournalEntry
from ...types.journal_entry_request import JournalEntryRequest
from ...types.journal_entry_response import JournalEntryResponse
@@ -47,6 +48,7 @@ def list(
remote_id: typing.Optional[str] = None,
transaction_date_after: typing.Optional[dt.datetime] = None,
transaction_date_before: typing.Optional[dt.datetime] = None,
+ request_options: typing.Optional[RequestOptions] = None,
) -> PaginatedJournalEntryList:
"""
Returns a list of `JournalEntry` objects.
@@ -77,6 +79,8 @@ def list(
- transaction_date_after: typing.Optional[dt.datetime]. If provided, will only return objects created after this datetime.
- transaction_date_before: typing.Optional[dt.datetime]. If provided, will only return objects created before this datetime.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import Merge
from merge.resources.accounting import JournalEntriesListRequestExpand
@@ -92,29 +96,45 @@ def list(
_response = self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/accounting/v1/journal-entries"),
- params=remove_none_from_dict(
- {
- "company_id": company_id,
- "created_after": serialize_datetime(created_after) if created_after is not None else None,
- "created_before": serialize_datetime(created_before) if created_before is not None else None,
- "cursor": cursor,
- "expand": expand,
- "include_deleted_data": include_deleted_data,
- "include_remote_data": include_remote_data,
- "modified_after": serialize_datetime(modified_after) if modified_after is not None else None,
- "modified_before": serialize_datetime(modified_before) if modified_before is not None else None,
- "page_size": page_size,
- "remote_id": remote_id,
- "transaction_date_after": serialize_datetime(transaction_date_after)
- if transaction_date_after is not None
- else None,
- "transaction_date_before": serialize_datetime(transaction_date_before)
- if transaction_date_before is not None
- else None,
- }
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "company_id": company_id,
+ "created_after": serialize_datetime(created_after) if created_after is not None else None,
+ "created_before": serialize_datetime(created_before) if created_before is not None else None,
+ "cursor": cursor,
+ "expand": expand,
+ "include_deleted_data": include_deleted_data,
+ "include_remote_data": include_remote_data,
+ "modified_after": serialize_datetime(modified_after) if modified_after is not None else None,
+ "modified_before": serialize_datetime(modified_before) if modified_before is not None else None,
+ "page_size": page_size,
+ "remote_id": remote_id,
+ "transaction_date_after": serialize_datetime(transaction_date_after)
+ if transaction_date_after is not None
+ else None,
+ "transaction_date_before": serialize_datetime(transaction_date_before)
+ if transaction_date_before is not None
+ else None,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(PaginatedJournalEntryList, _response.json()) # type: ignore
@@ -130,6 +150,7 @@ def create(
is_debug_mode: typing.Optional[bool] = None,
run_async: typing.Optional[bool] = None,
model: JournalEntryRequest,
+ request_options: typing.Optional[RequestOptions] = None,
) -> JournalEntryResponse:
"""
Creates a `JournalEntry` object with the given values.
@@ -140,36 +161,53 @@ def create(
- run_async: typing.Optional[bool]. Whether or not third-party updates should be run asynchronously.
- model: JournalEntryRequest.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import Merge
- from merge.resources.accounting import JournalEntryRequest, JournalLineRequest
+ from merge.resources.accounting import JournalEntryRequest
client = Merge(
account_token="YOUR_ACCOUNT_TOKEN",
api_key="YOUR_API_KEY",
)
client.accounting.journal_entries.create(
- model=JournalEntryRequest(
- lines=[
- JournalLineRequest(
- remote_id="121222",
- net_amount=25.54,
- company="595c8f97-2ac4-45b7-b000-41bdf43240b5",
- contact="d2d5ea3c-b032-11ec-b909-0242ac120002",
- description="Cash payment for lunch",
- exchange_rate="2.9",
- )
- ],
- ),
+ model=JournalEntryRequest(),
)
"""
_response = self._client_wrapper.httpx_client.request(
"POST",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/accounting/v1/journal-entries"),
- params=remove_none_from_dict({"is_debug_mode": is_debug_mode, "run_async": run_async}),
- json=jsonable_encoder({"model": model}),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "is_debug_mode": is_debug_mode,
+ "run_async": run_async,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ json=jsonable_encoder({"model": model})
+ if request_options is None or request_options.get("additional_body_parameters") is None
+ else {
+ **jsonable_encoder({"model": model}),
+ **(jsonable_encoder(remove_none_from_dict(request_options.get("additional_body_parameters", {})))),
+ },
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(JournalEntryResponse, _response.json()) # type: ignore
@@ -185,6 +223,7 @@ def retrieve(
*,
expand: typing.Optional[JournalEntriesRetrieveRequestExpand] = None,
include_remote_data: typing.Optional[bool] = None,
+ request_options: typing.Optional[RequestOptions] = None,
) -> JournalEntry:
"""
Returns a `JournalEntry` object with the given `id`.
@@ -195,6 +234,8 @@ def retrieve(
- expand: typing.Optional[JournalEntriesRetrieveRequestExpand]. Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces.
- include_remote_data: typing.Optional[bool]. Whether to include the original data Merge fetched from the third-party to produce these models.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import Merge
from merge.resources.accounting import JournalEntriesRetrieveRequestExpand
@@ -204,16 +245,37 @@ def retrieve(
api_key="YOUR_API_KEY",
)
client.accounting.journal_entries.retrieve(
- id="id",
+ id="string",
expand=JournalEntriesRetrieveRequestExpand.ACCOUNTING_PERIOD,
)
"""
_response = self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", f"api/accounting/v1/journal-entries/{id}"),
- params=remove_none_from_dict({"expand": expand, "include_remote_data": include_remote_data}),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "expand": expand,
+ "include_remote_data": include_remote_data,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(JournalEntry, _response.json()) # type: ignore
@@ -223,10 +285,12 @@ def retrieve(
raise ApiError(status_code=_response.status_code, body=_response.text)
raise ApiError(status_code=_response.status_code, body=_response_json)
- def meta_post_retrieve(self) -> MetaResponse:
+ def meta_post_retrieve(self, *, request_options: typing.Optional[RequestOptions] = None) -> MetaResponse:
"""
Returns metadata for `JournalEntry` POSTs.
+ Parameters:
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import Merge
@@ -241,8 +305,20 @@ def meta_post_retrieve(self) -> MetaResponse:
urllib.parse.urljoin(
f"{self._client_wrapper.get_base_url()}/", "api/accounting/v1/journal-entries/meta/post"
),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ request_options.get("additional_query_parameters") if request_options is not None else None
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(MetaResponse, _response.json()) # type: ignore
@@ -273,6 +349,7 @@ async def list(
remote_id: typing.Optional[str] = None,
transaction_date_after: typing.Optional[dt.datetime] = None,
transaction_date_before: typing.Optional[dt.datetime] = None,
+ request_options: typing.Optional[RequestOptions] = None,
) -> PaginatedJournalEntryList:
"""
Returns a list of `JournalEntry` objects.
@@ -303,6 +380,8 @@ async def list(
- transaction_date_after: typing.Optional[dt.datetime]. If provided, will only return objects created after this datetime.
- transaction_date_before: typing.Optional[dt.datetime]. If provided, will only return objects created before this datetime.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import AsyncMerge
from merge.resources.accounting import JournalEntriesListRequestExpand
@@ -318,29 +397,45 @@ async def list(
_response = await self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/accounting/v1/journal-entries"),
- params=remove_none_from_dict(
- {
- "company_id": company_id,
- "created_after": serialize_datetime(created_after) if created_after is not None else None,
- "created_before": serialize_datetime(created_before) if created_before is not None else None,
- "cursor": cursor,
- "expand": expand,
- "include_deleted_data": include_deleted_data,
- "include_remote_data": include_remote_data,
- "modified_after": serialize_datetime(modified_after) if modified_after is not None else None,
- "modified_before": serialize_datetime(modified_before) if modified_before is not None else None,
- "page_size": page_size,
- "remote_id": remote_id,
- "transaction_date_after": serialize_datetime(transaction_date_after)
- if transaction_date_after is not None
- else None,
- "transaction_date_before": serialize_datetime(transaction_date_before)
- if transaction_date_before is not None
- else None,
- }
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "company_id": company_id,
+ "created_after": serialize_datetime(created_after) if created_after is not None else None,
+ "created_before": serialize_datetime(created_before) if created_before is not None else None,
+ "cursor": cursor,
+ "expand": expand,
+ "include_deleted_data": include_deleted_data,
+ "include_remote_data": include_remote_data,
+ "modified_after": serialize_datetime(modified_after) if modified_after is not None else None,
+ "modified_before": serialize_datetime(modified_before) if modified_before is not None else None,
+ "page_size": page_size,
+ "remote_id": remote_id,
+ "transaction_date_after": serialize_datetime(transaction_date_after)
+ if transaction_date_after is not None
+ else None,
+ "transaction_date_before": serialize_datetime(transaction_date_before)
+ if transaction_date_before is not None
+ else None,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(PaginatedJournalEntryList, _response.json()) # type: ignore
@@ -356,6 +451,7 @@ async def create(
is_debug_mode: typing.Optional[bool] = None,
run_async: typing.Optional[bool] = None,
model: JournalEntryRequest,
+ request_options: typing.Optional[RequestOptions] = None,
) -> JournalEntryResponse:
"""
Creates a `JournalEntry` object with the given values.
@@ -366,36 +462,53 @@ async def create(
- run_async: typing.Optional[bool]. Whether or not third-party updates should be run asynchronously.
- model: JournalEntryRequest.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import AsyncMerge
- from merge.resources.accounting import JournalEntryRequest, JournalLineRequest
+ from merge.resources.accounting import JournalEntryRequest
client = AsyncMerge(
account_token="YOUR_ACCOUNT_TOKEN",
api_key="YOUR_API_KEY",
)
await client.accounting.journal_entries.create(
- model=JournalEntryRequest(
- lines=[
- JournalLineRequest(
- remote_id="121222",
- net_amount=25.54,
- company="595c8f97-2ac4-45b7-b000-41bdf43240b5",
- contact="d2d5ea3c-b032-11ec-b909-0242ac120002",
- description="Cash payment for lunch",
- exchange_rate="2.9",
- )
- ],
- ),
+ model=JournalEntryRequest(),
)
"""
_response = await self._client_wrapper.httpx_client.request(
"POST",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/accounting/v1/journal-entries"),
- params=remove_none_from_dict({"is_debug_mode": is_debug_mode, "run_async": run_async}),
- json=jsonable_encoder({"model": model}),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "is_debug_mode": is_debug_mode,
+ "run_async": run_async,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ json=jsonable_encoder({"model": model})
+ if request_options is None or request_options.get("additional_body_parameters") is None
+ else {
+ **jsonable_encoder({"model": model}),
+ **(jsonable_encoder(remove_none_from_dict(request_options.get("additional_body_parameters", {})))),
+ },
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(JournalEntryResponse, _response.json()) # type: ignore
@@ -411,6 +524,7 @@ async def retrieve(
*,
expand: typing.Optional[JournalEntriesRetrieveRequestExpand] = None,
include_remote_data: typing.Optional[bool] = None,
+ request_options: typing.Optional[RequestOptions] = None,
) -> JournalEntry:
"""
Returns a `JournalEntry` object with the given `id`.
@@ -421,6 +535,8 @@ async def retrieve(
- expand: typing.Optional[JournalEntriesRetrieveRequestExpand]. Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces.
- include_remote_data: typing.Optional[bool]. Whether to include the original data Merge fetched from the third-party to produce these models.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import AsyncMerge
from merge.resources.accounting import JournalEntriesRetrieveRequestExpand
@@ -430,16 +546,37 @@ async def retrieve(
api_key="YOUR_API_KEY",
)
await client.accounting.journal_entries.retrieve(
- id="id",
+ id="string",
expand=JournalEntriesRetrieveRequestExpand.ACCOUNTING_PERIOD,
)
"""
_response = await self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", f"api/accounting/v1/journal-entries/{id}"),
- params=remove_none_from_dict({"expand": expand, "include_remote_data": include_remote_data}),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "expand": expand,
+ "include_remote_data": include_remote_data,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(JournalEntry, _response.json()) # type: ignore
@@ -449,10 +586,12 @@ async def retrieve(
raise ApiError(status_code=_response.status_code, body=_response.text)
raise ApiError(status_code=_response.status_code, body=_response_json)
- async def meta_post_retrieve(self) -> MetaResponse:
+ async def meta_post_retrieve(self, *, request_options: typing.Optional[RequestOptions] = None) -> MetaResponse:
"""
Returns metadata for `JournalEntry` POSTs.
+ Parameters:
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import AsyncMerge
@@ -467,8 +606,20 @@ async def meta_post_retrieve(self) -> MetaResponse:
urllib.parse.urljoin(
f"{self._client_wrapper.get_base_url()}/", "api/accounting/v1/journal-entries/meta/post"
),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ request_options.get("additional_query_parameters") if request_options is not None else None
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(MetaResponse, _response.json()) # type: ignore
diff --git a/src/merge/resources/accounting/resources/link_token/client.py b/src/merge/resources/accounting/resources/link_token/client.py
index 093c787f..771cc60f 100644
--- a/src/merge/resources/accounting/resources/link_token/client.py
+++ b/src/merge/resources/accounting/resources/link_token/client.py
@@ -7,6 +7,8 @@
from .....core.api_error import ApiError
from .....core.client_wrapper import AsyncClientWrapper, SyncClientWrapper
from .....core.jsonable_encoder import jsonable_encoder
+from .....core.remove_none_from_dict import remove_none_from_dict
+from .....core.request_options import RequestOptions
from ...types.categories_enum import CategoriesEnum
from ...types.common_model_scopes_body_request import CommonModelScopesBodyRequest
from ...types.link_token import LinkToken
@@ -35,6 +37,7 @@ def create(
link_expiry_mins: typing.Optional[int] = OMIT,
should_create_magic_link_url: typing.Optional[bool] = OMIT,
common_models: typing.Optional[typing.List[CommonModelScopesBodyRequest]] = OMIT,
+ request_options: typing.Optional[RequestOptions] = None,
) -> LinkToken:
"""
Creates a link token to be used when linking a new end user.
@@ -55,6 +58,21 @@ def create(
- should_create_magic_link_url: typing.Optional[bool]. Whether to generate a Magic Link URL. Defaults to false. For more information on Magic Link, see https://merge.dev/blog/integrations-fast-say-hello-to-magic-link.
- common_models: typing.Optional[typing.List[CommonModelScopesBodyRequest]]. An array of objects to specify the models and fields that will be disabled for a given Linked Account. Each object uses model_id, enabled_actions, and disabled_fields to specify the model, method, and fields that are scoped for a given Linked Account.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
+ ---
+ from merge.client import Merge
+
+ client = Merge(
+ account_token="YOUR_ACCOUNT_TOKEN",
+ api_key="YOUR_API_KEY",
+ )
+ client.accounting.link_token.create(
+ end_user_email_address="string",
+ end_user_organization_name="string",
+ end_user_origin_id="string",
+ categories=[],
+ )
"""
_request: typing.Dict[str, typing.Any] = {
"end_user_email_address": end_user_email_address,
@@ -73,9 +91,26 @@ def create(
_response = self._client_wrapper.httpx_client.request(
"POST",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/accounting/v1/link-token"),
- json=jsonable_encoder(_request),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ request_options.get("additional_query_parameters") if request_options is not None else None
+ ),
+ json=jsonable_encoder(_request)
+ if request_options is None or request_options.get("additional_body_parameters") is None
+ else {
+ **jsonable_encoder(_request),
+ **(jsonable_encoder(remove_none_from_dict(request_options.get("additional_body_parameters", {})))),
+ },
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(LinkToken, _response.json()) # type: ignore
@@ -101,6 +136,7 @@ async def create(
link_expiry_mins: typing.Optional[int] = OMIT,
should_create_magic_link_url: typing.Optional[bool] = OMIT,
common_models: typing.Optional[typing.List[CommonModelScopesBodyRequest]] = OMIT,
+ request_options: typing.Optional[RequestOptions] = None,
) -> LinkToken:
"""
Creates a link token to be used when linking a new end user.
@@ -121,6 +157,21 @@ async def create(
- should_create_magic_link_url: typing.Optional[bool]. Whether to generate a Magic Link URL. Defaults to false. For more information on Magic Link, see https://merge.dev/blog/integrations-fast-say-hello-to-magic-link.
- common_models: typing.Optional[typing.List[CommonModelScopesBodyRequest]]. An array of objects to specify the models and fields that will be disabled for a given Linked Account. Each object uses model_id, enabled_actions, and disabled_fields to specify the model, method, and fields that are scoped for a given Linked Account.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
+ ---
+ from merge.client import AsyncMerge
+
+ client = AsyncMerge(
+ account_token="YOUR_ACCOUNT_TOKEN",
+ api_key="YOUR_API_KEY",
+ )
+ await client.accounting.link_token.create(
+ end_user_email_address="string",
+ end_user_organization_name="string",
+ end_user_origin_id="string",
+ categories=[],
+ )
"""
_request: typing.Dict[str, typing.Any] = {
"end_user_email_address": end_user_email_address,
@@ -139,9 +190,26 @@ async def create(
_response = await self._client_wrapper.httpx_client.request(
"POST",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/accounting/v1/link-token"),
- json=jsonable_encoder(_request),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ request_options.get("additional_query_parameters") if request_options is not None else None
+ ),
+ json=jsonable_encoder(_request)
+ if request_options is None or request_options.get("additional_body_parameters") is None
+ else {
+ **jsonable_encoder(_request),
+ **(jsonable_encoder(remove_none_from_dict(request_options.get("additional_body_parameters", {})))),
+ },
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(LinkToken, _response.json()) # type: ignore
diff --git a/src/merge/resources/accounting/resources/linked_accounts/client.py b/src/merge/resources/accounting/resources/linked_accounts/client.py
index d143ab4d..56923811 100644
--- a/src/merge/resources/accounting/resources/linked_accounts/client.py
+++ b/src/merge/resources/accounting/resources/linked_accounts/client.py
@@ -6,7 +6,9 @@
from .....core.api_error import ApiError
from .....core.client_wrapper import AsyncClientWrapper, SyncClientWrapper
+from .....core.jsonable_encoder import jsonable_encoder
from .....core.remove_none_from_dict import remove_none_from_dict
+from .....core.request_options import RequestOptions
from ...types.paginated_account_details_and_actions_list import PaginatedAccountDetailsAndActionsList
from .types.linked_accounts_list_request_category import LinkedAccountsListRequestCategory
@@ -36,6 +38,7 @@ def list(
is_test_account: typing.Optional[str] = None,
page_size: typing.Optional[int] = None,
status: typing.Optional[str] = None,
+ request_options: typing.Optional[RequestOptions] = None,
) -> PaginatedAccountDetailsAndActionsList:
"""
List linked accounts for your organization.
@@ -73,6 +76,8 @@ def list(
- page_size: typing.Optional[int]. Number of results to return per page.
- status: typing.Optional[str]. Filter by status. Options: `COMPLETE`, `INCOMPLETE`, `RELINK_NEEDED`
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import Merge
from merge.resources.accounting import LinkedAccountsListRequestCategory
@@ -88,25 +93,41 @@ def list(
_response = self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/accounting/v1/linked-accounts"),
- params=remove_none_from_dict(
- {
- "category": category,
- "cursor": cursor,
- "end_user_email_address": end_user_email_address,
- "end_user_organization_name": end_user_organization_name,
- "end_user_origin_id": end_user_origin_id,
- "end_user_origin_ids": end_user_origin_ids,
- "id": id,
- "ids": ids,
- "include_duplicates": include_duplicates,
- "integration_name": integration_name,
- "is_test_account": is_test_account,
- "page_size": page_size,
- "status": status,
- }
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "category": category,
+ "cursor": cursor,
+ "end_user_email_address": end_user_email_address,
+ "end_user_organization_name": end_user_organization_name,
+ "end_user_origin_id": end_user_origin_id,
+ "end_user_origin_ids": end_user_origin_ids,
+ "id": id,
+ "ids": ids,
+ "include_duplicates": include_duplicates,
+ "integration_name": integration_name,
+ "is_test_account": is_test_account,
+ "page_size": page_size,
+ "status": status,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(PaginatedAccountDetailsAndActionsList, _response.json()) # type: ignore
@@ -137,6 +158,7 @@ async def list(
is_test_account: typing.Optional[str] = None,
page_size: typing.Optional[int] = None,
status: typing.Optional[str] = None,
+ request_options: typing.Optional[RequestOptions] = None,
) -> PaginatedAccountDetailsAndActionsList:
"""
List linked accounts for your organization.
@@ -174,6 +196,8 @@ async def list(
- page_size: typing.Optional[int]. Number of results to return per page.
- status: typing.Optional[str]. Filter by status. Options: `COMPLETE`, `INCOMPLETE`, `RELINK_NEEDED`
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import AsyncMerge
from merge.resources.accounting import LinkedAccountsListRequestCategory
@@ -189,25 +213,41 @@ async def list(
_response = await self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/accounting/v1/linked-accounts"),
- params=remove_none_from_dict(
- {
- "category": category,
- "cursor": cursor,
- "end_user_email_address": end_user_email_address,
- "end_user_organization_name": end_user_organization_name,
- "end_user_origin_id": end_user_origin_id,
- "end_user_origin_ids": end_user_origin_ids,
- "id": id,
- "ids": ids,
- "include_duplicates": include_duplicates,
- "integration_name": integration_name,
- "is_test_account": is_test_account,
- "page_size": page_size,
- "status": status,
- }
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "category": category,
+ "cursor": cursor,
+ "end_user_email_address": end_user_email_address,
+ "end_user_organization_name": end_user_organization_name,
+ "end_user_origin_id": end_user_origin_id,
+ "end_user_origin_ids": end_user_origin_ids,
+ "id": id,
+ "ids": ids,
+ "include_duplicates": include_duplicates,
+ "integration_name": integration_name,
+ "is_test_account": is_test_account,
+ "page_size": page_size,
+ "status": status,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(PaginatedAccountDetailsAndActionsList, _response.json()) # type: ignore
diff --git a/src/merge/resources/accounting/resources/passthrough/client.py b/src/merge/resources/accounting/resources/passthrough/client.py
index 416e937b..f1411d18 100644
--- a/src/merge/resources/accounting/resources/passthrough/client.py
+++ b/src/merge/resources/accounting/resources/passthrough/client.py
@@ -7,6 +7,8 @@
from .....core.api_error import ApiError
from .....core.client_wrapper import AsyncClientWrapper, SyncClientWrapper
from .....core.jsonable_encoder import jsonable_encoder
+from .....core.remove_none_from_dict import remove_none_from_dict
+from .....core.request_options import RequestOptions
from ...types.data_passthrough_request import DataPassthroughRequest
from ...types.remote_response import RemoteResponse
@@ -23,19 +25,60 @@ class PassthroughClient:
def __init__(self, *, client_wrapper: SyncClientWrapper):
self._client_wrapper = client_wrapper
- def create(self, *, request: DataPassthroughRequest) -> RemoteResponse:
+ def create(
+ self, *, request: DataPassthroughRequest, request_options: typing.Optional[RequestOptions] = None
+ ) -> RemoteResponse:
"""
Pull data from an endpoint not currently supported by Merge.
Parameters:
- request: DataPassthroughRequest.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
+ ---
+ from merge.client import Merge
+ from merge.resources.accounting import (
+ DataPassthroughRequest,
+ MethodEnum,
+ RequestFormatEnum,
+ )
+
+ client = Merge(
+ account_token="YOUR_ACCOUNT_TOKEN",
+ api_key="YOUR_API_KEY",
+ )
+ client.accounting.passthrough.create(
+ request=DataPassthroughRequest(
+ method=MethodEnum.GET,
+ path="/scooters",
+ data='{"company": "Lime", "model": "Gen 2.5"}',
+ request_format=RequestFormatEnum.JSON,
+ ),
+ )
"""
_response = self._client_wrapper.httpx_client.request(
"POST",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/accounting/v1/passthrough"),
- json=jsonable_encoder(request),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ request_options.get("additional_query_parameters") if request_options is not None else None
+ ),
+ json=jsonable_encoder(request)
+ if request_options is None or request_options.get("additional_body_parameters") is None
+ else {
+ **jsonable_encoder(request),
+ **(jsonable_encoder(remove_none_from_dict(request_options.get("additional_body_parameters", {})))),
+ },
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(RemoteResponse, _response.json()) # type: ignore
@@ -50,19 +93,60 @@ class AsyncPassthroughClient:
def __init__(self, *, client_wrapper: AsyncClientWrapper):
self._client_wrapper = client_wrapper
- async def create(self, *, request: DataPassthroughRequest) -> RemoteResponse:
+ async def create(
+ self, *, request: DataPassthroughRequest, request_options: typing.Optional[RequestOptions] = None
+ ) -> RemoteResponse:
"""
Pull data from an endpoint not currently supported by Merge.
Parameters:
- request: DataPassthroughRequest.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
+ ---
+ from merge.client import AsyncMerge
+ from merge.resources.accounting import (
+ DataPassthroughRequest,
+ MethodEnum,
+ RequestFormatEnum,
+ )
+
+ client = AsyncMerge(
+ account_token="YOUR_ACCOUNT_TOKEN",
+ api_key="YOUR_API_KEY",
+ )
+ await client.accounting.passthrough.create(
+ request=DataPassthroughRequest(
+ method=MethodEnum.GET,
+ path="/scooters",
+ data='{"company": "Lime", "model": "Gen 2.5"}',
+ request_format=RequestFormatEnum.JSON,
+ ),
+ )
"""
_response = await self._client_wrapper.httpx_client.request(
"POST",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/accounting/v1/passthrough"),
- json=jsonable_encoder(request),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ request_options.get("additional_query_parameters") if request_options is not None else None
+ ),
+ json=jsonable_encoder(request)
+ if request_options is None or request_options.get("additional_body_parameters") is None
+ else {
+ **jsonable_encoder(request),
+ **(jsonable_encoder(remove_none_from_dict(request_options.get("additional_body_parameters", {})))),
+ },
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(RemoteResponse, _response.json()) # type: ignore
diff --git a/src/merge/resources/accounting/resources/payments/client.py b/src/merge/resources/accounting/resources/payments/client.py
index 812a659d..6745e49f 100644
--- a/src/merge/resources/accounting/resources/payments/client.py
+++ b/src/merge/resources/accounting/resources/payments/client.py
@@ -10,6 +10,7 @@
from .....core.datetime_utils import serialize_datetime
from .....core.jsonable_encoder import jsonable_encoder
from .....core.remove_none_from_dict import remove_none_from_dict
+from .....core.request_options import RequestOptions
from ...types.meta_response import MetaResponse
from ...types.paginated_payment_list import PaginatedPaymentList
from ...types.payment import Payment
@@ -49,6 +50,7 @@ def list(
remote_id: typing.Optional[str] = None,
transaction_date_after: typing.Optional[dt.datetime] = None,
transaction_date_before: typing.Optional[dt.datetime] = None,
+ request_options: typing.Optional[RequestOptions] = None,
) -> PaginatedPaymentList:
"""
Returns a list of `Payment` objects.
@@ -83,6 +85,8 @@ def list(
- transaction_date_after: typing.Optional[dt.datetime]. If provided, will only return objects created after this datetime.
- transaction_date_before: typing.Optional[dt.datetime]. If provided, will only return objects created before this datetime.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import Merge
from merge.resources.accounting import PaymentsListRequestExpand
@@ -98,31 +102,47 @@ def list(
_response = self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/accounting/v1/payments"),
- params=remove_none_from_dict(
- {
- "account_id": account_id,
- "company_id": company_id,
- "contact_id": contact_id,
- "created_after": serialize_datetime(created_after) if created_after is not None else None,
- "created_before": serialize_datetime(created_before) if created_before is not None else None,
- "cursor": cursor,
- "expand": expand,
- "include_deleted_data": include_deleted_data,
- "include_remote_data": include_remote_data,
- "modified_after": serialize_datetime(modified_after) if modified_after is not None else None,
- "modified_before": serialize_datetime(modified_before) if modified_before is not None else None,
- "page_size": page_size,
- "remote_id": remote_id,
- "transaction_date_after": serialize_datetime(transaction_date_after)
- if transaction_date_after is not None
- else None,
- "transaction_date_before": serialize_datetime(transaction_date_before)
- if transaction_date_before is not None
- else None,
- }
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "account_id": account_id,
+ "company_id": company_id,
+ "contact_id": contact_id,
+ "created_after": serialize_datetime(created_after) if created_after is not None else None,
+ "created_before": serialize_datetime(created_before) if created_before is not None else None,
+ "cursor": cursor,
+ "expand": expand,
+ "include_deleted_data": include_deleted_data,
+ "include_remote_data": include_remote_data,
+ "modified_after": serialize_datetime(modified_after) if modified_after is not None else None,
+ "modified_before": serialize_datetime(modified_before) if modified_before is not None else None,
+ "page_size": page_size,
+ "remote_id": remote_id,
+ "transaction_date_after": serialize_datetime(transaction_date_after)
+ if transaction_date_after is not None
+ else None,
+ "transaction_date_before": serialize_datetime(transaction_date_before)
+ if transaction_date_before is not None
+ else None,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(PaginatedPaymentList, _response.json()) # type: ignore
@@ -138,6 +158,7 @@ def create(
is_debug_mode: typing.Optional[bool] = None,
run_async: typing.Optional[bool] = None,
model: PaymentRequest,
+ request_options: typing.Optional[RequestOptions] = None,
) -> PaymentResponse:
"""
Creates a `Payment` object with the given values.
@@ -148,6 +169,8 @@ def create(
- run_async: typing.Optional[bool]. Whether or not third-party updates should be run asynchronously.
- model: PaymentRequest.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
import datetime
@@ -171,10 +194,36 @@ def create(
_response = self._client_wrapper.httpx_client.request(
"POST",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/accounting/v1/payments"),
- params=remove_none_from_dict({"is_debug_mode": is_debug_mode, "run_async": run_async}),
- json=jsonable_encoder({"model": model}),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "is_debug_mode": is_debug_mode,
+ "run_async": run_async,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ json=jsonable_encoder({"model": model})
+ if request_options is None or request_options.get("additional_body_parameters") is None
+ else {
+ **jsonable_encoder({"model": model}),
+ **(jsonable_encoder(remove_none_from_dict(request_options.get("additional_body_parameters", {})))),
+ },
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(PaymentResponse, _response.json()) # type: ignore
@@ -190,6 +239,7 @@ def retrieve(
*,
expand: typing.Optional[PaymentsRetrieveRequestExpand] = None,
include_remote_data: typing.Optional[bool] = None,
+ request_options: typing.Optional[RequestOptions] = None,
) -> Payment:
"""
Returns a `Payment` object with the given `id`.
@@ -200,6 +250,8 @@ def retrieve(
- expand: typing.Optional[PaymentsRetrieveRequestExpand]. Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces.
- include_remote_data: typing.Optional[bool]. Whether to include the original data Merge fetched from the third-party to produce these models.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import Merge
from merge.resources.accounting import PaymentsRetrieveRequestExpand
@@ -209,16 +261,37 @@ def retrieve(
api_key="YOUR_API_KEY",
)
client.accounting.payments.retrieve(
- id="id",
+ id="string",
expand=PaymentsRetrieveRequestExpand.ACCOUNT,
)
"""
_response = self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", f"api/accounting/v1/payments/{id}"),
- params=remove_none_from_dict({"expand": expand, "include_remote_data": include_remote_data}),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "expand": expand,
+ "include_remote_data": include_remote_data,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(Payment, _response.json()) # type: ignore
@@ -228,10 +301,12 @@ def retrieve(
raise ApiError(status_code=_response.status_code, body=_response.text)
raise ApiError(status_code=_response.status_code, body=_response_json)
- def meta_post_retrieve(self) -> MetaResponse:
+ def meta_post_retrieve(self, *, request_options: typing.Optional[RequestOptions] = None) -> MetaResponse:
"""
Returns metadata for `Payment` POSTs.
+ Parameters:
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import Merge
@@ -244,8 +319,20 @@ def meta_post_retrieve(self) -> MetaResponse:
_response = self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/accounting/v1/payments/meta/post"),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ request_options.get("additional_query_parameters") if request_options is not None else None
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(MetaResponse, _response.json()) # type: ignore
@@ -278,6 +365,7 @@ async def list(
remote_id: typing.Optional[str] = None,
transaction_date_after: typing.Optional[dt.datetime] = None,
transaction_date_before: typing.Optional[dt.datetime] = None,
+ request_options: typing.Optional[RequestOptions] = None,
) -> PaginatedPaymentList:
"""
Returns a list of `Payment` objects.
@@ -312,6 +400,8 @@ async def list(
- transaction_date_after: typing.Optional[dt.datetime]. If provided, will only return objects created after this datetime.
- transaction_date_before: typing.Optional[dt.datetime]. If provided, will only return objects created before this datetime.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import AsyncMerge
from merge.resources.accounting import PaymentsListRequestExpand
@@ -327,31 +417,47 @@ async def list(
_response = await self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/accounting/v1/payments"),
- params=remove_none_from_dict(
- {
- "account_id": account_id,
- "company_id": company_id,
- "contact_id": contact_id,
- "created_after": serialize_datetime(created_after) if created_after is not None else None,
- "created_before": serialize_datetime(created_before) if created_before is not None else None,
- "cursor": cursor,
- "expand": expand,
- "include_deleted_data": include_deleted_data,
- "include_remote_data": include_remote_data,
- "modified_after": serialize_datetime(modified_after) if modified_after is not None else None,
- "modified_before": serialize_datetime(modified_before) if modified_before is not None else None,
- "page_size": page_size,
- "remote_id": remote_id,
- "transaction_date_after": serialize_datetime(transaction_date_after)
- if transaction_date_after is not None
- else None,
- "transaction_date_before": serialize_datetime(transaction_date_before)
- if transaction_date_before is not None
- else None,
- }
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "account_id": account_id,
+ "company_id": company_id,
+ "contact_id": contact_id,
+ "created_after": serialize_datetime(created_after) if created_after is not None else None,
+ "created_before": serialize_datetime(created_before) if created_before is not None else None,
+ "cursor": cursor,
+ "expand": expand,
+ "include_deleted_data": include_deleted_data,
+ "include_remote_data": include_remote_data,
+ "modified_after": serialize_datetime(modified_after) if modified_after is not None else None,
+ "modified_before": serialize_datetime(modified_before) if modified_before is not None else None,
+ "page_size": page_size,
+ "remote_id": remote_id,
+ "transaction_date_after": serialize_datetime(transaction_date_after)
+ if transaction_date_after is not None
+ else None,
+ "transaction_date_before": serialize_datetime(transaction_date_before)
+ if transaction_date_before is not None
+ else None,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(PaginatedPaymentList, _response.json()) # type: ignore
@@ -367,6 +473,7 @@ async def create(
is_debug_mode: typing.Optional[bool] = None,
run_async: typing.Optional[bool] = None,
model: PaymentRequest,
+ request_options: typing.Optional[RequestOptions] = None,
) -> PaymentResponse:
"""
Creates a `Payment` object with the given values.
@@ -377,6 +484,8 @@ async def create(
- run_async: typing.Optional[bool]. Whether or not third-party updates should be run asynchronously.
- model: PaymentRequest.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
import datetime
@@ -400,10 +509,36 @@ async def create(
_response = await self._client_wrapper.httpx_client.request(
"POST",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/accounting/v1/payments"),
- params=remove_none_from_dict({"is_debug_mode": is_debug_mode, "run_async": run_async}),
- json=jsonable_encoder({"model": model}),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "is_debug_mode": is_debug_mode,
+ "run_async": run_async,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ json=jsonable_encoder({"model": model})
+ if request_options is None or request_options.get("additional_body_parameters") is None
+ else {
+ **jsonable_encoder({"model": model}),
+ **(jsonable_encoder(remove_none_from_dict(request_options.get("additional_body_parameters", {})))),
+ },
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(PaymentResponse, _response.json()) # type: ignore
@@ -419,6 +554,7 @@ async def retrieve(
*,
expand: typing.Optional[PaymentsRetrieveRequestExpand] = None,
include_remote_data: typing.Optional[bool] = None,
+ request_options: typing.Optional[RequestOptions] = None,
) -> Payment:
"""
Returns a `Payment` object with the given `id`.
@@ -429,6 +565,8 @@ async def retrieve(
- expand: typing.Optional[PaymentsRetrieveRequestExpand]. Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces.
- include_remote_data: typing.Optional[bool]. Whether to include the original data Merge fetched from the third-party to produce these models.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import AsyncMerge
from merge.resources.accounting import PaymentsRetrieveRequestExpand
@@ -438,16 +576,37 @@ async def retrieve(
api_key="YOUR_API_KEY",
)
await client.accounting.payments.retrieve(
- id="id",
+ id="string",
expand=PaymentsRetrieveRequestExpand.ACCOUNT,
)
"""
_response = await self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", f"api/accounting/v1/payments/{id}"),
- params=remove_none_from_dict({"expand": expand, "include_remote_data": include_remote_data}),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "expand": expand,
+ "include_remote_data": include_remote_data,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(Payment, _response.json()) # type: ignore
@@ -457,10 +616,12 @@ async def retrieve(
raise ApiError(status_code=_response.status_code, body=_response.text)
raise ApiError(status_code=_response.status_code, body=_response_json)
- async def meta_post_retrieve(self) -> MetaResponse:
+ async def meta_post_retrieve(self, *, request_options: typing.Optional[RequestOptions] = None) -> MetaResponse:
"""
Returns metadata for `Payment` POSTs.
+ Parameters:
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import AsyncMerge
@@ -473,8 +634,20 @@ async def meta_post_retrieve(self) -> MetaResponse:
_response = await self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/accounting/v1/payments/meta/post"),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ request_options.get("additional_query_parameters") if request_options is not None else None
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(MetaResponse, _response.json()) # type: ignore
diff --git a/src/merge/resources/accounting/resources/phone_numbers/client.py b/src/merge/resources/accounting/resources/phone_numbers/client.py
index ca17ef2d..c6190503 100644
--- a/src/merge/resources/accounting/resources/phone_numbers/client.py
+++ b/src/merge/resources/accounting/resources/phone_numbers/client.py
@@ -6,7 +6,9 @@
from .....core.api_error import ApiError
from .....core.client_wrapper import AsyncClientWrapper, SyncClientWrapper
+from .....core.jsonable_encoder import jsonable_encoder
from .....core.remove_none_from_dict import remove_none_from_dict
+from .....core.request_options import RequestOptions
from ...types.accounting_phone_number import AccountingPhoneNumber
try:
@@ -19,7 +21,13 @@ class PhoneNumbersClient:
def __init__(self, *, client_wrapper: SyncClientWrapper):
self._client_wrapper = client_wrapper
- def retrieve(self, id: str, *, include_remote_data: typing.Optional[bool] = None) -> AccountingPhoneNumber:
+ def retrieve(
+ self,
+ id: str,
+ *,
+ include_remote_data: typing.Optional[bool] = None,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> AccountingPhoneNumber:
"""
Returns an `AccountingPhoneNumber` object with the given `id`.
@@ -27,6 +35,8 @@ def retrieve(self, id: str, *, include_remote_data: typing.Optional[bool] = None
- id: str.
- include_remote_data: typing.Optional[bool]. Whether to include the original data Merge fetched from the third-party to produce these models.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import Merge
@@ -35,15 +45,35 @@ def retrieve(self, id: str, *, include_remote_data: typing.Optional[bool] = None
api_key="YOUR_API_KEY",
)
client.accounting.phone_numbers.retrieve(
- id="id",
+ id="string",
)
"""
_response = self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", f"api/accounting/v1/phone-numbers/{id}"),
- params=remove_none_from_dict({"include_remote_data": include_remote_data}),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "include_remote_data": include_remote_data,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(AccountingPhoneNumber, _response.json()) # type: ignore
@@ -58,7 +88,13 @@ class AsyncPhoneNumbersClient:
def __init__(self, *, client_wrapper: AsyncClientWrapper):
self._client_wrapper = client_wrapper
- async def retrieve(self, id: str, *, include_remote_data: typing.Optional[bool] = None) -> AccountingPhoneNumber:
+ async def retrieve(
+ self,
+ id: str,
+ *,
+ include_remote_data: typing.Optional[bool] = None,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> AccountingPhoneNumber:
"""
Returns an `AccountingPhoneNumber` object with the given `id`.
@@ -66,6 +102,8 @@ async def retrieve(self, id: str, *, include_remote_data: typing.Optional[bool]
- id: str.
- include_remote_data: typing.Optional[bool]. Whether to include the original data Merge fetched from the third-party to produce these models.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import AsyncMerge
@@ -74,15 +112,35 @@ async def retrieve(self, id: str, *, include_remote_data: typing.Optional[bool]
api_key="YOUR_API_KEY",
)
await client.accounting.phone_numbers.retrieve(
- id="id",
+ id="string",
)
"""
_response = await self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", f"api/accounting/v1/phone-numbers/{id}"),
- params=remove_none_from_dict({"include_remote_data": include_remote_data}),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "include_remote_data": include_remote_data,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(AccountingPhoneNumber, _response.json()) # type: ignore
diff --git a/src/merge/resources/accounting/resources/purchase_orders/client.py b/src/merge/resources/accounting/resources/purchase_orders/client.py
index 2c5db908..57f3cbf5 100644
--- a/src/merge/resources/accounting/resources/purchase_orders/client.py
+++ b/src/merge/resources/accounting/resources/purchase_orders/client.py
@@ -5,13 +5,12 @@
import urllib.parse
from json.decoder import JSONDecodeError
-import typing_extensions
-
from .....core.api_error import ApiError
from .....core.client_wrapper import AsyncClientWrapper, SyncClientWrapper
from .....core.datetime_utils import serialize_datetime
from .....core.jsonable_encoder import jsonable_encoder
from .....core.remove_none_from_dict import remove_none_from_dict
+from .....core.request_options import RequestOptions
from ...types.meta_response import MetaResponse
from ...types.paginated_purchase_order_list import PaginatedPurchaseOrderList
from ...types.purchase_order import PurchaseOrder
@@ -48,9 +47,10 @@ def list(
modified_after: typing.Optional[dt.datetime] = None,
modified_before: typing.Optional[dt.datetime] = None,
page_size: typing.Optional[int] = None,
- remote_fields: typing.Optional[typing_extensions.Literal["status"]] = None,
+ remote_fields: typing.Optional[typing.Literal["status"]] = None,
remote_id: typing.Optional[str] = None,
- show_enum_origins: typing.Optional[typing_extensions.Literal["status"]] = None,
+ show_enum_origins: typing.Optional[typing.Literal["status"]] = None,
+ request_options: typing.Optional[RequestOptions] = None,
) -> PaginatedPurchaseOrderList:
"""
Returns a list of `PurchaseOrder` objects.
@@ -80,11 +80,13 @@ def list(
- page_size: typing.Optional[int]. Number of results to return per page.
- - remote_fields: typing.Optional[typing_extensions.Literal["status"]]. Deprecated. Use show_enum_origins.
+ - remote_fields: typing.Optional[typing.Literal["status"]]. Deprecated. Use show_enum_origins.
- remote_id: typing.Optional[str]. The API provider's ID for the given object.
- - show_enum_origins: typing.Optional[typing_extensions.Literal["status"]]. Which fields should be returned in non-normalized form.
+ - show_enum_origins: typing.Optional[typing.Literal["status"]]. Which fields should be returned in non-normalized form.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import Merge
from merge.resources.accounting import PurchaseOrdersListRequestExpand
@@ -102,29 +104,47 @@ def list(
_response = self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/accounting/v1/purchase-orders"),
- params=remove_none_from_dict(
- {
- "company_id": company_id,
- "created_after": serialize_datetime(created_after) if created_after is not None else None,
- "created_before": serialize_datetime(created_before) if created_before is not None else None,
- "cursor": cursor,
- "expand": expand,
- "include_deleted_data": include_deleted_data,
- "include_remote_data": include_remote_data,
- "issue_date_after": serialize_datetime(issue_date_after) if issue_date_after is not None else None,
- "issue_date_before": serialize_datetime(issue_date_before)
- if issue_date_before is not None
- else None,
- "modified_after": serialize_datetime(modified_after) if modified_after is not None else None,
- "modified_before": serialize_datetime(modified_before) if modified_before is not None else None,
- "page_size": page_size,
- "remote_fields": remote_fields,
- "remote_id": remote_id,
- "show_enum_origins": show_enum_origins,
- }
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "company_id": company_id,
+ "created_after": serialize_datetime(created_after) if created_after is not None else None,
+ "created_before": serialize_datetime(created_before) if created_before is not None else None,
+ "cursor": cursor,
+ "expand": expand,
+ "include_deleted_data": include_deleted_data,
+ "include_remote_data": include_remote_data,
+ "issue_date_after": serialize_datetime(issue_date_after)
+ if issue_date_after is not None
+ else None,
+ "issue_date_before": serialize_datetime(issue_date_before)
+ if issue_date_before is not None
+ else None,
+ "modified_after": serialize_datetime(modified_after) if modified_after is not None else None,
+ "modified_before": serialize_datetime(modified_before) if modified_before is not None else None,
+ "page_size": page_size,
+ "remote_fields": remote_fields,
+ "remote_id": remote_id,
+ "show_enum_origins": show_enum_origins,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(PaginatedPurchaseOrderList, _response.json()) # type: ignore
@@ -140,6 +160,7 @@ def create(
is_debug_mode: typing.Optional[bool] = None,
run_async: typing.Optional[bool] = None,
model: PurchaseOrderRequest,
+ request_options: typing.Optional[RequestOptions] = None,
) -> PurchaseOrderResponse:
"""
Creates a `PurchaseOrder` object with the given values.
@@ -150,41 +171,53 @@ def create(
- run_async: typing.Optional[bool]. Whether or not third-party updates should be run asynchronously.
- model: PurchaseOrderRequest.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import Merge
- from merge.resources.accounting import (
- PurchaseOrderLineItemRequest,
- PurchaseOrderRequest,
- )
+ from merge.resources.accounting import PurchaseOrderRequest
client = Merge(
account_token="YOUR_ACCOUNT_TOKEN",
api_key="YOUR_API_KEY",
)
client.accounting.purchase_orders.create(
- model=PurchaseOrderRequest(
- line_items=[
- PurchaseOrderLineItemRequest(
- remote_id="121222",
- description="Pickleball paddles",
- unit_price=25.0,
- quantity=10.0,
- tracking_category="f1214c24-2702-4617-b74b-3ddecfc0d384",
- tracking_categories=[],
- exchange_rate="2.9",
- company="595c8f97-2ac4-45b7-b000-41bdf43240b5",
- )
- ],
- ),
+ model=PurchaseOrderRequest(),
)
"""
_response = self._client_wrapper.httpx_client.request(
"POST",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/accounting/v1/purchase-orders"),
- params=remove_none_from_dict({"is_debug_mode": is_debug_mode, "run_async": run_async}),
- json=jsonable_encoder({"model": model}),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "is_debug_mode": is_debug_mode,
+ "run_async": run_async,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ json=jsonable_encoder({"model": model})
+ if request_options is None or request_options.get("additional_body_parameters") is None
+ else {
+ **jsonable_encoder({"model": model}),
+ **(jsonable_encoder(remove_none_from_dict(request_options.get("additional_body_parameters", {})))),
+ },
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(PurchaseOrderResponse, _response.json()) # type: ignore
@@ -200,8 +233,9 @@ def retrieve(
*,
expand: typing.Optional[PurchaseOrdersRetrieveRequestExpand] = None,
include_remote_data: typing.Optional[bool] = None,
- remote_fields: typing.Optional[typing_extensions.Literal["status"]] = None,
- show_enum_origins: typing.Optional[typing_extensions.Literal["status"]] = None,
+ remote_fields: typing.Optional[typing.Literal["status"]] = None,
+ show_enum_origins: typing.Optional[typing.Literal["status"]] = None,
+ request_options: typing.Optional[RequestOptions] = None,
) -> PurchaseOrder:
"""
Returns a `PurchaseOrder` object with the given `id`.
@@ -213,9 +247,11 @@ def retrieve(
- include_remote_data: typing.Optional[bool]. Whether to include the original data Merge fetched from the third-party to produce these models.
- - remote_fields: typing.Optional[typing_extensions.Literal["status"]]. Deprecated. Use show_enum_origins.
+ - remote_fields: typing.Optional[typing.Literal["status"]]. Deprecated. Use show_enum_origins.
+
+ - show_enum_origins: typing.Optional[typing.Literal["status"]]. Which fields should be returned in non-normalized form.
- - show_enum_origins: typing.Optional[typing_extensions.Literal["status"]]. Which fields should be returned in non-normalized form.
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import Merge
from merge.resources.accounting import PurchaseOrdersRetrieveRequestExpand
@@ -225,7 +261,7 @@ def retrieve(
api_key="YOUR_API_KEY",
)
client.accounting.purchase_orders.retrieve(
- id="id",
+ id="string",
expand=PurchaseOrdersRetrieveRequestExpand.ACCOUNTING_PERIOD,
remote_fields="status",
show_enum_origins="status",
@@ -234,16 +270,32 @@ def retrieve(
_response = self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", f"api/accounting/v1/purchase-orders/{id}"),
- params=remove_none_from_dict(
- {
- "expand": expand,
- "include_remote_data": include_remote_data,
- "remote_fields": remote_fields,
- "show_enum_origins": show_enum_origins,
- }
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "expand": expand,
+ "include_remote_data": include_remote_data,
+ "remote_fields": remote_fields,
+ "show_enum_origins": show_enum_origins,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(PurchaseOrder, _response.json()) # type: ignore
@@ -253,10 +305,12 @@ def retrieve(
raise ApiError(status_code=_response.status_code, body=_response.text)
raise ApiError(status_code=_response.status_code, body=_response_json)
- def meta_post_retrieve(self) -> MetaResponse:
+ def meta_post_retrieve(self, *, request_options: typing.Optional[RequestOptions] = None) -> MetaResponse:
"""
Returns metadata for `PurchaseOrder` POSTs.
+ Parameters:
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import Merge
@@ -271,8 +325,20 @@ def meta_post_retrieve(self) -> MetaResponse:
urllib.parse.urljoin(
f"{self._client_wrapper.get_base_url()}/", "api/accounting/v1/purchase-orders/meta/post"
),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ request_options.get("additional_query_parameters") if request_options is not None else None
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(MetaResponse, _response.json()) # type: ignore
@@ -302,9 +368,10 @@ async def list(
modified_after: typing.Optional[dt.datetime] = None,
modified_before: typing.Optional[dt.datetime] = None,
page_size: typing.Optional[int] = None,
- remote_fields: typing.Optional[typing_extensions.Literal["status"]] = None,
+ remote_fields: typing.Optional[typing.Literal["status"]] = None,
remote_id: typing.Optional[str] = None,
- show_enum_origins: typing.Optional[typing_extensions.Literal["status"]] = None,
+ show_enum_origins: typing.Optional[typing.Literal["status"]] = None,
+ request_options: typing.Optional[RequestOptions] = None,
) -> PaginatedPurchaseOrderList:
"""
Returns a list of `PurchaseOrder` objects.
@@ -334,11 +401,13 @@ async def list(
- page_size: typing.Optional[int]. Number of results to return per page.
- - remote_fields: typing.Optional[typing_extensions.Literal["status"]]. Deprecated. Use show_enum_origins.
+ - remote_fields: typing.Optional[typing.Literal["status"]]. Deprecated. Use show_enum_origins.
- remote_id: typing.Optional[str]. The API provider's ID for the given object.
- - show_enum_origins: typing.Optional[typing_extensions.Literal["status"]]. Which fields should be returned in non-normalized form.
+ - show_enum_origins: typing.Optional[typing.Literal["status"]]. Which fields should be returned in non-normalized form.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import AsyncMerge
from merge.resources.accounting import PurchaseOrdersListRequestExpand
@@ -356,29 +425,47 @@ async def list(
_response = await self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/accounting/v1/purchase-orders"),
- params=remove_none_from_dict(
- {
- "company_id": company_id,
- "created_after": serialize_datetime(created_after) if created_after is not None else None,
- "created_before": serialize_datetime(created_before) if created_before is not None else None,
- "cursor": cursor,
- "expand": expand,
- "include_deleted_data": include_deleted_data,
- "include_remote_data": include_remote_data,
- "issue_date_after": serialize_datetime(issue_date_after) if issue_date_after is not None else None,
- "issue_date_before": serialize_datetime(issue_date_before)
- if issue_date_before is not None
- else None,
- "modified_after": serialize_datetime(modified_after) if modified_after is not None else None,
- "modified_before": serialize_datetime(modified_before) if modified_before is not None else None,
- "page_size": page_size,
- "remote_fields": remote_fields,
- "remote_id": remote_id,
- "show_enum_origins": show_enum_origins,
- }
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "company_id": company_id,
+ "created_after": serialize_datetime(created_after) if created_after is not None else None,
+ "created_before": serialize_datetime(created_before) if created_before is not None else None,
+ "cursor": cursor,
+ "expand": expand,
+ "include_deleted_data": include_deleted_data,
+ "include_remote_data": include_remote_data,
+ "issue_date_after": serialize_datetime(issue_date_after)
+ if issue_date_after is not None
+ else None,
+ "issue_date_before": serialize_datetime(issue_date_before)
+ if issue_date_before is not None
+ else None,
+ "modified_after": serialize_datetime(modified_after) if modified_after is not None else None,
+ "modified_before": serialize_datetime(modified_before) if modified_before is not None else None,
+ "page_size": page_size,
+ "remote_fields": remote_fields,
+ "remote_id": remote_id,
+ "show_enum_origins": show_enum_origins,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(PaginatedPurchaseOrderList, _response.json()) # type: ignore
@@ -394,6 +481,7 @@ async def create(
is_debug_mode: typing.Optional[bool] = None,
run_async: typing.Optional[bool] = None,
model: PurchaseOrderRequest,
+ request_options: typing.Optional[RequestOptions] = None,
) -> PurchaseOrderResponse:
"""
Creates a `PurchaseOrder` object with the given values.
@@ -404,41 +492,53 @@ async def create(
- run_async: typing.Optional[bool]. Whether or not third-party updates should be run asynchronously.
- model: PurchaseOrderRequest.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import AsyncMerge
- from merge.resources.accounting import (
- PurchaseOrderLineItemRequest,
- PurchaseOrderRequest,
- )
+ from merge.resources.accounting import PurchaseOrderRequest
client = AsyncMerge(
account_token="YOUR_ACCOUNT_TOKEN",
api_key="YOUR_API_KEY",
)
await client.accounting.purchase_orders.create(
- model=PurchaseOrderRequest(
- line_items=[
- PurchaseOrderLineItemRequest(
- remote_id="121222",
- description="Pickleball paddles",
- unit_price=25.0,
- quantity=10.0,
- tracking_category="f1214c24-2702-4617-b74b-3ddecfc0d384",
- tracking_categories=[],
- exchange_rate="2.9",
- company="595c8f97-2ac4-45b7-b000-41bdf43240b5",
- )
- ],
- ),
+ model=PurchaseOrderRequest(),
)
"""
_response = await self._client_wrapper.httpx_client.request(
"POST",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/accounting/v1/purchase-orders"),
- params=remove_none_from_dict({"is_debug_mode": is_debug_mode, "run_async": run_async}),
- json=jsonable_encoder({"model": model}),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "is_debug_mode": is_debug_mode,
+ "run_async": run_async,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ json=jsonable_encoder({"model": model})
+ if request_options is None or request_options.get("additional_body_parameters") is None
+ else {
+ **jsonable_encoder({"model": model}),
+ **(jsonable_encoder(remove_none_from_dict(request_options.get("additional_body_parameters", {})))),
+ },
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(PurchaseOrderResponse, _response.json()) # type: ignore
@@ -454,8 +554,9 @@ async def retrieve(
*,
expand: typing.Optional[PurchaseOrdersRetrieveRequestExpand] = None,
include_remote_data: typing.Optional[bool] = None,
- remote_fields: typing.Optional[typing_extensions.Literal["status"]] = None,
- show_enum_origins: typing.Optional[typing_extensions.Literal["status"]] = None,
+ remote_fields: typing.Optional[typing.Literal["status"]] = None,
+ show_enum_origins: typing.Optional[typing.Literal["status"]] = None,
+ request_options: typing.Optional[RequestOptions] = None,
) -> PurchaseOrder:
"""
Returns a `PurchaseOrder` object with the given `id`.
@@ -467,9 +568,11 @@ async def retrieve(
- include_remote_data: typing.Optional[bool]. Whether to include the original data Merge fetched from the third-party to produce these models.
- - remote_fields: typing.Optional[typing_extensions.Literal["status"]]. Deprecated. Use show_enum_origins.
+ - remote_fields: typing.Optional[typing.Literal["status"]]. Deprecated. Use show_enum_origins.
+
+ - show_enum_origins: typing.Optional[typing.Literal["status"]]. Which fields should be returned in non-normalized form.
- - show_enum_origins: typing.Optional[typing_extensions.Literal["status"]]. Which fields should be returned in non-normalized form.
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import AsyncMerge
from merge.resources.accounting import PurchaseOrdersRetrieveRequestExpand
@@ -479,7 +582,7 @@ async def retrieve(
api_key="YOUR_API_KEY",
)
await client.accounting.purchase_orders.retrieve(
- id="id",
+ id="string",
expand=PurchaseOrdersRetrieveRequestExpand.ACCOUNTING_PERIOD,
remote_fields="status",
show_enum_origins="status",
@@ -488,16 +591,32 @@ async def retrieve(
_response = await self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", f"api/accounting/v1/purchase-orders/{id}"),
- params=remove_none_from_dict(
- {
- "expand": expand,
- "include_remote_data": include_remote_data,
- "remote_fields": remote_fields,
- "show_enum_origins": show_enum_origins,
- }
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "expand": expand,
+ "include_remote_data": include_remote_data,
+ "remote_fields": remote_fields,
+ "show_enum_origins": show_enum_origins,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(PurchaseOrder, _response.json()) # type: ignore
@@ -507,10 +626,12 @@ async def retrieve(
raise ApiError(status_code=_response.status_code, body=_response.text)
raise ApiError(status_code=_response.status_code, body=_response_json)
- async def meta_post_retrieve(self) -> MetaResponse:
+ async def meta_post_retrieve(self, *, request_options: typing.Optional[RequestOptions] = None) -> MetaResponse:
"""
Returns metadata for `PurchaseOrder` POSTs.
+ Parameters:
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import AsyncMerge
@@ -525,8 +646,20 @@ async def meta_post_retrieve(self) -> MetaResponse:
urllib.parse.urljoin(
f"{self._client_wrapper.get_base_url()}/", "api/accounting/v1/purchase-orders/meta/post"
),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ request_options.get("additional_query_parameters") if request_options is not None else None
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(MetaResponse, _response.json()) # type: ignore
diff --git a/src/merge/resources/accounting/resources/regenerate_key/client.py b/src/merge/resources/accounting/resources/regenerate_key/client.py
index d77b8e35..b0226275 100644
--- a/src/merge/resources/accounting/resources/regenerate_key/client.py
+++ b/src/merge/resources/accounting/resources/regenerate_key/client.py
@@ -7,6 +7,8 @@
from .....core.api_error import ApiError
from .....core.client_wrapper import AsyncClientWrapper, SyncClientWrapper
from .....core.jsonable_encoder import jsonable_encoder
+from .....core.remove_none_from_dict import remove_none_from_dict
+from .....core.request_options import RequestOptions
from ...types.remote_key import RemoteKey
try:
@@ -22,12 +24,14 @@ class RegenerateKeyClient:
def __init__(self, *, client_wrapper: SyncClientWrapper):
self._client_wrapper = client_wrapper
- def create(self, *, name: str) -> RemoteKey:
+ def create(self, *, name: str, request_options: typing.Optional[RequestOptions] = None) -> RemoteKey:
"""
Exchange remote keys.
Parameters:
- name: str.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import Merge
@@ -42,9 +46,26 @@ def create(self, *, name: str) -> RemoteKey:
_response = self._client_wrapper.httpx_client.request(
"POST",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/accounting/v1/regenerate-key"),
- json=jsonable_encoder({"name": name}),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ request_options.get("additional_query_parameters") if request_options is not None else None
+ ),
+ json=jsonable_encoder({"name": name})
+ if request_options is None or request_options.get("additional_body_parameters") is None
+ else {
+ **jsonable_encoder({"name": name}),
+ **(jsonable_encoder(remove_none_from_dict(request_options.get("additional_body_parameters", {})))),
+ },
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(RemoteKey, _response.json()) # type: ignore
@@ -59,12 +80,14 @@ class AsyncRegenerateKeyClient:
def __init__(self, *, client_wrapper: AsyncClientWrapper):
self._client_wrapper = client_wrapper
- async def create(self, *, name: str) -> RemoteKey:
+ async def create(self, *, name: str, request_options: typing.Optional[RequestOptions] = None) -> RemoteKey:
"""
Exchange remote keys.
Parameters:
- name: str.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import AsyncMerge
@@ -79,9 +102,26 @@ async def create(self, *, name: str) -> RemoteKey:
_response = await self._client_wrapper.httpx_client.request(
"POST",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/accounting/v1/regenerate-key"),
- json=jsonable_encoder({"name": name}),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ request_options.get("additional_query_parameters") if request_options is not None else None
+ ),
+ json=jsonable_encoder({"name": name})
+ if request_options is None or request_options.get("additional_body_parameters") is None
+ else {
+ **jsonable_encoder({"name": name}),
+ **(jsonable_encoder(remove_none_from_dict(request_options.get("additional_body_parameters", {})))),
+ },
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(RemoteKey, _response.json()) # type: ignore
diff --git a/src/merge/resources/accounting/resources/selective_sync/client.py b/src/merge/resources/accounting/resources/selective_sync/client.py
index 267b7b1d..c483af25 100644
--- a/src/merge/resources/accounting/resources/selective_sync/client.py
+++ b/src/merge/resources/accounting/resources/selective_sync/client.py
@@ -8,6 +8,7 @@
from .....core.client_wrapper import AsyncClientWrapper, SyncClientWrapper
from .....core.jsonable_encoder import jsonable_encoder
from .....core.remove_none_from_dict import remove_none_from_dict
+from .....core.request_options import RequestOptions
from ...types.linked_account_selective_sync_configuration import LinkedAccountSelectiveSyncConfiguration
from ...types.linked_account_selective_sync_configuration_request import LinkedAccountSelectiveSyncConfigurationRequest
from ...types.paginated_condition_schema_list import PaginatedConditionSchemaList
@@ -25,10 +26,14 @@ class SelectiveSyncClient:
def __init__(self, *, client_wrapper: SyncClientWrapper):
self._client_wrapper = client_wrapper
- def configurations_list(self) -> typing.List[LinkedAccountSelectiveSyncConfiguration]:
+ def configurations_list(
+ self, *, request_options: typing.Optional[RequestOptions] = None
+ ) -> typing.List[LinkedAccountSelectiveSyncConfiguration]:
"""
Get a linked account's selective syncs.
+ Parameters:
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import Merge
@@ -43,8 +48,20 @@ def configurations_list(self) -> typing.List[LinkedAccountSelectiveSyncConfigura
urllib.parse.urljoin(
f"{self._client_wrapper.get_base_url()}/", "api/accounting/v1/selective-sync/configurations"
),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ request_options.get("additional_query_parameters") if request_options is not None else None
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(typing.List[LinkedAccountSelectiveSyncConfiguration], _response.json()) # type: ignore
@@ -55,29 +72,27 @@ def configurations_list(self) -> typing.List[LinkedAccountSelectiveSyncConfigura
raise ApiError(status_code=_response.status_code, body=_response_json)
def configurations_update(
- self, *, sync_configurations: typing.List[LinkedAccountSelectiveSyncConfigurationRequest]
+ self,
+ *,
+ sync_configurations: typing.List[LinkedAccountSelectiveSyncConfigurationRequest],
+ request_options: typing.Optional[RequestOptions] = None,
) -> typing.List[LinkedAccountSelectiveSyncConfiguration]:
"""
Replace a linked account's selective syncs.
Parameters:
- sync_configurations: typing.List[LinkedAccountSelectiveSyncConfigurationRequest]. The selective syncs associated with a linked account.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import Merge
- from merge.resources.accounting import (
- LinkedAccountSelectiveSyncConfigurationRequest,
- )
client = Merge(
account_token="YOUR_ACCOUNT_TOKEN",
api_key="YOUR_API_KEY",
)
client.accounting.selective_sync.configurations_update(
- sync_configurations=[
- LinkedAccountSelectiveSyncConfigurationRequest(
- linked_account_conditions=[],
- )
- ],
+ sync_configurations=[],
)
"""
_response = self._client_wrapper.httpx_client.request(
@@ -85,9 +100,26 @@ def configurations_update(
urllib.parse.urljoin(
f"{self._client_wrapper.get_base_url()}/", "api/accounting/v1/selective-sync/configurations"
),
- json=jsonable_encoder({"sync_configurations": sync_configurations}),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ request_options.get("additional_query_parameters") if request_options is not None else None
+ ),
+ json=jsonable_encoder({"sync_configurations": sync_configurations})
+ if request_options is None or request_options.get("additional_body_parameters") is None
+ else {
+ **jsonable_encoder({"sync_configurations": sync_configurations}),
+ **(jsonable_encoder(remove_none_from_dict(request_options.get("additional_body_parameters", {})))),
+ },
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(typing.List[LinkedAccountSelectiveSyncConfiguration], _response.json()) # type: ignore
@@ -103,6 +135,7 @@ def meta_list(
common_model: typing.Optional[str] = None,
cursor: typing.Optional[str] = None,
page_size: typing.Optional[int] = None,
+ request_options: typing.Optional[RequestOptions] = None,
) -> PaginatedConditionSchemaList:
"""
Get metadata for the conditions available to a linked account.
@@ -113,6 +146,8 @@ def meta_list(
- cursor: typing.Optional[str]. The pagination cursor value.
- page_size: typing.Optional[int]. Number of results to return per page.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import Merge
@@ -125,9 +160,31 @@ def meta_list(
_response = self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/accounting/v1/selective-sync/meta"),
- params=remove_none_from_dict({"common_model": common_model, "cursor": cursor, "page_size": page_size}),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "common_model": common_model,
+ "cursor": cursor,
+ "page_size": page_size,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(PaginatedConditionSchemaList, _response.json()) # type: ignore
@@ -142,10 +199,14 @@ class AsyncSelectiveSyncClient:
def __init__(self, *, client_wrapper: AsyncClientWrapper):
self._client_wrapper = client_wrapper
- async def configurations_list(self) -> typing.List[LinkedAccountSelectiveSyncConfiguration]:
+ async def configurations_list(
+ self, *, request_options: typing.Optional[RequestOptions] = None
+ ) -> typing.List[LinkedAccountSelectiveSyncConfiguration]:
"""
Get a linked account's selective syncs.
+ Parameters:
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import AsyncMerge
@@ -160,8 +221,20 @@ async def configurations_list(self) -> typing.List[LinkedAccountSelectiveSyncCon
urllib.parse.urljoin(
f"{self._client_wrapper.get_base_url()}/", "api/accounting/v1/selective-sync/configurations"
),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ request_options.get("additional_query_parameters") if request_options is not None else None
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(typing.List[LinkedAccountSelectiveSyncConfiguration], _response.json()) # type: ignore
@@ -172,29 +245,27 @@ async def configurations_list(self) -> typing.List[LinkedAccountSelectiveSyncCon
raise ApiError(status_code=_response.status_code, body=_response_json)
async def configurations_update(
- self, *, sync_configurations: typing.List[LinkedAccountSelectiveSyncConfigurationRequest]
+ self,
+ *,
+ sync_configurations: typing.List[LinkedAccountSelectiveSyncConfigurationRequest],
+ request_options: typing.Optional[RequestOptions] = None,
) -> typing.List[LinkedAccountSelectiveSyncConfiguration]:
"""
Replace a linked account's selective syncs.
Parameters:
- sync_configurations: typing.List[LinkedAccountSelectiveSyncConfigurationRequest]. The selective syncs associated with a linked account.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import AsyncMerge
- from merge.resources.accounting import (
- LinkedAccountSelectiveSyncConfigurationRequest,
- )
client = AsyncMerge(
account_token="YOUR_ACCOUNT_TOKEN",
api_key="YOUR_API_KEY",
)
await client.accounting.selective_sync.configurations_update(
- sync_configurations=[
- LinkedAccountSelectiveSyncConfigurationRequest(
- linked_account_conditions=[],
- )
- ],
+ sync_configurations=[],
)
"""
_response = await self._client_wrapper.httpx_client.request(
@@ -202,9 +273,26 @@ async def configurations_update(
urllib.parse.urljoin(
f"{self._client_wrapper.get_base_url()}/", "api/accounting/v1/selective-sync/configurations"
),
- json=jsonable_encoder({"sync_configurations": sync_configurations}),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ request_options.get("additional_query_parameters") if request_options is not None else None
+ ),
+ json=jsonable_encoder({"sync_configurations": sync_configurations})
+ if request_options is None or request_options.get("additional_body_parameters") is None
+ else {
+ **jsonable_encoder({"sync_configurations": sync_configurations}),
+ **(jsonable_encoder(remove_none_from_dict(request_options.get("additional_body_parameters", {})))),
+ },
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(typing.List[LinkedAccountSelectiveSyncConfiguration], _response.json()) # type: ignore
@@ -220,6 +308,7 @@ async def meta_list(
common_model: typing.Optional[str] = None,
cursor: typing.Optional[str] = None,
page_size: typing.Optional[int] = None,
+ request_options: typing.Optional[RequestOptions] = None,
) -> PaginatedConditionSchemaList:
"""
Get metadata for the conditions available to a linked account.
@@ -230,6 +319,8 @@ async def meta_list(
- cursor: typing.Optional[str]. The pagination cursor value.
- page_size: typing.Optional[int]. Number of results to return per page.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import AsyncMerge
@@ -242,9 +333,31 @@ async def meta_list(
_response = await self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/accounting/v1/selective-sync/meta"),
- params=remove_none_from_dict({"common_model": common_model, "cursor": cursor, "page_size": page_size}),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "common_model": common_model,
+ "cursor": cursor,
+ "page_size": page_size,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(PaginatedConditionSchemaList, _response.json()) # type: ignore
diff --git a/src/merge/resources/accounting/resources/sync_status/client.py b/src/merge/resources/accounting/resources/sync_status/client.py
index 96ec3257..662c21b6 100644
--- a/src/merge/resources/accounting/resources/sync_status/client.py
+++ b/src/merge/resources/accounting/resources/sync_status/client.py
@@ -6,7 +6,9 @@
from .....core.api_error import ApiError
from .....core.client_wrapper import AsyncClientWrapper, SyncClientWrapper
+from .....core.jsonable_encoder import jsonable_encoder
from .....core.remove_none_from_dict import remove_none_from_dict
+from .....core.request_options import RequestOptions
from ...types.paginated_sync_status_list import PaginatedSyncStatusList
try:
@@ -20,7 +22,11 @@ def __init__(self, *, client_wrapper: SyncClientWrapper):
self._client_wrapper = client_wrapper
def list(
- self, *, cursor: typing.Optional[str] = None, page_size: typing.Optional[int] = None
+ self,
+ *,
+ cursor: typing.Optional[str] = None,
+ page_size: typing.Optional[int] = None,
+ request_options: typing.Optional[RequestOptions] = None,
) -> PaginatedSyncStatusList:
"""
Get syncing status. Possible values: `DISABLED`, `DONE`, `FAILED`, `PARTIALLY_SYNCED`, `PAUSED`, `SYNCING`. Learn more about sync status in our [Help Center](https://help.merge.dev/en/articles/8184193-merge-sync-statuses).
@@ -29,6 +35,8 @@ def list(
- cursor: typing.Optional[str]. The pagination cursor value.
- page_size: typing.Optional[int]. Number of results to return per page.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import Merge
@@ -41,9 +49,30 @@ def list(
_response = self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/accounting/v1/sync-status"),
- params=remove_none_from_dict({"cursor": cursor, "page_size": page_size}),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "cursor": cursor,
+ "page_size": page_size,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(PaginatedSyncStatusList, _response.json()) # type: ignore
@@ -59,7 +88,11 @@ def __init__(self, *, client_wrapper: AsyncClientWrapper):
self._client_wrapper = client_wrapper
async def list(
- self, *, cursor: typing.Optional[str] = None, page_size: typing.Optional[int] = None
+ self,
+ *,
+ cursor: typing.Optional[str] = None,
+ page_size: typing.Optional[int] = None,
+ request_options: typing.Optional[RequestOptions] = None,
) -> PaginatedSyncStatusList:
"""
Get syncing status. Possible values: `DISABLED`, `DONE`, `FAILED`, `PARTIALLY_SYNCED`, `PAUSED`, `SYNCING`. Learn more about sync status in our [Help Center](https://help.merge.dev/en/articles/8184193-merge-sync-statuses).
@@ -68,6 +101,8 @@ async def list(
- cursor: typing.Optional[str]. The pagination cursor value.
- page_size: typing.Optional[int]. Number of results to return per page.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import AsyncMerge
@@ -80,9 +115,30 @@ async def list(
_response = await self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/accounting/v1/sync-status"),
- params=remove_none_from_dict({"cursor": cursor, "page_size": page_size}),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "cursor": cursor,
+ "page_size": page_size,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(PaginatedSyncStatusList, _response.json()) # type: ignore
diff --git a/src/merge/resources/accounting/resources/tax_rates/client.py b/src/merge/resources/accounting/resources/tax_rates/client.py
index c86fd038..1fb072f0 100644
--- a/src/merge/resources/accounting/resources/tax_rates/client.py
+++ b/src/merge/resources/accounting/resources/tax_rates/client.py
@@ -5,12 +5,12 @@
import urllib.parse
from json.decoder import JSONDecodeError
-import typing_extensions
-
from .....core.api_error import ApiError
from .....core.client_wrapper import AsyncClientWrapper, SyncClientWrapper
from .....core.datetime_utils import serialize_datetime
+from .....core.jsonable_encoder import jsonable_encoder
from .....core.remove_none_from_dict import remove_none_from_dict
+from .....core.request_options import RequestOptions
from ...types.paginated_tax_rate_list import PaginatedTaxRateList
from ...types.tax_rate import TaxRate
@@ -31,13 +31,14 @@ def list(
created_after: typing.Optional[dt.datetime] = None,
created_before: typing.Optional[dt.datetime] = None,
cursor: typing.Optional[str] = None,
- expand: typing.Optional[typing_extensions.Literal["company"]] = None,
+ expand: typing.Optional[typing.Literal["company"]] = None,
include_deleted_data: typing.Optional[bool] = None,
include_remote_data: typing.Optional[bool] = None,
modified_after: typing.Optional[dt.datetime] = None,
modified_before: typing.Optional[dt.datetime] = None,
page_size: typing.Optional[int] = None,
remote_id: typing.Optional[str] = None,
+ request_options: typing.Optional[RequestOptions] = None,
) -> PaginatedTaxRateList:
"""
Returns a list of `TaxRate` objects.
@@ -51,7 +52,7 @@ def list(
- cursor: typing.Optional[str]. The pagination cursor value.
- - expand: typing.Optional[typing_extensions.Literal["company"]]. Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces.
+ - expand: typing.Optional[typing.Literal["company"]]. Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces.
- include_deleted_data: typing.Optional[bool]. Whether to include data that was marked as deleted by third party webhooks.
@@ -64,6 +65,8 @@ def list(
- page_size: typing.Optional[int]. Number of results to return per page.
- remote_id: typing.Optional[str]. The API provider's ID for the given object.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import Merge
@@ -78,23 +81,39 @@ def list(
_response = self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/accounting/v1/tax-rates"),
- params=remove_none_from_dict(
- {
- "company_id": company_id,
- "created_after": serialize_datetime(created_after) if created_after is not None else None,
- "created_before": serialize_datetime(created_before) if created_before is not None else None,
- "cursor": cursor,
- "expand": expand,
- "include_deleted_data": include_deleted_data,
- "include_remote_data": include_remote_data,
- "modified_after": serialize_datetime(modified_after) if modified_after is not None else None,
- "modified_before": serialize_datetime(modified_before) if modified_before is not None else None,
- "page_size": page_size,
- "remote_id": remote_id,
- }
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "company_id": company_id,
+ "created_after": serialize_datetime(created_after) if created_after is not None else None,
+ "created_before": serialize_datetime(created_before) if created_before is not None else None,
+ "cursor": cursor,
+ "expand": expand,
+ "include_deleted_data": include_deleted_data,
+ "include_remote_data": include_remote_data,
+ "modified_after": serialize_datetime(modified_after) if modified_after is not None else None,
+ "modified_before": serialize_datetime(modified_before) if modified_before is not None else None,
+ "page_size": page_size,
+ "remote_id": remote_id,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(PaginatedTaxRateList, _response.json()) # type: ignore
@@ -108,8 +127,9 @@ def retrieve(
self,
id: str,
*,
- expand: typing.Optional[typing_extensions.Literal["company"]] = None,
+ expand: typing.Optional[typing.Literal["company"]] = None,
include_remote_data: typing.Optional[bool] = None,
+ request_options: typing.Optional[RequestOptions] = None,
) -> TaxRate:
"""
Returns a `TaxRate` object with the given `id`.
@@ -117,9 +137,11 @@ def retrieve(
Parameters:
- id: str.
- - expand: typing.Optional[typing_extensions.Literal["company"]]. Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces.
+ - expand: typing.Optional[typing.Literal["company"]]. Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces.
- include_remote_data: typing.Optional[bool]. Whether to include the original data Merge fetched from the third-party to produce these models.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import Merge
@@ -128,16 +150,37 @@ def retrieve(
api_key="YOUR_API_KEY",
)
client.accounting.tax_rates.retrieve(
- id="id",
+ id="string",
expand="company",
)
"""
_response = self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", f"api/accounting/v1/tax-rates/{id}"),
- params=remove_none_from_dict({"expand": expand, "include_remote_data": include_remote_data}),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "expand": expand,
+ "include_remote_data": include_remote_data,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(TaxRate, _response.json()) # type: ignore
@@ -159,13 +202,14 @@ async def list(
created_after: typing.Optional[dt.datetime] = None,
created_before: typing.Optional[dt.datetime] = None,
cursor: typing.Optional[str] = None,
- expand: typing.Optional[typing_extensions.Literal["company"]] = None,
+ expand: typing.Optional[typing.Literal["company"]] = None,
include_deleted_data: typing.Optional[bool] = None,
include_remote_data: typing.Optional[bool] = None,
modified_after: typing.Optional[dt.datetime] = None,
modified_before: typing.Optional[dt.datetime] = None,
page_size: typing.Optional[int] = None,
remote_id: typing.Optional[str] = None,
+ request_options: typing.Optional[RequestOptions] = None,
) -> PaginatedTaxRateList:
"""
Returns a list of `TaxRate` objects.
@@ -179,7 +223,7 @@ async def list(
- cursor: typing.Optional[str]. The pagination cursor value.
- - expand: typing.Optional[typing_extensions.Literal["company"]]. Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces.
+ - expand: typing.Optional[typing.Literal["company"]]. Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces.
- include_deleted_data: typing.Optional[bool]. Whether to include data that was marked as deleted by third party webhooks.
@@ -192,6 +236,8 @@ async def list(
- page_size: typing.Optional[int]. Number of results to return per page.
- remote_id: typing.Optional[str]. The API provider's ID for the given object.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import AsyncMerge
@@ -206,23 +252,39 @@ async def list(
_response = await self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/accounting/v1/tax-rates"),
- params=remove_none_from_dict(
- {
- "company_id": company_id,
- "created_after": serialize_datetime(created_after) if created_after is not None else None,
- "created_before": serialize_datetime(created_before) if created_before is not None else None,
- "cursor": cursor,
- "expand": expand,
- "include_deleted_data": include_deleted_data,
- "include_remote_data": include_remote_data,
- "modified_after": serialize_datetime(modified_after) if modified_after is not None else None,
- "modified_before": serialize_datetime(modified_before) if modified_before is not None else None,
- "page_size": page_size,
- "remote_id": remote_id,
- }
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "company_id": company_id,
+ "created_after": serialize_datetime(created_after) if created_after is not None else None,
+ "created_before": serialize_datetime(created_before) if created_before is not None else None,
+ "cursor": cursor,
+ "expand": expand,
+ "include_deleted_data": include_deleted_data,
+ "include_remote_data": include_remote_data,
+ "modified_after": serialize_datetime(modified_after) if modified_after is not None else None,
+ "modified_before": serialize_datetime(modified_before) if modified_before is not None else None,
+ "page_size": page_size,
+ "remote_id": remote_id,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(PaginatedTaxRateList, _response.json()) # type: ignore
@@ -236,8 +298,9 @@ async def retrieve(
self,
id: str,
*,
- expand: typing.Optional[typing_extensions.Literal["company"]] = None,
+ expand: typing.Optional[typing.Literal["company"]] = None,
include_remote_data: typing.Optional[bool] = None,
+ request_options: typing.Optional[RequestOptions] = None,
) -> TaxRate:
"""
Returns a `TaxRate` object with the given `id`.
@@ -245,9 +308,11 @@ async def retrieve(
Parameters:
- id: str.
- - expand: typing.Optional[typing_extensions.Literal["company"]]. Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces.
+ - expand: typing.Optional[typing.Literal["company"]]. Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces.
- include_remote_data: typing.Optional[bool]. Whether to include the original data Merge fetched from the third-party to produce these models.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import AsyncMerge
@@ -256,16 +321,37 @@ async def retrieve(
api_key="YOUR_API_KEY",
)
await client.accounting.tax_rates.retrieve(
- id="id",
+ id="string",
expand="company",
)
"""
_response = await self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", f"api/accounting/v1/tax-rates/{id}"),
- params=remove_none_from_dict({"expand": expand, "include_remote_data": include_remote_data}),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "expand": expand,
+ "include_remote_data": include_remote_data,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(TaxRate, _response.json()) # type: ignore
diff --git a/src/merge/resources/accounting/resources/tracking_categories/client.py b/src/merge/resources/accounting/resources/tracking_categories/client.py
index faa91979..2697b2f3 100644
--- a/src/merge/resources/accounting/resources/tracking_categories/client.py
+++ b/src/merge/resources/accounting/resources/tracking_categories/client.py
@@ -5,12 +5,12 @@
import urllib.parse
from json.decoder import JSONDecodeError
-import typing_extensions
-
from .....core.api_error import ApiError
from .....core.client_wrapper import AsyncClientWrapper, SyncClientWrapper
from .....core.datetime_utils import serialize_datetime
+from .....core.jsonable_encoder import jsonable_encoder
from .....core.remove_none_from_dict import remove_none_from_dict
+from .....core.request_options import RequestOptions
from ...types.paginated_tracking_category_list import PaginatedTrackingCategoryList
from ...types.tracking_category import TrackingCategory
@@ -31,15 +31,16 @@ def list(
created_after: typing.Optional[dt.datetime] = None,
created_before: typing.Optional[dt.datetime] = None,
cursor: typing.Optional[str] = None,
- expand: typing.Optional[typing_extensions.Literal["company"]] = None,
+ expand: typing.Optional[typing.Literal["company"]] = None,
include_deleted_data: typing.Optional[bool] = None,
include_remote_data: typing.Optional[bool] = None,
modified_after: typing.Optional[dt.datetime] = None,
modified_before: typing.Optional[dt.datetime] = None,
page_size: typing.Optional[int] = None,
- remote_fields: typing.Optional[typing_extensions.Literal["status"]] = None,
+ remote_fields: typing.Optional[typing.Literal["status"]] = None,
remote_id: typing.Optional[str] = None,
- show_enum_origins: typing.Optional[typing_extensions.Literal["status"]] = None,
+ show_enum_origins: typing.Optional[typing.Literal["status"]] = None,
+ request_options: typing.Optional[RequestOptions] = None,
) -> PaginatedTrackingCategoryList:
"""
Returns a list of `TrackingCategory` objects.
@@ -53,7 +54,7 @@ def list(
- cursor: typing.Optional[str]. The pagination cursor value.
- - expand: typing.Optional[typing_extensions.Literal["company"]]. Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces.
+ - expand: typing.Optional[typing.Literal["company"]]. Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces.
- include_deleted_data: typing.Optional[bool]. Whether to include data that was marked as deleted by third party webhooks.
@@ -65,11 +66,13 @@ def list(
- page_size: typing.Optional[int]. Number of results to return per page.
- - remote_fields: typing.Optional[typing_extensions.Literal["status"]]. Deprecated. Use show_enum_origins.
+ - remote_fields: typing.Optional[typing.Literal["status"]]. Deprecated. Use show_enum_origins.
- remote_id: typing.Optional[str]. The API provider's ID for the given object.
- - show_enum_origins: typing.Optional[typing_extensions.Literal["status"]]. Which fields should be returned in non-normalized form.
+ - show_enum_origins: typing.Optional[typing.Literal["status"]]. Which fields should be returned in non-normalized form.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import Merge
@@ -86,25 +89,41 @@ def list(
_response = self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/accounting/v1/tracking-categories"),
- params=remove_none_from_dict(
- {
- "company_id": company_id,
- "created_after": serialize_datetime(created_after) if created_after is not None else None,
- "created_before": serialize_datetime(created_before) if created_before is not None else None,
- "cursor": cursor,
- "expand": expand,
- "include_deleted_data": include_deleted_data,
- "include_remote_data": include_remote_data,
- "modified_after": serialize_datetime(modified_after) if modified_after is not None else None,
- "modified_before": serialize_datetime(modified_before) if modified_before is not None else None,
- "page_size": page_size,
- "remote_fields": remote_fields,
- "remote_id": remote_id,
- "show_enum_origins": show_enum_origins,
- }
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "company_id": company_id,
+ "created_after": serialize_datetime(created_after) if created_after is not None else None,
+ "created_before": serialize_datetime(created_before) if created_before is not None else None,
+ "cursor": cursor,
+ "expand": expand,
+ "include_deleted_data": include_deleted_data,
+ "include_remote_data": include_remote_data,
+ "modified_after": serialize_datetime(modified_after) if modified_after is not None else None,
+ "modified_before": serialize_datetime(modified_before) if modified_before is not None else None,
+ "page_size": page_size,
+ "remote_fields": remote_fields,
+ "remote_id": remote_id,
+ "show_enum_origins": show_enum_origins,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(PaginatedTrackingCategoryList, _response.json()) # type: ignore
@@ -118,10 +137,11 @@ def retrieve(
self,
id: str,
*,
- expand: typing.Optional[typing_extensions.Literal["company"]] = None,
+ expand: typing.Optional[typing.Literal["company"]] = None,
include_remote_data: typing.Optional[bool] = None,
- remote_fields: typing.Optional[typing_extensions.Literal["status"]] = None,
- show_enum_origins: typing.Optional[typing_extensions.Literal["status"]] = None,
+ remote_fields: typing.Optional[typing.Literal["status"]] = None,
+ show_enum_origins: typing.Optional[typing.Literal["status"]] = None,
+ request_options: typing.Optional[RequestOptions] = None,
) -> TrackingCategory:
"""
Returns a `TrackingCategory` object with the given `id`.
@@ -129,13 +149,15 @@ def retrieve(
Parameters:
- id: str.
- - expand: typing.Optional[typing_extensions.Literal["company"]]. Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces.
+ - expand: typing.Optional[typing.Literal["company"]]. Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces.
- include_remote_data: typing.Optional[bool]. Whether to include the original data Merge fetched from the third-party to produce these models.
- - remote_fields: typing.Optional[typing_extensions.Literal["status"]]. Deprecated. Use show_enum_origins.
+ - remote_fields: typing.Optional[typing.Literal["status"]]. Deprecated. Use show_enum_origins.
- - show_enum_origins: typing.Optional[typing_extensions.Literal["status"]]. Which fields should be returned in non-normalized form.
+ - show_enum_origins: typing.Optional[typing.Literal["status"]]. Which fields should be returned in non-normalized form.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import Merge
@@ -144,7 +166,7 @@ def retrieve(
api_key="YOUR_API_KEY",
)
client.accounting.tracking_categories.retrieve(
- id="id",
+ id="string",
expand="company",
remote_fields="status",
show_enum_origins="status",
@@ -155,16 +177,32 @@ def retrieve(
urllib.parse.urljoin(
f"{self._client_wrapper.get_base_url()}/", f"api/accounting/v1/tracking-categories/{id}"
),
- params=remove_none_from_dict(
- {
- "expand": expand,
- "include_remote_data": include_remote_data,
- "remote_fields": remote_fields,
- "show_enum_origins": show_enum_origins,
- }
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "expand": expand,
+ "include_remote_data": include_remote_data,
+ "remote_fields": remote_fields,
+ "show_enum_origins": show_enum_origins,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(TrackingCategory, _response.json()) # type: ignore
@@ -186,15 +224,16 @@ async def list(
created_after: typing.Optional[dt.datetime] = None,
created_before: typing.Optional[dt.datetime] = None,
cursor: typing.Optional[str] = None,
- expand: typing.Optional[typing_extensions.Literal["company"]] = None,
+ expand: typing.Optional[typing.Literal["company"]] = None,
include_deleted_data: typing.Optional[bool] = None,
include_remote_data: typing.Optional[bool] = None,
modified_after: typing.Optional[dt.datetime] = None,
modified_before: typing.Optional[dt.datetime] = None,
page_size: typing.Optional[int] = None,
- remote_fields: typing.Optional[typing_extensions.Literal["status"]] = None,
+ remote_fields: typing.Optional[typing.Literal["status"]] = None,
remote_id: typing.Optional[str] = None,
- show_enum_origins: typing.Optional[typing_extensions.Literal["status"]] = None,
+ show_enum_origins: typing.Optional[typing.Literal["status"]] = None,
+ request_options: typing.Optional[RequestOptions] = None,
) -> PaginatedTrackingCategoryList:
"""
Returns a list of `TrackingCategory` objects.
@@ -208,7 +247,7 @@ async def list(
- cursor: typing.Optional[str]. The pagination cursor value.
- - expand: typing.Optional[typing_extensions.Literal["company"]]. Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces.
+ - expand: typing.Optional[typing.Literal["company"]]. Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces.
- include_deleted_data: typing.Optional[bool]. Whether to include data that was marked as deleted by third party webhooks.
@@ -220,11 +259,13 @@ async def list(
- page_size: typing.Optional[int]. Number of results to return per page.
- - remote_fields: typing.Optional[typing_extensions.Literal["status"]]. Deprecated. Use show_enum_origins.
+ - remote_fields: typing.Optional[typing.Literal["status"]]. Deprecated. Use show_enum_origins.
- remote_id: typing.Optional[str]. The API provider's ID for the given object.
- - show_enum_origins: typing.Optional[typing_extensions.Literal["status"]]. Which fields should be returned in non-normalized form.
+ - show_enum_origins: typing.Optional[typing.Literal["status"]]. Which fields should be returned in non-normalized form.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import AsyncMerge
@@ -241,25 +282,41 @@ async def list(
_response = await self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/accounting/v1/tracking-categories"),
- params=remove_none_from_dict(
- {
- "company_id": company_id,
- "created_after": serialize_datetime(created_after) if created_after is not None else None,
- "created_before": serialize_datetime(created_before) if created_before is not None else None,
- "cursor": cursor,
- "expand": expand,
- "include_deleted_data": include_deleted_data,
- "include_remote_data": include_remote_data,
- "modified_after": serialize_datetime(modified_after) if modified_after is not None else None,
- "modified_before": serialize_datetime(modified_before) if modified_before is not None else None,
- "page_size": page_size,
- "remote_fields": remote_fields,
- "remote_id": remote_id,
- "show_enum_origins": show_enum_origins,
- }
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "company_id": company_id,
+ "created_after": serialize_datetime(created_after) if created_after is not None else None,
+ "created_before": serialize_datetime(created_before) if created_before is not None else None,
+ "cursor": cursor,
+ "expand": expand,
+ "include_deleted_data": include_deleted_data,
+ "include_remote_data": include_remote_data,
+ "modified_after": serialize_datetime(modified_after) if modified_after is not None else None,
+ "modified_before": serialize_datetime(modified_before) if modified_before is not None else None,
+ "page_size": page_size,
+ "remote_fields": remote_fields,
+ "remote_id": remote_id,
+ "show_enum_origins": show_enum_origins,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(PaginatedTrackingCategoryList, _response.json()) # type: ignore
@@ -273,10 +330,11 @@ async def retrieve(
self,
id: str,
*,
- expand: typing.Optional[typing_extensions.Literal["company"]] = None,
+ expand: typing.Optional[typing.Literal["company"]] = None,
include_remote_data: typing.Optional[bool] = None,
- remote_fields: typing.Optional[typing_extensions.Literal["status"]] = None,
- show_enum_origins: typing.Optional[typing_extensions.Literal["status"]] = None,
+ remote_fields: typing.Optional[typing.Literal["status"]] = None,
+ show_enum_origins: typing.Optional[typing.Literal["status"]] = None,
+ request_options: typing.Optional[RequestOptions] = None,
) -> TrackingCategory:
"""
Returns a `TrackingCategory` object with the given `id`.
@@ -284,13 +342,15 @@ async def retrieve(
Parameters:
- id: str.
- - expand: typing.Optional[typing_extensions.Literal["company"]]. Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces.
+ - expand: typing.Optional[typing.Literal["company"]]. Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces.
- include_remote_data: typing.Optional[bool]. Whether to include the original data Merge fetched from the third-party to produce these models.
- - remote_fields: typing.Optional[typing_extensions.Literal["status"]]. Deprecated. Use show_enum_origins.
+ - remote_fields: typing.Optional[typing.Literal["status"]]. Deprecated. Use show_enum_origins.
- - show_enum_origins: typing.Optional[typing_extensions.Literal["status"]]. Which fields should be returned in non-normalized form.
+ - show_enum_origins: typing.Optional[typing.Literal["status"]]. Which fields should be returned in non-normalized form.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import AsyncMerge
@@ -299,7 +359,7 @@ async def retrieve(
api_key="YOUR_API_KEY",
)
await client.accounting.tracking_categories.retrieve(
- id="id",
+ id="string",
expand="company",
remote_fields="status",
show_enum_origins="status",
@@ -310,16 +370,32 @@ async def retrieve(
urllib.parse.urljoin(
f"{self._client_wrapper.get_base_url()}/", f"api/accounting/v1/tracking-categories/{id}"
),
- params=remove_none_from_dict(
- {
- "expand": expand,
- "include_remote_data": include_remote_data,
- "remote_fields": remote_fields,
- "show_enum_origins": show_enum_origins,
- }
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "expand": expand,
+ "include_remote_data": include_remote_data,
+ "remote_fields": remote_fields,
+ "show_enum_origins": show_enum_origins,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(TrackingCategory, _response.json()) # type: ignore
diff --git a/src/merge/resources/accounting/resources/transactions/client.py b/src/merge/resources/accounting/resources/transactions/client.py
index 644d0823..3c30e3d2 100644
--- a/src/merge/resources/accounting/resources/transactions/client.py
+++ b/src/merge/resources/accounting/resources/transactions/client.py
@@ -8,7 +8,9 @@
from .....core.api_error import ApiError
from .....core.client_wrapper import AsyncClientWrapper, SyncClientWrapper
from .....core.datetime_utils import serialize_datetime
+from .....core.jsonable_encoder import jsonable_encoder
from .....core.remove_none_from_dict import remove_none_from_dict
+from .....core.request_options import RequestOptions
from ...types.paginated_transaction_list import PaginatedTransactionList
from ...types.transaction import Transaction
from .types.transactions_list_request_expand import TransactionsListRequestExpand
@@ -40,6 +42,7 @@ def list(
remote_id: typing.Optional[str] = None,
transaction_date_after: typing.Optional[dt.datetime] = None,
transaction_date_before: typing.Optional[dt.datetime] = None,
+ request_options: typing.Optional[RequestOptions] = None,
) -> PaginatedTransactionList:
"""
Returns a list of `Transaction` objects.
@@ -70,6 +73,8 @@ def list(
- transaction_date_after: typing.Optional[dt.datetime]. If provided, will only return objects created after this datetime.
- transaction_date_before: typing.Optional[dt.datetime]. If provided, will only return objects created before this datetime.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import Merge
from merge.resources.accounting import TransactionsListRequestExpand
@@ -85,29 +90,45 @@ def list(
_response = self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/accounting/v1/transactions"),
- params=remove_none_from_dict(
- {
- "company_id": company_id,
- "created_after": serialize_datetime(created_after) if created_after is not None else None,
- "created_before": serialize_datetime(created_before) if created_before is not None else None,
- "cursor": cursor,
- "expand": expand,
- "include_deleted_data": include_deleted_data,
- "include_remote_data": include_remote_data,
- "modified_after": serialize_datetime(modified_after) if modified_after is not None else None,
- "modified_before": serialize_datetime(modified_before) if modified_before is not None else None,
- "page_size": page_size,
- "remote_id": remote_id,
- "transaction_date_after": serialize_datetime(transaction_date_after)
- if transaction_date_after is not None
- else None,
- "transaction_date_before": serialize_datetime(transaction_date_before)
- if transaction_date_before is not None
- else None,
- }
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "company_id": company_id,
+ "created_after": serialize_datetime(created_after) if created_after is not None else None,
+ "created_before": serialize_datetime(created_before) if created_before is not None else None,
+ "cursor": cursor,
+ "expand": expand,
+ "include_deleted_data": include_deleted_data,
+ "include_remote_data": include_remote_data,
+ "modified_after": serialize_datetime(modified_after) if modified_after is not None else None,
+ "modified_before": serialize_datetime(modified_before) if modified_before is not None else None,
+ "page_size": page_size,
+ "remote_id": remote_id,
+ "transaction_date_after": serialize_datetime(transaction_date_after)
+ if transaction_date_after is not None
+ else None,
+ "transaction_date_before": serialize_datetime(transaction_date_before)
+ if transaction_date_before is not None
+ else None,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(PaginatedTransactionList, _response.json()) # type: ignore
@@ -123,6 +144,7 @@ def retrieve(
*,
expand: typing.Optional[TransactionsRetrieveRequestExpand] = None,
include_remote_data: typing.Optional[bool] = None,
+ request_options: typing.Optional[RequestOptions] = None,
) -> Transaction:
"""
Returns a `Transaction` object with the given `id`.
@@ -133,6 +155,8 @@ def retrieve(
- expand: typing.Optional[TransactionsRetrieveRequestExpand]. Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces.
- include_remote_data: typing.Optional[bool]. Whether to include the original data Merge fetched from the third-party to produce these models.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import Merge
from merge.resources.accounting import TransactionsRetrieveRequestExpand
@@ -142,16 +166,37 @@ def retrieve(
api_key="YOUR_API_KEY",
)
client.accounting.transactions.retrieve(
- id="id",
+ id="string",
expand=TransactionsRetrieveRequestExpand.ACCOUNT,
)
"""
_response = self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", f"api/accounting/v1/transactions/{id}"),
- params=remove_none_from_dict({"expand": expand, "include_remote_data": include_remote_data}),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "expand": expand,
+ "include_remote_data": include_remote_data,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(Transaction, _response.json()) # type: ignore
@@ -182,6 +227,7 @@ async def list(
remote_id: typing.Optional[str] = None,
transaction_date_after: typing.Optional[dt.datetime] = None,
transaction_date_before: typing.Optional[dt.datetime] = None,
+ request_options: typing.Optional[RequestOptions] = None,
) -> PaginatedTransactionList:
"""
Returns a list of `Transaction` objects.
@@ -212,6 +258,8 @@ async def list(
- transaction_date_after: typing.Optional[dt.datetime]. If provided, will only return objects created after this datetime.
- transaction_date_before: typing.Optional[dt.datetime]. If provided, will only return objects created before this datetime.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import AsyncMerge
from merge.resources.accounting import TransactionsListRequestExpand
@@ -227,29 +275,45 @@ async def list(
_response = await self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/accounting/v1/transactions"),
- params=remove_none_from_dict(
- {
- "company_id": company_id,
- "created_after": serialize_datetime(created_after) if created_after is not None else None,
- "created_before": serialize_datetime(created_before) if created_before is not None else None,
- "cursor": cursor,
- "expand": expand,
- "include_deleted_data": include_deleted_data,
- "include_remote_data": include_remote_data,
- "modified_after": serialize_datetime(modified_after) if modified_after is not None else None,
- "modified_before": serialize_datetime(modified_before) if modified_before is not None else None,
- "page_size": page_size,
- "remote_id": remote_id,
- "transaction_date_after": serialize_datetime(transaction_date_after)
- if transaction_date_after is not None
- else None,
- "transaction_date_before": serialize_datetime(transaction_date_before)
- if transaction_date_before is not None
- else None,
- }
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "company_id": company_id,
+ "created_after": serialize_datetime(created_after) if created_after is not None else None,
+ "created_before": serialize_datetime(created_before) if created_before is not None else None,
+ "cursor": cursor,
+ "expand": expand,
+ "include_deleted_data": include_deleted_data,
+ "include_remote_data": include_remote_data,
+ "modified_after": serialize_datetime(modified_after) if modified_after is not None else None,
+ "modified_before": serialize_datetime(modified_before) if modified_before is not None else None,
+ "page_size": page_size,
+ "remote_id": remote_id,
+ "transaction_date_after": serialize_datetime(transaction_date_after)
+ if transaction_date_after is not None
+ else None,
+ "transaction_date_before": serialize_datetime(transaction_date_before)
+ if transaction_date_before is not None
+ else None,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(PaginatedTransactionList, _response.json()) # type: ignore
@@ -265,6 +329,7 @@ async def retrieve(
*,
expand: typing.Optional[TransactionsRetrieveRequestExpand] = None,
include_remote_data: typing.Optional[bool] = None,
+ request_options: typing.Optional[RequestOptions] = None,
) -> Transaction:
"""
Returns a `Transaction` object with the given `id`.
@@ -275,6 +340,8 @@ async def retrieve(
- expand: typing.Optional[TransactionsRetrieveRequestExpand]. Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces.
- include_remote_data: typing.Optional[bool]. Whether to include the original data Merge fetched from the third-party to produce these models.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import AsyncMerge
from merge.resources.accounting import TransactionsRetrieveRequestExpand
@@ -284,16 +351,37 @@ async def retrieve(
api_key="YOUR_API_KEY",
)
await client.accounting.transactions.retrieve(
- id="id",
+ id="string",
expand=TransactionsRetrieveRequestExpand.ACCOUNT,
)
"""
_response = await self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", f"api/accounting/v1/transactions/{id}"),
- params=remove_none_from_dict({"expand": expand, "include_remote_data": include_remote_data}),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "expand": expand,
+ "include_remote_data": include_remote_data,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(Transaction, _response.json()) # type: ignore
diff --git a/src/merge/resources/accounting/resources/vendor_credits/client.py b/src/merge/resources/accounting/resources/vendor_credits/client.py
index 15e570e7..fd6913e3 100644
--- a/src/merge/resources/accounting/resources/vendor_credits/client.py
+++ b/src/merge/resources/accounting/resources/vendor_credits/client.py
@@ -8,7 +8,9 @@
from .....core.api_error import ApiError
from .....core.client_wrapper import AsyncClientWrapper, SyncClientWrapper
from .....core.datetime_utils import serialize_datetime
+from .....core.jsonable_encoder import jsonable_encoder
from .....core.remove_none_from_dict import remove_none_from_dict
+from .....core.request_options import RequestOptions
from ...types.paginated_vendor_credit_list import PaginatedVendorCreditList
from ...types.vendor_credit import VendorCredit
from .types.vendor_credits_list_request_expand import VendorCreditsListRequestExpand
@@ -40,6 +42,7 @@ def list(
remote_id: typing.Optional[str] = None,
transaction_date_after: typing.Optional[dt.datetime] = None,
transaction_date_before: typing.Optional[dt.datetime] = None,
+ request_options: typing.Optional[RequestOptions] = None,
) -> PaginatedVendorCreditList:
"""
Returns a list of `VendorCredit` objects.
@@ -70,6 +73,8 @@ def list(
- transaction_date_after: typing.Optional[dt.datetime]. If provided, will only return objects created after this datetime.
- transaction_date_before: typing.Optional[dt.datetime]. If provided, will only return objects created before this datetime.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import Merge
from merge.resources.accounting import VendorCreditsListRequestExpand
@@ -85,29 +90,45 @@ def list(
_response = self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/accounting/v1/vendor-credits"),
- params=remove_none_from_dict(
- {
- "company_id": company_id,
- "created_after": serialize_datetime(created_after) if created_after is not None else None,
- "created_before": serialize_datetime(created_before) if created_before is not None else None,
- "cursor": cursor,
- "expand": expand,
- "include_deleted_data": include_deleted_data,
- "include_remote_data": include_remote_data,
- "modified_after": serialize_datetime(modified_after) if modified_after is not None else None,
- "modified_before": serialize_datetime(modified_before) if modified_before is not None else None,
- "page_size": page_size,
- "remote_id": remote_id,
- "transaction_date_after": serialize_datetime(transaction_date_after)
- if transaction_date_after is not None
- else None,
- "transaction_date_before": serialize_datetime(transaction_date_before)
- if transaction_date_before is not None
- else None,
- }
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "company_id": company_id,
+ "created_after": serialize_datetime(created_after) if created_after is not None else None,
+ "created_before": serialize_datetime(created_before) if created_before is not None else None,
+ "cursor": cursor,
+ "expand": expand,
+ "include_deleted_data": include_deleted_data,
+ "include_remote_data": include_remote_data,
+ "modified_after": serialize_datetime(modified_after) if modified_after is not None else None,
+ "modified_before": serialize_datetime(modified_before) if modified_before is not None else None,
+ "page_size": page_size,
+ "remote_id": remote_id,
+ "transaction_date_after": serialize_datetime(transaction_date_after)
+ if transaction_date_after is not None
+ else None,
+ "transaction_date_before": serialize_datetime(transaction_date_before)
+ if transaction_date_before is not None
+ else None,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(PaginatedVendorCreditList, _response.json()) # type: ignore
@@ -123,6 +144,7 @@ def retrieve(
*,
expand: typing.Optional[VendorCreditsRetrieveRequestExpand] = None,
include_remote_data: typing.Optional[bool] = None,
+ request_options: typing.Optional[RequestOptions] = None,
) -> VendorCredit:
"""
Returns a `VendorCredit` object with the given `id`.
@@ -133,6 +155,8 @@ def retrieve(
- expand: typing.Optional[VendorCreditsRetrieveRequestExpand]. Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces.
- include_remote_data: typing.Optional[bool]. Whether to include the original data Merge fetched from the third-party to produce these models.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import Merge
from merge.resources.accounting import VendorCreditsRetrieveRequestExpand
@@ -142,16 +166,37 @@ def retrieve(
api_key="YOUR_API_KEY",
)
client.accounting.vendor_credits.retrieve(
- id="id",
+ id="string",
expand=VendorCreditsRetrieveRequestExpand.ACCOUNTING_PERIOD,
)
"""
_response = self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", f"api/accounting/v1/vendor-credits/{id}"),
- params=remove_none_from_dict({"expand": expand, "include_remote_data": include_remote_data}),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "expand": expand,
+ "include_remote_data": include_remote_data,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(VendorCredit, _response.json()) # type: ignore
@@ -182,6 +227,7 @@ async def list(
remote_id: typing.Optional[str] = None,
transaction_date_after: typing.Optional[dt.datetime] = None,
transaction_date_before: typing.Optional[dt.datetime] = None,
+ request_options: typing.Optional[RequestOptions] = None,
) -> PaginatedVendorCreditList:
"""
Returns a list of `VendorCredit` objects.
@@ -212,6 +258,8 @@ async def list(
- transaction_date_after: typing.Optional[dt.datetime]. If provided, will only return objects created after this datetime.
- transaction_date_before: typing.Optional[dt.datetime]. If provided, will only return objects created before this datetime.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import AsyncMerge
from merge.resources.accounting import VendorCreditsListRequestExpand
@@ -227,29 +275,45 @@ async def list(
_response = await self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/accounting/v1/vendor-credits"),
- params=remove_none_from_dict(
- {
- "company_id": company_id,
- "created_after": serialize_datetime(created_after) if created_after is not None else None,
- "created_before": serialize_datetime(created_before) if created_before is not None else None,
- "cursor": cursor,
- "expand": expand,
- "include_deleted_data": include_deleted_data,
- "include_remote_data": include_remote_data,
- "modified_after": serialize_datetime(modified_after) if modified_after is not None else None,
- "modified_before": serialize_datetime(modified_before) if modified_before is not None else None,
- "page_size": page_size,
- "remote_id": remote_id,
- "transaction_date_after": serialize_datetime(transaction_date_after)
- if transaction_date_after is not None
- else None,
- "transaction_date_before": serialize_datetime(transaction_date_before)
- if transaction_date_before is not None
- else None,
- }
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "company_id": company_id,
+ "created_after": serialize_datetime(created_after) if created_after is not None else None,
+ "created_before": serialize_datetime(created_before) if created_before is not None else None,
+ "cursor": cursor,
+ "expand": expand,
+ "include_deleted_data": include_deleted_data,
+ "include_remote_data": include_remote_data,
+ "modified_after": serialize_datetime(modified_after) if modified_after is not None else None,
+ "modified_before": serialize_datetime(modified_before) if modified_before is not None else None,
+ "page_size": page_size,
+ "remote_id": remote_id,
+ "transaction_date_after": serialize_datetime(transaction_date_after)
+ if transaction_date_after is not None
+ else None,
+ "transaction_date_before": serialize_datetime(transaction_date_before)
+ if transaction_date_before is not None
+ else None,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(PaginatedVendorCreditList, _response.json()) # type: ignore
@@ -265,6 +329,7 @@ async def retrieve(
*,
expand: typing.Optional[VendorCreditsRetrieveRequestExpand] = None,
include_remote_data: typing.Optional[bool] = None,
+ request_options: typing.Optional[RequestOptions] = None,
) -> VendorCredit:
"""
Returns a `VendorCredit` object with the given `id`.
@@ -275,6 +340,8 @@ async def retrieve(
- expand: typing.Optional[VendorCreditsRetrieveRequestExpand]. Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces.
- include_remote_data: typing.Optional[bool]. Whether to include the original data Merge fetched from the third-party to produce these models.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import AsyncMerge
from merge.resources.accounting import VendorCreditsRetrieveRequestExpand
@@ -284,16 +351,37 @@ async def retrieve(
api_key="YOUR_API_KEY",
)
await client.accounting.vendor_credits.retrieve(
- id="id",
+ id="string",
expand=VendorCreditsRetrieveRequestExpand.ACCOUNTING_PERIOD,
)
"""
_response = await self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", f"api/accounting/v1/vendor-credits/{id}"),
- params=remove_none_from_dict({"expand": expand, "include_remote_data": include_remote_data}),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "expand": expand,
+ "include_remote_data": include_remote_data,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(VendorCredit, _response.json()) # type: ignore
diff --git a/src/merge/resources/accounting/resources/webhook_receivers/client.py b/src/merge/resources/accounting/resources/webhook_receivers/client.py
index d2f9fcb9..1c402a78 100644
--- a/src/merge/resources/accounting/resources/webhook_receivers/client.py
+++ b/src/merge/resources/accounting/resources/webhook_receivers/client.py
@@ -7,6 +7,8 @@
from .....core.api_error import ApiError
from .....core.client_wrapper import AsyncClientWrapper, SyncClientWrapper
from .....core.jsonable_encoder import jsonable_encoder
+from .....core.remove_none_from_dict import remove_none_from_dict
+from .....core.request_options import RequestOptions
from ...types.webhook_receiver import WebhookReceiver
try:
@@ -22,10 +24,12 @@ class WebhookReceiversClient:
def __init__(self, *, client_wrapper: SyncClientWrapper):
self._client_wrapper = client_wrapper
- def list(self) -> typing.List[WebhookReceiver]:
+ def list(self, *, request_options: typing.Optional[RequestOptions] = None) -> typing.List[WebhookReceiver]:
"""
Returns a list of `WebhookReceiver` objects.
+ Parameters:
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import Merge
@@ -38,8 +42,20 @@ def list(self) -> typing.List[WebhookReceiver]:
_response = self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/accounting/v1/webhook-receivers"),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ request_options.get("additional_query_parameters") if request_options is not None else None
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(typing.List[WebhookReceiver], _response.json()) # type: ignore
@@ -49,7 +65,14 @@ def list(self) -> typing.List[WebhookReceiver]:
raise ApiError(status_code=_response.status_code, body=_response.text)
raise ApiError(status_code=_response.status_code, body=_response_json)
- def create(self, *, event: str, is_active: bool, key: typing.Optional[str] = OMIT) -> WebhookReceiver:
+ def create(
+ self,
+ *,
+ event: str,
+ is_active: bool,
+ key: typing.Optional[str] = OMIT,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> WebhookReceiver:
"""
Creates a `WebhookReceiver` object with the given values.
@@ -59,6 +82,19 @@ def create(self, *, event: str, is_active: bool, key: typing.Optional[str] = OMI
- is_active: bool.
- key: typing.Optional[str].
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
+ ---
+ from merge.client import Merge
+
+ client = Merge(
+ account_token="YOUR_ACCOUNT_TOKEN",
+ api_key="YOUR_API_KEY",
+ )
+ client.accounting.webhook_receivers.create(
+ event="string",
+ is_active=True,
+ )
"""
_request: typing.Dict[str, typing.Any] = {"event": event, "is_active": is_active}
if key is not OMIT:
@@ -66,9 +102,26 @@ def create(self, *, event: str, is_active: bool, key: typing.Optional[str] = OMI
_response = self._client_wrapper.httpx_client.request(
"POST",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/accounting/v1/webhook-receivers"),
- json=jsonable_encoder(_request),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ request_options.get("additional_query_parameters") if request_options is not None else None
+ ),
+ json=jsonable_encoder(_request)
+ if request_options is None or request_options.get("additional_body_parameters") is None
+ else {
+ **jsonable_encoder(_request),
+ **(jsonable_encoder(remove_none_from_dict(request_options.get("additional_body_parameters", {})))),
+ },
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(WebhookReceiver, _response.json()) # type: ignore
@@ -83,10 +136,12 @@ class AsyncWebhookReceiversClient:
def __init__(self, *, client_wrapper: AsyncClientWrapper):
self._client_wrapper = client_wrapper
- async def list(self) -> typing.List[WebhookReceiver]:
+ async def list(self, *, request_options: typing.Optional[RequestOptions] = None) -> typing.List[WebhookReceiver]:
"""
Returns a list of `WebhookReceiver` objects.
+ Parameters:
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import AsyncMerge
@@ -99,8 +154,20 @@ async def list(self) -> typing.List[WebhookReceiver]:
_response = await self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/accounting/v1/webhook-receivers"),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ request_options.get("additional_query_parameters") if request_options is not None else None
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(typing.List[WebhookReceiver], _response.json()) # type: ignore
@@ -110,7 +177,14 @@ async def list(self) -> typing.List[WebhookReceiver]:
raise ApiError(status_code=_response.status_code, body=_response.text)
raise ApiError(status_code=_response.status_code, body=_response_json)
- async def create(self, *, event: str, is_active: bool, key: typing.Optional[str] = OMIT) -> WebhookReceiver:
+ async def create(
+ self,
+ *,
+ event: str,
+ is_active: bool,
+ key: typing.Optional[str] = OMIT,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> WebhookReceiver:
"""
Creates a `WebhookReceiver` object with the given values.
@@ -120,6 +194,19 @@ async def create(self, *, event: str, is_active: bool, key: typing.Optional[str]
- is_active: bool.
- key: typing.Optional[str].
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
+ ---
+ from merge.client import AsyncMerge
+
+ client = AsyncMerge(
+ account_token="YOUR_ACCOUNT_TOKEN",
+ api_key="YOUR_API_KEY",
+ )
+ await client.accounting.webhook_receivers.create(
+ event="string",
+ is_active=True,
+ )
"""
_request: typing.Dict[str, typing.Any] = {"event": event, "is_active": is_active}
if key is not OMIT:
@@ -127,9 +214,26 @@ async def create(self, *, event: str, is_active: bool, key: typing.Optional[str]
_response = await self._client_wrapper.httpx_client.request(
"POST",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/accounting/v1/webhook-receivers"),
- json=jsonable_encoder(_request),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ request_options.get("additional_query_parameters") if request_options is not None else None
+ ),
+ json=jsonable_encoder(_request)
+ if request_options is None or request_options.get("additional_body_parameters") is None
+ else {
+ **jsonable_encoder(_request),
+ **(jsonable_encoder(remove_none_from_dict(request_options.get("additional_body_parameters", {})))),
+ },
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(WebhookReceiver, _response.json()) # type: ignore
diff --git a/src/merge/resources/ats/resources/account_details/client.py b/src/merge/resources/ats/resources/account_details/client.py
index a88cc830..b25ea42b 100644
--- a/src/merge/resources/ats/resources/account_details/client.py
+++ b/src/merge/resources/ats/resources/account_details/client.py
@@ -1,10 +1,14 @@
# This file was auto-generated by Fern from our API Definition.
+import typing
import urllib.parse
from json.decoder import JSONDecodeError
from .....core.api_error import ApiError
from .....core.client_wrapper import AsyncClientWrapper, SyncClientWrapper
+from .....core.jsonable_encoder import jsonable_encoder
+from .....core.remove_none_from_dict import remove_none_from_dict
+from .....core.request_options import RequestOptions
from ...types.account_details import AccountDetails
try:
@@ -17,10 +21,12 @@ class AccountDetailsClient:
def __init__(self, *, client_wrapper: SyncClientWrapper):
self._client_wrapper = client_wrapper
- def retrieve(self) -> AccountDetails:
+ def retrieve(self, *, request_options: typing.Optional[RequestOptions] = None) -> AccountDetails:
"""
Get details for a linked account.
+ Parameters:
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import Merge
@@ -33,8 +39,20 @@ def retrieve(self) -> AccountDetails:
_response = self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/ats/v1/account-details"),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ request_options.get("additional_query_parameters") if request_options is not None else None
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(AccountDetails, _response.json()) # type: ignore
@@ -49,10 +67,12 @@ class AsyncAccountDetailsClient:
def __init__(self, *, client_wrapper: AsyncClientWrapper):
self._client_wrapper = client_wrapper
- async def retrieve(self) -> AccountDetails:
+ async def retrieve(self, *, request_options: typing.Optional[RequestOptions] = None) -> AccountDetails:
"""
Get details for a linked account.
+ Parameters:
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import AsyncMerge
@@ -65,8 +85,20 @@ async def retrieve(self) -> AccountDetails:
_response = await self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/ats/v1/account-details"),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ request_options.get("additional_query_parameters") if request_options is not None else None
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(AccountDetails, _response.json()) # type: ignore
diff --git a/src/merge/resources/ats/resources/account_token/client.py b/src/merge/resources/ats/resources/account_token/client.py
index 33832628..f7326e33 100644
--- a/src/merge/resources/ats/resources/account_token/client.py
+++ b/src/merge/resources/ats/resources/account_token/client.py
@@ -1,10 +1,14 @@
# This file was auto-generated by Fern from our API Definition.
+import typing
import urllib.parse
from json.decoder import JSONDecodeError
from .....core.api_error import ApiError
from .....core.client_wrapper import AsyncClientWrapper, SyncClientWrapper
+from .....core.jsonable_encoder import jsonable_encoder
+from .....core.remove_none_from_dict import remove_none_from_dict
+from .....core.request_options import RequestOptions
from ...types.account_token import AccountToken
try:
@@ -17,18 +21,42 @@ class AccountTokenClient:
def __init__(self, *, client_wrapper: SyncClientWrapper):
self._client_wrapper = client_wrapper
- def retrieve(self, public_token: str) -> AccountToken:
+ def retrieve(self, public_token: str, *, request_options: typing.Optional[RequestOptions] = None) -> AccountToken:
"""
Returns the account token for the end user with the provided public token.
Parameters:
- public_token: str.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
+ ---
+ from merge.client import Merge
+
+ client = Merge(
+ account_token="YOUR_ACCOUNT_TOKEN",
+ api_key="YOUR_API_KEY",
+ )
+ client.ats.account_token.retrieve(
+ public_token="string",
+ )
"""
_response = self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", f"api/ats/v1/account-token/{public_token}"),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ request_options.get("additional_query_parameters") if request_options is not None else None
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(AccountToken, _response.json()) # type: ignore
@@ -43,18 +71,44 @@ class AsyncAccountTokenClient:
def __init__(self, *, client_wrapper: AsyncClientWrapper):
self._client_wrapper = client_wrapper
- async def retrieve(self, public_token: str) -> AccountToken:
+ async def retrieve(
+ self, public_token: str, *, request_options: typing.Optional[RequestOptions] = None
+ ) -> AccountToken:
"""
Returns the account token for the end user with the provided public token.
Parameters:
- public_token: str.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
+ ---
+ from merge.client import AsyncMerge
+
+ client = AsyncMerge(
+ account_token="YOUR_ACCOUNT_TOKEN",
+ api_key="YOUR_API_KEY",
+ )
+ await client.ats.account_token.retrieve(
+ public_token="string",
+ )
"""
_response = await self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", f"api/ats/v1/account-token/{public_token}"),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ request_options.get("additional_query_parameters") if request_options is not None else None
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(AccountToken, _response.json()) # type: ignore
diff --git a/src/merge/resources/ats/resources/activities/client.py b/src/merge/resources/ats/resources/activities/client.py
index e8e53558..9434b35a 100644
--- a/src/merge/resources/ats/resources/activities/client.py
+++ b/src/merge/resources/ats/resources/activities/client.py
@@ -5,13 +5,12 @@
import urllib.parse
from json.decoder import JSONDecodeError
-import typing_extensions
-
from .....core.api_error import ApiError
from .....core.client_wrapper import AsyncClientWrapper, SyncClientWrapper
from .....core.datetime_utils import serialize_datetime
from .....core.jsonable_encoder import jsonable_encoder
from .....core.remove_none_from_dict import remove_none_from_dict
+from .....core.request_options import RequestOptions
from ...types.activity import Activity
from ...types.activity_request import ActivityRequest
from ...types.activity_response import ActivityResponse
@@ -41,7 +40,7 @@ def list(
created_after: typing.Optional[dt.datetime] = None,
created_before: typing.Optional[dt.datetime] = None,
cursor: typing.Optional[str] = None,
- expand: typing.Optional[typing_extensions.Literal["user"]] = None,
+ expand: typing.Optional[typing.Literal["user"]] = None,
include_deleted_data: typing.Optional[bool] = None,
include_remote_data: typing.Optional[bool] = None,
modified_after: typing.Optional[dt.datetime] = None,
@@ -51,6 +50,7 @@ def list(
remote_id: typing.Optional[str] = None,
show_enum_origins: typing.Optional[ActivitiesListRequestShowEnumOrigins] = None,
user_id: typing.Optional[str] = None,
+ request_options: typing.Optional[RequestOptions] = None,
) -> PaginatedActivityList:
"""
Returns a list of `Activity` objects.
@@ -62,7 +62,7 @@ def list(
- cursor: typing.Optional[str]. The pagination cursor value.
- - expand: typing.Optional[typing_extensions.Literal["user"]]. Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces.
+ - expand: typing.Optional[typing.Literal["user"]]. Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces.
- include_deleted_data: typing.Optional[bool]. Whether to include data that was marked as deleted by third party webhooks.
@@ -81,6 +81,8 @@ def list(
- show_enum_origins: typing.Optional[ActivitiesListRequestShowEnumOrigins]. Which fields should be returned in non-normalized form.
- user_id: typing.Optional[str]. If provided, will only return activities done by this user.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import Merge
from merge.resources.ats import (
@@ -101,25 +103,41 @@ def list(
_response = self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/ats/v1/activities"),
- params=remove_none_from_dict(
- {
- "created_after": serialize_datetime(created_after) if created_after is not None else None,
- "created_before": serialize_datetime(created_before) if created_before is not None else None,
- "cursor": cursor,
- "expand": expand,
- "include_deleted_data": include_deleted_data,
- "include_remote_data": include_remote_data,
- "modified_after": serialize_datetime(modified_after) if modified_after is not None else None,
- "modified_before": serialize_datetime(modified_before) if modified_before is not None else None,
- "page_size": page_size,
- "remote_fields": remote_fields,
- "remote_id": remote_id,
- "show_enum_origins": show_enum_origins,
- "user_id": user_id,
- }
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "created_after": serialize_datetime(created_after) if created_after is not None else None,
+ "created_before": serialize_datetime(created_before) if created_before is not None else None,
+ "cursor": cursor,
+ "expand": expand,
+ "include_deleted_data": include_deleted_data,
+ "include_remote_data": include_remote_data,
+ "modified_after": serialize_datetime(modified_after) if modified_after is not None else None,
+ "modified_before": serialize_datetime(modified_before) if modified_before is not None else None,
+ "page_size": page_size,
+ "remote_fields": remote_fields,
+ "remote_id": remote_id,
+ "show_enum_origins": show_enum_origins,
+ "user_id": user_id,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(PaginatedActivityList, _response.json()) # type: ignore
@@ -136,6 +154,7 @@ def create(
run_async: typing.Optional[bool] = None,
model: ActivityRequest,
remote_user_id: str,
+ request_options: typing.Optional[RequestOptions] = None,
) -> ActivityResponse:
"""
Creates an `Activity` object with the given values.
@@ -148,14 +167,58 @@ def create(
- model: ActivityRequest.
- remote_user_id: str.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
+ ---
+ from merge.client import Merge
+ from merge.resources.ats import ActivityRequest
+
+ client = Merge(
+ account_token="YOUR_ACCOUNT_TOKEN",
+ api_key="YOUR_API_KEY",
+ )
+ client.ats.activities.create(
+ model=ActivityRequest(
+ subject="Gil Feig's interview",
+ body="Candidate loves integrations!!.",
+ candidate="03455bc6-6040-430a-848e-aafacbfdf4fg",
+ ),
+ remote_user_id="string",
+ )
"""
_response = self._client_wrapper.httpx_client.request(
"POST",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/ats/v1/activities"),
- params=remove_none_from_dict({"is_debug_mode": is_debug_mode, "run_async": run_async}),
- json=jsonable_encoder({"model": model, "remote_user_id": remote_user_id}),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "is_debug_mode": is_debug_mode,
+ "run_async": run_async,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ json=jsonable_encoder({"model": model, "remote_user_id": remote_user_id})
+ if request_options is None or request_options.get("additional_body_parameters") is None
+ else {
+ **jsonable_encoder({"model": model, "remote_user_id": remote_user_id}),
+ **(jsonable_encoder(remove_none_from_dict(request_options.get("additional_body_parameters", {})))),
+ },
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(ActivityResponse, _response.json()) # type: ignore
@@ -169,10 +232,11 @@ def retrieve(
self,
id: str,
*,
- expand: typing.Optional[typing_extensions.Literal["user"]] = None,
+ expand: typing.Optional[typing.Literal["user"]] = None,
include_remote_data: typing.Optional[bool] = None,
remote_fields: typing.Optional[ActivitiesRetrieveRequestRemoteFields] = None,
show_enum_origins: typing.Optional[ActivitiesRetrieveRequestShowEnumOrigins] = None,
+ request_options: typing.Optional[RequestOptions] = None,
) -> Activity:
"""
Returns an `Activity` object with the given `id`.
@@ -180,13 +244,15 @@ def retrieve(
Parameters:
- id: str.
- - expand: typing.Optional[typing_extensions.Literal["user"]]. Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces.
+ - expand: typing.Optional[typing.Literal["user"]]. Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces.
- include_remote_data: typing.Optional[bool]. Whether to include the original data Merge fetched from the third-party to produce these models.
- remote_fields: typing.Optional[ActivitiesRetrieveRequestRemoteFields]. Deprecated. Use show_enum_origins.
- show_enum_origins: typing.Optional[ActivitiesRetrieveRequestShowEnumOrigins]. Which fields should be returned in non-normalized form.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import Merge
from merge.resources.ats import (
@@ -199,7 +265,7 @@ def retrieve(
api_key="YOUR_API_KEY",
)
client.ats.activities.retrieve(
- id="id",
+ id="string",
expand="user",
remote_fields=ActivitiesRetrieveRequestRemoteFields.ACTIVITY_TYPE,
show_enum_origins=ActivitiesRetrieveRequestShowEnumOrigins.ACTIVITY_TYPE,
@@ -208,16 +274,32 @@ def retrieve(
_response = self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", f"api/ats/v1/activities/{id}"),
- params=remove_none_from_dict(
- {
- "expand": expand,
- "include_remote_data": include_remote_data,
- "remote_fields": remote_fields,
- "show_enum_origins": show_enum_origins,
- }
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "expand": expand,
+ "include_remote_data": include_remote_data,
+ "remote_fields": remote_fields,
+ "show_enum_origins": show_enum_origins,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(Activity, _response.json()) # type: ignore
@@ -227,10 +309,12 @@ def retrieve(
raise ApiError(status_code=_response.status_code, body=_response.text)
raise ApiError(status_code=_response.status_code, body=_response_json)
- def meta_post_retrieve(self) -> MetaResponse:
+ def meta_post_retrieve(self, *, request_options: typing.Optional[RequestOptions] = None) -> MetaResponse:
"""
Returns metadata for `Activity` POSTs.
+ Parameters:
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import Merge
@@ -243,8 +327,20 @@ def meta_post_retrieve(self) -> MetaResponse:
_response = self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/ats/v1/activities/meta/post"),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ request_options.get("additional_query_parameters") if request_options is not None else None
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(MetaResponse, _response.json()) # type: ignore
@@ -265,7 +361,7 @@ async def list(
created_after: typing.Optional[dt.datetime] = None,
created_before: typing.Optional[dt.datetime] = None,
cursor: typing.Optional[str] = None,
- expand: typing.Optional[typing_extensions.Literal["user"]] = None,
+ expand: typing.Optional[typing.Literal["user"]] = None,
include_deleted_data: typing.Optional[bool] = None,
include_remote_data: typing.Optional[bool] = None,
modified_after: typing.Optional[dt.datetime] = None,
@@ -275,6 +371,7 @@ async def list(
remote_id: typing.Optional[str] = None,
show_enum_origins: typing.Optional[ActivitiesListRequestShowEnumOrigins] = None,
user_id: typing.Optional[str] = None,
+ request_options: typing.Optional[RequestOptions] = None,
) -> PaginatedActivityList:
"""
Returns a list of `Activity` objects.
@@ -286,7 +383,7 @@ async def list(
- cursor: typing.Optional[str]. The pagination cursor value.
- - expand: typing.Optional[typing_extensions.Literal["user"]]. Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces.
+ - expand: typing.Optional[typing.Literal["user"]]. Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces.
- include_deleted_data: typing.Optional[bool]. Whether to include data that was marked as deleted by third party webhooks.
@@ -305,6 +402,8 @@ async def list(
- show_enum_origins: typing.Optional[ActivitiesListRequestShowEnumOrigins]. Which fields should be returned in non-normalized form.
- user_id: typing.Optional[str]. If provided, will only return activities done by this user.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import AsyncMerge
from merge.resources.ats import (
@@ -325,25 +424,41 @@ async def list(
_response = await self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/ats/v1/activities"),
- params=remove_none_from_dict(
- {
- "created_after": serialize_datetime(created_after) if created_after is not None else None,
- "created_before": serialize_datetime(created_before) if created_before is not None else None,
- "cursor": cursor,
- "expand": expand,
- "include_deleted_data": include_deleted_data,
- "include_remote_data": include_remote_data,
- "modified_after": serialize_datetime(modified_after) if modified_after is not None else None,
- "modified_before": serialize_datetime(modified_before) if modified_before is not None else None,
- "page_size": page_size,
- "remote_fields": remote_fields,
- "remote_id": remote_id,
- "show_enum_origins": show_enum_origins,
- "user_id": user_id,
- }
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "created_after": serialize_datetime(created_after) if created_after is not None else None,
+ "created_before": serialize_datetime(created_before) if created_before is not None else None,
+ "cursor": cursor,
+ "expand": expand,
+ "include_deleted_data": include_deleted_data,
+ "include_remote_data": include_remote_data,
+ "modified_after": serialize_datetime(modified_after) if modified_after is not None else None,
+ "modified_before": serialize_datetime(modified_before) if modified_before is not None else None,
+ "page_size": page_size,
+ "remote_fields": remote_fields,
+ "remote_id": remote_id,
+ "show_enum_origins": show_enum_origins,
+ "user_id": user_id,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(PaginatedActivityList, _response.json()) # type: ignore
@@ -360,6 +475,7 @@ async def create(
run_async: typing.Optional[bool] = None,
model: ActivityRequest,
remote_user_id: str,
+ request_options: typing.Optional[RequestOptions] = None,
) -> ActivityResponse:
"""
Creates an `Activity` object with the given values.
@@ -372,14 +488,58 @@ async def create(
- model: ActivityRequest.
- remote_user_id: str.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
+ ---
+ from merge.client import AsyncMerge
+ from merge.resources.ats import ActivityRequest
+
+ client = AsyncMerge(
+ account_token="YOUR_ACCOUNT_TOKEN",
+ api_key="YOUR_API_KEY",
+ )
+ await client.ats.activities.create(
+ model=ActivityRequest(
+ subject="Gil Feig's interview",
+ body="Candidate loves integrations!!.",
+ candidate="03455bc6-6040-430a-848e-aafacbfdf4fg",
+ ),
+ remote_user_id="string",
+ )
"""
_response = await self._client_wrapper.httpx_client.request(
"POST",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/ats/v1/activities"),
- params=remove_none_from_dict({"is_debug_mode": is_debug_mode, "run_async": run_async}),
- json=jsonable_encoder({"model": model, "remote_user_id": remote_user_id}),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "is_debug_mode": is_debug_mode,
+ "run_async": run_async,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ json=jsonable_encoder({"model": model, "remote_user_id": remote_user_id})
+ if request_options is None or request_options.get("additional_body_parameters") is None
+ else {
+ **jsonable_encoder({"model": model, "remote_user_id": remote_user_id}),
+ **(jsonable_encoder(remove_none_from_dict(request_options.get("additional_body_parameters", {})))),
+ },
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(ActivityResponse, _response.json()) # type: ignore
@@ -393,10 +553,11 @@ async def retrieve(
self,
id: str,
*,
- expand: typing.Optional[typing_extensions.Literal["user"]] = None,
+ expand: typing.Optional[typing.Literal["user"]] = None,
include_remote_data: typing.Optional[bool] = None,
remote_fields: typing.Optional[ActivitiesRetrieveRequestRemoteFields] = None,
show_enum_origins: typing.Optional[ActivitiesRetrieveRequestShowEnumOrigins] = None,
+ request_options: typing.Optional[RequestOptions] = None,
) -> Activity:
"""
Returns an `Activity` object with the given `id`.
@@ -404,13 +565,15 @@ async def retrieve(
Parameters:
- id: str.
- - expand: typing.Optional[typing_extensions.Literal["user"]]. Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces.
+ - expand: typing.Optional[typing.Literal["user"]]. Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces.
- include_remote_data: typing.Optional[bool]. Whether to include the original data Merge fetched from the third-party to produce these models.
- remote_fields: typing.Optional[ActivitiesRetrieveRequestRemoteFields]. Deprecated. Use show_enum_origins.
- show_enum_origins: typing.Optional[ActivitiesRetrieveRequestShowEnumOrigins]. Which fields should be returned in non-normalized form.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import AsyncMerge
from merge.resources.ats import (
@@ -423,7 +586,7 @@ async def retrieve(
api_key="YOUR_API_KEY",
)
await client.ats.activities.retrieve(
- id="id",
+ id="string",
expand="user",
remote_fields=ActivitiesRetrieveRequestRemoteFields.ACTIVITY_TYPE,
show_enum_origins=ActivitiesRetrieveRequestShowEnumOrigins.ACTIVITY_TYPE,
@@ -432,16 +595,32 @@ async def retrieve(
_response = await self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", f"api/ats/v1/activities/{id}"),
- params=remove_none_from_dict(
- {
- "expand": expand,
- "include_remote_data": include_remote_data,
- "remote_fields": remote_fields,
- "show_enum_origins": show_enum_origins,
- }
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "expand": expand,
+ "include_remote_data": include_remote_data,
+ "remote_fields": remote_fields,
+ "show_enum_origins": show_enum_origins,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(Activity, _response.json()) # type: ignore
@@ -451,10 +630,12 @@ async def retrieve(
raise ApiError(status_code=_response.status_code, body=_response.text)
raise ApiError(status_code=_response.status_code, body=_response_json)
- async def meta_post_retrieve(self) -> MetaResponse:
+ async def meta_post_retrieve(self, *, request_options: typing.Optional[RequestOptions] = None) -> MetaResponse:
"""
Returns metadata for `Activity` POSTs.
+ Parameters:
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import AsyncMerge
@@ -467,8 +648,20 @@ async def meta_post_retrieve(self) -> MetaResponse:
_response = await self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/ats/v1/activities/meta/post"),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ request_options.get("additional_query_parameters") if request_options is not None else None
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(MetaResponse, _response.json()) # type: ignore
diff --git a/src/merge/resources/ats/resources/applications/client.py b/src/merge/resources/ats/resources/applications/client.py
index 7008cb74..44bdd482 100644
--- a/src/merge/resources/ats/resources/applications/client.py
+++ b/src/merge/resources/ats/resources/applications/client.py
@@ -10,6 +10,7 @@
from .....core.datetime_utils import serialize_datetime
from .....core.jsonable_encoder import jsonable_encoder
from .....core.remove_none_from_dict import remove_none_from_dict
+from .....core.request_options import RequestOptions
from ...types.application import Application
from ...types.application_request import ApplicationRequest
from ...types.application_response import ApplicationResponse
@@ -50,6 +51,7 @@ def list(
reject_reason_id: typing.Optional[str] = None,
remote_id: typing.Optional[str] = None,
source: typing.Optional[str] = None,
+ request_options: typing.Optional[RequestOptions] = None,
) -> PaginatedApplicationList:
"""
Returns a list of `Application` objects.
@@ -86,6 +88,8 @@ def list(
- remote_id: typing.Optional[str]. The API provider's ID for the given object.
- source: typing.Optional[str]. If provided, will only return applications with this source.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import Merge
from merge.resources.ats import ApplicationsListRequestExpand
@@ -101,28 +105,44 @@ def list(
_response = self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/ats/v1/applications"),
- params=remove_none_from_dict(
- {
- "candidate_id": candidate_id,
- "created_after": serialize_datetime(created_after) if created_after is not None else None,
- "created_before": serialize_datetime(created_before) if created_before is not None else None,
- "credited_to_id": credited_to_id,
- "current_stage_id": current_stage_id,
- "cursor": cursor,
- "expand": expand,
- "include_deleted_data": include_deleted_data,
- "include_remote_data": include_remote_data,
- "job_id": job_id,
- "modified_after": serialize_datetime(modified_after) if modified_after is not None else None,
- "modified_before": serialize_datetime(modified_before) if modified_before is not None else None,
- "page_size": page_size,
- "reject_reason_id": reject_reason_id,
- "remote_id": remote_id,
- "source": source,
- }
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "candidate_id": candidate_id,
+ "created_after": serialize_datetime(created_after) if created_after is not None else None,
+ "created_before": serialize_datetime(created_before) if created_before is not None else None,
+ "credited_to_id": credited_to_id,
+ "current_stage_id": current_stage_id,
+ "cursor": cursor,
+ "expand": expand,
+ "include_deleted_data": include_deleted_data,
+ "include_remote_data": include_remote_data,
+ "job_id": job_id,
+ "modified_after": serialize_datetime(modified_after) if modified_after is not None else None,
+ "modified_before": serialize_datetime(modified_before) if modified_before is not None else None,
+ "page_size": page_size,
+ "reject_reason_id": reject_reason_id,
+ "remote_id": remote_id,
+ "source": source,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(PaginatedApplicationList, _response.json()) # type: ignore
@@ -139,6 +159,7 @@ def create(
run_async: typing.Optional[bool] = None,
model: ApplicationRequest,
remote_user_id: str,
+ request_options: typing.Optional[RequestOptions] = None,
) -> ApplicationResponse:
"""
Creates an `Application` object with the given values.
@@ -151,14 +172,65 @@ def create(
- model: ApplicationRequest.
- remote_user_id: str.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
+ ---
+ import datetime
+
+ from merge.client import Merge
+ from merge.resources.ats import ApplicationRequest
+
+ client = Merge(
+ account_token="YOUR_ACCOUNT_TOKEN",
+ api_key="YOUR_API_KEY",
+ )
+ client.ats.applications.create(
+ model=ApplicationRequest(
+ applied_at=datetime.datetime.fromisoformat(
+ "2021-10-15 00:00:00+00:00",
+ ),
+ rejected_at=datetime.datetime.fromisoformat(
+ "2021-11-15 00:00:00+00:00",
+ ),
+ source="Campus recruiting event",
+ remote_template_id="92830948203",
+ ),
+ remote_user_id="string",
+ )
"""
_response = self._client_wrapper.httpx_client.request(
"POST",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/ats/v1/applications"),
- params=remove_none_from_dict({"is_debug_mode": is_debug_mode, "run_async": run_async}),
- json=jsonable_encoder({"model": model, "remote_user_id": remote_user_id}),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "is_debug_mode": is_debug_mode,
+ "run_async": run_async,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ json=jsonable_encoder({"model": model, "remote_user_id": remote_user_id})
+ if request_options is None or request_options.get("additional_body_parameters") is None
+ else {
+ **jsonable_encoder({"model": model, "remote_user_id": remote_user_id}),
+ **(jsonable_encoder(remove_none_from_dict(request_options.get("additional_body_parameters", {})))),
+ },
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(ApplicationResponse, _response.json()) # type: ignore
@@ -174,6 +246,7 @@ def retrieve(
*,
expand: typing.Optional[ApplicationsRetrieveRequestExpand] = None,
include_remote_data: typing.Optional[bool] = None,
+ request_options: typing.Optional[RequestOptions] = None,
) -> Application:
"""
Returns an `Application` object with the given `id`.
@@ -184,6 +257,8 @@ def retrieve(
- expand: typing.Optional[ApplicationsRetrieveRequestExpand]. Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces.
- include_remote_data: typing.Optional[bool]. Whether to include the original data Merge fetched from the third-party to produce these models.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import Merge
from merge.resources.ats import ApplicationsRetrieveRequestExpand
@@ -193,16 +268,37 @@ def retrieve(
api_key="YOUR_API_KEY",
)
client.ats.applications.retrieve(
- id="id",
+ id="string",
expand=ApplicationsRetrieveRequestExpand.CANDIDATE,
)
"""
_response = self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", f"api/ats/v1/applications/{id}"),
- params=remove_none_from_dict({"expand": expand, "include_remote_data": include_remote_data}),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "expand": expand,
+ "include_remote_data": include_remote_data,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(Application, _response.json()) # type: ignore
@@ -220,6 +316,7 @@ def change_stage_create(
run_async: typing.Optional[bool] = None,
job_interview_stage: typing.Optional[str] = OMIT,
remote_user_id: typing.Optional[str] = OMIT,
+ request_options: typing.Optional[RequestOptions] = None,
) -> ApplicationResponse:
"""
Updates the `current_stage` field of an `Application` object
@@ -234,6 +331,8 @@ def change_stage_create(
- job_interview_stage: typing.Optional[str]. The interview stage to move the application to.
- remote_user_id: typing.Optional[str].
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import Merge
@@ -242,7 +341,7 @@ def change_stage_create(
api_key="YOUR_API_KEY",
)
client.ats.applications.change_stage_create(
- id="id",
+ id="string",
)
"""
_request: typing.Dict[str, typing.Any] = {}
@@ -255,10 +354,36 @@ def change_stage_create(
urllib.parse.urljoin(
f"{self._client_wrapper.get_base_url()}/", f"api/ats/v1/applications/{id}/change-stage"
),
- params=remove_none_from_dict({"is_debug_mode": is_debug_mode, "run_async": run_async}),
- json=jsonable_encoder(_request),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "is_debug_mode": is_debug_mode,
+ "run_async": run_async,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ json=jsonable_encoder(_request)
+ if request_options is None or request_options.get("additional_body_parameters") is None
+ else {
+ **jsonable_encoder(_request),
+ **(jsonable_encoder(remove_none_from_dict(request_options.get("additional_body_parameters", {})))),
+ },
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(ApplicationResponse, _response.json()) # type: ignore
@@ -268,12 +393,19 @@ def change_stage_create(
raise ApiError(status_code=_response.status_code, body=_response.text)
raise ApiError(status_code=_response.status_code, body=_response_json)
- def meta_post_retrieve(self, *, application_remote_template_id: typing.Optional[str] = None) -> MetaResponse:
+ def meta_post_retrieve(
+ self,
+ *,
+ application_remote_template_id: typing.Optional[str] = None,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> MetaResponse:
"""
Returns metadata for `Application` POSTs.
Parameters:
- application_remote_template_id: typing.Optional[str]. The template ID associated with the nested application in the request.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import Merge
@@ -286,9 +418,29 @@ def meta_post_retrieve(self, *, application_remote_template_id: typing.Optional[
_response = self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/ats/v1/applications/meta/post"),
- params=remove_none_from_dict({"application_remote_template_id": application_remote_template_id}),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "application_remote_template_id": application_remote_template_id,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(MetaResponse, _response.json()) # type: ignore
@@ -322,6 +474,7 @@ async def list(
reject_reason_id: typing.Optional[str] = None,
remote_id: typing.Optional[str] = None,
source: typing.Optional[str] = None,
+ request_options: typing.Optional[RequestOptions] = None,
) -> PaginatedApplicationList:
"""
Returns a list of `Application` objects.
@@ -358,6 +511,8 @@ async def list(
- remote_id: typing.Optional[str]. The API provider's ID for the given object.
- source: typing.Optional[str]. If provided, will only return applications with this source.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import AsyncMerge
from merge.resources.ats import ApplicationsListRequestExpand
@@ -373,28 +528,44 @@ async def list(
_response = await self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/ats/v1/applications"),
- params=remove_none_from_dict(
- {
- "candidate_id": candidate_id,
- "created_after": serialize_datetime(created_after) if created_after is not None else None,
- "created_before": serialize_datetime(created_before) if created_before is not None else None,
- "credited_to_id": credited_to_id,
- "current_stage_id": current_stage_id,
- "cursor": cursor,
- "expand": expand,
- "include_deleted_data": include_deleted_data,
- "include_remote_data": include_remote_data,
- "job_id": job_id,
- "modified_after": serialize_datetime(modified_after) if modified_after is not None else None,
- "modified_before": serialize_datetime(modified_before) if modified_before is not None else None,
- "page_size": page_size,
- "reject_reason_id": reject_reason_id,
- "remote_id": remote_id,
- "source": source,
- }
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "candidate_id": candidate_id,
+ "created_after": serialize_datetime(created_after) if created_after is not None else None,
+ "created_before": serialize_datetime(created_before) if created_before is not None else None,
+ "credited_to_id": credited_to_id,
+ "current_stage_id": current_stage_id,
+ "cursor": cursor,
+ "expand": expand,
+ "include_deleted_data": include_deleted_data,
+ "include_remote_data": include_remote_data,
+ "job_id": job_id,
+ "modified_after": serialize_datetime(modified_after) if modified_after is not None else None,
+ "modified_before": serialize_datetime(modified_before) if modified_before is not None else None,
+ "page_size": page_size,
+ "reject_reason_id": reject_reason_id,
+ "remote_id": remote_id,
+ "source": source,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(PaginatedApplicationList, _response.json()) # type: ignore
@@ -411,6 +582,7 @@ async def create(
run_async: typing.Optional[bool] = None,
model: ApplicationRequest,
remote_user_id: str,
+ request_options: typing.Optional[RequestOptions] = None,
) -> ApplicationResponse:
"""
Creates an `Application` object with the given values.
@@ -423,14 +595,65 @@ async def create(
- model: ApplicationRequest.
- remote_user_id: str.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
+ ---
+ import datetime
+
+ from merge.client import AsyncMerge
+ from merge.resources.ats import ApplicationRequest
+
+ client = AsyncMerge(
+ account_token="YOUR_ACCOUNT_TOKEN",
+ api_key="YOUR_API_KEY",
+ )
+ await client.ats.applications.create(
+ model=ApplicationRequest(
+ applied_at=datetime.datetime.fromisoformat(
+ "2021-10-15 00:00:00+00:00",
+ ),
+ rejected_at=datetime.datetime.fromisoformat(
+ "2021-11-15 00:00:00+00:00",
+ ),
+ source="Campus recruiting event",
+ remote_template_id="92830948203",
+ ),
+ remote_user_id="string",
+ )
"""
_response = await self._client_wrapper.httpx_client.request(
"POST",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/ats/v1/applications"),
- params=remove_none_from_dict({"is_debug_mode": is_debug_mode, "run_async": run_async}),
- json=jsonable_encoder({"model": model, "remote_user_id": remote_user_id}),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "is_debug_mode": is_debug_mode,
+ "run_async": run_async,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ json=jsonable_encoder({"model": model, "remote_user_id": remote_user_id})
+ if request_options is None or request_options.get("additional_body_parameters") is None
+ else {
+ **jsonable_encoder({"model": model, "remote_user_id": remote_user_id}),
+ **(jsonable_encoder(remove_none_from_dict(request_options.get("additional_body_parameters", {})))),
+ },
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(ApplicationResponse, _response.json()) # type: ignore
@@ -446,6 +669,7 @@ async def retrieve(
*,
expand: typing.Optional[ApplicationsRetrieveRequestExpand] = None,
include_remote_data: typing.Optional[bool] = None,
+ request_options: typing.Optional[RequestOptions] = None,
) -> Application:
"""
Returns an `Application` object with the given `id`.
@@ -456,6 +680,8 @@ async def retrieve(
- expand: typing.Optional[ApplicationsRetrieveRequestExpand]. Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces.
- include_remote_data: typing.Optional[bool]. Whether to include the original data Merge fetched from the third-party to produce these models.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import AsyncMerge
from merge.resources.ats import ApplicationsRetrieveRequestExpand
@@ -465,16 +691,37 @@ async def retrieve(
api_key="YOUR_API_KEY",
)
await client.ats.applications.retrieve(
- id="id",
+ id="string",
expand=ApplicationsRetrieveRequestExpand.CANDIDATE,
)
"""
_response = await self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", f"api/ats/v1/applications/{id}"),
- params=remove_none_from_dict({"expand": expand, "include_remote_data": include_remote_data}),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "expand": expand,
+ "include_remote_data": include_remote_data,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(Application, _response.json()) # type: ignore
@@ -492,6 +739,7 @@ async def change_stage_create(
run_async: typing.Optional[bool] = None,
job_interview_stage: typing.Optional[str] = OMIT,
remote_user_id: typing.Optional[str] = OMIT,
+ request_options: typing.Optional[RequestOptions] = None,
) -> ApplicationResponse:
"""
Updates the `current_stage` field of an `Application` object
@@ -506,6 +754,8 @@ async def change_stage_create(
- job_interview_stage: typing.Optional[str]. The interview stage to move the application to.
- remote_user_id: typing.Optional[str].
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import AsyncMerge
@@ -514,7 +764,7 @@ async def change_stage_create(
api_key="YOUR_API_KEY",
)
await client.ats.applications.change_stage_create(
- id="id",
+ id="string",
)
"""
_request: typing.Dict[str, typing.Any] = {}
@@ -527,10 +777,36 @@ async def change_stage_create(
urllib.parse.urljoin(
f"{self._client_wrapper.get_base_url()}/", f"api/ats/v1/applications/{id}/change-stage"
),
- params=remove_none_from_dict({"is_debug_mode": is_debug_mode, "run_async": run_async}),
- json=jsonable_encoder(_request),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "is_debug_mode": is_debug_mode,
+ "run_async": run_async,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ json=jsonable_encoder(_request)
+ if request_options is None or request_options.get("additional_body_parameters") is None
+ else {
+ **jsonable_encoder(_request),
+ **(jsonable_encoder(remove_none_from_dict(request_options.get("additional_body_parameters", {})))),
+ },
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(ApplicationResponse, _response.json()) # type: ignore
@@ -540,12 +816,19 @@ async def change_stage_create(
raise ApiError(status_code=_response.status_code, body=_response.text)
raise ApiError(status_code=_response.status_code, body=_response_json)
- async def meta_post_retrieve(self, *, application_remote_template_id: typing.Optional[str] = None) -> MetaResponse:
+ async def meta_post_retrieve(
+ self,
+ *,
+ application_remote_template_id: typing.Optional[str] = None,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> MetaResponse:
"""
Returns metadata for `Application` POSTs.
Parameters:
- application_remote_template_id: typing.Optional[str]. The template ID associated with the nested application in the request.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import AsyncMerge
@@ -558,9 +841,29 @@ async def meta_post_retrieve(self, *, application_remote_template_id: typing.Opt
_response = await self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/ats/v1/applications/meta/post"),
- params=remove_none_from_dict({"application_remote_template_id": application_remote_template_id}),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "application_remote_template_id": application_remote_template_id,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(MetaResponse, _response.json()) # type: ignore
diff --git a/src/merge/resources/ats/resources/async_passthrough/client.py b/src/merge/resources/ats/resources/async_passthrough/client.py
index b7b0b209..f28e1cff 100644
--- a/src/merge/resources/ats/resources/async_passthrough/client.py
+++ b/src/merge/resources/ats/resources/async_passthrough/client.py
@@ -7,6 +7,8 @@
from .....core.api_error import ApiError
from .....core.client_wrapper import AsyncClientWrapper, SyncClientWrapper
from .....core.jsonable_encoder import jsonable_encoder
+from .....core.remove_none_from_dict import remove_none_from_dict
+from .....core.request_options import RequestOptions
from ...types.async_passthrough_reciept import AsyncPassthroughReciept
from ...types.data_passthrough_request import DataPassthroughRequest
from ...types.remote_response import RemoteResponse
@@ -24,18 +26,21 @@ class AsyncPassthroughClient:
def __init__(self, *, client_wrapper: SyncClientWrapper):
self._client_wrapper = client_wrapper
- def create(self, *, request: DataPassthroughRequest) -> AsyncPassthroughReciept:
+ def create(
+ self, *, request: DataPassthroughRequest, request_options: typing.Optional[RequestOptions] = None
+ ) -> AsyncPassthroughReciept:
"""
Asynchronously pull data from an endpoint not currently supported by Merge.
Parameters:
- request: DataPassthroughRequest.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import Merge
from merge.resources.ats import (
DataPassthroughRequest,
MethodEnum,
- MultipartFormFieldRequest,
RequestFormatEnum,
)
@@ -48,14 +53,6 @@ def create(self, *, request: DataPassthroughRequest) -> AsyncPassthroughReciept:
method=MethodEnum.GET,
path="/scooters",
data='{"company": "Lime", "model": "Gen 2.5"}',
- multipart_form_data=[
- MultipartFormFieldRequest(
- name="resume",
- data="SW50ZWdyYXRlIGZhc3QKSW50ZWdyYXRlIG9uY2U=",
- file_name="resume.pdf",
- content_type="application/pdf",
- )
- ],
request_format=RequestFormatEnum.JSON,
),
)
@@ -63,9 +60,26 @@ def create(self, *, request: DataPassthroughRequest) -> AsyncPassthroughReciept:
_response = self._client_wrapper.httpx_client.request(
"POST",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/ats/v1/async-passthrough"),
- json=jsonable_encoder(request),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ request_options.get("additional_query_parameters") if request_options is not None else None
+ ),
+ json=jsonable_encoder(request)
+ if request_options is None or request_options.get("additional_body_parameters") is None
+ else {
+ **jsonable_encoder(request),
+ **(jsonable_encoder(remove_none_from_dict(request_options.get("additional_body_parameters", {})))),
+ },
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(AsyncPassthroughReciept, _response.json()) # type: ignore
@@ -75,12 +89,26 @@ def create(self, *, request: DataPassthroughRequest) -> AsyncPassthroughReciept:
raise ApiError(status_code=_response.status_code, body=_response.text)
raise ApiError(status_code=_response.status_code, body=_response_json)
- def retrieve(self, async_passthrough_receipt_id: str) -> RemoteResponse:
+ def retrieve(
+ self, async_passthrough_receipt_id: str, *, request_options: typing.Optional[RequestOptions] = None
+ ) -> RemoteResponse:
"""
Retrieves data from earlier async-passthrough POST request
Parameters:
- async_passthrough_receipt_id: str.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
+ ---
+ from merge.client import Merge
+
+ client = Merge(
+ account_token="YOUR_ACCOUNT_TOKEN",
+ api_key="YOUR_API_KEY",
+ )
+ client.ats.async_passthrough.retrieve(
+ async_passthrough_receipt_id="string",
+ )
"""
_response = self._client_wrapper.httpx_client.request(
"GET",
@@ -88,8 +116,20 @@ def retrieve(self, async_passthrough_receipt_id: str) -> RemoteResponse:
f"{self._client_wrapper.get_base_url()}/",
f"api/ats/v1/async-passthrough/{async_passthrough_receipt_id}",
),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ request_options.get("additional_query_parameters") if request_options is not None else None
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(RemoteResponse, _response.json()) # type: ignore
@@ -104,18 +144,21 @@ class AsyncAsyncPassthroughClient:
def __init__(self, *, client_wrapper: AsyncClientWrapper):
self._client_wrapper = client_wrapper
- async def create(self, *, request: DataPassthroughRequest) -> AsyncPassthroughReciept:
+ async def create(
+ self, *, request: DataPassthroughRequest, request_options: typing.Optional[RequestOptions] = None
+ ) -> AsyncPassthroughReciept:
"""
Asynchronously pull data from an endpoint not currently supported by Merge.
Parameters:
- request: DataPassthroughRequest.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import AsyncMerge
from merge.resources.ats import (
DataPassthroughRequest,
MethodEnum,
- MultipartFormFieldRequest,
RequestFormatEnum,
)
@@ -128,14 +171,6 @@ async def create(self, *, request: DataPassthroughRequest) -> AsyncPassthroughRe
method=MethodEnum.GET,
path="/scooters",
data='{"company": "Lime", "model": "Gen 2.5"}',
- multipart_form_data=[
- MultipartFormFieldRequest(
- name="resume",
- data="SW50ZWdyYXRlIGZhc3QKSW50ZWdyYXRlIG9uY2U=",
- file_name="resume.pdf",
- content_type="application/pdf",
- )
- ],
request_format=RequestFormatEnum.JSON,
),
)
@@ -143,9 +178,26 @@ async def create(self, *, request: DataPassthroughRequest) -> AsyncPassthroughRe
_response = await self._client_wrapper.httpx_client.request(
"POST",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/ats/v1/async-passthrough"),
- json=jsonable_encoder(request),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ request_options.get("additional_query_parameters") if request_options is not None else None
+ ),
+ json=jsonable_encoder(request)
+ if request_options is None or request_options.get("additional_body_parameters") is None
+ else {
+ **jsonable_encoder(request),
+ **(jsonable_encoder(remove_none_from_dict(request_options.get("additional_body_parameters", {})))),
+ },
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(AsyncPassthroughReciept, _response.json()) # type: ignore
@@ -155,12 +207,26 @@ async def create(self, *, request: DataPassthroughRequest) -> AsyncPassthroughRe
raise ApiError(status_code=_response.status_code, body=_response.text)
raise ApiError(status_code=_response.status_code, body=_response_json)
- async def retrieve(self, async_passthrough_receipt_id: str) -> RemoteResponse:
+ async def retrieve(
+ self, async_passthrough_receipt_id: str, *, request_options: typing.Optional[RequestOptions] = None
+ ) -> RemoteResponse:
"""
Retrieves data from earlier async-passthrough POST request
Parameters:
- async_passthrough_receipt_id: str.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
+ ---
+ from merge.client import AsyncMerge
+
+ client = AsyncMerge(
+ account_token="YOUR_ACCOUNT_TOKEN",
+ api_key="YOUR_API_KEY",
+ )
+ await client.ats.async_passthrough.retrieve(
+ async_passthrough_receipt_id="string",
+ )
"""
_response = await self._client_wrapper.httpx_client.request(
"GET",
@@ -168,8 +234,20 @@ async def retrieve(self, async_passthrough_receipt_id: str) -> RemoteResponse:
f"{self._client_wrapper.get_base_url()}/",
f"api/ats/v1/async-passthrough/{async_passthrough_receipt_id}",
),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ request_options.get("additional_query_parameters") if request_options is not None else None
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(RemoteResponse, _response.json()) # type: ignore
diff --git a/src/merge/resources/ats/resources/attachments/client.py b/src/merge/resources/ats/resources/attachments/client.py
index 6de4c7b8..601e9ccb 100644
--- a/src/merge/resources/ats/resources/attachments/client.py
+++ b/src/merge/resources/ats/resources/attachments/client.py
@@ -5,13 +5,12 @@
import urllib.parse
from json.decoder import JSONDecodeError
-import typing_extensions
-
from .....core.api_error import ApiError
from .....core.client_wrapper import AsyncClientWrapper, SyncClientWrapper
from .....core.datetime_utils import serialize_datetime
from .....core.jsonable_encoder import jsonable_encoder
from .....core.remove_none_from_dict import remove_none_from_dict
+from .....core.request_options import RequestOptions
from ...types.attachment import Attachment
from ...types.attachment_request import AttachmentRequest
from ...types.attachment_response import AttachmentResponse
@@ -38,15 +37,16 @@ def list(
created_after: typing.Optional[dt.datetime] = None,
created_before: typing.Optional[dt.datetime] = None,
cursor: typing.Optional[str] = None,
- expand: typing.Optional[typing_extensions.Literal["candidate"]] = None,
+ expand: typing.Optional[typing.Literal["candidate"]] = None,
include_deleted_data: typing.Optional[bool] = None,
include_remote_data: typing.Optional[bool] = None,
modified_after: typing.Optional[dt.datetime] = None,
modified_before: typing.Optional[dt.datetime] = None,
page_size: typing.Optional[int] = None,
- remote_fields: typing.Optional[typing_extensions.Literal["attachment_type"]] = None,
+ remote_fields: typing.Optional[typing.Literal["attachment_type"]] = None,
remote_id: typing.Optional[str] = None,
- show_enum_origins: typing.Optional[typing_extensions.Literal["attachment_type"]] = None,
+ show_enum_origins: typing.Optional[typing.Literal["attachment_type"]] = None,
+ request_options: typing.Optional[RequestOptions] = None,
) -> PaginatedAttachmentList:
"""
Returns a list of `Attachment` objects.
@@ -60,7 +60,7 @@ def list(
- cursor: typing.Optional[str]. The pagination cursor value.
- - expand: typing.Optional[typing_extensions.Literal["candidate"]]. Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces.
+ - expand: typing.Optional[typing.Literal["candidate"]]. Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces.
- include_deleted_data: typing.Optional[bool]. Whether to include data that was marked as deleted by third party webhooks.
@@ -72,11 +72,13 @@ def list(
- page_size: typing.Optional[int]. Number of results to return per page.
- - remote_fields: typing.Optional[typing_extensions.Literal["attachment_type"]]. Deprecated. Use show_enum_origins.
+ - remote_fields: typing.Optional[typing.Literal["attachment_type"]]. Deprecated. Use show_enum_origins.
- remote_id: typing.Optional[str]. The API provider's ID for the given object.
- - show_enum_origins: typing.Optional[typing_extensions.Literal["attachment_type"]]. Which fields should be returned in non-normalized form.
+ - show_enum_origins: typing.Optional[typing.Literal["attachment_type"]]. Which fields should be returned in non-normalized form.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import Merge
@@ -93,25 +95,41 @@ def list(
_response = self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/ats/v1/attachments"),
- params=remove_none_from_dict(
- {
- "candidate_id": candidate_id,
- "created_after": serialize_datetime(created_after) if created_after is not None else None,
- "created_before": serialize_datetime(created_before) if created_before is not None else None,
- "cursor": cursor,
- "expand": expand,
- "include_deleted_data": include_deleted_data,
- "include_remote_data": include_remote_data,
- "modified_after": serialize_datetime(modified_after) if modified_after is not None else None,
- "modified_before": serialize_datetime(modified_before) if modified_before is not None else None,
- "page_size": page_size,
- "remote_fields": remote_fields,
- "remote_id": remote_id,
- "show_enum_origins": show_enum_origins,
- }
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "candidate_id": candidate_id,
+ "created_after": serialize_datetime(created_after) if created_after is not None else None,
+ "created_before": serialize_datetime(created_before) if created_before is not None else None,
+ "cursor": cursor,
+ "expand": expand,
+ "include_deleted_data": include_deleted_data,
+ "include_remote_data": include_remote_data,
+ "modified_after": serialize_datetime(modified_after) if modified_after is not None else None,
+ "modified_before": serialize_datetime(modified_before) if modified_before is not None else None,
+ "page_size": page_size,
+ "remote_fields": remote_fields,
+ "remote_id": remote_id,
+ "show_enum_origins": show_enum_origins,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(PaginatedAttachmentList, _response.json()) # type: ignore
@@ -128,6 +146,7 @@ def create(
run_async: typing.Optional[bool] = None,
model: AttachmentRequest,
remote_user_id: str,
+ request_options: typing.Optional[RequestOptions] = None,
) -> AttachmentResponse:
"""
Creates an `Attachment` object with the given values.
@@ -140,14 +159,58 @@ def create(
- model: AttachmentRequest.
- remote_user_id: str.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
+ ---
+ from merge.client import Merge
+ from merge.resources.ats import AttachmentRequest
+
+ client = Merge(
+ account_token="YOUR_ACCOUNT_TOKEN",
+ api_key="YOUR_API_KEY",
+ )
+ client.ats.attachments.create(
+ model=AttachmentRequest(
+ file_name="Candidate Resume",
+ file_url="http://alturl.com/p749b",
+ candidate="2872ba14-4084-492b-be96-e5eee6fc33ef",
+ ),
+ remote_user_id="string",
+ )
"""
_response = self._client_wrapper.httpx_client.request(
"POST",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/ats/v1/attachments"),
- params=remove_none_from_dict({"is_debug_mode": is_debug_mode, "run_async": run_async}),
- json=jsonable_encoder({"model": model, "remote_user_id": remote_user_id}),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "is_debug_mode": is_debug_mode,
+ "run_async": run_async,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ json=jsonable_encoder({"model": model, "remote_user_id": remote_user_id})
+ if request_options is None or request_options.get("additional_body_parameters") is None
+ else {
+ **jsonable_encoder({"model": model, "remote_user_id": remote_user_id}),
+ **(jsonable_encoder(remove_none_from_dict(request_options.get("additional_body_parameters", {})))),
+ },
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(AttachmentResponse, _response.json()) # type: ignore
@@ -161,10 +224,11 @@ def retrieve(
self,
id: str,
*,
- expand: typing.Optional[typing_extensions.Literal["candidate"]] = None,
+ expand: typing.Optional[typing.Literal["candidate"]] = None,
include_remote_data: typing.Optional[bool] = None,
- remote_fields: typing.Optional[typing_extensions.Literal["attachment_type"]] = None,
- show_enum_origins: typing.Optional[typing_extensions.Literal["attachment_type"]] = None,
+ remote_fields: typing.Optional[typing.Literal["attachment_type"]] = None,
+ show_enum_origins: typing.Optional[typing.Literal["attachment_type"]] = None,
+ request_options: typing.Optional[RequestOptions] = None,
) -> Attachment:
"""
Returns an `Attachment` object with the given `id`.
@@ -172,13 +236,15 @@ def retrieve(
Parameters:
- id: str.
- - expand: typing.Optional[typing_extensions.Literal["candidate"]]. Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces.
+ - expand: typing.Optional[typing.Literal["candidate"]]. Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces.
- include_remote_data: typing.Optional[bool]. Whether to include the original data Merge fetched from the third-party to produce these models.
- - remote_fields: typing.Optional[typing_extensions.Literal["attachment_type"]]. Deprecated. Use show_enum_origins.
+ - remote_fields: typing.Optional[typing.Literal["attachment_type"]]. Deprecated. Use show_enum_origins.
- - show_enum_origins: typing.Optional[typing_extensions.Literal["attachment_type"]]. Which fields should be returned in non-normalized form.
+ - show_enum_origins: typing.Optional[typing.Literal["attachment_type"]]. Which fields should be returned in non-normalized form.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import Merge
@@ -187,7 +253,7 @@ def retrieve(
api_key="YOUR_API_KEY",
)
client.ats.attachments.retrieve(
- id="id",
+ id="string",
expand="candidate",
remote_fields="attachment_type",
show_enum_origins="attachment_type",
@@ -196,16 +262,32 @@ def retrieve(
_response = self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", f"api/ats/v1/attachments/{id}"),
- params=remove_none_from_dict(
- {
- "expand": expand,
- "include_remote_data": include_remote_data,
- "remote_fields": remote_fields,
- "show_enum_origins": show_enum_origins,
- }
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "expand": expand,
+ "include_remote_data": include_remote_data,
+ "remote_fields": remote_fields,
+ "show_enum_origins": show_enum_origins,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(Attachment, _response.json()) # type: ignore
@@ -215,10 +297,12 @@ def retrieve(
raise ApiError(status_code=_response.status_code, body=_response.text)
raise ApiError(status_code=_response.status_code, body=_response_json)
- def meta_post_retrieve(self) -> MetaResponse:
+ def meta_post_retrieve(self, *, request_options: typing.Optional[RequestOptions] = None) -> MetaResponse:
"""
Returns metadata for `Attachment` POSTs.
+ Parameters:
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import Merge
@@ -231,8 +315,20 @@ def meta_post_retrieve(self) -> MetaResponse:
_response = self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/ats/v1/attachments/meta/post"),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ request_options.get("additional_query_parameters") if request_options is not None else None
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(MetaResponse, _response.json()) # type: ignore
@@ -254,15 +350,16 @@ async def list(
created_after: typing.Optional[dt.datetime] = None,
created_before: typing.Optional[dt.datetime] = None,
cursor: typing.Optional[str] = None,
- expand: typing.Optional[typing_extensions.Literal["candidate"]] = None,
+ expand: typing.Optional[typing.Literal["candidate"]] = None,
include_deleted_data: typing.Optional[bool] = None,
include_remote_data: typing.Optional[bool] = None,
modified_after: typing.Optional[dt.datetime] = None,
modified_before: typing.Optional[dt.datetime] = None,
page_size: typing.Optional[int] = None,
- remote_fields: typing.Optional[typing_extensions.Literal["attachment_type"]] = None,
+ remote_fields: typing.Optional[typing.Literal["attachment_type"]] = None,
remote_id: typing.Optional[str] = None,
- show_enum_origins: typing.Optional[typing_extensions.Literal["attachment_type"]] = None,
+ show_enum_origins: typing.Optional[typing.Literal["attachment_type"]] = None,
+ request_options: typing.Optional[RequestOptions] = None,
) -> PaginatedAttachmentList:
"""
Returns a list of `Attachment` objects.
@@ -276,7 +373,7 @@ async def list(
- cursor: typing.Optional[str]. The pagination cursor value.
- - expand: typing.Optional[typing_extensions.Literal["candidate"]]. Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces.
+ - expand: typing.Optional[typing.Literal["candidate"]]. Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces.
- include_deleted_data: typing.Optional[bool]. Whether to include data that was marked as deleted by third party webhooks.
@@ -288,11 +385,13 @@ async def list(
- page_size: typing.Optional[int]. Number of results to return per page.
- - remote_fields: typing.Optional[typing_extensions.Literal["attachment_type"]]. Deprecated. Use show_enum_origins.
+ - remote_fields: typing.Optional[typing.Literal["attachment_type"]]. Deprecated. Use show_enum_origins.
- remote_id: typing.Optional[str]. The API provider's ID for the given object.
- - show_enum_origins: typing.Optional[typing_extensions.Literal["attachment_type"]]. Which fields should be returned in non-normalized form.
+ - show_enum_origins: typing.Optional[typing.Literal["attachment_type"]]. Which fields should be returned in non-normalized form.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import AsyncMerge
@@ -309,25 +408,41 @@ async def list(
_response = await self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/ats/v1/attachments"),
- params=remove_none_from_dict(
- {
- "candidate_id": candidate_id,
- "created_after": serialize_datetime(created_after) if created_after is not None else None,
- "created_before": serialize_datetime(created_before) if created_before is not None else None,
- "cursor": cursor,
- "expand": expand,
- "include_deleted_data": include_deleted_data,
- "include_remote_data": include_remote_data,
- "modified_after": serialize_datetime(modified_after) if modified_after is not None else None,
- "modified_before": serialize_datetime(modified_before) if modified_before is not None else None,
- "page_size": page_size,
- "remote_fields": remote_fields,
- "remote_id": remote_id,
- "show_enum_origins": show_enum_origins,
- }
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "candidate_id": candidate_id,
+ "created_after": serialize_datetime(created_after) if created_after is not None else None,
+ "created_before": serialize_datetime(created_before) if created_before is not None else None,
+ "cursor": cursor,
+ "expand": expand,
+ "include_deleted_data": include_deleted_data,
+ "include_remote_data": include_remote_data,
+ "modified_after": serialize_datetime(modified_after) if modified_after is not None else None,
+ "modified_before": serialize_datetime(modified_before) if modified_before is not None else None,
+ "page_size": page_size,
+ "remote_fields": remote_fields,
+ "remote_id": remote_id,
+ "show_enum_origins": show_enum_origins,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(PaginatedAttachmentList, _response.json()) # type: ignore
@@ -344,6 +459,7 @@ async def create(
run_async: typing.Optional[bool] = None,
model: AttachmentRequest,
remote_user_id: str,
+ request_options: typing.Optional[RequestOptions] = None,
) -> AttachmentResponse:
"""
Creates an `Attachment` object with the given values.
@@ -356,14 +472,58 @@ async def create(
- model: AttachmentRequest.
- remote_user_id: str.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
+ ---
+ from merge.client import AsyncMerge
+ from merge.resources.ats import AttachmentRequest
+
+ client = AsyncMerge(
+ account_token="YOUR_ACCOUNT_TOKEN",
+ api_key="YOUR_API_KEY",
+ )
+ await client.ats.attachments.create(
+ model=AttachmentRequest(
+ file_name="Candidate Resume",
+ file_url="http://alturl.com/p749b",
+ candidate="2872ba14-4084-492b-be96-e5eee6fc33ef",
+ ),
+ remote_user_id="string",
+ )
"""
_response = await self._client_wrapper.httpx_client.request(
"POST",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/ats/v1/attachments"),
- params=remove_none_from_dict({"is_debug_mode": is_debug_mode, "run_async": run_async}),
- json=jsonable_encoder({"model": model, "remote_user_id": remote_user_id}),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "is_debug_mode": is_debug_mode,
+ "run_async": run_async,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ json=jsonable_encoder({"model": model, "remote_user_id": remote_user_id})
+ if request_options is None or request_options.get("additional_body_parameters") is None
+ else {
+ **jsonable_encoder({"model": model, "remote_user_id": remote_user_id}),
+ **(jsonable_encoder(remove_none_from_dict(request_options.get("additional_body_parameters", {})))),
+ },
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(AttachmentResponse, _response.json()) # type: ignore
@@ -377,10 +537,11 @@ async def retrieve(
self,
id: str,
*,
- expand: typing.Optional[typing_extensions.Literal["candidate"]] = None,
+ expand: typing.Optional[typing.Literal["candidate"]] = None,
include_remote_data: typing.Optional[bool] = None,
- remote_fields: typing.Optional[typing_extensions.Literal["attachment_type"]] = None,
- show_enum_origins: typing.Optional[typing_extensions.Literal["attachment_type"]] = None,
+ remote_fields: typing.Optional[typing.Literal["attachment_type"]] = None,
+ show_enum_origins: typing.Optional[typing.Literal["attachment_type"]] = None,
+ request_options: typing.Optional[RequestOptions] = None,
) -> Attachment:
"""
Returns an `Attachment` object with the given `id`.
@@ -388,13 +549,15 @@ async def retrieve(
Parameters:
- id: str.
- - expand: typing.Optional[typing_extensions.Literal["candidate"]]. Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces.
+ - expand: typing.Optional[typing.Literal["candidate"]]. Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces.
- include_remote_data: typing.Optional[bool]. Whether to include the original data Merge fetched from the third-party to produce these models.
- - remote_fields: typing.Optional[typing_extensions.Literal["attachment_type"]]. Deprecated. Use show_enum_origins.
+ - remote_fields: typing.Optional[typing.Literal["attachment_type"]]. Deprecated. Use show_enum_origins.
+
+ - show_enum_origins: typing.Optional[typing.Literal["attachment_type"]]. Which fields should be returned in non-normalized form.
- - show_enum_origins: typing.Optional[typing_extensions.Literal["attachment_type"]]. Which fields should be returned in non-normalized form.
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import AsyncMerge
@@ -403,7 +566,7 @@ async def retrieve(
api_key="YOUR_API_KEY",
)
await client.ats.attachments.retrieve(
- id="id",
+ id="string",
expand="candidate",
remote_fields="attachment_type",
show_enum_origins="attachment_type",
@@ -412,16 +575,32 @@ async def retrieve(
_response = await self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", f"api/ats/v1/attachments/{id}"),
- params=remove_none_from_dict(
- {
- "expand": expand,
- "include_remote_data": include_remote_data,
- "remote_fields": remote_fields,
- "show_enum_origins": show_enum_origins,
- }
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "expand": expand,
+ "include_remote_data": include_remote_data,
+ "remote_fields": remote_fields,
+ "show_enum_origins": show_enum_origins,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(Attachment, _response.json()) # type: ignore
@@ -431,10 +610,12 @@ async def retrieve(
raise ApiError(status_code=_response.status_code, body=_response.text)
raise ApiError(status_code=_response.status_code, body=_response_json)
- async def meta_post_retrieve(self) -> MetaResponse:
+ async def meta_post_retrieve(self, *, request_options: typing.Optional[RequestOptions] = None) -> MetaResponse:
"""
Returns metadata for `Attachment` POSTs.
+ Parameters:
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import AsyncMerge
@@ -447,8 +628,20 @@ async def meta_post_retrieve(self) -> MetaResponse:
_response = await self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/ats/v1/attachments/meta/post"),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ request_options.get("additional_query_parameters") if request_options is not None else None
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(MetaResponse, _response.json()) # type: ignore
diff --git a/src/merge/resources/ats/resources/audit_trail/client.py b/src/merge/resources/ats/resources/audit_trail/client.py
index bf1b14ec..1c050204 100644
--- a/src/merge/resources/ats/resources/audit_trail/client.py
+++ b/src/merge/resources/ats/resources/audit_trail/client.py
@@ -6,7 +6,9 @@
from .....core.api_error import ApiError
from .....core.client_wrapper import AsyncClientWrapper, SyncClientWrapper
+from .....core.jsonable_encoder import jsonable_encoder
from .....core.remove_none_from_dict import remove_none_from_dict
+from .....core.request_options import RequestOptions
from ...types.paginated_audit_log_event_list import PaginatedAuditLogEventList
try:
@@ -28,6 +30,7 @@ def list(
page_size: typing.Optional[int] = None,
start_date: typing.Optional[str] = None,
user_email: typing.Optional[str] = None,
+ request_options: typing.Optional[RequestOptions] = None,
) -> PaginatedAuditLogEventList:
"""
Gets a list of audit trail events.
@@ -44,6 +47,8 @@ def list(
- start_date: typing.Optional[str]. If included, will only include audit trail events that occurred after this time
- user_email: typing.Optional[str]. If provided, this will return events associated with the specified user email. Please note that the email address reflects the user's email at the time of the event, and may not be their current email.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import Merge
@@ -56,18 +61,34 @@ def list(
_response = self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/ats/v1/audit-trail"),
- params=remove_none_from_dict(
- {
- "cursor": cursor,
- "end_date": end_date,
- "event_type": event_type,
- "page_size": page_size,
- "start_date": start_date,
- "user_email": user_email,
- }
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "cursor": cursor,
+ "end_date": end_date,
+ "event_type": event_type,
+ "page_size": page_size,
+ "start_date": start_date,
+ "user_email": user_email,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(PaginatedAuditLogEventList, _response.json()) # type: ignore
@@ -91,6 +112,7 @@ async def list(
page_size: typing.Optional[int] = None,
start_date: typing.Optional[str] = None,
user_email: typing.Optional[str] = None,
+ request_options: typing.Optional[RequestOptions] = None,
) -> PaginatedAuditLogEventList:
"""
Gets a list of audit trail events.
@@ -107,6 +129,8 @@ async def list(
- start_date: typing.Optional[str]. If included, will only include audit trail events that occurred after this time
- user_email: typing.Optional[str]. If provided, this will return events associated with the specified user email. Please note that the email address reflects the user's email at the time of the event, and may not be their current email.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import AsyncMerge
@@ -119,18 +143,34 @@ async def list(
_response = await self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/ats/v1/audit-trail"),
- params=remove_none_from_dict(
- {
- "cursor": cursor,
- "end_date": end_date,
- "event_type": event_type,
- "page_size": page_size,
- "start_date": start_date,
- "user_email": user_email,
- }
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "cursor": cursor,
+ "end_date": end_date,
+ "event_type": event_type,
+ "page_size": page_size,
+ "start_date": start_date,
+ "user_email": user_email,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(PaginatedAuditLogEventList, _response.json()) # type: ignore
diff --git a/src/merge/resources/ats/resources/available_actions/client.py b/src/merge/resources/ats/resources/available_actions/client.py
index 2a949fa3..f01c6d39 100644
--- a/src/merge/resources/ats/resources/available_actions/client.py
+++ b/src/merge/resources/ats/resources/available_actions/client.py
@@ -1,10 +1,14 @@
# This file was auto-generated by Fern from our API Definition.
+import typing
import urllib.parse
from json.decoder import JSONDecodeError
from .....core.api_error import ApiError
from .....core.client_wrapper import AsyncClientWrapper, SyncClientWrapper
+from .....core.jsonable_encoder import jsonable_encoder
+from .....core.remove_none_from_dict import remove_none_from_dict
+from .....core.request_options import RequestOptions
from ...types.available_actions import AvailableActions
try:
@@ -17,15 +21,38 @@ class AvailableActionsClient:
def __init__(self, *, client_wrapper: SyncClientWrapper):
self._client_wrapper = client_wrapper
- def retrieve(self) -> AvailableActions:
+ def retrieve(self, *, request_options: typing.Optional[RequestOptions] = None) -> AvailableActions:
"""
Returns a list of models and actions available for an account.
+
+ Parameters:
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
+ ---
+ from merge.client import Merge
+
+ client = Merge(
+ account_token="YOUR_ACCOUNT_TOKEN",
+ api_key="YOUR_API_KEY",
+ )
+ client.ats.available_actions.retrieve()
"""
_response = self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/ats/v1/available-actions"),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ request_options.get("additional_query_parameters") if request_options is not None else None
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(AvailableActions, _response.json()) # type: ignore
@@ -40,15 +67,38 @@ class AsyncAvailableActionsClient:
def __init__(self, *, client_wrapper: AsyncClientWrapper):
self._client_wrapper = client_wrapper
- async def retrieve(self) -> AvailableActions:
+ async def retrieve(self, *, request_options: typing.Optional[RequestOptions] = None) -> AvailableActions:
"""
Returns a list of models and actions available for an account.
+
+ Parameters:
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
+ ---
+ from merge.client import AsyncMerge
+
+ client = AsyncMerge(
+ account_token="YOUR_ACCOUNT_TOKEN",
+ api_key="YOUR_API_KEY",
+ )
+ await client.ats.available_actions.retrieve()
"""
_response = await self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/ats/v1/available-actions"),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ request_options.get("additional_query_parameters") if request_options is not None else None
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(AvailableActions, _response.json()) # type: ignore
diff --git a/src/merge/resources/ats/resources/candidates/client.py b/src/merge/resources/ats/resources/candidates/client.py
index 0423d67b..9c26a69f 100644
--- a/src/merge/resources/ats/resources/candidates/client.py
+++ b/src/merge/resources/ats/resources/candidates/client.py
@@ -10,6 +10,7 @@
from .....core.datetime_utils import serialize_datetime
from .....core.jsonable_encoder import jsonable_encoder
from .....core.remove_none_from_dict import remove_none_from_dict
+from .....core.request_options import RequestOptions
from ...types.candidate import Candidate
from ...types.candidate_request import CandidateRequest
from ...types.candidate_response import CandidateResponse
@@ -50,6 +51,7 @@ def list(
page_size: typing.Optional[int] = None,
remote_id: typing.Optional[str] = None,
tags: typing.Optional[str] = None,
+ request_options: typing.Optional[RequestOptions] = None,
) -> PaginatedCandidateList:
"""
Returns a list of `Candidate` objects.
@@ -82,6 +84,8 @@ def list(
- remote_id: typing.Optional[str]. The API provider's ID for the given object.
- tags: typing.Optional[str]. If provided, will only return candidates with these tags; multiple tags can be separated by commas.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import Merge
from merge.resources.ats import CandidatesListRequestExpand
@@ -97,26 +101,42 @@ def list(
_response = self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/ats/v1/candidates"),
- params=remove_none_from_dict(
- {
- "created_after": serialize_datetime(created_after) if created_after is not None else None,
- "created_before": serialize_datetime(created_before) if created_before is not None else None,
- "cursor": cursor,
- "email_addresses": email_addresses,
- "expand": expand,
- "first_name": first_name,
- "include_deleted_data": include_deleted_data,
- "include_remote_data": include_remote_data,
- "last_name": last_name,
- "modified_after": serialize_datetime(modified_after) if modified_after is not None else None,
- "modified_before": serialize_datetime(modified_before) if modified_before is not None else None,
- "page_size": page_size,
- "remote_id": remote_id,
- "tags": tags,
- }
- ),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "created_after": serialize_datetime(created_after) if created_after is not None else None,
+ "created_before": serialize_datetime(created_before) if created_before is not None else None,
+ "cursor": cursor,
+ "email_addresses": email_addresses,
+ "expand": expand,
+ "first_name": first_name,
+ "include_deleted_data": include_deleted_data,
+ "include_remote_data": include_remote_data,
+ "last_name": last_name,
+ "modified_after": serialize_datetime(modified_after) if modified_after is not None else None,
+ "modified_before": serialize_datetime(modified_before) if modified_before is not None else None,
+ "page_size": page_size,
+ "remote_id": remote_id,
+ "tags": tags,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(PaginatedCandidateList, _response.json()) # type: ignore
@@ -133,6 +153,7 @@ def create(
run_async: typing.Optional[bool] = None,
model: CandidateRequest,
remote_user_id: str,
+ request_options: typing.Optional[RequestOptions] = None,
) -> CandidateResponse:
"""
Creates a `Candidate` object with the given values.
@@ -145,14 +166,67 @@ def create(
- model: CandidateRequest.
- remote_user_id: str.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
+ ---
+ import datetime
+
+ from merge.client import Merge
+ from merge.resources.ats import CandidateRequest
+
+ client = Merge(
+ account_token="YOUR_ACCOUNT_TOKEN",
+ api_key="YOUR_API_KEY",
+ )
+ client.ats.candidates.create(
+ model=CandidateRequest(
+ first_name="Gil",
+ last_name="Feig",
+ company="Columbia Dining App.",
+ title="Software Engineer",
+ last_interaction_at=datetime.datetime.fromisoformat(
+ "2021-10-17 00:00:00+00:00",
+ ),
+ is_private=True,
+ can_email=True,
+ remote_template_id="92830948203",
+ ),
+ remote_user_id="string",
+ )
"""
_response = self._client_wrapper.httpx_client.request(
"POST",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/ats/v1/candidates"),
- params=remove_none_from_dict({"is_debug_mode": is_debug_mode, "run_async": run_async}),
- json=jsonable_encoder({"model": model, "remote_user_id": remote_user_id}),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "is_debug_mode": is_debug_mode,
+ "run_async": run_async,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ json=jsonable_encoder({"model": model, "remote_user_id": remote_user_id})
+ if request_options is None or request_options.get("additional_body_parameters") is None
+ else {
+ **jsonable_encoder({"model": model, "remote_user_id": remote_user_id}),
+ **(jsonable_encoder(remove_none_from_dict(request_options.get("additional_body_parameters", {})))),
+ },
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(CandidateResponse, _response.json()) # type: ignore
@@ -168,6 +242,7 @@ def retrieve(
*,
expand: typing.Optional[CandidatesRetrieveRequestExpand] = None,
include_remote_data: typing.Optional[bool] = None,
+ request_options: typing.Optional[RequestOptions] = None,
) -> Candidate:
"""
Returns a `Candidate` object with the given `id`.
@@ -178,6 +253,8 @@ def retrieve(
- expand: typing.Optional[CandidatesRetrieveRequestExpand]. Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces.
- include_remote_data: typing.Optional[bool]. Whether to include the original data Merge fetched from the third-party to produce these models.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import Merge
from merge.resources.ats import CandidatesRetrieveRequestExpand
@@ -187,16 +264,37 @@ def retrieve(
api_key="YOUR_API_KEY",
)
client.ats.candidates.retrieve(
- id="id",
+ id="string",
expand=CandidatesRetrieveRequestExpand.APPLICATIONS,
)
"""
_response = self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", f"api/ats/v1/candidates/{id}"),
- params=remove_none_from_dict({"expand": expand, "include_remote_data": include_remote_data}),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "expand": expand,
+ "include_remote_data": include_remote_data,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(Candidate, _response.json()) # type: ignore
@@ -214,6 +312,7 @@ def partial_update(
run_async: typing.Optional[bool] = None,
model: PatchedCandidateRequest,
remote_user_id: str,
+ request_options: typing.Optional[RequestOptions] = None,
) -> CandidateResponse:
"""
Updates a `Candidate` object with the given `id`.
@@ -228,14 +327,68 @@ def partial_update(
- model: PatchedCandidateRequest.
- remote_user_id: str.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
+ ---
+ import datetime
+
+ from merge.client import Merge
+ from merge.resources.ats import PatchedCandidateRequest
+
+ client = Merge(
+ account_token="YOUR_ACCOUNT_TOKEN",
+ api_key="YOUR_API_KEY",
+ )
+ client.ats.candidates.partial_update(
+ id="string",
+ model=PatchedCandidateRequest(
+ first_name="Gil",
+ last_name="Feig",
+ company="Columbia Dining App.",
+ title="Software Engineer",
+ last_interaction_at=datetime.datetime.fromisoformat(
+ "2021-10-17 00:00:00+00:00",
+ ),
+ is_private=True,
+ can_email=True,
+ remote_template_id="92830948203",
+ ),
+ remote_user_id="string",
+ )
"""
_response = self._client_wrapper.httpx_client.request(
"PATCH",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", f"api/ats/v1/candidates/{id}"),
- params=remove_none_from_dict({"is_debug_mode": is_debug_mode, "run_async": run_async}),
- json=jsonable_encoder({"model": model, "remote_user_id": remote_user_id}),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "is_debug_mode": is_debug_mode,
+ "run_async": run_async,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ json=jsonable_encoder({"model": model, "remote_user_id": remote_user_id})
+ if request_options is None or request_options.get("additional_body_parameters") is None
+ else {
+ **jsonable_encoder({"model": model, "remote_user_id": remote_user_id}),
+ **(jsonable_encoder(remove_none_from_dict(request_options.get("additional_body_parameters", {})))),
+ },
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(CandidateResponse, _response.json()) # type: ignore
@@ -245,7 +398,14 @@ def partial_update(
raise ApiError(status_code=_response.status_code, body=_response.text)
raise ApiError(status_code=_response.status_code, body=_response_json)
- def ignore_create(self, model_id: str, *, reason: ReasonEnum, message: typing.Optional[str] = OMIT) -> None:
+ def ignore_create(
+ self,
+ model_id: str,
+ *,
+ reason: ReasonEnum,
+ message: typing.Optional[str] = OMIT,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> None:
"""
Ignores a specific row based on the `model_id` in the url. These records will have their properties set to null, and will not be updated in future syncs. The "reason" and "message" fields in the request body will be stored for audit purposes.
@@ -255,6 +415,8 @@ def ignore_create(self, model_id: str, *, reason: ReasonEnum, message: typing.Op
- reason: ReasonEnum.
- message: typing.Optional[str].
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import Merge
from merge.resources.ats import ReasonEnum
@@ -264,20 +426,37 @@ def ignore_create(self, model_id: str, *, reason: ReasonEnum, message: typing.Op
api_key="YOUR_API_KEY",
)
client.ats.candidates.ignore_create(
- model_id="model-id",
+ model_id="string",
reason=ReasonEnum.GENERAL_CUSTOMER_REQUEST,
message="deletion request by user id 51903790-7dfe-4053-8d63-5a10cc4ffd39",
)
"""
- _request: typing.Dict[str, typing.Any] = {"reason": reason}
+ _request: typing.Dict[str, typing.Any] = {"reason": reason.value}
if message is not OMIT:
_request["message"] = message
_response = self._client_wrapper.httpx_client.request(
"POST",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", f"api/ats/v1/candidates/ignore/{model_id}"),
- json=jsonable_encoder(_request),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ request_options.get("additional_query_parameters") if request_options is not None else None
+ ),
+ json=jsonable_encoder(_request)
+ if request_options is None or request_options.get("additional_body_parameters") is None
+ else {
+ **jsonable_encoder(_request),
+ **(jsonable_encoder(remove_none_from_dict(request_options.get("additional_body_parameters", {})))),
+ },
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return
@@ -287,12 +466,14 @@ def ignore_create(self, model_id: str, *, reason: ReasonEnum, message: typing.Op
raise ApiError(status_code=_response.status_code, body=_response.text)
raise ApiError(status_code=_response.status_code, body=_response_json)
- def meta_patch_retrieve(self, id: str) -> MetaResponse:
+ def meta_patch_retrieve(self, id: str, *, request_options: typing.Optional[RequestOptions] = None) -> MetaResponse:
"""
Returns metadata for `Candidate` PATCHs.
Parameters:
- id: str.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import Merge
@@ -301,14 +482,26 @@ def meta_patch_retrieve(self, id: str) -> MetaResponse:
api_key="YOUR_API_KEY",
)
client.ats.candidates.meta_patch_retrieve(
- id="id",
+ id="string",
)
"""
_response = self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", f"api/ats/v1/candidates/meta/patch/{id}"),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ request_options.get("additional_query_parameters") if request_options is not None else None
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(MetaResponse, _response.json()) # type: ignore
@@ -318,10 +511,12 @@ def meta_patch_retrieve(self, id: str) -> MetaResponse:
raise ApiError(status_code=_response.status_code, body=_response.text)
raise ApiError(status_code=_response.status_code, body=_response_json)
- def meta_post_retrieve(self) -> MetaResponse:
+ def meta_post_retrieve(self, *, request_options: typing.Optional[RequestOptions] = None) -> MetaResponse:
"""
Returns metadata for `Candidate` POSTs.
+ Parameters:
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import Merge
@@ -334,8 +529,20 @@ def meta_post_retrieve(self) -> MetaResponse:
_response = self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/ats/v1/candidates/meta/post"),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ request_options.get("additional_query_parameters") if request_options is not None else None
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(MetaResponse, _response.json()) # type: ignore
@@ -367,6 +574,7 @@ async def list(
page_size: typing.Optional[int] = None,
remote_id: typing.Optional[str] = None,
tags: typing.Optional[str] = None,
+ request_options: typing.Optional[RequestOptions] = None,
) -> PaginatedCandidateList:
"""
Returns a list of `Candidate` objects.
@@ -399,6 +607,8 @@ async def list(
- remote_id: typing.Optional[str]. The API provider's ID for the given object.
- tags: typing.Optional[str]. If provided, will only return candidates with these tags; multiple tags can be separated by commas.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import AsyncMerge
from merge.resources.ats import CandidatesListRequestExpand
@@ -414,26 +624,42 @@ async def list(
_response = await self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/ats/v1/candidates"),
- params=remove_none_from_dict(
- {
- "created_after": serialize_datetime(created_after) if created_after is not None else None,
- "created_before": serialize_datetime(created_before) if created_before is not None else None,
- "cursor": cursor,
- "email_addresses": email_addresses,
- "expand": expand,
- "first_name": first_name,
- "include_deleted_data": include_deleted_data,
- "include_remote_data": include_remote_data,
- "last_name": last_name,
- "modified_after": serialize_datetime(modified_after) if modified_after is not None else None,
- "modified_before": serialize_datetime(modified_before) if modified_before is not None else None,
- "page_size": page_size,
- "remote_id": remote_id,
- "tags": tags,
- }
- ),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "created_after": serialize_datetime(created_after) if created_after is not None else None,
+ "created_before": serialize_datetime(created_before) if created_before is not None else None,
+ "cursor": cursor,
+ "email_addresses": email_addresses,
+ "expand": expand,
+ "first_name": first_name,
+ "include_deleted_data": include_deleted_data,
+ "include_remote_data": include_remote_data,
+ "last_name": last_name,
+ "modified_after": serialize_datetime(modified_after) if modified_after is not None else None,
+ "modified_before": serialize_datetime(modified_before) if modified_before is not None else None,
+ "page_size": page_size,
+ "remote_id": remote_id,
+ "tags": tags,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(PaginatedCandidateList, _response.json()) # type: ignore
@@ -450,6 +676,7 @@ async def create(
run_async: typing.Optional[bool] = None,
model: CandidateRequest,
remote_user_id: str,
+ request_options: typing.Optional[RequestOptions] = None,
) -> CandidateResponse:
"""
Creates a `Candidate` object with the given values.
@@ -462,14 +689,67 @@ async def create(
- model: CandidateRequest.
- remote_user_id: str.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
+ ---
+ import datetime
+
+ from merge.client import AsyncMerge
+ from merge.resources.ats import CandidateRequest
+
+ client = AsyncMerge(
+ account_token="YOUR_ACCOUNT_TOKEN",
+ api_key="YOUR_API_KEY",
+ )
+ await client.ats.candidates.create(
+ model=CandidateRequest(
+ first_name="Gil",
+ last_name="Feig",
+ company="Columbia Dining App.",
+ title="Software Engineer",
+ last_interaction_at=datetime.datetime.fromisoformat(
+ "2021-10-17 00:00:00+00:00",
+ ),
+ is_private=True,
+ can_email=True,
+ remote_template_id="92830948203",
+ ),
+ remote_user_id="string",
+ )
"""
_response = await self._client_wrapper.httpx_client.request(
"POST",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/ats/v1/candidates"),
- params=remove_none_from_dict({"is_debug_mode": is_debug_mode, "run_async": run_async}),
- json=jsonable_encoder({"model": model, "remote_user_id": remote_user_id}),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "is_debug_mode": is_debug_mode,
+ "run_async": run_async,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ json=jsonable_encoder({"model": model, "remote_user_id": remote_user_id})
+ if request_options is None or request_options.get("additional_body_parameters") is None
+ else {
+ **jsonable_encoder({"model": model, "remote_user_id": remote_user_id}),
+ **(jsonable_encoder(remove_none_from_dict(request_options.get("additional_body_parameters", {})))),
+ },
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(CandidateResponse, _response.json()) # type: ignore
@@ -485,6 +765,7 @@ async def retrieve(
*,
expand: typing.Optional[CandidatesRetrieveRequestExpand] = None,
include_remote_data: typing.Optional[bool] = None,
+ request_options: typing.Optional[RequestOptions] = None,
) -> Candidate:
"""
Returns a `Candidate` object with the given `id`.
@@ -495,6 +776,8 @@ async def retrieve(
- expand: typing.Optional[CandidatesRetrieveRequestExpand]. Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces.
- include_remote_data: typing.Optional[bool]. Whether to include the original data Merge fetched from the third-party to produce these models.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import AsyncMerge
from merge.resources.ats import CandidatesRetrieveRequestExpand
@@ -504,16 +787,37 @@ async def retrieve(
api_key="YOUR_API_KEY",
)
await client.ats.candidates.retrieve(
- id="id",
+ id="string",
expand=CandidatesRetrieveRequestExpand.APPLICATIONS,
)
"""
_response = await self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", f"api/ats/v1/candidates/{id}"),
- params=remove_none_from_dict({"expand": expand, "include_remote_data": include_remote_data}),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "expand": expand,
+ "include_remote_data": include_remote_data,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(Candidate, _response.json()) # type: ignore
@@ -531,6 +835,7 @@ async def partial_update(
run_async: typing.Optional[bool] = None,
model: PatchedCandidateRequest,
remote_user_id: str,
+ request_options: typing.Optional[RequestOptions] = None,
) -> CandidateResponse:
"""
Updates a `Candidate` object with the given `id`.
@@ -545,14 +850,68 @@ async def partial_update(
- model: PatchedCandidateRequest.
- remote_user_id: str.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
+ ---
+ import datetime
+
+ from merge.client import AsyncMerge
+ from merge.resources.ats import PatchedCandidateRequest
+
+ client = AsyncMerge(
+ account_token="YOUR_ACCOUNT_TOKEN",
+ api_key="YOUR_API_KEY",
+ )
+ await client.ats.candidates.partial_update(
+ id="string",
+ model=PatchedCandidateRequest(
+ first_name="Gil",
+ last_name="Feig",
+ company="Columbia Dining App.",
+ title="Software Engineer",
+ last_interaction_at=datetime.datetime.fromisoformat(
+ "2021-10-17 00:00:00+00:00",
+ ),
+ is_private=True,
+ can_email=True,
+ remote_template_id="92830948203",
+ ),
+ remote_user_id="string",
+ )
"""
_response = await self._client_wrapper.httpx_client.request(
"PATCH",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", f"api/ats/v1/candidates/{id}"),
- params=remove_none_from_dict({"is_debug_mode": is_debug_mode, "run_async": run_async}),
- json=jsonable_encoder({"model": model, "remote_user_id": remote_user_id}),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "is_debug_mode": is_debug_mode,
+ "run_async": run_async,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ json=jsonable_encoder({"model": model, "remote_user_id": remote_user_id})
+ if request_options is None or request_options.get("additional_body_parameters") is None
+ else {
+ **jsonable_encoder({"model": model, "remote_user_id": remote_user_id}),
+ **(jsonable_encoder(remove_none_from_dict(request_options.get("additional_body_parameters", {})))),
+ },
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(CandidateResponse, _response.json()) # type: ignore
@@ -562,7 +921,14 @@ async def partial_update(
raise ApiError(status_code=_response.status_code, body=_response.text)
raise ApiError(status_code=_response.status_code, body=_response_json)
- async def ignore_create(self, model_id: str, *, reason: ReasonEnum, message: typing.Optional[str] = OMIT) -> None:
+ async def ignore_create(
+ self,
+ model_id: str,
+ *,
+ reason: ReasonEnum,
+ message: typing.Optional[str] = OMIT,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> None:
"""
Ignores a specific row based on the `model_id` in the url. These records will have their properties set to null, and will not be updated in future syncs. The "reason" and "message" fields in the request body will be stored for audit purposes.
@@ -572,6 +938,8 @@ async def ignore_create(self, model_id: str, *, reason: ReasonEnum, message: typ
- reason: ReasonEnum.
- message: typing.Optional[str].
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import AsyncMerge
from merge.resources.ats import ReasonEnum
@@ -581,20 +949,37 @@ async def ignore_create(self, model_id: str, *, reason: ReasonEnum, message: typ
api_key="YOUR_API_KEY",
)
await client.ats.candidates.ignore_create(
- model_id="model-id",
+ model_id="string",
reason=ReasonEnum.GENERAL_CUSTOMER_REQUEST,
message="deletion request by user id 51903790-7dfe-4053-8d63-5a10cc4ffd39",
)
"""
- _request: typing.Dict[str, typing.Any] = {"reason": reason}
+ _request: typing.Dict[str, typing.Any] = {"reason": reason.value}
if message is not OMIT:
_request["message"] = message
_response = await self._client_wrapper.httpx_client.request(
"POST",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", f"api/ats/v1/candidates/ignore/{model_id}"),
- json=jsonable_encoder(_request),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ request_options.get("additional_query_parameters") if request_options is not None else None
+ ),
+ json=jsonable_encoder(_request)
+ if request_options is None or request_options.get("additional_body_parameters") is None
+ else {
+ **jsonable_encoder(_request),
+ **(jsonable_encoder(remove_none_from_dict(request_options.get("additional_body_parameters", {})))),
+ },
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return
@@ -604,12 +989,16 @@ async def ignore_create(self, model_id: str, *, reason: ReasonEnum, message: typ
raise ApiError(status_code=_response.status_code, body=_response.text)
raise ApiError(status_code=_response.status_code, body=_response_json)
- async def meta_patch_retrieve(self, id: str) -> MetaResponse:
+ async def meta_patch_retrieve(
+ self, id: str, *, request_options: typing.Optional[RequestOptions] = None
+ ) -> MetaResponse:
"""
Returns metadata for `Candidate` PATCHs.
Parameters:
- id: str.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import AsyncMerge
@@ -618,14 +1007,26 @@ async def meta_patch_retrieve(self, id: str) -> MetaResponse:
api_key="YOUR_API_KEY",
)
await client.ats.candidates.meta_patch_retrieve(
- id="id",
+ id="string",
)
"""
_response = await self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", f"api/ats/v1/candidates/meta/patch/{id}"),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ request_options.get("additional_query_parameters") if request_options is not None else None
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(MetaResponse, _response.json()) # type: ignore
@@ -635,10 +1036,12 @@ async def meta_patch_retrieve(self, id: str) -> MetaResponse:
raise ApiError(status_code=_response.status_code, body=_response.text)
raise ApiError(status_code=_response.status_code, body=_response_json)
- async def meta_post_retrieve(self) -> MetaResponse:
+ async def meta_post_retrieve(self, *, request_options: typing.Optional[RequestOptions] = None) -> MetaResponse:
"""
Returns metadata for `Candidate` POSTs.
+ Parameters:
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import AsyncMerge
@@ -651,8 +1054,20 @@ async def meta_post_retrieve(self) -> MetaResponse:
_response = await self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/ats/v1/candidates/meta/post"),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ request_options.get("additional_query_parameters") if request_options is not None else None
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(MetaResponse, _response.json()) # type: ignore
diff --git a/src/merge/resources/ats/resources/delete_account/client.py b/src/merge/resources/ats/resources/delete_account/client.py
index e4086e03..ce21ef59 100644
--- a/src/merge/resources/ats/resources/delete_account/client.py
+++ b/src/merge/resources/ats/resources/delete_account/client.py
@@ -1,20 +1,26 @@
# This file was auto-generated by Fern from our API Definition.
+import typing
import urllib.parse
from json.decoder import JSONDecodeError
from .....core.api_error import ApiError
from .....core.client_wrapper import AsyncClientWrapper, SyncClientWrapper
+from .....core.jsonable_encoder import jsonable_encoder
+from .....core.remove_none_from_dict import remove_none_from_dict
+from .....core.request_options import RequestOptions
class DeleteAccountClient:
def __init__(self, *, client_wrapper: SyncClientWrapper):
self._client_wrapper = client_wrapper
- def delete(self) -> None:
+ def delete(self, *, request_options: typing.Optional[RequestOptions] = None) -> None:
"""
Delete a linked account.
+ Parameters:
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import Merge
@@ -27,8 +33,23 @@ def delete(self) -> None:
_response = self._client_wrapper.httpx_client.request(
"POST",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/ats/v1/delete-account"),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ request_options.get("additional_query_parameters") if request_options is not None else None
+ ),
+ json=jsonable_encoder(remove_none_from_dict(request_options.get("additional_body_parameters", {})))
+ if request_options is not None
+ else None,
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return
@@ -43,10 +64,12 @@ class AsyncDeleteAccountClient:
def __init__(self, *, client_wrapper: AsyncClientWrapper):
self._client_wrapper = client_wrapper
- async def delete(self) -> None:
+ async def delete(self, *, request_options: typing.Optional[RequestOptions] = None) -> None:
"""
Delete a linked account.
+ Parameters:
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import AsyncMerge
@@ -59,8 +82,23 @@ async def delete(self) -> None:
_response = await self._client_wrapper.httpx_client.request(
"POST",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/ats/v1/delete-account"),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ request_options.get("additional_query_parameters") if request_options is not None else None
+ ),
+ json=jsonable_encoder(remove_none_from_dict(request_options.get("additional_body_parameters", {})))
+ if request_options is not None
+ else None,
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return
diff --git a/src/merge/resources/ats/resources/departments/client.py b/src/merge/resources/ats/resources/departments/client.py
index f2cfb2c4..18251d76 100644
--- a/src/merge/resources/ats/resources/departments/client.py
+++ b/src/merge/resources/ats/resources/departments/client.py
@@ -8,7 +8,9 @@
from .....core.api_error import ApiError
from .....core.client_wrapper import AsyncClientWrapper, SyncClientWrapper
from .....core.datetime_utils import serialize_datetime
+from .....core.jsonable_encoder import jsonable_encoder
from .....core.remove_none_from_dict import remove_none_from_dict
+from .....core.request_options import RequestOptions
from ...types.department import Department
from ...types.paginated_department_list import PaginatedDepartmentList
@@ -34,6 +36,7 @@ def list(
modified_before: typing.Optional[dt.datetime] = None,
page_size: typing.Optional[int] = None,
remote_id: typing.Optional[str] = None,
+ request_options: typing.Optional[RequestOptions] = None,
) -> PaginatedDepartmentList:
"""
Returns a list of `Department` objects.
@@ -56,6 +59,8 @@ def list(
- page_size: typing.Optional[int]. Number of results to return per page.
- remote_id: typing.Optional[str]. The API provider's ID for the given object.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import Merge
@@ -68,21 +73,37 @@ def list(
_response = self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/ats/v1/departments"),
- params=remove_none_from_dict(
- {
- "created_after": serialize_datetime(created_after) if created_after is not None else None,
- "created_before": serialize_datetime(created_before) if created_before is not None else None,
- "cursor": cursor,
- "include_deleted_data": include_deleted_data,
- "include_remote_data": include_remote_data,
- "modified_after": serialize_datetime(modified_after) if modified_after is not None else None,
- "modified_before": serialize_datetime(modified_before) if modified_before is not None else None,
- "page_size": page_size,
- "remote_id": remote_id,
- }
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "created_after": serialize_datetime(created_after) if created_after is not None else None,
+ "created_before": serialize_datetime(created_before) if created_before is not None else None,
+ "cursor": cursor,
+ "include_deleted_data": include_deleted_data,
+ "include_remote_data": include_remote_data,
+ "modified_after": serialize_datetime(modified_after) if modified_after is not None else None,
+ "modified_before": serialize_datetime(modified_before) if modified_before is not None else None,
+ "page_size": page_size,
+ "remote_id": remote_id,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(PaginatedDepartmentList, _response.json()) # type: ignore
@@ -92,7 +113,13 @@ def list(
raise ApiError(status_code=_response.status_code, body=_response.text)
raise ApiError(status_code=_response.status_code, body=_response_json)
- def retrieve(self, id: str, *, include_remote_data: typing.Optional[bool] = None) -> Department:
+ def retrieve(
+ self,
+ id: str,
+ *,
+ include_remote_data: typing.Optional[bool] = None,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> Department:
"""
Returns a `Department` object with the given `id`.
@@ -100,6 +127,8 @@ def retrieve(self, id: str, *, include_remote_data: typing.Optional[bool] = None
- id: str.
- include_remote_data: typing.Optional[bool]. Whether to include the original data Merge fetched from the third-party to produce these models.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import Merge
@@ -108,15 +137,35 @@ def retrieve(self, id: str, *, include_remote_data: typing.Optional[bool] = None
api_key="YOUR_API_KEY",
)
client.ats.departments.retrieve(
- id="id",
+ id="string",
)
"""
_response = self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", f"api/ats/v1/departments/{id}"),
- params=remove_none_from_dict({"include_remote_data": include_remote_data}),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "include_remote_data": include_remote_data,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(Department, _response.json()) # type: ignore
@@ -143,6 +192,7 @@ async def list(
modified_before: typing.Optional[dt.datetime] = None,
page_size: typing.Optional[int] = None,
remote_id: typing.Optional[str] = None,
+ request_options: typing.Optional[RequestOptions] = None,
) -> PaginatedDepartmentList:
"""
Returns a list of `Department` objects.
@@ -165,6 +215,8 @@ async def list(
- page_size: typing.Optional[int]. Number of results to return per page.
- remote_id: typing.Optional[str]. The API provider's ID for the given object.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import AsyncMerge
@@ -177,21 +229,37 @@ async def list(
_response = await self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/ats/v1/departments"),
- params=remove_none_from_dict(
- {
- "created_after": serialize_datetime(created_after) if created_after is not None else None,
- "created_before": serialize_datetime(created_before) if created_before is not None else None,
- "cursor": cursor,
- "include_deleted_data": include_deleted_data,
- "include_remote_data": include_remote_data,
- "modified_after": serialize_datetime(modified_after) if modified_after is not None else None,
- "modified_before": serialize_datetime(modified_before) if modified_before is not None else None,
- "page_size": page_size,
- "remote_id": remote_id,
- }
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "created_after": serialize_datetime(created_after) if created_after is not None else None,
+ "created_before": serialize_datetime(created_before) if created_before is not None else None,
+ "cursor": cursor,
+ "include_deleted_data": include_deleted_data,
+ "include_remote_data": include_remote_data,
+ "modified_after": serialize_datetime(modified_after) if modified_after is not None else None,
+ "modified_before": serialize_datetime(modified_before) if modified_before is not None else None,
+ "page_size": page_size,
+ "remote_id": remote_id,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(PaginatedDepartmentList, _response.json()) # type: ignore
@@ -201,7 +269,13 @@ async def list(
raise ApiError(status_code=_response.status_code, body=_response.text)
raise ApiError(status_code=_response.status_code, body=_response_json)
- async def retrieve(self, id: str, *, include_remote_data: typing.Optional[bool] = None) -> Department:
+ async def retrieve(
+ self,
+ id: str,
+ *,
+ include_remote_data: typing.Optional[bool] = None,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> Department:
"""
Returns a `Department` object with the given `id`.
@@ -209,6 +283,8 @@ async def retrieve(self, id: str, *, include_remote_data: typing.Optional[bool]
- id: str.
- include_remote_data: typing.Optional[bool]. Whether to include the original data Merge fetched from the third-party to produce these models.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import AsyncMerge
@@ -217,15 +293,35 @@ async def retrieve(self, id: str, *, include_remote_data: typing.Optional[bool]
api_key="YOUR_API_KEY",
)
await client.ats.departments.retrieve(
- id="id",
+ id="string",
)
"""
_response = await self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", f"api/ats/v1/departments/{id}"),
- params=remove_none_from_dict({"include_remote_data": include_remote_data}),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "include_remote_data": include_remote_data,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(Department, _response.json()) # type: ignore
diff --git a/src/merge/resources/ats/resources/eeocs/client.py b/src/merge/resources/ats/resources/eeocs/client.py
index dd6af257..93e6d500 100644
--- a/src/merge/resources/ats/resources/eeocs/client.py
+++ b/src/merge/resources/ats/resources/eeocs/client.py
@@ -5,12 +5,12 @@
import urllib.parse
from json.decoder import JSONDecodeError
-import typing_extensions
-
from .....core.api_error import ApiError
from .....core.client_wrapper import AsyncClientWrapper, SyncClientWrapper
from .....core.datetime_utils import serialize_datetime
+from .....core.jsonable_encoder import jsonable_encoder
from .....core.remove_none_from_dict import remove_none_from_dict
+from .....core.request_options import RequestOptions
from ...types.eeoc import Eeoc
from ...types.paginated_eeoc_list import PaginatedEeocList
from .types.eeocs_list_request_remote_fields import EeocsListRequestRemoteFields
@@ -35,7 +35,7 @@ def list(
created_after: typing.Optional[dt.datetime] = None,
created_before: typing.Optional[dt.datetime] = None,
cursor: typing.Optional[str] = None,
- expand: typing.Optional[typing_extensions.Literal["candidate"]] = None,
+ expand: typing.Optional[typing.Literal["candidate"]] = None,
include_deleted_data: typing.Optional[bool] = None,
include_remote_data: typing.Optional[bool] = None,
modified_after: typing.Optional[dt.datetime] = None,
@@ -44,6 +44,7 @@ def list(
remote_fields: typing.Optional[EeocsListRequestRemoteFields] = None,
remote_id: typing.Optional[str] = None,
show_enum_origins: typing.Optional[EeocsListRequestShowEnumOrigins] = None,
+ request_options: typing.Optional[RequestOptions] = None,
) -> PaginatedEeocList:
"""
Returns a list of `EEOC` objects.
@@ -57,7 +58,7 @@ def list(
- cursor: typing.Optional[str]. The pagination cursor value.
- - expand: typing.Optional[typing_extensions.Literal["candidate"]]. Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces.
+ - expand: typing.Optional[typing.Literal["candidate"]]. Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces.
- include_deleted_data: typing.Optional[bool]. Whether to include data that was marked as deleted by third party webhooks.
@@ -74,6 +75,8 @@ def list(
- remote_id: typing.Optional[str]. The API provider's ID for the given object.
- show_enum_origins: typing.Optional[EeocsListRequestShowEnumOrigins]. Which fields should be returned in non-normalized form.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import Merge
from merge.resources.ats import (
@@ -94,25 +97,41 @@ def list(
_response = self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/ats/v1/eeocs"),
- params=remove_none_from_dict(
- {
- "candidate_id": candidate_id,
- "created_after": serialize_datetime(created_after) if created_after is not None else None,
- "created_before": serialize_datetime(created_before) if created_before is not None else None,
- "cursor": cursor,
- "expand": expand,
- "include_deleted_data": include_deleted_data,
- "include_remote_data": include_remote_data,
- "modified_after": serialize_datetime(modified_after) if modified_after is not None else None,
- "modified_before": serialize_datetime(modified_before) if modified_before is not None else None,
- "page_size": page_size,
- "remote_fields": remote_fields,
- "remote_id": remote_id,
- "show_enum_origins": show_enum_origins,
- }
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "candidate_id": candidate_id,
+ "created_after": serialize_datetime(created_after) if created_after is not None else None,
+ "created_before": serialize_datetime(created_before) if created_before is not None else None,
+ "cursor": cursor,
+ "expand": expand,
+ "include_deleted_data": include_deleted_data,
+ "include_remote_data": include_remote_data,
+ "modified_after": serialize_datetime(modified_after) if modified_after is not None else None,
+ "modified_before": serialize_datetime(modified_before) if modified_before is not None else None,
+ "page_size": page_size,
+ "remote_fields": remote_fields,
+ "remote_id": remote_id,
+ "show_enum_origins": show_enum_origins,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(PaginatedEeocList, _response.json()) # type: ignore
@@ -126,10 +145,11 @@ def retrieve(
self,
id: str,
*,
- expand: typing.Optional[typing_extensions.Literal["candidate"]] = None,
+ expand: typing.Optional[typing.Literal["candidate"]] = None,
include_remote_data: typing.Optional[bool] = None,
remote_fields: typing.Optional[EeocsRetrieveRequestRemoteFields] = None,
show_enum_origins: typing.Optional[EeocsRetrieveRequestShowEnumOrigins] = None,
+ request_options: typing.Optional[RequestOptions] = None,
) -> Eeoc:
"""
Returns an `EEOC` object with the given `id`.
@@ -137,13 +157,15 @@ def retrieve(
Parameters:
- id: str.
- - expand: typing.Optional[typing_extensions.Literal["candidate"]]. Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces.
+ - expand: typing.Optional[typing.Literal["candidate"]]. Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces.
- include_remote_data: typing.Optional[bool]. Whether to include the original data Merge fetched from the third-party to produce these models.
- remote_fields: typing.Optional[EeocsRetrieveRequestRemoteFields]. Deprecated. Use show_enum_origins.
- show_enum_origins: typing.Optional[EeocsRetrieveRequestShowEnumOrigins]. Which fields should be returned in non-normalized form.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import Merge
from merge.resources.ats import (
@@ -156,7 +178,7 @@ def retrieve(
api_key="YOUR_API_KEY",
)
client.ats.eeocs.retrieve(
- id="id",
+ id="string",
expand="candidate",
remote_fields=EeocsRetrieveRequestRemoteFields.DISABILITY_STATUS,
show_enum_origins=EeocsRetrieveRequestShowEnumOrigins.DISABILITY_STATUS,
@@ -165,16 +187,32 @@ def retrieve(
_response = self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", f"api/ats/v1/eeocs/{id}"),
- params=remove_none_from_dict(
- {
- "expand": expand,
- "include_remote_data": include_remote_data,
- "remote_fields": remote_fields,
- "show_enum_origins": show_enum_origins,
- }
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "expand": expand,
+ "include_remote_data": include_remote_data,
+ "remote_fields": remote_fields,
+ "show_enum_origins": show_enum_origins,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(Eeoc, _response.json()) # type: ignore
@@ -196,7 +234,7 @@ async def list(
created_after: typing.Optional[dt.datetime] = None,
created_before: typing.Optional[dt.datetime] = None,
cursor: typing.Optional[str] = None,
- expand: typing.Optional[typing_extensions.Literal["candidate"]] = None,
+ expand: typing.Optional[typing.Literal["candidate"]] = None,
include_deleted_data: typing.Optional[bool] = None,
include_remote_data: typing.Optional[bool] = None,
modified_after: typing.Optional[dt.datetime] = None,
@@ -205,6 +243,7 @@ async def list(
remote_fields: typing.Optional[EeocsListRequestRemoteFields] = None,
remote_id: typing.Optional[str] = None,
show_enum_origins: typing.Optional[EeocsListRequestShowEnumOrigins] = None,
+ request_options: typing.Optional[RequestOptions] = None,
) -> PaginatedEeocList:
"""
Returns a list of `EEOC` objects.
@@ -218,7 +257,7 @@ async def list(
- cursor: typing.Optional[str]. The pagination cursor value.
- - expand: typing.Optional[typing_extensions.Literal["candidate"]]. Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces.
+ - expand: typing.Optional[typing.Literal["candidate"]]. Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces.
- include_deleted_data: typing.Optional[bool]. Whether to include data that was marked as deleted by third party webhooks.
@@ -235,6 +274,8 @@ async def list(
- remote_id: typing.Optional[str]. The API provider's ID for the given object.
- show_enum_origins: typing.Optional[EeocsListRequestShowEnumOrigins]. Which fields should be returned in non-normalized form.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import AsyncMerge
from merge.resources.ats import (
@@ -255,25 +296,41 @@ async def list(
_response = await self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/ats/v1/eeocs"),
- params=remove_none_from_dict(
- {
- "candidate_id": candidate_id,
- "created_after": serialize_datetime(created_after) if created_after is not None else None,
- "created_before": serialize_datetime(created_before) if created_before is not None else None,
- "cursor": cursor,
- "expand": expand,
- "include_deleted_data": include_deleted_data,
- "include_remote_data": include_remote_data,
- "modified_after": serialize_datetime(modified_after) if modified_after is not None else None,
- "modified_before": serialize_datetime(modified_before) if modified_before is not None else None,
- "page_size": page_size,
- "remote_fields": remote_fields,
- "remote_id": remote_id,
- "show_enum_origins": show_enum_origins,
- }
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "candidate_id": candidate_id,
+ "created_after": serialize_datetime(created_after) if created_after is not None else None,
+ "created_before": serialize_datetime(created_before) if created_before is not None else None,
+ "cursor": cursor,
+ "expand": expand,
+ "include_deleted_data": include_deleted_data,
+ "include_remote_data": include_remote_data,
+ "modified_after": serialize_datetime(modified_after) if modified_after is not None else None,
+ "modified_before": serialize_datetime(modified_before) if modified_before is not None else None,
+ "page_size": page_size,
+ "remote_fields": remote_fields,
+ "remote_id": remote_id,
+ "show_enum_origins": show_enum_origins,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(PaginatedEeocList, _response.json()) # type: ignore
@@ -287,10 +344,11 @@ async def retrieve(
self,
id: str,
*,
- expand: typing.Optional[typing_extensions.Literal["candidate"]] = None,
+ expand: typing.Optional[typing.Literal["candidate"]] = None,
include_remote_data: typing.Optional[bool] = None,
remote_fields: typing.Optional[EeocsRetrieveRequestRemoteFields] = None,
show_enum_origins: typing.Optional[EeocsRetrieveRequestShowEnumOrigins] = None,
+ request_options: typing.Optional[RequestOptions] = None,
) -> Eeoc:
"""
Returns an `EEOC` object with the given `id`.
@@ -298,13 +356,15 @@ async def retrieve(
Parameters:
- id: str.
- - expand: typing.Optional[typing_extensions.Literal["candidate"]]. Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces.
+ - expand: typing.Optional[typing.Literal["candidate"]]. Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces.
- include_remote_data: typing.Optional[bool]. Whether to include the original data Merge fetched from the third-party to produce these models.
- remote_fields: typing.Optional[EeocsRetrieveRequestRemoteFields]. Deprecated. Use show_enum_origins.
- show_enum_origins: typing.Optional[EeocsRetrieveRequestShowEnumOrigins]. Which fields should be returned in non-normalized form.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import AsyncMerge
from merge.resources.ats import (
@@ -317,7 +377,7 @@ async def retrieve(
api_key="YOUR_API_KEY",
)
await client.ats.eeocs.retrieve(
- id="id",
+ id="string",
expand="candidate",
remote_fields=EeocsRetrieveRequestRemoteFields.DISABILITY_STATUS,
show_enum_origins=EeocsRetrieveRequestShowEnumOrigins.DISABILITY_STATUS,
@@ -326,16 +386,32 @@ async def retrieve(
_response = await self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", f"api/ats/v1/eeocs/{id}"),
- params=remove_none_from_dict(
- {
- "expand": expand,
- "include_remote_data": include_remote_data,
- "remote_fields": remote_fields,
- "show_enum_origins": show_enum_origins,
- }
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "expand": expand,
+ "include_remote_data": include_remote_data,
+ "remote_fields": remote_fields,
+ "show_enum_origins": show_enum_origins,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(Eeoc, _response.json()) # type: ignore
diff --git a/src/merge/resources/ats/resources/force_resync/client.py b/src/merge/resources/ats/resources/force_resync/client.py
index 2d35813e..a9d58f9c 100644
--- a/src/merge/resources/ats/resources/force_resync/client.py
+++ b/src/merge/resources/ats/resources/force_resync/client.py
@@ -6,6 +6,9 @@
from .....core.api_error import ApiError
from .....core.client_wrapper import AsyncClientWrapper, SyncClientWrapper
+from .....core.jsonable_encoder import jsonable_encoder
+from .....core.remove_none_from_dict import remove_none_from_dict
+from .....core.request_options import RequestOptions
from ...types.sync_status import SyncStatus
try:
@@ -18,10 +21,14 @@ class ForceResyncClient:
def __init__(self, *, client_wrapper: SyncClientWrapper):
self._client_wrapper = client_wrapper
- def sync_status_resync_create(self) -> typing.List[SyncStatus]:
+ def sync_status_resync_create(
+ self, *, request_options: typing.Optional[RequestOptions] = None
+ ) -> typing.List[SyncStatus]:
"""
Force re-sync of all models. This is available for all organizations via the dashboard. Force re-sync is also available programmatically via API for monthly, quarterly, and highest sync frequency customers on the Core, Professional, or Enterprise plans. Doing so will consume a sync credit for the relevant linked account.
+ Parameters:
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import Merge
@@ -34,8 +41,23 @@ def sync_status_resync_create(self) -> typing.List[SyncStatus]:
_response = self._client_wrapper.httpx_client.request(
"POST",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/ats/v1/sync-status/resync"),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ request_options.get("additional_query_parameters") if request_options is not None else None
+ ),
+ json=jsonable_encoder(remove_none_from_dict(request_options.get("additional_body_parameters", {})))
+ if request_options is not None
+ else None,
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(typing.List[SyncStatus], _response.json()) # type: ignore
@@ -50,10 +72,14 @@ class AsyncForceResyncClient:
def __init__(self, *, client_wrapper: AsyncClientWrapper):
self._client_wrapper = client_wrapper
- async def sync_status_resync_create(self) -> typing.List[SyncStatus]:
+ async def sync_status_resync_create(
+ self, *, request_options: typing.Optional[RequestOptions] = None
+ ) -> typing.List[SyncStatus]:
"""
Force re-sync of all models. This is available for all organizations via the dashboard. Force re-sync is also available programmatically via API for monthly, quarterly, and highest sync frequency customers on the Core, Professional, or Enterprise plans. Doing so will consume a sync credit for the relevant linked account.
+ Parameters:
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import AsyncMerge
@@ -66,8 +92,23 @@ async def sync_status_resync_create(self) -> typing.List[SyncStatus]:
_response = await self._client_wrapper.httpx_client.request(
"POST",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/ats/v1/sync-status/resync"),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ request_options.get("additional_query_parameters") if request_options is not None else None
+ ),
+ json=jsonable_encoder(remove_none_from_dict(request_options.get("additional_body_parameters", {})))
+ if request_options is not None
+ else None,
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(typing.List[SyncStatus], _response.json()) # type: ignore
diff --git a/src/merge/resources/ats/resources/generate_key/client.py b/src/merge/resources/ats/resources/generate_key/client.py
index 440c1203..cb300c70 100644
--- a/src/merge/resources/ats/resources/generate_key/client.py
+++ b/src/merge/resources/ats/resources/generate_key/client.py
@@ -7,6 +7,8 @@
from .....core.api_error import ApiError
from .....core.client_wrapper import AsyncClientWrapper, SyncClientWrapper
from .....core.jsonable_encoder import jsonable_encoder
+from .....core.remove_none_from_dict import remove_none_from_dict
+from .....core.request_options import RequestOptions
from ...types.remote_key import RemoteKey
try:
@@ -22,12 +24,14 @@ class GenerateKeyClient:
def __init__(self, *, client_wrapper: SyncClientWrapper):
self._client_wrapper = client_wrapper
- def create(self, *, name: str) -> RemoteKey:
+ def create(self, *, name: str, request_options: typing.Optional[RequestOptions] = None) -> RemoteKey:
"""
Create a remote key.
Parameters:
- name: str.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import Merge
@@ -42,9 +46,26 @@ def create(self, *, name: str) -> RemoteKey:
_response = self._client_wrapper.httpx_client.request(
"POST",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/ats/v1/generate-key"),
- json=jsonable_encoder({"name": name}),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ request_options.get("additional_query_parameters") if request_options is not None else None
+ ),
+ json=jsonable_encoder({"name": name})
+ if request_options is None or request_options.get("additional_body_parameters") is None
+ else {
+ **jsonable_encoder({"name": name}),
+ **(jsonable_encoder(remove_none_from_dict(request_options.get("additional_body_parameters", {})))),
+ },
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(RemoteKey, _response.json()) # type: ignore
@@ -59,12 +80,14 @@ class AsyncGenerateKeyClient:
def __init__(self, *, client_wrapper: AsyncClientWrapper):
self._client_wrapper = client_wrapper
- async def create(self, *, name: str) -> RemoteKey:
+ async def create(self, *, name: str, request_options: typing.Optional[RequestOptions] = None) -> RemoteKey:
"""
Create a remote key.
Parameters:
- name: str.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import AsyncMerge
@@ -79,9 +102,26 @@ async def create(self, *, name: str) -> RemoteKey:
_response = await self._client_wrapper.httpx_client.request(
"POST",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/ats/v1/generate-key"),
- json=jsonable_encoder({"name": name}),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ request_options.get("additional_query_parameters") if request_options is not None else None
+ ),
+ json=jsonable_encoder({"name": name})
+ if request_options is None or request_options.get("additional_body_parameters") is None
+ else {
+ **jsonable_encoder({"name": name}),
+ **(jsonable_encoder(remove_none_from_dict(request_options.get("additional_body_parameters", {})))),
+ },
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(RemoteKey, _response.json()) # type: ignore
diff --git a/src/merge/resources/ats/resources/interviews/client.py b/src/merge/resources/ats/resources/interviews/client.py
index a67f941e..eaa0c019 100644
--- a/src/merge/resources/ats/resources/interviews/client.py
+++ b/src/merge/resources/ats/resources/interviews/client.py
@@ -5,13 +5,12 @@
import urllib.parse
from json.decoder import JSONDecodeError
-import typing_extensions
-
from .....core.api_error import ApiError
from .....core.client_wrapper import AsyncClientWrapper, SyncClientWrapper
from .....core.datetime_utils import serialize_datetime
from .....core.jsonable_encoder import jsonable_encoder
from .....core.remove_none_from_dict import remove_none_from_dict
+from .....core.request_options import RequestOptions
from ...types.meta_response import MetaResponse
from ...types.paginated_scheduled_interview_list import PaginatedScheduledInterviewList
from ...types.scheduled_interview import ScheduledInterview
@@ -49,9 +48,10 @@ def list(
modified_before: typing.Optional[dt.datetime] = None,
organizer_id: typing.Optional[str] = None,
page_size: typing.Optional[int] = None,
- remote_fields: typing.Optional[typing_extensions.Literal["status"]] = None,
+ remote_fields: typing.Optional[typing.Literal["status"]] = None,
remote_id: typing.Optional[str] = None,
- show_enum_origins: typing.Optional[typing_extensions.Literal["status"]] = None,
+ show_enum_origins: typing.Optional[typing.Literal["status"]] = None,
+ request_options: typing.Optional[RequestOptions] = None,
) -> PaginatedScheduledInterviewList:
"""
Returns a list of `ScheduledInterview` objects.
@@ -83,11 +83,13 @@ def list(
- page_size: typing.Optional[int]. Number of results to return per page.
- - remote_fields: typing.Optional[typing_extensions.Literal["status"]]. Deprecated. Use show_enum_origins.
+ - remote_fields: typing.Optional[typing.Literal["status"]]. Deprecated. Use show_enum_origins.
- remote_id: typing.Optional[str]. The API provider's ID for the given object.
- - show_enum_origins: typing.Optional[typing_extensions.Literal["status"]]. Which fields should be returned in non-normalized form.
+ - show_enum_origins: typing.Optional[typing.Literal["status"]]. Which fields should be returned in non-normalized form.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import Merge
from merge.resources.ats import InterviewsListRequestExpand
@@ -105,28 +107,44 @@ def list(
_response = self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/ats/v1/interviews"),
- params=remove_none_from_dict(
- {
- "application_id": application_id,
- "created_after": serialize_datetime(created_after) if created_after is not None else None,
- "created_before": serialize_datetime(created_before) if created_before is not None else None,
- "cursor": cursor,
- "expand": expand,
- "include_deleted_data": include_deleted_data,
- "include_remote_data": include_remote_data,
- "job_id": job_id,
- "job_interview_stage_id": job_interview_stage_id,
- "modified_after": serialize_datetime(modified_after) if modified_after is not None else None,
- "modified_before": serialize_datetime(modified_before) if modified_before is not None else None,
- "organizer_id": organizer_id,
- "page_size": page_size,
- "remote_fields": remote_fields,
- "remote_id": remote_id,
- "show_enum_origins": show_enum_origins,
- }
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "application_id": application_id,
+ "created_after": serialize_datetime(created_after) if created_after is not None else None,
+ "created_before": serialize_datetime(created_before) if created_before is not None else None,
+ "cursor": cursor,
+ "expand": expand,
+ "include_deleted_data": include_deleted_data,
+ "include_remote_data": include_remote_data,
+ "job_id": job_id,
+ "job_interview_stage_id": job_interview_stage_id,
+ "modified_after": serialize_datetime(modified_after) if modified_after is not None else None,
+ "modified_before": serialize_datetime(modified_before) if modified_before is not None else None,
+ "organizer_id": organizer_id,
+ "page_size": page_size,
+ "remote_fields": remote_fields,
+ "remote_id": remote_id,
+ "show_enum_origins": show_enum_origins,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(PaginatedScheduledInterviewList, _response.json()) # type: ignore
@@ -143,6 +161,7 @@ def create(
run_async: typing.Optional[bool] = None,
model: ScheduledInterviewRequest,
remote_user_id: str,
+ request_options: typing.Optional[RequestOptions] = None,
) -> ScheduledInterviewResponse:
"""
Creates a `ScheduledInterview` object with the given values.
@@ -155,14 +174,64 @@ def create(
- model: ScheduledInterviewRequest.
- remote_user_id: str.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
+ ---
+ import datetime
+
+ from merge.client import Merge
+ from merge.resources.ats import ScheduledInterviewRequest
+
+ client = Merge(
+ account_token="YOUR_ACCOUNT_TOKEN",
+ api_key="YOUR_API_KEY",
+ )
+ client.ats.interviews.create(
+ model=ScheduledInterviewRequest(
+ location="Embarcadero Center 2",
+ start_at=datetime.datetime.fromisoformat(
+ "2021-10-15 00:00:00+00:00",
+ ),
+ end_at=datetime.datetime.fromisoformat(
+ "2021-10-15 02:00:00+00:00",
+ ),
+ ),
+ remote_user_id="string",
+ )
"""
_response = self._client_wrapper.httpx_client.request(
"POST",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/ats/v1/interviews"),
- params=remove_none_from_dict({"is_debug_mode": is_debug_mode, "run_async": run_async}),
- json=jsonable_encoder({"model": model, "remote_user_id": remote_user_id}),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "is_debug_mode": is_debug_mode,
+ "run_async": run_async,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ json=jsonable_encoder({"model": model, "remote_user_id": remote_user_id})
+ if request_options is None or request_options.get("additional_body_parameters") is None
+ else {
+ **jsonable_encoder({"model": model, "remote_user_id": remote_user_id}),
+ **(jsonable_encoder(remove_none_from_dict(request_options.get("additional_body_parameters", {})))),
+ },
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(ScheduledInterviewResponse, _response.json()) # type: ignore
@@ -178,8 +247,9 @@ def retrieve(
*,
expand: typing.Optional[InterviewsRetrieveRequestExpand] = None,
include_remote_data: typing.Optional[bool] = None,
- remote_fields: typing.Optional[typing_extensions.Literal["status"]] = None,
- show_enum_origins: typing.Optional[typing_extensions.Literal["status"]] = None,
+ remote_fields: typing.Optional[typing.Literal["status"]] = None,
+ show_enum_origins: typing.Optional[typing.Literal["status"]] = None,
+ request_options: typing.Optional[RequestOptions] = None,
) -> ScheduledInterview:
"""
Returns a `ScheduledInterview` object with the given `id`.
@@ -191,9 +261,11 @@ def retrieve(
- include_remote_data: typing.Optional[bool]. Whether to include the original data Merge fetched from the third-party to produce these models.
- - remote_fields: typing.Optional[typing_extensions.Literal["status"]]. Deprecated. Use show_enum_origins.
+ - remote_fields: typing.Optional[typing.Literal["status"]]. Deprecated. Use show_enum_origins.
- - show_enum_origins: typing.Optional[typing_extensions.Literal["status"]]. Which fields should be returned in non-normalized form.
+ - show_enum_origins: typing.Optional[typing.Literal["status"]]. Which fields should be returned in non-normalized form.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import Merge
from merge.resources.ats import InterviewsRetrieveRequestExpand
@@ -203,7 +275,7 @@ def retrieve(
api_key="YOUR_API_KEY",
)
client.ats.interviews.retrieve(
- id="id",
+ id="string",
expand=InterviewsRetrieveRequestExpand.APPLICATION,
remote_fields="status",
show_enum_origins="status",
@@ -212,16 +284,32 @@ def retrieve(
_response = self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", f"api/ats/v1/interviews/{id}"),
- params=remove_none_from_dict(
- {
- "expand": expand,
- "include_remote_data": include_remote_data,
- "remote_fields": remote_fields,
- "show_enum_origins": show_enum_origins,
- }
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "expand": expand,
+ "include_remote_data": include_remote_data,
+ "remote_fields": remote_fields,
+ "show_enum_origins": show_enum_origins,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(ScheduledInterview, _response.json()) # type: ignore
@@ -231,10 +319,12 @@ def retrieve(
raise ApiError(status_code=_response.status_code, body=_response.text)
raise ApiError(status_code=_response.status_code, body=_response_json)
- def meta_post_retrieve(self) -> MetaResponse:
+ def meta_post_retrieve(self, *, request_options: typing.Optional[RequestOptions] = None) -> MetaResponse:
"""
Returns metadata for `ScheduledInterview` POSTs.
+ Parameters:
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import Merge
@@ -247,8 +337,20 @@ def meta_post_retrieve(self) -> MetaResponse:
_response = self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/ats/v1/interviews/meta/post"),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ request_options.get("additional_query_parameters") if request_options is not None else None
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(MetaResponse, _response.json()) # type: ignore
@@ -279,9 +381,10 @@ async def list(
modified_before: typing.Optional[dt.datetime] = None,
organizer_id: typing.Optional[str] = None,
page_size: typing.Optional[int] = None,
- remote_fields: typing.Optional[typing_extensions.Literal["status"]] = None,
+ remote_fields: typing.Optional[typing.Literal["status"]] = None,
remote_id: typing.Optional[str] = None,
- show_enum_origins: typing.Optional[typing_extensions.Literal["status"]] = None,
+ show_enum_origins: typing.Optional[typing.Literal["status"]] = None,
+ request_options: typing.Optional[RequestOptions] = None,
) -> PaginatedScheduledInterviewList:
"""
Returns a list of `ScheduledInterview` objects.
@@ -313,11 +416,13 @@ async def list(
- page_size: typing.Optional[int]. Number of results to return per page.
- - remote_fields: typing.Optional[typing_extensions.Literal["status"]]. Deprecated. Use show_enum_origins.
+ - remote_fields: typing.Optional[typing.Literal["status"]]. Deprecated. Use show_enum_origins.
- remote_id: typing.Optional[str]. The API provider's ID for the given object.
- - show_enum_origins: typing.Optional[typing_extensions.Literal["status"]]. Which fields should be returned in non-normalized form.
+ - show_enum_origins: typing.Optional[typing.Literal["status"]]. Which fields should be returned in non-normalized form.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import AsyncMerge
from merge.resources.ats import InterviewsListRequestExpand
@@ -335,28 +440,44 @@ async def list(
_response = await self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/ats/v1/interviews"),
- params=remove_none_from_dict(
- {
- "application_id": application_id,
- "created_after": serialize_datetime(created_after) if created_after is not None else None,
- "created_before": serialize_datetime(created_before) if created_before is not None else None,
- "cursor": cursor,
- "expand": expand,
- "include_deleted_data": include_deleted_data,
- "include_remote_data": include_remote_data,
- "job_id": job_id,
- "job_interview_stage_id": job_interview_stage_id,
- "modified_after": serialize_datetime(modified_after) if modified_after is not None else None,
- "modified_before": serialize_datetime(modified_before) if modified_before is not None else None,
- "organizer_id": organizer_id,
- "page_size": page_size,
- "remote_fields": remote_fields,
- "remote_id": remote_id,
- "show_enum_origins": show_enum_origins,
- }
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "application_id": application_id,
+ "created_after": serialize_datetime(created_after) if created_after is not None else None,
+ "created_before": serialize_datetime(created_before) if created_before is not None else None,
+ "cursor": cursor,
+ "expand": expand,
+ "include_deleted_data": include_deleted_data,
+ "include_remote_data": include_remote_data,
+ "job_id": job_id,
+ "job_interview_stage_id": job_interview_stage_id,
+ "modified_after": serialize_datetime(modified_after) if modified_after is not None else None,
+ "modified_before": serialize_datetime(modified_before) if modified_before is not None else None,
+ "organizer_id": organizer_id,
+ "page_size": page_size,
+ "remote_fields": remote_fields,
+ "remote_id": remote_id,
+ "show_enum_origins": show_enum_origins,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(PaginatedScheduledInterviewList, _response.json()) # type: ignore
@@ -373,6 +494,7 @@ async def create(
run_async: typing.Optional[bool] = None,
model: ScheduledInterviewRequest,
remote_user_id: str,
+ request_options: typing.Optional[RequestOptions] = None,
) -> ScheduledInterviewResponse:
"""
Creates a `ScheduledInterview` object with the given values.
@@ -385,14 +507,64 @@ async def create(
- model: ScheduledInterviewRequest.
- remote_user_id: str.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
+ ---
+ import datetime
+
+ from merge.client import AsyncMerge
+ from merge.resources.ats import ScheduledInterviewRequest
+
+ client = AsyncMerge(
+ account_token="YOUR_ACCOUNT_TOKEN",
+ api_key="YOUR_API_KEY",
+ )
+ await client.ats.interviews.create(
+ model=ScheduledInterviewRequest(
+ location="Embarcadero Center 2",
+ start_at=datetime.datetime.fromisoformat(
+ "2021-10-15 00:00:00+00:00",
+ ),
+ end_at=datetime.datetime.fromisoformat(
+ "2021-10-15 02:00:00+00:00",
+ ),
+ ),
+ remote_user_id="string",
+ )
"""
_response = await self._client_wrapper.httpx_client.request(
"POST",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/ats/v1/interviews"),
- params=remove_none_from_dict({"is_debug_mode": is_debug_mode, "run_async": run_async}),
- json=jsonable_encoder({"model": model, "remote_user_id": remote_user_id}),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "is_debug_mode": is_debug_mode,
+ "run_async": run_async,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ json=jsonable_encoder({"model": model, "remote_user_id": remote_user_id})
+ if request_options is None or request_options.get("additional_body_parameters") is None
+ else {
+ **jsonable_encoder({"model": model, "remote_user_id": remote_user_id}),
+ **(jsonable_encoder(remove_none_from_dict(request_options.get("additional_body_parameters", {})))),
+ },
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(ScheduledInterviewResponse, _response.json()) # type: ignore
@@ -408,8 +580,9 @@ async def retrieve(
*,
expand: typing.Optional[InterviewsRetrieveRequestExpand] = None,
include_remote_data: typing.Optional[bool] = None,
- remote_fields: typing.Optional[typing_extensions.Literal["status"]] = None,
- show_enum_origins: typing.Optional[typing_extensions.Literal["status"]] = None,
+ remote_fields: typing.Optional[typing.Literal["status"]] = None,
+ show_enum_origins: typing.Optional[typing.Literal["status"]] = None,
+ request_options: typing.Optional[RequestOptions] = None,
) -> ScheduledInterview:
"""
Returns a `ScheduledInterview` object with the given `id`.
@@ -421,9 +594,11 @@ async def retrieve(
- include_remote_data: typing.Optional[bool]. Whether to include the original data Merge fetched from the third-party to produce these models.
- - remote_fields: typing.Optional[typing_extensions.Literal["status"]]. Deprecated. Use show_enum_origins.
+ - remote_fields: typing.Optional[typing.Literal["status"]]. Deprecated. Use show_enum_origins.
- - show_enum_origins: typing.Optional[typing_extensions.Literal["status"]]. Which fields should be returned in non-normalized form.
+ - show_enum_origins: typing.Optional[typing.Literal["status"]]. Which fields should be returned in non-normalized form.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import AsyncMerge
from merge.resources.ats import InterviewsRetrieveRequestExpand
@@ -433,7 +608,7 @@ async def retrieve(
api_key="YOUR_API_KEY",
)
await client.ats.interviews.retrieve(
- id="id",
+ id="string",
expand=InterviewsRetrieveRequestExpand.APPLICATION,
remote_fields="status",
show_enum_origins="status",
@@ -442,16 +617,32 @@ async def retrieve(
_response = await self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", f"api/ats/v1/interviews/{id}"),
- params=remove_none_from_dict(
- {
- "expand": expand,
- "include_remote_data": include_remote_data,
- "remote_fields": remote_fields,
- "show_enum_origins": show_enum_origins,
- }
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "expand": expand,
+ "include_remote_data": include_remote_data,
+ "remote_fields": remote_fields,
+ "show_enum_origins": show_enum_origins,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(ScheduledInterview, _response.json()) # type: ignore
@@ -461,10 +652,12 @@ async def retrieve(
raise ApiError(status_code=_response.status_code, body=_response.text)
raise ApiError(status_code=_response.status_code, body=_response_json)
- async def meta_post_retrieve(self) -> MetaResponse:
+ async def meta_post_retrieve(self, *, request_options: typing.Optional[RequestOptions] = None) -> MetaResponse:
"""
Returns metadata for `ScheduledInterview` POSTs.
+ Parameters:
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import AsyncMerge
@@ -477,8 +670,20 @@ async def meta_post_retrieve(self) -> MetaResponse:
_response = await self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/ats/v1/interviews/meta/post"),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ request_options.get("additional_query_parameters") if request_options is not None else None
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(MetaResponse, _response.json()) # type: ignore
diff --git a/src/merge/resources/ats/resources/issues/client.py b/src/merge/resources/ats/resources/issues/client.py
index b8da6663..b58c1f89 100644
--- a/src/merge/resources/ats/resources/issues/client.py
+++ b/src/merge/resources/ats/resources/issues/client.py
@@ -8,7 +8,9 @@
from .....core.api_error import ApiError
from .....core.client_wrapper import AsyncClientWrapper, SyncClientWrapper
from .....core.datetime_utils import serialize_datetime
+from .....core.jsonable_encoder import jsonable_encoder
from .....core.remove_none_from_dict import remove_none_from_dict
+from .....core.request_options import RequestOptions
from ...types.issue import Issue
from ...types.paginated_issue_list import PaginatedIssueList
from .types.issues_list_request_status import IssuesListRequestStatus
@@ -39,6 +41,7 @@ def list(
page_size: typing.Optional[int] = None,
start_date: typing.Optional[str] = None,
status: typing.Optional[IssuesListRequestStatus] = None,
+ request_options: typing.Optional[RequestOptions] = None,
) -> PaginatedIssueList:
"""
Gets issues.
@@ -71,7 +74,9 @@ def list(
- status: typing.Optional[IssuesListRequestStatus]. Status of the issue. Options: ('ONGOING', 'RESOLVED')
- `ONGOING` - ONGOING
- - `RESOLVED` - RESOLVED---
+ - `RESOLVED` - RESOLVED
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
+ ---
from merge.client import Merge
from merge.resources.ats import IssuesListRequestStatus
@@ -86,33 +91,49 @@ def list(
_response = self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/ats/v1/issues"),
- params=remove_none_from_dict(
- {
- "account_token": account_token,
- "cursor": cursor,
- "end_date": end_date,
- "end_user_organization_name": end_user_organization_name,
- "first_incident_time_after": serialize_datetime(first_incident_time_after)
- if first_incident_time_after is not None
- else None,
- "first_incident_time_before": serialize_datetime(first_incident_time_before)
- if first_incident_time_before is not None
- else None,
- "include_muted": include_muted,
- "integration_name": integration_name,
- "last_incident_time_after": serialize_datetime(last_incident_time_after)
- if last_incident_time_after is not None
- else None,
- "last_incident_time_before": serialize_datetime(last_incident_time_before)
- if last_incident_time_before is not None
- else None,
- "page_size": page_size,
- "start_date": start_date,
- "status": status,
- }
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "account_token": account_token,
+ "cursor": cursor,
+ "end_date": end_date,
+ "end_user_organization_name": end_user_organization_name,
+ "first_incident_time_after": serialize_datetime(first_incident_time_after)
+ if first_incident_time_after is not None
+ else None,
+ "first_incident_time_before": serialize_datetime(first_incident_time_before)
+ if first_incident_time_before is not None
+ else None,
+ "include_muted": include_muted,
+ "integration_name": integration_name,
+ "last_incident_time_after": serialize_datetime(last_incident_time_after)
+ if last_incident_time_after is not None
+ else None,
+ "last_incident_time_before": serialize_datetime(last_incident_time_before)
+ if last_incident_time_before is not None
+ else None,
+ "page_size": page_size,
+ "start_date": start_date,
+ "status": status,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(PaginatedIssueList, _response.json()) # type: ignore
@@ -122,12 +143,14 @@ def list(
raise ApiError(status_code=_response.status_code, body=_response.text)
raise ApiError(status_code=_response.status_code, body=_response_json)
- def retrieve(self, id: str) -> Issue:
+ def retrieve(self, id: str, *, request_options: typing.Optional[RequestOptions] = None) -> Issue:
"""
Get a specific issue.
Parameters:
- id: str.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import Merge
@@ -136,14 +159,26 @@ def retrieve(self, id: str) -> Issue:
api_key="YOUR_API_KEY",
)
client.ats.issues.retrieve(
- id="id",
+ id="string",
)
"""
_response = self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", f"api/ats/v1/issues/{id}"),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ request_options.get("additional_query_parameters") if request_options is not None else None
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(Issue, _response.json()) # type: ignore
@@ -174,6 +209,7 @@ async def list(
page_size: typing.Optional[int] = None,
start_date: typing.Optional[str] = None,
status: typing.Optional[IssuesListRequestStatus] = None,
+ request_options: typing.Optional[RequestOptions] = None,
) -> PaginatedIssueList:
"""
Gets issues.
@@ -206,7 +242,9 @@ async def list(
- status: typing.Optional[IssuesListRequestStatus]. Status of the issue. Options: ('ONGOING', 'RESOLVED')
- `ONGOING` - ONGOING
- - `RESOLVED` - RESOLVED---
+ - `RESOLVED` - RESOLVED
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
+ ---
from merge.client import AsyncMerge
from merge.resources.ats import IssuesListRequestStatus
@@ -221,33 +259,49 @@ async def list(
_response = await self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/ats/v1/issues"),
- params=remove_none_from_dict(
- {
- "account_token": account_token,
- "cursor": cursor,
- "end_date": end_date,
- "end_user_organization_name": end_user_organization_name,
- "first_incident_time_after": serialize_datetime(first_incident_time_after)
- if first_incident_time_after is not None
- else None,
- "first_incident_time_before": serialize_datetime(first_incident_time_before)
- if first_incident_time_before is not None
- else None,
- "include_muted": include_muted,
- "integration_name": integration_name,
- "last_incident_time_after": serialize_datetime(last_incident_time_after)
- if last_incident_time_after is not None
- else None,
- "last_incident_time_before": serialize_datetime(last_incident_time_before)
- if last_incident_time_before is not None
- else None,
- "page_size": page_size,
- "start_date": start_date,
- "status": status,
- }
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "account_token": account_token,
+ "cursor": cursor,
+ "end_date": end_date,
+ "end_user_organization_name": end_user_organization_name,
+ "first_incident_time_after": serialize_datetime(first_incident_time_after)
+ if first_incident_time_after is not None
+ else None,
+ "first_incident_time_before": serialize_datetime(first_incident_time_before)
+ if first_incident_time_before is not None
+ else None,
+ "include_muted": include_muted,
+ "integration_name": integration_name,
+ "last_incident_time_after": serialize_datetime(last_incident_time_after)
+ if last_incident_time_after is not None
+ else None,
+ "last_incident_time_before": serialize_datetime(last_incident_time_before)
+ if last_incident_time_before is not None
+ else None,
+ "page_size": page_size,
+ "start_date": start_date,
+ "status": status,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(PaginatedIssueList, _response.json()) # type: ignore
@@ -257,12 +311,14 @@ async def list(
raise ApiError(status_code=_response.status_code, body=_response.text)
raise ApiError(status_code=_response.status_code, body=_response_json)
- async def retrieve(self, id: str) -> Issue:
+ async def retrieve(self, id: str, *, request_options: typing.Optional[RequestOptions] = None) -> Issue:
"""
Get a specific issue.
Parameters:
- id: str.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import AsyncMerge
@@ -271,14 +327,26 @@ async def retrieve(self, id: str) -> Issue:
api_key="YOUR_API_KEY",
)
await client.ats.issues.retrieve(
- id="id",
+ id="string",
)
"""
_response = await self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", f"api/ats/v1/issues/{id}"),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ request_options.get("additional_query_parameters") if request_options is not None else None
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(Issue, _response.json()) # type: ignore
diff --git a/src/merge/resources/ats/resources/job_interview_stages/client.py b/src/merge/resources/ats/resources/job_interview_stages/client.py
index ff5b649f..3b4fae17 100644
--- a/src/merge/resources/ats/resources/job_interview_stages/client.py
+++ b/src/merge/resources/ats/resources/job_interview_stages/client.py
@@ -5,12 +5,12 @@
import urllib.parse
from json.decoder import JSONDecodeError
-import typing_extensions
-
from .....core.api_error import ApiError
from .....core.client_wrapper import AsyncClientWrapper, SyncClientWrapper
from .....core.datetime_utils import serialize_datetime
+from .....core.jsonable_encoder import jsonable_encoder
from .....core.remove_none_from_dict import remove_none_from_dict
+from .....core.request_options import RequestOptions
from ...types.job_interview_stage import JobInterviewStage
from ...types.paginated_job_interview_stage_list import PaginatedJobInterviewStageList
@@ -30,7 +30,7 @@ def list(
created_after: typing.Optional[dt.datetime] = None,
created_before: typing.Optional[dt.datetime] = None,
cursor: typing.Optional[str] = None,
- expand: typing.Optional[typing_extensions.Literal["job"]] = None,
+ expand: typing.Optional[typing.Literal["job"]] = None,
include_deleted_data: typing.Optional[bool] = None,
include_remote_data: typing.Optional[bool] = None,
job_id: typing.Optional[str] = None,
@@ -38,6 +38,7 @@ def list(
modified_before: typing.Optional[dt.datetime] = None,
page_size: typing.Optional[int] = None,
remote_id: typing.Optional[str] = None,
+ request_options: typing.Optional[RequestOptions] = None,
) -> PaginatedJobInterviewStageList:
"""
Returns a list of `JobInterviewStage` objects.
@@ -49,7 +50,7 @@ def list(
- cursor: typing.Optional[str]. The pagination cursor value.
- - expand: typing.Optional[typing_extensions.Literal["job"]]. Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces.
+ - expand: typing.Optional[typing.Literal["job"]]. Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces.
- include_deleted_data: typing.Optional[bool]. Whether to include data that was marked as deleted by third party webhooks.
@@ -64,6 +65,8 @@ def list(
- page_size: typing.Optional[int]. Number of results to return per page.
- remote_id: typing.Optional[str]. The API provider's ID for the given object.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import Merge
@@ -78,23 +81,39 @@ def list(
_response = self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/ats/v1/job-interview-stages"),
- params=remove_none_from_dict(
- {
- "created_after": serialize_datetime(created_after) if created_after is not None else None,
- "created_before": serialize_datetime(created_before) if created_before is not None else None,
- "cursor": cursor,
- "expand": expand,
- "include_deleted_data": include_deleted_data,
- "include_remote_data": include_remote_data,
- "job_id": job_id,
- "modified_after": serialize_datetime(modified_after) if modified_after is not None else None,
- "modified_before": serialize_datetime(modified_before) if modified_before is not None else None,
- "page_size": page_size,
- "remote_id": remote_id,
- }
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "created_after": serialize_datetime(created_after) if created_after is not None else None,
+ "created_before": serialize_datetime(created_before) if created_before is not None else None,
+ "cursor": cursor,
+ "expand": expand,
+ "include_deleted_data": include_deleted_data,
+ "include_remote_data": include_remote_data,
+ "job_id": job_id,
+ "modified_after": serialize_datetime(modified_after) if modified_after is not None else None,
+ "modified_before": serialize_datetime(modified_before) if modified_before is not None else None,
+ "page_size": page_size,
+ "remote_id": remote_id,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(PaginatedJobInterviewStageList, _response.json()) # type: ignore
@@ -108,8 +127,9 @@ def retrieve(
self,
id: str,
*,
- expand: typing.Optional[typing_extensions.Literal["job"]] = None,
+ expand: typing.Optional[typing.Literal["job"]] = None,
include_remote_data: typing.Optional[bool] = None,
+ request_options: typing.Optional[RequestOptions] = None,
) -> JobInterviewStage:
"""
Returns a `JobInterviewStage` object with the given `id`.
@@ -117,9 +137,11 @@ def retrieve(
Parameters:
- id: str.
- - expand: typing.Optional[typing_extensions.Literal["job"]]. Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces.
+ - expand: typing.Optional[typing.Literal["job"]]. Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces.
- include_remote_data: typing.Optional[bool]. Whether to include the original data Merge fetched from the third-party to produce these models.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import Merge
@@ -128,16 +150,37 @@ def retrieve(
api_key="YOUR_API_KEY",
)
client.ats.job_interview_stages.retrieve(
- id="id",
+ id="string",
expand="job",
)
"""
_response = self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", f"api/ats/v1/job-interview-stages/{id}"),
- params=remove_none_from_dict({"expand": expand, "include_remote_data": include_remote_data}),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "expand": expand,
+ "include_remote_data": include_remote_data,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(JobInterviewStage, _response.json()) # type: ignore
@@ -158,7 +201,7 @@ async def list(
created_after: typing.Optional[dt.datetime] = None,
created_before: typing.Optional[dt.datetime] = None,
cursor: typing.Optional[str] = None,
- expand: typing.Optional[typing_extensions.Literal["job"]] = None,
+ expand: typing.Optional[typing.Literal["job"]] = None,
include_deleted_data: typing.Optional[bool] = None,
include_remote_data: typing.Optional[bool] = None,
job_id: typing.Optional[str] = None,
@@ -166,6 +209,7 @@ async def list(
modified_before: typing.Optional[dt.datetime] = None,
page_size: typing.Optional[int] = None,
remote_id: typing.Optional[str] = None,
+ request_options: typing.Optional[RequestOptions] = None,
) -> PaginatedJobInterviewStageList:
"""
Returns a list of `JobInterviewStage` objects.
@@ -177,7 +221,7 @@ async def list(
- cursor: typing.Optional[str]. The pagination cursor value.
- - expand: typing.Optional[typing_extensions.Literal["job"]]. Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces.
+ - expand: typing.Optional[typing.Literal["job"]]. Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces.
- include_deleted_data: typing.Optional[bool]. Whether to include data that was marked as deleted by third party webhooks.
@@ -192,6 +236,8 @@ async def list(
- page_size: typing.Optional[int]. Number of results to return per page.
- remote_id: typing.Optional[str]. The API provider's ID for the given object.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import AsyncMerge
@@ -206,23 +252,39 @@ async def list(
_response = await self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/ats/v1/job-interview-stages"),
- params=remove_none_from_dict(
- {
- "created_after": serialize_datetime(created_after) if created_after is not None else None,
- "created_before": serialize_datetime(created_before) if created_before is not None else None,
- "cursor": cursor,
- "expand": expand,
- "include_deleted_data": include_deleted_data,
- "include_remote_data": include_remote_data,
- "job_id": job_id,
- "modified_after": serialize_datetime(modified_after) if modified_after is not None else None,
- "modified_before": serialize_datetime(modified_before) if modified_before is not None else None,
- "page_size": page_size,
- "remote_id": remote_id,
- }
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "created_after": serialize_datetime(created_after) if created_after is not None else None,
+ "created_before": serialize_datetime(created_before) if created_before is not None else None,
+ "cursor": cursor,
+ "expand": expand,
+ "include_deleted_data": include_deleted_data,
+ "include_remote_data": include_remote_data,
+ "job_id": job_id,
+ "modified_after": serialize_datetime(modified_after) if modified_after is not None else None,
+ "modified_before": serialize_datetime(modified_before) if modified_before is not None else None,
+ "page_size": page_size,
+ "remote_id": remote_id,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(PaginatedJobInterviewStageList, _response.json()) # type: ignore
@@ -236,8 +298,9 @@ async def retrieve(
self,
id: str,
*,
- expand: typing.Optional[typing_extensions.Literal["job"]] = None,
+ expand: typing.Optional[typing.Literal["job"]] = None,
include_remote_data: typing.Optional[bool] = None,
+ request_options: typing.Optional[RequestOptions] = None,
) -> JobInterviewStage:
"""
Returns a `JobInterviewStage` object with the given `id`.
@@ -245,9 +308,11 @@ async def retrieve(
Parameters:
- id: str.
- - expand: typing.Optional[typing_extensions.Literal["job"]]. Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces.
+ - expand: typing.Optional[typing.Literal["job"]]. Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces.
- include_remote_data: typing.Optional[bool]. Whether to include the original data Merge fetched from the third-party to produce these models.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import AsyncMerge
@@ -256,16 +321,37 @@ async def retrieve(
api_key="YOUR_API_KEY",
)
await client.ats.job_interview_stages.retrieve(
- id="id",
+ id="string",
expand="job",
)
"""
_response = await self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", f"api/ats/v1/job-interview-stages/{id}"),
- params=remove_none_from_dict({"expand": expand, "include_remote_data": include_remote_data}),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "expand": expand,
+ "include_remote_data": include_remote_data,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(JobInterviewStage, _response.json()) # type: ignore
diff --git a/src/merge/resources/ats/resources/jobs/client.py b/src/merge/resources/ats/resources/jobs/client.py
index 1cd5b67e..256742d4 100644
--- a/src/merge/resources/ats/resources/jobs/client.py
+++ b/src/merge/resources/ats/resources/jobs/client.py
@@ -5,12 +5,12 @@
import urllib.parse
from json.decoder import JSONDecodeError
-import typing_extensions
-
from .....core.api_error import ApiError
from .....core.client_wrapper import AsyncClientWrapper, SyncClientWrapper
from .....core.datetime_utils import serialize_datetime
+from .....core.jsonable_encoder import jsonable_encoder
from .....core.remove_none_from_dict import remove_none_from_dict
+from .....core.request_options import RequestOptions
from ...types.job import Job
from ...types.paginated_job_list import PaginatedJobList
from ...types.paginated_screening_question_list import PaginatedScreeningQuestionList
@@ -43,10 +43,11 @@ def list(
modified_before: typing.Optional[dt.datetime] = None,
offices: typing.Optional[str] = None,
page_size: typing.Optional[int] = None,
- remote_fields: typing.Optional[typing_extensions.Literal["status"]] = None,
+ remote_fields: typing.Optional[typing.Literal["status"]] = None,
remote_id: typing.Optional[str] = None,
- show_enum_origins: typing.Optional[typing_extensions.Literal["status"]] = None,
+ show_enum_origins: typing.Optional[typing.Literal["status"]] = None,
status: typing.Optional[JobsListRequestStatus] = None,
+ request_options: typing.Optional[RequestOptions] = None,
) -> PaginatedJobList:
"""
Returns a list of `Job` objects.
@@ -74,11 +75,11 @@ def list(
- page_size: typing.Optional[int]. Number of results to return per page.
- - remote_fields: typing.Optional[typing_extensions.Literal["status"]]. Deprecated. Use show_enum_origins.
+ - remote_fields: typing.Optional[typing.Literal["status"]]. Deprecated. Use show_enum_origins.
- remote_id: typing.Optional[str]. The API provider's ID for the given object.
- - show_enum_origins: typing.Optional[typing_extensions.Literal["status"]]. Which fields should be returned in non-normalized form.
+ - show_enum_origins: typing.Optional[typing.Literal["status"]]. Which fields should be returned in non-normalized form.
- status: typing.Optional[JobsListRequestStatus]. If provided, will only return jobs with this status. Options: ('OPEN', 'CLOSED', 'DRAFT', 'ARCHIVED', 'PENDING')
@@ -86,7 +87,9 @@ def list(
- `CLOSED` - CLOSED
- `DRAFT` - DRAFT
- `ARCHIVED` - ARCHIVED
- - `PENDING` - PENDING---
+ - `PENDING` - PENDING
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
+ ---
from merge.client import Merge
from merge.resources.ats import JobsListRequestExpand, JobsListRequestStatus
@@ -104,27 +107,43 @@ def list(
_response = self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/ats/v1/jobs"),
- params=remove_none_from_dict(
- {
- "code": code,
- "created_after": serialize_datetime(created_after) if created_after is not None else None,
- "created_before": serialize_datetime(created_before) if created_before is not None else None,
- "cursor": cursor,
- "expand": expand,
- "include_deleted_data": include_deleted_data,
- "include_remote_data": include_remote_data,
- "modified_after": serialize_datetime(modified_after) if modified_after is not None else None,
- "modified_before": serialize_datetime(modified_before) if modified_before is not None else None,
- "offices": offices,
- "page_size": page_size,
- "remote_fields": remote_fields,
- "remote_id": remote_id,
- "show_enum_origins": show_enum_origins,
- "status": status,
- }
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "code": code,
+ "created_after": serialize_datetime(created_after) if created_after is not None else None,
+ "created_before": serialize_datetime(created_before) if created_before is not None else None,
+ "cursor": cursor,
+ "expand": expand,
+ "include_deleted_data": include_deleted_data,
+ "include_remote_data": include_remote_data,
+ "modified_after": serialize_datetime(modified_after) if modified_after is not None else None,
+ "modified_before": serialize_datetime(modified_before) if modified_before is not None else None,
+ "offices": offices,
+ "page_size": page_size,
+ "remote_fields": remote_fields,
+ "remote_id": remote_id,
+ "show_enum_origins": show_enum_origins,
+ "status": status,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(PaginatedJobList, _response.json()) # type: ignore
@@ -140,8 +159,9 @@ def retrieve(
*,
expand: typing.Optional[JobsRetrieveRequestExpand] = None,
include_remote_data: typing.Optional[bool] = None,
- remote_fields: typing.Optional[typing_extensions.Literal["status"]] = None,
- show_enum_origins: typing.Optional[typing_extensions.Literal["status"]] = None,
+ remote_fields: typing.Optional[typing.Literal["status"]] = None,
+ show_enum_origins: typing.Optional[typing.Literal["status"]] = None,
+ request_options: typing.Optional[RequestOptions] = None,
) -> Job:
"""
Returns a `Job` object with the given `id`.
@@ -153,9 +173,11 @@ def retrieve(
- include_remote_data: typing.Optional[bool]. Whether to include the original data Merge fetched from the third-party to produce these models.
- - remote_fields: typing.Optional[typing_extensions.Literal["status"]]. Deprecated. Use show_enum_origins.
+ - remote_fields: typing.Optional[typing.Literal["status"]]. Deprecated. Use show_enum_origins.
+
+ - show_enum_origins: typing.Optional[typing.Literal["status"]]. Which fields should be returned in non-normalized form.
- - show_enum_origins: typing.Optional[typing_extensions.Literal["status"]]. Which fields should be returned in non-normalized form.
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import Merge
from merge.resources.ats import JobsRetrieveRequestExpand
@@ -165,7 +187,7 @@ def retrieve(
api_key="YOUR_API_KEY",
)
client.ats.jobs.retrieve(
- id="id",
+ id="string",
expand=JobsRetrieveRequestExpand.DEPARTMENTS,
remote_fields="status",
show_enum_origins="status",
@@ -174,16 +196,32 @@ def retrieve(
_response = self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", f"api/ats/v1/jobs/{id}"),
- params=remove_none_from_dict(
- {
- "expand": expand,
- "include_remote_data": include_remote_data,
- "remote_fields": remote_fields,
- "show_enum_origins": show_enum_origins,
- }
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "expand": expand,
+ "include_remote_data": include_remote_data,
+ "remote_fields": remote_fields,
+ "show_enum_origins": show_enum_origins,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(Job, _response.json()) # type: ignore
@@ -202,6 +240,7 @@ def screening_questions_list(
include_deleted_data: typing.Optional[bool] = None,
include_remote_data: typing.Optional[bool] = None,
page_size: typing.Optional[int] = None,
+ request_options: typing.Optional[RequestOptions] = None,
) -> PaginatedScreeningQuestionList:
"""
Returns a list of `ScreeningQuestion` objects.
@@ -218,6 +257,8 @@ def screening_questions_list(
- include_remote_data: typing.Optional[bool]. Whether to include the original data Merge fetched from the third-party to produce these models.
- page_size: typing.Optional[int]. Number of results to return per page.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import Merge
from merge.resources.ats import JobsScreeningQuestionsListRequestExpand
@@ -227,7 +268,7 @@ def screening_questions_list(
api_key="YOUR_API_KEY",
)
client.ats.jobs.screening_questions_list(
- job_id="job-id",
+ job_id="string",
expand=JobsScreeningQuestionsListRequestExpand.JOB,
)
"""
@@ -236,17 +277,33 @@ def screening_questions_list(
urllib.parse.urljoin(
f"{self._client_wrapper.get_base_url()}/", f"api/ats/v1/jobs/{job_id}/screening-questions"
),
- params=remove_none_from_dict(
- {
- "cursor": cursor,
- "expand": expand,
- "include_deleted_data": include_deleted_data,
- "include_remote_data": include_remote_data,
- "page_size": page_size,
- }
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "cursor": cursor,
+ "expand": expand,
+ "include_deleted_data": include_deleted_data,
+ "include_remote_data": include_remote_data,
+ "page_size": page_size,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(PaginatedScreeningQuestionList, _response.json()) # type: ignore
@@ -275,10 +332,11 @@ async def list(
modified_before: typing.Optional[dt.datetime] = None,
offices: typing.Optional[str] = None,
page_size: typing.Optional[int] = None,
- remote_fields: typing.Optional[typing_extensions.Literal["status"]] = None,
+ remote_fields: typing.Optional[typing.Literal["status"]] = None,
remote_id: typing.Optional[str] = None,
- show_enum_origins: typing.Optional[typing_extensions.Literal["status"]] = None,
+ show_enum_origins: typing.Optional[typing.Literal["status"]] = None,
status: typing.Optional[JobsListRequestStatus] = None,
+ request_options: typing.Optional[RequestOptions] = None,
) -> PaginatedJobList:
"""
Returns a list of `Job` objects.
@@ -306,11 +364,11 @@ async def list(
- page_size: typing.Optional[int]. Number of results to return per page.
- - remote_fields: typing.Optional[typing_extensions.Literal["status"]]. Deprecated. Use show_enum_origins.
+ - remote_fields: typing.Optional[typing.Literal["status"]]. Deprecated. Use show_enum_origins.
- remote_id: typing.Optional[str]. The API provider's ID for the given object.
- - show_enum_origins: typing.Optional[typing_extensions.Literal["status"]]. Which fields should be returned in non-normalized form.
+ - show_enum_origins: typing.Optional[typing.Literal["status"]]. Which fields should be returned in non-normalized form.
- status: typing.Optional[JobsListRequestStatus]. If provided, will only return jobs with this status. Options: ('OPEN', 'CLOSED', 'DRAFT', 'ARCHIVED', 'PENDING')
@@ -318,7 +376,9 @@ async def list(
- `CLOSED` - CLOSED
- `DRAFT` - DRAFT
- `ARCHIVED` - ARCHIVED
- - `PENDING` - PENDING---
+ - `PENDING` - PENDING
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
+ ---
from merge.client import AsyncMerge
from merge.resources.ats import JobsListRequestExpand, JobsListRequestStatus
@@ -336,27 +396,43 @@ async def list(
_response = await self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/ats/v1/jobs"),
- params=remove_none_from_dict(
- {
- "code": code,
- "created_after": serialize_datetime(created_after) if created_after is not None else None,
- "created_before": serialize_datetime(created_before) if created_before is not None else None,
- "cursor": cursor,
- "expand": expand,
- "include_deleted_data": include_deleted_data,
- "include_remote_data": include_remote_data,
- "modified_after": serialize_datetime(modified_after) if modified_after is not None else None,
- "modified_before": serialize_datetime(modified_before) if modified_before is not None else None,
- "offices": offices,
- "page_size": page_size,
- "remote_fields": remote_fields,
- "remote_id": remote_id,
- "show_enum_origins": show_enum_origins,
- "status": status,
- }
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "code": code,
+ "created_after": serialize_datetime(created_after) if created_after is not None else None,
+ "created_before": serialize_datetime(created_before) if created_before is not None else None,
+ "cursor": cursor,
+ "expand": expand,
+ "include_deleted_data": include_deleted_data,
+ "include_remote_data": include_remote_data,
+ "modified_after": serialize_datetime(modified_after) if modified_after is not None else None,
+ "modified_before": serialize_datetime(modified_before) if modified_before is not None else None,
+ "offices": offices,
+ "page_size": page_size,
+ "remote_fields": remote_fields,
+ "remote_id": remote_id,
+ "show_enum_origins": show_enum_origins,
+ "status": status,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(PaginatedJobList, _response.json()) # type: ignore
@@ -372,8 +448,9 @@ async def retrieve(
*,
expand: typing.Optional[JobsRetrieveRequestExpand] = None,
include_remote_data: typing.Optional[bool] = None,
- remote_fields: typing.Optional[typing_extensions.Literal["status"]] = None,
- show_enum_origins: typing.Optional[typing_extensions.Literal["status"]] = None,
+ remote_fields: typing.Optional[typing.Literal["status"]] = None,
+ show_enum_origins: typing.Optional[typing.Literal["status"]] = None,
+ request_options: typing.Optional[RequestOptions] = None,
) -> Job:
"""
Returns a `Job` object with the given `id`.
@@ -385,9 +462,11 @@ async def retrieve(
- include_remote_data: typing.Optional[bool]. Whether to include the original data Merge fetched from the third-party to produce these models.
- - remote_fields: typing.Optional[typing_extensions.Literal["status"]]. Deprecated. Use show_enum_origins.
+ - remote_fields: typing.Optional[typing.Literal["status"]]. Deprecated. Use show_enum_origins.
+
+ - show_enum_origins: typing.Optional[typing.Literal["status"]]. Which fields should be returned in non-normalized form.
- - show_enum_origins: typing.Optional[typing_extensions.Literal["status"]]. Which fields should be returned in non-normalized form.
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import AsyncMerge
from merge.resources.ats import JobsRetrieveRequestExpand
@@ -397,7 +476,7 @@ async def retrieve(
api_key="YOUR_API_KEY",
)
await client.ats.jobs.retrieve(
- id="id",
+ id="string",
expand=JobsRetrieveRequestExpand.DEPARTMENTS,
remote_fields="status",
show_enum_origins="status",
@@ -406,16 +485,32 @@ async def retrieve(
_response = await self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", f"api/ats/v1/jobs/{id}"),
- params=remove_none_from_dict(
- {
- "expand": expand,
- "include_remote_data": include_remote_data,
- "remote_fields": remote_fields,
- "show_enum_origins": show_enum_origins,
- }
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "expand": expand,
+ "include_remote_data": include_remote_data,
+ "remote_fields": remote_fields,
+ "show_enum_origins": show_enum_origins,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(Job, _response.json()) # type: ignore
@@ -434,6 +529,7 @@ async def screening_questions_list(
include_deleted_data: typing.Optional[bool] = None,
include_remote_data: typing.Optional[bool] = None,
page_size: typing.Optional[int] = None,
+ request_options: typing.Optional[RequestOptions] = None,
) -> PaginatedScreeningQuestionList:
"""
Returns a list of `ScreeningQuestion` objects.
@@ -450,6 +546,8 @@ async def screening_questions_list(
- include_remote_data: typing.Optional[bool]. Whether to include the original data Merge fetched from the third-party to produce these models.
- page_size: typing.Optional[int]. Number of results to return per page.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import AsyncMerge
from merge.resources.ats import JobsScreeningQuestionsListRequestExpand
@@ -459,7 +557,7 @@ async def screening_questions_list(
api_key="YOUR_API_KEY",
)
await client.ats.jobs.screening_questions_list(
- job_id="job-id",
+ job_id="string",
expand=JobsScreeningQuestionsListRequestExpand.JOB,
)
"""
@@ -468,17 +566,33 @@ async def screening_questions_list(
urllib.parse.urljoin(
f"{self._client_wrapper.get_base_url()}/", f"api/ats/v1/jobs/{job_id}/screening-questions"
),
- params=remove_none_from_dict(
- {
- "cursor": cursor,
- "expand": expand,
- "include_deleted_data": include_deleted_data,
- "include_remote_data": include_remote_data,
- "page_size": page_size,
- }
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "cursor": cursor,
+ "expand": expand,
+ "include_deleted_data": include_deleted_data,
+ "include_remote_data": include_remote_data,
+ "page_size": page_size,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(PaginatedScreeningQuestionList, _response.json()) # type: ignore
diff --git a/src/merge/resources/ats/resources/link_token/client.py b/src/merge/resources/ats/resources/link_token/client.py
index 3763c878..b11be9be 100644
--- a/src/merge/resources/ats/resources/link_token/client.py
+++ b/src/merge/resources/ats/resources/link_token/client.py
@@ -7,6 +7,8 @@
from .....core.api_error import ApiError
from .....core.client_wrapper import AsyncClientWrapper, SyncClientWrapper
from .....core.jsonable_encoder import jsonable_encoder
+from .....core.remove_none_from_dict import remove_none_from_dict
+from .....core.request_options import RequestOptions
from ...types.categories_enum import CategoriesEnum
from ...types.common_model_scopes_body_request import CommonModelScopesBodyRequest
from ...types.link_token import LinkToken
@@ -35,6 +37,7 @@ def create(
link_expiry_mins: typing.Optional[int] = OMIT,
should_create_magic_link_url: typing.Optional[bool] = OMIT,
common_models: typing.Optional[typing.List[CommonModelScopesBodyRequest]] = OMIT,
+ request_options: typing.Optional[RequestOptions] = None,
) -> LinkToken:
"""
Creates a link token to be used when linking a new end user.
@@ -55,6 +58,21 @@ def create(
- should_create_magic_link_url: typing.Optional[bool]. Whether to generate a Magic Link URL. Defaults to false. For more information on Magic Link, see https://merge.dev/blog/integrations-fast-say-hello-to-magic-link.
- common_models: typing.Optional[typing.List[CommonModelScopesBodyRequest]]. An array of objects to specify the models and fields that will be disabled for a given Linked Account. Each object uses model_id, enabled_actions, and disabled_fields to specify the model, method, and fields that are scoped for a given Linked Account.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
+ ---
+ from merge.client import Merge
+
+ client = Merge(
+ account_token="YOUR_ACCOUNT_TOKEN",
+ api_key="YOUR_API_KEY",
+ )
+ client.ats.link_token.create(
+ end_user_email_address="string",
+ end_user_organization_name="string",
+ end_user_origin_id="string",
+ categories=[],
+ )
"""
_request: typing.Dict[str, typing.Any] = {
"end_user_email_address": end_user_email_address,
@@ -73,9 +91,26 @@ def create(
_response = self._client_wrapper.httpx_client.request(
"POST",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/ats/v1/link-token"),
- json=jsonable_encoder(_request),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ request_options.get("additional_query_parameters") if request_options is not None else None
+ ),
+ json=jsonable_encoder(_request)
+ if request_options is None or request_options.get("additional_body_parameters") is None
+ else {
+ **jsonable_encoder(_request),
+ **(jsonable_encoder(remove_none_from_dict(request_options.get("additional_body_parameters", {})))),
+ },
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(LinkToken, _response.json()) # type: ignore
@@ -101,6 +136,7 @@ async def create(
link_expiry_mins: typing.Optional[int] = OMIT,
should_create_magic_link_url: typing.Optional[bool] = OMIT,
common_models: typing.Optional[typing.List[CommonModelScopesBodyRequest]] = OMIT,
+ request_options: typing.Optional[RequestOptions] = None,
) -> LinkToken:
"""
Creates a link token to be used when linking a new end user.
@@ -121,6 +157,21 @@ async def create(
- should_create_magic_link_url: typing.Optional[bool]. Whether to generate a Magic Link URL. Defaults to false. For more information on Magic Link, see https://merge.dev/blog/integrations-fast-say-hello-to-magic-link.
- common_models: typing.Optional[typing.List[CommonModelScopesBodyRequest]]. An array of objects to specify the models and fields that will be disabled for a given Linked Account. Each object uses model_id, enabled_actions, and disabled_fields to specify the model, method, and fields that are scoped for a given Linked Account.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
+ ---
+ from merge.client import AsyncMerge
+
+ client = AsyncMerge(
+ account_token="YOUR_ACCOUNT_TOKEN",
+ api_key="YOUR_API_KEY",
+ )
+ await client.ats.link_token.create(
+ end_user_email_address="string",
+ end_user_organization_name="string",
+ end_user_origin_id="string",
+ categories=[],
+ )
"""
_request: typing.Dict[str, typing.Any] = {
"end_user_email_address": end_user_email_address,
@@ -139,9 +190,26 @@ async def create(
_response = await self._client_wrapper.httpx_client.request(
"POST",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/ats/v1/link-token"),
- json=jsonable_encoder(_request),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ request_options.get("additional_query_parameters") if request_options is not None else None
+ ),
+ json=jsonable_encoder(_request)
+ if request_options is None or request_options.get("additional_body_parameters") is None
+ else {
+ **jsonable_encoder(_request),
+ **(jsonable_encoder(remove_none_from_dict(request_options.get("additional_body_parameters", {})))),
+ },
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(LinkToken, _response.json()) # type: ignore
diff --git a/src/merge/resources/ats/resources/linked_accounts/client.py b/src/merge/resources/ats/resources/linked_accounts/client.py
index 7582022e..d38142b1 100644
--- a/src/merge/resources/ats/resources/linked_accounts/client.py
+++ b/src/merge/resources/ats/resources/linked_accounts/client.py
@@ -6,7 +6,9 @@
from .....core.api_error import ApiError
from .....core.client_wrapper import AsyncClientWrapper, SyncClientWrapper
+from .....core.jsonable_encoder import jsonable_encoder
from .....core.remove_none_from_dict import remove_none_from_dict
+from .....core.request_options import RequestOptions
from ...types.paginated_account_details_and_actions_list import PaginatedAccountDetailsAndActionsList
from .types.linked_accounts_list_request_category import LinkedAccountsListRequestCategory
@@ -36,6 +38,7 @@ def list(
is_test_account: typing.Optional[str] = None,
page_size: typing.Optional[int] = None,
status: typing.Optional[str] = None,
+ request_options: typing.Optional[RequestOptions] = None,
) -> PaginatedAccountDetailsAndActionsList:
"""
List linked accounts for your organization.
@@ -73,6 +76,8 @@ def list(
- page_size: typing.Optional[int]. Number of results to return per page.
- status: typing.Optional[str]. Filter by status. Options: `COMPLETE`, `INCOMPLETE`, `RELINK_NEEDED`
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import Merge
from merge.resources.ats import LinkedAccountsListRequestCategory
@@ -88,25 +93,41 @@ def list(
_response = self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/ats/v1/linked-accounts"),
- params=remove_none_from_dict(
- {
- "category": category,
- "cursor": cursor,
- "end_user_email_address": end_user_email_address,
- "end_user_organization_name": end_user_organization_name,
- "end_user_origin_id": end_user_origin_id,
- "end_user_origin_ids": end_user_origin_ids,
- "id": id,
- "ids": ids,
- "include_duplicates": include_duplicates,
- "integration_name": integration_name,
- "is_test_account": is_test_account,
- "page_size": page_size,
- "status": status,
- }
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "category": category,
+ "cursor": cursor,
+ "end_user_email_address": end_user_email_address,
+ "end_user_organization_name": end_user_organization_name,
+ "end_user_origin_id": end_user_origin_id,
+ "end_user_origin_ids": end_user_origin_ids,
+ "id": id,
+ "ids": ids,
+ "include_duplicates": include_duplicates,
+ "integration_name": integration_name,
+ "is_test_account": is_test_account,
+ "page_size": page_size,
+ "status": status,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(PaginatedAccountDetailsAndActionsList, _response.json()) # type: ignore
@@ -137,6 +158,7 @@ async def list(
is_test_account: typing.Optional[str] = None,
page_size: typing.Optional[int] = None,
status: typing.Optional[str] = None,
+ request_options: typing.Optional[RequestOptions] = None,
) -> PaginatedAccountDetailsAndActionsList:
"""
List linked accounts for your organization.
@@ -174,6 +196,8 @@ async def list(
- page_size: typing.Optional[int]. Number of results to return per page.
- status: typing.Optional[str]. Filter by status. Options: `COMPLETE`, `INCOMPLETE`, `RELINK_NEEDED`
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import AsyncMerge
from merge.resources.ats import LinkedAccountsListRequestCategory
@@ -189,25 +213,41 @@ async def list(
_response = await self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/ats/v1/linked-accounts"),
- params=remove_none_from_dict(
- {
- "category": category,
- "cursor": cursor,
- "end_user_email_address": end_user_email_address,
- "end_user_organization_name": end_user_organization_name,
- "end_user_origin_id": end_user_origin_id,
- "end_user_origin_ids": end_user_origin_ids,
- "id": id,
- "ids": ids,
- "include_duplicates": include_duplicates,
- "integration_name": integration_name,
- "is_test_account": is_test_account,
- "page_size": page_size,
- "status": status,
- }
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "category": category,
+ "cursor": cursor,
+ "end_user_email_address": end_user_email_address,
+ "end_user_organization_name": end_user_organization_name,
+ "end_user_origin_id": end_user_origin_id,
+ "end_user_origin_ids": end_user_origin_ids,
+ "id": id,
+ "ids": ids,
+ "include_duplicates": include_duplicates,
+ "integration_name": integration_name,
+ "is_test_account": is_test_account,
+ "page_size": page_size,
+ "status": status,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(PaginatedAccountDetailsAndActionsList, _response.json()) # type: ignore
diff --git a/src/merge/resources/ats/resources/offers/client.py b/src/merge/resources/ats/resources/offers/client.py
index f9f6ad40..adf7314c 100644
--- a/src/merge/resources/ats/resources/offers/client.py
+++ b/src/merge/resources/ats/resources/offers/client.py
@@ -5,12 +5,12 @@
import urllib.parse
from json.decoder import JSONDecodeError
-import typing_extensions
-
from .....core.api_error import ApiError
from .....core.client_wrapper import AsyncClientWrapper, SyncClientWrapper
from .....core.datetime_utils import serialize_datetime
+from .....core.jsonable_encoder import jsonable_encoder
from .....core.remove_none_from_dict import remove_none_from_dict
+from .....core.request_options import RequestOptions
from ...types.offer import Offer
from ...types.paginated_offer_list import PaginatedOfferList
from .types.offers_list_request_expand import OffersListRequestExpand
@@ -40,9 +40,10 @@ def list(
modified_after: typing.Optional[dt.datetime] = None,
modified_before: typing.Optional[dt.datetime] = None,
page_size: typing.Optional[int] = None,
- remote_fields: typing.Optional[typing_extensions.Literal["status"]] = None,
+ remote_fields: typing.Optional[typing.Literal["status"]] = None,
remote_id: typing.Optional[str] = None,
- show_enum_origins: typing.Optional[typing_extensions.Literal["status"]] = None,
+ show_enum_origins: typing.Optional[typing.Literal["status"]] = None,
+ request_options: typing.Optional[RequestOptions] = None,
) -> PaginatedOfferList:
"""
Returns a list of `Offer` objects.
@@ -70,11 +71,13 @@ def list(
- page_size: typing.Optional[int]. Number of results to return per page.
- - remote_fields: typing.Optional[typing_extensions.Literal["status"]]. Deprecated. Use show_enum_origins.
+ - remote_fields: typing.Optional[typing.Literal["status"]]. Deprecated. Use show_enum_origins.
- remote_id: typing.Optional[str]. The API provider's ID for the given object.
- - show_enum_origins: typing.Optional[typing_extensions.Literal["status"]]. Which fields should be returned in non-normalized form.
+ - show_enum_origins: typing.Optional[typing.Literal["status"]]. Which fields should be returned in non-normalized form.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import Merge
from merge.resources.ats import OffersListRequestExpand
@@ -92,26 +95,42 @@ def list(
_response = self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/ats/v1/offers"),
- params=remove_none_from_dict(
- {
- "application_id": application_id,
- "created_after": serialize_datetime(created_after) if created_after is not None else None,
- "created_before": serialize_datetime(created_before) if created_before is not None else None,
- "creator_id": creator_id,
- "cursor": cursor,
- "expand": expand,
- "include_deleted_data": include_deleted_data,
- "include_remote_data": include_remote_data,
- "modified_after": serialize_datetime(modified_after) if modified_after is not None else None,
- "modified_before": serialize_datetime(modified_before) if modified_before is not None else None,
- "page_size": page_size,
- "remote_fields": remote_fields,
- "remote_id": remote_id,
- "show_enum_origins": show_enum_origins,
- }
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "application_id": application_id,
+ "created_after": serialize_datetime(created_after) if created_after is not None else None,
+ "created_before": serialize_datetime(created_before) if created_before is not None else None,
+ "creator_id": creator_id,
+ "cursor": cursor,
+ "expand": expand,
+ "include_deleted_data": include_deleted_data,
+ "include_remote_data": include_remote_data,
+ "modified_after": serialize_datetime(modified_after) if modified_after is not None else None,
+ "modified_before": serialize_datetime(modified_before) if modified_before is not None else None,
+ "page_size": page_size,
+ "remote_fields": remote_fields,
+ "remote_id": remote_id,
+ "show_enum_origins": show_enum_origins,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(PaginatedOfferList, _response.json()) # type: ignore
@@ -127,8 +146,9 @@ def retrieve(
*,
expand: typing.Optional[OffersRetrieveRequestExpand] = None,
include_remote_data: typing.Optional[bool] = None,
- remote_fields: typing.Optional[typing_extensions.Literal["status"]] = None,
- show_enum_origins: typing.Optional[typing_extensions.Literal["status"]] = None,
+ remote_fields: typing.Optional[typing.Literal["status"]] = None,
+ show_enum_origins: typing.Optional[typing.Literal["status"]] = None,
+ request_options: typing.Optional[RequestOptions] = None,
) -> Offer:
"""
Returns an `Offer` object with the given `id`.
@@ -140,9 +160,11 @@ def retrieve(
- include_remote_data: typing.Optional[bool]. Whether to include the original data Merge fetched from the third-party to produce these models.
- - remote_fields: typing.Optional[typing_extensions.Literal["status"]]. Deprecated. Use show_enum_origins.
+ - remote_fields: typing.Optional[typing.Literal["status"]]. Deprecated. Use show_enum_origins.
- - show_enum_origins: typing.Optional[typing_extensions.Literal["status"]]. Which fields should be returned in non-normalized form.
+ - show_enum_origins: typing.Optional[typing.Literal["status"]]. Which fields should be returned in non-normalized form.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import Merge
from merge.resources.ats import OffersRetrieveRequestExpand
@@ -152,7 +174,7 @@ def retrieve(
api_key="YOUR_API_KEY",
)
client.ats.offers.retrieve(
- id="id",
+ id="string",
expand=OffersRetrieveRequestExpand.APPLICATION,
remote_fields="status",
show_enum_origins="status",
@@ -161,16 +183,32 @@ def retrieve(
_response = self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", f"api/ats/v1/offers/{id}"),
- params=remove_none_from_dict(
- {
- "expand": expand,
- "include_remote_data": include_remote_data,
- "remote_fields": remote_fields,
- "show_enum_origins": show_enum_origins,
- }
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "expand": expand,
+ "include_remote_data": include_remote_data,
+ "remote_fields": remote_fields,
+ "show_enum_origins": show_enum_origins,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(Offer, _response.json()) # type: ignore
@@ -199,9 +237,10 @@ async def list(
modified_after: typing.Optional[dt.datetime] = None,
modified_before: typing.Optional[dt.datetime] = None,
page_size: typing.Optional[int] = None,
- remote_fields: typing.Optional[typing_extensions.Literal["status"]] = None,
+ remote_fields: typing.Optional[typing.Literal["status"]] = None,
remote_id: typing.Optional[str] = None,
- show_enum_origins: typing.Optional[typing_extensions.Literal["status"]] = None,
+ show_enum_origins: typing.Optional[typing.Literal["status"]] = None,
+ request_options: typing.Optional[RequestOptions] = None,
) -> PaginatedOfferList:
"""
Returns a list of `Offer` objects.
@@ -229,11 +268,13 @@ async def list(
- page_size: typing.Optional[int]. Number of results to return per page.
- - remote_fields: typing.Optional[typing_extensions.Literal["status"]]. Deprecated. Use show_enum_origins.
+ - remote_fields: typing.Optional[typing.Literal["status"]]. Deprecated. Use show_enum_origins.
- remote_id: typing.Optional[str]. The API provider's ID for the given object.
- - show_enum_origins: typing.Optional[typing_extensions.Literal["status"]]. Which fields should be returned in non-normalized form.
+ - show_enum_origins: typing.Optional[typing.Literal["status"]]. Which fields should be returned in non-normalized form.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import AsyncMerge
from merge.resources.ats import OffersListRequestExpand
@@ -251,26 +292,42 @@ async def list(
_response = await self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/ats/v1/offers"),
- params=remove_none_from_dict(
- {
- "application_id": application_id,
- "created_after": serialize_datetime(created_after) if created_after is not None else None,
- "created_before": serialize_datetime(created_before) if created_before is not None else None,
- "creator_id": creator_id,
- "cursor": cursor,
- "expand": expand,
- "include_deleted_data": include_deleted_data,
- "include_remote_data": include_remote_data,
- "modified_after": serialize_datetime(modified_after) if modified_after is not None else None,
- "modified_before": serialize_datetime(modified_before) if modified_before is not None else None,
- "page_size": page_size,
- "remote_fields": remote_fields,
- "remote_id": remote_id,
- "show_enum_origins": show_enum_origins,
- }
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "application_id": application_id,
+ "created_after": serialize_datetime(created_after) if created_after is not None else None,
+ "created_before": serialize_datetime(created_before) if created_before is not None else None,
+ "creator_id": creator_id,
+ "cursor": cursor,
+ "expand": expand,
+ "include_deleted_data": include_deleted_data,
+ "include_remote_data": include_remote_data,
+ "modified_after": serialize_datetime(modified_after) if modified_after is not None else None,
+ "modified_before": serialize_datetime(modified_before) if modified_before is not None else None,
+ "page_size": page_size,
+ "remote_fields": remote_fields,
+ "remote_id": remote_id,
+ "show_enum_origins": show_enum_origins,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(PaginatedOfferList, _response.json()) # type: ignore
@@ -286,8 +343,9 @@ async def retrieve(
*,
expand: typing.Optional[OffersRetrieveRequestExpand] = None,
include_remote_data: typing.Optional[bool] = None,
- remote_fields: typing.Optional[typing_extensions.Literal["status"]] = None,
- show_enum_origins: typing.Optional[typing_extensions.Literal["status"]] = None,
+ remote_fields: typing.Optional[typing.Literal["status"]] = None,
+ show_enum_origins: typing.Optional[typing.Literal["status"]] = None,
+ request_options: typing.Optional[RequestOptions] = None,
) -> Offer:
"""
Returns an `Offer` object with the given `id`.
@@ -299,9 +357,11 @@ async def retrieve(
- include_remote_data: typing.Optional[bool]. Whether to include the original data Merge fetched from the third-party to produce these models.
- - remote_fields: typing.Optional[typing_extensions.Literal["status"]]. Deprecated. Use show_enum_origins.
+ - remote_fields: typing.Optional[typing.Literal["status"]]. Deprecated. Use show_enum_origins.
- - show_enum_origins: typing.Optional[typing_extensions.Literal["status"]]. Which fields should be returned in non-normalized form.
+ - show_enum_origins: typing.Optional[typing.Literal["status"]]. Which fields should be returned in non-normalized form.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import AsyncMerge
from merge.resources.ats import OffersRetrieveRequestExpand
@@ -311,7 +371,7 @@ async def retrieve(
api_key="YOUR_API_KEY",
)
await client.ats.offers.retrieve(
- id="id",
+ id="string",
expand=OffersRetrieveRequestExpand.APPLICATION,
remote_fields="status",
show_enum_origins="status",
@@ -320,16 +380,32 @@ async def retrieve(
_response = await self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", f"api/ats/v1/offers/{id}"),
- params=remove_none_from_dict(
- {
- "expand": expand,
- "include_remote_data": include_remote_data,
- "remote_fields": remote_fields,
- "show_enum_origins": show_enum_origins,
- }
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "expand": expand,
+ "include_remote_data": include_remote_data,
+ "remote_fields": remote_fields,
+ "show_enum_origins": show_enum_origins,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(Offer, _response.json()) # type: ignore
diff --git a/src/merge/resources/ats/resources/offices/client.py b/src/merge/resources/ats/resources/offices/client.py
index 1e0e7d62..e9ee35ec 100644
--- a/src/merge/resources/ats/resources/offices/client.py
+++ b/src/merge/resources/ats/resources/offices/client.py
@@ -8,7 +8,9 @@
from .....core.api_error import ApiError
from .....core.client_wrapper import AsyncClientWrapper, SyncClientWrapper
from .....core.datetime_utils import serialize_datetime
+from .....core.jsonable_encoder import jsonable_encoder
from .....core.remove_none_from_dict import remove_none_from_dict
+from .....core.request_options import RequestOptions
from ...types.office import Office
from ...types.paginated_office_list import PaginatedOfficeList
@@ -34,6 +36,7 @@ def list(
modified_before: typing.Optional[dt.datetime] = None,
page_size: typing.Optional[int] = None,
remote_id: typing.Optional[str] = None,
+ request_options: typing.Optional[RequestOptions] = None,
) -> PaginatedOfficeList:
"""
Returns a list of `Office` objects.
@@ -56,6 +59,8 @@ def list(
- page_size: typing.Optional[int]. Number of results to return per page.
- remote_id: typing.Optional[str]. The API provider's ID for the given object.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import Merge
@@ -68,21 +73,37 @@ def list(
_response = self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/ats/v1/offices"),
- params=remove_none_from_dict(
- {
- "created_after": serialize_datetime(created_after) if created_after is not None else None,
- "created_before": serialize_datetime(created_before) if created_before is not None else None,
- "cursor": cursor,
- "include_deleted_data": include_deleted_data,
- "include_remote_data": include_remote_data,
- "modified_after": serialize_datetime(modified_after) if modified_after is not None else None,
- "modified_before": serialize_datetime(modified_before) if modified_before is not None else None,
- "page_size": page_size,
- "remote_id": remote_id,
- }
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "created_after": serialize_datetime(created_after) if created_after is not None else None,
+ "created_before": serialize_datetime(created_before) if created_before is not None else None,
+ "cursor": cursor,
+ "include_deleted_data": include_deleted_data,
+ "include_remote_data": include_remote_data,
+ "modified_after": serialize_datetime(modified_after) if modified_after is not None else None,
+ "modified_before": serialize_datetime(modified_before) if modified_before is not None else None,
+ "page_size": page_size,
+ "remote_id": remote_id,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(PaginatedOfficeList, _response.json()) # type: ignore
@@ -92,7 +113,13 @@ def list(
raise ApiError(status_code=_response.status_code, body=_response.text)
raise ApiError(status_code=_response.status_code, body=_response_json)
- def retrieve(self, id: str, *, include_remote_data: typing.Optional[bool] = None) -> Office:
+ def retrieve(
+ self,
+ id: str,
+ *,
+ include_remote_data: typing.Optional[bool] = None,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> Office:
"""
Returns an `Office` object with the given `id`.
@@ -100,6 +127,8 @@ def retrieve(self, id: str, *, include_remote_data: typing.Optional[bool] = None
- id: str.
- include_remote_data: typing.Optional[bool]. Whether to include the original data Merge fetched from the third-party to produce these models.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import Merge
@@ -108,15 +137,35 @@ def retrieve(self, id: str, *, include_remote_data: typing.Optional[bool] = None
api_key="YOUR_API_KEY",
)
client.ats.offices.retrieve(
- id="id",
+ id="string",
)
"""
_response = self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", f"api/ats/v1/offices/{id}"),
- params=remove_none_from_dict({"include_remote_data": include_remote_data}),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "include_remote_data": include_remote_data,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(Office, _response.json()) # type: ignore
@@ -143,6 +192,7 @@ async def list(
modified_before: typing.Optional[dt.datetime] = None,
page_size: typing.Optional[int] = None,
remote_id: typing.Optional[str] = None,
+ request_options: typing.Optional[RequestOptions] = None,
) -> PaginatedOfficeList:
"""
Returns a list of `Office` objects.
@@ -165,6 +215,8 @@ async def list(
- page_size: typing.Optional[int]. Number of results to return per page.
- remote_id: typing.Optional[str]. The API provider's ID for the given object.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import AsyncMerge
@@ -177,21 +229,37 @@ async def list(
_response = await self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/ats/v1/offices"),
- params=remove_none_from_dict(
- {
- "created_after": serialize_datetime(created_after) if created_after is not None else None,
- "created_before": serialize_datetime(created_before) if created_before is not None else None,
- "cursor": cursor,
- "include_deleted_data": include_deleted_data,
- "include_remote_data": include_remote_data,
- "modified_after": serialize_datetime(modified_after) if modified_after is not None else None,
- "modified_before": serialize_datetime(modified_before) if modified_before is not None else None,
- "page_size": page_size,
- "remote_id": remote_id,
- }
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "created_after": serialize_datetime(created_after) if created_after is not None else None,
+ "created_before": serialize_datetime(created_before) if created_before is not None else None,
+ "cursor": cursor,
+ "include_deleted_data": include_deleted_data,
+ "include_remote_data": include_remote_data,
+ "modified_after": serialize_datetime(modified_after) if modified_after is not None else None,
+ "modified_before": serialize_datetime(modified_before) if modified_before is not None else None,
+ "page_size": page_size,
+ "remote_id": remote_id,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(PaginatedOfficeList, _response.json()) # type: ignore
@@ -201,7 +269,13 @@ async def list(
raise ApiError(status_code=_response.status_code, body=_response.text)
raise ApiError(status_code=_response.status_code, body=_response_json)
- async def retrieve(self, id: str, *, include_remote_data: typing.Optional[bool] = None) -> Office:
+ async def retrieve(
+ self,
+ id: str,
+ *,
+ include_remote_data: typing.Optional[bool] = None,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> Office:
"""
Returns an `Office` object with the given `id`.
@@ -209,6 +283,8 @@ async def retrieve(self, id: str, *, include_remote_data: typing.Optional[bool]
- id: str.
- include_remote_data: typing.Optional[bool]. Whether to include the original data Merge fetched from the third-party to produce these models.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import AsyncMerge
@@ -217,15 +293,35 @@ async def retrieve(self, id: str, *, include_remote_data: typing.Optional[bool]
api_key="YOUR_API_KEY",
)
await client.ats.offices.retrieve(
- id="id",
+ id="string",
)
"""
_response = await self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", f"api/ats/v1/offices/{id}"),
- params=remove_none_from_dict({"include_remote_data": include_remote_data}),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "include_remote_data": include_remote_data,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(Office, _response.json()) # type: ignore
diff --git a/src/merge/resources/ats/resources/passthrough/client.py b/src/merge/resources/ats/resources/passthrough/client.py
index be0a2de2..d0c8237c 100644
--- a/src/merge/resources/ats/resources/passthrough/client.py
+++ b/src/merge/resources/ats/resources/passthrough/client.py
@@ -7,6 +7,8 @@
from .....core.api_error import ApiError
from .....core.client_wrapper import AsyncClientWrapper, SyncClientWrapper
from .....core.jsonable_encoder import jsonable_encoder
+from .....core.remove_none_from_dict import remove_none_from_dict
+from .....core.request_options import RequestOptions
from ...types.data_passthrough_request import DataPassthroughRequest
from ...types.remote_response import RemoteResponse
@@ -23,19 +25,60 @@ class PassthroughClient:
def __init__(self, *, client_wrapper: SyncClientWrapper):
self._client_wrapper = client_wrapper
- def create(self, *, request: DataPassthroughRequest) -> RemoteResponse:
+ def create(
+ self, *, request: DataPassthroughRequest, request_options: typing.Optional[RequestOptions] = None
+ ) -> RemoteResponse:
"""
Pull data from an endpoint not currently supported by Merge.
Parameters:
- request: DataPassthroughRequest.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
+ ---
+ from merge.client import Merge
+ from merge.resources.ats import (
+ DataPassthroughRequest,
+ MethodEnum,
+ RequestFormatEnum,
+ )
+
+ client = Merge(
+ account_token="YOUR_ACCOUNT_TOKEN",
+ api_key="YOUR_API_KEY",
+ )
+ client.ats.passthrough.create(
+ request=DataPassthroughRequest(
+ method=MethodEnum.GET,
+ path="/scooters",
+ data='{"company": "Lime", "model": "Gen 2.5"}',
+ request_format=RequestFormatEnum.JSON,
+ ),
+ )
"""
_response = self._client_wrapper.httpx_client.request(
"POST",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/ats/v1/passthrough"),
- json=jsonable_encoder(request),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ request_options.get("additional_query_parameters") if request_options is not None else None
+ ),
+ json=jsonable_encoder(request)
+ if request_options is None or request_options.get("additional_body_parameters") is None
+ else {
+ **jsonable_encoder(request),
+ **(jsonable_encoder(remove_none_from_dict(request_options.get("additional_body_parameters", {})))),
+ },
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(RemoteResponse, _response.json()) # type: ignore
@@ -50,19 +93,60 @@ class AsyncPassthroughClient:
def __init__(self, *, client_wrapper: AsyncClientWrapper):
self._client_wrapper = client_wrapper
- async def create(self, *, request: DataPassthroughRequest) -> RemoteResponse:
+ async def create(
+ self, *, request: DataPassthroughRequest, request_options: typing.Optional[RequestOptions] = None
+ ) -> RemoteResponse:
"""
Pull data from an endpoint not currently supported by Merge.
Parameters:
- request: DataPassthroughRequest.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
+ ---
+ from merge.client import AsyncMerge
+ from merge.resources.ats import (
+ DataPassthroughRequest,
+ MethodEnum,
+ RequestFormatEnum,
+ )
+
+ client = AsyncMerge(
+ account_token="YOUR_ACCOUNT_TOKEN",
+ api_key="YOUR_API_KEY",
+ )
+ await client.ats.passthrough.create(
+ request=DataPassthroughRequest(
+ method=MethodEnum.GET,
+ path="/scooters",
+ data='{"company": "Lime", "model": "Gen 2.5"}',
+ request_format=RequestFormatEnum.JSON,
+ ),
+ )
"""
_response = await self._client_wrapper.httpx_client.request(
"POST",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/ats/v1/passthrough"),
- json=jsonable_encoder(request),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ request_options.get("additional_query_parameters") if request_options is not None else None
+ ),
+ json=jsonable_encoder(request)
+ if request_options is None or request_options.get("additional_body_parameters") is None
+ else {
+ **jsonable_encoder(request),
+ **(jsonable_encoder(remove_none_from_dict(request_options.get("additional_body_parameters", {})))),
+ },
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(RemoteResponse, _response.json()) # type: ignore
diff --git a/src/merge/resources/ats/resources/regenerate_key/client.py b/src/merge/resources/ats/resources/regenerate_key/client.py
index c5ed122d..8eb61651 100644
--- a/src/merge/resources/ats/resources/regenerate_key/client.py
+++ b/src/merge/resources/ats/resources/regenerate_key/client.py
@@ -7,6 +7,8 @@
from .....core.api_error import ApiError
from .....core.client_wrapper import AsyncClientWrapper, SyncClientWrapper
from .....core.jsonable_encoder import jsonable_encoder
+from .....core.remove_none_from_dict import remove_none_from_dict
+from .....core.request_options import RequestOptions
from ...types.remote_key import RemoteKey
try:
@@ -22,12 +24,14 @@ class RegenerateKeyClient:
def __init__(self, *, client_wrapper: SyncClientWrapper):
self._client_wrapper = client_wrapper
- def create(self, *, name: str) -> RemoteKey:
+ def create(self, *, name: str, request_options: typing.Optional[RequestOptions] = None) -> RemoteKey:
"""
Exchange remote keys.
Parameters:
- name: str.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import Merge
@@ -42,9 +46,26 @@ def create(self, *, name: str) -> RemoteKey:
_response = self._client_wrapper.httpx_client.request(
"POST",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/ats/v1/regenerate-key"),
- json=jsonable_encoder({"name": name}),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ request_options.get("additional_query_parameters") if request_options is not None else None
+ ),
+ json=jsonable_encoder({"name": name})
+ if request_options is None or request_options.get("additional_body_parameters") is None
+ else {
+ **jsonable_encoder({"name": name}),
+ **(jsonable_encoder(remove_none_from_dict(request_options.get("additional_body_parameters", {})))),
+ },
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(RemoteKey, _response.json()) # type: ignore
@@ -59,12 +80,14 @@ class AsyncRegenerateKeyClient:
def __init__(self, *, client_wrapper: AsyncClientWrapper):
self._client_wrapper = client_wrapper
- async def create(self, *, name: str) -> RemoteKey:
+ async def create(self, *, name: str, request_options: typing.Optional[RequestOptions] = None) -> RemoteKey:
"""
Exchange remote keys.
Parameters:
- name: str.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import AsyncMerge
@@ -79,9 +102,26 @@ async def create(self, *, name: str) -> RemoteKey:
_response = await self._client_wrapper.httpx_client.request(
"POST",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/ats/v1/regenerate-key"),
- json=jsonable_encoder({"name": name}),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ request_options.get("additional_query_parameters") if request_options is not None else None
+ ),
+ json=jsonable_encoder({"name": name})
+ if request_options is None or request_options.get("additional_body_parameters") is None
+ else {
+ **jsonable_encoder({"name": name}),
+ **(jsonable_encoder(remove_none_from_dict(request_options.get("additional_body_parameters", {})))),
+ },
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(RemoteKey, _response.json()) # type: ignore
diff --git a/src/merge/resources/ats/resources/reject_reasons/client.py b/src/merge/resources/ats/resources/reject_reasons/client.py
index 6aa4c705..c96255cf 100644
--- a/src/merge/resources/ats/resources/reject_reasons/client.py
+++ b/src/merge/resources/ats/resources/reject_reasons/client.py
@@ -8,7 +8,9 @@
from .....core.api_error import ApiError
from .....core.client_wrapper import AsyncClientWrapper, SyncClientWrapper
from .....core.datetime_utils import serialize_datetime
+from .....core.jsonable_encoder import jsonable_encoder
from .....core.remove_none_from_dict import remove_none_from_dict
+from .....core.request_options import RequestOptions
from ...types.paginated_reject_reason_list import PaginatedRejectReasonList
from ...types.reject_reason import RejectReason
@@ -34,6 +36,7 @@ def list(
modified_before: typing.Optional[dt.datetime] = None,
page_size: typing.Optional[int] = None,
remote_id: typing.Optional[str] = None,
+ request_options: typing.Optional[RequestOptions] = None,
) -> PaginatedRejectReasonList:
"""
Returns a list of `RejectReason` objects.
@@ -56,6 +59,8 @@ def list(
- page_size: typing.Optional[int]. Number of results to return per page.
- remote_id: typing.Optional[str]. The API provider's ID for the given object.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import Merge
@@ -68,21 +73,37 @@ def list(
_response = self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/ats/v1/reject-reasons"),
- params=remove_none_from_dict(
- {
- "created_after": serialize_datetime(created_after) if created_after is not None else None,
- "created_before": serialize_datetime(created_before) if created_before is not None else None,
- "cursor": cursor,
- "include_deleted_data": include_deleted_data,
- "include_remote_data": include_remote_data,
- "modified_after": serialize_datetime(modified_after) if modified_after is not None else None,
- "modified_before": serialize_datetime(modified_before) if modified_before is not None else None,
- "page_size": page_size,
- "remote_id": remote_id,
- }
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "created_after": serialize_datetime(created_after) if created_after is not None else None,
+ "created_before": serialize_datetime(created_before) if created_before is not None else None,
+ "cursor": cursor,
+ "include_deleted_data": include_deleted_data,
+ "include_remote_data": include_remote_data,
+ "modified_after": serialize_datetime(modified_after) if modified_after is not None else None,
+ "modified_before": serialize_datetime(modified_before) if modified_before is not None else None,
+ "page_size": page_size,
+ "remote_id": remote_id,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(PaginatedRejectReasonList, _response.json()) # type: ignore
@@ -92,7 +113,13 @@ def list(
raise ApiError(status_code=_response.status_code, body=_response.text)
raise ApiError(status_code=_response.status_code, body=_response_json)
- def retrieve(self, id: str, *, include_remote_data: typing.Optional[bool] = None) -> RejectReason:
+ def retrieve(
+ self,
+ id: str,
+ *,
+ include_remote_data: typing.Optional[bool] = None,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> RejectReason:
"""
Returns a `RejectReason` object with the given `id`.
@@ -100,6 +127,8 @@ def retrieve(self, id: str, *, include_remote_data: typing.Optional[bool] = None
- id: str.
- include_remote_data: typing.Optional[bool]. Whether to include the original data Merge fetched from the third-party to produce these models.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import Merge
@@ -108,15 +137,35 @@ def retrieve(self, id: str, *, include_remote_data: typing.Optional[bool] = None
api_key="YOUR_API_KEY",
)
client.ats.reject_reasons.retrieve(
- id="id",
+ id="string",
)
"""
_response = self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", f"api/ats/v1/reject-reasons/{id}"),
- params=remove_none_from_dict({"include_remote_data": include_remote_data}),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "include_remote_data": include_remote_data,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(RejectReason, _response.json()) # type: ignore
@@ -143,6 +192,7 @@ async def list(
modified_before: typing.Optional[dt.datetime] = None,
page_size: typing.Optional[int] = None,
remote_id: typing.Optional[str] = None,
+ request_options: typing.Optional[RequestOptions] = None,
) -> PaginatedRejectReasonList:
"""
Returns a list of `RejectReason` objects.
@@ -165,6 +215,8 @@ async def list(
- page_size: typing.Optional[int]. Number of results to return per page.
- remote_id: typing.Optional[str]. The API provider's ID for the given object.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import AsyncMerge
@@ -177,21 +229,37 @@ async def list(
_response = await self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/ats/v1/reject-reasons"),
- params=remove_none_from_dict(
- {
- "created_after": serialize_datetime(created_after) if created_after is not None else None,
- "created_before": serialize_datetime(created_before) if created_before is not None else None,
- "cursor": cursor,
- "include_deleted_data": include_deleted_data,
- "include_remote_data": include_remote_data,
- "modified_after": serialize_datetime(modified_after) if modified_after is not None else None,
- "modified_before": serialize_datetime(modified_before) if modified_before is not None else None,
- "page_size": page_size,
- "remote_id": remote_id,
- }
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "created_after": serialize_datetime(created_after) if created_after is not None else None,
+ "created_before": serialize_datetime(created_before) if created_before is not None else None,
+ "cursor": cursor,
+ "include_deleted_data": include_deleted_data,
+ "include_remote_data": include_remote_data,
+ "modified_after": serialize_datetime(modified_after) if modified_after is not None else None,
+ "modified_before": serialize_datetime(modified_before) if modified_before is not None else None,
+ "page_size": page_size,
+ "remote_id": remote_id,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(PaginatedRejectReasonList, _response.json()) # type: ignore
@@ -201,7 +269,13 @@ async def list(
raise ApiError(status_code=_response.status_code, body=_response.text)
raise ApiError(status_code=_response.status_code, body=_response_json)
- async def retrieve(self, id: str, *, include_remote_data: typing.Optional[bool] = None) -> RejectReason:
+ async def retrieve(
+ self,
+ id: str,
+ *,
+ include_remote_data: typing.Optional[bool] = None,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> RejectReason:
"""
Returns a `RejectReason` object with the given `id`.
@@ -209,6 +283,8 @@ async def retrieve(self, id: str, *, include_remote_data: typing.Optional[bool]
- id: str.
- include_remote_data: typing.Optional[bool]. Whether to include the original data Merge fetched from the third-party to produce these models.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import AsyncMerge
@@ -217,15 +293,35 @@ async def retrieve(self, id: str, *, include_remote_data: typing.Optional[bool]
api_key="YOUR_API_KEY",
)
await client.ats.reject_reasons.retrieve(
- id="id",
+ id="string",
)
"""
_response = await self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", f"api/ats/v1/reject-reasons/{id}"),
- params=remove_none_from_dict({"include_remote_data": include_remote_data}),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "include_remote_data": include_remote_data,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(RejectReason, _response.json()) # type: ignore
diff --git a/src/merge/resources/ats/resources/scorecards/client.py b/src/merge/resources/ats/resources/scorecards/client.py
index 6c96132e..42572fc7 100644
--- a/src/merge/resources/ats/resources/scorecards/client.py
+++ b/src/merge/resources/ats/resources/scorecards/client.py
@@ -5,12 +5,12 @@
import urllib.parse
from json.decoder import JSONDecodeError
-import typing_extensions
-
from .....core.api_error import ApiError
from .....core.client_wrapper import AsyncClientWrapper, SyncClientWrapper
from .....core.datetime_utils import serialize_datetime
+from .....core.jsonable_encoder import jsonable_encoder
from .....core.remove_none_from_dict import remove_none_from_dict
+from .....core.request_options import RequestOptions
from ...types.paginated_scorecard_list import PaginatedScorecardList
from ...types.scorecard import Scorecard
from .types.scorecards_list_request_expand import ScorecardsListRequestExpand
@@ -41,9 +41,10 @@ def list(
modified_after: typing.Optional[dt.datetime] = None,
modified_before: typing.Optional[dt.datetime] = None,
page_size: typing.Optional[int] = None,
- remote_fields: typing.Optional[typing_extensions.Literal["overall_recommendation"]] = None,
+ remote_fields: typing.Optional[typing.Literal["overall_recommendation"]] = None,
remote_id: typing.Optional[str] = None,
- show_enum_origins: typing.Optional[typing_extensions.Literal["overall_recommendation"]] = None,
+ show_enum_origins: typing.Optional[typing.Literal["overall_recommendation"]] = None,
+ request_options: typing.Optional[RequestOptions] = None,
) -> PaginatedScorecardList:
"""
Returns a list of `Scorecard` objects.
@@ -73,11 +74,13 @@ def list(
- page_size: typing.Optional[int]. Number of results to return per page.
- - remote_fields: typing.Optional[typing_extensions.Literal["overall_recommendation"]]. Deprecated. Use show_enum_origins.
+ - remote_fields: typing.Optional[typing.Literal["overall_recommendation"]]. Deprecated. Use show_enum_origins.
- remote_id: typing.Optional[str]. The API provider's ID for the given object.
- - show_enum_origins: typing.Optional[typing_extensions.Literal["overall_recommendation"]]. Which fields should be returned in non-normalized form.
+ - show_enum_origins: typing.Optional[typing.Literal["overall_recommendation"]]. Which fields should be returned in non-normalized form.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import Merge
from merge.resources.ats import ScorecardsListRequestExpand
@@ -95,27 +98,43 @@ def list(
_response = self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/ats/v1/scorecards"),
- params=remove_none_from_dict(
- {
- "application_id": application_id,
- "created_after": serialize_datetime(created_after) if created_after is not None else None,
- "created_before": serialize_datetime(created_before) if created_before is not None else None,
- "cursor": cursor,
- "expand": expand,
- "include_deleted_data": include_deleted_data,
- "include_remote_data": include_remote_data,
- "interview_id": interview_id,
- "interviewer_id": interviewer_id,
- "modified_after": serialize_datetime(modified_after) if modified_after is not None else None,
- "modified_before": serialize_datetime(modified_before) if modified_before is not None else None,
- "page_size": page_size,
- "remote_fields": remote_fields,
- "remote_id": remote_id,
- "show_enum_origins": show_enum_origins,
- }
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "application_id": application_id,
+ "created_after": serialize_datetime(created_after) if created_after is not None else None,
+ "created_before": serialize_datetime(created_before) if created_before is not None else None,
+ "cursor": cursor,
+ "expand": expand,
+ "include_deleted_data": include_deleted_data,
+ "include_remote_data": include_remote_data,
+ "interview_id": interview_id,
+ "interviewer_id": interviewer_id,
+ "modified_after": serialize_datetime(modified_after) if modified_after is not None else None,
+ "modified_before": serialize_datetime(modified_before) if modified_before is not None else None,
+ "page_size": page_size,
+ "remote_fields": remote_fields,
+ "remote_id": remote_id,
+ "show_enum_origins": show_enum_origins,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(PaginatedScorecardList, _response.json()) # type: ignore
@@ -131,8 +150,9 @@ def retrieve(
*,
expand: typing.Optional[ScorecardsRetrieveRequestExpand] = None,
include_remote_data: typing.Optional[bool] = None,
- remote_fields: typing.Optional[typing_extensions.Literal["overall_recommendation"]] = None,
- show_enum_origins: typing.Optional[typing_extensions.Literal["overall_recommendation"]] = None,
+ remote_fields: typing.Optional[typing.Literal["overall_recommendation"]] = None,
+ show_enum_origins: typing.Optional[typing.Literal["overall_recommendation"]] = None,
+ request_options: typing.Optional[RequestOptions] = None,
) -> Scorecard:
"""
Returns a `Scorecard` object with the given `id`.
@@ -144,9 +164,11 @@ def retrieve(
- include_remote_data: typing.Optional[bool]. Whether to include the original data Merge fetched from the third-party to produce these models.
- - remote_fields: typing.Optional[typing_extensions.Literal["overall_recommendation"]]. Deprecated. Use show_enum_origins.
+ - remote_fields: typing.Optional[typing.Literal["overall_recommendation"]]. Deprecated. Use show_enum_origins.
- - show_enum_origins: typing.Optional[typing_extensions.Literal["overall_recommendation"]]. Which fields should be returned in non-normalized form.
+ - show_enum_origins: typing.Optional[typing.Literal["overall_recommendation"]]. Which fields should be returned in non-normalized form.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import Merge
from merge.resources.ats import ScorecardsRetrieveRequestExpand
@@ -156,7 +178,7 @@ def retrieve(
api_key="YOUR_API_KEY",
)
client.ats.scorecards.retrieve(
- id="id",
+ id="string",
expand=ScorecardsRetrieveRequestExpand.APPLICATION,
remote_fields="overall_recommendation",
show_enum_origins="overall_recommendation",
@@ -165,16 +187,32 @@ def retrieve(
_response = self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", f"api/ats/v1/scorecards/{id}"),
- params=remove_none_from_dict(
- {
- "expand": expand,
- "include_remote_data": include_remote_data,
- "remote_fields": remote_fields,
- "show_enum_origins": show_enum_origins,
- }
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "expand": expand,
+ "include_remote_data": include_remote_data,
+ "remote_fields": remote_fields,
+ "show_enum_origins": show_enum_origins,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(Scorecard, _response.json()) # type: ignore
@@ -204,9 +242,10 @@ async def list(
modified_after: typing.Optional[dt.datetime] = None,
modified_before: typing.Optional[dt.datetime] = None,
page_size: typing.Optional[int] = None,
- remote_fields: typing.Optional[typing_extensions.Literal["overall_recommendation"]] = None,
+ remote_fields: typing.Optional[typing.Literal["overall_recommendation"]] = None,
remote_id: typing.Optional[str] = None,
- show_enum_origins: typing.Optional[typing_extensions.Literal["overall_recommendation"]] = None,
+ show_enum_origins: typing.Optional[typing.Literal["overall_recommendation"]] = None,
+ request_options: typing.Optional[RequestOptions] = None,
) -> PaginatedScorecardList:
"""
Returns a list of `Scorecard` objects.
@@ -236,11 +275,13 @@ async def list(
- page_size: typing.Optional[int]. Number of results to return per page.
- - remote_fields: typing.Optional[typing_extensions.Literal["overall_recommendation"]]. Deprecated. Use show_enum_origins.
+ - remote_fields: typing.Optional[typing.Literal["overall_recommendation"]]. Deprecated. Use show_enum_origins.
- remote_id: typing.Optional[str]. The API provider's ID for the given object.
- - show_enum_origins: typing.Optional[typing_extensions.Literal["overall_recommendation"]]. Which fields should be returned in non-normalized form.
+ - show_enum_origins: typing.Optional[typing.Literal["overall_recommendation"]]. Which fields should be returned in non-normalized form.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import AsyncMerge
from merge.resources.ats import ScorecardsListRequestExpand
@@ -258,27 +299,43 @@ async def list(
_response = await self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/ats/v1/scorecards"),
- params=remove_none_from_dict(
- {
- "application_id": application_id,
- "created_after": serialize_datetime(created_after) if created_after is not None else None,
- "created_before": serialize_datetime(created_before) if created_before is not None else None,
- "cursor": cursor,
- "expand": expand,
- "include_deleted_data": include_deleted_data,
- "include_remote_data": include_remote_data,
- "interview_id": interview_id,
- "interviewer_id": interviewer_id,
- "modified_after": serialize_datetime(modified_after) if modified_after is not None else None,
- "modified_before": serialize_datetime(modified_before) if modified_before is not None else None,
- "page_size": page_size,
- "remote_fields": remote_fields,
- "remote_id": remote_id,
- "show_enum_origins": show_enum_origins,
- }
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "application_id": application_id,
+ "created_after": serialize_datetime(created_after) if created_after is not None else None,
+ "created_before": serialize_datetime(created_before) if created_before is not None else None,
+ "cursor": cursor,
+ "expand": expand,
+ "include_deleted_data": include_deleted_data,
+ "include_remote_data": include_remote_data,
+ "interview_id": interview_id,
+ "interviewer_id": interviewer_id,
+ "modified_after": serialize_datetime(modified_after) if modified_after is not None else None,
+ "modified_before": serialize_datetime(modified_before) if modified_before is not None else None,
+ "page_size": page_size,
+ "remote_fields": remote_fields,
+ "remote_id": remote_id,
+ "show_enum_origins": show_enum_origins,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(PaginatedScorecardList, _response.json()) # type: ignore
@@ -294,8 +351,9 @@ async def retrieve(
*,
expand: typing.Optional[ScorecardsRetrieveRequestExpand] = None,
include_remote_data: typing.Optional[bool] = None,
- remote_fields: typing.Optional[typing_extensions.Literal["overall_recommendation"]] = None,
- show_enum_origins: typing.Optional[typing_extensions.Literal["overall_recommendation"]] = None,
+ remote_fields: typing.Optional[typing.Literal["overall_recommendation"]] = None,
+ show_enum_origins: typing.Optional[typing.Literal["overall_recommendation"]] = None,
+ request_options: typing.Optional[RequestOptions] = None,
) -> Scorecard:
"""
Returns a `Scorecard` object with the given `id`.
@@ -307,9 +365,11 @@ async def retrieve(
- include_remote_data: typing.Optional[bool]. Whether to include the original data Merge fetched from the third-party to produce these models.
- - remote_fields: typing.Optional[typing_extensions.Literal["overall_recommendation"]]. Deprecated. Use show_enum_origins.
+ - remote_fields: typing.Optional[typing.Literal["overall_recommendation"]]. Deprecated. Use show_enum_origins.
- - show_enum_origins: typing.Optional[typing_extensions.Literal["overall_recommendation"]]. Which fields should be returned in non-normalized form.
+ - show_enum_origins: typing.Optional[typing.Literal["overall_recommendation"]]. Which fields should be returned in non-normalized form.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import AsyncMerge
from merge.resources.ats import ScorecardsRetrieveRequestExpand
@@ -319,7 +379,7 @@ async def retrieve(
api_key="YOUR_API_KEY",
)
await client.ats.scorecards.retrieve(
- id="id",
+ id="string",
expand=ScorecardsRetrieveRequestExpand.APPLICATION,
remote_fields="overall_recommendation",
show_enum_origins="overall_recommendation",
@@ -328,16 +388,32 @@ async def retrieve(
_response = await self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", f"api/ats/v1/scorecards/{id}"),
- params=remove_none_from_dict(
- {
- "expand": expand,
- "include_remote_data": include_remote_data,
- "remote_fields": remote_fields,
- "show_enum_origins": show_enum_origins,
- }
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "expand": expand,
+ "include_remote_data": include_remote_data,
+ "remote_fields": remote_fields,
+ "show_enum_origins": show_enum_origins,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(Scorecard, _response.json()) # type: ignore
diff --git a/src/merge/resources/ats/resources/selective_sync/client.py b/src/merge/resources/ats/resources/selective_sync/client.py
index a6533f1d..09459d36 100644
--- a/src/merge/resources/ats/resources/selective_sync/client.py
+++ b/src/merge/resources/ats/resources/selective_sync/client.py
@@ -8,6 +8,7 @@
from .....core.client_wrapper import AsyncClientWrapper, SyncClientWrapper
from .....core.jsonable_encoder import jsonable_encoder
from .....core.remove_none_from_dict import remove_none_from_dict
+from .....core.request_options import RequestOptions
from ...types.linked_account_selective_sync_configuration import LinkedAccountSelectiveSyncConfiguration
from ...types.linked_account_selective_sync_configuration_request import LinkedAccountSelectiveSyncConfigurationRequest
from ...types.paginated_condition_schema_list import PaginatedConditionSchemaList
@@ -25,10 +26,14 @@ class SelectiveSyncClient:
def __init__(self, *, client_wrapper: SyncClientWrapper):
self._client_wrapper = client_wrapper
- def configurations_list(self) -> typing.List[LinkedAccountSelectiveSyncConfiguration]:
+ def configurations_list(
+ self, *, request_options: typing.Optional[RequestOptions] = None
+ ) -> typing.List[LinkedAccountSelectiveSyncConfiguration]:
"""
Get a linked account's selective syncs.
+ Parameters:
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import Merge
@@ -41,8 +46,20 @@ def configurations_list(self) -> typing.List[LinkedAccountSelectiveSyncConfigura
_response = self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/ats/v1/selective-sync/configurations"),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ request_options.get("additional_query_parameters") if request_options is not None else None
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(typing.List[LinkedAccountSelectiveSyncConfiguration], _response.json()) # type: ignore
@@ -53,35 +70,52 @@ def configurations_list(self) -> typing.List[LinkedAccountSelectiveSyncConfigura
raise ApiError(status_code=_response.status_code, body=_response_json)
def configurations_update(
- self, *, sync_configurations: typing.List[LinkedAccountSelectiveSyncConfigurationRequest]
+ self,
+ *,
+ sync_configurations: typing.List[LinkedAccountSelectiveSyncConfigurationRequest],
+ request_options: typing.Optional[RequestOptions] = None,
) -> typing.List[LinkedAccountSelectiveSyncConfiguration]:
"""
Replace a linked account's selective syncs.
Parameters:
- sync_configurations: typing.List[LinkedAccountSelectiveSyncConfigurationRequest]. The selective syncs associated with a linked account.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import Merge
- from merge.resources.ats import LinkedAccountSelectiveSyncConfigurationRequest
client = Merge(
account_token="YOUR_ACCOUNT_TOKEN",
api_key="YOUR_API_KEY",
)
client.ats.selective_sync.configurations_update(
- sync_configurations=[
- LinkedAccountSelectiveSyncConfigurationRequest(
- linked_account_conditions=[],
- )
- ],
+ sync_configurations=[],
)
"""
_response = self._client_wrapper.httpx_client.request(
"PUT",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/ats/v1/selective-sync/configurations"),
- json=jsonable_encoder({"sync_configurations": sync_configurations}),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ request_options.get("additional_query_parameters") if request_options is not None else None
+ ),
+ json=jsonable_encoder({"sync_configurations": sync_configurations})
+ if request_options is None or request_options.get("additional_body_parameters") is None
+ else {
+ **jsonable_encoder({"sync_configurations": sync_configurations}),
+ **(jsonable_encoder(remove_none_from_dict(request_options.get("additional_body_parameters", {})))),
+ },
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(typing.List[LinkedAccountSelectiveSyncConfiguration], _response.json()) # type: ignore
@@ -97,6 +131,7 @@ def meta_list(
common_model: typing.Optional[str] = None,
cursor: typing.Optional[str] = None,
page_size: typing.Optional[int] = None,
+ request_options: typing.Optional[RequestOptions] = None,
) -> PaginatedConditionSchemaList:
"""
Get metadata for the conditions available to a linked account.
@@ -107,6 +142,8 @@ def meta_list(
- cursor: typing.Optional[str]. The pagination cursor value.
- page_size: typing.Optional[int]. Number of results to return per page.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import Merge
@@ -119,9 +156,31 @@ def meta_list(
_response = self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/ats/v1/selective-sync/meta"),
- params=remove_none_from_dict({"common_model": common_model, "cursor": cursor, "page_size": page_size}),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "common_model": common_model,
+ "cursor": cursor,
+ "page_size": page_size,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(PaginatedConditionSchemaList, _response.json()) # type: ignore
@@ -136,10 +195,14 @@ class AsyncSelectiveSyncClient:
def __init__(self, *, client_wrapper: AsyncClientWrapper):
self._client_wrapper = client_wrapper
- async def configurations_list(self) -> typing.List[LinkedAccountSelectiveSyncConfiguration]:
+ async def configurations_list(
+ self, *, request_options: typing.Optional[RequestOptions] = None
+ ) -> typing.List[LinkedAccountSelectiveSyncConfiguration]:
"""
Get a linked account's selective syncs.
+ Parameters:
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import AsyncMerge
@@ -152,8 +215,20 @@ async def configurations_list(self) -> typing.List[LinkedAccountSelectiveSyncCon
_response = await self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/ats/v1/selective-sync/configurations"),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ request_options.get("additional_query_parameters") if request_options is not None else None
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(typing.List[LinkedAccountSelectiveSyncConfiguration], _response.json()) # type: ignore
@@ -164,35 +239,52 @@ async def configurations_list(self) -> typing.List[LinkedAccountSelectiveSyncCon
raise ApiError(status_code=_response.status_code, body=_response_json)
async def configurations_update(
- self, *, sync_configurations: typing.List[LinkedAccountSelectiveSyncConfigurationRequest]
+ self,
+ *,
+ sync_configurations: typing.List[LinkedAccountSelectiveSyncConfigurationRequest],
+ request_options: typing.Optional[RequestOptions] = None,
) -> typing.List[LinkedAccountSelectiveSyncConfiguration]:
"""
Replace a linked account's selective syncs.
Parameters:
- sync_configurations: typing.List[LinkedAccountSelectiveSyncConfigurationRequest]. The selective syncs associated with a linked account.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import AsyncMerge
- from merge.resources.ats import LinkedAccountSelectiveSyncConfigurationRequest
client = AsyncMerge(
account_token="YOUR_ACCOUNT_TOKEN",
api_key="YOUR_API_KEY",
)
await client.ats.selective_sync.configurations_update(
- sync_configurations=[
- LinkedAccountSelectiveSyncConfigurationRequest(
- linked_account_conditions=[],
- )
- ],
+ sync_configurations=[],
)
"""
_response = await self._client_wrapper.httpx_client.request(
"PUT",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/ats/v1/selective-sync/configurations"),
- json=jsonable_encoder({"sync_configurations": sync_configurations}),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ request_options.get("additional_query_parameters") if request_options is not None else None
+ ),
+ json=jsonable_encoder({"sync_configurations": sync_configurations})
+ if request_options is None or request_options.get("additional_body_parameters") is None
+ else {
+ **jsonable_encoder({"sync_configurations": sync_configurations}),
+ **(jsonable_encoder(remove_none_from_dict(request_options.get("additional_body_parameters", {})))),
+ },
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(typing.List[LinkedAccountSelectiveSyncConfiguration], _response.json()) # type: ignore
@@ -208,6 +300,7 @@ async def meta_list(
common_model: typing.Optional[str] = None,
cursor: typing.Optional[str] = None,
page_size: typing.Optional[int] = None,
+ request_options: typing.Optional[RequestOptions] = None,
) -> PaginatedConditionSchemaList:
"""
Get metadata for the conditions available to a linked account.
@@ -218,6 +311,8 @@ async def meta_list(
- cursor: typing.Optional[str]. The pagination cursor value.
- page_size: typing.Optional[int]. Number of results to return per page.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import AsyncMerge
@@ -230,9 +325,31 @@ async def meta_list(
_response = await self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/ats/v1/selective-sync/meta"),
- params=remove_none_from_dict({"common_model": common_model, "cursor": cursor, "page_size": page_size}),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "common_model": common_model,
+ "cursor": cursor,
+ "page_size": page_size,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(PaginatedConditionSchemaList, _response.json()) # type: ignore
diff --git a/src/merge/resources/ats/resources/sync_status/client.py b/src/merge/resources/ats/resources/sync_status/client.py
index 76cbfcf6..0c037958 100644
--- a/src/merge/resources/ats/resources/sync_status/client.py
+++ b/src/merge/resources/ats/resources/sync_status/client.py
@@ -6,7 +6,9 @@
from .....core.api_error import ApiError
from .....core.client_wrapper import AsyncClientWrapper, SyncClientWrapper
+from .....core.jsonable_encoder import jsonable_encoder
from .....core.remove_none_from_dict import remove_none_from_dict
+from .....core.request_options import RequestOptions
from ...types.paginated_sync_status_list import PaginatedSyncStatusList
try:
@@ -20,7 +22,11 @@ def __init__(self, *, client_wrapper: SyncClientWrapper):
self._client_wrapper = client_wrapper
def list(
- self, *, cursor: typing.Optional[str] = None, page_size: typing.Optional[int] = None
+ self,
+ *,
+ cursor: typing.Optional[str] = None,
+ page_size: typing.Optional[int] = None,
+ request_options: typing.Optional[RequestOptions] = None,
) -> PaginatedSyncStatusList:
"""
Get syncing status. Possible values: `DISABLED`, `DONE`, `FAILED`, `PARTIALLY_SYNCED`, `PAUSED`, `SYNCING`. Learn more about sync status in our [Help Center](https://help.merge.dev/en/articles/8184193-merge-sync-statuses).
@@ -29,6 +35,8 @@ def list(
- cursor: typing.Optional[str]. The pagination cursor value.
- page_size: typing.Optional[int]. Number of results to return per page.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import Merge
@@ -41,9 +49,30 @@ def list(
_response = self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/ats/v1/sync-status"),
- params=remove_none_from_dict({"cursor": cursor, "page_size": page_size}),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "cursor": cursor,
+ "page_size": page_size,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(PaginatedSyncStatusList, _response.json()) # type: ignore
@@ -59,7 +88,11 @@ def __init__(self, *, client_wrapper: AsyncClientWrapper):
self._client_wrapper = client_wrapper
async def list(
- self, *, cursor: typing.Optional[str] = None, page_size: typing.Optional[int] = None
+ self,
+ *,
+ cursor: typing.Optional[str] = None,
+ page_size: typing.Optional[int] = None,
+ request_options: typing.Optional[RequestOptions] = None,
) -> PaginatedSyncStatusList:
"""
Get syncing status. Possible values: `DISABLED`, `DONE`, `FAILED`, `PARTIALLY_SYNCED`, `PAUSED`, `SYNCING`. Learn more about sync status in our [Help Center](https://help.merge.dev/en/articles/8184193-merge-sync-statuses).
@@ -68,6 +101,8 @@ async def list(
- cursor: typing.Optional[str]. The pagination cursor value.
- page_size: typing.Optional[int]. Number of results to return per page.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import AsyncMerge
@@ -80,9 +115,30 @@ async def list(
_response = await self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/ats/v1/sync-status"),
- params=remove_none_from_dict({"cursor": cursor, "page_size": page_size}),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "cursor": cursor,
+ "page_size": page_size,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(PaginatedSyncStatusList, _response.json()) # type: ignore
diff --git a/src/merge/resources/ats/resources/tags/client.py b/src/merge/resources/ats/resources/tags/client.py
index cc36e499..911c0ece 100644
--- a/src/merge/resources/ats/resources/tags/client.py
+++ b/src/merge/resources/ats/resources/tags/client.py
@@ -8,7 +8,9 @@
from .....core.api_error import ApiError
from .....core.client_wrapper import AsyncClientWrapper, SyncClientWrapper
from .....core.datetime_utils import serialize_datetime
+from .....core.jsonable_encoder import jsonable_encoder
from .....core.remove_none_from_dict import remove_none_from_dict
+from .....core.request_options import RequestOptions
from ...types.paginated_tag_list import PaginatedTagList
try:
@@ -33,6 +35,7 @@ def list(
modified_before: typing.Optional[dt.datetime] = None,
page_size: typing.Optional[int] = None,
remote_id: typing.Optional[str] = None,
+ request_options: typing.Optional[RequestOptions] = None,
) -> PaginatedTagList:
"""
Returns a list of `Tag` objects.
@@ -55,6 +58,8 @@ def list(
- page_size: typing.Optional[int]. Number of results to return per page.
- remote_id: typing.Optional[str]. The API provider's ID for the given object.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import Merge
@@ -67,21 +72,37 @@ def list(
_response = self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/ats/v1/tags"),
- params=remove_none_from_dict(
- {
- "created_after": serialize_datetime(created_after) if created_after is not None else None,
- "created_before": serialize_datetime(created_before) if created_before is not None else None,
- "cursor": cursor,
- "include_deleted_data": include_deleted_data,
- "include_remote_data": include_remote_data,
- "modified_after": serialize_datetime(modified_after) if modified_after is not None else None,
- "modified_before": serialize_datetime(modified_before) if modified_before is not None else None,
- "page_size": page_size,
- "remote_id": remote_id,
- }
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "created_after": serialize_datetime(created_after) if created_after is not None else None,
+ "created_before": serialize_datetime(created_before) if created_before is not None else None,
+ "cursor": cursor,
+ "include_deleted_data": include_deleted_data,
+ "include_remote_data": include_remote_data,
+ "modified_after": serialize_datetime(modified_after) if modified_after is not None else None,
+ "modified_before": serialize_datetime(modified_before) if modified_before is not None else None,
+ "page_size": page_size,
+ "remote_id": remote_id,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(PaginatedTagList, _response.json()) # type: ignore
@@ -108,6 +129,7 @@ async def list(
modified_before: typing.Optional[dt.datetime] = None,
page_size: typing.Optional[int] = None,
remote_id: typing.Optional[str] = None,
+ request_options: typing.Optional[RequestOptions] = None,
) -> PaginatedTagList:
"""
Returns a list of `Tag` objects.
@@ -130,6 +152,8 @@ async def list(
- page_size: typing.Optional[int]. Number of results to return per page.
- remote_id: typing.Optional[str]. The API provider's ID for the given object.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import AsyncMerge
@@ -142,21 +166,37 @@ async def list(
_response = await self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/ats/v1/tags"),
- params=remove_none_from_dict(
- {
- "created_after": serialize_datetime(created_after) if created_after is not None else None,
- "created_before": serialize_datetime(created_before) if created_before is not None else None,
- "cursor": cursor,
- "include_deleted_data": include_deleted_data,
- "include_remote_data": include_remote_data,
- "modified_after": serialize_datetime(modified_after) if modified_after is not None else None,
- "modified_before": serialize_datetime(modified_before) if modified_before is not None else None,
- "page_size": page_size,
- "remote_id": remote_id,
- }
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "created_after": serialize_datetime(created_after) if created_after is not None else None,
+ "created_before": serialize_datetime(created_before) if created_before is not None else None,
+ "cursor": cursor,
+ "include_deleted_data": include_deleted_data,
+ "include_remote_data": include_remote_data,
+ "modified_after": serialize_datetime(modified_after) if modified_after is not None else None,
+ "modified_before": serialize_datetime(modified_before) if modified_before is not None else None,
+ "page_size": page_size,
+ "remote_id": remote_id,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(PaginatedTagList, _response.json()) # type: ignore
diff --git a/src/merge/resources/ats/resources/users/client.py b/src/merge/resources/ats/resources/users/client.py
index 3ce20bef..ef443d67 100644
--- a/src/merge/resources/ats/resources/users/client.py
+++ b/src/merge/resources/ats/resources/users/client.py
@@ -5,12 +5,12 @@
import urllib.parse
from json.decoder import JSONDecodeError
-import typing_extensions
-
from .....core.api_error import ApiError
from .....core.client_wrapper import AsyncClientWrapper, SyncClientWrapper
from .....core.datetime_utils import serialize_datetime
+from .....core.jsonable_encoder import jsonable_encoder
from .....core.remove_none_from_dict import remove_none_from_dict
+from .....core.request_options import RequestOptions
from ...types.paginated_remote_user_list import PaginatedRemoteUserList
from ...types.remote_user import RemoteUser
@@ -36,9 +36,10 @@ def list(
modified_after: typing.Optional[dt.datetime] = None,
modified_before: typing.Optional[dt.datetime] = None,
page_size: typing.Optional[int] = None,
- remote_fields: typing.Optional[typing_extensions.Literal["access_role"]] = None,
+ remote_fields: typing.Optional[typing.Literal["access_role"]] = None,
remote_id: typing.Optional[str] = None,
- show_enum_origins: typing.Optional[typing_extensions.Literal["access_role"]] = None,
+ show_enum_origins: typing.Optional[typing.Literal["access_role"]] = None,
+ request_options: typing.Optional[RequestOptions] = None,
) -> PaginatedRemoteUserList:
"""
Returns a list of `RemoteUser` objects.
@@ -62,11 +63,13 @@ def list(
- page_size: typing.Optional[int]. Number of results to return per page.
- - remote_fields: typing.Optional[typing_extensions.Literal["access_role"]]. Deprecated. Use show_enum_origins.
+ - remote_fields: typing.Optional[typing.Literal["access_role"]]. Deprecated. Use show_enum_origins.
- remote_id: typing.Optional[str]. The API provider's ID for the given object.
- - show_enum_origins: typing.Optional[typing_extensions.Literal["access_role"]]. Which fields should be returned in non-normalized form.
+ - show_enum_origins: typing.Optional[typing.Literal["access_role"]]. Which fields should be returned in non-normalized form.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import Merge
@@ -82,24 +85,40 @@ def list(
_response = self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/ats/v1/users"),
- params=remove_none_from_dict(
- {
- "created_after": serialize_datetime(created_after) if created_after is not None else None,
- "created_before": serialize_datetime(created_before) if created_before is not None else None,
- "cursor": cursor,
- "email": email,
- "include_deleted_data": include_deleted_data,
- "include_remote_data": include_remote_data,
- "modified_after": serialize_datetime(modified_after) if modified_after is not None else None,
- "modified_before": serialize_datetime(modified_before) if modified_before is not None else None,
- "page_size": page_size,
- "remote_fields": remote_fields,
- "remote_id": remote_id,
- "show_enum_origins": show_enum_origins,
- }
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "created_after": serialize_datetime(created_after) if created_after is not None else None,
+ "created_before": serialize_datetime(created_before) if created_before is not None else None,
+ "cursor": cursor,
+ "email": email,
+ "include_deleted_data": include_deleted_data,
+ "include_remote_data": include_remote_data,
+ "modified_after": serialize_datetime(modified_after) if modified_after is not None else None,
+ "modified_before": serialize_datetime(modified_before) if modified_before is not None else None,
+ "page_size": page_size,
+ "remote_fields": remote_fields,
+ "remote_id": remote_id,
+ "show_enum_origins": show_enum_origins,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(PaginatedRemoteUserList, _response.json()) # type: ignore
@@ -114,8 +133,9 @@ def retrieve(
id: str,
*,
include_remote_data: typing.Optional[bool] = None,
- remote_fields: typing.Optional[typing_extensions.Literal["access_role"]] = None,
- show_enum_origins: typing.Optional[typing_extensions.Literal["access_role"]] = None,
+ remote_fields: typing.Optional[typing.Literal["access_role"]] = None,
+ show_enum_origins: typing.Optional[typing.Literal["access_role"]] = None,
+ request_options: typing.Optional[RequestOptions] = None,
) -> RemoteUser:
"""
Returns a `RemoteUser` object with the given `id`.
@@ -125,9 +145,11 @@ def retrieve(
- include_remote_data: typing.Optional[bool]. Whether to include the original data Merge fetched from the third-party to produce these models.
- - remote_fields: typing.Optional[typing_extensions.Literal["access_role"]]. Deprecated. Use show_enum_origins.
+ - remote_fields: typing.Optional[typing.Literal["access_role"]]. Deprecated. Use show_enum_origins.
- - show_enum_origins: typing.Optional[typing_extensions.Literal["access_role"]]. Which fields should be returned in non-normalized form.
+ - show_enum_origins: typing.Optional[typing.Literal["access_role"]]. Which fields should be returned in non-normalized form.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import Merge
@@ -136,7 +158,7 @@ def retrieve(
api_key="YOUR_API_KEY",
)
client.ats.users.retrieve(
- id="id",
+ id="string",
remote_fields="access_role",
show_enum_origins="access_role",
)
@@ -144,15 +166,31 @@ def retrieve(
_response = self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", f"api/ats/v1/users/{id}"),
- params=remove_none_from_dict(
- {
- "include_remote_data": include_remote_data,
- "remote_fields": remote_fields,
- "show_enum_origins": show_enum_origins,
- }
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "include_remote_data": include_remote_data,
+ "remote_fields": remote_fields,
+ "show_enum_origins": show_enum_origins,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(RemoteUser, _response.json()) # type: ignore
@@ -179,9 +217,10 @@ async def list(
modified_after: typing.Optional[dt.datetime] = None,
modified_before: typing.Optional[dt.datetime] = None,
page_size: typing.Optional[int] = None,
- remote_fields: typing.Optional[typing_extensions.Literal["access_role"]] = None,
+ remote_fields: typing.Optional[typing.Literal["access_role"]] = None,
remote_id: typing.Optional[str] = None,
- show_enum_origins: typing.Optional[typing_extensions.Literal["access_role"]] = None,
+ show_enum_origins: typing.Optional[typing.Literal["access_role"]] = None,
+ request_options: typing.Optional[RequestOptions] = None,
) -> PaginatedRemoteUserList:
"""
Returns a list of `RemoteUser` objects.
@@ -205,11 +244,13 @@ async def list(
- page_size: typing.Optional[int]. Number of results to return per page.
- - remote_fields: typing.Optional[typing_extensions.Literal["access_role"]]. Deprecated. Use show_enum_origins.
+ - remote_fields: typing.Optional[typing.Literal["access_role"]]. Deprecated. Use show_enum_origins.
- remote_id: typing.Optional[str]. The API provider's ID for the given object.
- - show_enum_origins: typing.Optional[typing_extensions.Literal["access_role"]]. Which fields should be returned in non-normalized form.
+ - show_enum_origins: typing.Optional[typing.Literal["access_role"]]. Which fields should be returned in non-normalized form.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import AsyncMerge
@@ -225,24 +266,40 @@ async def list(
_response = await self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/ats/v1/users"),
- params=remove_none_from_dict(
- {
- "created_after": serialize_datetime(created_after) if created_after is not None else None,
- "created_before": serialize_datetime(created_before) if created_before is not None else None,
- "cursor": cursor,
- "email": email,
- "include_deleted_data": include_deleted_data,
- "include_remote_data": include_remote_data,
- "modified_after": serialize_datetime(modified_after) if modified_after is not None else None,
- "modified_before": serialize_datetime(modified_before) if modified_before is not None else None,
- "page_size": page_size,
- "remote_fields": remote_fields,
- "remote_id": remote_id,
- "show_enum_origins": show_enum_origins,
- }
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "created_after": serialize_datetime(created_after) if created_after is not None else None,
+ "created_before": serialize_datetime(created_before) if created_before is not None else None,
+ "cursor": cursor,
+ "email": email,
+ "include_deleted_data": include_deleted_data,
+ "include_remote_data": include_remote_data,
+ "modified_after": serialize_datetime(modified_after) if modified_after is not None else None,
+ "modified_before": serialize_datetime(modified_before) if modified_before is not None else None,
+ "page_size": page_size,
+ "remote_fields": remote_fields,
+ "remote_id": remote_id,
+ "show_enum_origins": show_enum_origins,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(PaginatedRemoteUserList, _response.json()) # type: ignore
@@ -257,8 +314,9 @@ async def retrieve(
id: str,
*,
include_remote_data: typing.Optional[bool] = None,
- remote_fields: typing.Optional[typing_extensions.Literal["access_role"]] = None,
- show_enum_origins: typing.Optional[typing_extensions.Literal["access_role"]] = None,
+ remote_fields: typing.Optional[typing.Literal["access_role"]] = None,
+ show_enum_origins: typing.Optional[typing.Literal["access_role"]] = None,
+ request_options: typing.Optional[RequestOptions] = None,
) -> RemoteUser:
"""
Returns a `RemoteUser` object with the given `id`.
@@ -268,9 +326,11 @@ async def retrieve(
- include_remote_data: typing.Optional[bool]. Whether to include the original data Merge fetched from the third-party to produce these models.
- - remote_fields: typing.Optional[typing_extensions.Literal["access_role"]]. Deprecated. Use show_enum_origins.
+ - remote_fields: typing.Optional[typing.Literal["access_role"]]. Deprecated. Use show_enum_origins.
- - show_enum_origins: typing.Optional[typing_extensions.Literal["access_role"]]. Which fields should be returned in non-normalized form.
+ - show_enum_origins: typing.Optional[typing.Literal["access_role"]]. Which fields should be returned in non-normalized form.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import AsyncMerge
@@ -279,7 +339,7 @@ async def retrieve(
api_key="YOUR_API_KEY",
)
await client.ats.users.retrieve(
- id="id",
+ id="string",
remote_fields="access_role",
show_enum_origins="access_role",
)
@@ -287,15 +347,31 @@ async def retrieve(
_response = await self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", f"api/ats/v1/users/{id}"),
- params=remove_none_from_dict(
- {
- "include_remote_data": include_remote_data,
- "remote_fields": remote_fields,
- "show_enum_origins": show_enum_origins,
- }
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "include_remote_data": include_remote_data,
+ "remote_fields": remote_fields,
+ "show_enum_origins": show_enum_origins,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(RemoteUser, _response.json()) # type: ignore
diff --git a/src/merge/resources/ats/resources/webhook_receivers/client.py b/src/merge/resources/ats/resources/webhook_receivers/client.py
index b3f65780..e5cad5fc 100644
--- a/src/merge/resources/ats/resources/webhook_receivers/client.py
+++ b/src/merge/resources/ats/resources/webhook_receivers/client.py
@@ -7,6 +7,8 @@
from .....core.api_error import ApiError
from .....core.client_wrapper import AsyncClientWrapper, SyncClientWrapper
from .....core.jsonable_encoder import jsonable_encoder
+from .....core.remove_none_from_dict import remove_none_from_dict
+from .....core.request_options import RequestOptions
from ...types.webhook_receiver import WebhookReceiver
try:
@@ -22,10 +24,12 @@ class WebhookReceiversClient:
def __init__(self, *, client_wrapper: SyncClientWrapper):
self._client_wrapper = client_wrapper
- def list(self) -> typing.List[WebhookReceiver]:
+ def list(self, *, request_options: typing.Optional[RequestOptions] = None) -> typing.List[WebhookReceiver]:
"""
Returns a list of `WebhookReceiver` objects.
+ Parameters:
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import Merge
@@ -38,8 +42,20 @@ def list(self) -> typing.List[WebhookReceiver]:
_response = self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/ats/v1/webhook-receivers"),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ request_options.get("additional_query_parameters") if request_options is not None else None
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(typing.List[WebhookReceiver], _response.json()) # type: ignore
@@ -49,7 +65,14 @@ def list(self) -> typing.List[WebhookReceiver]:
raise ApiError(status_code=_response.status_code, body=_response.text)
raise ApiError(status_code=_response.status_code, body=_response_json)
- def create(self, *, event: str, is_active: bool, key: typing.Optional[str] = OMIT) -> WebhookReceiver:
+ def create(
+ self,
+ *,
+ event: str,
+ is_active: bool,
+ key: typing.Optional[str] = OMIT,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> WebhookReceiver:
"""
Creates a `WebhookReceiver` object with the given values.
@@ -59,6 +82,19 @@ def create(self, *, event: str, is_active: bool, key: typing.Optional[str] = OMI
- is_active: bool.
- key: typing.Optional[str].
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
+ ---
+ from merge.client import Merge
+
+ client = Merge(
+ account_token="YOUR_ACCOUNT_TOKEN",
+ api_key="YOUR_API_KEY",
+ )
+ client.ats.webhook_receivers.create(
+ event="string",
+ is_active=True,
+ )
"""
_request: typing.Dict[str, typing.Any] = {"event": event, "is_active": is_active}
if key is not OMIT:
@@ -66,9 +102,26 @@ def create(self, *, event: str, is_active: bool, key: typing.Optional[str] = OMI
_response = self._client_wrapper.httpx_client.request(
"POST",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/ats/v1/webhook-receivers"),
- json=jsonable_encoder(_request),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ request_options.get("additional_query_parameters") if request_options is not None else None
+ ),
+ json=jsonable_encoder(_request)
+ if request_options is None or request_options.get("additional_body_parameters") is None
+ else {
+ **jsonable_encoder(_request),
+ **(jsonable_encoder(remove_none_from_dict(request_options.get("additional_body_parameters", {})))),
+ },
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(WebhookReceiver, _response.json()) # type: ignore
@@ -83,10 +136,12 @@ class AsyncWebhookReceiversClient:
def __init__(self, *, client_wrapper: AsyncClientWrapper):
self._client_wrapper = client_wrapper
- async def list(self) -> typing.List[WebhookReceiver]:
+ async def list(self, *, request_options: typing.Optional[RequestOptions] = None) -> typing.List[WebhookReceiver]:
"""
Returns a list of `WebhookReceiver` objects.
+ Parameters:
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import AsyncMerge
@@ -99,8 +154,20 @@ async def list(self) -> typing.List[WebhookReceiver]:
_response = await self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/ats/v1/webhook-receivers"),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ request_options.get("additional_query_parameters") if request_options is not None else None
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(typing.List[WebhookReceiver], _response.json()) # type: ignore
@@ -110,7 +177,14 @@ async def list(self) -> typing.List[WebhookReceiver]:
raise ApiError(status_code=_response.status_code, body=_response.text)
raise ApiError(status_code=_response.status_code, body=_response_json)
- async def create(self, *, event: str, is_active: bool, key: typing.Optional[str] = OMIT) -> WebhookReceiver:
+ async def create(
+ self,
+ *,
+ event: str,
+ is_active: bool,
+ key: typing.Optional[str] = OMIT,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> WebhookReceiver:
"""
Creates a `WebhookReceiver` object with the given values.
@@ -120,6 +194,19 @@ async def create(self, *, event: str, is_active: bool, key: typing.Optional[str]
- is_active: bool.
- key: typing.Optional[str].
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
+ ---
+ from merge.client import AsyncMerge
+
+ client = AsyncMerge(
+ account_token="YOUR_ACCOUNT_TOKEN",
+ api_key="YOUR_API_KEY",
+ )
+ await client.ats.webhook_receivers.create(
+ event="string",
+ is_active=True,
+ )
"""
_request: typing.Dict[str, typing.Any] = {"event": event, "is_active": is_active}
if key is not OMIT:
@@ -127,9 +214,26 @@ async def create(self, *, event: str, is_active: bool, key: typing.Optional[str]
_response = await self._client_wrapper.httpx_client.request(
"POST",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/ats/v1/webhook-receivers"),
- json=jsonable_encoder(_request),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ request_options.get("additional_query_parameters") if request_options is not None else None
+ ),
+ json=jsonable_encoder(_request)
+ if request_options is None or request_options.get("additional_body_parameters") is None
+ else {
+ **jsonable_encoder(_request),
+ **(jsonable_encoder(remove_none_from_dict(request_options.get("additional_body_parameters", {})))),
+ },
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(WebhookReceiver, _response.json()) # type: ignore
diff --git a/src/merge/resources/crm/resources/account_details/client.py b/src/merge/resources/crm/resources/account_details/client.py
index d4493c7f..38e2f23f 100644
--- a/src/merge/resources/crm/resources/account_details/client.py
+++ b/src/merge/resources/crm/resources/account_details/client.py
@@ -1,10 +1,14 @@
# This file was auto-generated by Fern from our API Definition.
+import typing
import urllib.parse
from json.decoder import JSONDecodeError
from .....core.api_error import ApiError
from .....core.client_wrapper import AsyncClientWrapper, SyncClientWrapper
+from .....core.jsonable_encoder import jsonable_encoder
+from .....core.remove_none_from_dict import remove_none_from_dict
+from .....core.request_options import RequestOptions
from ...types.account_details import AccountDetails
try:
@@ -17,10 +21,12 @@ class AccountDetailsClient:
def __init__(self, *, client_wrapper: SyncClientWrapper):
self._client_wrapper = client_wrapper
- def retrieve(self) -> AccountDetails:
+ def retrieve(self, *, request_options: typing.Optional[RequestOptions] = None) -> AccountDetails:
"""
Get details for a linked account.
+ Parameters:
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import Merge
@@ -33,8 +39,20 @@ def retrieve(self) -> AccountDetails:
_response = self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/crm/v1/account-details"),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ request_options.get("additional_query_parameters") if request_options is not None else None
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(AccountDetails, _response.json()) # type: ignore
@@ -49,10 +67,12 @@ class AsyncAccountDetailsClient:
def __init__(self, *, client_wrapper: AsyncClientWrapper):
self._client_wrapper = client_wrapper
- async def retrieve(self) -> AccountDetails:
+ async def retrieve(self, *, request_options: typing.Optional[RequestOptions] = None) -> AccountDetails:
"""
Get details for a linked account.
+ Parameters:
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import AsyncMerge
@@ -65,8 +85,20 @@ async def retrieve(self) -> AccountDetails:
_response = await self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/crm/v1/account-details"),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ request_options.get("additional_query_parameters") if request_options is not None else None
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(AccountDetails, _response.json()) # type: ignore
diff --git a/src/merge/resources/crm/resources/account_token/client.py b/src/merge/resources/crm/resources/account_token/client.py
index ca29f9e2..afcb3761 100644
--- a/src/merge/resources/crm/resources/account_token/client.py
+++ b/src/merge/resources/crm/resources/account_token/client.py
@@ -1,10 +1,14 @@
# This file was auto-generated by Fern from our API Definition.
+import typing
import urllib.parse
from json.decoder import JSONDecodeError
from .....core.api_error import ApiError
from .....core.client_wrapper import AsyncClientWrapper, SyncClientWrapper
+from .....core.jsonable_encoder import jsonable_encoder
+from .....core.remove_none_from_dict import remove_none_from_dict
+from .....core.request_options import RequestOptions
from ...types.account_token import AccountToken
try:
@@ -17,18 +21,42 @@ class AccountTokenClient:
def __init__(self, *, client_wrapper: SyncClientWrapper):
self._client_wrapper = client_wrapper
- def retrieve(self, public_token: str) -> AccountToken:
+ def retrieve(self, public_token: str, *, request_options: typing.Optional[RequestOptions] = None) -> AccountToken:
"""
Returns the account token for the end user with the provided public token.
Parameters:
- public_token: str.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
+ ---
+ from merge.client import Merge
+
+ client = Merge(
+ account_token="YOUR_ACCOUNT_TOKEN",
+ api_key="YOUR_API_KEY",
+ )
+ client.crm.account_token.retrieve(
+ public_token="string",
+ )
"""
_response = self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", f"api/crm/v1/account-token/{public_token}"),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ request_options.get("additional_query_parameters") if request_options is not None else None
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(AccountToken, _response.json()) # type: ignore
@@ -43,18 +71,44 @@ class AsyncAccountTokenClient:
def __init__(self, *, client_wrapper: AsyncClientWrapper):
self._client_wrapper = client_wrapper
- async def retrieve(self, public_token: str) -> AccountToken:
+ async def retrieve(
+ self, public_token: str, *, request_options: typing.Optional[RequestOptions] = None
+ ) -> AccountToken:
"""
Returns the account token for the end user with the provided public token.
Parameters:
- public_token: str.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
+ ---
+ from merge.client import AsyncMerge
+
+ client = AsyncMerge(
+ account_token="YOUR_ACCOUNT_TOKEN",
+ api_key="YOUR_API_KEY",
+ )
+ await client.crm.account_token.retrieve(
+ public_token="string",
+ )
"""
_response = await self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", f"api/crm/v1/account-token/{public_token}"),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ request_options.get("additional_query_parameters") if request_options is not None else None
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(AccountToken, _response.json()) # type: ignore
diff --git a/src/merge/resources/crm/resources/accounts/client.py b/src/merge/resources/crm/resources/accounts/client.py
index 38a6ea79..3f6a1aa8 100644
--- a/src/merge/resources/crm/resources/accounts/client.py
+++ b/src/merge/resources/crm/resources/accounts/client.py
@@ -5,13 +5,12 @@
import urllib.parse
from json.decoder import JSONDecodeError
-import typing_extensions
-
from .....core.api_error import ApiError
from .....core.client_wrapper import AsyncClientWrapper, SyncClientWrapper
from .....core.datetime_utils import serialize_datetime
from .....core.jsonable_encoder import jsonable_encoder
from .....core.remove_none_from_dict import remove_none_from_dict
+from .....core.request_options import RequestOptions
from ...types.account import Account
from ...types.account_request import AccountRequest
from ...types.crm_account_response import CrmAccountResponse
@@ -39,7 +38,7 @@ def list(
created_after: typing.Optional[dt.datetime] = None,
created_before: typing.Optional[dt.datetime] = None,
cursor: typing.Optional[str] = None,
- expand: typing.Optional[typing_extensions.Literal["owner"]] = None,
+ expand: typing.Optional[typing.Literal["owner"]] = None,
include_deleted_data: typing.Optional[bool] = None,
include_remote_data: typing.Optional[bool] = None,
include_remote_fields: typing.Optional[bool] = None,
@@ -49,6 +48,7 @@ def list(
owner_id: typing.Optional[str] = None,
page_size: typing.Optional[int] = None,
remote_id: typing.Optional[str] = None,
+ request_options: typing.Optional[RequestOptions] = None,
) -> PaginatedAccountList:
"""
Returns a list of `Account` objects.
@@ -60,7 +60,7 @@ def list(
- cursor: typing.Optional[str]. The pagination cursor value.
- - expand: typing.Optional[typing_extensions.Literal["owner"]]. Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces.
+ - expand: typing.Optional[typing.Literal["owner"]]. Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces.
- include_deleted_data: typing.Optional[bool]. Whether to include data that was marked as deleted by third party webhooks.
@@ -79,6 +79,8 @@ def list(
- page_size: typing.Optional[int]. Number of results to return per page.
- remote_id: typing.Optional[str]. The API provider's ID for the given object.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import Merge
@@ -93,25 +95,41 @@ def list(
_response = self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/crm/v1/accounts"),
- params=remove_none_from_dict(
- {
- "created_after": serialize_datetime(created_after) if created_after is not None else None,
- "created_before": serialize_datetime(created_before) if created_before is not None else None,
- "cursor": cursor,
- "expand": expand,
- "include_deleted_data": include_deleted_data,
- "include_remote_data": include_remote_data,
- "include_remote_fields": include_remote_fields,
- "modified_after": serialize_datetime(modified_after) if modified_after is not None else None,
- "modified_before": serialize_datetime(modified_before) if modified_before is not None else None,
- "name": name,
- "owner_id": owner_id,
- "page_size": page_size,
- "remote_id": remote_id,
- }
- ),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "created_after": serialize_datetime(created_after) if created_after is not None else None,
+ "created_before": serialize_datetime(created_before) if created_before is not None else None,
+ "cursor": cursor,
+ "expand": expand,
+ "include_deleted_data": include_deleted_data,
+ "include_remote_data": include_remote_data,
+ "include_remote_fields": include_remote_fields,
+ "modified_after": serialize_datetime(modified_after) if modified_after is not None else None,
+ "modified_before": serialize_datetime(modified_before) if modified_before is not None else None,
+ "name": name,
+ "owner_id": owner_id,
+ "page_size": page_size,
+ "remote_id": remote_id,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(PaginatedAccountList, _response.json()) # type: ignore
@@ -127,6 +145,7 @@ def create(
is_debug_mode: typing.Optional[bool] = None,
run_async: typing.Optional[bool] = None,
model: AccountRequest,
+ request_options: typing.Optional[RequestOptions] = None,
) -> CrmAccountResponse:
"""
Creates an `Account` object with the given values.
@@ -137,6 +156,8 @@ def create(
- run_async: typing.Optional[bool]. Whether or not third-party updates should be run asynchronously.
- model: AccountRequest.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
import datetime
@@ -153,7 +174,7 @@ def create(
description="One API for all integrations",
industry="API's",
website="https://merge.dev/",
- number_of_employees=276000,
+ number_of_employees=1,
last_activity_at=datetime.datetime.fromisoformat(
"2022-02-10 00:00:00+00:00",
),
@@ -163,10 +184,36 @@ def create(
_response = self._client_wrapper.httpx_client.request(
"POST",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/crm/v1/accounts"),
- params=remove_none_from_dict({"is_debug_mode": is_debug_mode, "run_async": run_async}),
- json=jsonable_encoder({"model": model}),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "is_debug_mode": is_debug_mode,
+ "run_async": run_async,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ json=jsonable_encoder({"model": model})
+ if request_options is None or request_options.get("additional_body_parameters") is None
+ else {
+ **jsonable_encoder({"model": model}),
+ **(jsonable_encoder(remove_none_from_dict(request_options.get("additional_body_parameters", {})))),
+ },
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(CrmAccountResponse, _response.json()) # type: ignore
@@ -180,9 +227,10 @@ def retrieve(
self,
id: str,
*,
- expand: typing.Optional[typing_extensions.Literal["owner"]] = None,
+ expand: typing.Optional[typing.Literal["owner"]] = None,
include_remote_data: typing.Optional[bool] = None,
include_remote_fields: typing.Optional[bool] = None,
+ request_options: typing.Optional[RequestOptions] = None,
) -> Account:
"""
Returns an `Account` object with the given `id`.
@@ -190,11 +238,13 @@ def retrieve(
Parameters:
- id: str.
- - expand: typing.Optional[typing_extensions.Literal["owner"]]. Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces.
+ - expand: typing.Optional[typing.Literal["owner"]]. Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces.
- include_remote_data: typing.Optional[bool]. Whether to include the original data Merge fetched from the third-party to produce these models.
- include_remote_fields: typing.Optional[bool]. Whether to include all remote fields, including fields that Merge did not map to common models, in a normalized format.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import Merge
@@ -203,22 +253,38 @@ def retrieve(
api_key="YOUR_API_KEY",
)
client.crm.accounts.retrieve(
- id="id",
+ id="string",
expand="owner",
)
"""
_response = self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", f"api/crm/v1/accounts/{id}"),
- params=remove_none_from_dict(
- {
- "expand": expand,
- "include_remote_data": include_remote_data,
- "include_remote_fields": include_remote_fields,
- }
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "expand": expand,
+ "include_remote_data": include_remote_data,
+ "include_remote_fields": include_remote_fields,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(Account, _response.json()) # type: ignore
@@ -235,6 +301,7 @@ def partial_update(
is_debug_mode: typing.Optional[bool] = None,
run_async: typing.Optional[bool] = None,
model: PatchedAccountRequest,
+ request_options: typing.Optional[RequestOptions] = None,
) -> CrmAccountResponse:
"""
Updates an `Account` object with the given `id`.
@@ -247,6 +314,8 @@ def partial_update(
- run_async: typing.Optional[bool]. Whether or not third-party updates should be run asynchronously.
- model: PatchedAccountRequest.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
import datetime
@@ -258,14 +327,14 @@ def partial_update(
api_key="YOUR_API_KEY",
)
client.crm.accounts.partial_update(
- id="id",
+ id="string",
model=PatchedAccountRequest(
owner="0258cbc6-6020-430a-848e-aafacbadf4ae",
name="Merge API",
description="One API for all integrations",
industry="API's",
website="https://merge.dev/",
- number_of_employees=276000,
+ number_of_employees=1,
last_activity_at=datetime.datetime.fromisoformat(
"2022-02-10 00:00:00+00:00",
),
@@ -275,10 +344,36 @@ def partial_update(
_response = self._client_wrapper.httpx_client.request(
"PATCH",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", f"api/crm/v1/accounts/{id}"),
- params=remove_none_from_dict({"is_debug_mode": is_debug_mode, "run_async": run_async}),
- json=jsonable_encoder({"model": model}),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "is_debug_mode": is_debug_mode,
+ "run_async": run_async,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ json=jsonable_encoder({"model": model})
+ if request_options is None or request_options.get("additional_body_parameters") is None
+ else {
+ **jsonable_encoder({"model": model}),
+ **(jsonable_encoder(remove_none_from_dict(request_options.get("additional_body_parameters", {})))),
+ },
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(CrmAccountResponse, _response.json()) # type: ignore
@@ -288,12 +383,14 @@ def partial_update(
raise ApiError(status_code=_response.status_code, body=_response.text)
raise ApiError(status_code=_response.status_code, body=_response_json)
- def meta_patch_retrieve(self, id: str) -> MetaResponse:
+ def meta_patch_retrieve(self, id: str, *, request_options: typing.Optional[RequestOptions] = None) -> MetaResponse:
"""
Returns metadata for `CRMAccount` PATCHs.
Parameters:
- id: str.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import Merge
@@ -302,14 +399,26 @@ def meta_patch_retrieve(self, id: str) -> MetaResponse:
api_key="YOUR_API_KEY",
)
client.crm.accounts.meta_patch_retrieve(
- id="id",
+ id="string",
)
"""
_response = self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", f"api/crm/v1/accounts/meta/patch/{id}"),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ request_options.get("additional_query_parameters") if request_options is not None else None
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(MetaResponse, _response.json()) # type: ignore
@@ -319,10 +428,12 @@ def meta_patch_retrieve(self, id: str) -> MetaResponse:
raise ApiError(status_code=_response.status_code, body=_response.text)
raise ApiError(status_code=_response.status_code, body=_response_json)
- def meta_post_retrieve(self) -> MetaResponse:
+ def meta_post_retrieve(self, *, request_options: typing.Optional[RequestOptions] = None) -> MetaResponse:
"""
Returns metadata for `CRMAccount` POSTs.
+ Parameters:
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import Merge
@@ -335,8 +446,20 @@ def meta_post_retrieve(self) -> MetaResponse:
_response = self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/crm/v1/accounts/meta/post"),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ request_options.get("additional_query_parameters") if request_options is not None else None
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(MetaResponse, _response.json()) # type: ignore
@@ -354,6 +477,7 @@ def remote_field_classes_list(
include_remote_data: typing.Optional[bool] = None,
include_remote_fields: typing.Optional[bool] = None,
page_size: typing.Optional[int] = None,
+ request_options: typing.Optional[RequestOptions] = None,
) -> PaginatedRemoteFieldClassList:
"""
Returns a list of `RemoteFieldClass` objects.
@@ -368,6 +492,8 @@ def remote_field_classes_list(
- include_remote_fields: typing.Optional[bool]. Whether to include all remote fields, including fields that Merge did not map to common models, in a normalized format.
- page_size: typing.Optional[int]. Number of results to return per page.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import Merge
@@ -380,17 +506,33 @@ def remote_field_classes_list(
_response = self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/crm/v1/accounts/remote-field-classes"),
- params=remove_none_from_dict(
- {
- "cursor": cursor,
- "include_deleted_data": include_deleted_data,
- "include_remote_data": include_remote_data,
- "include_remote_fields": include_remote_fields,
- "page_size": page_size,
- }
- ),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "cursor": cursor,
+ "include_deleted_data": include_deleted_data,
+ "include_remote_data": include_remote_data,
+ "include_remote_fields": include_remote_fields,
+ "page_size": page_size,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(PaginatedRemoteFieldClassList, _response.json()) # type: ignore
@@ -411,7 +553,7 @@ async def list(
created_after: typing.Optional[dt.datetime] = None,
created_before: typing.Optional[dt.datetime] = None,
cursor: typing.Optional[str] = None,
- expand: typing.Optional[typing_extensions.Literal["owner"]] = None,
+ expand: typing.Optional[typing.Literal["owner"]] = None,
include_deleted_data: typing.Optional[bool] = None,
include_remote_data: typing.Optional[bool] = None,
include_remote_fields: typing.Optional[bool] = None,
@@ -421,6 +563,7 @@ async def list(
owner_id: typing.Optional[str] = None,
page_size: typing.Optional[int] = None,
remote_id: typing.Optional[str] = None,
+ request_options: typing.Optional[RequestOptions] = None,
) -> PaginatedAccountList:
"""
Returns a list of `Account` objects.
@@ -432,7 +575,7 @@ async def list(
- cursor: typing.Optional[str]. The pagination cursor value.
- - expand: typing.Optional[typing_extensions.Literal["owner"]]. Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces.
+ - expand: typing.Optional[typing.Literal["owner"]]. Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces.
- include_deleted_data: typing.Optional[bool]. Whether to include data that was marked as deleted by third party webhooks.
@@ -451,6 +594,8 @@ async def list(
- page_size: typing.Optional[int]. Number of results to return per page.
- remote_id: typing.Optional[str]. The API provider's ID for the given object.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import AsyncMerge
@@ -465,25 +610,41 @@ async def list(
_response = await self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/crm/v1/accounts"),
- params=remove_none_from_dict(
- {
- "created_after": serialize_datetime(created_after) if created_after is not None else None,
- "created_before": serialize_datetime(created_before) if created_before is not None else None,
- "cursor": cursor,
- "expand": expand,
- "include_deleted_data": include_deleted_data,
- "include_remote_data": include_remote_data,
- "include_remote_fields": include_remote_fields,
- "modified_after": serialize_datetime(modified_after) if modified_after is not None else None,
- "modified_before": serialize_datetime(modified_before) if modified_before is not None else None,
- "name": name,
- "owner_id": owner_id,
- "page_size": page_size,
- "remote_id": remote_id,
- }
- ),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "created_after": serialize_datetime(created_after) if created_after is not None else None,
+ "created_before": serialize_datetime(created_before) if created_before is not None else None,
+ "cursor": cursor,
+ "expand": expand,
+ "include_deleted_data": include_deleted_data,
+ "include_remote_data": include_remote_data,
+ "include_remote_fields": include_remote_fields,
+ "modified_after": serialize_datetime(modified_after) if modified_after is not None else None,
+ "modified_before": serialize_datetime(modified_before) if modified_before is not None else None,
+ "name": name,
+ "owner_id": owner_id,
+ "page_size": page_size,
+ "remote_id": remote_id,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(PaginatedAccountList, _response.json()) # type: ignore
@@ -499,6 +660,7 @@ async def create(
is_debug_mode: typing.Optional[bool] = None,
run_async: typing.Optional[bool] = None,
model: AccountRequest,
+ request_options: typing.Optional[RequestOptions] = None,
) -> CrmAccountResponse:
"""
Creates an `Account` object with the given values.
@@ -509,6 +671,8 @@ async def create(
- run_async: typing.Optional[bool]. Whether or not third-party updates should be run asynchronously.
- model: AccountRequest.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
import datetime
@@ -525,7 +689,7 @@ async def create(
description="One API for all integrations",
industry="API's",
website="https://merge.dev/",
- number_of_employees=276000,
+ number_of_employees=1,
last_activity_at=datetime.datetime.fromisoformat(
"2022-02-10 00:00:00+00:00",
),
@@ -535,10 +699,36 @@ async def create(
_response = await self._client_wrapper.httpx_client.request(
"POST",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/crm/v1/accounts"),
- params=remove_none_from_dict({"is_debug_mode": is_debug_mode, "run_async": run_async}),
- json=jsonable_encoder({"model": model}),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "is_debug_mode": is_debug_mode,
+ "run_async": run_async,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ json=jsonable_encoder({"model": model})
+ if request_options is None or request_options.get("additional_body_parameters") is None
+ else {
+ **jsonable_encoder({"model": model}),
+ **(jsonable_encoder(remove_none_from_dict(request_options.get("additional_body_parameters", {})))),
+ },
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(CrmAccountResponse, _response.json()) # type: ignore
@@ -552,9 +742,10 @@ async def retrieve(
self,
id: str,
*,
- expand: typing.Optional[typing_extensions.Literal["owner"]] = None,
+ expand: typing.Optional[typing.Literal["owner"]] = None,
include_remote_data: typing.Optional[bool] = None,
include_remote_fields: typing.Optional[bool] = None,
+ request_options: typing.Optional[RequestOptions] = None,
) -> Account:
"""
Returns an `Account` object with the given `id`.
@@ -562,11 +753,13 @@ async def retrieve(
Parameters:
- id: str.
- - expand: typing.Optional[typing_extensions.Literal["owner"]]. Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces.
+ - expand: typing.Optional[typing.Literal["owner"]]. Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces.
- include_remote_data: typing.Optional[bool]. Whether to include the original data Merge fetched from the third-party to produce these models.
- include_remote_fields: typing.Optional[bool]. Whether to include all remote fields, including fields that Merge did not map to common models, in a normalized format.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import AsyncMerge
@@ -575,22 +768,38 @@ async def retrieve(
api_key="YOUR_API_KEY",
)
await client.crm.accounts.retrieve(
- id="id",
+ id="string",
expand="owner",
)
"""
_response = await self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", f"api/crm/v1/accounts/{id}"),
- params=remove_none_from_dict(
- {
- "expand": expand,
- "include_remote_data": include_remote_data,
- "include_remote_fields": include_remote_fields,
- }
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "expand": expand,
+ "include_remote_data": include_remote_data,
+ "include_remote_fields": include_remote_fields,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(Account, _response.json()) # type: ignore
@@ -607,6 +816,7 @@ async def partial_update(
is_debug_mode: typing.Optional[bool] = None,
run_async: typing.Optional[bool] = None,
model: PatchedAccountRequest,
+ request_options: typing.Optional[RequestOptions] = None,
) -> CrmAccountResponse:
"""
Updates an `Account` object with the given `id`.
@@ -619,6 +829,8 @@ async def partial_update(
- run_async: typing.Optional[bool]. Whether or not third-party updates should be run asynchronously.
- model: PatchedAccountRequest.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
import datetime
@@ -630,14 +842,14 @@ async def partial_update(
api_key="YOUR_API_KEY",
)
await client.crm.accounts.partial_update(
- id="id",
+ id="string",
model=PatchedAccountRequest(
owner="0258cbc6-6020-430a-848e-aafacbadf4ae",
name="Merge API",
description="One API for all integrations",
industry="API's",
website="https://merge.dev/",
- number_of_employees=276000,
+ number_of_employees=1,
last_activity_at=datetime.datetime.fromisoformat(
"2022-02-10 00:00:00+00:00",
),
@@ -647,10 +859,36 @@ async def partial_update(
_response = await self._client_wrapper.httpx_client.request(
"PATCH",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", f"api/crm/v1/accounts/{id}"),
- params=remove_none_from_dict({"is_debug_mode": is_debug_mode, "run_async": run_async}),
- json=jsonable_encoder({"model": model}),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "is_debug_mode": is_debug_mode,
+ "run_async": run_async,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ json=jsonable_encoder({"model": model})
+ if request_options is None or request_options.get("additional_body_parameters") is None
+ else {
+ **jsonable_encoder({"model": model}),
+ **(jsonable_encoder(remove_none_from_dict(request_options.get("additional_body_parameters", {})))),
+ },
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(CrmAccountResponse, _response.json()) # type: ignore
@@ -660,12 +898,16 @@ async def partial_update(
raise ApiError(status_code=_response.status_code, body=_response.text)
raise ApiError(status_code=_response.status_code, body=_response_json)
- async def meta_patch_retrieve(self, id: str) -> MetaResponse:
+ async def meta_patch_retrieve(
+ self, id: str, *, request_options: typing.Optional[RequestOptions] = None
+ ) -> MetaResponse:
"""
Returns metadata for `CRMAccount` PATCHs.
Parameters:
- id: str.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import AsyncMerge
@@ -674,14 +916,26 @@ async def meta_patch_retrieve(self, id: str) -> MetaResponse:
api_key="YOUR_API_KEY",
)
await client.crm.accounts.meta_patch_retrieve(
- id="id",
+ id="string",
)
"""
_response = await self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", f"api/crm/v1/accounts/meta/patch/{id}"),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ request_options.get("additional_query_parameters") if request_options is not None else None
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(MetaResponse, _response.json()) # type: ignore
@@ -691,10 +945,12 @@ async def meta_patch_retrieve(self, id: str) -> MetaResponse:
raise ApiError(status_code=_response.status_code, body=_response.text)
raise ApiError(status_code=_response.status_code, body=_response_json)
- async def meta_post_retrieve(self) -> MetaResponse:
+ async def meta_post_retrieve(self, *, request_options: typing.Optional[RequestOptions] = None) -> MetaResponse:
"""
Returns metadata for `CRMAccount` POSTs.
+ Parameters:
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import AsyncMerge
@@ -707,8 +963,20 @@ async def meta_post_retrieve(self) -> MetaResponse:
_response = await self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/crm/v1/accounts/meta/post"),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ request_options.get("additional_query_parameters") if request_options is not None else None
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(MetaResponse, _response.json()) # type: ignore
@@ -726,6 +994,7 @@ async def remote_field_classes_list(
include_remote_data: typing.Optional[bool] = None,
include_remote_fields: typing.Optional[bool] = None,
page_size: typing.Optional[int] = None,
+ request_options: typing.Optional[RequestOptions] = None,
) -> PaginatedRemoteFieldClassList:
"""
Returns a list of `RemoteFieldClass` objects.
@@ -740,6 +1009,8 @@ async def remote_field_classes_list(
- include_remote_fields: typing.Optional[bool]. Whether to include all remote fields, including fields that Merge did not map to common models, in a normalized format.
- page_size: typing.Optional[int]. Number of results to return per page.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import AsyncMerge
@@ -752,17 +1023,33 @@ async def remote_field_classes_list(
_response = await self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/crm/v1/accounts/remote-field-classes"),
- params=remove_none_from_dict(
- {
- "cursor": cursor,
- "include_deleted_data": include_deleted_data,
- "include_remote_data": include_remote_data,
- "include_remote_fields": include_remote_fields,
- "page_size": page_size,
- }
- ),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "cursor": cursor,
+ "include_deleted_data": include_deleted_data,
+ "include_remote_data": include_remote_data,
+ "include_remote_fields": include_remote_fields,
+ "page_size": page_size,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(PaginatedRemoteFieldClassList, _response.json()) # type: ignore
diff --git a/src/merge/resources/crm/resources/association_types/client.py b/src/merge/resources/crm/resources/association_types/client.py
index 17a51b3b..d2532431 100644
--- a/src/merge/resources/crm/resources/association_types/client.py
+++ b/src/merge/resources/crm/resources/association_types/client.py
@@ -5,13 +5,12 @@
import urllib.parse
from json.decoder import JSONDecodeError
-import typing_extensions
-
from .....core.api_error import ApiError
from .....core.client_wrapper import AsyncClientWrapper, SyncClientWrapper
from .....core.datetime_utils import serialize_datetime
from .....core.jsonable_encoder import jsonable_encoder
from .....core.remove_none_from_dict import remove_none_from_dict
+from .....core.request_options import RequestOptions
from ...types.association_type import AssociationType
from ...types.association_type_request_request import AssociationTypeRequestRequest
from ...types.crm_association_type_response import CrmAssociationTypeResponse
@@ -38,13 +37,14 @@ def custom_object_classes_association_types_list(
created_after: typing.Optional[dt.datetime] = None,
created_before: typing.Optional[dt.datetime] = None,
cursor: typing.Optional[str] = None,
- expand: typing.Optional[typing_extensions.Literal["target_object_classes"]] = None,
+ expand: typing.Optional[typing.Literal["target_object_classes"]] = None,
include_deleted_data: typing.Optional[bool] = None,
include_remote_data: typing.Optional[bool] = None,
modified_after: typing.Optional[dt.datetime] = None,
modified_before: typing.Optional[dt.datetime] = None,
page_size: typing.Optional[int] = None,
remote_id: typing.Optional[str] = None,
+ request_options: typing.Optional[RequestOptions] = None,
) -> PaginatedAssociationTypeList:
"""
Returns a list of `AssociationType` objects.
@@ -58,7 +58,7 @@ def custom_object_classes_association_types_list(
- cursor: typing.Optional[str]. The pagination cursor value.
- - expand: typing.Optional[typing_extensions.Literal["target_object_classes"]]. Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces.
+ - expand: typing.Optional[typing.Literal["target_object_classes"]]. Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces.
- include_deleted_data: typing.Optional[bool]. Whether to include data that was marked as deleted by third party webhooks.
@@ -71,6 +71,8 @@ def custom_object_classes_association_types_list(
- page_size: typing.Optional[int]. Number of results to return per page.
- remote_id: typing.Optional[str]. The API provider's ID for the given object.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import Merge
@@ -79,7 +81,7 @@ def custom_object_classes_association_types_list(
api_key="YOUR_API_KEY",
)
client.crm.association_types.custom_object_classes_association_types_list(
- custom_object_class_id="custom-object-class-id",
+ custom_object_class_id="string",
expand="target_object_classes",
)
"""
@@ -89,22 +91,38 @@ def custom_object_classes_association_types_list(
f"{self._client_wrapper.get_base_url()}/",
f"api/crm/v1/custom-object-classes/{custom_object_class_id}/association-types",
),
- params=remove_none_from_dict(
- {
- "created_after": serialize_datetime(created_after) if created_after is not None else None,
- "created_before": serialize_datetime(created_before) if created_before is not None else None,
- "cursor": cursor,
- "expand": expand,
- "include_deleted_data": include_deleted_data,
- "include_remote_data": include_remote_data,
- "modified_after": serialize_datetime(modified_after) if modified_after is not None else None,
- "modified_before": serialize_datetime(modified_before) if modified_before is not None else None,
- "page_size": page_size,
- "remote_id": remote_id,
- }
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "created_after": serialize_datetime(created_after) if created_after is not None else None,
+ "created_before": serialize_datetime(created_before) if created_before is not None else None,
+ "cursor": cursor,
+ "expand": expand,
+ "include_deleted_data": include_deleted_data,
+ "include_remote_data": include_remote_data,
+ "modified_after": serialize_datetime(modified_after) if modified_after is not None else None,
+ "modified_before": serialize_datetime(modified_before) if modified_before is not None else None,
+ "page_size": page_size,
+ "remote_id": remote_id,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(PaginatedAssociationTypeList, _response.json()) # type: ignore
@@ -121,6 +139,7 @@ def custom_object_classes_association_types_create(
is_debug_mode: typing.Optional[bool] = None,
run_async: typing.Optional[bool] = None,
model: AssociationTypeRequestRequest,
+ request_options: typing.Optional[RequestOptions] = None,
) -> CrmAssociationTypeResponse:
"""
Creates an `AssociationType` object with the given values.
@@ -133,6 +152,33 @@ def custom_object_classes_association_types_create(
- run_async: typing.Optional[bool]. Whether or not third-party updates should be run asynchronously.
- model: AssociationTypeRequestRequest.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
+ ---
+ from merge.client import Merge
+ from merge.resources.crm import (
+ AssociationTypeRequestRequest,
+ CardinalityEnum,
+ ObjectClassDescriptionRequest,
+ OriginTypeEnum,
+ )
+
+ client = Merge(
+ account_token="YOUR_ACCOUNT_TOKEN",
+ api_key="YOUR_API_KEY",
+ )
+ client.crm.association_types.custom_object_classes_association_types_create(
+ custom_object_class_id="string",
+ model=AssociationTypeRequestRequest(
+ source_object_class=ObjectClassDescriptionRequest(
+ id="string",
+ origin_type=OriginTypeEnum.CUSTOM_OBJECT,
+ ),
+ target_object_classes=[],
+ remote_key_name="string",
+ cardinality=CardinalityEnum.ONE_TO_ONE,
+ ),
+ )
"""
_response = self._client_wrapper.httpx_client.request(
"POST",
@@ -140,10 +186,36 @@ def custom_object_classes_association_types_create(
f"{self._client_wrapper.get_base_url()}/",
f"api/crm/v1/custom-object-classes/{custom_object_class_id}/association-types",
),
- params=remove_none_from_dict({"is_debug_mode": is_debug_mode, "run_async": run_async}),
- json=jsonable_encoder({"model": model}),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "is_debug_mode": is_debug_mode,
+ "run_async": run_async,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ json=jsonable_encoder({"model": model})
+ if request_options is None or request_options.get("additional_body_parameters") is None
+ else {
+ **jsonable_encoder({"model": model}),
+ **(jsonable_encoder(remove_none_from_dict(request_options.get("additional_body_parameters", {})))),
+ },
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(CrmAssociationTypeResponse, _response.json()) # type: ignore
@@ -158,8 +230,9 @@ def custom_object_classes_association_types_retrieve(
custom_object_class_id: str,
id: str,
*,
- expand: typing.Optional[typing_extensions.Literal["target_object_classes"]] = None,
+ expand: typing.Optional[typing.Literal["target_object_classes"]] = None,
include_remote_data: typing.Optional[bool] = None,
+ request_options: typing.Optional[RequestOptions] = None,
) -> AssociationType:
"""
Returns an `AssociationType` object with the given `id`.
@@ -169,9 +242,11 @@ def custom_object_classes_association_types_retrieve(
- id: str.
- - expand: typing.Optional[typing_extensions.Literal["target_object_classes"]]. Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces.
+ - expand: typing.Optional[typing.Literal["target_object_classes"]]. Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces.
- include_remote_data: typing.Optional[bool]. Whether to include the original data Merge fetched from the third-party to produce these models.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import Merge
@@ -180,8 +255,8 @@ def custom_object_classes_association_types_retrieve(
api_key="YOUR_API_KEY",
)
client.crm.association_types.custom_object_classes_association_types_retrieve(
- custom_object_class_id="custom-object-class-id",
- id="id",
+ custom_object_class_id="string",
+ id="string",
expand="target_object_classes",
)
"""
@@ -191,9 +266,30 @@ def custom_object_classes_association_types_retrieve(
f"{self._client_wrapper.get_base_url()}/",
f"api/crm/v1/custom-object-classes/{custom_object_class_id}/association-types/{id}",
),
- params=remove_none_from_dict({"expand": expand, "include_remote_data": include_remote_data}),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "expand": expand,
+ "include_remote_data": include_remote_data,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(AssociationType, _response.json()) # type: ignore
@@ -203,12 +299,16 @@ def custom_object_classes_association_types_retrieve(
raise ApiError(status_code=_response.status_code, body=_response.text)
raise ApiError(status_code=_response.status_code, body=_response_json)
- def custom_object_classes_association_types_meta_post_retrieve(self, custom_object_class_id: str) -> MetaResponse:
+ def custom_object_classes_association_types_meta_post_retrieve(
+ self, custom_object_class_id: str, *, request_options: typing.Optional[RequestOptions] = None
+ ) -> MetaResponse:
"""
Returns metadata for `CRMAssociationType` POSTs.
Parameters:
- custom_object_class_id: str.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import Merge
@@ -217,7 +317,7 @@ def custom_object_classes_association_types_meta_post_retrieve(self, custom_obje
api_key="YOUR_API_KEY",
)
client.crm.association_types.custom_object_classes_association_types_meta_post_retrieve(
- custom_object_class_id="custom-object-class-id",
+ custom_object_class_id="string",
)
"""
_response = self._client_wrapper.httpx_client.request(
@@ -226,8 +326,20 @@ def custom_object_classes_association_types_meta_post_retrieve(self, custom_obje
f"{self._client_wrapper.get_base_url()}/",
f"api/crm/v1/custom-object-classes/{custom_object_class_id}/association-types/meta/post",
),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ request_options.get("additional_query_parameters") if request_options is not None else None
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(MetaResponse, _response.json()) # type: ignore
@@ -249,13 +361,14 @@ async def custom_object_classes_association_types_list(
created_after: typing.Optional[dt.datetime] = None,
created_before: typing.Optional[dt.datetime] = None,
cursor: typing.Optional[str] = None,
- expand: typing.Optional[typing_extensions.Literal["target_object_classes"]] = None,
+ expand: typing.Optional[typing.Literal["target_object_classes"]] = None,
include_deleted_data: typing.Optional[bool] = None,
include_remote_data: typing.Optional[bool] = None,
modified_after: typing.Optional[dt.datetime] = None,
modified_before: typing.Optional[dt.datetime] = None,
page_size: typing.Optional[int] = None,
remote_id: typing.Optional[str] = None,
+ request_options: typing.Optional[RequestOptions] = None,
) -> PaginatedAssociationTypeList:
"""
Returns a list of `AssociationType` objects.
@@ -269,7 +382,7 @@ async def custom_object_classes_association_types_list(
- cursor: typing.Optional[str]. The pagination cursor value.
- - expand: typing.Optional[typing_extensions.Literal["target_object_classes"]]. Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces.
+ - expand: typing.Optional[typing.Literal["target_object_classes"]]. Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces.
- include_deleted_data: typing.Optional[bool]. Whether to include data that was marked as deleted by third party webhooks.
@@ -282,6 +395,8 @@ async def custom_object_classes_association_types_list(
- page_size: typing.Optional[int]. Number of results to return per page.
- remote_id: typing.Optional[str]. The API provider's ID for the given object.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import AsyncMerge
@@ -290,7 +405,7 @@ async def custom_object_classes_association_types_list(
api_key="YOUR_API_KEY",
)
await client.crm.association_types.custom_object_classes_association_types_list(
- custom_object_class_id="custom-object-class-id",
+ custom_object_class_id="string",
expand="target_object_classes",
)
"""
@@ -300,22 +415,38 @@ async def custom_object_classes_association_types_list(
f"{self._client_wrapper.get_base_url()}/",
f"api/crm/v1/custom-object-classes/{custom_object_class_id}/association-types",
),
- params=remove_none_from_dict(
- {
- "created_after": serialize_datetime(created_after) if created_after is not None else None,
- "created_before": serialize_datetime(created_before) if created_before is not None else None,
- "cursor": cursor,
- "expand": expand,
- "include_deleted_data": include_deleted_data,
- "include_remote_data": include_remote_data,
- "modified_after": serialize_datetime(modified_after) if modified_after is not None else None,
- "modified_before": serialize_datetime(modified_before) if modified_before is not None else None,
- "page_size": page_size,
- "remote_id": remote_id,
- }
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "created_after": serialize_datetime(created_after) if created_after is not None else None,
+ "created_before": serialize_datetime(created_before) if created_before is not None else None,
+ "cursor": cursor,
+ "expand": expand,
+ "include_deleted_data": include_deleted_data,
+ "include_remote_data": include_remote_data,
+ "modified_after": serialize_datetime(modified_after) if modified_after is not None else None,
+ "modified_before": serialize_datetime(modified_before) if modified_before is not None else None,
+ "page_size": page_size,
+ "remote_id": remote_id,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(PaginatedAssociationTypeList, _response.json()) # type: ignore
@@ -332,6 +463,7 @@ async def custom_object_classes_association_types_create(
is_debug_mode: typing.Optional[bool] = None,
run_async: typing.Optional[bool] = None,
model: AssociationTypeRequestRequest,
+ request_options: typing.Optional[RequestOptions] = None,
) -> CrmAssociationTypeResponse:
"""
Creates an `AssociationType` object with the given values.
@@ -344,6 +476,33 @@ async def custom_object_classes_association_types_create(
- run_async: typing.Optional[bool]. Whether or not third-party updates should be run asynchronously.
- model: AssociationTypeRequestRequest.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
+ ---
+ from merge.client import AsyncMerge
+ from merge.resources.crm import (
+ AssociationTypeRequestRequest,
+ CardinalityEnum,
+ ObjectClassDescriptionRequest,
+ OriginTypeEnum,
+ )
+
+ client = AsyncMerge(
+ account_token="YOUR_ACCOUNT_TOKEN",
+ api_key="YOUR_API_KEY",
+ )
+ await client.crm.association_types.custom_object_classes_association_types_create(
+ custom_object_class_id="string",
+ model=AssociationTypeRequestRequest(
+ source_object_class=ObjectClassDescriptionRequest(
+ id="string",
+ origin_type=OriginTypeEnum.CUSTOM_OBJECT,
+ ),
+ target_object_classes=[],
+ remote_key_name="string",
+ cardinality=CardinalityEnum.ONE_TO_ONE,
+ ),
+ )
"""
_response = await self._client_wrapper.httpx_client.request(
"POST",
@@ -351,10 +510,36 @@ async def custom_object_classes_association_types_create(
f"{self._client_wrapper.get_base_url()}/",
f"api/crm/v1/custom-object-classes/{custom_object_class_id}/association-types",
),
- params=remove_none_from_dict({"is_debug_mode": is_debug_mode, "run_async": run_async}),
- json=jsonable_encoder({"model": model}),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "is_debug_mode": is_debug_mode,
+ "run_async": run_async,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ json=jsonable_encoder({"model": model})
+ if request_options is None or request_options.get("additional_body_parameters") is None
+ else {
+ **jsonable_encoder({"model": model}),
+ **(jsonable_encoder(remove_none_from_dict(request_options.get("additional_body_parameters", {})))),
+ },
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(CrmAssociationTypeResponse, _response.json()) # type: ignore
@@ -369,8 +554,9 @@ async def custom_object_classes_association_types_retrieve(
custom_object_class_id: str,
id: str,
*,
- expand: typing.Optional[typing_extensions.Literal["target_object_classes"]] = None,
+ expand: typing.Optional[typing.Literal["target_object_classes"]] = None,
include_remote_data: typing.Optional[bool] = None,
+ request_options: typing.Optional[RequestOptions] = None,
) -> AssociationType:
"""
Returns an `AssociationType` object with the given `id`.
@@ -380,9 +566,11 @@ async def custom_object_classes_association_types_retrieve(
- id: str.
- - expand: typing.Optional[typing_extensions.Literal["target_object_classes"]]. Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces.
+ - expand: typing.Optional[typing.Literal["target_object_classes"]]. Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces.
- include_remote_data: typing.Optional[bool]. Whether to include the original data Merge fetched from the third-party to produce these models.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import AsyncMerge
@@ -391,8 +579,8 @@ async def custom_object_classes_association_types_retrieve(
api_key="YOUR_API_KEY",
)
await client.crm.association_types.custom_object_classes_association_types_retrieve(
- custom_object_class_id="custom-object-class-id",
- id="id",
+ custom_object_class_id="string",
+ id="string",
expand="target_object_classes",
)
"""
@@ -402,9 +590,30 @@ async def custom_object_classes_association_types_retrieve(
f"{self._client_wrapper.get_base_url()}/",
f"api/crm/v1/custom-object-classes/{custom_object_class_id}/association-types/{id}",
),
- params=remove_none_from_dict({"expand": expand, "include_remote_data": include_remote_data}),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "expand": expand,
+ "include_remote_data": include_remote_data,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(AssociationType, _response.json()) # type: ignore
@@ -415,13 +624,15 @@ async def custom_object_classes_association_types_retrieve(
raise ApiError(status_code=_response.status_code, body=_response_json)
async def custom_object_classes_association_types_meta_post_retrieve(
- self, custom_object_class_id: str
+ self, custom_object_class_id: str, *, request_options: typing.Optional[RequestOptions] = None
) -> MetaResponse:
"""
Returns metadata for `CRMAssociationType` POSTs.
Parameters:
- custom_object_class_id: str.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import AsyncMerge
@@ -430,7 +641,7 @@ async def custom_object_classes_association_types_meta_post_retrieve(
api_key="YOUR_API_KEY",
)
await client.crm.association_types.custom_object_classes_association_types_meta_post_retrieve(
- custom_object_class_id="custom-object-class-id",
+ custom_object_class_id="string",
)
"""
_response = await self._client_wrapper.httpx_client.request(
@@ -439,8 +650,20 @@ async def custom_object_classes_association_types_meta_post_retrieve(
f"{self._client_wrapper.get_base_url()}/",
f"api/crm/v1/custom-object-classes/{custom_object_class_id}/association-types/meta/post",
),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ request_options.get("additional_query_parameters") if request_options is not None else None
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(MetaResponse, _response.json()) # type: ignore
diff --git a/src/merge/resources/crm/resources/associations/client.py b/src/merge/resources/crm/resources/associations/client.py
index 3ccee9f0..d02b41e8 100644
--- a/src/merge/resources/crm/resources/associations/client.py
+++ b/src/merge/resources/crm/resources/associations/client.py
@@ -5,12 +5,12 @@
import urllib.parse
from json.decoder import JSONDecodeError
-import typing_extensions
-
from .....core.api_error import ApiError
from .....core.client_wrapper import AsyncClientWrapper, SyncClientWrapper
from .....core.datetime_utils import serialize_datetime
+from .....core.jsonable_encoder import jsonable_encoder
from .....core.remove_none_from_dict import remove_none_from_dict
+from .....core.request_options import RequestOptions
from ...types.association import Association
from ...types.paginated_association_list import PaginatedAssociationList
@@ -33,13 +33,14 @@ def custom_object_classes_custom_objects_associations_list(
created_after: typing.Optional[dt.datetime] = None,
created_before: typing.Optional[dt.datetime] = None,
cursor: typing.Optional[str] = None,
- expand: typing.Optional[typing_extensions.Literal["association_type"]] = None,
+ expand: typing.Optional[typing.Literal["association_type"]] = None,
include_deleted_data: typing.Optional[bool] = None,
include_remote_data: typing.Optional[bool] = None,
modified_after: typing.Optional[dt.datetime] = None,
modified_before: typing.Optional[dt.datetime] = None,
page_size: typing.Optional[int] = None,
remote_id: typing.Optional[str] = None,
+ request_options: typing.Optional[RequestOptions] = None,
) -> PaginatedAssociationList:
"""
Returns a list of `Association` objects.
@@ -57,7 +58,7 @@ def custom_object_classes_custom_objects_associations_list(
- cursor: typing.Optional[str]. The pagination cursor value.
- - expand: typing.Optional[typing_extensions.Literal["association_type"]]. Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces.
+ - expand: typing.Optional[typing.Literal["association_type"]]. Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces.
- include_deleted_data: typing.Optional[bool]. Whether to include data that was marked as deleted by third party webhooks.
@@ -70,6 +71,8 @@ def custom_object_classes_custom_objects_associations_list(
- page_size: typing.Optional[int]. Number of results to return per page.
- remote_id: typing.Optional[str]. The API provider's ID for the given object.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import Merge
@@ -78,8 +81,8 @@ def custom_object_classes_custom_objects_associations_list(
api_key="YOUR_API_KEY",
)
client.crm.associations.custom_object_classes_custom_objects_associations_list(
- custom_object_class_id="custom-object-class-id",
- object_id="object-id",
+ custom_object_class_id="string",
+ object_id="string",
expand="association_type",
)
"""
@@ -89,23 +92,39 @@ def custom_object_classes_custom_objects_associations_list(
f"{self._client_wrapper.get_base_url()}/",
f"api/crm/v1/custom-object-classes/{custom_object_class_id}/custom-objects/{object_id}/associations",
),
- params=remove_none_from_dict(
- {
- "association_type_id": association_type_id,
- "created_after": serialize_datetime(created_after) if created_after is not None else None,
- "created_before": serialize_datetime(created_before) if created_before is not None else None,
- "cursor": cursor,
- "expand": expand,
- "include_deleted_data": include_deleted_data,
- "include_remote_data": include_remote_data,
- "modified_after": serialize_datetime(modified_after) if modified_after is not None else None,
- "modified_before": serialize_datetime(modified_before) if modified_before is not None else None,
- "page_size": page_size,
- "remote_id": remote_id,
- }
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "association_type_id": association_type_id,
+ "created_after": serialize_datetime(created_after) if created_after is not None else None,
+ "created_before": serialize_datetime(created_before) if created_before is not None else None,
+ "cursor": cursor,
+ "expand": expand,
+ "include_deleted_data": include_deleted_data,
+ "include_remote_data": include_remote_data,
+ "modified_after": serialize_datetime(modified_after) if modified_after is not None else None,
+ "modified_before": serialize_datetime(modified_before) if modified_before is not None else None,
+ "page_size": page_size,
+ "remote_id": remote_id,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(PaginatedAssociationList, _response.json()) # type: ignore
@@ -125,6 +144,7 @@ def custom_object_classes_custom_objects_associations_update(
*,
is_debug_mode: typing.Optional[bool] = None,
run_async: typing.Optional[bool] = None,
+ request_options: typing.Optional[RequestOptions] = None,
) -> Association:
"""
Creates an Association between `source_object_id` and `target_object_id` of type `association_type_id`.
@@ -143,6 +163,8 @@ def custom_object_classes_custom_objects_associations_update(
- is_debug_mode: typing.Optional[bool]. Whether to include debug fields (such as log file links) in the response.
- run_async: typing.Optional[bool]. Whether or not third-party updates should be run asynchronously.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import Merge
@@ -151,11 +173,11 @@ def custom_object_classes_custom_objects_associations_update(
api_key="YOUR_API_KEY",
)
client.crm.associations.custom_object_classes_custom_objects_associations_update(
- association_type_id="association-type-id",
- source_class_id="source-class-id",
- source_object_id="source-object-id",
- target_class_id="target-class-id",
- target_object_id="target-object-id",
+ association_type_id="string",
+ source_class_id="string",
+ source_object_id="string",
+ target_class_id="string",
+ target_object_id="string",
)
"""
_response = self._client_wrapper.httpx_client.request(
@@ -164,9 +186,33 @@ def custom_object_classes_custom_objects_associations_update(
f"{self._client_wrapper.get_base_url()}/",
f"api/crm/v1/custom-object-classes/{source_class_id}/custom-objects/{source_object_id}/associations/{target_class_id}/{target_object_id}/{association_type_id}",
),
- params=remove_none_from_dict({"is_debug_mode": is_debug_mode, "run_async": run_async}),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "is_debug_mode": is_debug_mode,
+ "run_async": run_async,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ json=jsonable_encoder(remove_none_from_dict(request_options.get("additional_body_parameters", {})))
+ if request_options is not None
+ else None,
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(Association, _response.json()) # type: ignore
@@ -190,13 +236,14 @@ async def custom_object_classes_custom_objects_associations_list(
created_after: typing.Optional[dt.datetime] = None,
created_before: typing.Optional[dt.datetime] = None,
cursor: typing.Optional[str] = None,
- expand: typing.Optional[typing_extensions.Literal["association_type"]] = None,
+ expand: typing.Optional[typing.Literal["association_type"]] = None,
include_deleted_data: typing.Optional[bool] = None,
include_remote_data: typing.Optional[bool] = None,
modified_after: typing.Optional[dt.datetime] = None,
modified_before: typing.Optional[dt.datetime] = None,
page_size: typing.Optional[int] = None,
remote_id: typing.Optional[str] = None,
+ request_options: typing.Optional[RequestOptions] = None,
) -> PaginatedAssociationList:
"""
Returns a list of `Association` objects.
@@ -214,7 +261,7 @@ async def custom_object_classes_custom_objects_associations_list(
- cursor: typing.Optional[str]. The pagination cursor value.
- - expand: typing.Optional[typing_extensions.Literal["association_type"]]. Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces.
+ - expand: typing.Optional[typing.Literal["association_type"]]. Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces.
- include_deleted_data: typing.Optional[bool]. Whether to include data that was marked as deleted by third party webhooks.
@@ -227,6 +274,8 @@ async def custom_object_classes_custom_objects_associations_list(
- page_size: typing.Optional[int]. Number of results to return per page.
- remote_id: typing.Optional[str]. The API provider's ID for the given object.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import AsyncMerge
@@ -235,8 +284,8 @@ async def custom_object_classes_custom_objects_associations_list(
api_key="YOUR_API_KEY",
)
await client.crm.associations.custom_object_classes_custom_objects_associations_list(
- custom_object_class_id="custom-object-class-id",
- object_id="object-id",
+ custom_object_class_id="string",
+ object_id="string",
expand="association_type",
)
"""
@@ -246,23 +295,39 @@ async def custom_object_classes_custom_objects_associations_list(
f"{self._client_wrapper.get_base_url()}/",
f"api/crm/v1/custom-object-classes/{custom_object_class_id}/custom-objects/{object_id}/associations",
),
- params=remove_none_from_dict(
- {
- "association_type_id": association_type_id,
- "created_after": serialize_datetime(created_after) if created_after is not None else None,
- "created_before": serialize_datetime(created_before) if created_before is not None else None,
- "cursor": cursor,
- "expand": expand,
- "include_deleted_data": include_deleted_data,
- "include_remote_data": include_remote_data,
- "modified_after": serialize_datetime(modified_after) if modified_after is not None else None,
- "modified_before": serialize_datetime(modified_before) if modified_before is not None else None,
- "page_size": page_size,
- "remote_id": remote_id,
- }
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "association_type_id": association_type_id,
+ "created_after": serialize_datetime(created_after) if created_after is not None else None,
+ "created_before": serialize_datetime(created_before) if created_before is not None else None,
+ "cursor": cursor,
+ "expand": expand,
+ "include_deleted_data": include_deleted_data,
+ "include_remote_data": include_remote_data,
+ "modified_after": serialize_datetime(modified_after) if modified_after is not None else None,
+ "modified_before": serialize_datetime(modified_before) if modified_before is not None else None,
+ "page_size": page_size,
+ "remote_id": remote_id,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(PaginatedAssociationList, _response.json()) # type: ignore
@@ -282,6 +347,7 @@ async def custom_object_classes_custom_objects_associations_update(
*,
is_debug_mode: typing.Optional[bool] = None,
run_async: typing.Optional[bool] = None,
+ request_options: typing.Optional[RequestOptions] = None,
) -> Association:
"""
Creates an Association between `source_object_id` and `target_object_id` of type `association_type_id`.
@@ -300,6 +366,8 @@ async def custom_object_classes_custom_objects_associations_update(
- is_debug_mode: typing.Optional[bool]. Whether to include debug fields (such as log file links) in the response.
- run_async: typing.Optional[bool]. Whether or not third-party updates should be run asynchronously.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import AsyncMerge
@@ -308,11 +376,11 @@ async def custom_object_classes_custom_objects_associations_update(
api_key="YOUR_API_KEY",
)
await client.crm.associations.custom_object_classes_custom_objects_associations_update(
- association_type_id="association-type-id",
- source_class_id="source-class-id",
- source_object_id="source-object-id",
- target_class_id="target-class-id",
- target_object_id="target-object-id",
+ association_type_id="string",
+ source_class_id="string",
+ source_object_id="string",
+ target_class_id="string",
+ target_object_id="string",
)
"""
_response = await self._client_wrapper.httpx_client.request(
@@ -321,9 +389,33 @@ async def custom_object_classes_custom_objects_associations_update(
f"{self._client_wrapper.get_base_url()}/",
f"api/crm/v1/custom-object-classes/{source_class_id}/custom-objects/{source_object_id}/associations/{target_class_id}/{target_object_id}/{association_type_id}",
),
- params=remove_none_from_dict({"is_debug_mode": is_debug_mode, "run_async": run_async}),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "is_debug_mode": is_debug_mode,
+ "run_async": run_async,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ json=jsonable_encoder(remove_none_from_dict(request_options.get("additional_body_parameters", {})))
+ if request_options is not None
+ else None,
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(Association, _response.json()) # type: ignore
diff --git a/src/merge/resources/crm/resources/async_passthrough/client.py b/src/merge/resources/crm/resources/async_passthrough/client.py
index 94a4c4f2..0d3abcef 100644
--- a/src/merge/resources/crm/resources/async_passthrough/client.py
+++ b/src/merge/resources/crm/resources/async_passthrough/client.py
@@ -7,6 +7,8 @@
from .....core.api_error import ApiError
from .....core.client_wrapper import AsyncClientWrapper, SyncClientWrapper
from .....core.jsonable_encoder import jsonable_encoder
+from .....core.remove_none_from_dict import remove_none_from_dict
+from .....core.request_options import RequestOptions
from ...types.async_passthrough_reciept import AsyncPassthroughReciept
from ...types.data_passthrough_request import DataPassthroughRequest
from ...types.remote_response import RemoteResponse
@@ -24,18 +26,21 @@ class AsyncPassthroughClient:
def __init__(self, *, client_wrapper: SyncClientWrapper):
self._client_wrapper = client_wrapper
- def create(self, *, request: DataPassthroughRequest) -> AsyncPassthroughReciept:
+ def create(
+ self, *, request: DataPassthroughRequest, request_options: typing.Optional[RequestOptions] = None
+ ) -> AsyncPassthroughReciept:
"""
Asynchronously pull data from an endpoint not currently supported by Merge.
Parameters:
- request: DataPassthroughRequest.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import Merge
from merge.resources.crm import (
DataPassthroughRequest,
MethodEnum,
- MultipartFormFieldRequest,
RequestFormatEnum,
)
@@ -48,14 +53,6 @@ def create(self, *, request: DataPassthroughRequest) -> AsyncPassthroughReciept:
method=MethodEnum.GET,
path="/scooters",
data='{"company": "Lime", "model": "Gen 2.5"}',
- multipart_form_data=[
- MultipartFormFieldRequest(
- name="resume",
- data="SW50ZWdyYXRlIGZhc3QKSW50ZWdyYXRlIG9uY2U=",
- file_name="resume.pdf",
- content_type="application/pdf",
- )
- ],
request_format=RequestFormatEnum.JSON,
),
)
@@ -63,9 +60,26 @@ def create(self, *, request: DataPassthroughRequest) -> AsyncPassthroughReciept:
_response = self._client_wrapper.httpx_client.request(
"POST",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/crm/v1/async-passthrough"),
- json=jsonable_encoder(request),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ request_options.get("additional_query_parameters") if request_options is not None else None
+ ),
+ json=jsonable_encoder(request)
+ if request_options is None or request_options.get("additional_body_parameters") is None
+ else {
+ **jsonable_encoder(request),
+ **(jsonable_encoder(remove_none_from_dict(request_options.get("additional_body_parameters", {})))),
+ },
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(AsyncPassthroughReciept, _response.json()) # type: ignore
@@ -75,12 +89,26 @@ def create(self, *, request: DataPassthroughRequest) -> AsyncPassthroughReciept:
raise ApiError(status_code=_response.status_code, body=_response.text)
raise ApiError(status_code=_response.status_code, body=_response_json)
- def retrieve(self, async_passthrough_receipt_id: str) -> RemoteResponse:
+ def retrieve(
+ self, async_passthrough_receipt_id: str, *, request_options: typing.Optional[RequestOptions] = None
+ ) -> RemoteResponse:
"""
Retrieves data from earlier async-passthrough POST request
Parameters:
- async_passthrough_receipt_id: str.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
+ ---
+ from merge.client import Merge
+
+ client = Merge(
+ account_token="YOUR_ACCOUNT_TOKEN",
+ api_key="YOUR_API_KEY",
+ )
+ client.crm.async_passthrough.retrieve(
+ async_passthrough_receipt_id="string",
+ )
"""
_response = self._client_wrapper.httpx_client.request(
"GET",
@@ -88,8 +116,20 @@ def retrieve(self, async_passthrough_receipt_id: str) -> RemoteResponse:
f"{self._client_wrapper.get_base_url()}/",
f"api/crm/v1/async-passthrough/{async_passthrough_receipt_id}",
),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ request_options.get("additional_query_parameters") if request_options is not None else None
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(RemoteResponse, _response.json()) # type: ignore
@@ -104,18 +144,21 @@ class AsyncAsyncPassthroughClient:
def __init__(self, *, client_wrapper: AsyncClientWrapper):
self._client_wrapper = client_wrapper
- async def create(self, *, request: DataPassthroughRequest) -> AsyncPassthroughReciept:
+ async def create(
+ self, *, request: DataPassthroughRequest, request_options: typing.Optional[RequestOptions] = None
+ ) -> AsyncPassthroughReciept:
"""
Asynchronously pull data from an endpoint not currently supported by Merge.
Parameters:
- request: DataPassthroughRequest.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import AsyncMerge
from merge.resources.crm import (
DataPassthroughRequest,
MethodEnum,
- MultipartFormFieldRequest,
RequestFormatEnum,
)
@@ -128,14 +171,6 @@ async def create(self, *, request: DataPassthroughRequest) -> AsyncPassthroughRe
method=MethodEnum.GET,
path="/scooters",
data='{"company": "Lime", "model": "Gen 2.5"}',
- multipart_form_data=[
- MultipartFormFieldRequest(
- name="resume",
- data="SW50ZWdyYXRlIGZhc3QKSW50ZWdyYXRlIG9uY2U=",
- file_name="resume.pdf",
- content_type="application/pdf",
- )
- ],
request_format=RequestFormatEnum.JSON,
),
)
@@ -143,9 +178,26 @@ async def create(self, *, request: DataPassthroughRequest) -> AsyncPassthroughRe
_response = await self._client_wrapper.httpx_client.request(
"POST",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/crm/v1/async-passthrough"),
- json=jsonable_encoder(request),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ request_options.get("additional_query_parameters") if request_options is not None else None
+ ),
+ json=jsonable_encoder(request)
+ if request_options is None or request_options.get("additional_body_parameters") is None
+ else {
+ **jsonable_encoder(request),
+ **(jsonable_encoder(remove_none_from_dict(request_options.get("additional_body_parameters", {})))),
+ },
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(AsyncPassthroughReciept, _response.json()) # type: ignore
@@ -155,12 +207,26 @@ async def create(self, *, request: DataPassthroughRequest) -> AsyncPassthroughRe
raise ApiError(status_code=_response.status_code, body=_response.text)
raise ApiError(status_code=_response.status_code, body=_response_json)
- async def retrieve(self, async_passthrough_receipt_id: str) -> RemoteResponse:
+ async def retrieve(
+ self, async_passthrough_receipt_id: str, *, request_options: typing.Optional[RequestOptions] = None
+ ) -> RemoteResponse:
"""
Retrieves data from earlier async-passthrough POST request
Parameters:
- async_passthrough_receipt_id: str.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
+ ---
+ from merge.client import AsyncMerge
+
+ client = AsyncMerge(
+ account_token="YOUR_ACCOUNT_TOKEN",
+ api_key="YOUR_API_KEY",
+ )
+ await client.crm.async_passthrough.retrieve(
+ async_passthrough_receipt_id="string",
+ )
"""
_response = await self._client_wrapper.httpx_client.request(
"GET",
@@ -168,8 +234,20 @@ async def retrieve(self, async_passthrough_receipt_id: str) -> RemoteResponse:
f"{self._client_wrapper.get_base_url()}/",
f"api/crm/v1/async-passthrough/{async_passthrough_receipt_id}",
),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ request_options.get("additional_query_parameters") if request_options is not None else None
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(RemoteResponse, _response.json()) # type: ignore
diff --git a/src/merge/resources/crm/resources/audit_trail/client.py b/src/merge/resources/crm/resources/audit_trail/client.py
index 81db93ed..0ff4826a 100644
--- a/src/merge/resources/crm/resources/audit_trail/client.py
+++ b/src/merge/resources/crm/resources/audit_trail/client.py
@@ -6,7 +6,9 @@
from .....core.api_error import ApiError
from .....core.client_wrapper import AsyncClientWrapper, SyncClientWrapper
+from .....core.jsonable_encoder import jsonable_encoder
from .....core.remove_none_from_dict import remove_none_from_dict
+from .....core.request_options import RequestOptions
from ...types.paginated_audit_log_event_list import PaginatedAuditLogEventList
try:
@@ -28,6 +30,7 @@ def list(
page_size: typing.Optional[int] = None,
start_date: typing.Optional[str] = None,
user_email: typing.Optional[str] = None,
+ request_options: typing.Optional[RequestOptions] = None,
) -> PaginatedAuditLogEventList:
"""
Gets a list of audit trail events.
@@ -44,6 +47,8 @@ def list(
- start_date: typing.Optional[str]. If included, will only include audit trail events that occurred after this time
- user_email: typing.Optional[str]. If provided, this will return events associated with the specified user email. Please note that the email address reflects the user's email at the time of the event, and may not be their current email.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import Merge
@@ -56,18 +61,34 @@ def list(
_response = self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/crm/v1/audit-trail"),
- params=remove_none_from_dict(
- {
- "cursor": cursor,
- "end_date": end_date,
- "event_type": event_type,
- "page_size": page_size,
- "start_date": start_date,
- "user_email": user_email,
- }
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "cursor": cursor,
+ "end_date": end_date,
+ "event_type": event_type,
+ "page_size": page_size,
+ "start_date": start_date,
+ "user_email": user_email,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(PaginatedAuditLogEventList, _response.json()) # type: ignore
@@ -91,6 +112,7 @@ async def list(
page_size: typing.Optional[int] = None,
start_date: typing.Optional[str] = None,
user_email: typing.Optional[str] = None,
+ request_options: typing.Optional[RequestOptions] = None,
) -> PaginatedAuditLogEventList:
"""
Gets a list of audit trail events.
@@ -107,6 +129,8 @@ async def list(
- start_date: typing.Optional[str]. If included, will only include audit trail events that occurred after this time
- user_email: typing.Optional[str]. If provided, this will return events associated with the specified user email. Please note that the email address reflects the user's email at the time of the event, and may not be their current email.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import AsyncMerge
@@ -119,18 +143,34 @@ async def list(
_response = await self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/crm/v1/audit-trail"),
- params=remove_none_from_dict(
- {
- "cursor": cursor,
- "end_date": end_date,
- "event_type": event_type,
- "page_size": page_size,
- "start_date": start_date,
- "user_email": user_email,
- }
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "cursor": cursor,
+ "end_date": end_date,
+ "event_type": event_type,
+ "page_size": page_size,
+ "start_date": start_date,
+ "user_email": user_email,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(PaginatedAuditLogEventList, _response.json()) # type: ignore
diff --git a/src/merge/resources/crm/resources/available_actions/client.py b/src/merge/resources/crm/resources/available_actions/client.py
index d2502fd8..1f19daff 100644
--- a/src/merge/resources/crm/resources/available_actions/client.py
+++ b/src/merge/resources/crm/resources/available_actions/client.py
@@ -1,10 +1,14 @@
# This file was auto-generated by Fern from our API Definition.
+import typing
import urllib.parse
from json.decoder import JSONDecodeError
from .....core.api_error import ApiError
from .....core.client_wrapper import AsyncClientWrapper, SyncClientWrapper
+from .....core.jsonable_encoder import jsonable_encoder
+from .....core.remove_none_from_dict import remove_none_from_dict
+from .....core.request_options import RequestOptions
from ...types.available_actions import AvailableActions
try:
@@ -17,15 +21,38 @@ class AvailableActionsClient:
def __init__(self, *, client_wrapper: SyncClientWrapper):
self._client_wrapper = client_wrapper
- def retrieve(self) -> AvailableActions:
+ def retrieve(self, *, request_options: typing.Optional[RequestOptions] = None) -> AvailableActions:
"""
Returns a list of models and actions available for an account.
+
+ Parameters:
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
+ ---
+ from merge.client import Merge
+
+ client = Merge(
+ account_token="YOUR_ACCOUNT_TOKEN",
+ api_key="YOUR_API_KEY",
+ )
+ client.crm.available_actions.retrieve()
"""
_response = self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/crm/v1/available-actions"),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ request_options.get("additional_query_parameters") if request_options is not None else None
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(AvailableActions, _response.json()) # type: ignore
@@ -40,15 +67,38 @@ class AsyncAvailableActionsClient:
def __init__(self, *, client_wrapper: AsyncClientWrapper):
self._client_wrapper = client_wrapper
- async def retrieve(self) -> AvailableActions:
+ async def retrieve(self, *, request_options: typing.Optional[RequestOptions] = None) -> AvailableActions:
"""
Returns a list of models and actions available for an account.
+
+ Parameters:
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
+ ---
+ from merge.client import AsyncMerge
+
+ client = AsyncMerge(
+ account_token="YOUR_ACCOUNT_TOKEN",
+ api_key="YOUR_API_KEY",
+ )
+ await client.crm.available_actions.retrieve()
"""
_response = await self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/crm/v1/available-actions"),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ request_options.get("additional_query_parameters") if request_options is not None else None
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(AvailableActions, _response.json()) # type: ignore
diff --git a/src/merge/resources/crm/resources/contacts/client.py b/src/merge/resources/crm/resources/contacts/client.py
index a87b5865..8205f99c 100644
--- a/src/merge/resources/crm/resources/contacts/client.py
+++ b/src/merge/resources/crm/resources/contacts/client.py
@@ -10,6 +10,7 @@
from .....core.datetime_utils import serialize_datetime
from .....core.jsonable_encoder import jsonable_encoder
from .....core.remove_none_from_dict import remove_none_from_dict
+from .....core.request_options import RequestOptions
from ...types.contact import Contact
from ...types.contact_request import ContactRequest
from ...types.crm_contact_response import CrmContactResponse
@@ -51,6 +52,7 @@ def list(
page_size: typing.Optional[int] = None,
phone_numbers: typing.Optional[str] = None,
remote_id: typing.Optional[str] = None,
+ request_options: typing.Optional[RequestOptions] = None,
) -> PaginatedContactList:
"""
Returns a list of `Contact` objects.
@@ -83,6 +85,8 @@ def list(
- phone_numbers: typing.Optional[str]. If provided, will only return contacts matching the phone numbers; multiple phone numbers can be separated by commas.
- remote_id: typing.Optional[str]. The API provider's ID for the given object.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import Merge
from merge.resources.crm import ContactsListRequestExpand
@@ -98,26 +102,42 @@ def list(
_response = self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/crm/v1/contacts"),
- params=remove_none_from_dict(
- {
- "account_id": account_id,
- "created_after": serialize_datetime(created_after) if created_after is not None else None,
- "created_before": serialize_datetime(created_before) if created_before is not None else None,
- "cursor": cursor,
- "email_addresses": email_addresses,
- "expand": expand,
- "include_deleted_data": include_deleted_data,
- "include_remote_data": include_remote_data,
- "include_remote_fields": include_remote_fields,
- "modified_after": serialize_datetime(modified_after) if modified_after is not None else None,
- "modified_before": serialize_datetime(modified_before) if modified_before is not None else None,
- "page_size": page_size,
- "phone_numbers": phone_numbers,
- "remote_id": remote_id,
- }
- ),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "account_id": account_id,
+ "created_after": serialize_datetime(created_after) if created_after is not None else None,
+ "created_before": serialize_datetime(created_before) if created_before is not None else None,
+ "cursor": cursor,
+ "email_addresses": email_addresses,
+ "expand": expand,
+ "include_deleted_data": include_deleted_data,
+ "include_remote_data": include_remote_data,
+ "include_remote_fields": include_remote_fields,
+ "modified_after": serialize_datetime(modified_after) if modified_after is not None else None,
+ "modified_before": serialize_datetime(modified_before) if modified_before is not None else None,
+ "page_size": page_size,
+ "phone_numbers": phone_numbers,
+ "remote_id": remote_id,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(PaginatedContactList, _response.json()) # type: ignore
@@ -133,6 +153,7 @@ def create(
is_debug_mode: typing.Optional[bool] = None,
run_async: typing.Optional[bool] = None,
model: ContactRequest,
+ request_options: typing.Optional[RequestOptions] = None,
) -> CrmContactResponse:
"""
Creates a `Contact` object with the given values.
@@ -143,16 +164,13 @@ def create(
- run_async: typing.Optional[bool]. Whether or not third-party updates should be run asynchronously.
- model: ContactRequest.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
import datetime
from merge.client import Merge
- from merge.resources.crm import (
- AddressRequest,
- ContactRequest,
- EmailAddressRequest,
- PhoneNumberRequest,
- )
+ from merge.resources.crm import ContactRequest
client = Merge(
account_token="YOUR_ACCOUNT_TOKEN",
@@ -162,27 +180,6 @@ def create(
model=ContactRequest(
first_name="Gil",
last_name="Feig",
- addresses=[
- AddressRequest(
- street_1="50 Bowling Green Dr",
- street_2="Golden Gate Park",
- city="San Francisco",
- state="CA",
- postal_code="94122",
- )
- ],
- email_addresses=[
- EmailAddressRequest(
- email_address="merge_is_hiring@merge.dev",
- email_address_type="Work",
- )
- ],
- phone_numbers=[
- PhoneNumberRequest(
- phone_number="+3198675309",
- phone_number_type="Mobile",
- )
- ],
last_activity_at=datetime.datetime.fromisoformat(
"2022-02-10 00:00:00+00:00",
),
@@ -192,10 +189,36 @@ def create(
_response = self._client_wrapper.httpx_client.request(
"POST",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/crm/v1/contacts"),
- params=remove_none_from_dict({"is_debug_mode": is_debug_mode, "run_async": run_async}),
- json=jsonable_encoder({"model": model}),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "is_debug_mode": is_debug_mode,
+ "run_async": run_async,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ json=jsonable_encoder({"model": model})
+ if request_options is None or request_options.get("additional_body_parameters") is None
+ else {
+ **jsonable_encoder({"model": model}),
+ **(jsonable_encoder(remove_none_from_dict(request_options.get("additional_body_parameters", {})))),
+ },
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(CrmContactResponse, _response.json()) # type: ignore
@@ -212,6 +235,7 @@ def retrieve(
expand: typing.Optional[ContactsRetrieveRequestExpand] = None,
include_remote_data: typing.Optional[bool] = None,
include_remote_fields: typing.Optional[bool] = None,
+ request_options: typing.Optional[RequestOptions] = None,
) -> Contact:
"""
Returns a `Contact` object with the given `id`.
@@ -224,6 +248,8 @@ def retrieve(
- include_remote_data: typing.Optional[bool]. Whether to include the original data Merge fetched from the third-party to produce these models.
- include_remote_fields: typing.Optional[bool]. Whether to include all remote fields, including fields that Merge did not map to common models, in a normalized format.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import Merge
from merge.resources.crm import ContactsRetrieveRequestExpand
@@ -233,22 +259,38 @@ def retrieve(
api_key="YOUR_API_KEY",
)
client.crm.contacts.retrieve(
- id="id",
+ id="string",
expand=ContactsRetrieveRequestExpand.ACCOUNT,
)
"""
_response = self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", f"api/crm/v1/contacts/{id}"),
- params=remove_none_from_dict(
- {
- "expand": expand,
- "include_remote_data": include_remote_data,
- "include_remote_fields": include_remote_fields,
- }
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "expand": expand,
+ "include_remote_data": include_remote_data,
+ "include_remote_fields": include_remote_fields,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(Contact, _response.json()) # type: ignore
@@ -265,6 +307,7 @@ def partial_update(
is_debug_mode: typing.Optional[bool] = None,
run_async: typing.Optional[bool] = None,
model: PatchedContactRequest,
+ request_options: typing.Optional[RequestOptions] = None,
) -> CrmContactResponse:
"""
Updates a `Contact` object with the given `id`.
@@ -277,48 +320,24 @@ def partial_update(
- run_async: typing.Optional[bool]. Whether or not third-party updates should be run asynchronously.
- model: PatchedContactRequest.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
import datetime
from merge.client import Merge
- from merge.resources.crm import (
- AddressRequest,
- EmailAddressRequest,
- PatchedContactRequest,
- PhoneNumberRequest,
- )
+ from merge.resources.crm import PatchedContactRequest
client = Merge(
account_token="YOUR_ACCOUNT_TOKEN",
api_key="YOUR_API_KEY",
)
client.crm.contacts.partial_update(
- id="id",
+ id="string",
model=PatchedContactRequest(
first_name="Gil",
last_name="Feig",
account="0958cbc6-6040-430a-848e-aafacbadf4ae",
- addresses=[
- AddressRequest(
- street_1="50 Bowling Green Dr",
- street_2="Golden Gate Park",
- city="San Francisco",
- state="CA",
- postal_code="94122",
- )
- ],
- email_addresses=[
- EmailAddressRequest(
- email_address="merge_is_hiring@merge.dev",
- email_address_type="Work",
- )
- ],
- phone_numbers=[
- PhoneNumberRequest(
- phone_number="+3198675309",
- phone_number_type="Mobile",
- )
- ],
last_activity_at=datetime.datetime.fromisoformat(
"2022-02-10 00:00:00+00:00",
),
@@ -328,10 +347,36 @@ def partial_update(
_response = self._client_wrapper.httpx_client.request(
"PATCH",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", f"api/crm/v1/contacts/{id}"),
- params=remove_none_from_dict({"is_debug_mode": is_debug_mode, "run_async": run_async}),
- json=jsonable_encoder({"model": model}),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "is_debug_mode": is_debug_mode,
+ "run_async": run_async,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ json=jsonable_encoder({"model": model})
+ if request_options is None or request_options.get("additional_body_parameters") is None
+ else {
+ **jsonable_encoder({"model": model}),
+ **(jsonable_encoder(remove_none_from_dict(request_options.get("additional_body_parameters", {})))),
+ },
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(CrmContactResponse, _response.json()) # type: ignore
@@ -341,7 +386,13 @@ def partial_update(
raise ApiError(status_code=_response.status_code, body=_response.text)
raise ApiError(status_code=_response.status_code, body=_response_json)
- def ignore_create(self, model_id: str, *, request: IgnoreCommonModelRequest) -> None:
+ def ignore_create(
+ self,
+ model_id: str,
+ *,
+ request: IgnoreCommonModelRequest,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> None:
"""
Ignores a specific row based on the `model_id` in the url. These records will have their properties set to null, and will not be updated in future syncs. The "reason" and "message" fields in the request body will be stored for audit purposes.
@@ -349,6 +400,8 @@ def ignore_create(self, model_id: str, *, request: IgnoreCommonModelRequest) ->
- model_id: str.
- request: IgnoreCommonModelRequest.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import Merge
from merge.resources.crm import IgnoreCommonModelRequest, ReasonEnum
@@ -358,7 +411,7 @@ def ignore_create(self, model_id: str, *, request: IgnoreCommonModelRequest) ->
api_key="YOUR_API_KEY",
)
client.crm.contacts.ignore_create(
- model_id="model-id",
+ model_id="string",
request=IgnoreCommonModelRequest(
reason=ReasonEnum.GENERAL_CUSTOMER_REQUEST,
message="deletion request by user id 51903790-7dfe-4053-8d63-5a10cc4ffd39",
@@ -368,9 +421,26 @@ def ignore_create(self, model_id: str, *, request: IgnoreCommonModelRequest) ->
_response = self._client_wrapper.httpx_client.request(
"POST",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", f"api/crm/v1/contacts/ignore/{model_id}"),
- json=jsonable_encoder(request),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ request_options.get("additional_query_parameters") if request_options is not None else None
+ ),
+ json=jsonable_encoder(request)
+ if request_options is None or request_options.get("additional_body_parameters") is None
+ else {
+ **jsonable_encoder(request),
+ **(jsonable_encoder(remove_none_from_dict(request_options.get("additional_body_parameters", {})))),
+ },
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return
@@ -380,12 +450,14 @@ def ignore_create(self, model_id: str, *, request: IgnoreCommonModelRequest) ->
raise ApiError(status_code=_response.status_code, body=_response.text)
raise ApiError(status_code=_response.status_code, body=_response_json)
- def meta_patch_retrieve(self, id: str) -> MetaResponse:
+ def meta_patch_retrieve(self, id: str, *, request_options: typing.Optional[RequestOptions] = None) -> MetaResponse:
"""
Returns metadata for `CRMContact` PATCHs.
Parameters:
- id: str.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import Merge
@@ -394,14 +466,26 @@ def meta_patch_retrieve(self, id: str) -> MetaResponse:
api_key="YOUR_API_KEY",
)
client.crm.contacts.meta_patch_retrieve(
- id="id",
+ id="string",
)
"""
_response = self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", f"api/crm/v1/contacts/meta/patch/{id}"),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ request_options.get("additional_query_parameters") if request_options is not None else None
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(MetaResponse, _response.json()) # type: ignore
@@ -411,10 +495,12 @@ def meta_patch_retrieve(self, id: str) -> MetaResponse:
raise ApiError(status_code=_response.status_code, body=_response.text)
raise ApiError(status_code=_response.status_code, body=_response_json)
- def meta_post_retrieve(self) -> MetaResponse:
+ def meta_post_retrieve(self, *, request_options: typing.Optional[RequestOptions] = None) -> MetaResponse:
"""
Returns metadata for `CRMContact` POSTs.
+ Parameters:
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import Merge
@@ -427,8 +513,20 @@ def meta_post_retrieve(self) -> MetaResponse:
_response = self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/crm/v1/contacts/meta/post"),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ request_options.get("additional_query_parameters") if request_options is not None else None
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(MetaResponse, _response.json()) # type: ignore
@@ -446,6 +544,7 @@ def remote_field_classes_list(
include_remote_data: typing.Optional[bool] = None,
include_remote_fields: typing.Optional[bool] = None,
page_size: typing.Optional[int] = None,
+ request_options: typing.Optional[RequestOptions] = None,
) -> PaginatedRemoteFieldClassList:
"""
Returns a list of `RemoteFieldClass` objects.
@@ -460,6 +559,8 @@ def remote_field_classes_list(
- include_remote_fields: typing.Optional[bool]. Whether to include all remote fields, including fields that Merge did not map to common models, in a normalized format.
- page_size: typing.Optional[int]. Number of results to return per page.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import Merge
@@ -472,17 +573,33 @@ def remote_field_classes_list(
_response = self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/crm/v1/contacts/remote-field-classes"),
- params=remove_none_from_dict(
- {
- "cursor": cursor,
- "include_deleted_data": include_deleted_data,
- "include_remote_data": include_remote_data,
- "include_remote_fields": include_remote_fields,
- "page_size": page_size,
- }
- ),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "cursor": cursor,
+ "include_deleted_data": include_deleted_data,
+ "include_remote_data": include_remote_data,
+ "include_remote_fields": include_remote_fields,
+ "page_size": page_size,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(PaginatedRemoteFieldClassList, _response.json()) # type: ignore
@@ -514,6 +631,7 @@ async def list(
page_size: typing.Optional[int] = None,
phone_numbers: typing.Optional[str] = None,
remote_id: typing.Optional[str] = None,
+ request_options: typing.Optional[RequestOptions] = None,
) -> PaginatedContactList:
"""
Returns a list of `Contact` objects.
@@ -546,6 +664,8 @@ async def list(
- phone_numbers: typing.Optional[str]. If provided, will only return contacts matching the phone numbers; multiple phone numbers can be separated by commas.
- remote_id: typing.Optional[str]. The API provider's ID for the given object.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import AsyncMerge
from merge.resources.crm import ContactsListRequestExpand
@@ -561,26 +681,42 @@ async def list(
_response = await self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/crm/v1/contacts"),
- params=remove_none_from_dict(
- {
- "account_id": account_id,
- "created_after": serialize_datetime(created_after) if created_after is not None else None,
- "created_before": serialize_datetime(created_before) if created_before is not None else None,
- "cursor": cursor,
- "email_addresses": email_addresses,
- "expand": expand,
- "include_deleted_data": include_deleted_data,
- "include_remote_data": include_remote_data,
- "include_remote_fields": include_remote_fields,
- "modified_after": serialize_datetime(modified_after) if modified_after is not None else None,
- "modified_before": serialize_datetime(modified_before) if modified_before is not None else None,
- "page_size": page_size,
- "phone_numbers": phone_numbers,
- "remote_id": remote_id,
- }
- ),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "account_id": account_id,
+ "created_after": serialize_datetime(created_after) if created_after is not None else None,
+ "created_before": serialize_datetime(created_before) if created_before is not None else None,
+ "cursor": cursor,
+ "email_addresses": email_addresses,
+ "expand": expand,
+ "include_deleted_data": include_deleted_data,
+ "include_remote_data": include_remote_data,
+ "include_remote_fields": include_remote_fields,
+ "modified_after": serialize_datetime(modified_after) if modified_after is not None else None,
+ "modified_before": serialize_datetime(modified_before) if modified_before is not None else None,
+ "page_size": page_size,
+ "phone_numbers": phone_numbers,
+ "remote_id": remote_id,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(PaginatedContactList, _response.json()) # type: ignore
@@ -596,6 +732,7 @@ async def create(
is_debug_mode: typing.Optional[bool] = None,
run_async: typing.Optional[bool] = None,
model: ContactRequest,
+ request_options: typing.Optional[RequestOptions] = None,
) -> CrmContactResponse:
"""
Creates a `Contact` object with the given values.
@@ -606,16 +743,13 @@ async def create(
- run_async: typing.Optional[bool]. Whether or not third-party updates should be run asynchronously.
- model: ContactRequest.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
import datetime
from merge.client import AsyncMerge
- from merge.resources.crm import (
- AddressRequest,
- ContactRequest,
- EmailAddressRequest,
- PhoneNumberRequest,
- )
+ from merge.resources.crm import ContactRequest
client = AsyncMerge(
account_token="YOUR_ACCOUNT_TOKEN",
@@ -625,27 +759,6 @@ async def create(
model=ContactRequest(
first_name="Gil",
last_name="Feig",
- addresses=[
- AddressRequest(
- street_1="50 Bowling Green Dr",
- street_2="Golden Gate Park",
- city="San Francisco",
- state="CA",
- postal_code="94122",
- )
- ],
- email_addresses=[
- EmailAddressRequest(
- email_address="merge_is_hiring@merge.dev",
- email_address_type="Work",
- )
- ],
- phone_numbers=[
- PhoneNumberRequest(
- phone_number="+3198675309",
- phone_number_type="Mobile",
- )
- ],
last_activity_at=datetime.datetime.fromisoformat(
"2022-02-10 00:00:00+00:00",
),
@@ -655,10 +768,36 @@ async def create(
_response = await self._client_wrapper.httpx_client.request(
"POST",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/crm/v1/contacts"),
- params=remove_none_from_dict({"is_debug_mode": is_debug_mode, "run_async": run_async}),
- json=jsonable_encoder({"model": model}),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "is_debug_mode": is_debug_mode,
+ "run_async": run_async,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ json=jsonable_encoder({"model": model})
+ if request_options is None or request_options.get("additional_body_parameters") is None
+ else {
+ **jsonable_encoder({"model": model}),
+ **(jsonable_encoder(remove_none_from_dict(request_options.get("additional_body_parameters", {})))),
+ },
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(CrmContactResponse, _response.json()) # type: ignore
@@ -675,6 +814,7 @@ async def retrieve(
expand: typing.Optional[ContactsRetrieveRequestExpand] = None,
include_remote_data: typing.Optional[bool] = None,
include_remote_fields: typing.Optional[bool] = None,
+ request_options: typing.Optional[RequestOptions] = None,
) -> Contact:
"""
Returns a `Contact` object with the given `id`.
@@ -687,6 +827,8 @@ async def retrieve(
- include_remote_data: typing.Optional[bool]. Whether to include the original data Merge fetched from the third-party to produce these models.
- include_remote_fields: typing.Optional[bool]. Whether to include all remote fields, including fields that Merge did not map to common models, in a normalized format.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import AsyncMerge
from merge.resources.crm import ContactsRetrieveRequestExpand
@@ -696,22 +838,38 @@ async def retrieve(
api_key="YOUR_API_KEY",
)
await client.crm.contacts.retrieve(
- id="id",
+ id="string",
expand=ContactsRetrieveRequestExpand.ACCOUNT,
)
"""
_response = await self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", f"api/crm/v1/contacts/{id}"),
- params=remove_none_from_dict(
- {
- "expand": expand,
- "include_remote_data": include_remote_data,
- "include_remote_fields": include_remote_fields,
- }
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "expand": expand,
+ "include_remote_data": include_remote_data,
+ "include_remote_fields": include_remote_fields,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(Contact, _response.json()) # type: ignore
@@ -728,6 +886,7 @@ async def partial_update(
is_debug_mode: typing.Optional[bool] = None,
run_async: typing.Optional[bool] = None,
model: PatchedContactRequest,
+ request_options: typing.Optional[RequestOptions] = None,
) -> CrmContactResponse:
"""
Updates a `Contact` object with the given `id`.
@@ -740,48 +899,24 @@ async def partial_update(
- run_async: typing.Optional[bool]. Whether or not third-party updates should be run asynchronously.
- model: PatchedContactRequest.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
import datetime
from merge.client import AsyncMerge
- from merge.resources.crm import (
- AddressRequest,
- EmailAddressRequest,
- PatchedContactRequest,
- PhoneNumberRequest,
- )
+ from merge.resources.crm import PatchedContactRequest
client = AsyncMerge(
account_token="YOUR_ACCOUNT_TOKEN",
api_key="YOUR_API_KEY",
)
await client.crm.contacts.partial_update(
- id="id",
+ id="string",
model=PatchedContactRequest(
first_name="Gil",
last_name="Feig",
account="0958cbc6-6040-430a-848e-aafacbadf4ae",
- addresses=[
- AddressRequest(
- street_1="50 Bowling Green Dr",
- street_2="Golden Gate Park",
- city="San Francisco",
- state="CA",
- postal_code="94122",
- )
- ],
- email_addresses=[
- EmailAddressRequest(
- email_address="merge_is_hiring@merge.dev",
- email_address_type="Work",
- )
- ],
- phone_numbers=[
- PhoneNumberRequest(
- phone_number="+3198675309",
- phone_number_type="Mobile",
- )
- ],
last_activity_at=datetime.datetime.fromisoformat(
"2022-02-10 00:00:00+00:00",
),
@@ -791,10 +926,36 @@ async def partial_update(
_response = await self._client_wrapper.httpx_client.request(
"PATCH",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", f"api/crm/v1/contacts/{id}"),
- params=remove_none_from_dict({"is_debug_mode": is_debug_mode, "run_async": run_async}),
- json=jsonable_encoder({"model": model}),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "is_debug_mode": is_debug_mode,
+ "run_async": run_async,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ json=jsonable_encoder({"model": model})
+ if request_options is None or request_options.get("additional_body_parameters") is None
+ else {
+ **jsonable_encoder({"model": model}),
+ **(jsonable_encoder(remove_none_from_dict(request_options.get("additional_body_parameters", {})))),
+ },
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(CrmContactResponse, _response.json()) # type: ignore
@@ -804,7 +965,13 @@ async def partial_update(
raise ApiError(status_code=_response.status_code, body=_response.text)
raise ApiError(status_code=_response.status_code, body=_response_json)
- async def ignore_create(self, model_id: str, *, request: IgnoreCommonModelRequest) -> None:
+ async def ignore_create(
+ self,
+ model_id: str,
+ *,
+ request: IgnoreCommonModelRequest,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> None:
"""
Ignores a specific row based on the `model_id` in the url. These records will have their properties set to null, and will not be updated in future syncs. The "reason" and "message" fields in the request body will be stored for audit purposes.
@@ -812,6 +979,8 @@ async def ignore_create(self, model_id: str, *, request: IgnoreCommonModelReques
- model_id: str.
- request: IgnoreCommonModelRequest.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import AsyncMerge
from merge.resources.crm import IgnoreCommonModelRequest, ReasonEnum
@@ -821,7 +990,7 @@ async def ignore_create(self, model_id: str, *, request: IgnoreCommonModelReques
api_key="YOUR_API_KEY",
)
await client.crm.contacts.ignore_create(
- model_id="model-id",
+ model_id="string",
request=IgnoreCommonModelRequest(
reason=ReasonEnum.GENERAL_CUSTOMER_REQUEST,
message="deletion request by user id 51903790-7dfe-4053-8d63-5a10cc4ffd39",
@@ -831,9 +1000,26 @@ async def ignore_create(self, model_id: str, *, request: IgnoreCommonModelReques
_response = await self._client_wrapper.httpx_client.request(
"POST",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", f"api/crm/v1/contacts/ignore/{model_id}"),
- json=jsonable_encoder(request),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ request_options.get("additional_query_parameters") if request_options is not None else None
+ ),
+ json=jsonable_encoder(request)
+ if request_options is None or request_options.get("additional_body_parameters") is None
+ else {
+ **jsonable_encoder(request),
+ **(jsonable_encoder(remove_none_from_dict(request_options.get("additional_body_parameters", {})))),
+ },
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return
@@ -843,12 +1029,16 @@ async def ignore_create(self, model_id: str, *, request: IgnoreCommonModelReques
raise ApiError(status_code=_response.status_code, body=_response.text)
raise ApiError(status_code=_response.status_code, body=_response_json)
- async def meta_patch_retrieve(self, id: str) -> MetaResponse:
+ async def meta_patch_retrieve(
+ self, id: str, *, request_options: typing.Optional[RequestOptions] = None
+ ) -> MetaResponse:
"""
Returns metadata for `CRMContact` PATCHs.
Parameters:
- id: str.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import AsyncMerge
@@ -857,14 +1047,26 @@ async def meta_patch_retrieve(self, id: str) -> MetaResponse:
api_key="YOUR_API_KEY",
)
await client.crm.contacts.meta_patch_retrieve(
- id="id",
+ id="string",
)
"""
_response = await self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", f"api/crm/v1/contacts/meta/patch/{id}"),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ request_options.get("additional_query_parameters") if request_options is not None else None
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(MetaResponse, _response.json()) # type: ignore
@@ -874,10 +1076,12 @@ async def meta_patch_retrieve(self, id: str) -> MetaResponse:
raise ApiError(status_code=_response.status_code, body=_response.text)
raise ApiError(status_code=_response.status_code, body=_response_json)
- async def meta_post_retrieve(self) -> MetaResponse:
+ async def meta_post_retrieve(self, *, request_options: typing.Optional[RequestOptions] = None) -> MetaResponse:
"""
Returns metadata for `CRMContact` POSTs.
+ Parameters:
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import AsyncMerge
@@ -890,8 +1094,20 @@ async def meta_post_retrieve(self) -> MetaResponse:
_response = await self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/crm/v1/contacts/meta/post"),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ request_options.get("additional_query_parameters") if request_options is not None else None
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(MetaResponse, _response.json()) # type: ignore
@@ -909,6 +1125,7 @@ async def remote_field_classes_list(
include_remote_data: typing.Optional[bool] = None,
include_remote_fields: typing.Optional[bool] = None,
page_size: typing.Optional[int] = None,
+ request_options: typing.Optional[RequestOptions] = None,
) -> PaginatedRemoteFieldClassList:
"""
Returns a list of `RemoteFieldClass` objects.
@@ -923,6 +1140,8 @@ async def remote_field_classes_list(
- include_remote_fields: typing.Optional[bool]. Whether to include all remote fields, including fields that Merge did not map to common models, in a normalized format.
- page_size: typing.Optional[int]. Number of results to return per page.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import AsyncMerge
@@ -935,17 +1154,33 @@ async def remote_field_classes_list(
_response = await self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/crm/v1/contacts/remote-field-classes"),
- params=remove_none_from_dict(
- {
- "cursor": cursor,
- "include_deleted_data": include_deleted_data,
- "include_remote_data": include_remote_data,
- "include_remote_fields": include_remote_fields,
- "page_size": page_size,
- }
- ),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "cursor": cursor,
+ "include_deleted_data": include_deleted_data,
+ "include_remote_data": include_remote_data,
+ "include_remote_fields": include_remote_fields,
+ "page_size": page_size,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(PaginatedRemoteFieldClassList, _response.json()) # type: ignore
diff --git a/src/merge/resources/crm/resources/custom_object_classes/client.py b/src/merge/resources/crm/resources/custom_object_classes/client.py
index 508e2322..b3c2a82d 100644
--- a/src/merge/resources/crm/resources/custom_object_classes/client.py
+++ b/src/merge/resources/crm/resources/custom_object_classes/client.py
@@ -5,12 +5,12 @@
import urllib.parse
from json.decoder import JSONDecodeError
-import typing_extensions
-
from .....core.api_error import ApiError
from .....core.client_wrapper import AsyncClientWrapper, SyncClientWrapper
from .....core.datetime_utils import serialize_datetime
+from .....core.jsonable_encoder import jsonable_encoder
from .....core.remove_none_from_dict import remove_none_from_dict
+from .....core.request_options import RequestOptions
from ...types.custom_object_class import CustomObjectClass
from ...types.paginated_custom_object_class_list import PaginatedCustomObjectClassList
@@ -30,13 +30,14 @@ def list(
created_after: typing.Optional[dt.datetime] = None,
created_before: typing.Optional[dt.datetime] = None,
cursor: typing.Optional[str] = None,
- expand: typing.Optional[typing_extensions.Literal["fields"]] = None,
+ expand: typing.Optional[typing.Literal["fields"]] = None,
include_deleted_data: typing.Optional[bool] = None,
include_remote_data: typing.Optional[bool] = None,
modified_after: typing.Optional[dt.datetime] = None,
modified_before: typing.Optional[dt.datetime] = None,
page_size: typing.Optional[int] = None,
remote_id: typing.Optional[str] = None,
+ request_options: typing.Optional[RequestOptions] = None,
) -> PaginatedCustomObjectClassList:
"""
Returns a list of `CustomObjectClass` objects.
@@ -48,7 +49,7 @@ def list(
- cursor: typing.Optional[str]. The pagination cursor value.
- - expand: typing.Optional[typing_extensions.Literal["fields"]]. Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces.
+ - expand: typing.Optional[typing.Literal["fields"]]. Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces.
- include_deleted_data: typing.Optional[bool]. Whether to include data that was marked as deleted by third party webhooks.
@@ -61,6 +62,8 @@ def list(
- page_size: typing.Optional[int]. Number of results to return per page.
- remote_id: typing.Optional[str]. The API provider's ID for the given object.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import Merge
@@ -75,22 +78,38 @@ def list(
_response = self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/crm/v1/custom-object-classes"),
- params=remove_none_from_dict(
- {
- "created_after": serialize_datetime(created_after) if created_after is not None else None,
- "created_before": serialize_datetime(created_before) if created_before is not None else None,
- "cursor": cursor,
- "expand": expand,
- "include_deleted_data": include_deleted_data,
- "include_remote_data": include_remote_data,
- "modified_after": serialize_datetime(modified_after) if modified_after is not None else None,
- "modified_before": serialize_datetime(modified_before) if modified_before is not None else None,
- "page_size": page_size,
- "remote_id": remote_id,
- }
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "created_after": serialize_datetime(created_after) if created_after is not None else None,
+ "created_before": serialize_datetime(created_before) if created_before is not None else None,
+ "cursor": cursor,
+ "expand": expand,
+ "include_deleted_data": include_deleted_data,
+ "include_remote_data": include_remote_data,
+ "modified_after": serialize_datetime(modified_after) if modified_after is not None else None,
+ "modified_before": serialize_datetime(modified_before) if modified_before is not None else None,
+ "page_size": page_size,
+ "remote_id": remote_id,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(PaginatedCustomObjectClassList, _response.json()) # type: ignore
@@ -104,8 +123,9 @@ def retrieve(
self,
id: str,
*,
- expand: typing.Optional[typing_extensions.Literal["fields"]] = None,
+ expand: typing.Optional[typing.Literal["fields"]] = None,
include_remote_data: typing.Optional[bool] = None,
+ request_options: typing.Optional[RequestOptions] = None,
) -> CustomObjectClass:
"""
Returns a `CustomObjectClass` object with the given `id`.
@@ -113,9 +133,11 @@ def retrieve(
Parameters:
- id: str.
- - expand: typing.Optional[typing_extensions.Literal["fields"]]. Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces.
+ - expand: typing.Optional[typing.Literal["fields"]]. Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces.
- include_remote_data: typing.Optional[bool]. Whether to include the original data Merge fetched from the third-party to produce these models.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import Merge
@@ -124,16 +146,37 @@ def retrieve(
api_key="YOUR_API_KEY",
)
client.crm.custom_object_classes.retrieve(
- id="id",
+ id="string",
expand="fields",
)
"""
_response = self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", f"api/crm/v1/custom-object-classes/{id}"),
- params=remove_none_from_dict({"expand": expand, "include_remote_data": include_remote_data}),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "expand": expand,
+ "include_remote_data": include_remote_data,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(CustomObjectClass, _response.json()) # type: ignore
@@ -154,13 +197,14 @@ async def list(
created_after: typing.Optional[dt.datetime] = None,
created_before: typing.Optional[dt.datetime] = None,
cursor: typing.Optional[str] = None,
- expand: typing.Optional[typing_extensions.Literal["fields"]] = None,
+ expand: typing.Optional[typing.Literal["fields"]] = None,
include_deleted_data: typing.Optional[bool] = None,
include_remote_data: typing.Optional[bool] = None,
modified_after: typing.Optional[dt.datetime] = None,
modified_before: typing.Optional[dt.datetime] = None,
page_size: typing.Optional[int] = None,
remote_id: typing.Optional[str] = None,
+ request_options: typing.Optional[RequestOptions] = None,
) -> PaginatedCustomObjectClassList:
"""
Returns a list of `CustomObjectClass` objects.
@@ -172,7 +216,7 @@ async def list(
- cursor: typing.Optional[str]. The pagination cursor value.
- - expand: typing.Optional[typing_extensions.Literal["fields"]]. Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces.
+ - expand: typing.Optional[typing.Literal["fields"]]. Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces.
- include_deleted_data: typing.Optional[bool]. Whether to include data that was marked as deleted by third party webhooks.
@@ -185,6 +229,8 @@ async def list(
- page_size: typing.Optional[int]. Number of results to return per page.
- remote_id: typing.Optional[str]. The API provider's ID for the given object.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import AsyncMerge
@@ -199,22 +245,38 @@ async def list(
_response = await self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/crm/v1/custom-object-classes"),
- params=remove_none_from_dict(
- {
- "created_after": serialize_datetime(created_after) if created_after is not None else None,
- "created_before": serialize_datetime(created_before) if created_before is not None else None,
- "cursor": cursor,
- "expand": expand,
- "include_deleted_data": include_deleted_data,
- "include_remote_data": include_remote_data,
- "modified_after": serialize_datetime(modified_after) if modified_after is not None else None,
- "modified_before": serialize_datetime(modified_before) if modified_before is not None else None,
- "page_size": page_size,
- "remote_id": remote_id,
- }
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "created_after": serialize_datetime(created_after) if created_after is not None else None,
+ "created_before": serialize_datetime(created_before) if created_before is not None else None,
+ "cursor": cursor,
+ "expand": expand,
+ "include_deleted_data": include_deleted_data,
+ "include_remote_data": include_remote_data,
+ "modified_after": serialize_datetime(modified_after) if modified_after is not None else None,
+ "modified_before": serialize_datetime(modified_before) if modified_before is not None else None,
+ "page_size": page_size,
+ "remote_id": remote_id,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(PaginatedCustomObjectClassList, _response.json()) # type: ignore
@@ -228,8 +290,9 @@ async def retrieve(
self,
id: str,
*,
- expand: typing.Optional[typing_extensions.Literal["fields"]] = None,
+ expand: typing.Optional[typing.Literal["fields"]] = None,
include_remote_data: typing.Optional[bool] = None,
+ request_options: typing.Optional[RequestOptions] = None,
) -> CustomObjectClass:
"""
Returns a `CustomObjectClass` object with the given `id`.
@@ -237,9 +300,11 @@ async def retrieve(
Parameters:
- id: str.
- - expand: typing.Optional[typing_extensions.Literal["fields"]]. Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces.
+ - expand: typing.Optional[typing.Literal["fields"]]. Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces.
- include_remote_data: typing.Optional[bool]. Whether to include the original data Merge fetched from the third-party to produce these models.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import AsyncMerge
@@ -248,16 +313,37 @@ async def retrieve(
api_key="YOUR_API_KEY",
)
await client.crm.custom_object_classes.retrieve(
- id="id",
+ id="string",
expand="fields",
)
"""
_response = await self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", f"api/crm/v1/custom-object-classes/{id}"),
- params=remove_none_from_dict({"expand": expand, "include_remote_data": include_remote_data}),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "expand": expand,
+ "include_remote_data": include_remote_data,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(CustomObjectClass, _response.json()) # type: ignore
diff --git a/src/merge/resources/crm/resources/custom_objects/client.py b/src/merge/resources/crm/resources/custom_objects/client.py
index c1c0666f..0f2239e4 100644
--- a/src/merge/resources/crm/resources/custom_objects/client.py
+++ b/src/merge/resources/crm/resources/custom_objects/client.py
@@ -10,6 +10,7 @@
from .....core.datetime_utils import serialize_datetime
from .....core.jsonable_encoder import jsonable_encoder
from .....core.remove_none_from_dict import remove_none_from_dict
+from .....core.request_options import RequestOptions
from ...types.crm_custom_object_response import CrmCustomObjectResponse
from ...types.custom_object import CustomObject
from ...types.custom_object_request import CustomObjectRequest
@@ -43,6 +44,7 @@ def custom_object_classes_custom_objects_list(
modified_before: typing.Optional[dt.datetime] = None,
page_size: typing.Optional[int] = None,
remote_id: typing.Optional[str] = None,
+ request_options: typing.Optional[RequestOptions] = None,
) -> PaginatedCustomObjectList:
"""
Returns a list of `CustomObject` objects.
@@ -69,6 +71,8 @@ def custom_object_classes_custom_objects_list(
- page_size: typing.Optional[int]. Number of results to return per page.
- remote_id: typing.Optional[str]. The API provider's ID for the given object.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import Merge
@@ -77,7 +81,7 @@ def custom_object_classes_custom_objects_list(
api_key="YOUR_API_KEY",
)
client.crm.custom_objects.custom_object_classes_custom_objects_list(
- custom_object_class_id="custom-object-class-id",
+ custom_object_class_id="string",
)
"""
_response = self._client_wrapper.httpx_client.request(
@@ -86,22 +90,38 @@ def custom_object_classes_custom_objects_list(
f"{self._client_wrapper.get_base_url()}/",
f"api/crm/v1/custom-object-classes/{custom_object_class_id}/custom-objects",
),
- params=remove_none_from_dict(
- {
- "created_after": serialize_datetime(created_after) if created_after is not None else None,
- "created_before": serialize_datetime(created_before) if created_before is not None else None,
- "cursor": cursor,
- "include_deleted_data": include_deleted_data,
- "include_remote_data": include_remote_data,
- "include_remote_fields": include_remote_fields,
- "modified_after": serialize_datetime(modified_after) if modified_after is not None else None,
- "modified_before": serialize_datetime(modified_before) if modified_before is not None else None,
- "page_size": page_size,
- "remote_id": remote_id,
- }
- ),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "created_after": serialize_datetime(created_after) if created_after is not None else None,
+ "created_before": serialize_datetime(created_before) if created_before is not None else None,
+ "cursor": cursor,
+ "include_deleted_data": include_deleted_data,
+ "include_remote_data": include_remote_data,
+ "include_remote_fields": include_remote_fields,
+ "modified_after": serialize_datetime(modified_after) if modified_after is not None else None,
+ "modified_before": serialize_datetime(modified_before) if modified_before is not None else None,
+ "page_size": page_size,
+ "remote_id": remote_id,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(PaginatedCustomObjectList, _response.json()) # type: ignore
@@ -118,6 +138,7 @@ def custom_object_classes_custom_objects_create(
is_debug_mode: typing.Optional[bool] = None,
run_async: typing.Optional[bool] = None,
model: CustomObjectRequest,
+ request_options: typing.Optional[RequestOptions] = None,
) -> CrmCustomObjectResponse:
"""
Creates a `CustomObject` object with the given values.
@@ -130,6 +151,8 @@ def custom_object_classes_custom_objects_create(
- run_async: typing.Optional[bool]. Whether or not third-party updates should be run asynchronously.
- model: CustomObjectRequest.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import Merge
from merge.resources.crm import CustomObjectRequest
@@ -139,9 +162,9 @@ def custom_object_classes_custom_objects_create(
api_key="YOUR_API_KEY",
)
client.crm.custom_objects.custom_object_classes_custom_objects_create(
- custom_object_class_id="custom-object-class-id",
+ custom_object_class_id="string",
model=CustomObjectRequest(
- fields={},
+ fields={"string": {}},
),
)
"""
@@ -151,10 +174,36 @@ def custom_object_classes_custom_objects_create(
f"{self._client_wrapper.get_base_url()}/",
f"api/crm/v1/custom-object-classes/{custom_object_class_id}/custom-objects",
),
- params=remove_none_from_dict({"is_debug_mode": is_debug_mode, "run_async": run_async}),
- json=jsonable_encoder({"model": model}),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "is_debug_mode": is_debug_mode,
+ "run_async": run_async,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ json=jsonable_encoder({"model": model})
+ if request_options is None or request_options.get("additional_body_parameters") is None
+ else {
+ **jsonable_encoder({"model": model}),
+ **(jsonable_encoder(remove_none_from_dict(request_options.get("additional_body_parameters", {})))),
+ },
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(CrmCustomObjectResponse, _response.json()) # type: ignore
@@ -171,6 +220,7 @@ def custom_object_classes_custom_objects_retrieve(
*,
include_remote_data: typing.Optional[bool] = None,
include_remote_fields: typing.Optional[bool] = None,
+ request_options: typing.Optional[RequestOptions] = None,
) -> CustomObject:
"""
Returns a `CustomObject` object with the given `id`.
@@ -183,6 +233,8 @@ def custom_object_classes_custom_objects_retrieve(
- include_remote_data: typing.Optional[bool]. Whether to include the original data Merge fetched from the third-party to produce these models.
- include_remote_fields: typing.Optional[bool]. Whether to include all remote fields, including fields that Merge did not map to common models, in a normalized format.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import Merge
@@ -191,8 +243,8 @@ def custom_object_classes_custom_objects_retrieve(
api_key="YOUR_API_KEY",
)
client.crm.custom_objects.custom_object_classes_custom_objects_retrieve(
- custom_object_class_id="custom-object-class-id",
- id="id",
+ custom_object_class_id="string",
+ id="string",
)
"""
_response = self._client_wrapper.httpx_client.request(
@@ -201,11 +253,30 @@ def custom_object_classes_custom_objects_retrieve(
f"{self._client_wrapper.get_base_url()}/",
f"api/crm/v1/custom-object-classes/{custom_object_class_id}/custom-objects/{id}",
),
- params=remove_none_from_dict(
- {"include_remote_data": include_remote_data, "include_remote_fields": include_remote_fields}
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "include_remote_data": include_remote_data,
+ "include_remote_fields": include_remote_fields,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(CustomObject, _response.json()) # type: ignore
@@ -216,7 +287,7 @@ def custom_object_classes_custom_objects_retrieve(
raise ApiError(status_code=_response.status_code, body=_response_json)
def custom_object_classes_custom_objects_meta_patch_retrieve(
- self, custom_object_class_id: str, id: str
+ self, custom_object_class_id: str, id: str, *, request_options: typing.Optional[RequestOptions] = None
) -> MetaResponse:
"""
Returns metadata for `CRMCustomObject` PATCHs.
@@ -225,6 +296,8 @@ def custom_object_classes_custom_objects_meta_patch_retrieve(
- custom_object_class_id: str.
- id: str.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import Merge
@@ -233,8 +306,8 @@ def custom_object_classes_custom_objects_meta_patch_retrieve(
api_key="YOUR_API_KEY",
)
client.crm.custom_objects.custom_object_classes_custom_objects_meta_patch_retrieve(
- custom_object_class_id="custom-object-class-id",
- id="id",
+ custom_object_class_id="string",
+ id="string",
)
"""
_response = self._client_wrapper.httpx_client.request(
@@ -243,8 +316,20 @@ def custom_object_classes_custom_objects_meta_patch_retrieve(
f"{self._client_wrapper.get_base_url()}/",
f"api/crm/v1/custom-object-classes/{custom_object_class_id}/custom-objects/meta/patch/{id}",
),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ request_options.get("additional_query_parameters") if request_options is not None else None
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(MetaResponse, _response.json()) # type: ignore
@@ -254,12 +339,16 @@ def custom_object_classes_custom_objects_meta_patch_retrieve(
raise ApiError(status_code=_response.status_code, body=_response.text)
raise ApiError(status_code=_response.status_code, body=_response_json)
- def custom_object_classes_custom_objects_meta_post_retrieve(self, custom_object_class_id: str) -> MetaResponse:
+ def custom_object_classes_custom_objects_meta_post_retrieve(
+ self, custom_object_class_id: str, *, request_options: typing.Optional[RequestOptions] = None
+ ) -> MetaResponse:
"""
Returns metadata for `CRMCustomObject` POSTs.
Parameters:
- custom_object_class_id: str.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import Merge
@@ -268,7 +357,7 @@ def custom_object_classes_custom_objects_meta_post_retrieve(self, custom_object_
api_key="YOUR_API_KEY",
)
client.crm.custom_objects.custom_object_classes_custom_objects_meta_post_retrieve(
- custom_object_class_id="custom-object-class-id",
+ custom_object_class_id="string",
)
"""
_response = self._client_wrapper.httpx_client.request(
@@ -277,8 +366,20 @@ def custom_object_classes_custom_objects_meta_post_retrieve(self, custom_object_
f"{self._client_wrapper.get_base_url()}/",
f"api/crm/v1/custom-object-classes/{custom_object_class_id}/custom-objects/meta/post",
),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ request_options.get("additional_query_parameters") if request_options is not None else None
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(MetaResponse, _response.json()) # type: ignore
@@ -307,6 +408,7 @@ async def custom_object_classes_custom_objects_list(
modified_before: typing.Optional[dt.datetime] = None,
page_size: typing.Optional[int] = None,
remote_id: typing.Optional[str] = None,
+ request_options: typing.Optional[RequestOptions] = None,
) -> PaginatedCustomObjectList:
"""
Returns a list of `CustomObject` objects.
@@ -333,6 +435,8 @@ async def custom_object_classes_custom_objects_list(
- page_size: typing.Optional[int]. Number of results to return per page.
- remote_id: typing.Optional[str]. The API provider's ID for the given object.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import AsyncMerge
@@ -341,7 +445,7 @@ async def custom_object_classes_custom_objects_list(
api_key="YOUR_API_KEY",
)
await client.crm.custom_objects.custom_object_classes_custom_objects_list(
- custom_object_class_id="custom-object-class-id",
+ custom_object_class_id="string",
)
"""
_response = await self._client_wrapper.httpx_client.request(
@@ -350,22 +454,38 @@ async def custom_object_classes_custom_objects_list(
f"{self._client_wrapper.get_base_url()}/",
f"api/crm/v1/custom-object-classes/{custom_object_class_id}/custom-objects",
),
- params=remove_none_from_dict(
- {
- "created_after": serialize_datetime(created_after) if created_after is not None else None,
- "created_before": serialize_datetime(created_before) if created_before is not None else None,
- "cursor": cursor,
- "include_deleted_data": include_deleted_data,
- "include_remote_data": include_remote_data,
- "include_remote_fields": include_remote_fields,
- "modified_after": serialize_datetime(modified_after) if modified_after is not None else None,
- "modified_before": serialize_datetime(modified_before) if modified_before is not None else None,
- "page_size": page_size,
- "remote_id": remote_id,
- }
- ),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "created_after": serialize_datetime(created_after) if created_after is not None else None,
+ "created_before": serialize_datetime(created_before) if created_before is not None else None,
+ "cursor": cursor,
+ "include_deleted_data": include_deleted_data,
+ "include_remote_data": include_remote_data,
+ "include_remote_fields": include_remote_fields,
+ "modified_after": serialize_datetime(modified_after) if modified_after is not None else None,
+ "modified_before": serialize_datetime(modified_before) if modified_before is not None else None,
+ "page_size": page_size,
+ "remote_id": remote_id,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(PaginatedCustomObjectList, _response.json()) # type: ignore
@@ -382,6 +502,7 @@ async def custom_object_classes_custom_objects_create(
is_debug_mode: typing.Optional[bool] = None,
run_async: typing.Optional[bool] = None,
model: CustomObjectRequest,
+ request_options: typing.Optional[RequestOptions] = None,
) -> CrmCustomObjectResponse:
"""
Creates a `CustomObject` object with the given values.
@@ -394,6 +515,8 @@ async def custom_object_classes_custom_objects_create(
- run_async: typing.Optional[bool]. Whether or not third-party updates should be run asynchronously.
- model: CustomObjectRequest.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import AsyncMerge
from merge.resources.crm import CustomObjectRequest
@@ -403,9 +526,9 @@ async def custom_object_classes_custom_objects_create(
api_key="YOUR_API_KEY",
)
await client.crm.custom_objects.custom_object_classes_custom_objects_create(
- custom_object_class_id="custom-object-class-id",
+ custom_object_class_id="string",
model=CustomObjectRequest(
- fields={},
+ fields={"string": {}},
),
)
"""
@@ -415,10 +538,36 @@ async def custom_object_classes_custom_objects_create(
f"{self._client_wrapper.get_base_url()}/",
f"api/crm/v1/custom-object-classes/{custom_object_class_id}/custom-objects",
),
- params=remove_none_from_dict({"is_debug_mode": is_debug_mode, "run_async": run_async}),
- json=jsonable_encoder({"model": model}),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "is_debug_mode": is_debug_mode,
+ "run_async": run_async,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ json=jsonable_encoder({"model": model})
+ if request_options is None or request_options.get("additional_body_parameters") is None
+ else {
+ **jsonable_encoder({"model": model}),
+ **(jsonable_encoder(remove_none_from_dict(request_options.get("additional_body_parameters", {})))),
+ },
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(CrmCustomObjectResponse, _response.json()) # type: ignore
@@ -435,6 +584,7 @@ async def custom_object_classes_custom_objects_retrieve(
*,
include_remote_data: typing.Optional[bool] = None,
include_remote_fields: typing.Optional[bool] = None,
+ request_options: typing.Optional[RequestOptions] = None,
) -> CustomObject:
"""
Returns a `CustomObject` object with the given `id`.
@@ -447,6 +597,8 @@ async def custom_object_classes_custom_objects_retrieve(
- include_remote_data: typing.Optional[bool]. Whether to include the original data Merge fetched from the third-party to produce these models.
- include_remote_fields: typing.Optional[bool]. Whether to include all remote fields, including fields that Merge did not map to common models, in a normalized format.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import AsyncMerge
@@ -455,8 +607,8 @@ async def custom_object_classes_custom_objects_retrieve(
api_key="YOUR_API_KEY",
)
await client.crm.custom_objects.custom_object_classes_custom_objects_retrieve(
- custom_object_class_id="custom-object-class-id",
- id="id",
+ custom_object_class_id="string",
+ id="string",
)
"""
_response = await self._client_wrapper.httpx_client.request(
@@ -465,11 +617,30 @@ async def custom_object_classes_custom_objects_retrieve(
f"{self._client_wrapper.get_base_url()}/",
f"api/crm/v1/custom-object-classes/{custom_object_class_id}/custom-objects/{id}",
),
- params=remove_none_from_dict(
- {"include_remote_data": include_remote_data, "include_remote_fields": include_remote_fields}
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "include_remote_data": include_remote_data,
+ "include_remote_fields": include_remote_fields,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(CustomObject, _response.json()) # type: ignore
@@ -480,7 +651,7 @@ async def custom_object_classes_custom_objects_retrieve(
raise ApiError(status_code=_response.status_code, body=_response_json)
async def custom_object_classes_custom_objects_meta_patch_retrieve(
- self, custom_object_class_id: str, id: str
+ self, custom_object_class_id: str, id: str, *, request_options: typing.Optional[RequestOptions] = None
) -> MetaResponse:
"""
Returns metadata for `CRMCustomObject` PATCHs.
@@ -489,6 +660,8 @@ async def custom_object_classes_custom_objects_meta_patch_retrieve(
- custom_object_class_id: str.
- id: str.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import AsyncMerge
@@ -497,8 +670,8 @@ async def custom_object_classes_custom_objects_meta_patch_retrieve(
api_key="YOUR_API_KEY",
)
await client.crm.custom_objects.custom_object_classes_custom_objects_meta_patch_retrieve(
- custom_object_class_id="custom-object-class-id",
- id="id",
+ custom_object_class_id="string",
+ id="string",
)
"""
_response = await self._client_wrapper.httpx_client.request(
@@ -507,8 +680,20 @@ async def custom_object_classes_custom_objects_meta_patch_retrieve(
f"{self._client_wrapper.get_base_url()}/",
f"api/crm/v1/custom-object-classes/{custom_object_class_id}/custom-objects/meta/patch/{id}",
),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ request_options.get("additional_query_parameters") if request_options is not None else None
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(MetaResponse, _response.json()) # type: ignore
@@ -519,13 +704,15 @@ async def custom_object_classes_custom_objects_meta_patch_retrieve(
raise ApiError(status_code=_response.status_code, body=_response_json)
async def custom_object_classes_custom_objects_meta_post_retrieve(
- self, custom_object_class_id: str
+ self, custom_object_class_id: str, *, request_options: typing.Optional[RequestOptions] = None
) -> MetaResponse:
"""
Returns metadata for `CRMCustomObject` POSTs.
Parameters:
- custom_object_class_id: str.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import AsyncMerge
@@ -534,7 +721,7 @@ async def custom_object_classes_custom_objects_meta_post_retrieve(
api_key="YOUR_API_KEY",
)
await client.crm.custom_objects.custom_object_classes_custom_objects_meta_post_retrieve(
- custom_object_class_id="custom-object-class-id",
+ custom_object_class_id="string",
)
"""
_response = await self._client_wrapper.httpx_client.request(
@@ -543,8 +730,20 @@ async def custom_object_classes_custom_objects_meta_post_retrieve(
f"{self._client_wrapper.get_base_url()}/",
f"api/crm/v1/custom-object-classes/{custom_object_class_id}/custom-objects/meta/post",
),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ request_options.get("additional_query_parameters") if request_options is not None else None
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(MetaResponse, _response.json()) # type: ignore
diff --git a/src/merge/resources/crm/resources/delete_account/client.py b/src/merge/resources/crm/resources/delete_account/client.py
index c3c9d275..de84e6fe 100644
--- a/src/merge/resources/crm/resources/delete_account/client.py
+++ b/src/merge/resources/crm/resources/delete_account/client.py
@@ -1,20 +1,26 @@
# This file was auto-generated by Fern from our API Definition.
+import typing
import urllib.parse
from json.decoder import JSONDecodeError
from .....core.api_error import ApiError
from .....core.client_wrapper import AsyncClientWrapper, SyncClientWrapper
+from .....core.jsonable_encoder import jsonable_encoder
+from .....core.remove_none_from_dict import remove_none_from_dict
+from .....core.request_options import RequestOptions
class DeleteAccountClient:
def __init__(self, *, client_wrapper: SyncClientWrapper):
self._client_wrapper = client_wrapper
- def delete(self) -> None:
+ def delete(self, *, request_options: typing.Optional[RequestOptions] = None) -> None:
"""
Delete a linked account.
+ Parameters:
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import Merge
@@ -27,8 +33,23 @@ def delete(self) -> None:
_response = self._client_wrapper.httpx_client.request(
"POST",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/crm/v1/delete-account"),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ request_options.get("additional_query_parameters") if request_options is not None else None
+ ),
+ json=jsonable_encoder(remove_none_from_dict(request_options.get("additional_body_parameters", {})))
+ if request_options is not None
+ else None,
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return
@@ -43,10 +64,12 @@ class AsyncDeleteAccountClient:
def __init__(self, *, client_wrapper: AsyncClientWrapper):
self._client_wrapper = client_wrapper
- async def delete(self) -> None:
+ async def delete(self, *, request_options: typing.Optional[RequestOptions] = None) -> None:
"""
Delete a linked account.
+ Parameters:
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import AsyncMerge
@@ -59,8 +82,23 @@ async def delete(self) -> None:
_response = await self._client_wrapper.httpx_client.request(
"POST",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/crm/v1/delete-account"),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ request_options.get("additional_query_parameters") if request_options is not None else None
+ ),
+ json=jsonable_encoder(remove_none_from_dict(request_options.get("additional_body_parameters", {})))
+ if request_options is not None
+ else None,
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return
diff --git a/src/merge/resources/crm/resources/engagement_types/client.py b/src/merge/resources/crm/resources/engagement_types/client.py
index 2e8e171f..603ea60d 100644
--- a/src/merge/resources/crm/resources/engagement_types/client.py
+++ b/src/merge/resources/crm/resources/engagement_types/client.py
@@ -8,7 +8,9 @@
from .....core.api_error import ApiError
from .....core.client_wrapper import AsyncClientWrapper, SyncClientWrapper
from .....core.datetime_utils import serialize_datetime
+from .....core.jsonable_encoder import jsonable_encoder
from .....core.remove_none_from_dict import remove_none_from_dict
+from .....core.request_options import RequestOptions
from ...types.engagement_type import EngagementType
from ...types.paginated_engagement_type_list import PaginatedEngagementTypeList
from ...types.paginated_remote_field_class_list import PaginatedRemoteFieldClassList
@@ -36,6 +38,7 @@ def list(
modified_before: typing.Optional[dt.datetime] = None,
page_size: typing.Optional[int] = None,
remote_id: typing.Optional[str] = None,
+ request_options: typing.Optional[RequestOptions] = None,
) -> PaginatedEngagementTypeList:
"""
Returns a list of `EngagementType` objects.
@@ -60,6 +63,8 @@ def list(
- page_size: typing.Optional[int]. Number of results to return per page.
- remote_id: typing.Optional[str]. The API provider's ID for the given object.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import Merge
@@ -72,22 +77,38 @@ def list(
_response = self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/crm/v1/engagement-types"),
- params=remove_none_from_dict(
- {
- "created_after": serialize_datetime(created_after) if created_after is not None else None,
- "created_before": serialize_datetime(created_before) if created_before is not None else None,
- "cursor": cursor,
- "include_deleted_data": include_deleted_data,
- "include_remote_data": include_remote_data,
- "include_remote_fields": include_remote_fields,
- "modified_after": serialize_datetime(modified_after) if modified_after is not None else None,
- "modified_before": serialize_datetime(modified_before) if modified_before is not None else None,
- "page_size": page_size,
- "remote_id": remote_id,
- }
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "created_after": serialize_datetime(created_after) if created_after is not None else None,
+ "created_before": serialize_datetime(created_before) if created_before is not None else None,
+ "cursor": cursor,
+ "include_deleted_data": include_deleted_data,
+ "include_remote_data": include_remote_data,
+ "include_remote_fields": include_remote_fields,
+ "modified_after": serialize_datetime(modified_after) if modified_after is not None else None,
+ "modified_before": serialize_datetime(modified_before) if modified_before is not None else None,
+ "page_size": page_size,
+ "remote_id": remote_id,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(PaginatedEngagementTypeList, _response.json()) # type: ignore
@@ -103,6 +124,7 @@ def retrieve(
*,
include_remote_data: typing.Optional[bool] = None,
include_remote_fields: typing.Optional[bool] = None,
+ request_options: typing.Optional[RequestOptions] = None,
) -> EngagementType:
"""
Returns an `EngagementType` object with the given `id`.
@@ -113,6 +135,8 @@ def retrieve(
- include_remote_data: typing.Optional[bool]. Whether to include the original data Merge fetched from the third-party to produce these models.
- include_remote_fields: typing.Optional[bool]. Whether to include all remote fields, including fields that Merge did not map to common models, in a normalized format.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import Merge
@@ -121,17 +145,36 @@ def retrieve(
api_key="YOUR_API_KEY",
)
client.crm.engagement_types.retrieve(
- id="id",
+ id="string",
)
"""
_response = self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", f"api/crm/v1/engagement-types/{id}"),
- params=remove_none_from_dict(
- {"include_remote_data": include_remote_data, "include_remote_fields": include_remote_fields}
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "include_remote_data": include_remote_data,
+ "include_remote_fields": include_remote_fields,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(EngagementType, _response.json()) # type: ignore
@@ -149,6 +192,7 @@ def remote_field_classes_list(
include_remote_data: typing.Optional[bool] = None,
include_remote_fields: typing.Optional[bool] = None,
page_size: typing.Optional[int] = None,
+ request_options: typing.Optional[RequestOptions] = None,
) -> PaginatedRemoteFieldClassList:
"""
Returns a list of `RemoteFieldClass` objects.
@@ -163,6 +207,8 @@ def remote_field_classes_list(
- include_remote_fields: typing.Optional[bool]. Whether to include all remote fields, including fields that Merge did not map to common models, in a normalized format.
- page_size: typing.Optional[int]. Number of results to return per page.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import Merge
@@ -177,17 +223,33 @@ def remote_field_classes_list(
urllib.parse.urljoin(
f"{self._client_wrapper.get_base_url()}/", "api/crm/v1/engagement-types/remote-field-classes"
),
- params=remove_none_from_dict(
- {
- "cursor": cursor,
- "include_deleted_data": include_deleted_data,
- "include_remote_data": include_remote_data,
- "include_remote_fields": include_remote_fields,
- "page_size": page_size,
- }
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "cursor": cursor,
+ "include_deleted_data": include_deleted_data,
+ "include_remote_data": include_remote_data,
+ "include_remote_fields": include_remote_fields,
+ "page_size": page_size,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(PaginatedRemoteFieldClassList, _response.json()) # type: ignore
@@ -215,6 +277,7 @@ async def list(
modified_before: typing.Optional[dt.datetime] = None,
page_size: typing.Optional[int] = None,
remote_id: typing.Optional[str] = None,
+ request_options: typing.Optional[RequestOptions] = None,
) -> PaginatedEngagementTypeList:
"""
Returns a list of `EngagementType` objects.
@@ -239,6 +302,8 @@ async def list(
- page_size: typing.Optional[int]. Number of results to return per page.
- remote_id: typing.Optional[str]. The API provider's ID for the given object.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import AsyncMerge
@@ -251,22 +316,38 @@ async def list(
_response = await self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/crm/v1/engagement-types"),
- params=remove_none_from_dict(
- {
- "created_after": serialize_datetime(created_after) if created_after is not None else None,
- "created_before": serialize_datetime(created_before) if created_before is not None else None,
- "cursor": cursor,
- "include_deleted_data": include_deleted_data,
- "include_remote_data": include_remote_data,
- "include_remote_fields": include_remote_fields,
- "modified_after": serialize_datetime(modified_after) if modified_after is not None else None,
- "modified_before": serialize_datetime(modified_before) if modified_before is not None else None,
- "page_size": page_size,
- "remote_id": remote_id,
- }
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "created_after": serialize_datetime(created_after) if created_after is not None else None,
+ "created_before": serialize_datetime(created_before) if created_before is not None else None,
+ "cursor": cursor,
+ "include_deleted_data": include_deleted_data,
+ "include_remote_data": include_remote_data,
+ "include_remote_fields": include_remote_fields,
+ "modified_after": serialize_datetime(modified_after) if modified_after is not None else None,
+ "modified_before": serialize_datetime(modified_before) if modified_before is not None else None,
+ "page_size": page_size,
+ "remote_id": remote_id,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(PaginatedEngagementTypeList, _response.json()) # type: ignore
@@ -282,6 +363,7 @@ async def retrieve(
*,
include_remote_data: typing.Optional[bool] = None,
include_remote_fields: typing.Optional[bool] = None,
+ request_options: typing.Optional[RequestOptions] = None,
) -> EngagementType:
"""
Returns an `EngagementType` object with the given `id`.
@@ -292,6 +374,8 @@ async def retrieve(
- include_remote_data: typing.Optional[bool]. Whether to include the original data Merge fetched from the third-party to produce these models.
- include_remote_fields: typing.Optional[bool]. Whether to include all remote fields, including fields that Merge did not map to common models, in a normalized format.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import AsyncMerge
@@ -300,17 +384,36 @@ async def retrieve(
api_key="YOUR_API_KEY",
)
await client.crm.engagement_types.retrieve(
- id="id",
+ id="string",
)
"""
_response = await self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", f"api/crm/v1/engagement-types/{id}"),
- params=remove_none_from_dict(
- {"include_remote_data": include_remote_data, "include_remote_fields": include_remote_fields}
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "include_remote_data": include_remote_data,
+ "include_remote_fields": include_remote_fields,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(EngagementType, _response.json()) # type: ignore
@@ -328,6 +431,7 @@ async def remote_field_classes_list(
include_remote_data: typing.Optional[bool] = None,
include_remote_fields: typing.Optional[bool] = None,
page_size: typing.Optional[int] = None,
+ request_options: typing.Optional[RequestOptions] = None,
) -> PaginatedRemoteFieldClassList:
"""
Returns a list of `RemoteFieldClass` objects.
@@ -342,6 +446,8 @@ async def remote_field_classes_list(
- include_remote_fields: typing.Optional[bool]. Whether to include all remote fields, including fields that Merge did not map to common models, in a normalized format.
- page_size: typing.Optional[int]. Number of results to return per page.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import AsyncMerge
@@ -356,17 +462,33 @@ async def remote_field_classes_list(
urllib.parse.urljoin(
f"{self._client_wrapper.get_base_url()}/", "api/crm/v1/engagement-types/remote-field-classes"
),
- params=remove_none_from_dict(
- {
- "cursor": cursor,
- "include_deleted_data": include_deleted_data,
- "include_remote_data": include_remote_data,
- "include_remote_fields": include_remote_fields,
- "page_size": page_size,
- }
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "cursor": cursor,
+ "include_deleted_data": include_deleted_data,
+ "include_remote_data": include_remote_data,
+ "include_remote_fields": include_remote_fields,
+ "page_size": page_size,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(PaginatedRemoteFieldClassList, _response.json()) # type: ignore
diff --git a/src/merge/resources/crm/resources/engagements/client.py b/src/merge/resources/crm/resources/engagements/client.py
index 5466c729..b811f90a 100644
--- a/src/merge/resources/crm/resources/engagements/client.py
+++ b/src/merge/resources/crm/resources/engagements/client.py
@@ -10,6 +10,7 @@
from .....core.datetime_utils import serialize_datetime
from .....core.jsonable_encoder import jsonable_encoder
from .....core.remove_none_from_dict import remove_none_from_dict
+from .....core.request_options import RequestOptions
from ...types.engagement import Engagement
from ...types.engagement_request import EngagementRequest
from ...types.engagement_response import EngagementResponse
@@ -49,6 +50,7 @@ def list(
remote_id: typing.Optional[str] = None,
started_after: typing.Optional[dt.datetime] = None,
started_before: typing.Optional[dt.datetime] = None,
+ request_options: typing.Optional[RequestOptions] = None,
) -> PaginatedEngagementList:
"""
Returns a list of `Engagement` objects.
@@ -79,6 +81,8 @@ def list(
- started_after: typing.Optional[dt.datetime]. If provided, will only return engagements started after this datetime.
- started_before: typing.Optional[dt.datetime]. If provided, will only return engagements started before this datetime.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import Merge
from merge.resources.crm import EngagementsListRequestExpand
@@ -94,25 +98,41 @@ def list(
_response = self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/crm/v1/engagements"),
- params=remove_none_from_dict(
- {
- "created_after": serialize_datetime(created_after) if created_after is not None else None,
- "created_before": serialize_datetime(created_before) if created_before is not None else None,
- "cursor": cursor,
- "expand": expand,
- "include_deleted_data": include_deleted_data,
- "include_remote_data": include_remote_data,
- "include_remote_fields": include_remote_fields,
- "modified_after": serialize_datetime(modified_after) if modified_after is not None else None,
- "modified_before": serialize_datetime(modified_before) if modified_before is not None else None,
- "page_size": page_size,
- "remote_id": remote_id,
- "started_after": serialize_datetime(started_after) if started_after is not None else None,
- "started_before": serialize_datetime(started_before) if started_before is not None else None,
- }
- ),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "created_after": serialize_datetime(created_after) if created_after is not None else None,
+ "created_before": serialize_datetime(created_before) if created_before is not None else None,
+ "cursor": cursor,
+ "expand": expand,
+ "include_deleted_data": include_deleted_data,
+ "include_remote_data": include_remote_data,
+ "include_remote_fields": include_remote_fields,
+ "modified_after": serialize_datetime(modified_after) if modified_after is not None else None,
+ "modified_before": serialize_datetime(modified_before) if modified_before is not None else None,
+ "page_size": page_size,
+ "remote_id": remote_id,
+ "started_after": serialize_datetime(started_after) if started_after is not None else None,
+ "started_before": serialize_datetime(started_before) if started_before is not None else None,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(PaginatedEngagementList, _response.json()) # type: ignore
@@ -128,6 +148,7 @@ def create(
is_debug_mode: typing.Optional[bool] = None,
run_async: typing.Optional[bool] = None,
model: EngagementRequest,
+ request_options: typing.Optional[RequestOptions] = None,
) -> EngagementResponse:
"""
Creates an `Engagement` object with the given values.
@@ -138,6 +159,8 @@ def create(
- run_async: typing.Optional[bool]. Whether or not third-party updates should be run asynchronously.
- model: EngagementRequest.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
import datetime
@@ -164,10 +187,36 @@ def create(
_response = self._client_wrapper.httpx_client.request(
"POST",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/crm/v1/engagements"),
- params=remove_none_from_dict({"is_debug_mode": is_debug_mode, "run_async": run_async}),
- json=jsonable_encoder({"model": model}),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "is_debug_mode": is_debug_mode,
+ "run_async": run_async,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ json=jsonable_encoder({"model": model})
+ if request_options is None or request_options.get("additional_body_parameters") is None
+ else {
+ **jsonable_encoder({"model": model}),
+ **(jsonable_encoder(remove_none_from_dict(request_options.get("additional_body_parameters", {})))),
+ },
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(EngagementResponse, _response.json()) # type: ignore
@@ -184,6 +233,7 @@ def retrieve(
expand: typing.Optional[EngagementsRetrieveRequestExpand] = None,
include_remote_data: typing.Optional[bool] = None,
include_remote_fields: typing.Optional[bool] = None,
+ request_options: typing.Optional[RequestOptions] = None,
) -> Engagement:
"""
Returns an `Engagement` object with the given `id`.
@@ -196,6 +246,8 @@ def retrieve(
- include_remote_data: typing.Optional[bool]. Whether to include the original data Merge fetched from the third-party to produce these models.
- include_remote_fields: typing.Optional[bool]. Whether to include all remote fields, including fields that Merge did not map to common models, in a normalized format.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import Merge
from merge.resources.crm import EngagementsRetrieveRequestExpand
@@ -205,22 +257,38 @@ def retrieve(
api_key="YOUR_API_KEY",
)
client.crm.engagements.retrieve(
- id="id",
+ id="string",
expand=EngagementsRetrieveRequestExpand.ACCOUNT,
)
"""
_response = self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", f"api/crm/v1/engagements/{id}"),
- params=remove_none_from_dict(
- {
- "expand": expand,
- "include_remote_data": include_remote_data,
- "include_remote_fields": include_remote_fields,
- }
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "expand": expand,
+ "include_remote_data": include_remote_data,
+ "include_remote_fields": include_remote_fields,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(Engagement, _response.json()) # type: ignore
@@ -237,6 +305,7 @@ def partial_update(
is_debug_mode: typing.Optional[bool] = None,
run_async: typing.Optional[bool] = None,
model: PatchedEngagementRequest,
+ request_options: typing.Optional[RequestOptions] = None,
) -> EngagementResponse:
"""
Updates an `Engagement` object with the given `id`.
@@ -249,6 +318,8 @@ def partial_update(
- run_async: typing.Optional[bool]. Whether or not third-party updates should be run asynchronously.
- model: PatchedEngagementRequest.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
import datetime
@@ -260,7 +331,7 @@ def partial_update(
api_key="YOUR_API_KEY",
)
client.crm.engagements.partial_update(
- id="id",
+ id="string",
model=PatchedEngagementRequest(
owner="0358cbc6-2040-430a-848e-aafacbadf3aa",
content="Call for negotiation",
@@ -279,10 +350,36 @@ def partial_update(
_response = self._client_wrapper.httpx_client.request(
"PATCH",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", f"api/crm/v1/engagements/{id}"),
- params=remove_none_from_dict({"is_debug_mode": is_debug_mode, "run_async": run_async}),
- json=jsonable_encoder({"model": model}),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "is_debug_mode": is_debug_mode,
+ "run_async": run_async,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ json=jsonable_encoder({"model": model})
+ if request_options is None or request_options.get("additional_body_parameters") is None
+ else {
+ **jsonable_encoder({"model": model}),
+ **(jsonable_encoder(remove_none_from_dict(request_options.get("additional_body_parameters", {})))),
+ },
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(EngagementResponse, _response.json()) # type: ignore
@@ -292,12 +389,14 @@ def partial_update(
raise ApiError(status_code=_response.status_code, body=_response.text)
raise ApiError(status_code=_response.status_code, body=_response_json)
- def meta_patch_retrieve(self, id: str) -> MetaResponse:
+ def meta_patch_retrieve(self, id: str, *, request_options: typing.Optional[RequestOptions] = None) -> MetaResponse:
"""
Returns metadata for `Engagement` PATCHs.
Parameters:
- id: str.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import Merge
@@ -306,14 +405,26 @@ def meta_patch_retrieve(self, id: str) -> MetaResponse:
api_key="YOUR_API_KEY",
)
client.crm.engagements.meta_patch_retrieve(
- id="id",
+ id="string",
)
"""
_response = self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", f"api/crm/v1/engagements/meta/patch/{id}"),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ request_options.get("additional_query_parameters") if request_options is not None else None
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(MetaResponse, _response.json()) # type: ignore
@@ -323,10 +434,12 @@ def meta_patch_retrieve(self, id: str) -> MetaResponse:
raise ApiError(status_code=_response.status_code, body=_response.text)
raise ApiError(status_code=_response.status_code, body=_response_json)
- def meta_post_retrieve(self) -> MetaResponse:
+ def meta_post_retrieve(self, *, request_options: typing.Optional[RequestOptions] = None) -> MetaResponse:
"""
Returns metadata for `Engagement` POSTs.
+ Parameters:
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import Merge
@@ -339,8 +452,20 @@ def meta_post_retrieve(self) -> MetaResponse:
_response = self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/crm/v1/engagements/meta/post"),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ request_options.get("additional_query_parameters") if request_options is not None else None
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(MetaResponse, _response.json()) # type: ignore
@@ -358,6 +483,7 @@ def remote_field_classes_list(
include_remote_data: typing.Optional[bool] = None,
include_remote_fields: typing.Optional[bool] = None,
page_size: typing.Optional[int] = None,
+ request_options: typing.Optional[RequestOptions] = None,
) -> PaginatedRemoteFieldClassList:
"""
Returns a list of `RemoteFieldClass` objects.
@@ -372,6 +498,8 @@ def remote_field_classes_list(
- include_remote_fields: typing.Optional[bool]. Whether to include all remote fields, including fields that Merge did not map to common models, in a normalized format.
- page_size: typing.Optional[int]. Number of results to return per page.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import Merge
@@ -386,17 +514,33 @@ def remote_field_classes_list(
urllib.parse.urljoin(
f"{self._client_wrapper.get_base_url()}/", "api/crm/v1/engagements/remote-field-classes"
),
- params=remove_none_from_dict(
- {
- "cursor": cursor,
- "include_deleted_data": include_deleted_data,
- "include_remote_data": include_remote_data,
- "include_remote_fields": include_remote_fields,
- "page_size": page_size,
- }
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "cursor": cursor,
+ "include_deleted_data": include_deleted_data,
+ "include_remote_data": include_remote_data,
+ "include_remote_fields": include_remote_fields,
+ "page_size": page_size,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(PaginatedRemoteFieldClassList, _response.json()) # type: ignore
@@ -427,6 +571,7 @@ async def list(
remote_id: typing.Optional[str] = None,
started_after: typing.Optional[dt.datetime] = None,
started_before: typing.Optional[dt.datetime] = None,
+ request_options: typing.Optional[RequestOptions] = None,
) -> PaginatedEngagementList:
"""
Returns a list of `Engagement` objects.
@@ -457,6 +602,8 @@ async def list(
- started_after: typing.Optional[dt.datetime]. If provided, will only return engagements started after this datetime.
- started_before: typing.Optional[dt.datetime]. If provided, will only return engagements started before this datetime.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import AsyncMerge
from merge.resources.crm import EngagementsListRequestExpand
@@ -472,25 +619,41 @@ async def list(
_response = await self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/crm/v1/engagements"),
- params=remove_none_from_dict(
- {
- "created_after": serialize_datetime(created_after) if created_after is not None else None,
- "created_before": serialize_datetime(created_before) if created_before is not None else None,
- "cursor": cursor,
- "expand": expand,
- "include_deleted_data": include_deleted_data,
- "include_remote_data": include_remote_data,
- "include_remote_fields": include_remote_fields,
- "modified_after": serialize_datetime(modified_after) if modified_after is not None else None,
- "modified_before": serialize_datetime(modified_before) if modified_before is not None else None,
- "page_size": page_size,
- "remote_id": remote_id,
- "started_after": serialize_datetime(started_after) if started_after is not None else None,
- "started_before": serialize_datetime(started_before) if started_before is not None else None,
- }
- ),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "created_after": serialize_datetime(created_after) if created_after is not None else None,
+ "created_before": serialize_datetime(created_before) if created_before is not None else None,
+ "cursor": cursor,
+ "expand": expand,
+ "include_deleted_data": include_deleted_data,
+ "include_remote_data": include_remote_data,
+ "include_remote_fields": include_remote_fields,
+ "modified_after": serialize_datetime(modified_after) if modified_after is not None else None,
+ "modified_before": serialize_datetime(modified_before) if modified_before is not None else None,
+ "page_size": page_size,
+ "remote_id": remote_id,
+ "started_after": serialize_datetime(started_after) if started_after is not None else None,
+ "started_before": serialize_datetime(started_before) if started_before is not None else None,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(PaginatedEngagementList, _response.json()) # type: ignore
@@ -506,6 +669,7 @@ async def create(
is_debug_mode: typing.Optional[bool] = None,
run_async: typing.Optional[bool] = None,
model: EngagementRequest,
+ request_options: typing.Optional[RequestOptions] = None,
) -> EngagementResponse:
"""
Creates an `Engagement` object with the given values.
@@ -516,6 +680,8 @@ async def create(
- run_async: typing.Optional[bool]. Whether or not third-party updates should be run asynchronously.
- model: EngagementRequest.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
import datetime
@@ -542,10 +708,36 @@ async def create(
_response = await self._client_wrapper.httpx_client.request(
"POST",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/crm/v1/engagements"),
- params=remove_none_from_dict({"is_debug_mode": is_debug_mode, "run_async": run_async}),
- json=jsonable_encoder({"model": model}),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "is_debug_mode": is_debug_mode,
+ "run_async": run_async,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ json=jsonable_encoder({"model": model})
+ if request_options is None or request_options.get("additional_body_parameters") is None
+ else {
+ **jsonable_encoder({"model": model}),
+ **(jsonable_encoder(remove_none_from_dict(request_options.get("additional_body_parameters", {})))),
+ },
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(EngagementResponse, _response.json()) # type: ignore
@@ -562,6 +754,7 @@ async def retrieve(
expand: typing.Optional[EngagementsRetrieveRequestExpand] = None,
include_remote_data: typing.Optional[bool] = None,
include_remote_fields: typing.Optional[bool] = None,
+ request_options: typing.Optional[RequestOptions] = None,
) -> Engagement:
"""
Returns an `Engagement` object with the given `id`.
@@ -574,6 +767,8 @@ async def retrieve(
- include_remote_data: typing.Optional[bool]. Whether to include the original data Merge fetched from the third-party to produce these models.
- include_remote_fields: typing.Optional[bool]. Whether to include all remote fields, including fields that Merge did not map to common models, in a normalized format.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import AsyncMerge
from merge.resources.crm import EngagementsRetrieveRequestExpand
@@ -583,22 +778,38 @@ async def retrieve(
api_key="YOUR_API_KEY",
)
await client.crm.engagements.retrieve(
- id="id",
+ id="string",
expand=EngagementsRetrieveRequestExpand.ACCOUNT,
)
"""
_response = await self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", f"api/crm/v1/engagements/{id}"),
- params=remove_none_from_dict(
- {
- "expand": expand,
- "include_remote_data": include_remote_data,
- "include_remote_fields": include_remote_fields,
- }
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "expand": expand,
+ "include_remote_data": include_remote_data,
+ "include_remote_fields": include_remote_fields,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(Engagement, _response.json()) # type: ignore
@@ -615,6 +826,7 @@ async def partial_update(
is_debug_mode: typing.Optional[bool] = None,
run_async: typing.Optional[bool] = None,
model: PatchedEngagementRequest,
+ request_options: typing.Optional[RequestOptions] = None,
) -> EngagementResponse:
"""
Updates an `Engagement` object with the given `id`.
@@ -627,6 +839,8 @@ async def partial_update(
- run_async: typing.Optional[bool]. Whether or not third-party updates should be run asynchronously.
- model: PatchedEngagementRequest.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
import datetime
@@ -638,7 +852,7 @@ async def partial_update(
api_key="YOUR_API_KEY",
)
await client.crm.engagements.partial_update(
- id="id",
+ id="string",
model=PatchedEngagementRequest(
owner="0358cbc6-2040-430a-848e-aafacbadf3aa",
content="Call for negotiation",
@@ -657,10 +871,36 @@ async def partial_update(
_response = await self._client_wrapper.httpx_client.request(
"PATCH",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", f"api/crm/v1/engagements/{id}"),
- params=remove_none_from_dict({"is_debug_mode": is_debug_mode, "run_async": run_async}),
- json=jsonable_encoder({"model": model}),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "is_debug_mode": is_debug_mode,
+ "run_async": run_async,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ json=jsonable_encoder({"model": model})
+ if request_options is None or request_options.get("additional_body_parameters") is None
+ else {
+ **jsonable_encoder({"model": model}),
+ **(jsonable_encoder(remove_none_from_dict(request_options.get("additional_body_parameters", {})))),
+ },
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(EngagementResponse, _response.json()) # type: ignore
@@ -670,12 +910,16 @@ async def partial_update(
raise ApiError(status_code=_response.status_code, body=_response.text)
raise ApiError(status_code=_response.status_code, body=_response_json)
- async def meta_patch_retrieve(self, id: str) -> MetaResponse:
+ async def meta_patch_retrieve(
+ self, id: str, *, request_options: typing.Optional[RequestOptions] = None
+ ) -> MetaResponse:
"""
Returns metadata for `Engagement` PATCHs.
Parameters:
- id: str.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import AsyncMerge
@@ -684,14 +928,26 @@ async def meta_patch_retrieve(self, id: str) -> MetaResponse:
api_key="YOUR_API_KEY",
)
await client.crm.engagements.meta_patch_retrieve(
- id="id",
+ id="string",
)
"""
_response = await self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", f"api/crm/v1/engagements/meta/patch/{id}"),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ request_options.get("additional_query_parameters") if request_options is not None else None
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(MetaResponse, _response.json()) # type: ignore
@@ -701,10 +957,12 @@ async def meta_patch_retrieve(self, id: str) -> MetaResponse:
raise ApiError(status_code=_response.status_code, body=_response.text)
raise ApiError(status_code=_response.status_code, body=_response_json)
- async def meta_post_retrieve(self) -> MetaResponse:
+ async def meta_post_retrieve(self, *, request_options: typing.Optional[RequestOptions] = None) -> MetaResponse:
"""
Returns metadata for `Engagement` POSTs.
+ Parameters:
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import AsyncMerge
@@ -717,8 +975,20 @@ async def meta_post_retrieve(self) -> MetaResponse:
_response = await self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/crm/v1/engagements/meta/post"),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ request_options.get("additional_query_parameters") if request_options is not None else None
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(MetaResponse, _response.json()) # type: ignore
@@ -736,6 +1006,7 @@ async def remote_field_classes_list(
include_remote_data: typing.Optional[bool] = None,
include_remote_fields: typing.Optional[bool] = None,
page_size: typing.Optional[int] = None,
+ request_options: typing.Optional[RequestOptions] = None,
) -> PaginatedRemoteFieldClassList:
"""
Returns a list of `RemoteFieldClass` objects.
@@ -750,6 +1021,8 @@ async def remote_field_classes_list(
- include_remote_fields: typing.Optional[bool]. Whether to include all remote fields, including fields that Merge did not map to common models, in a normalized format.
- page_size: typing.Optional[int]. Number of results to return per page.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import AsyncMerge
@@ -764,17 +1037,33 @@ async def remote_field_classes_list(
urllib.parse.urljoin(
f"{self._client_wrapper.get_base_url()}/", "api/crm/v1/engagements/remote-field-classes"
),
- params=remove_none_from_dict(
- {
- "cursor": cursor,
- "include_deleted_data": include_deleted_data,
- "include_remote_data": include_remote_data,
- "include_remote_fields": include_remote_fields,
- "page_size": page_size,
- }
- ),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "cursor": cursor,
+ "include_deleted_data": include_deleted_data,
+ "include_remote_data": include_remote_data,
+ "include_remote_fields": include_remote_fields,
+ "page_size": page_size,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(PaginatedRemoteFieldClassList, _response.json()) # type: ignore
diff --git a/src/merge/resources/crm/resources/force_resync/client.py b/src/merge/resources/crm/resources/force_resync/client.py
index be6dcc92..228ccec1 100644
--- a/src/merge/resources/crm/resources/force_resync/client.py
+++ b/src/merge/resources/crm/resources/force_resync/client.py
@@ -6,6 +6,9 @@
from .....core.api_error import ApiError
from .....core.client_wrapper import AsyncClientWrapper, SyncClientWrapper
+from .....core.jsonable_encoder import jsonable_encoder
+from .....core.remove_none_from_dict import remove_none_from_dict
+from .....core.request_options import RequestOptions
from ...types.sync_status import SyncStatus
try:
@@ -18,10 +21,14 @@ class ForceResyncClient:
def __init__(self, *, client_wrapper: SyncClientWrapper):
self._client_wrapper = client_wrapper
- def sync_status_resync_create(self) -> typing.List[SyncStatus]:
+ def sync_status_resync_create(
+ self, *, request_options: typing.Optional[RequestOptions] = None
+ ) -> typing.List[SyncStatus]:
"""
Force re-sync of all models. This is available for all organizations via the dashboard. Force re-sync is also available programmatically via API for monthly, quarterly, and highest sync frequency customers on the Core, Professional, or Enterprise plans. Doing so will consume a sync credit for the relevant linked account.
+ Parameters:
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import Merge
@@ -34,8 +41,23 @@ def sync_status_resync_create(self) -> typing.List[SyncStatus]:
_response = self._client_wrapper.httpx_client.request(
"POST",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/crm/v1/sync-status/resync"),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ request_options.get("additional_query_parameters") if request_options is not None else None
+ ),
+ json=jsonable_encoder(remove_none_from_dict(request_options.get("additional_body_parameters", {})))
+ if request_options is not None
+ else None,
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(typing.List[SyncStatus], _response.json()) # type: ignore
@@ -50,10 +72,14 @@ class AsyncForceResyncClient:
def __init__(self, *, client_wrapper: AsyncClientWrapper):
self._client_wrapper = client_wrapper
- async def sync_status_resync_create(self) -> typing.List[SyncStatus]:
+ async def sync_status_resync_create(
+ self, *, request_options: typing.Optional[RequestOptions] = None
+ ) -> typing.List[SyncStatus]:
"""
Force re-sync of all models. This is available for all organizations via the dashboard. Force re-sync is also available programmatically via API for monthly, quarterly, and highest sync frequency customers on the Core, Professional, or Enterprise plans. Doing so will consume a sync credit for the relevant linked account.
+ Parameters:
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import AsyncMerge
@@ -66,8 +92,23 @@ async def sync_status_resync_create(self) -> typing.List[SyncStatus]:
_response = await self._client_wrapper.httpx_client.request(
"POST",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/crm/v1/sync-status/resync"),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ request_options.get("additional_query_parameters") if request_options is not None else None
+ ),
+ json=jsonable_encoder(remove_none_from_dict(request_options.get("additional_body_parameters", {})))
+ if request_options is not None
+ else None,
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(typing.List[SyncStatus], _response.json()) # type: ignore
diff --git a/src/merge/resources/crm/resources/generate_key/client.py b/src/merge/resources/crm/resources/generate_key/client.py
index 5a284bef..09851a61 100644
--- a/src/merge/resources/crm/resources/generate_key/client.py
+++ b/src/merge/resources/crm/resources/generate_key/client.py
@@ -7,6 +7,8 @@
from .....core.api_error import ApiError
from .....core.client_wrapper import AsyncClientWrapper, SyncClientWrapper
from .....core.jsonable_encoder import jsonable_encoder
+from .....core.remove_none_from_dict import remove_none_from_dict
+from .....core.request_options import RequestOptions
from ...types.remote_key import RemoteKey
try:
@@ -22,12 +24,14 @@ class GenerateKeyClient:
def __init__(self, *, client_wrapper: SyncClientWrapper):
self._client_wrapper = client_wrapper
- def create(self, *, name: str) -> RemoteKey:
+ def create(self, *, name: str, request_options: typing.Optional[RequestOptions] = None) -> RemoteKey:
"""
Create a remote key.
Parameters:
- name: str.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import Merge
@@ -42,9 +46,26 @@ def create(self, *, name: str) -> RemoteKey:
_response = self._client_wrapper.httpx_client.request(
"POST",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/crm/v1/generate-key"),
- json=jsonable_encoder({"name": name}),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ request_options.get("additional_query_parameters") if request_options is not None else None
+ ),
+ json=jsonable_encoder({"name": name})
+ if request_options is None or request_options.get("additional_body_parameters") is None
+ else {
+ **jsonable_encoder({"name": name}),
+ **(jsonable_encoder(remove_none_from_dict(request_options.get("additional_body_parameters", {})))),
+ },
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(RemoteKey, _response.json()) # type: ignore
@@ -59,12 +80,14 @@ class AsyncGenerateKeyClient:
def __init__(self, *, client_wrapper: AsyncClientWrapper):
self._client_wrapper = client_wrapper
- async def create(self, *, name: str) -> RemoteKey:
+ async def create(self, *, name: str, request_options: typing.Optional[RequestOptions] = None) -> RemoteKey:
"""
Create a remote key.
Parameters:
- name: str.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import AsyncMerge
@@ -79,9 +102,26 @@ async def create(self, *, name: str) -> RemoteKey:
_response = await self._client_wrapper.httpx_client.request(
"POST",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/crm/v1/generate-key"),
- json=jsonable_encoder({"name": name}),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ request_options.get("additional_query_parameters") if request_options is not None else None
+ ),
+ json=jsonable_encoder({"name": name})
+ if request_options is None or request_options.get("additional_body_parameters") is None
+ else {
+ **jsonable_encoder({"name": name}),
+ **(jsonable_encoder(remove_none_from_dict(request_options.get("additional_body_parameters", {})))),
+ },
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(RemoteKey, _response.json()) # type: ignore
diff --git a/src/merge/resources/crm/resources/issues/client.py b/src/merge/resources/crm/resources/issues/client.py
index d55ade27..da3427f4 100644
--- a/src/merge/resources/crm/resources/issues/client.py
+++ b/src/merge/resources/crm/resources/issues/client.py
@@ -8,7 +8,9 @@
from .....core.api_error import ApiError
from .....core.client_wrapper import AsyncClientWrapper, SyncClientWrapper
from .....core.datetime_utils import serialize_datetime
+from .....core.jsonable_encoder import jsonable_encoder
from .....core.remove_none_from_dict import remove_none_from_dict
+from .....core.request_options import RequestOptions
from ...types.issue import Issue
from ...types.paginated_issue_list import PaginatedIssueList
from .types.issues_list_request_status import IssuesListRequestStatus
@@ -39,6 +41,7 @@ def list(
page_size: typing.Optional[int] = None,
start_date: typing.Optional[str] = None,
status: typing.Optional[IssuesListRequestStatus] = None,
+ request_options: typing.Optional[RequestOptions] = None,
) -> PaginatedIssueList:
"""
Gets issues.
@@ -71,7 +74,9 @@ def list(
- status: typing.Optional[IssuesListRequestStatus]. Status of the issue. Options: ('ONGOING', 'RESOLVED')
- `ONGOING` - ONGOING
- - `RESOLVED` - RESOLVED---
+ - `RESOLVED` - RESOLVED
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
+ ---
from merge.client import Merge
from merge.resources.crm import IssuesListRequestStatus
@@ -86,33 +91,49 @@ def list(
_response = self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/crm/v1/issues"),
- params=remove_none_from_dict(
- {
- "account_token": account_token,
- "cursor": cursor,
- "end_date": end_date,
- "end_user_organization_name": end_user_organization_name,
- "first_incident_time_after": serialize_datetime(first_incident_time_after)
- if first_incident_time_after is not None
- else None,
- "first_incident_time_before": serialize_datetime(first_incident_time_before)
- if first_incident_time_before is not None
- else None,
- "include_muted": include_muted,
- "integration_name": integration_name,
- "last_incident_time_after": serialize_datetime(last_incident_time_after)
- if last_incident_time_after is not None
- else None,
- "last_incident_time_before": serialize_datetime(last_incident_time_before)
- if last_incident_time_before is not None
- else None,
- "page_size": page_size,
- "start_date": start_date,
- "status": status,
- }
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "account_token": account_token,
+ "cursor": cursor,
+ "end_date": end_date,
+ "end_user_organization_name": end_user_organization_name,
+ "first_incident_time_after": serialize_datetime(first_incident_time_after)
+ if first_incident_time_after is not None
+ else None,
+ "first_incident_time_before": serialize_datetime(first_incident_time_before)
+ if first_incident_time_before is not None
+ else None,
+ "include_muted": include_muted,
+ "integration_name": integration_name,
+ "last_incident_time_after": serialize_datetime(last_incident_time_after)
+ if last_incident_time_after is not None
+ else None,
+ "last_incident_time_before": serialize_datetime(last_incident_time_before)
+ if last_incident_time_before is not None
+ else None,
+ "page_size": page_size,
+ "start_date": start_date,
+ "status": status,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(PaginatedIssueList, _response.json()) # type: ignore
@@ -122,12 +143,14 @@ def list(
raise ApiError(status_code=_response.status_code, body=_response.text)
raise ApiError(status_code=_response.status_code, body=_response_json)
- def retrieve(self, id: str) -> Issue:
+ def retrieve(self, id: str, *, request_options: typing.Optional[RequestOptions] = None) -> Issue:
"""
Get a specific issue.
Parameters:
- id: str.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import Merge
@@ -136,14 +159,26 @@ def retrieve(self, id: str) -> Issue:
api_key="YOUR_API_KEY",
)
client.crm.issues.retrieve(
- id="id",
+ id="string",
)
"""
_response = self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", f"api/crm/v1/issues/{id}"),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ request_options.get("additional_query_parameters") if request_options is not None else None
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(Issue, _response.json()) # type: ignore
@@ -174,6 +209,7 @@ async def list(
page_size: typing.Optional[int] = None,
start_date: typing.Optional[str] = None,
status: typing.Optional[IssuesListRequestStatus] = None,
+ request_options: typing.Optional[RequestOptions] = None,
) -> PaginatedIssueList:
"""
Gets issues.
@@ -206,7 +242,9 @@ async def list(
- status: typing.Optional[IssuesListRequestStatus]. Status of the issue. Options: ('ONGOING', 'RESOLVED')
- `ONGOING` - ONGOING
- - `RESOLVED` - RESOLVED---
+ - `RESOLVED` - RESOLVED
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
+ ---
from merge.client import AsyncMerge
from merge.resources.crm import IssuesListRequestStatus
@@ -221,33 +259,49 @@ async def list(
_response = await self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/crm/v1/issues"),
- params=remove_none_from_dict(
- {
- "account_token": account_token,
- "cursor": cursor,
- "end_date": end_date,
- "end_user_organization_name": end_user_organization_name,
- "first_incident_time_after": serialize_datetime(first_incident_time_after)
- if first_incident_time_after is not None
- else None,
- "first_incident_time_before": serialize_datetime(first_incident_time_before)
- if first_incident_time_before is not None
- else None,
- "include_muted": include_muted,
- "integration_name": integration_name,
- "last_incident_time_after": serialize_datetime(last_incident_time_after)
- if last_incident_time_after is not None
- else None,
- "last_incident_time_before": serialize_datetime(last_incident_time_before)
- if last_incident_time_before is not None
- else None,
- "page_size": page_size,
- "start_date": start_date,
- "status": status,
- }
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "account_token": account_token,
+ "cursor": cursor,
+ "end_date": end_date,
+ "end_user_organization_name": end_user_organization_name,
+ "first_incident_time_after": serialize_datetime(first_incident_time_after)
+ if first_incident_time_after is not None
+ else None,
+ "first_incident_time_before": serialize_datetime(first_incident_time_before)
+ if first_incident_time_before is not None
+ else None,
+ "include_muted": include_muted,
+ "integration_name": integration_name,
+ "last_incident_time_after": serialize_datetime(last_incident_time_after)
+ if last_incident_time_after is not None
+ else None,
+ "last_incident_time_before": serialize_datetime(last_incident_time_before)
+ if last_incident_time_before is not None
+ else None,
+ "page_size": page_size,
+ "start_date": start_date,
+ "status": status,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(PaginatedIssueList, _response.json()) # type: ignore
@@ -257,12 +311,14 @@ async def list(
raise ApiError(status_code=_response.status_code, body=_response.text)
raise ApiError(status_code=_response.status_code, body=_response_json)
- async def retrieve(self, id: str) -> Issue:
+ async def retrieve(self, id: str, *, request_options: typing.Optional[RequestOptions] = None) -> Issue:
"""
Get a specific issue.
Parameters:
- id: str.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import AsyncMerge
@@ -271,14 +327,26 @@ async def retrieve(self, id: str) -> Issue:
api_key="YOUR_API_KEY",
)
await client.crm.issues.retrieve(
- id="id",
+ id="string",
)
"""
_response = await self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", f"api/crm/v1/issues/{id}"),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ request_options.get("additional_query_parameters") if request_options is not None else None
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(Issue, _response.json()) # type: ignore
diff --git a/src/merge/resources/crm/resources/leads/client.py b/src/merge/resources/crm/resources/leads/client.py
index 7331c233..84a1f65d 100644
--- a/src/merge/resources/crm/resources/leads/client.py
+++ b/src/merge/resources/crm/resources/leads/client.py
@@ -10,6 +10,7 @@
from .....core.datetime_utils import serialize_datetime
from .....core.jsonable_encoder import jsonable_encoder
from .....core.remove_none_from_dict import remove_none_from_dict
+from .....core.request_options import RequestOptions
from ...types.lead import Lead
from ...types.lead_request import LeadRequest
from ...types.lead_response import LeadResponse
@@ -51,6 +52,7 @@ def list(
page_size: typing.Optional[int] = None,
phone_numbers: typing.Optional[str] = None,
remote_id: typing.Optional[str] = None,
+ request_options: typing.Optional[RequestOptions] = None,
) -> PaginatedLeadList:
"""
Returns a list of `Lead` objects.
@@ -87,6 +89,8 @@ def list(
- phone_numbers: typing.Optional[str]. If provided, will only return contacts matching the phone numbers; multiple phone numbers can be separated by commas.
- remote_id: typing.Optional[str]. The API provider's ID for the given object.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import Merge
from merge.resources.crm import LeadsListRequestExpand
@@ -102,28 +106,44 @@ def list(
_response = self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/crm/v1/leads"),
- params=remove_none_from_dict(
- {
- "converted_account_id": converted_account_id,
- "converted_contact_id": converted_contact_id,
- "created_after": serialize_datetime(created_after) if created_after is not None else None,
- "created_before": serialize_datetime(created_before) if created_before is not None else None,
- "cursor": cursor,
- "email_addresses": email_addresses,
- "expand": expand,
- "include_deleted_data": include_deleted_data,
- "include_remote_data": include_remote_data,
- "include_remote_fields": include_remote_fields,
- "modified_after": serialize_datetime(modified_after) if modified_after is not None else None,
- "modified_before": serialize_datetime(modified_before) if modified_before is not None else None,
- "owner_id": owner_id,
- "page_size": page_size,
- "phone_numbers": phone_numbers,
- "remote_id": remote_id,
- }
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "converted_account_id": converted_account_id,
+ "converted_contact_id": converted_contact_id,
+ "created_after": serialize_datetime(created_after) if created_after is not None else None,
+ "created_before": serialize_datetime(created_before) if created_before is not None else None,
+ "cursor": cursor,
+ "email_addresses": email_addresses,
+ "expand": expand,
+ "include_deleted_data": include_deleted_data,
+ "include_remote_data": include_remote_data,
+ "include_remote_fields": include_remote_fields,
+ "modified_after": serialize_datetime(modified_after) if modified_after is not None else None,
+ "modified_before": serialize_datetime(modified_before) if modified_before is not None else None,
+ "owner_id": owner_id,
+ "page_size": page_size,
+ "phone_numbers": phone_numbers,
+ "remote_id": remote_id,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(PaginatedLeadList, _response.json()) # type: ignore
@@ -139,6 +159,7 @@ def create(
is_debug_mode: typing.Optional[bool] = None,
run_async: typing.Optional[bool] = None,
model: LeadRequest,
+ request_options: typing.Optional[RequestOptions] = None,
) -> LeadResponse:
"""
Creates a `Lead` object with the given values.
@@ -149,16 +170,13 @@ def create(
- run_async: typing.Optional[bool]. Whether or not third-party updates should be run asynchronously.
- model: LeadRequest.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
import datetime
from merge.client import Merge
- from merge.resources.crm import (
- AddressRequest,
- EmailAddressRequest,
- LeadRequest,
- PhoneNumberRequest,
- )
+ from merge.resources.crm import LeadRequest
client = Merge(
account_token="YOUR_ACCOUNT_TOKEN",
@@ -171,27 +189,6 @@ def create(
company="Merge API",
first_name="Gil",
last_name="Feig",
- addresses=[
- AddressRequest(
- street_1="50 Bowling Green Dr",
- street_2="Golden Gate Park",
- city="San Francisco",
- state="CA",
- postal_code="94122",
- )
- ],
- email_addresses=[
- EmailAddressRequest(
- email_address="merge_is_hiring@merge.dev",
- email_address_type="Work",
- )
- ],
- phone_numbers=[
- PhoneNumberRequest(
- phone_number="+3198675309",
- phone_number_type="Mobile",
- )
- ],
converted_date=datetime.datetime.fromisoformat(
"2022-03-10 00:00:00+00:00",
),
@@ -201,10 +198,36 @@ def create(
_response = self._client_wrapper.httpx_client.request(
"POST",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/crm/v1/leads"),
- params=remove_none_from_dict({"is_debug_mode": is_debug_mode, "run_async": run_async}),
- json=jsonable_encoder({"model": model}),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "is_debug_mode": is_debug_mode,
+ "run_async": run_async,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ json=jsonable_encoder({"model": model})
+ if request_options is None or request_options.get("additional_body_parameters") is None
+ else {
+ **jsonable_encoder({"model": model}),
+ **(jsonable_encoder(remove_none_from_dict(request_options.get("additional_body_parameters", {})))),
+ },
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(LeadResponse, _response.json()) # type: ignore
@@ -221,6 +244,7 @@ def retrieve(
expand: typing.Optional[LeadsRetrieveRequestExpand] = None,
include_remote_data: typing.Optional[bool] = None,
include_remote_fields: typing.Optional[bool] = None,
+ request_options: typing.Optional[RequestOptions] = None,
) -> Lead:
"""
Returns a `Lead` object with the given `id`.
@@ -233,6 +257,8 @@ def retrieve(
- include_remote_data: typing.Optional[bool]. Whether to include the original data Merge fetched from the third-party to produce these models.
- include_remote_fields: typing.Optional[bool]. Whether to include all remote fields, including fields that Merge did not map to common models, in a normalized format.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import Merge
from merge.resources.crm import LeadsRetrieveRequestExpand
@@ -242,22 +268,38 @@ def retrieve(
api_key="YOUR_API_KEY",
)
client.crm.leads.retrieve(
- id="id",
+ id="string",
expand=LeadsRetrieveRequestExpand.CONVERTED_ACCOUNT,
)
"""
_response = self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", f"api/crm/v1/leads/{id}"),
- params=remove_none_from_dict(
- {
- "expand": expand,
- "include_remote_data": include_remote_data,
- "include_remote_fields": include_remote_fields,
- }
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "expand": expand,
+ "include_remote_data": include_remote_data,
+ "include_remote_fields": include_remote_fields,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(Lead, _response.json()) # type: ignore
@@ -267,10 +309,12 @@ def retrieve(
raise ApiError(status_code=_response.status_code, body=_response.text)
raise ApiError(status_code=_response.status_code, body=_response_json)
- def meta_post_retrieve(self) -> MetaResponse:
+ def meta_post_retrieve(self, *, request_options: typing.Optional[RequestOptions] = None) -> MetaResponse:
"""
Returns metadata for `Lead` POSTs.
+ Parameters:
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import Merge
@@ -283,8 +327,20 @@ def meta_post_retrieve(self) -> MetaResponse:
_response = self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/crm/v1/leads/meta/post"),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ request_options.get("additional_query_parameters") if request_options is not None else None
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(MetaResponse, _response.json()) # type: ignore
@@ -302,6 +358,7 @@ def remote_field_classes_list(
include_remote_data: typing.Optional[bool] = None,
include_remote_fields: typing.Optional[bool] = None,
page_size: typing.Optional[int] = None,
+ request_options: typing.Optional[RequestOptions] = None,
) -> PaginatedRemoteFieldClassList:
"""
Returns a list of `RemoteFieldClass` objects.
@@ -316,6 +373,8 @@ def remote_field_classes_list(
- include_remote_fields: typing.Optional[bool]. Whether to include all remote fields, including fields that Merge did not map to common models, in a normalized format.
- page_size: typing.Optional[int]. Number of results to return per page.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import Merge
@@ -328,17 +387,33 @@ def remote_field_classes_list(
_response = self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/crm/v1/leads/remote-field-classes"),
- params=remove_none_from_dict(
- {
- "cursor": cursor,
- "include_deleted_data": include_deleted_data,
- "include_remote_data": include_remote_data,
- "include_remote_fields": include_remote_fields,
- "page_size": page_size,
- }
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "cursor": cursor,
+ "include_deleted_data": include_deleted_data,
+ "include_remote_data": include_remote_data,
+ "include_remote_fields": include_remote_fields,
+ "page_size": page_size,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(PaginatedRemoteFieldClassList, _response.json()) # type: ignore
@@ -372,6 +447,7 @@ async def list(
page_size: typing.Optional[int] = None,
phone_numbers: typing.Optional[str] = None,
remote_id: typing.Optional[str] = None,
+ request_options: typing.Optional[RequestOptions] = None,
) -> PaginatedLeadList:
"""
Returns a list of `Lead` objects.
@@ -408,6 +484,8 @@ async def list(
- phone_numbers: typing.Optional[str]. If provided, will only return contacts matching the phone numbers; multiple phone numbers can be separated by commas.
- remote_id: typing.Optional[str]. The API provider's ID for the given object.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import AsyncMerge
from merge.resources.crm import LeadsListRequestExpand
@@ -423,28 +501,44 @@ async def list(
_response = await self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/crm/v1/leads"),
- params=remove_none_from_dict(
- {
- "converted_account_id": converted_account_id,
- "converted_contact_id": converted_contact_id,
- "created_after": serialize_datetime(created_after) if created_after is not None else None,
- "created_before": serialize_datetime(created_before) if created_before is not None else None,
- "cursor": cursor,
- "email_addresses": email_addresses,
- "expand": expand,
- "include_deleted_data": include_deleted_data,
- "include_remote_data": include_remote_data,
- "include_remote_fields": include_remote_fields,
- "modified_after": serialize_datetime(modified_after) if modified_after is not None else None,
- "modified_before": serialize_datetime(modified_before) if modified_before is not None else None,
- "owner_id": owner_id,
- "page_size": page_size,
- "phone_numbers": phone_numbers,
- "remote_id": remote_id,
- }
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "converted_account_id": converted_account_id,
+ "converted_contact_id": converted_contact_id,
+ "created_after": serialize_datetime(created_after) if created_after is not None else None,
+ "created_before": serialize_datetime(created_before) if created_before is not None else None,
+ "cursor": cursor,
+ "email_addresses": email_addresses,
+ "expand": expand,
+ "include_deleted_data": include_deleted_data,
+ "include_remote_data": include_remote_data,
+ "include_remote_fields": include_remote_fields,
+ "modified_after": serialize_datetime(modified_after) if modified_after is not None else None,
+ "modified_before": serialize_datetime(modified_before) if modified_before is not None else None,
+ "owner_id": owner_id,
+ "page_size": page_size,
+ "phone_numbers": phone_numbers,
+ "remote_id": remote_id,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(PaginatedLeadList, _response.json()) # type: ignore
@@ -460,6 +554,7 @@ async def create(
is_debug_mode: typing.Optional[bool] = None,
run_async: typing.Optional[bool] = None,
model: LeadRequest,
+ request_options: typing.Optional[RequestOptions] = None,
) -> LeadResponse:
"""
Creates a `Lead` object with the given values.
@@ -470,16 +565,13 @@ async def create(
- run_async: typing.Optional[bool]. Whether or not third-party updates should be run asynchronously.
- model: LeadRequest.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
import datetime
from merge.client import AsyncMerge
- from merge.resources.crm import (
- AddressRequest,
- EmailAddressRequest,
- LeadRequest,
- PhoneNumberRequest,
- )
+ from merge.resources.crm import LeadRequest
client = AsyncMerge(
account_token="YOUR_ACCOUNT_TOKEN",
@@ -492,27 +584,6 @@ async def create(
company="Merge API",
first_name="Gil",
last_name="Feig",
- addresses=[
- AddressRequest(
- street_1="50 Bowling Green Dr",
- street_2="Golden Gate Park",
- city="San Francisco",
- state="CA",
- postal_code="94122",
- )
- ],
- email_addresses=[
- EmailAddressRequest(
- email_address="merge_is_hiring@merge.dev",
- email_address_type="Work",
- )
- ],
- phone_numbers=[
- PhoneNumberRequest(
- phone_number="+3198675309",
- phone_number_type="Mobile",
- )
- ],
converted_date=datetime.datetime.fromisoformat(
"2022-03-10 00:00:00+00:00",
),
@@ -522,10 +593,36 @@ async def create(
_response = await self._client_wrapper.httpx_client.request(
"POST",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/crm/v1/leads"),
- params=remove_none_from_dict({"is_debug_mode": is_debug_mode, "run_async": run_async}),
- json=jsonable_encoder({"model": model}),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "is_debug_mode": is_debug_mode,
+ "run_async": run_async,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ json=jsonable_encoder({"model": model})
+ if request_options is None or request_options.get("additional_body_parameters") is None
+ else {
+ **jsonable_encoder({"model": model}),
+ **(jsonable_encoder(remove_none_from_dict(request_options.get("additional_body_parameters", {})))),
+ },
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(LeadResponse, _response.json()) # type: ignore
@@ -542,6 +639,7 @@ async def retrieve(
expand: typing.Optional[LeadsRetrieveRequestExpand] = None,
include_remote_data: typing.Optional[bool] = None,
include_remote_fields: typing.Optional[bool] = None,
+ request_options: typing.Optional[RequestOptions] = None,
) -> Lead:
"""
Returns a `Lead` object with the given `id`.
@@ -554,6 +652,8 @@ async def retrieve(
- include_remote_data: typing.Optional[bool]. Whether to include the original data Merge fetched from the third-party to produce these models.
- include_remote_fields: typing.Optional[bool]. Whether to include all remote fields, including fields that Merge did not map to common models, in a normalized format.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import AsyncMerge
from merge.resources.crm import LeadsRetrieveRequestExpand
@@ -563,22 +663,38 @@ async def retrieve(
api_key="YOUR_API_KEY",
)
await client.crm.leads.retrieve(
- id="id",
+ id="string",
expand=LeadsRetrieveRequestExpand.CONVERTED_ACCOUNT,
)
"""
_response = await self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", f"api/crm/v1/leads/{id}"),
- params=remove_none_from_dict(
- {
- "expand": expand,
- "include_remote_data": include_remote_data,
- "include_remote_fields": include_remote_fields,
- }
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "expand": expand,
+ "include_remote_data": include_remote_data,
+ "include_remote_fields": include_remote_fields,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(Lead, _response.json()) # type: ignore
@@ -588,10 +704,12 @@ async def retrieve(
raise ApiError(status_code=_response.status_code, body=_response.text)
raise ApiError(status_code=_response.status_code, body=_response_json)
- async def meta_post_retrieve(self) -> MetaResponse:
+ async def meta_post_retrieve(self, *, request_options: typing.Optional[RequestOptions] = None) -> MetaResponse:
"""
Returns metadata for `Lead` POSTs.
+ Parameters:
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import AsyncMerge
@@ -604,8 +722,20 @@ async def meta_post_retrieve(self) -> MetaResponse:
_response = await self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/crm/v1/leads/meta/post"),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ request_options.get("additional_query_parameters") if request_options is not None else None
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(MetaResponse, _response.json()) # type: ignore
@@ -623,6 +753,7 @@ async def remote_field_classes_list(
include_remote_data: typing.Optional[bool] = None,
include_remote_fields: typing.Optional[bool] = None,
page_size: typing.Optional[int] = None,
+ request_options: typing.Optional[RequestOptions] = None,
) -> PaginatedRemoteFieldClassList:
"""
Returns a list of `RemoteFieldClass` objects.
@@ -637,6 +768,8 @@ async def remote_field_classes_list(
- include_remote_fields: typing.Optional[bool]. Whether to include all remote fields, including fields that Merge did not map to common models, in a normalized format.
- page_size: typing.Optional[int]. Number of results to return per page.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import AsyncMerge
@@ -649,17 +782,33 @@ async def remote_field_classes_list(
_response = await self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/crm/v1/leads/remote-field-classes"),
- params=remove_none_from_dict(
- {
- "cursor": cursor,
- "include_deleted_data": include_deleted_data,
- "include_remote_data": include_remote_data,
- "include_remote_fields": include_remote_fields,
- "page_size": page_size,
- }
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "cursor": cursor,
+ "include_deleted_data": include_deleted_data,
+ "include_remote_data": include_remote_data,
+ "include_remote_fields": include_remote_fields,
+ "page_size": page_size,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(PaginatedRemoteFieldClassList, _response.json()) # type: ignore
diff --git a/src/merge/resources/crm/resources/link_token/client.py b/src/merge/resources/crm/resources/link_token/client.py
index c18d0968..0ff70a54 100644
--- a/src/merge/resources/crm/resources/link_token/client.py
+++ b/src/merge/resources/crm/resources/link_token/client.py
@@ -7,6 +7,8 @@
from .....core.api_error import ApiError
from .....core.client_wrapper import AsyncClientWrapper, SyncClientWrapper
from .....core.jsonable_encoder import jsonable_encoder
+from .....core.remove_none_from_dict import remove_none_from_dict
+from .....core.request_options import RequestOptions
from ...types.categories_enum import CategoriesEnum
from ...types.common_model_scopes_body_request import CommonModelScopesBodyRequest
from ...types.link_token import LinkToken
@@ -35,6 +37,7 @@ def create(
link_expiry_mins: typing.Optional[int] = OMIT,
should_create_magic_link_url: typing.Optional[bool] = OMIT,
common_models: typing.Optional[typing.List[CommonModelScopesBodyRequest]] = OMIT,
+ request_options: typing.Optional[RequestOptions] = None,
) -> LinkToken:
"""
Creates a link token to be used when linking a new end user.
@@ -55,6 +58,21 @@ def create(
- should_create_magic_link_url: typing.Optional[bool]. Whether to generate a Magic Link URL. Defaults to false. For more information on Magic Link, see https://merge.dev/blog/integrations-fast-say-hello-to-magic-link.
- common_models: typing.Optional[typing.List[CommonModelScopesBodyRequest]]. An array of objects to specify the models and fields that will be disabled for a given Linked Account. Each object uses model_id, enabled_actions, and disabled_fields to specify the model, method, and fields that are scoped for a given Linked Account.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
+ ---
+ from merge.client import Merge
+
+ client = Merge(
+ account_token="YOUR_ACCOUNT_TOKEN",
+ api_key="YOUR_API_KEY",
+ )
+ client.crm.link_token.create(
+ end_user_email_address="string",
+ end_user_organization_name="string",
+ end_user_origin_id="string",
+ categories=[],
+ )
"""
_request: typing.Dict[str, typing.Any] = {
"end_user_email_address": end_user_email_address,
@@ -73,9 +91,26 @@ def create(
_response = self._client_wrapper.httpx_client.request(
"POST",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/crm/v1/link-token"),
- json=jsonable_encoder(_request),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ request_options.get("additional_query_parameters") if request_options is not None else None
+ ),
+ json=jsonable_encoder(_request)
+ if request_options is None or request_options.get("additional_body_parameters") is None
+ else {
+ **jsonable_encoder(_request),
+ **(jsonable_encoder(remove_none_from_dict(request_options.get("additional_body_parameters", {})))),
+ },
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(LinkToken, _response.json()) # type: ignore
@@ -101,6 +136,7 @@ async def create(
link_expiry_mins: typing.Optional[int] = OMIT,
should_create_magic_link_url: typing.Optional[bool] = OMIT,
common_models: typing.Optional[typing.List[CommonModelScopesBodyRequest]] = OMIT,
+ request_options: typing.Optional[RequestOptions] = None,
) -> LinkToken:
"""
Creates a link token to be used when linking a new end user.
@@ -121,6 +157,21 @@ async def create(
- should_create_magic_link_url: typing.Optional[bool]. Whether to generate a Magic Link URL. Defaults to false. For more information on Magic Link, see https://merge.dev/blog/integrations-fast-say-hello-to-magic-link.
- common_models: typing.Optional[typing.List[CommonModelScopesBodyRequest]]. An array of objects to specify the models and fields that will be disabled for a given Linked Account. Each object uses model_id, enabled_actions, and disabled_fields to specify the model, method, and fields that are scoped for a given Linked Account.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
+ ---
+ from merge.client import AsyncMerge
+
+ client = AsyncMerge(
+ account_token="YOUR_ACCOUNT_TOKEN",
+ api_key="YOUR_API_KEY",
+ )
+ await client.crm.link_token.create(
+ end_user_email_address="string",
+ end_user_organization_name="string",
+ end_user_origin_id="string",
+ categories=[],
+ )
"""
_request: typing.Dict[str, typing.Any] = {
"end_user_email_address": end_user_email_address,
@@ -139,9 +190,26 @@ async def create(
_response = await self._client_wrapper.httpx_client.request(
"POST",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/crm/v1/link-token"),
- json=jsonable_encoder(_request),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ request_options.get("additional_query_parameters") if request_options is not None else None
+ ),
+ json=jsonable_encoder(_request)
+ if request_options is None or request_options.get("additional_body_parameters") is None
+ else {
+ **jsonable_encoder(_request),
+ **(jsonable_encoder(remove_none_from_dict(request_options.get("additional_body_parameters", {})))),
+ },
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(LinkToken, _response.json()) # type: ignore
diff --git a/src/merge/resources/crm/resources/linked_accounts/client.py b/src/merge/resources/crm/resources/linked_accounts/client.py
index 407a5349..3a18316f 100644
--- a/src/merge/resources/crm/resources/linked_accounts/client.py
+++ b/src/merge/resources/crm/resources/linked_accounts/client.py
@@ -6,7 +6,9 @@
from .....core.api_error import ApiError
from .....core.client_wrapper import AsyncClientWrapper, SyncClientWrapper
+from .....core.jsonable_encoder import jsonable_encoder
from .....core.remove_none_from_dict import remove_none_from_dict
+from .....core.request_options import RequestOptions
from ...types.paginated_account_details_and_actions_list import PaginatedAccountDetailsAndActionsList
from .types.linked_accounts_list_request_category import LinkedAccountsListRequestCategory
@@ -36,6 +38,7 @@ def list(
is_test_account: typing.Optional[str] = None,
page_size: typing.Optional[int] = None,
status: typing.Optional[str] = None,
+ request_options: typing.Optional[RequestOptions] = None,
) -> PaginatedAccountDetailsAndActionsList:
"""
List linked accounts for your organization.
@@ -73,6 +76,8 @@ def list(
- page_size: typing.Optional[int]. Number of results to return per page.
- status: typing.Optional[str]. Filter by status. Options: `COMPLETE`, `INCOMPLETE`, `RELINK_NEEDED`
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import Merge
from merge.resources.crm import LinkedAccountsListRequestCategory
@@ -88,25 +93,41 @@ def list(
_response = self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/crm/v1/linked-accounts"),
- params=remove_none_from_dict(
- {
- "category": category,
- "cursor": cursor,
- "end_user_email_address": end_user_email_address,
- "end_user_organization_name": end_user_organization_name,
- "end_user_origin_id": end_user_origin_id,
- "end_user_origin_ids": end_user_origin_ids,
- "id": id,
- "ids": ids,
- "include_duplicates": include_duplicates,
- "integration_name": integration_name,
- "is_test_account": is_test_account,
- "page_size": page_size,
- "status": status,
- }
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "category": category,
+ "cursor": cursor,
+ "end_user_email_address": end_user_email_address,
+ "end_user_organization_name": end_user_organization_name,
+ "end_user_origin_id": end_user_origin_id,
+ "end_user_origin_ids": end_user_origin_ids,
+ "id": id,
+ "ids": ids,
+ "include_duplicates": include_duplicates,
+ "integration_name": integration_name,
+ "is_test_account": is_test_account,
+ "page_size": page_size,
+ "status": status,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(PaginatedAccountDetailsAndActionsList, _response.json()) # type: ignore
@@ -137,6 +158,7 @@ async def list(
is_test_account: typing.Optional[str] = None,
page_size: typing.Optional[int] = None,
status: typing.Optional[str] = None,
+ request_options: typing.Optional[RequestOptions] = None,
) -> PaginatedAccountDetailsAndActionsList:
"""
List linked accounts for your organization.
@@ -174,6 +196,8 @@ async def list(
- page_size: typing.Optional[int]. Number of results to return per page.
- status: typing.Optional[str]. Filter by status. Options: `COMPLETE`, `INCOMPLETE`, `RELINK_NEEDED`
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import AsyncMerge
from merge.resources.crm import LinkedAccountsListRequestCategory
@@ -189,25 +213,41 @@ async def list(
_response = await self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/crm/v1/linked-accounts"),
- params=remove_none_from_dict(
- {
- "category": category,
- "cursor": cursor,
- "end_user_email_address": end_user_email_address,
- "end_user_organization_name": end_user_organization_name,
- "end_user_origin_id": end_user_origin_id,
- "end_user_origin_ids": end_user_origin_ids,
- "id": id,
- "ids": ids,
- "include_duplicates": include_duplicates,
- "integration_name": integration_name,
- "is_test_account": is_test_account,
- "page_size": page_size,
- "status": status,
- }
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "category": category,
+ "cursor": cursor,
+ "end_user_email_address": end_user_email_address,
+ "end_user_organization_name": end_user_organization_name,
+ "end_user_origin_id": end_user_origin_id,
+ "end_user_origin_ids": end_user_origin_ids,
+ "id": id,
+ "ids": ids,
+ "include_duplicates": include_duplicates,
+ "integration_name": integration_name,
+ "is_test_account": is_test_account,
+ "page_size": page_size,
+ "status": status,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(PaginatedAccountDetailsAndActionsList, _response.json()) # type: ignore
diff --git a/src/merge/resources/crm/resources/notes/client.py b/src/merge/resources/crm/resources/notes/client.py
index 308a015a..30a17953 100644
--- a/src/merge/resources/crm/resources/notes/client.py
+++ b/src/merge/resources/crm/resources/notes/client.py
@@ -10,6 +10,7 @@
from .....core.datetime_utils import serialize_datetime
from .....core.jsonable_encoder import jsonable_encoder
from .....core.remove_none_from_dict import remove_none_from_dict
+from .....core.request_options import RequestOptions
from ...types.meta_response import MetaResponse
from ...types.note import Note
from ...types.note_request import NoteRequest
@@ -50,6 +51,7 @@ def list(
owner_id: typing.Optional[str] = None,
page_size: typing.Optional[int] = None,
remote_id: typing.Optional[str] = None,
+ request_options: typing.Optional[RequestOptions] = None,
) -> PaginatedNoteList:
"""
Returns a list of `Note` objects.
@@ -84,6 +86,8 @@ def list(
- page_size: typing.Optional[int]. Number of results to return per page.
- remote_id: typing.Optional[str]. The API provider's ID for the given object.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import Merge
from merge.resources.crm import NotesListRequestExpand
@@ -99,27 +103,43 @@ def list(
_response = self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/crm/v1/notes"),
- params=remove_none_from_dict(
- {
- "account_id": account_id,
- "contact_id": contact_id,
- "created_after": serialize_datetime(created_after) if created_after is not None else None,
- "created_before": serialize_datetime(created_before) if created_before is not None else None,
- "cursor": cursor,
- "expand": expand,
- "include_deleted_data": include_deleted_data,
- "include_remote_data": include_remote_data,
- "include_remote_fields": include_remote_fields,
- "modified_after": serialize_datetime(modified_after) if modified_after is not None else None,
- "modified_before": serialize_datetime(modified_before) if modified_before is not None else None,
- "opportunity_id": opportunity_id,
- "owner_id": owner_id,
- "page_size": page_size,
- "remote_id": remote_id,
- }
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "account_id": account_id,
+ "contact_id": contact_id,
+ "created_after": serialize_datetime(created_after) if created_after is not None else None,
+ "created_before": serialize_datetime(created_before) if created_before is not None else None,
+ "cursor": cursor,
+ "expand": expand,
+ "include_deleted_data": include_deleted_data,
+ "include_remote_data": include_remote_data,
+ "include_remote_fields": include_remote_fields,
+ "modified_after": serialize_datetime(modified_after) if modified_after is not None else None,
+ "modified_before": serialize_datetime(modified_before) if modified_before is not None else None,
+ "opportunity_id": opportunity_id,
+ "owner_id": owner_id,
+ "page_size": page_size,
+ "remote_id": remote_id,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(PaginatedNoteList, _response.json()) # type: ignore
@@ -135,6 +155,7 @@ def create(
is_debug_mode: typing.Optional[bool] = None,
run_async: typing.Optional[bool] = None,
model: NoteRequest,
+ request_options: typing.Optional[RequestOptions] = None,
) -> NoteResponse:
"""
Creates a `Note` object with the given values.
@@ -145,6 +166,8 @@ def create(
- run_async: typing.Optional[bool]. Whether or not third-party updates should be run asynchronously.
- model: NoteRequest.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import Merge
from merge.resources.crm import NoteRequest
@@ -162,10 +185,36 @@ def create(
_response = self._client_wrapper.httpx_client.request(
"POST",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/crm/v1/notes"),
- params=remove_none_from_dict({"is_debug_mode": is_debug_mode, "run_async": run_async}),
- json=jsonable_encoder({"model": model}),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "is_debug_mode": is_debug_mode,
+ "run_async": run_async,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ json=jsonable_encoder({"model": model})
+ if request_options is None or request_options.get("additional_body_parameters") is None
+ else {
+ **jsonable_encoder({"model": model}),
+ **(jsonable_encoder(remove_none_from_dict(request_options.get("additional_body_parameters", {})))),
+ },
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(NoteResponse, _response.json()) # type: ignore
@@ -182,6 +231,7 @@ def retrieve(
expand: typing.Optional[NotesRetrieveRequestExpand] = None,
include_remote_data: typing.Optional[bool] = None,
include_remote_fields: typing.Optional[bool] = None,
+ request_options: typing.Optional[RequestOptions] = None,
) -> Note:
"""
Returns a `Note` object with the given `id`.
@@ -194,6 +244,8 @@ def retrieve(
- include_remote_data: typing.Optional[bool]. Whether to include the original data Merge fetched from the third-party to produce these models.
- include_remote_fields: typing.Optional[bool]. Whether to include all remote fields, including fields that Merge did not map to common models, in a normalized format.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import Merge
from merge.resources.crm import NotesRetrieveRequestExpand
@@ -203,22 +255,38 @@ def retrieve(
api_key="YOUR_API_KEY",
)
client.crm.notes.retrieve(
- id="id",
+ id="string",
expand=NotesRetrieveRequestExpand.ACCOUNT,
)
"""
_response = self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", f"api/crm/v1/notes/{id}"),
- params=remove_none_from_dict(
- {
- "expand": expand,
- "include_remote_data": include_remote_data,
- "include_remote_fields": include_remote_fields,
- }
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "expand": expand,
+ "include_remote_data": include_remote_data,
+ "include_remote_fields": include_remote_fields,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(Note, _response.json()) # type: ignore
@@ -228,10 +296,12 @@ def retrieve(
raise ApiError(status_code=_response.status_code, body=_response.text)
raise ApiError(status_code=_response.status_code, body=_response_json)
- def meta_post_retrieve(self) -> MetaResponse:
+ def meta_post_retrieve(self, *, request_options: typing.Optional[RequestOptions] = None) -> MetaResponse:
"""
Returns metadata for `Note` POSTs.
+ Parameters:
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import Merge
@@ -244,8 +314,20 @@ def meta_post_retrieve(self) -> MetaResponse:
_response = self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/crm/v1/notes/meta/post"),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ request_options.get("additional_query_parameters") if request_options is not None else None
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(MetaResponse, _response.json()) # type: ignore
@@ -263,6 +345,7 @@ def remote_field_classes_list(
include_remote_data: typing.Optional[bool] = None,
include_remote_fields: typing.Optional[bool] = None,
page_size: typing.Optional[int] = None,
+ request_options: typing.Optional[RequestOptions] = None,
) -> PaginatedRemoteFieldClassList:
"""
Returns a list of `RemoteFieldClass` objects.
@@ -277,6 +360,8 @@ def remote_field_classes_list(
- include_remote_fields: typing.Optional[bool]. Whether to include all remote fields, including fields that Merge did not map to common models, in a normalized format.
- page_size: typing.Optional[int]. Number of results to return per page.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import Merge
@@ -289,17 +374,33 @@ def remote_field_classes_list(
_response = self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/crm/v1/notes/remote-field-classes"),
- params=remove_none_from_dict(
- {
- "cursor": cursor,
- "include_deleted_data": include_deleted_data,
- "include_remote_data": include_remote_data,
- "include_remote_fields": include_remote_fields,
- "page_size": page_size,
- }
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "cursor": cursor,
+ "include_deleted_data": include_deleted_data,
+ "include_remote_data": include_remote_data,
+ "include_remote_fields": include_remote_fields,
+ "page_size": page_size,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(PaginatedRemoteFieldClassList, _response.json()) # type: ignore
@@ -332,6 +433,7 @@ async def list(
owner_id: typing.Optional[str] = None,
page_size: typing.Optional[int] = None,
remote_id: typing.Optional[str] = None,
+ request_options: typing.Optional[RequestOptions] = None,
) -> PaginatedNoteList:
"""
Returns a list of `Note` objects.
@@ -366,6 +468,8 @@ async def list(
- page_size: typing.Optional[int]. Number of results to return per page.
- remote_id: typing.Optional[str]. The API provider's ID for the given object.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import AsyncMerge
from merge.resources.crm import NotesListRequestExpand
@@ -381,27 +485,43 @@ async def list(
_response = await self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/crm/v1/notes"),
- params=remove_none_from_dict(
- {
- "account_id": account_id,
- "contact_id": contact_id,
- "created_after": serialize_datetime(created_after) if created_after is not None else None,
- "created_before": serialize_datetime(created_before) if created_before is not None else None,
- "cursor": cursor,
- "expand": expand,
- "include_deleted_data": include_deleted_data,
- "include_remote_data": include_remote_data,
- "include_remote_fields": include_remote_fields,
- "modified_after": serialize_datetime(modified_after) if modified_after is not None else None,
- "modified_before": serialize_datetime(modified_before) if modified_before is not None else None,
- "opportunity_id": opportunity_id,
- "owner_id": owner_id,
- "page_size": page_size,
- "remote_id": remote_id,
- }
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "account_id": account_id,
+ "contact_id": contact_id,
+ "created_after": serialize_datetime(created_after) if created_after is not None else None,
+ "created_before": serialize_datetime(created_before) if created_before is not None else None,
+ "cursor": cursor,
+ "expand": expand,
+ "include_deleted_data": include_deleted_data,
+ "include_remote_data": include_remote_data,
+ "include_remote_fields": include_remote_fields,
+ "modified_after": serialize_datetime(modified_after) if modified_after is not None else None,
+ "modified_before": serialize_datetime(modified_before) if modified_before is not None else None,
+ "opportunity_id": opportunity_id,
+ "owner_id": owner_id,
+ "page_size": page_size,
+ "remote_id": remote_id,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(PaginatedNoteList, _response.json()) # type: ignore
@@ -417,6 +537,7 @@ async def create(
is_debug_mode: typing.Optional[bool] = None,
run_async: typing.Optional[bool] = None,
model: NoteRequest,
+ request_options: typing.Optional[RequestOptions] = None,
) -> NoteResponse:
"""
Creates a `Note` object with the given values.
@@ -427,6 +548,8 @@ async def create(
- run_async: typing.Optional[bool]. Whether or not third-party updates should be run asynchronously.
- model: NoteRequest.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import AsyncMerge
from merge.resources.crm import NoteRequest
@@ -444,10 +567,36 @@ async def create(
_response = await self._client_wrapper.httpx_client.request(
"POST",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/crm/v1/notes"),
- params=remove_none_from_dict({"is_debug_mode": is_debug_mode, "run_async": run_async}),
- json=jsonable_encoder({"model": model}),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "is_debug_mode": is_debug_mode,
+ "run_async": run_async,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ json=jsonable_encoder({"model": model})
+ if request_options is None or request_options.get("additional_body_parameters") is None
+ else {
+ **jsonable_encoder({"model": model}),
+ **(jsonable_encoder(remove_none_from_dict(request_options.get("additional_body_parameters", {})))),
+ },
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(NoteResponse, _response.json()) # type: ignore
@@ -464,6 +613,7 @@ async def retrieve(
expand: typing.Optional[NotesRetrieveRequestExpand] = None,
include_remote_data: typing.Optional[bool] = None,
include_remote_fields: typing.Optional[bool] = None,
+ request_options: typing.Optional[RequestOptions] = None,
) -> Note:
"""
Returns a `Note` object with the given `id`.
@@ -476,6 +626,8 @@ async def retrieve(
- include_remote_data: typing.Optional[bool]. Whether to include the original data Merge fetched from the third-party to produce these models.
- include_remote_fields: typing.Optional[bool]. Whether to include all remote fields, including fields that Merge did not map to common models, in a normalized format.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import AsyncMerge
from merge.resources.crm import NotesRetrieveRequestExpand
@@ -485,22 +637,38 @@ async def retrieve(
api_key="YOUR_API_KEY",
)
await client.crm.notes.retrieve(
- id="id",
+ id="string",
expand=NotesRetrieveRequestExpand.ACCOUNT,
)
"""
_response = await self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", f"api/crm/v1/notes/{id}"),
- params=remove_none_from_dict(
- {
- "expand": expand,
- "include_remote_data": include_remote_data,
- "include_remote_fields": include_remote_fields,
- }
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "expand": expand,
+ "include_remote_data": include_remote_data,
+ "include_remote_fields": include_remote_fields,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(Note, _response.json()) # type: ignore
@@ -510,10 +678,12 @@ async def retrieve(
raise ApiError(status_code=_response.status_code, body=_response.text)
raise ApiError(status_code=_response.status_code, body=_response_json)
- async def meta_post_retrieve(self) -> MetaResponse:
+ async def meta_post_retrieve(self, *, request_options: typing.Optional[RequestOptions] = None) -> MetaResponse:
"""
Returns metadata for `Note` POSTs.
+ Parameters:
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import AsyncMerge
@@ -526,8 +696,20 @@ async def meta_post_retrieve(self) -> MetaResponse:
_response = await self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/crm/v1/notes/meta/post"),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ request_options.get("additional_query_parameters") if request_options is not None else None
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(MetaResponse, _response.json()) # type: ignore
@@ -545,6 +727,7 @@ async def remote_field_classes_list(
include_remote_data: typing.Optional[bool] = None,
include_remote_fields: typing.Optional[bool] = None,
page_size: typing.Optional[int] = None,
+ request_options: typing.Optional[RequestOptions] = None,
) -> PaginatedRemoteFieldClassList:
"""
Returns a list of `RemoteFieldClass` objects.
@@ -559,6 +742,8 @@ async def remote_field_classes_list(
- include_remote_fields: typing.Optional[bool]. Whether to include all remote fields, including fields that Merge did not map to common models, in a normalized format.
- page_size: typing.Optional[int]. Number of results to return per page.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import AsyncMerge
@@ -571,17 +756,33 @@ async def remote_field_classes_list(
_response = await self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/crm/v1/notes/remote-field-classes"),
- params=remove_none_from_dict(
- {
- "cursor": cursor,
- "include_deleted_data": include_deleted_data,
- "include_remote_data": include_remote_data,
- "include_remote_fields": include_remote_fields,
- "page_size": page_size,
- }
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "cursor": cursor,
+ "include_deleted_data": include_deleted_data,
+ "include_remote_data": include_remote_data,
+ "include_remote_fields": include_remote_fields,
+ "page_size": page_size,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(PaginatedRemoteFieldClassList, _response.json()) # type: ignore
diff --git a/src/merge/resources/crm/resources/opportunities/client.py b/src/merge/resources/crm/resources/opportunities/client.py
index bb040ec9..2728ecf4 100644
--- a/src/merge/resources/crm/resources/opportunities/client.py
+++ b/src/merge/resources/crm/resources/opportunities/client.py
@@ -5,13 +5,12 @@
import urllib.parse
from json.decoder import JSONDecodeError
-import typing_extensions
-
from .....core.api_error import ApiError
from .....core.client_wrapper import AsyncClientWrapper, SyncClientWrapper
from .....core.datetime_utils import serialize_datetime
from .....core.jsonable_encoder import jsonable_encoder
from .....core.remove_none_from_dict import remove_none_from_dict
+from .....core.request_options import RequestOptions
from ...types.meta_response import MetaResponse
from ...types.opportunity import Opportunity
from ...types.opportunity_request import OpportunityRequest
@@ -51,11 +50,12 @@ def list(
modified_before: typing.Optional[dt.datetime] = None,
owner_id: typing.Optional[str] = None,
page_size: typing.Optional[int] = None,
- remote_fields: typing.Optional[typing_extensions.Literal["status"]] = None,
+ remote_fields: typing.Optional[typing.Literal["status"]] = None,
remote_id: typing.Optional[str] = None,
- show_enum_origins: typing.Optional[typing_extensions.Literal["status"]] = None,
+ show_enum_origins: typing.Optional[typing.Literal["status"]] = None,
stage_id: typing.Optional[str] = None,
status: typing.Optional[OpportunitiesListRequestStatus] = None,
+ request_options: typing.Optional[RequestOptions] = None,
) -> PaginatedOpportunityList:
"""
Returns a list of `Opportunity` objects.
@@ -85,11 +85,11 @@ def list(
- page_size: typing.Optional[int]. Number of results to return per page.
- - remote_fields: typing.Optional[typing_extensions.Literal["status"]]. Deprecated. Use show_enum_origins.
+ - remote_fields: typing.Optional[typing.Literal["status"]]. Deprecated. Use show_enum_origins.
- remote_id: typing.Optional[str]. The API provider's ID for the given object.
- - show_enum_origins: typing.Optional[typing_extensions.Literal["status"]]. Which fields should be returned in non-normalized form.
+ - show_enum_origins: typing.Optional[typing.Literal["status"]]. Which fields should be returned in non-normalized form.
- stage_id: typing.Optional[str]. If provided, will only return opportunities with this stage.
@@ -97,7 +97,9 @@ def list(
- `OPEN` - OPEN
- `WON` - WON
- - `LOST` - LOST---
+ - `LOST` - LOST
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
+ ---
from merge.client import Merge
from merge.resources.crm import (
OpportunitiesListRequestExpand,
@@ -118,29 +120,45 @@ def list(
_response = self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/crm/v1/opportunities"),
- params=remove_none_from_dict(
- {
- "account_id": account_id,
- "created_after": serialize_datetime(created_after) if created_after is not None else None,
- "created_before": serialize_datetime(created_before) if created_before is not None else None,
- "cursor": cursor,
- "expand": expand,
- "include_deleted_data": include_deleted_data,
- "include_remote_data": include_remote_data,
- "include_remote_fields": include_remote_fields,
- "modified_after": serialize_datetime(modified_after) if modified_after is not None else None,
- "modified_before": serialize_datetime(modified_before) if modified_before is not None else None,
- "owner_id": owner_id,
- "page_size": page_size,
- "remote_fields": remote_fields,
- "remote_id": remote_id,
- "show_enum_origins": show_enum_origins,
- "stage_id": stage_id,
- "status": status,
- }
- ),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "account_id": account_id,
+ "created_after": serialize_datetime(created_after) if created_after is not None else None,
+ "created_before": serialize_datetime(created_before) if created_before is not None else None,
+ "cursor": cursor,
+ "expand": expand,
+ "include_deleted_data": include_deleted_data,
+ "include_remote_data": include_remote_data,
+ "include_remote_fields": include_remote_fields,
+ "modified_after": serialize_datetime(modified_after) if modified_after is not None else None,
+ "modified_before": serialize_datetime(modified_before) if modified_before is not None else None,
+ "owner_id": owner_id,
+ "page_size": page_size,
+ "remote_fields": remote_fields,
+ "remote_id": remote_id,
+ "show_enum_origins": show_enum_origins,
+ "stage_id": stage_id,
+ "status": status,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(PaginatedOpportunityList, _response.json()) # type: ignore
@@ -156,6 +174,7 @@ def create(
is_debug_mode: typing.Optional[bool] = None,
run_async: typing.Optional[bool] = None,
model: OpportunityRequest,
+ request_options: typing.Optional[RequestOptions] = None,
) -> OpportunityResponse:
"""
Creates an `Opportunity` object with the given values.
@@ -166,6 +185,8 @@ def create(
- run_async: typing.Optional[bool]. Whether or not third-party updates should be run asynchronously.
- model: OpportunityRequest.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
import datetime
@@ -180,7 +201,7 @@ def create(
model=OpportunityRequest(
name="Needs Integrations",
description="Needs a Unified API for Integrations!",
- amount=100000,
+ amount=1,
last_activity_at=datetime.datetime.fromisoformat(
"2022-02-10 00:00:00+00:00",
),
@@ -193,10 +214,36 @@ def create(
_response = self._client_wrapper.httpx_client.request(
"POST",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/crm/v1/opportunities"),
- params=remove_none_from_dict({"is_debug_mode": is_debug_mode, "run_async": run_async}),
- json=jsonable_encoder({"model": model}),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "is_debug_mode": is_debug_mode,
+ "run_async": run_async,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ json=jsonable_encoder({"model": model})
+ if request_options is None or request_options.get("additional_body_parameters") is None
+ else {
+ **jsonable_encoder({"model": model}),
+ **(jsonable_encoder(remove_none_from_dict(request_options.get("additional_body_parameters", {})))),
+ },
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(OpportunityResponse, _response.json()) # type: ignore
@@ -213,8 +260,9 @@ def retrieve(
expand: typing.Optional[OpportunitiesRetrieveRequestExpand] = None,
include_remote_data: typing.Optional[bool] = None,
include_remote_fields: typing.Optional[bool] = None,
- remote_fields: typing.Optional[typing_extensions.Literal["status"]] = None,
- show_enum_origins: typing.Optional[typing_extensions.Literal["status"]] = None,
+ remote_fields: typing.Optional[typing.Literal["status"]] = None,
+ show_enum_origins: typing.Optional[typing.Literal["status"]] = None,
+ request_options: typing.Optional[RequestOptions] = None,
) -> Opportunity:
"""
Returns an `Opportunity` object with the given `id`.
@@ -228,9 +276,11 @@ def retrieve(
- include_remote_fields: typing.Optional[bool]. Whether to include all remote fields, including fields that Merge did not map to common models, in a normalized format.
- - remote_fields: typing.Optional[typing_extensions.Literal["status"]]. Deprecated. Use show_enum_origins.
+ - remote_fields: typing.Optional[typing.Literal["status"]]. Deprecated. Use show_enum_origins.
+
+ - show_enum_origins: typing.Optional[typing.Literal["status"]]. Which fields should be returned in non-normalized form.
- - show_enum_origins: typing.Optional[typing_extensions.Literal["status"]]. Which fields should be returned in non-normalized form.
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import Merge
from merge.resources.crm import OpportunitiesRetrieveRequestExpand
@@ -240,7 +290,7 @@ def retrieve(
api_key="YOUR_API_KEY",
)
client.crm.opportunities.retrieve(
- id="id",
+ id="string",
expand=OpportunitiesRetrieveRequestExpand.ACCOUNT,
remote_fields="status",
show_enum_origins="status",
@@ -249,17 +299,33 @@ def retrieve(
_response = self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", f"api/crm/v1/opportunities/{id}"),
- params=remove_none_from_dict(
- {
- "expand": expand,
- "include_remote_data": include_remote_data,
- "include_remote_fields": include_remote_fields,
- "remote_fields": remote_fields,
- "show_enum_origins": show_enum_origins,
- }
- ),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "expand": expand,
+ "include_remote_data": include_remote_data,
+ "include_remote_fields": include_remote_fields,
+ "remote_fields": remote_fields,
+ "show_enum_origins": show_enum_origins,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(Opportunity, _response.json()) # type: ignore
@@ -276,6 +342,7 @@ def partial_update(
is_debug_mode: typing.Optional[bool] = None,
run_async: typing.Optional[bool] = None,
model: PatchedOpportunityRequest,
+ request_options: typing.Optional[RequestOptions] = None,
) -> OpportunityResponse:
"""
Updates an `Opportunity` object with the given `id`.
@@ -288,6 +355,8 @@ def partial_update(
- run_async: typing.Optional[bool]. Whether or not third-party updates should be run asynchronously.
- model: PatchedOpportunityRequest.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
import datetime
@@ -299,11 +368,11 @@ def partial_update(
api_key="YOUR_API_KEY",
)
client.crm.opportunities.partial_update(
- id="id",
+ id="string",
model=PatchedOpportunityRequest(
name="Needs Integrations",
description="Needs a Unified API for Integrations!",
- amount=100000,
+ amount=1,
owner="0358cbc6-2040-430a-848e-aafacbadf3aa",
account="0958cbc6-6040-430a-848e-aafacbadf4ae",
stage="1968cbc6-6040-430a-848e-aafacbadf4ad",
@@ -319,10 +388,36 @@ def partial_update(
_response = self._client_wrapper.httpx_client.request(
"PATCH",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", f"api/crm/v1/opportunities/{id}"),
- params=remove_none_from_dict({"is_debug_mode": is_debug_mode, "run_async": run_async}),
- json=jsonable_encoder({"model": model}),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "is_debug_mode": is_debug_mode,
+ "run_async": run_async,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ json=jsonable_encoder({"model": model})
+ if request_options is None or request_options.get("additional_body_parameters") is None
+ else {
+ **jsonable_encoder({"model": model}),
+ **(jsonable_encoder(remove_none_from_dict(request_options.get("additional_body_parameters", {})))),
+ },
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(OpportunityResponse, _response.json()) # type: ignore
@@ -332,12 +427,14 @@ def partial_update(
raise ApiError(status_code=_response.status_code, body=_response.text)
raise ApiError(status_code=_response.status_code, body=_response_json)
- def meta_patch_retrieve(self, id: str) -> MetaResponse:
+ def meta_patch_retrieve(self, id: str, *, request_options: typing.Optional[RequestOptions] = None) -> MetaResponse:
"""
Returns metadata for `Opportunity` PATCHs.
Parameters:
- id: str.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import Merge
@@ -346,7 +443,7 @@ def meta_patch_retrieve(self, id: str) -> MetaResponse:
api_key="YOUR_API_KEY",
)
client.crm.opportunities.meta_patch_retrieve(
- id="id",
+ id="string",
)
"""
_response = self._client_wrapper.httpx_client.request(
@@ -354,8 +451,20 @@ def meta_patch_retrieve(self, id: str) -> MetaResponse:
urllib.parse.urljoin(
f"{self._client_wrapper.get_base_url()}/", f"api/crm/v1/opportunities/meta/patch/{id}"
),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ request_options.get("additional_query_parameters") if request_options is not None else None
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(MetaResponse, _response.json()) # type: ignore
@@ -365,10 +474,12 @@ def meta_patch_retrieve(self, id: str) -> MetaResponse:
raise ApiError(status_code=_response.status_code, body=_response.text)
raise ApiError(status_code=_response.status_code, body=_response_json)
- def meta_post_retrieve(self) -> MetaResponse:
+ def meta_post_retrieve(self, *, request_options: typing.Optional[RequestOptions] = None) -> MetaResponse:
"""
Returns metadata for `Opportunity` POSTs.
+ Parameters:
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import Merge
@@ -381,8 +492,20 @@ def meta_post_retrieve(self) -> MetaResponse:
_response = self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/crm/v1/opportunities/meta/post"),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ request_options.get("additional_query_parameters") if request_options is not None else None
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(MetaResponse, _response.json()) # type: ignore
@@ -400,6 +523,7 @@ def remote_field_classes_list(
include_remote_data: typing.Optional[bool] = None,
include_remote_fields: typing.Optional[bool] = None,
page_size: typing.Optional[int] = None,
+ request_options: typing.Optional[RequestOptions] = None,
) -> PaginatedRemoteFieldClassList:
"""
Returns a list of `RemoteFieldClass` objects.
@@ -414,6 +538,8 @@ def remote_field_classes_list(
- include_remote_fields: typing.Optional[bool]. Whether to include all remote fields, including fields that Merge did not map to common models, in a normalized format.
- page_size: typing.Optional[int]. Number of results to return per page.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import Merge
@@ -428,17 +554,33 @@ def remote_field_classes_list(
urllib.parse.urljoin(
f"{self._client_wrapper.get_base_url()}/", "api/crm/v1/opportunities/remote-field-classes"
),
- params=remove_none_from_dict(
- {
- "cursor": cursor,
- "include_deleted_data": include_deleted_data,
- "include_remote_data": include_remote_data,
- "include_remote_fields": include_remote_fields,
- "page_size": page_size,
- }
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "cursor": cursor,
+ "include_deleted_data": include_deleted_data,
+ "include_remote_data": include_remote_data,
+ "include_remote_fields": include_remote_fields,
+ "page_size": page_size,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(PaginatedRemoteFieldClassList, _response.json()) # type: ignore
@@ -468,11 +610,12 @@ async def list(
modified_before: typing.Optional[dt.datetime] = None,
owner_id: typing.Optional[str] = None,
page_size: typing.Optional[int] = None,
- remote_fields: typing.Optional[typing_extensions.Literal["status"]] = None,
+ remote_fields: typing.Optional[typing.Literal["status"]] = None,
remote_id: typing.Optional[str] = None,
- show_enum_origins: typing.Optional[typing_extensions.Literal["status"]] = None,
+ show_enum_origins: typing.Optional[typing.Literal["status"]] = None,
stage_id: typing.Optional[str] = None,
status: typing.Optional[OpportunitiesListRequestStatus] = None,
+ request_options: typing.Optional[RequestOptions] = None,
) -> PaginatedOpportunityList:
"""
Returns a list of `Opportunity` objects.
@@ -502,11 +645,11 @@ async def list(
- page_size: typing.Optional[int]. Number of results to return per page.
- - remote_fields: typing.Optional[typing_extensions.Literal["status"]]. Deprecated. Use show_enum_origins.
+ - remote_fields: typing.Optional[typing.Literal["status"]]. Deprecated. Use show_enum_origins.
- remote_id: typing.Optional[str]. The API provider's ID for the given object.
- - show_enum_origins: typing.Optional[typing_extensions.Literal["status"]]. Which fields should be returned in non-normalized form.
+ - show_enum_origins: typing.Optional[typing.Literal["status"]]. Which fields should be returned in non-normalized form.
- stage_id: typing.Optional[str]. If provided, will only return opportunities with this stage.
@@ -514,7 +657,9 @@ async def list(
- `OPEN` - OPEN
- `WON` - WON
- - `LOST` - LOST---
+ - `LOST` - LOST
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
+ ---
from merge.client import AsyncMerge
from merge.resources.crm import (
OpportunitiesListRequestExpand,
@@ -535,29 +680,45 @@ async def list(
_response = await self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/crm/v1/opportunities"),
- params=remove_none_from_dict(
- {
- "account_id": account_id,
- "created_after": serialize_datetime(created_after) if created_after is not None else None,
- "created_before": serialize_datetime(created_before) if created_before is not None else None,
- "cursor": cursor,
- "expand": expand,
- "include_deleted_data": include_deleted_data,
- "include_remote_data": include_remote_data,
- "include_remote_fields": include_remote_fields,
- "modified_after": serialize_datetime(modified_after) if modified_after is not None else None,
- "modified_before": serialize_datetime(modified_before) if modified_before is not None else None,
- "owner_id": owner_id,
- "page_size": page_size,
- "remote_fields": remote_fields,
- "remote_id": remote_id,
- "show_enum_origins": show_enum_origins,
- "stage_id": stage_id,
- "status": status,
- }
- ),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "account_id": account_id,
+ "created_after": serialize_datetime(created_after) if created_after is not None else None,
+ "created_before": serialize_datetime(created_before) if created_before is not None else None,
+ "cursor": cursor,
+ "expand": expand,
+ "include_deleted_data": include_deleted_data,
+ "include_remote_data": include_remote_data,
+ "include_remote_fields": include_remote_fields,
+ "modified_after": serialize_datetime(modified_after) if modified_after is not None else None,
+ "modified_before": serialize_datetime(modified_before) if modified_before is not None else None,
+ "owner_id": owner_id,
+ "page_size": page_size,
+ "remote_fields": remote_fields,
+ "remote_id": remote_id,
+ "show_enum_origins": show_enum_origins,
+ "stage_id": stage_id,
+ "status": status,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(PaginatedOpportunityList, _response.json()) # type: ignore
@@ -573,6 +734,7 @@ async def create(
is_debug_mode: typing.Optional[bool] = None,
run_async: typing.Optional[bool] = None,
model: OpportunityRequest,
+ request_options: typing.Optional[RequestOptions] = None,
) -> OpportunityResponse:
"""
Creates an `Opportunity` object with the given values.
@@ -583,6 +745,8 @@ async def create(
- run_async: typing.Optional[bool]. Whether or not third-party updates should be run asynchronously.
- model: OpportunityRequest.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
import datetime
@@ -597,7 +761,7 @@ async def create(
model=OpportunityRequest(
name="Needs Integrations",
description="Needs a Unified API for Integrations!",
- amount=100000,
+ amount=1,
last_activity_at=datetime.datetime.fromisoformat(
"2022-02-10 00:00:00+00:00",
),
@@ -610,10 +774,36 @@ async def create(
_response = await self._client_wrapper.httpx_client.request(
"POST",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/crm/v1/opportunities"),
- params=remove_none_from_dict({"is_debug_mode": is_debug_mode, "run_async": run_async}),
- json=jsonable_encoder({"model": model}),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "is_debug_mode": is_debug_mode,
+ "run_async": run_async,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ json=jsonable_encoder({"model": model})
+ if request_options is None or request_options.get("additional_body_parameters") is None
+ else {
+ **jsonable_encoder({"model": model}),
+ **(jsonable_encoder(remove_none_from_dict(request_options.get("additional_body_parameters", {})))),
+ },
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(OpportunityResponse, _response.json()) # type: ignore
@@ -630,8 +820,9 @@ async def retrieve(
expand: typing.Optional[OpportunitiesRetrieveRequestExpand] = None,
include_remote_data: typing.Optional[bool] = None,
include_remote_fields: typing.Optional[bool] = None,
- remote_fields: typing.Optional[typing_extensions.Literal["status"]] = None,
- show_enum_origins: typing.Optional[typing_extensions.Literal["status"]] = None,
+ remote_fields: typing.Optional[typing.Literal["status"]] = None,
+ show_enum_origins: typing.Optional[typing.Literal["status"]] = None,
+ request_options: typing.Optional[RequestOptions] = None,
) -> Opportunity:
"""
Returns an `Opportunity` object with the given `id`.
@@ -645,9 +836,11 @@ async def retrieve(
- include_remote_fields: typing.Optional[bool]. Whether to include all remote fields, including fields that Merge did not map to common models, in a normalized format.
- - remote_fields: typing.Optional[typing_extensions.Literal["status"]]. Deprecated. Use show_enum_origins.
+ - remote_fields: typing.Optional[typing.Literal["status"]]. Deprecated. Use show_enum_origins.
- - show_enum_origins: typing.Optional[typing_extensions.Literal["status"]]. Which fields should be returned in non-normalized form.
+ - show_enum_origins: typing.Optional[typing.Literal["status"]]. Which fields should be returned in non-normalized form.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import AsyncMerge
from merge.resources.crm import OpportunitiesRetrieveRequestExpand
@@ -657,7 +850,7 @@ async def retrieve(
api_key="YOUR_API_KEY",
)
await client.crm.opportunities.retrieve(
- id="id",
+ id="string",
expand=OpportunitiesRetrieveRequestExpand.ACCOUNT,
remote_fields="status",
show_enum_origins="status",
@@ -666,17 +859,33 @@ async def retrieve(
_response = await self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", f"api/crm/v1/opportunities/{id}"),
- params=remove_none_from_dict(
- {
- "expand": expand,
- "include_remote_data": include_remote_data,
- "include_remote_fields": include_remote_fields,
- "remote_fields": remote_fields,
- "show_enum_origins": show_enum_origins,
- }
- ),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "expand": expand,
+ "include_remote_data": include_remote_data,
+ "include_remote_fields": include_remote_fields,
+ "remote_fields": remote_fields,
+ "show_enum_origins": show_enum_origins,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(Opportunity, _response.json()) # type: ignore
@@ -693,6 +902,7 @@ async def partial_update(
is_debug_mode: typing.Optional[bool] = None,
run_async: typing.Optional[bool] = None,
model: PatchedOpportunityRequest,
+ request_options: typing.Optional[RequestOptions] = None,
) -> OpportunityResponse:
"""
Updates an `Opportunity` object with the given `id`.
@@ -705,6 +915,8 @@ async def partial_update(
- run_async: typing.Optional[bool]. Whether or not third-party updates should be run asynchronously.
- model: PatchedOpportunityRequest.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
import datetime
@@ -716,11 +928,11 @@ async def partial_update(
api_key="YOUR_API_KEY",
)
await client.crm.opportunities.partial_update(
- id="id",
+ id="string",
model=PatchedOpportunityRequest(
name="Needs Integrations",
description="Needs a Unified API for Integrations!",
- amount=100000,
+ amount=1,
owner="0358cbc6-2040-430a-848e-aafacbadf3aa",
account="0958cbc6-6040-430a-848e-aafacbadf4ae",
stage="1968cbc6-6040-430a-848e-aafacbadf4ad",
@@ -736,10 +948,36 @@ async def partial_update(
_response = await self._client_wrapper.httpx_client.request(
"PATCH",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", f"api/crm/v1/opportunities/{id}"),
- params=remove_none_from_dict({"is_debug_mode": is_debug_mode, "run_async": run_async}),
- json=jsonable_encoder({"model": model}),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "is_debug_mode": is_debug_mode,
+ "run_async": run_async,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ json=jsonable_encoder({"model": model})
+ if request_options is None or request_options.get("additional_body_parameters") is None
+ else {
+ **jsonable_encoder({"model": model}),
+ **(jsonable_encoder(remove_none_from_dict(request_options.get("additional_body_parameters", {})))),
+ },
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(OpportunityResponse, _response.json()) # type: ignore
@@ -749,12 +987,16 @@ async def partial_update(
raise ApiError(status_code=_response.status_code, body=_response.text)
raise ApiError(status_code=_response.status_code, body=_response_json)
- async def meta_patch_retrieve(self, id: str) -> MetaResponse:
+ async def meta_patch_retrieve(
+ self, id: str, *, request_options: typing.Optional[RequestOptions] = None
+ ) -> MetaResponse:
"""
Returns metadata for `Opportunity` PATCHs.
Parameters:
- id: str.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import AsyncMerge
@@ -763,7 +1005,7 @@ async def meta_patch_retrieve(self, id: str) -> MetaResponse:
api_key="YOUR_API_KEY",
)
await client.crm.opportunities.meta_patch_retrieve(
- id="id",
+ id="string",
)
"""
_response = await self._client_wrapper.httpx_client.request(
@@ -771,8 +1013,20 @@ async def meta_patch_retrieve(self, id: str) -> MetaResponse:
urllib.parse.urljoin(
f"{self._client_wrapper.get_base_url()}/", f"api/crm/v1/opportunities/meta/patch/{id}"
),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ request_options.get("additional_query_parameters") if request_options is not None else None
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(MetaResponse, _response.json()) # type: ignore
@@ -782,10 +1036,12 @@ async def meta_patch_retrieve(self, id: str) -> MetaResponse:
raise ApiError(status_code=_response.status_code, body=_response.text)
raise ApiError(status_code=_response.status_code, body=_response_json)
- async def meta_post_retrieve(self) -> MetaResponse:
+ async def meta_post_retrieve(self, *, request_options: typing.Optional[RequestOptions] = None) -> MetaResponse:
"""
Returns metadata for `Opportunity` POSTs.
+ Parameters:
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import AsyncMerge
@@ -798,8 +1054,20 @@ async def meta_post_retrieve(self) -> MetaResponse:
_response = await self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/crm/v1/opportunities/meta/post"),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ request_options.get("additional_query_parameters") if request_options is not None else None
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(MetaResponse, _response.json()) # type: ignore
@@ -817,6 +1085,7 @@ async def remote_field_classes_list(
include_remote_data: typing.Optional[bool] = None,
include_remote_fields: typing.Optional[bool] = None,
page_size: typing.Optional[int] = None,
+ request_options: typing.Optional[RequestOptions] = None,
) -> PaginatedRemoteFieldClassList:
"""
Returns a list of `RemoteFieldClass` objects.
@@ -831,6 +1100,8 @@ async def remote_field_classes_list(
- include_remote_fields: typing.Optional[bool]. Whether to include all remote fields, including fields that Merge did not map to common models, in a normalized format.
- page_size: typing.Optional[int]. Number of results to return per page.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import AsyncMerge
@@ -845,17 +1116,33 @@ async def remote_field_classes_list(
urllib.parse.urljoin(
f"{self._client_wrapper.get_base_url()}/", "api/crm/v1/opportunities/remote-field-classes"
),
- params=remove_none_from_dict(
- {
- "cursor": cursor,
- "include_deleted_data": include_deleted_data,
- "include_remote_data": include_remote_data,
- "include_remote_fields": include_remote_fields,
- "page_size": page_size,
- }
- ),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "cursor": cursor,
+ "include_deleted_data": include_deleted_data,
+ "include_remote_data": include_remote_data,
+ "include_remote_fields": include_remote_fields,
+ "page_size": page_size,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(PaginatedRemoteFieldClassList, _response.json()) # type: ignore
diff --git a/src/merge/resources/crm/resources/passthrough/client.py b/src/merge/resources/crm/resources/passthrough/client.py
index 5a9c6fb1..d9c495d4 100644
--- a/src/merge/resources/crm/resources/passthrough/client.py
+++ b/src/merge/resources/crm/resources/passthrough/client.py
@@ -7,6 +7,8 @@
from .....core.api_error import ApiError
from .....core.client_wrapper import AsyncClientWrapper, SyncClientWrapper
from .....core.jsonable_encoder import jsonable_encoder
+from .....core.remove_none_from_dict import remove_none_from_dict
+from .....core.request_options import RequestOptions
from ...types.data_passthrough_request import DataPassthroughRequest
from ...types.remote_response import RemoteResponse
@@ -23,19 +25,60 @@ class PassthroughClient:
def __init__(self, *, client_wrapper: SyncClientWrapper):
self._client_wrapper = client_wrapper
- def create(self, *, request: DataPassthroughRequest) -> RemoteResponse:
+ def create(
+ self, *, request: DataPassthroughRequest, request_options: typing.Optional[RequestOptions] = None
+ ) -> RemoteResponse:
"""
Pull data from an endpoint not currently supported by Merge.
Parameters:
- request: DataPassthroughRequest.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
+ ---
+ from merge.client import Merge
+ from merge.resources.crm import (
+ DataPassthroughRequest,
+ MethodEnum,
+ RequestFormatEnum,
+ )
+
+ client = Merge(
+ account_token="YOUR_ACCOUNT_TOKEN",
+ api_key="YOUR_API_KEY",
+ )
+ client.crm.passthrough.create(
+ request=DataPassthroughRequest(
+ method=MethodEnum.GET,
+ path="/scooters",
+ data='{"company": "Lime", "model": "Gen 2.5"}',
+ request_format=RequestFormatEnum.JSON,
+ ),
+ )
"""
_response = self._client_wrapper.httpx_client.request(
"POST",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/crm/v1/passthrough"),
- json=jsonable_encoder(request),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ request_options.get("additional_query_parameters") if request_options is not None else None
+ ),
+ json=jsonable_encoder(request)
+ if request_options is None or request_options.get("additional_body_parameters") is None
+ else {
+ **jsonable_encoder(request),
+ **(jsonable_encoder(remove_none_from_dict(request_options.get("additional_body_parameters", {})))),
+ },
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(RemoteResponse, _response.json()) # type: ignore
@@ -50,19 +93,60 @@ class AsyncPassthroughClient:
def __init__(self, *, client_wrapper: AsyncClientWrapper):
self._client_wrapper = client_wrapper
- async def create(self, *, request: DataPassthroughRequest) -> RemoteResponse:
+ async def create(
+ self, *, request: DataPassthroughRequest, request_options: typing.Optional[RequestOptions] = None
+ ) -> RemoteResponse:
"""
Pull data from an endpoint not currently supported by Merge.
Parameters:
- request: DataPassthroughRequest.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
+ ---
+ from merge.client import AsyncMerge
+ from merge.resources.crm import (
+ DataPassthroughRequest,
+ MethodEnum,
+ RequestFormatEnum,
+ )
+
+ client = AsyncMerge(
+ account_token="YOUR_ACCOUNT_TOKEN",
+ api_key="YOUR_API_KEY",
+ )
+ await client.crm.passthrough.create(
+ request=DataPassthroughRequest(
+ method=MethodEnum.GET,
+ path="/scooters",
+ data='{"company": "Lime", "model": "Gen 2.5"}',
+ request_format=RequestFormatEnum.JSON,
+ ),
+ )
"""
_response = await self._client_wrapper.httpx_client.request(
"POST",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/crm/v1/passthrough"),
- json=jsonable_encoder(request),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ request_options.get("additional_query_parameters") if request_options is not None else None
+ ),
+ json=jsonable_encoder(request)
+ if request_options is None or request_options.get("additional_body_parameters") is None
+ else {
+ **jsonable_encoder(request),
+ **(jsonable_encoder(remove_none_from_dict(request_options.get("additional_body_parameters", {})))),
+ },
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(RemoteResponse, _response.json()) # type: ignore
diff --git a/src/merge/resources/crm/resources/regenerate_key/client.py b/src/merge/resources/crm/resources/regenerate_key/client.py
index 6de3249e..27da6903 100644
--- a/src/merge/resources/crm/resources/regenerate_key/client.py
+++ b/src/merge/resources/crm/resources/regenerate_key/client.py
@@ -7,6 +7,8 @@
from .....core.api_error import ApiError
from .....core.client_wrapper import AsyncClientWrapper, SyncClientWrapper
from .....core.jsonable_encoder import jsonable_encoder
+from .....core.remove_none_from_dict import remove_none_from_dict
+from .....core.request_options import RequestOptions
from ...types.remote_key import RemoteKey
try:
@@ -22,12 +24,14 @@ class RegenerateKeyClient:
def __init__(self, *, client_wrapper: SyncClientWrapper):
self._client_wrapper = client_wrapper
- def create(self, *, name: str) -> RemoteKey:
+ def create(self, *, name: str, request_options: typing.Optional[RequestOptions] = None) -> RemoteKey:
"""
Exchange remote keys.
Parameters:
- name: str.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import Merge
@@ -42,9 +46,26 @@ def create(self, *, name: str) -> RemoteKey:
_response = self._client_wrapper.httpx_client.request(
"POST",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/crm/v1/regenerate-key"),
- json=jsonable_encoder({"name": name}),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ request_options.get("additional_query_parameters") if request_options is not None else None
+ ),
+ json=jsonable_encoder({"name": name})
+ if request_options is None or request_options.get("additional_body_parameters") is None
+ else {
+ **jsonable_encoder({"name": name}),
+ **(jsonable_encoder(remove_none_from_dict(request_options.get("additional_body_parameters", {})))),
+ },
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(RemoteKey, _response.json()) # type: ignore
@@ -59,12 +80,14 @@ class AsyncRegenerateKeyClient:
def __init__(self, *, client_wrapper: AsyncClientWrapper):
self._client_wrapper = client_wrapper
- async def create(self, *, name: str) -> RemoteKey:
+ async def create(self, *, name: str, request_options: typing.Optional[RequestOptions] = None) -> RemoteKey:
"""
Exchange remote keys.
Parameters:
- name: str.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import AsyncMerge
@@ -79,9 +102,26 @@ async def create(self, *, name: str) -> RemoteKey:
_response = await self._client_wrapper.httpx_client.request(
"POST",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/crm/v1/regenerate-key"),
- json=jsonable_encoder({"name": name}),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ request_options.get("additional_query_parameters") if request_options is not None else None
+ ),
+ json=jsonable_encoder({"name": name})
+ if request_options is None or request_options.get("additional_body_parameters") is None
+ else {
+ **jsonable_encoder({"name": name}),
+ **(jsonable_encoder(remove_none_from_dict(request_options.get("additional_body_parameters", {})))),
+ },
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(RemoteKey, _response.json()) # type: ignore
diff --git a/src/merge/resources/crm/resources/selective_sync/client.py b/src/merge/resources/crm/resources/selective_sync/client.py
index 40d6b332..486f8a88 100644
--- a/src/merge/resources/crm/resources/selective_sync/client.py
+++ b/src/merge/resources/crm/resources/selective_sync/client.py
@@ -8,6 +8,7 @@
from .....core.client_wrapper import AsyncClientWrapper, SyncClientWrapper
from .....core.jsonable_encoder import jsonable_encoder
from .....core.remove_none_from_dict import remove_none_from_dict
+from .....core.request_options import RequestOptions
from ...types.linked_account_selective_sync_configuration import LinkedAccountSelectiveSyncConfiguration
from ...types.linked_account_selective_sync_configuration_request import LinkedAccountSelectiveSyncConfigurationRequest
from ...types.paginated_condition_schema_list import PaginatedConditionSchemaList
@@ -25,10 +26,14 @@ class SelectiveSyncClient:
def __init__(self, *, client_wrapper: SyncClientWrapper):
self._client_wrapper = client_wrapper
- def configurations_list(self) -> typing.List[LinkedAccountSelectiveSyncConfiguration]:
+ def configurations_list(
+ self, *, request_options: typing.Optional[RequestOptions] = None
+ ) -> typing.List[LinkedAccountSelectiveSyncConfiguration]:
"""
Get a linked account's selective syncs.
+ Parameters:
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import Merge
@@ -41,8 +46,20 @@ def configurations_list(self) -> typing.List[LinkedAccountSelectiveSyncConfigura
_response = self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/crm/v1/selective-sync/configurations"),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ request_options.get("additional_query_parameters") if request_options is not None else None
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(typing.List[LinkedAccountSelectiveSyncConfiguration], _response.json()) # type: ignore
@@ -53,35 +70,52 @@ def configurations_list(self) -> typing.List[LinkedAccountSelectiveSyncConfigura
raise ApiError(status_code=_response.status_code, body=_response_json)
def configurations_update(
- self, *, sync_configurations: typing.List[LinkedAccountSelectiveSyncConfigurationRequest]
+ self,
+ *,
+ sync_configurations: typing.List[LinkedAccountSelectiveSyncConfigurationRequest],
+ request_options: typing.Optional[RequestOptions] = None,
) -> typing.List[LinkedAccountSelectiveSyncConfiguration]:
"""
Replace a linked account's selective syncs.
Parameters:
- sync_configurations: typing.List[LinkedAccountSelectiveSyncConfigurationRequest]. The selective syncs associated with a linked account.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import Merge
- from merge.resources.crm import LinkedAccountSelectiveSyncConfigurationRequest
client = Merge(
account_token="YOUR_ACCOUNT_TOKEN",
api_key="YOUR_API_KEY",
)
client.crm.selective_sync.configurations_update(
- sync_configurations=[
- LinkedAccountSelectiveSyncConfigurationRequest(
- linked_account_conditions=[],
- )
- ],
+ sync_configurations=[],
)
"""
_response = self._client_wrapper.httpx_client.request(
"PUT",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/crm/v1/selective-sync/configurations"),
- json=jsonable_encoder({"sync_configurations": sync_configurations}),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ request_options.get("additional_query_parameters") if request_options is not None else None
+ ),
+ json=jsonable_encoder({"sync_configurations": sync_configurations})
+ if request_options is None or request_options.get("additional_body_parameters") is None
+ else {
+ **jsonable_encoder({"sync_configurations": sync_configurations}),
+ **(jsonable_encoder(remove_none_from_dict(request_options.get("additional_body_parameters", {})))),
+ },
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(typing.List[LinkedAccountSelectiveSyncConfiguration], _response.json()) # type: ignore
@@ -97,6 +131,7 @@ def meta_list(
common_model: typing.Optional[str] = None,
cursor: typing.Optional[str] = None,
page_size: typing.Optional[int] = None,
+ request_options: typing.Optional[RequestOptions] = None,
) -> PaginatedConditionSchemaList:
"""
Get metadata for the conditions available to a linked account.
@@ -107,6 +142,8 @@ def meta_list(
- cursor: typing.Optional[str]. The pagination cursor value.
- page_size: typing.Optional[int]. Number of results to return per page.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import Merge
@@ -119,9 +156,31 @@ def meta_list(
_response = self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/crm/v1/selective-sync/meta"),
- params=remove_none_from_dict({"common_model": common_model, "cursor": cursor, "page_size": page_size}),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "common_model": common_model,
+ "cursor": cursor,
+ "page_size": page_size,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(PaginatedConditionSchemaList, _response.json()) # type: ignore
@@ -136,10 +195,14 @@ class AsyncSelectiveSyncClient:
def __init__(self, *, client_wrapper: AsyncClientWrapper):
self._client_wrapper = client_wrapper
- async def configurations_list(self) -> typing.List[LinkedAccountSelectiveSyncConfiguration]:
+ async def configurations_list(
+ self, *, request_options: typing.Optional[RequestOptions] = None
+ ) -> typing.List[LinkedAccountSelectiveSyncConfiguration]:
"""
Get a linked account's selective syncs.
+ Parameters:
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import AsyncMerge
@@ -152,8 +215,20 @@ async def configurations_list(self) -> typing.List[LinkedAccountSelectiveSyncCon
_response = await self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/crm/v1/selective-sync/configurations"),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ request_options.get("additional_query_parameters") if request_options is not None else None
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(typing.List[LinkedAccountSelectiveSyncConfiguration], _response.json()) # type: ignore
@@ -164,35 +239,52 @@ async def configurations_list(self) -> typing.List[LinkedAccountSelectiveSyncCon
raise ApiError(status_code=_response.status_code, body=_response_json)
async def configurations_update(
- self, *, sync_configurations: typing.List[LinkedAccountSelectiveSyncConfigurationRequest]
+ self,
+ *,
+ sync_configurations: typing.List[LinkedAccountSelectiveSyncConfigurationRequest],
+ request_options: typing.Optional[RequestOptions] = None,
) -> typing.List[LinkedAccountSelectiveSyncConfiguration]:
"""
Replace a linked account's selective syncs.
Parameters:
- sync_configurations: typing.List[LinkedAccountSelectiveSyncConfigurationRequest]. The selective syncs associated with a linked account.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import AsyncMerge
- from merge.resources.crm import LinkedAccountSelectiveSyncConfigurationRequest
client = AsyncMerge(
account_token="YOUR_ACCOUNT_TOKEN",
api_key="YOUR_API_KEY",
)
await client.crm.selective_sync.configurations_update(
- sync_configurations=[
- LinkedAccountSelectiveSyncConfigurationRequest(
- linked_account_conditions=[],
- )
- ],
+ sync_configurations=[],
)
"""
_response = await self._client_wrapper.httpx_client.request(
"PUT",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/crm/v1/selective-sync/configurations"),
- json=jsonable_encoder({"sync_configurations": sync_configurations}),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ request_options.get("additional_query_parameters") if request_options is not None else None
+ ),
+ json=jsonable_encoder({"sync_configurations": sync_configurations})
+ if request_options is None or request_options.get("additional_body_parameters") is None
+ else {
+ **jsonable_encoder({"sync_configurations": sync_configurations}),
+ **(jsonable_encoder(remove_none_from_dict(request_options.get("additional_body_parameters", {})))),
+ },
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(typing.List[LinkedAccountSelectiveSyncConfiguration], _response.json()) # type: ignore
@@ -208,6 +300,7 @@ async def meta_list(
common_model: typing.Optional[str] = None,
cursor: typing.Optional[str] = None,
page_size: typing.Optional[int] = None,
+ request_options: typing.Optional[RequestOptions] = None,
) -> PaginatedConditionSchemaList:
"""
Get metadata for the conditions available to a linked account.
@@ -218,6 +311,8 @@ async def meta_list(
- cursor: typing.Optional[str]. The pagination cursor value.
- page_size: typing.Optional[int]. Number of results to return per page.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import AsyncMerge
@@ -230,9 +325,31 @@ async def meta_list(
_response = await self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/crm/v1/selective-sync/meta"),
- params=remove_none_from_dict({"common_model": common_model, "cursor": cursor, "page_size": page_size}),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "common_model": common_model,
+ "cursor": cursor,
+ "page_size": page_size,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(PaginatedConditionSchemaList, _response.json()) # type: ignore
diff --git a/src/merge/resources/crm/resources/stages/client.py b/src/merge/resources/crm/resources/stages/client.py
index 0ab07013..5b7a9cd7 100644
--- a/src/merge/resources/crm/resources/stages/client.py
+++ b/src/merge/resources/crm/resources/stages/client.py
@@ -8,7 +8,9 @@
from .....core.api_error import ApiError
from .....core.client_wrapper import AsyncClientWrapper, SyncClientWrapper
from .....core.datetime_utils import serialize_datetime
+from .....core.jsonable_encoder import jsonable_encoder
from .....core.remove_none_from_dict import remove_none_from_dict
+from .....core.request_options import RequestOptions
from ...types.paginated_remote_field_class_list import PaginatedRemoteFieldClassList
from ...types.paginated_stage_list import PaginatedStageList
from ...types.stage import Stage
@@ -36,6 +38,7 @@ def list(
modified_before: typing.Optional[dt.datetime] = None,
page_size: typing.Optional[int] = None,
remote_id: typing.Optional[str] = None,
+ request_options: typing.Optional[RequestOptions] = None,
) -> PaginatedStageList:
"""
Returns a list of `Stage` objects.
@@ -60,6 +63,8 @@ def list(
- page_size: typing.Optional[int]. Number of results to return per page.
- remote_id: typing.Optional[str]. The API provider's ID for the given object.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import Merge
@@ -72,22 +77,38 @@ def list(
_response = self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/crm/v1/stages"),
- params=remove_none_from_dict(
- {
- "created_after": serialize_datetime(created_after) if created_after is not None else None,
- "created_before": serialize_datetime(created_before) if created_before is not None else None,
- "cursor": cursor,
- "include_deleted_data": include_deleted_data,
- "include_remote_data": include_remote_data,
- "include_remote_fields": include_remote_fields,
- "modified_after": serialize_datetime(modified_after) if modified_after is not None else None,
- "modified_before": serialize_datetime(modified_before) if modified_before is not None else None,
- "page_size": page_size,
- "remote_id": remote_id,
- }
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "created_after": serialize_datetime(created_after) if created_after is not None else None,
+ "created_before": serialize_datetime(created_before) if created_before is not None else None,
+ "cursor": cursor,
+ "include_deleted_data": include_deleted_data,
+ "include_remote_data": include_remote_data,
+ "include_remote_fields": include_remote_fields,
+ "modified_after": serialize_datetime(modified_after) if modified_after is not None else None,
+ "modified_before": serialize_datetime(modified_before) if modified_before is not None else None,
+ "page_size": page_size,
+ "remote_id": remote_id,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(PaginatedStageList, _response.json()) # type: ignore
@@ -103,6 +124,7 @@ def retrieve(
*,
include_remote_data: typing.Optional[bool] = None,
include_remote_fields: typing.Optional[bool] = None,
+ request_options: typing.Optional[RequestOptions] = None,
) -> Stage:
"""
Returns a `Stage` object with the given `id`.
@@ -113,6 +135,8 @@ def retrieve(
- include_remote_data: typing.Optional[bool]. Whether to include the original data Merge fetched from the third-party to produce these models.
- include_remote_fields: typing.Optional[bool]. Whether to include all remote fields, including fields that Merge did not map to common models, in a normalized format.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import Merge
@@ -121,17 +145,36 @@ def retrieve(
api_key="YOUR_API_KEY",
)
client.crm.stages.retrieve(
- id="id",
+ id="string",
)
"""
_response = self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", f"api/crm/v1/stages/{id}"),
- params=remove_none_from_dict(
- {"include_remote_data": include_remote_data, "include_remote_fields": include_remote_fields}
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "include_remote_data": include_remote_data,
+ "include_remote_fields": include_remote_fields,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(Stage, _response.json()) # type: ignore
@@ -149,6 +192,7 @@ def remote_field_classes_list(
include_remote_data: typing.Optional[bool] = None,
include_remote_fields: typing.Optional[bool] = None,
page_size: typing.Optional[int] = None,
+ request_options: typing.Optional[RequestOptions] = None,
) -> PaginatedRemoteFieldClassList:
"""
Returns a list of `RemoteFieldClass` objects.
@@ -163,6 +207,8 @@ def remote_field_classes_list(
- include_remote_fields: typing.Optional[bool]. Whether to include all remote fields, including fields that Merge did not map to common models, in a normalized format.
- page_size: typing.Optional[int]. Number of results to return per page.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import Merge
@@ -175,17 +221,33 @@ def remote_field_classes_list(
_response = self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/crm/v1/stages/remote-field-classes"),
- params=remove_none_from_dict(
- {
- "cursor": cursor,
- "include_deleted_data": include_deleted_data,
- "include_remote_data": include_remote_data,
- "include_remote_fields": include_remote_fields,
- "page_size": page_size,
- }
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "cursor": cursor,
+ "include_deleted_data": include_deleted_data,
+ "include_remote_data": include_remote_data,
+ "include_remote_fields": include_remote_fields,
+ "page_size": page_size,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(PaginatedRemoteFieldClassList, _response.json()) # type: ignore
@@ -213,6 +275,7 @@ async def list(
modified_before: typing.Optional[dt.datetime] = None,
page_size: typing.Optional[int] = None,
remote_id: typing.Optional[str] = None,
+ request_options: typing.Optional[RequestOptions] = None,
) -> PaginatedStageList:
"""
Returns a list of `Stage` objects.
@@ -237,6 +300,8 @@ async def list(
- page_size: typing.Optional[int]. Number of results to return per page.
- remote_id: typing.Optional[str]. The API provider's ID for the given object.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import AsyncMerge
@@ -249,22 +314,38 @@ async def list(
_response = await self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/crm/v1/stages"),
- params=remove_none_from_dict(
- {
- "created_after": serialize_datetime(created_after) if created_after is not None else None,
- "created_before": serialize_datetime(created_before) if created_before is not None else None,
- "cursor": cursor,
- "include_deleted_data": include_deleted_data,
- "include_remote_data": include_remote_data,
- "include_remote_fields": include_remote_fields,
- "modified_after": serialize_datetime(modified_after) if modified_after is not None else None,
- "modified_before": serialize_datetime(modified_before) if modified_before is not None else None,
- "page_size": page_size,
- "remote_id": remote_id,
- }
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "created_after": serialize_datetime(created_after) if created_after is not None else None,
+ "created_before": serialize_datetime(created_before) if created_before is not None else None,
+ "cursor": cursor,
+ "include_deleted_data": include_deleted_data,
+ "include_remote_data": include_remote_data,
+ "include_remote_fields": include_remote_fields,
+ "modified_after": serialize_datetime(modified_after) if modified_after is not None else None,
+ "modified_before": serialize_datetime(modified_before) if modified_before is not None else None,
+ "page_size": page_size,
+ "remote_id": remote_id,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(PaginatedStageList, _response.json()) # type: ignore
@@ -280,6 +361,7 @@ async def retrieve(
*,
include_remote_data: typing.Optional[bool] = None,
include_remote_fields: typing.Optional[bool] = None,
+ request_options: typing.Optional[RequestOptions] = None,
) -> Stage:
"""
Returns a `Stage` object with the given `id`.
@@ -290,6 +372,8 @@ async def retrieve(
- include_remote_data: typing.Optional[bool]. Whether to include the original data Merge fetched from the third-party to produce these models.
- include_remote_fields: typing.Optional[bool]. Whether to include all remote fields, including fields that Merge did not map to common models, in a normalized format.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import AsyncMerge
@@ -298,17 +382,36 @@ async def retrieve(
api_key="YOUR_API_KEY",
)
await client.crm.stages.retrieve(
- id="id",
+ id="string",
)
"""
_response = await self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", f"api/crm/v1/stages/{id}"),
- params=remove_none_from_dict(
- {"include_remote_data": include_remote_data, "include_remote_fields": include_remote_fields}
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "include_remote_data": include_remote_data,
+ "include_remote_fields": include_remote_fields,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(Stage, _response.json()) # type: ignore
@@ -326,6 +429,7 @@ async def remote_field_classes_list(
include_remote_data: typing.Optional[bool] = None,
include_remote_fields: typing.Optional[bool] = None,
page_size: typing.Optional[int] = None,
+ request_options: typing.Optional[RequestOptions] = None,
) -> PaginatedRemoteFieldClassList:
"""
Returns a list of `RemoteFieldClass` objects.
@@ -340,6 +444,8 @@ async def remote_field_classes_list(
- include_remote_fields: typing.Optional[bool]. Whether to include all remote fields, including fields that Merge did not map to common models, in a normalized format.
- page_size: typing.Optional[int]. Number of results to return per page.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import AsyncMerge
@@ -352,17 +458,33 @@ async def remote_field_classes_list(
_response = await self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/crm/v1/stages/remote-field-classes"),
- params=remove_none_from_dict(
- {
- "cursor": cursor,
- "include_deleted_data": include_deleted_data,
- "include_remote_data": include_remote_data,
- "include_remote_fields": include_remote_fields,
- "page_size": page_size,
- }
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "cursor": cursor,
+ "include_deleted_data": include_deleted_data,
+ "include_remote_data": include_remote_data,
+ "include_remote_fields": include_remote_fields,
+ "page_size": page_size,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(PaginatedRemoteFieldClassList, _response.json()) # type: ignore
diff --git a/src/merge/resources/crm/resources/sync_status/client.py b/src/merge/resources/crm/resources/sync_status/client.py
index 5c8fe923..d290801a 100644
--- a/src/merge/resources/crm/resources/sync_status/client.py
+++ b/src/merge/resources/crm/resources/sync_status/client.py
@@ -6,7 +6,9 @@
from .....core.api_error import ApiError
from .....core.client_wrapper import AsyncClientWrapper, SyncClientWrapper
+from .....core.jsonable_encoder import jsonable_encoder
from .....core.remove_none_from_dict import remove_none_from_dict
+from .....core.request_options import RequestOptions
from ...types.paginated_sync_status_list import PaginatedSyncStatusList
try:
@@ -20,7 +22,11 @@ def __init__(self, *, client_wrapper: SyncClientWrapper):
self._client_wrapper = client_wrapper
def list(
- self, *, cursor: typing.Optional[str] = None, page_size: typing.Optional[int] = None
+ self,
+ *,
+ cursor: typing.Optional[str] = None,
+ page_size: typing.Optional[int] = None,
+ request_options: typing.Optional[RequestOptions] = None,
) -> PaginatedSyncStatusList:
"""
Get syncing status. Possible values: `DISABLED`, `DONE`, `FAILED`, `PARTIALLY_SYNCED`, `PAUSED`, `SYNCING`. Learn more about sync status in our [Help Center](https://help.merge.dev/en/articles/8184193-merge-sync-statuses).
@@ -29,6 +35,8 @@ def list(
- cursor: typing.Optional[str]. The pagination cursor value.
- page_size: typing.Optional[int]. Number of results to return per page.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import Merge
@@ -41,9 +49,30 @@ def list(
_response = self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/crm/v1/sync-status"),
- params=remove_none_from_dict({"cursor": cursor, "page_size": page_size}),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "cursor": cursor,
+ "page_size": page_size,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(PaginatedSyncStatusList, _response.json()) # type: ignore
@@ -59,7 +88,11 @@ def __init__(self, *, client_wrapper: AsyncClientWrapper):
self._client_wrapper = client_wrapper
async def list(
- self, *, cursor: typing.Optional[str] = None, page_size: typing.Optional[int] = None
+ self,
+ *,
+ cursor: typing.Optional[str] = None,
+ page_size: typing.Optional[int] = None,
+ request_options: typing.Optional[RequestOptions] = None,
) -> PaginatedSyncStatusList:
"""
Get syncing status. Possible values: `DISABLED`, `DONE`, `FAILED`, `PARTIALLY_SYNCED`, `PAUSED`, `SYNCING`. Learn more about sync status in our [Help Center](https://help.merge.dev/en/articles/8184193-merge-sync-statuses).
@@ -68,6 +101,8 @@ async def list(
- cursor: typing.Optional[str]. The pagination cursor value.
- page_size: typing.Optional[int]. Number of results to return per page.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import AsyncMerge
@@ -80,9 +115,30 @@ async def list(
_response = await self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/crm/v1/sync-status"),
- params=remove_none_from_dict({"cursor": cursor, "page_size": page_size}),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "cursor": cursor,
+ "page_size": page_size,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(PaginatedSyncStatusList, _response.json()) # type: ignore
diff --git a/src/merge/resources/crm/resources/tasks/client.py b/src/merge/resources/crm/resources/tasks/client.py
index 12022203..16736a45 100644
--- a/src/merge/resources/crm/resources/tasks/client.py
+++ b/src/merge/resources/crm/resources/tasks/client.py
@@ -10,6 +10,7 @@
from .....core.datetime_utils import serialize_datetime
from .....core.jsonable_encoder import jsonable_encoder
from .....core.remove_none_from_dict import remove_none_from_dict
+from .....core.request_options import RequestOptions
from ...types.meta_response import MetaResponse
from ...types.paginated_remote_field_class_list import PaginatedRemoteFieldClassList
from ...types.paginated_task_list import PaginatedTaskList
@@ -47,6 +48,7 @@ def list(
modified_before: typing.Optional[dt.datetime] = None,
page_size: typing.Optional[int] = None,
remote_id: typing.Optional[str] = None,
+ request_options: typing.Optional[RequestOptions] = None,
) -> PaginatedTaskList:
"""
Returns a list of `Task` objects.
@@ -73,6 +75,8 @@ def list(
- page_size: typing.Optional[int]. Number of results to return per page.
- remote_id: typing.Optional[str]. The API provider's ID for the given object.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import Merge
from merge.resources.crm import TasksListRequestExpand
@@ -88,23 +92,39 @@ def list(
_response = self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/crm/v1/tasks"),
- params=remove_none_from_dict(
- {
- "created_after": serialize_datetime(created_after) if created_after is not None else None,
- "created_before": serialize_datetime(created_before) if created_before is not None else None,
- "cursor": cursor,
- "expand": expand,
- "include_deleted_data": include_deleted_data,
- "include_remote_data": include_remote_data,
- "include_remote_fields": include_remote_fields,
- "modified_after": serialize_datetime(modified_after) if modified_after is not None else None,
- "modified_before": serialize_datetime(modified_before) if modified_before is not None else None,
- "page_size": page_size,
- "remote_id": remote_id,
- }
- ),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "created_after": serialize_datetime(created_after) if created_after is not None else None,
+ "created_before": serialize_datetime(created_before) if created_before is not None else None,
+ "cursor": cursor,
+ "expand": expand,
+ "include_deleted_data": include_deleted_data,
+ "include_remote_data": include_remote_data,
+ "include_remote_fields": include_remote_fields,
+ "modified_after": serialize_datetime(modified_after) if modified_after is not None else None,
+ "modified_before": serialize_datetime(modified_before) if modified_before is not None else None,
+ "page_size": page_size,
+ "remote_id": remote_id,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(PaginatedTaskList, _response.json()) # type: ignore
@@ -120,6 +140,7 @@ def create(
is_debug_mode: typing.Optional[bool] = None,
run_async: typing.Optional[bool] = None,
model: TaskRequest,
+ request_options: typing.Optional[RequestOptions] = None,
) -> TaskResponse:
"""
Creates a `Task` object with the given values.
@@ -130,6 +151,8 @@ def create(
- run_async: typing.Optional[bool]. Whether or not third-party updates should be run asynchronously.
- model: TaskRequest.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
import datetime
@@ -156,10 +179,36 @@ def create(
_response = self._client_wrapper.httpx_client.request(
"POST",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/crm/v1/tasks"),
- params=remove_none_from_dict({"is_debug_mode": is_debug_mode, "run_async": run_async}),
- json=jsonable_encoder({"model": model}),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "is_debug_mode": is_debug_mode,
+ "run_async": run_async,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ json=jsonable_encoder({"model": model})
+ if request_options is None or request_options.get("additional_body_parameters") is None
+ else {
+ **jsonable_encoder({"model": model}),
+ **(jsonable_encoder(remove_none_from_dict(request_options.get("additional_body_parameters", {})))),
+ },
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(TaskResponse, _response.json()) # type: ignore
@@ -176,6 +225,7 @@ def retrieve(
expand: typing.Optional[TasksRetrieveRequestExpand] = None,
include_remote_data: typing.Optional[bool] = None,
include_remote_fields: typing.Optional[bool] = None,
+ request_options: typing.Optional[RequestOptions] = None,
) -> Task:
"""
Returns a `Task` object with the given `id`.
@@ -188,6 +238,8 @@ def retrieve(
- include_remote_data: typing.Optional[bool]. Whether to include the original data Merge fetched from the third-party to produce these models.
- include_remote_fields: typing.Optional[bool]. Whether to include all remote fields, including fields that Merge did not map to common models, in a normalized format.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import Merge
from merge.resources.crm import TasksRetrieveRequestExpand
@@ -197,22 +249,38 @@ def retrieve(
api_key="YOUR_API_KEY",
)
client.crm.tasks.retrieve(
- id="id",
+ id="string",
expand=TasksRetrieveRequestExpand.ACCOUNT,
)
"""
_response = self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", f"api/crm/v1/tasks/{id}"),
- params=remove_none_from_dict(
- {
- "expand": expand,
- "include_remote_data": include_remote_data,
- "include_remote_fields": include_remote_fields,
- }
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "expand": expand,
+ "include_remote_data": include_remote_data,
+ "include_remote_fields": include_remote_fields,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(Task, _response.json()) # type: ignore
@@ -229,6 +297,7 @@ def partial_update(
is_debug_mode: typing.Optional[bool] = None,
run_async: typing.Optional[bool] = None,
model: PatchedTaskRequest,
+ request_options: typing.Optional[RequestOptions] = None,
) -> TaskResponse:
"""
Updates a `Task` object with the given `id`.
@@ -241,6 +310,8 @@ def partial_update(
- run_async: typing.Optional[bool]. Whether or not third-party updates should be run asynchronously.
- model: PatchedTaskRequest.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
import datetime
@@ -252,7 +323,7 @@ def partial_update(
api_key="YOUR_API_KEY",
)
client.crm.tasks.partial_update(
- id="id",
+ id="string",
model=PatchedTaskRequest(
subject="Contact about Integration Strategy",
content="Follow up to see whether they need integrations",
@@ -271,10 +342,36 @@ def partial_update(
_response = self._client_wrapper.httpx_client.request(
"PATCH",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", f"api/crm/v1/tasks/{id}"),
- params=remove_none_from_dict({"is_debug_mode": is_debug_mode, "run_async": run_async}),
- json=jsonable_encoder({"model": model}),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "is_debug_mode": is_debug_mode,
+ "run_async": run_async,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ json=jsonable_encoder({"model": model})
+ if request_options is None or request_options.get("additional_body_parameters") is None
+ else {
+ **jsonable_encoder({"model": model}),
+ **(jsonable_encoder(remove_none_from_dict(request_options.get("additional_body_parameters", {})))),
+ },
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(TaskResponse, _response.json()) # type: ignore
@@ -284,12 +381,14 @@ def partial_update(
raise ApiError(status_code=_response.status_code, body=_response.text)
raise ApiError(status_code=_response.status_code, body=_response_json)
- def meta_patch_retrieve(self, id: str) -> MetaResponse:
+ def meta_patch_retrieve(self, id: str, *, request_options: typing.Optional[RequestOptions] = None) -> MetaResponse:
"""
Returns metadata for `Task` PATCHs.
Parameters:
- id: str.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import Merge
@@ -298,14 +397,26 @@ def meta_patch_retrieve(self, id: str) -> MetaResponse:
api_key="YOUR_API_KEY",
)
client.crm.tasks.meta_patch_retrieve(
- id="id",
+ id="string",
)
"""
_response = self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", f"api/crm/v1/tasks/meta/patch/{id}"),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ request_options.get("additional_query_parameters") if request_options is not None else None
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(MetaResponse, _response.json()) # type: ignore
@@ -315,10 +426,12 @@ def meta_patch_retrieve(self, id: str) -> MetaResponse:
raise ApiError(status_code=_response.status_code, body=_response.text)
raise ApiError(status_code=_response.status_code, body=_response_json)
- def meta_post_retrieve(self) -> MetaResponse:
+ def meta_post_retrieve(self, *, request_options: typing.Optional[RequestOptions] = None) -> MetaResponse:
"""
Returns metadata for `Task` POSTs.
+ Parameters:
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import Merge
@@ -331,8 +444,20 @@ def meta_post_retrieve(self) -> MetaResponse:
_response = self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/crm/v1/tasks/meta/post"),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ request_options.get("additional_query_parameters") if request_options is not None else None
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(MetaResponse, _response.json()) # type: ignore
@@ -350,6 +475,7 @@ def remote_field_classes_list(
include_remote_data: typing.Optional[bool] = None,
include_remote_fields: typing.Optional[bool] = None,
page_size: typing.Optional[int] = None,
+ request_options: typing.Optional[RequestOptions] = None,
) -> PaginatedRemoteFieldClassList:
"""
Returns a list of `RemoteFieldClass` objects.
@@ -364,6 +490,8 @@ def remote_field_classes_list(
- include_remote_fields: typing.Optional[bool]. Whether to include all remote fields, including fields that Merge did not map to common models, in a normalized format.
- page_size: typing.Optional[int]. Number of results to return per page.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import Merge
@@ -376,17 +504,33 @@ def remote_field_classes_list(
_response = self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/crm/v1/tasks/remote-field-classes"),
- params=remove_none_from_dict(
- {
- "cursor": cursor,
- "include_deleted_data": include_deleted_data,
- "include_remote_data": include_remote_data,
- "include_remote_fields": include_remote_fields,
- "page_size": page_size,
- }
- ),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "cursor": cursor,
+ "include_deleted_data": include_deleted_data,
+ "include_remote_data": include_remote_data,
+ "include_remote_fields": include_remote_fields,
+ "page_size": page_size,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(PaginatedRemoteFieldClassList, _response.json()) # type: ignore
@@ -415,6 +559,7 @@ async def list(
modified_before: typing.Optional[dt.datetime] = None,
page_size: typing.Optional[int] = None,
remote_id: typing.Optional[str] = None,
+ request_options: typing.Optional[RequestOptions] = None,
) -> PaginatedTaskList:
"""
Returns a list of `Task` objects.
@@ -441,6 +586,8 @@ async def list(
- page_size: typing.Optional[int]. Number of results to return per page.
- remote_id: typing.Optional[str]. The API provider's ID for the given object.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import AsyncMerge
from merge.resources.crm import TasksListRequestExpand
@@ -456,23 +603,39 @@ async def list(
_response = await self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/crm/v1/tasks"),
- params=remove_none_from_dict(
- {
- "created_after": serialize_datetime(created_after) if created_after is not None else None,
- "created_before": serialize_datetime(created_before) if created_before is not None else None,
- "cursor": cursor,
- "expand": expand,
- "include_deleted_data": include_deleted_data,
- "include_remote_data": include_remote_data,
- "include_remote_fields": include_remote_fields,
- "modified_after": serialize_datetime(modified_after) if modified_after is not None else None,
- "modified_before": serialize_datetime(modified_before) if modified_before is not None else None,
- "page_size": page_size,
- "remote_id": remote_id,
- }
- ),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "created_after": serialize_datetime(created_after) if created_after is not None else None,
+ "created_before": serialize_datetime(created_before) if created_before is not None else None,
+ "cursor": cursor,
+ "expand": expand,
+ "include_deleted_data": include_deleted_data,
+ "include_remote_data": include_remote_data,
+ "include_remote_fields": include_remote_fields,
+ "modified_after": serialize_datetime(modified_after) if modified_after is not None else None,
+ "modified_before": serialize_datetime(modified_before) if modified_before is not None else None,
+ "page_size": page_size,
+ "remote_id": remote_id,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(PaginatedTaskList, _response.json()) # type: ignore
@@ -488,6 +651,7 @@ async def create(
is_debug_mode: typing.Optional[bool] = None,
run_async: typing.Optional[bool] = None,
model: TaskRequest,
+ request_options: typing.Optional[RequestOptions] = None,
) -> TaskResponse:
"""
Creates a `Task` object with the given values.
@@ -498,6 +662,8 @@ async def create(
- run_async: typing.Optional[bool]. Whether or not third-party updates should be run asynchronously.
- model: TaskRequest.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
import datetime
@@ -524,10 +690,36 @@ async def create(
_response = await self._client_wrapper.httpx_client.request(
"POST",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/crm/v1/tasks"),
- params=remove_none_from_dict({"is_debug_mode": is_debug_mode, "run_async": run_async}),
- json=jsonable_encoder({"model": model}),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "is_debug_mode": is_debug_mode,
+ "run_async": run_async,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ json=jsonable_encoder({"model": model})
+ if request_options is None or request_options.get("additional_body_parameters") is None
+ else {
+ **jsonable_encoder({"model": model}),
+ **(jsonable_encoder(remove_none_from_dict(request_options.get("additional_body_parameters", {})))),
+ },
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(TaskResponse, _response.json()) # type: ignore
@@ -544,6 +736,7 @@ async def retrieve(
expand: typing.Optional[TasksRetrieveRequestExpand] = None,
include_remote_data: typing.Optional[bool] = None,
include_remote_fields: typing.Optional[bool] = None,
+ request_options: typing.Optional[RequestOptions] = None,
) -> Task:
"""
Returns a `Task` object with the given `id`.
@@ -556,6 +749,8 @@ async def retrieve(
- include_remote_data: typing.Optional[bool]. Whether to include the original data Merge fetched from the third-party to produce these models.
- include_remote_fields: typing.Optional[bool]. Whether to include all remote fields, including fields that Merge did not map to common models, in a normalized format.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import AsyncMerge
from merge.resources.crm import TasksRetrieveRequestExpand
@@ -565,22 +760,38 @@ async def retrieve(
api_key="YOUR_API_KEY",
)
await client.crm.tasks.retrieve(
- id="id",
+ id="string",
expand=TasksRetrieveRequestExpand.ACCOUNT,
)
"""
_response = await self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", f"api/crm/v1/tasks/{id}"),
- params=remove_none_from_dict(
- {
- "expand": expand,
- "include_remote_data": include_remote_data,
- "include_remote_fields": include_remote_fields,
- }
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "expand": expand,
+ "include_remote_data": include_remote_data,
+ "include_remote_fields": include_remote_fields,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(Task, _response.json()) # type: ignore
@@ -597,6 +808,7 @@ async def partial_update(
is_debug_mode: typing.Optional[bool] = None,
run_async: typing.Optional[bool] = None,
model: PatchedTaskRequest,
+ request_options: typing.Optional[RequestOptions] = None,
) -> TaskResponse:
"""
Updates a `Task` object with the given `id`.
@@ -609,6 +821,8 @@ async def partial_update(
- run_async: typing.Optional[bool]. Whether or not third-party updates should be run asynchronously.
- model: PatchedTaskRequest.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
import datetime
@@ -620,7 +834,7 @@ async def partial_update(
api_key="YOUR_API_KEY",
)
await client.crm.tasks.partial_update(
- id="id",
+ id="string",
model=PatchedTaskRequest(
subject="Contact about Integration Strategy",
content="Follow up to see whether they need integrations",
@@ -639,10 +853,36 @@ async def partial_update(
_response = await self._client_wrapper.httpx_client.request(
"PATCH",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", f"api/crm/v1/tasks/{id}"),
- params=remove_none_from_dict({"is_debug_mode": is_debug_mode, "run_async": run_async}),
- json=jsonable_encoder({"model": model}),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "is_debug_mode": is_debug_mode,
+ "run_async": run_async,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ json=jsonable_encoder({"model": model})
+ if request_options is None or request_options.get("additional_body_parameters") is None
+ else {
+ **jsonable_encoder({"model": model}),
+ **(jsonable_encoder(remove_none_from_dict(request_options.get("additional_body_parameters", {})))),
+ },
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(TaskResponse, _response.json()) # type: ignore
@@ -652,12 +892,16 @@ async def partial_update(
raise ApiError(status_code=_response.status_code, body=_response.text)
raise ApiError(status_code=_response.status_code, body=_response_json)
- async def meta_patch_retrieve(self, id: str) -> MetaResponse:
+ async def meta_patch_retrieve(
+ self, id: str, *, request_options: typing.Optional[RequestOptions] = None
+ ) -> MetaResponse:
"""
Returns metadata for `Task` PATCHs.
Parameters:
- id: str.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import AsyncMerge
@@ -666,14 +910,26 @@ async def meta_patch_retrieve(self, id: str) -> MetaResponse:
api_key="YOUR_API_KEY",
)
await client.crm.tasks.meta_patch_retrieve(
- id="id",
+ id="string",
)
"""
_response = await self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", f"api/crm/v1/tasks/meta/patch/{id}"),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ request_options.get("additional_query_parameters") if request_options is not None else None
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(MetaResponse, _response.json()) # type: ignore
@@ -683,10 +939,12 @@ async def meta_patch_retrieve(self, id: str) -> MetaResponse:
raise ApiError(status_code=_response.status_code, body=_response.text)
raise ApiError(status_code=_response.status_code, body=_response_json)
- async def meta_post_retrieve(self) -> MetaResponse:
+ async def meta_post_retrieve(self, *, request_options: typing.Optional[RequestOptions] = None) -> MetaResponse:
"""
Returns metadata for `Task` POSTs.
+ Parameters:
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import AsyncMerge
@@ -699,8 +957,20 @@ async def meta_post_retrieve(self) -> MetaResponse:
_response = await self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/crm/v1/tasks/meta/post"),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ request_options.get("additional_query_parameters") if request_options is not None else None
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(MetaResponse, _response.json()) # type: ignore
@@ -718,6 +988,7 @@ async def remote_field_classes_list(
include_remote_data: typing.Optional[bool] = None,
include_remote_fields: typing.Optional[bool] = None,
page_size: typing.Optional[int] = None,
+ request_options: typing.Optional[RequestOptions] = None,
) -> PaginatedRemoteFieldClassList:
"""
Returns a list of `RemoteFieldClass` objects.
@@ -732,6 +1003,8 @@ async def remote_field_classes_list(
- include_remote_fields: typing.Optional[bool]. Whether to include all remote fields, including fields that Merge did not map to common models, in a normalized format.
- page_size: typing.Optional[int]. Number of results to return per page.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import AsyncMerge
@@ -744,17 +1017,33 @@ async def remote_field_classes_list(
_response = await self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/crm/v1/tasks/remote-field-classes"),
- params=remove_none_from_dict(
- {
- "cursor": cursor,
- "include_deleted_data": include_deleted_data,
- "include_remote_data": include_remote_data,
- "include_remote_fields": include_remote_fields,
- "page_size": page_size,
- }
- ),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "cursor": cursor,
+ "include_deleted_data": include_deleted_data,
+ "include_remote_data": include_remote_data,
+ "include_remote_fields": include_remote_fields,
+ "page_size": page_size,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(PaginatedRemoteFieldClassList, _response.json()) # type: ignore
diff --git a/src/merge/resources/crm/resources/users/client.py b/src/merge/resources/crm/resources/users/client.py
index 25f161d8..3d901ae7 100644
--- a/src/merge/resources/crm/resources/users/client.py
+++ b/src/merge/resources/crm/resources/users/client.py
@@ -10,6 +10,7 @@
from .....core.datetime_utils import serialize_datetime
from .....core.jsonable_encoder import jsonable_encoder
from .....core.remove_none_from_dict import remove_none_from_dict
+from .....core.request_options import RequestOptions
from ...types.ignore_common_model_request import IgnoreCommonModelRequest
from ...types.paginated_remote_field_class_list import PaginatedRemoteFieldClassList
from ...types.paginated_user_list import PaginatedUserList
@@ -41,6 +42,7 @@ def list(
modified_before: typing.Optional[dt.datetime] = None,
page_size: typing.Optional[int] = None,
remote_id: typing.Optional[str] = None,
+ request_options: typing.Optional[RequestOptions] = None,
) -> PaginatedUserList:
"""
Returns a list of `User` objects.
@@ -65,6 +67,8 @@ def list(
- page_size: typing.Optional[int]. Number of results to return per page.
- remote_id: typing.Optional[str]. The API provider's ID for the given object.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import Merge
@@ -77,22 +81,38 @@ def list(
_response = self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/crm/v1/users"),
- params=remove_none_from_dict(
- {
- "created_after": serialize_datetime(created_after) if created_after is not None else None,
- "created_before": serialize_datetime(created_before) if created_before is not None else None,
- "cursor": cursor,
- "include_deleted_data": include_deleted_data,
- "include_remote_data": include_remote_data,
- "include_remote_fields": include_remote_fields,
- "modified_after": serialize_datetime(modified_after) if modified_after is not None else None,
- "modified_before": serialize_datetime(modified_before) if modified_before is not None else None,
- "page_size": page_size,
- "remote_id": remote_id,
- }
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "created_after": serialize_datetime(created_after) if created_after is not None else None,
+ "created_before": serialize_datetime(created_before) if created_before is not None else None,
+ "cursor": cursor,
+ "include_deleted_data": include_deleted_data,
+ "include_remote_data": include_remote_data,
+ "include_remote_fields": include_remote_fields,
+ "modified_after": serialize_datetime(modified_after) if modified_after is not None else None,
+ "modified_before": serialize_datetime(modified_before) if modified_before is not None else None,
+ "page_size": page_size,
+ "remote_id": remote_id,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(PaginatedUserList, _response.json()) # type: ignore
@@ -108,6 +128,7 @@ def retrieve(
*,
include_remote_data: typing.Optional[bool] = None,
include_remote_fields: typing.Optional[bool] = None,
+ request_options: typing.Optional[RequestOptions] = None,
) -> User:
"""
Returns a `User` object with the given `id`.
@@ -118,6 +139,8 @@ def retrieve(
- include_remote_data: typing.Optional[bool]. Whether to include the original data Merge fetched from the third-party to produce these models.
- include_remote_fields: typing.Optional[bool]. Whether to include all remote fields, including fields that Merge did not map to common models, in a normalized format.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import Merge
@@ -126,17 +149,36 @@ def retrieve(
api_key="YOUR_API_KEY",
)
client.crm.users.retrieve(
- id="id",
+ id="string",
)
"""
_response = self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", f"api/crm/v1/users/{id}"),
- params=remove_none_from_dict(
- {"include_remote_data": include_remote_data, "include_remote_fields": include_remote_fields}
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "include_remote_data": include_remote_data,
+ "include_remote_fields": include_remote_fields,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(User, _response.json()) # type: ignore
@@ -146,7 +188,13 @@ def retrieve(
raise ApiError(status_code=_response.status_code, body=_response.text)
raise ApiError(status_code=_response.status_code, body=_response_json)
- def ignore_create(self, model_id: str, *, request: IgnoreCommonModelRequest) -> None:
+ def ignore_create(
+ self,
+ model_id: str,
+ *,
+ request: IgnoreCommonModelRequest,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> None:
"""
Ignores a specific row based on the `model_id` in the url. These records will have their properties set to null, and will not be updated in future syncs. The "reason" and "message" fields in the request body will be stored for audit purposes.
@@ -154,6 +202,8 @@ def ignore_create(self, model_id: str, *, request: IgnoreCommonModelRequest) ->
- model_id: str.
- request: IgnoreCommonModelRequest.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import Merge
from merge.resources.crm import IgnoreCommonModelRequest, ReasonEnum
@@ -163,7 +213,7 @@ def ignore_create(self, model_id: str, *, request: IgnoreCommonModelRequest) ->
api_key="YOUR_API_KEY",
)
client.crm.users.ignore_create(
- model_id="model-id",
+ model_id="string",
request=IgnoreCommonModelRequest(
reason=ReasonEnum.GENERAL_CUSTOMER_REQUEST,
message="deletion request by user id 51903790-7dfe-4053-8d63-5a10cc4ffd39",
@@ -173,9 +223,26 @@ def ignore_create(self, model_id: str, *, request: IgnoreCommonModelRequest) ->
_response = self._client_wrapper.httpx_client.request(
"POST",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", f"api/crm/v1/users/ignore/{model_id}"),
- json=jsonable_encoder(request),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ request_options.get("additional_query_parameters") if request_options is not None else None
+ ),
+ json=jsonable_encoder(request)
+ if request_options is None or request_options.get("additional_body_parameters") is None
+ else {
+ **jsonable_encoder(request),
+ **(jsonable_encoder(remove_none_from_dict(request_options.get("additional_body_parameters", {})))),
+ },
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return
@@ -193,6 +260,7 @@ def remote_field_classes_list(
include_remote_data: typing.Optional[bool] = None,
include_remote_fields: typing.Optional[bool] = None,
page_size: typing.Optional[int] = None,
+ request_options: typing.Optional[RequestOptions] = None,
) -> PaginatedRemoteFieldClassList:
"""
Returns a list of `RemoteFieldClass` objects.
@@ -207,6 +275,8 @@ def remote_field_classes_list(
- include_remote_fields: typing.Optional[bool]. Whether to include all remote fields, including fields that Merge did not map to common models, in a normalized format.
- page_size: typing.Optional[int]. Number of results to return per page.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import Merge
@@ -219,17 +289,33 @@ def remote_field_classes_list(
_response = self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/crm/v1/users/remote-field-classes"),
- params=remove_none_from_dict(
- {
- "cursor": cursor,
- "include_deleted_data": include_deleted_data,
- "include_remote_data": include_remote_data,
- "include_remote_fields": include_remote_fields,
- "page_size": page_size,
- }
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "cursor": cursor,
+ "include_deleted_data": include_deleted_data,
+ "include_remote_data": include_remote_data,
+ "include_remote_fields": include_remote_fields,
+ "page_size": page_size,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(PaginatedRemoteFieldClassList, _response.json()) # type: ignore
@@ -257,6 +343,7 @@ async def list(
modified_before: typing.Optional[dt.datetime] = None,
page_size: typing.Optional[int] = None,
remote_id: typing.Optional[str] = None,
+ request_options: typing.Optional[RequestOptions] = None,
) -> PaginatedUserList:
"""
Returns a list of `User` objects.
@@ -281,6 +368,8 @@ async def list(
- page_size: typing.Optional[int]. Number of results to return per page.
- remote_id: typing.Optional[str]. The API provider's ID for the given object.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import AsyncMerge
@@ -293,22 +382,38 @@ async def list(
_response = await self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/crm/v1/users"),
- params=remove_none_from_dict(
- {
- "created_after": serialize_datetime(created_after) if created_after is not None else None,
- "created_before": serialize_datetime(created_before) if created_before is not None else None,
- "cursor": cursor,
- "include_deleted_data": include_deleted_data,
- "include_remote_data": include_remote_data,
- "include_remote_fields": include_remote_fields,
- "modified_after": serialize_datetime(modified_after) if modified_after is not None else None,
- "modified_before": serialize_datetime(modified_before) if modified_before is not None else None,
- "page_size": page_size,
- "remote_id": remote_id,
- }
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "created_after": serialize_datetime(created_after) if created_after is not None else None,
+ "created_before": serialize_datetime(created_before) if created_before is not None else None,
+ "cursor": cursor,
+ "include_deleted_data": include_deleted_data,
+ "include_remote_data": include_remote_data,
+ "include_remote_fields": include_remote_fields,
+ "modified_after": serialize_datetime(modified_after) if modified_after is not None else None,
+ "modified_before": serialize_datetime(modified_before) if modified_before is not None else None,
+ "page_size": page_size,
+ "remote_id": remote_id,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(PaginatedUserList, _response.json()) # type: ignore
@@ -324,6 +429,7 @@ async def retrieve(
*,
include_remote_data: typing.Optional[bool] = None,
include_remote_fields: typing.Optional[bool] = None,
+ request_options: typing.Optional[RequestOptions] = None,
) -> User:
"""
Returns a `User` object with the given `id`.
@@ -334,6 +440,8 @@ async def retrieve(
- include_remote_data: typing.Optional[bool]. Whether to include the original data Merge fetched from the third-party to produce these models.
- include_remote_fields: typing.Optional[bool]. Whether to include all remote fields, including fields that Merge did not map to common models, in a normalized format.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import AsyncMerge
@@ -342,17 +450,36 @@ async def retrieve(
api_key="YOUR_API_KEY",
)
await client.crm.users.retrieve(
- id="id",
+ id="string",
)
"""
_response = await self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", f"api/crm/v1/users/{id}"),
- params=remove_none_from_dict(
- {"include_remote_data": include_remote_data, "include_remote_fields": include_remote_fields}
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "include_remote_data": include_remote_data,
+ "include_remote_fields": include_remote_fields,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(User, _response.json()) # type: ignore
@@ -362,7 +489,13 @@ async def retrieve(
raise ApiError(status_code=_response.status_code, body=_response.text)
raise ApiError(status_code=_response.status_code, body=_response_json)
- async def ignore_create(self, model_id: str, *, request: IgnoreCommonModelRequest) -> None:
+ async def ignore_create(
+ self,
+ model_id: str,
+ *,
+ request: IgnoreCommonModelRequest,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> None:
"""
Ignores a specific row based on the `model_id` in the url. These records will have their properties set to null, and will not be updated in future syncs. The "reason" and "message" fields in the request body will be stored for audit purposes.
@@ -370,6 +503,8 @@ async def ignore_create(self, model_id: str, *, request: IgnoreCommonModelReques
- model_id: str.
- request: IgnoreCommonModelRequest.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import AsyncMerge
from merge.resources.crm import IgnoreCommonModelRequest, ReasonEnum
@@ -379,7 +514,7 @@ async def ignore_create(self, model_id: str, *, request: IgnoreCommonModelReques
api_key="YOUR_API_KEY",
)
await client.crm.users.ignore_create(
- model_id="model-id",
+ model_id="string",
request=IgnoreCommonModelRequest(
reason=ReasonEnum.GENERAL_CUSTOMER_REQUEST,
message="deletion request by user id 51903790-7dfe-4053-8d63-5a10cc4ffd39",
@@ -389,9 +524,26 @@ async def ignore_create(self, model_id: str, *, request: IgnoreCommonModelReques
_response = await self._client_wrapper.httpx_client.request(
"POST",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", f"api/crm/v1/users/ignore/{model_id}"),
- json=jsonable_encoder(request),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ request_options.get("additional_query_parameters") if request_options is not None else None
+ ),
+ json=jsonable_encoder(request)
+ if request_options is None or request_options.get("additional_body_parameters") is None
+ else {
+ **jsonable_encoder(request),
+ **(jsonable_encoder(remove_none_from_dict(request_options.get("additional_body_parameters", {})))),
+ },
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return
@@ -409,6 +561,7 @@ async def remote_field_classes_list(
include_remote_data: typing.Optional[bool] = None,
include_remote_fields: typing.Optional[bool] = None,
page_size: typing.Optional[int] = None,
+ request_options: typing.Optional[RequestOptions] = None,
) -> PaginatedRemoteFieldClassList:
"""
Returns a list of `RemoteFieldClass` objects.
@@ -423,6 +576,8 @@ async def remote_field_classes_list(
- include_remote_fields: typing.Optional[bool]. Whether to include all remote fields, including fields that Merge did not map to common models, in a normalized format.
- page_size: typing.Optional[int]. Number of results to return per page.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import AsyncMerge
@@ -435,17 +590,33 @@ async def remote_field_classes_list(
_response = await self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/crm/v1/users/remote-field-classes"),
- params=remove_none_from_dict(
- {
- "cursor": cursor,
- "include_deleted_data": include_deleted_data,
- "include_remote_data": include_remote_data,
- "include_remote_fields": include_remote_fields,
- "page_size": page_size,
- }
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "cursor": cursor,
+ "include_deleted_data": include_deleted_data,
+ "include_remote_data": include_remote_data,
+ "include_remote_fields": include_remote_fields,
+ "page_size": page_size,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(PaginatedRemoteFieldClassList, _response.json()) # type: ignore
diff --git a/src/merge/resources/crm/resources/webhook_receivers/client.py b/src/merge/resources/crm/resources/webhook_receivers/client.py
index 12bfda8f..46c86a02 100644
--- a/src/merge/resources/crm/resources/webhook_receivers/client.py
+++ b/src/merge/resources/crm/resources/webhook_receivers/client.py
@@ -7,6 +7,8 @@
from .....core.api_error import ApiError
from .....core.client_wrapper import AsyncClientWrapper, SyncClientWrapper
from .....core.jsonable_encoder import jsonable_encoder
+from .....core.remove_none_from_dict import remove_none_from_dict
+from .....core.request_options import RequestOptions
from ...types.webhook_receiver import WebhookReceiver
try:
@@ -22,10 +24,12 @@ class WebhookReceiversClient:
def __init__(self, *, client_wrapper: SyncClientWrapper):
self._client_wrapper = client_wrapper
- def list(self) -> typing.List[WebhookReceiver]:
+ def list(self, *, request_options: typing.Optional[RequestOptions] = None) -> typing.List[WebhookReceiver]:
"""
Returns a list of `WebhookReceiver` objects.
+ Parameters:
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import Merge
@@ -38,8 +42,20 @@ def list(self) -> typing.List[WebhookReceiver]:
_response = self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/crm/v1/webhook-receivers"),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ request_options.get("additional_query_parameters") if request_options is not None else None
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(typing.List[WebhookReceiver], _response.json()) # type: ignore
@@ -49,7 +65,14 @@ def list(self) -> typing.List[WebhookReceiver]:
raise ApiError(status_code=_response.status_code, body=_response.text)
raise ApiError(status_code=_response.status_code, body=_response_json)
- def create(self, *, event: str, is_active: bool, key: typing.Optional[str] = OMIT) -> WebhookReceiver:
+ def create(
+ self,
+ *,
+ event: str,
+ is_active: bool,
+ key: typing.Optional[str] = OMIT,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> WebhookReceiver:
"""
Creates a `WebhookReceiver` object with the given values.
@@ -59,6 +82,19 @@ def create(self, *, event: str, is_active: bool, key: typing.Optional[str] = OMI
- is_active: bool.
- key: typing.Optional[str].
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
+ ---
+ from merge.client import Merge
+
+ client = Merge(
+ account_token="YOUR_ACCOUNT_TOKEN",
+ api_key="YOUR_API_KEY",
+ )
+ client.crm.webhook_receivers.create(
+ event="string",
+ is_active=True,
+ )
"""
_request: typing.Dict[str, typing.Any] = {"event": event, "is_active": is_active}
if key is not OMIT:
@@ -66,9 +102,26 @@ def create(self, *, event: str, is_active: bool, key: typing.Optional[str] = OMI
_response = self._client_wrapper.httpx_client.request(
"POST",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/crm/v1/webhook-receivers"),
- json=jsonable_encoder(_request),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ request_options.get("additional_query_parameters") if request_options is not None else None
+ ),
+ json=jsonable_encoder(_request)
+ if request_options is None or request_options.get("additional_body_parameters") is None
+ else {
+ **jsonable_encoder(_request),
+ **(jsonable_encoder(remove_none_from_dict(request_options.get("additional_body_parameters", {})))),
+ },
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(WebhookReceiver, _response.json()) # type: ignore
@@ -83,10 +136,12 @@ class AsyncWebhookReceiversClient:
def __init__(self, *, client_wrapper: AsyncClientWrapper):
self._client_wrapper = client_wrapper
- async def list(self) -> typing.List[WebhookReceiver]:
+ async def list(self, *, request_options: typing.Optional[RequestOptions] = None) -> typing.List[WebhookReceiver]:
"""
Returns a list of `WebhookReceiver` objects.
+ Parameters:
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import AsyncMerge
@@ -99,8 +154,20 @@ async def list(self) -> typing.List[WebhookReceiver]:
_response = await self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/crm/v1/webhook-receivers"),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ request_options.get("additional_query_parameters") if request_options is not None else None
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(typing.List[WebhookReceiver], _response.json()) # type: ignore
@@ -110,7 +177,14 @@ async def list(self) -> typing.List[WebhookReceiver]:
raise ApiError(status_code=_response.status_code, body=_response.text)
raise ApiError(status_code=_response.status_code, body=_response_json)
- async def create(self, *, event: str, is_active: bool, key: typing.Optional[str] = OMIT) -> WebhookReceiver:
+ async def create(
+ self,
+ *,
+ event: str,
+ is_active: bool,
+ key: typing.Optional[str] = OMIT,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> WebhookReceiver:
"""
Creates a `WebhookReceiver` object with the given values.
@@ -120,6 +194,19 @@ async def create(self, *, event: str, is_active: bool, key: typing.Optional[str]
- is_active: bool.
- key: typing.Optional[str].
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
+ ---
+ from merge.client import AsyncMerge
+
+ client = AsyncMerge(
+ account_token="YOUR_ACCOUNT_TOKEN",
+ api_key="YOUR_API_KEY",
+ )
+ await client.crm.webhook_receivers.create(
+ event="string",
+ is_active=True,
+ )
"""
_request: typing.Dict[str, typing.Any] = {"event": event, "is_active": is_active}
if key is not OMIT:
@@ -127,9 +214,26 @@ async def create(self, *, event: str, is_active: bool, key: typing.Optional[str]
_response = await self._client_wrapper.httpx_client.request(
"POST",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/crm/v1/webhook-receivers"),
- json=jsonable_encoder(_request),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ request_options.get("additional_query_parameters") if request_options is not None else None
+ ),
+ json=jsonable_encoder(_request)
+ if request_options is None or request_options.get("additional_body_parameters") is None
+ else {
+ **jsonable_encoder(_request),
+ **(jsonable_encoder(remove_none_from_dict(request_options.get("additional_body_parameters", {})))),
+ },
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(WebhookReceiver, _response.json()) # type: ignore
diff --git a/src/merge/resources/filestorage/resources/account_details/client.py b/src/merge/resources/filestorage/resources/account_details/client.py
index e810f8db..1f24f34a 100644
--- a/src/merge/resources/filestorage/resources/account_details/client.py
+++ b/src/merge/resources/filestorage/resources/account_details/client.py
@@ -1,10 +1,14 @@
# This file was auto-generated by Fern from our API Definition.
+import typing
import urllib.parse
from json.decoder import JSONDecodeError
from .....core.api_error import ApiError
from .....core.client_wrapper import AsyncClientWrapper, SyncClientWrapper
+from .....core.jsonable_encoder import jsonable_encoder
+from .....core.remove_none_from_dict import remove_none_from_dict
+from .....core.request_options import RequestOptions
from ...types.account_details import AccountDetails
try:
@@ -17,10 +21,12 @@ class AccountDetailsClient:
def __init__(self, *, client_wrapper: SyncClientWrapper):
self._client_wrapper = client_wrapper
- def retrieve(self) -> AccountDetails:
+ def retrieve(self, *, request_options: typing.Optional[RequestOptions] = None) -> AccountDetails:
"""
Get details for a linked account.
+ Parameters:
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import Merge
@@ -33,8 +39,20 @@ def retrieve(self) -> AccountDetails:
_response = self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/filestorage/v1/account-details"),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ request_options.get("additional_query_parameters") if request_options is not None else None
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(AccountDetails, _response.json()) # type: ignore
@@ -49,10 +67,12 @@ class AsyncAccountDetailsClient:
def __init__(self, *, client_wrapper: AsyncClientWrapper):
self._client_wrapper = client_wrapper
- async def retrieve(self) -> AccountDetails:
+ async def retrieve(self, *, request_options: typing.Optional[RequestOptions] = None) -> AccountDetails:
"""
Get details for a linked account.
+ Parameters:
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import AsyncMerge
@@ -65,8 +85,20 @@ async def retrieve(self) -> AccountDetails:
_response = await self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/filestorage/v1/account-details"),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ request_options.get("additional_query_parameters") if request_options is not None else None
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(AccountDetails, _response.json()) # type: ignore
diff --git a/src/merge/resources/filestorage/resources/account_token/client.py b/src/merge/resources/filestorage/resources/account_token/client.py
index 1fcc2fee..fcd3c079 100644
--- a/src/merge/resources/filestorage/resources/account_token/client.py
+++ b/src/merge/resources/filestorage/resources/account_token/client.py
@@ -1,10 +1,14 @@
# This file was auto-generated by Fern from our API Definition.
+import typing
import urllib.parse
from json.decoder import JSONDecodeError
from .....core.api_error import ApiError
from .....core.client_wrapper import AsyncClientWrapper, SyncClientWrapper
+from .....core.jsonable_encoder import jsonable_encoder
+from .....core.remove_none_from_dict import remove_none_from_dict
+from .....core.request_options import RequestOptions
from ...types.account_token import AccountToken
try:
@@ -17,20 +21,44 @@ class AccountTokenClient:
def __init__(self, *, client_wrapper: SyncClientWrapper):
self._client_wrapper = client_wrapper
- def retrieve(self, public_token: str) -> AccountToken:
+ def retrieve(self, public_token: str, *, request_options: typing.Optional[RequestOptions] = None) -> AccountToken:
"""
Returns the account token for the end user with the provided public token.
Parameters:
- public_token: str.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
+ ---
+ from merge.client import Merge
+
+ client = Merge(
+ account_token="YOUR_ACCOUNT_TOKEN",
+ api_key="YOUR_API_KEY",
+ )
+ client.filestorage.account_token.retrieve(
+ public_token="string",
+ )
"""
_response = self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(
f"{self._client_wrapper.get_base_url()}/", f"api/filestorage/v1/account-token/{public_token}"
),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ request_options.get("additional_query_parameters") if request_options is not None else None
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(AccountToken, _response.json()) # type: ignore
@@ -45,20 +73,46 @@ class AsyncAccountTokenClient:
def __init__(self, *, client_wrapper: AsyncClientWrapper):
self._client_wrapper = client_wrapper
- async def retrieve(self, public_token: str) -> AccountToken:
+ async def retrieve(
+ self, public_token: str, *, request_options: typing.Optional[RequestOptions] = None
+ ) -> AccountToken:
"""
Returns the account token for the end user with the provided public token.
Parameters:
- public_token: str.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
+ ---
+ from merge.client import AsyncMerge
+
+ client = AsyncMerge(
+ account_token="YOUR_ACCOUNT_TOKEN",
+ api_key="YOUR_API_KEY",
+ )
+ await client.filestorage.account_token.retrieve(
+ public_token="string",
+ )
"""
_response = await self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(
f"{self._client_wrapper.get_base_url()}/", f"api/filestorage/v1/account-token/{public_token}"
),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ request_options.get("additional_query_parameters") if request_options is not None else None
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(AccountToken, _response.json()) # type: ignore
diff --git a/src/merge/resources/filestorage/resources/async_passthrough/client.py b/src/merge/resources/filestorage/resources/async_passthrough/client.py
index 06d7eeaf..f5a91e0d 100644
--- a/src/merge/resources/filestorage/resources/async_passthrough/client.py
+++ b/src/merge/resources/filestorage/resources/async_passthrough/client.py
@@ -7,6 +7,8 @@
from .....core.api_error import ApiError
from .....core.client_wrapper import AsyncClientWrapper, SyncClientWrapper
from .....core.jsonable_encoder import jsonable_encoder
+from .....core.remove_none_from_dict import remove_none_from_dict
+from .....core.request_options import RequestOptions
from ...types.async_passthrough_reciept import AsyncPassthroughReciept
from ...types.data_passthrough_request import DataPassthroughRequest
from ...types.remote_response import RemoteResponse
@@ -24,18 +26,21 @@ class AsyncPassthroughClient:
def __init__(self, *, client_wrapper: SyncClientWrapper):
self._client_wrapper = client_wrapper
- def create(self, *, request: DataPassthroughRequest) -> AsyncPassthroughReciept:
+ def create(
+ self, *, request: DataPassthroughRequest, request_options: typing.Optional[RequestOptions] = None
+ ) -> AsyncPassthroughReciept:
"""
Asynchronously pull data from an endpoint not currently supported by Merge.
Parameters:
- request: DataPassthroughRequest.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import Merge
from merge.resources.filestorage import (
DataPassthroughRequest,
MethodEnum,
- MultipartFormFieldRequest,
RequestFormatEnum,
)
@@ -48,14 +53,6 @@ def create(self, *, request: DataPassthroughRequest) -> AsyncPassthroughReciept:
method=MethodEnum.GET,
path="/scooters",
data='{"company": "Lime", "model": "Gen 2.5"}',
- multipart_form_data=[
- MultipartFormFieldRequest(
- name="resume",
- data="SW50ZWdyYXRlIGZhc3QKSW50ZWdyYXRlIG9uY2U=",
- file_name="resume.pdf",
- content_type="application/pdf",
- )
- ],
request_format=RequestFormatEnum.JSON,
),
)
@@ -63,9 +60,26 @@ def create(self, *, request: DataPassthroughRequest) -> AsyncPassthroughReciept:
_response = self._client_wrapper.httpx_client.request(
"POST",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/filestorage/v1/async-passthrough"),
- json=jsonable_encoder(request),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ request_options.get("additional_query_parameters") if request_options is not None else None
+ ),
+ json=jsonable_encoder(request)
+ if request_options is None or request_options.get("additional_body_parameters") is None
+ else {
+ **jsonable_encoder(request),
+ **(jsonable_encoder(remove_none_from_dict(request_options.get("additional_body_parameters", {})))),
+ },
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(AsyncPassthroughReciept, _response.json()) # type: ignore
@@ -75,12 +89,26 @@ def create(self, *, request: DataPassthroughRequest) -> AsyncPassthroughReciept:
raise ApiError(status_code=_response.status_code, body=_response.text)
raise ApiError(status_code=_response.status_code, body=_response_json)
- def retrieve(self, async_passthrough_receipt_id: str) -> RemoteResponse:
+ def retrieve(
+ self, async_passthrough_receipt_id: str, *, request_options: typing.Optional[RequestOptions] = None
+ ) -> RemoteResponse:
"""
Retrieves data from earlier async-passthrough POST request
Parameters:
- async_passthrough_receipt_id: str.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
+ ---
+ from merge.client import Merge
+
+ client = Merge(
+ account_token="YOUR_ACCOUNT_TOKEN",
+ api_key="YOUR_API_KEY",
+ )
+ client.filestorage.async_passthrough.retrieve(
+ async_passthrough_receipt_id="string",
+ )
"""
_response = self._client_wrapper.httpx_client.request(
"GET",
@@ -88,8 +116,20 @@ def retrieve(self, async_passthrough_receipt_id: str) -> RemoteResponse:
f"{self._client_wrapper.get_base_url()}/",
f"api/filestorage/v1/async-passthrough/{async_passthrough_receipt_id}",
),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ request_options.get("additional_query_parameters") if request_options is not None else None
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(RemoteResponse, _response.json()) # type: ignore
@@ -104,18 +144,21 @@ class AsyncAsyncPassthroughClient:
def __init__(self, *, client_wrapper: AsyncClientWrapper):
self._client_wrapper = client_wrapper
- async def create(self, *, request: DataPassthroughRequest) -> AsyncPassthroughReciept:
+ async def create(
+ self, *, request: DataPassthroughRequest, request_options: typing.Optional[RequestOptions] = None
+ ) -> AsyncPassthroughReciept:
"""
Asynchronously pull data from an endpoint not currently supported by Merge.
Parameters:
- request: DataPassthroughRequest.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import AsyncMerge
from merge.resources.filestorage import (
DataPassthroughRequest,
MethodEnum,
- MultipartFormFieldRequest,
RequestFormatEnum,
)
@@ -128,14 +171,6 @@ async def create(self, *, request: DataPassthroughRequest) -> AsyncPassthroughRe
method=MethodEnum.GET,
path="/scooters",
data='{"company": "Lime", "model": "Gen 2.5"}',
- multipart_form_data=[
- MultipartFormFieldRequest(
- name="resume",
- data="SW50ZWdyYXRlIGZhc3QKSW50ZWdyYXRlIG9uY2U=",
- file_name="resume.pdf",
- content_type="application/pdf",
- )
- ],
request_format=RequestFormatEnum.JSON,
),
)
@@ -143,9 +178,26 @@ async def create(self, *, request: DataPassthroughRequest) -> AsyncPassthroughRe
_response = await self._client_wrapper.httpx_client.request(
"POST",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/filestorage/v1/async-passthrough"),
- json=jsonable_encoder(request),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ request_options.get("additional_query_parameters") if request_options is not None else None
+ ),
+ json=jsonable_encoder(request)
+ if request_options is None or request_options.get("additional_body_parameters") is None
+ else {
+ **jsonable_encoder(request),
+ **(jsonable_encoder(remove_none_from_dict(request_options.get("additional_body_parameters", {})))),
+ },
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(AsyncPassthroughReciept, _response.json()) # type: ignore
@@ -155,12 +207,26 @@ async def create(self, *, request: DataPassthroughRequest) -> AsyncPassthroughRe
raise ApiError(status_code=_response.status_code, body=_response.text)
raise ApiError(status_code=_response.status_code, body=_response_json)
- async def retrieve(self, async_passthrough_receipt_id: str) -> RemoteResponse:
+ async def retrieve(
+ self, async_passthrough_receipt_id: str, *, request_options: typing.Optional[RequestOptions] = None
+ ) -> RemoteResponse:
"""
Retrieves data from earlier async-passthrough POST request
Parameters:
- async_passthrough_receipt_id: str.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
+ ---
+ from merge.client import AsyncMerge
+
+ client = AsyncMerge(
+ account_token="YOUR_ACCOUNT_TOKEN",
+ api_key="YOUR_API_KEY",
+ )
+ await client.filestorage.async_passthrough.retrieve(
+ async_passthrough_receipt_id="string",
+ )
"""
_response = await self._client_wrapper.httpx_client.request(
"GET",
@@ -168,8 +234,20 @@ async def retrieve(self, async_passthrough_receipt_id: str) -> RemoteResponse:
f"{self._client_wrapper.get_base_url()}/",
f"api/filestorage/v1/async-passthrough/{async_passthrough_receipt_id}",
),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ request_options.get("additional_query_parameters") if request_options is not None else None
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(RemoteResponse, _response.json()) # type: ignore
diff --git a/src/merge/resources/filestorage/resources/audit_trail/client.py b/src/merge/resources/filestorage/resources/audit_trail/client.py
index 012ab604..e6d8a787 100644
--- a/src/merge/resources/filestorage/resources/audit_trail/client.py
+++ b/src/merge/resources/filestorage/resources/audit_trail/client.py
@@ -6,7 +6,9 @@
from .....core.api_error import ApiError
from .....core.client_wrapper import AsyncClientWrapper, SyncClientWrapper
+from .....core.jsonable_encoder import jsonable_encoder
from .....core.remove_none_from_dict import remove_none_from_dict
+from .....core.request_options import RequestOptions
from ...types.paginated_audit_log_event_list import PaginatedAuditLogEventList
try:
@@ -28,6 +30,7 @@ def list(
page_size: typing.Optional[int] = None,
start_date: typing.Optional[str] = None,
user_email: typing.Optional[str] = None,
+ request_options: typing.Optional[RequestOptions] = None,
) -> PaginatedAuditLogEventList:
"""
Gets a list of audit trail events.
@@ -44,6 +47,8 @@ def list(
- start_date: typing.Optional[str]. If included, will only include audit trail events that occurred after this time
- user_email: typing.Optional[str]. If provided, this will return events associated with the specified user email. Please note that the email address reflects the user's email at the time of the event, and may not be their current email.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import Merge
@@ -56,18 +61,34 @@ def list(
_response = self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/filestorage/v1/audit-trail"),
- params=remove_none_from_dict(
- {
- "cursor": cursor,
- "end_date": end_date,
- "event_type": event_type,
- "page_size": page_size,
- "start_date": start_date,
- "user_email": user_email,
- }
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "cursor": cursor,
+ "end_date": end_date,
+ "event_type": event_type,
+ "page_size": page_size,
+ "start_date": start_date,
+ "user_email": user_email,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(PaginatedAuditLogEventList, _response.json()) # type: ignore
@@ -91,6 +112,7 @@ async def list(
page_size: typing.Optional[int] = None,
start_date: typing.Optional[str] = None,
user_email: typing.Optional[str] = None,
+ request_options: typing.Optional[RequestOptions] = None,
) -> PaginatedAuditLogEventList:
"""
Gets a list of audit trail events.
@@ -107,6 +129,8 @@ async def list(
- start_date: typing.Optional[str]. If included, will only include audit trail events that occurred after this time
- user_email: typing.Optional[str]. If provided, this will return events associated with the specified user email. Please note that the email address reflects the user's email at the time of the event, and may not be their current email.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import AsyncMerge
@@ -119,18 +143,34 @@ async def list(
_response = await self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/filestorage/v1/audit-trail"),
- params=remove_none_from_dict(
- {
- "cursor": cursor,
- "end_date": end_date,
- "event_type": event_type,
- "page_size": page_size,
- "start_date": start_date,
- "user_email": user_email,
- }
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "cursor": cursor,
+ "end_date": end_date,
+ "event_type": event_type,
+ "page_size": page_size,
+ "start_date": start_date,
+ "user_email": user_email,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(PaginatedAuditLogEventList, _response.json()) # type: ignore
diff --git a/src/merge/resources/filestorage/resources/available_actions/client.py b/src/merge/resources/filestorage/resources/available_actions/client.py
index be7d91bd..6b1bbdec 100644
--- a/src/merge/resources/filestorage/resources/available_actions/client.py
+++ b/src/merge/resources/filestorage/resources/available_actions/client.py
@@ -1,10 +1,14 @@
# This file was auto-generated by Fern from our API Definition.
+import typing
import urllib.parse
from json.decoder import JSONDecodeError
from .....core.api_error import ApiError
from .....core.client_wrapper import AsyncClientWrapper, SyncClientWrapper
+from .....core.jsonable_encoder import jsonable_encoder
+from .....core.remove_none_from_dict import remove_none_from_dict
+from .....core.request_options import RequestOptions
from ...types.available_actions import AvailableActions
try:
@@ -17,15 +21,38 @@ class AvailableActionsClient:
def __init__(self, *, client_wrapper: SyncClientWrapper):
self._client_wrapper = client_wrapper
- def retrieve(self) -> AvailableActions:
+ def retrieve(self, *, request_options: typing.Optional[RequestOptions] = None) -> AvailableActions:
"""
Returns a list of models and actions available for an account.
+
+ Parameters:
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
+ ---
+ from merge.client import Merge
+
+ client = Merge(
+ account_token="YOUR_ACCOUNT_TOKEN",
+ api_key="YOUR_API_KEY",
+ )
+ client.filestorage.available_actions.retrieve()
"""
_response = self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/filestorage/v1/available-actions"),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ request_options.get("additional_query_parameters") if request_options is not None else None
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(AvailableActions, _response.json()) # type: ignore
@@ -40,15 +67,38 @@ class AsyncAvailableActionsClient:
def __init__(self, *, client_wrapper: AsyncClientWrapper):
self._client_wrapper = client_wrapper
- async def retrieve(self) -> AvailableActions:
+ async def retrieve(self, *, request_options: typing.Optional[RequestOptions] = None) -> AvailableActions:
"""
Returns a list of models and actions available for an account.
+
+ Parameters:
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
+ ---
+ from merge.client import AsyncMerge
+
+ client = AsyncMerge(
+ account_token="YOUR_ACCOUNT_TOKEN",
+ api_key="YOUR_API_KEY",
+ )
+ await client.filestorage.available_actions.retrieve()
"""
_response = await self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/filestorage/v1/available-actions"),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ request_options.get("additional_query_parameters") if request_options is not None else None
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(AvailableActions, _response.json()) # type: ignore
diff --git a/src/merge/resources/filestorage/resources/delete_account/client.py b/src/merge/resources/filestorage/resources/delete_account/client.py
index f662ec81..cd21ca7c 100644
--- a/src/merge/resources/filestorage/resources/delete_account/client.py
+++ b/src/merge/resources/filestorage/resources/delete_account/client.py
@@ -1,20 +1,26 @@
# This file was auto-generated by Fern from our API Definition.
+import typing
import urllib.parse
from json.decoder import JSONDecodeError
from .....core.api_error import ApiError
from .....core.client_wrapper import AsyncClientWrapper, SyncClientWrapper
+from .....core.jsonable_encoder import jsonable_encoder
+from .....core.remove_none_from_dict import remove_none_from_dict
+from .....core.request_options import RequestOptions
class DeleteAccountClient:
def __init__(self, *, client_wrapper: SyncClientWrapper):
self._client_wrapper = client_wrapper
- def delete(self) -> None:
+ def delete(self, *, request_options: typing.Optional[RequestOptions] = None) -> None:
"""
Delete a linked account.
+ Parameters:
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import Merge
@@ -27,8 +33,23 @@ def delete(self) -> None:
_response = self._client_wrapper.httpx_client.request(
"POST",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/filestorage/v1/delete-account"),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ request_options.get("additional_query_parameters") if request_options is not None else None
+ ),
+ json=jsonable_encoder(remove_none_from_dict(request_options.get("additional_body_parameters", {})))
+ if request_options is not None
+ else None,
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return
@@ -43,10 +64,12 @@ class AsyncDeleteAccountClient:
def __init__(self, *, client_wrapper: AsyncClientWrapper):
self._client_wrapper = client_wrapper
- async def delete(self) -> None:
+ async def delete(self, *, request_options: typing.Optional[RequestOptions] = None) -> None:
"""
Delete a linked account.
+ Parameters:
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import AsyncMerge
@@ -59,8 +82,23 @@ async def delete(self) -> None:
_response = await self._client_wrapper.httpx_client.request(
"POST",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/filestorage/v1/delete-account"),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ request_options.get("additional_query_parameters") if request_options is not None else None
+ ),
+ json=jsonable_encoder(remove_none_from_dict(request_options.get("additional_body_parameters", {})))
+ if request_options is not None
+ else None,
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return
diff --git a/src/merge/resources/filestorage/resources/drives/client.py b/src/merge/resources/filestorage/resources/drives/client.py
index 5b8816b5..4d66900b 100644
--- a/src/merge/resources/filestorage/resources/drives/client.py
+++ b/src/merge/resources/filestorage/resources/drives/client.py
@@ -8,7 +8,9 @@
from .....core.api_error import ApiError
from .....core.client_wrapper import AsyncClientWrapper, SyncClientWrapper
from .....core.datetime_utils import serialize_datetime
+from .....core.jsonable_encoder import jsonable_encoder
from .....core.remove_none_from_dict import remove_none_from_dict
+from .....core.request_options import RequestOptions
from ...types.drive import Drive
from ...types.paginated_drive_list import PaginatedDriveList
@@ -35,6 +37,7 @@ def list(
name: typing.Optional[str] = None,
page_size: typing.Optional[int] = None,
remote_id: typing.Optional[str] = None,
+ request_options: typing.Optional[RequestOptions] = None,
) -> PaginatedDriveList:
"""
Returns a list of `Drive` objects.
@@ -59,6 +62,8 @@ def list(
- page_size: typing.Optional[int]. Number of results to return per page.
- remote_id: typing.Optional[str]. The API provider's ID for the given object.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import Merge
@@ -71,22 +76,38 @@ def list(
_response = self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/filestorage/v1/drives"),
- params=remove_none_from_dict(
- {
- "created_after": serialize_datetime(created_after) if created_after is not None else None,
- "created_before": serialize_datetime(created_before) if created_before is not None else None,
- "cursor": cursor,
- "include_deleted_data": include_deleted_data,
- "include_remote_data": include_remote_data,
- "modified_after": serialize_datetime(modified_after) if modified_after is not None else None,
- "modified_before": serialize_datetime(modified_before) if modified_before is not None else None,
- "name": name,
- "page_size": page_size,
- "remote_id": remote_id,
- }
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "created_after": serialize_datetime(created_after) if created_after is not None else None,
+ "created_before": serialize_datetime(created_before) if created_before is not None else None,
+ "cursor": cursor,
+ "include_deleted_data": include_deleted_data,
+ "include_remote_data": include_remote_data,
+ "modified_after": serialize_datetime(modified_after) if modified_after is not None else None,
+ "modified_before": serialize_datetime(modified_before) if modified_before is not None else None,
+ "name": name,
+ "page_size": page_size,
+ "remote_id": remote_id,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(PaginatedDriveList, _response.json()) # type: ignore
@@ -96,7 +117,13 @@ def list(
raise ApiError(status_code=_response.status_code, body=_response.text)
raise ApiError(status_code=_response.status_code, body=_response_json)
- def retrieve(self, id: str, *, include_remote_data: typing.Optional[bool] = None) -> Drive:
+ def retrieve(
+ self,
+ id: str,
+ *,
+ include_remote_data: typing.Optional[bool] = None,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> Drive:
"""
Returns a `Drive` object with the given `id`.
@@ -104,6 +131,8 @@ def retrieve(self, id: str, *, include_remote_data: typing.Optional[bool] = None
- id: str.
- include_remote_data: typing.Optional[bool]. Whether to include the original data Merge fetched from the third-party to produce these models.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import Merge
@@ -112,15 +141,35 @@ def retrieve(self, id: str, *, include_remote_data: typing.Optional[bool] = None
api_key="YOUR_API_KEY",
)
client.filestorage.drives.retrieve(
- id="id",
+ id="string",
)
"""
_response = self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", f"api/filestorage/v1/drives/{id}"),
- params=remove_none_from_dict({"include_remote_data": include_remote_data}),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "include_remote_data": include_remote_data,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(Drive, _response.json()) # type: ignore
@@ -148,6 +197,7 @@ async def list(
name: typing.Optional[str] = None,
page_size: typing.Optional[int] = None,
remote_id: typing.Optional[str] = None,
+ request_options: typing.Optional[RequestOptions] = None,
) -> PaginatedDriveList:
"""
Returns a list of `Drive` objects.
@@ -172,6 +222,8 @@ async def list(
- page_size: typing.Optional[int]. Number of results to return per page.
- remote_id: typing.Optional[str]. The API provider's ID for the given object.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import AsyncMerge
@@ -184,22 +236,38 @@ async def list(
_response = await self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/filestorage/v1/drives"),
- params=remove_none_from_dict(
- {
- "created_after": serialize_datetime(created_after) if created_after is not None else None,
- "created_before": serialize_datetime(created_before) if created_before is not None else None,
- "cursor": cursor,
- "include_deleted_data": include_deleted_data,
- "include_remote_data": include_remote_data,
- "modified_after": serialize_datetime(modified_after) if modified_after is not None else None,
- "modified_before": serialize_datetime(modified_before) if modified_before is not None else None,
- "name": name,
- "page_size": page_size,
- "remote_id": remote_id,
- }
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "created_after": serialize_datetime(created_after) if created_after is not None else None,
+ "created_before": serialize_datetime(created_before) if created_before is not None else None,
+ "cursor": cursor,
+ "include_deleted_data": include_deleted_data,
+ "include_remote_data": include_remote_data,
+ "modified_after": serialize_datetime(modified_after) if modified_after is not None else None,
+ "modified_before": serialize_datetime(modified_before) if modified_before is not None else None,
+ "name": name,
+ "page_size": page_size,
+ "remote_id": remote_id,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(PaginatedDriveList, _response.json()) # type: ignore
@@ -209,7 +277,13 @@ async def list(
raise ApiError(status_code=_response.status_code, body=_response.text)
raise ApiError(status_code=_response.status_code, body=_response_json)
- async def retrieve(self, id: str, *, include_remote_data: typing.Optional[bool] = None) -> Drive:
+ async def retrieve(
+ self,
+ id: str,
+ *,
+ include_remote_data: typing.Optional[bool] = None,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> Drive:
"""
Returns a `Drive` object with the given `id`.
@@ -217,6 +291,8 @@ async def retrieve(self, id: str, *, include_remote_data: typing.Optional[bool]
- id: str.
- include_remote_data: typing.Optional[bool]. Whether to include the original data Merge fetched from the third-party to produce these models.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import AsyncMerge
@@ -225,15 +301,35 @@ async def retrieve(self, id: str, *, include_remote_data: typing.Optional[bool]
api_key="YOUR_API_KEY",
)
await client.filestorage.drives.retrieve(
- id="id",
+ id="string",
)
"""
_response = await self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", f"api/filestorage/v1/drives/{id}"),
- params=remove_none_from_dict({"include_remote_data": include_remote_data}),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "include_remote_data": include_remote_data,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(Drive, _response.json()) # type: ignore
diff --git a/src/merge/resources/filestorage/resources/files/client.py b/src/merge/resources/filestorage/resources/files/client.py
index 11aa7666..a646e97f 100644
--- a/src/merge/resources/filestorage/resources/files/client.py
+++ b/src/merge/resources/filestorage/resources/files/client.py
@@ -10,6 +10,7 @@
from .....core.datetime_utils import serialize_datetime
from .....core.jsonable_encoder import jsonable_encoder
from .....core.remove_none_from_dict import remove_none_from_dict
+from .....core.request_options import RequestOptions
from ...types.file import File
from ...types.file_request import FileRequest
from ...types.file_storage_file_response import FileStorageFileResponse
@@ -47,6 +48,7 @@ def list(
name: typing.Optional[str] = None,
page_size: typing.Optional[int] = None,
remote_id: typing.Optional[str] = None,
+ request_options: typing.Optional[RequestOptions] = None,
) -> PaginatedFileList:
"""
Returns a list of `File` objects.
@@ -77,6 +79,8 @@ def list(
- page_size: typing.Optional[int]. Number of results to return per page.
- remote_id: typing.Optional[str]. The API provider's ID for the given object.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import Merge
from merge.resources.filestorage import FilesListRequestExpand
@@ -92,25 +96,41 @@ def list(
_response = self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/filestorage/v1/files"),
- params=remove_none_from_dict(
- {
- "created_after": serialize_datetime(created_after) if created_after is not None else None,
- "created_before": serialize_datetime(created_before) if created_before is not None else None,
- "cursor": cursor,
- "drive_id": drive_id,
- "expand": expand,
- "folder_id": folder_id,
- "include_deleted_data": include_deleted_data,
- "include_remote_data": include_remote_data,
- "modified_after": serialize_datetime(modified_after) if modified_after is not None else None,
- "modified_before": serialize_datetime(modified_before) if modified_before is not None else None,
- "name": name,
- "page_size": page_size,
- "remote_id": remote_id,
- }
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "created_after": serialize_datetime(created_after) if created_after is not None else None,
+ "created_before": serialize_datetime(created_before) if created_before is not None else None,
+ "cursor": cursor,
+ "drive_id": drive_id,
+ "expand": expand,
+ "folder_id": folder_id,
+ "include_deleted_data": include_deleted_data,
+ "include_remote_data": include_remote_data,
+ "modified_after": serialize_datetime(modified_after) if modified_after is not None else None,
+ "modified_before": serialize_datetime(modified_before) if modified_before is not None else None,
+ "name": name,
+ "page_size": page_size,
+ "remote_id": remote_id,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(PaginatedFileList, _response.json()) # type: ignore
@@ -126,6 +146,7 @@ def create(
is_debug_mode: typing.Optional[bool] = None,
run_async: typing.Optional[bool] = None,
model: FileRequest,
+ request_options: typing.Optional[RequestOptions] = None,
) -> FileStorageFileResponse:
"""
Creates a `File` object with the given values.
@@ -136,6 +157,8 @@ def create(
- run_async: typing.Optional[bool]. Whether or not third-party updates should be run asynchronously.
- model: FileRequest.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import Merge
from merge.resources.filestorage import FileRequest
@@ -149,7 +172,7 @@ def create(
name="omg_common_model_scope.docx",
file_url="https://drive.com/1234",
file_thumbnail_url="https://drive.com/1234/thumbnail.png",
- size=254,
+ size=1,
mime_type=".docx",
description="This file is OP",
),
@@ -158,10 +181,36 @@ def create(
_response = self._client_wrapper.httpx_client.request(
"POST",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/filestorage/v1/files"),
- params=remove_none_from_dict({"is_debug_mode": is_debug_mode, "run_async": run_async}),
- json=jsonable_encoder({"model": model}),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "is_debug_mode": is_debug_mode,
+ "run_async": run_async,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ json=jsonable_encoder({"model": model})
+ if request_options is None or request_options.get("additional_body_parameters") is None
+ else {
+ **jsonable_encoder({"model": model}),
+ **(jsonable_encoder(remove_none_from_dict(request_options.get("additional_body_parameters", {})))),
+ },
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(FileStorageFileResponse, _response.json()) # type: ignore
@@ -177,6 +226,7 @@ def retrieve(
*,
expand: typing.Optional[FilesRetrieveRequestExpand] = None,
include_remote_data: typing.Optional[bool] = None,
+ request_options: typing.Optional[RequestOptions] = None,
) -> File:
"""
Returns a `File` object with the given `id`.
@@ -187,6 +237,8 @@ def retrieve(
- expand: typing.Optional[FilesRetrieveRequestExpand]. Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces.
- include_remote_data: typing.Optional[bool]. Whether to include the original data Merge fetched from the third-party to produce these models.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import Merge
from merge.resources.filestorage import FilesRetrieveRequestExpand
@@ -196,16 +248,37 @@ def retrieve(
api_key="YOUR_API_KEY",
)
client.filestorage.files.retrieve(
- id="id",
+ id="string",
expand=FilesRetrieveRequestExpand.DRIVE,
)
"""
_response = self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", f"api/filestorage/v1/files/{id}"),
- params=remove_none_from_dict({"expand": expand, "include_remote_data": include_remote_data}),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "expand": expand,
+ "include_remote_data": include_remote_data,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(File, _response.json()) # type: ignore
@@ -215,7 +288,13 @@ def retrieve(
raise ApiError(status_code=_response.status_code, body=_response.text)
raise ApiError(status_code=_response.status_code, body=_response_json)
- def download_retrieve(self, id: str, *, mime_type: typing.Optional[str] = None) -> typing.Iterator[bytes]:
+ def download_retrieve(
+ self,
+ id: str,
+ *,
+ mime_type: typing.Optional[str] = None,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> typing.Iterator[bytes]:
"""
Returns a `File` object with the given `id`.
@@ -223,13 +302,35 @@ def download_retrieve(self, id: str, *, mime_type: typing.Optional[str] = None)
- id: str.
- mime_type: typing.Optional[str]. If provided, specifies the export format of the file to be downloaded. For information on supported export formats, please refer to our export format help center article.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
"""
with self._client_wrapper.httpx_client.stream(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", f"api/filestorage/v1/files/{id}/download"),
- params=remove_none_from_dict({"mime_type": mime_type}),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "mime_type": mime_type,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
) as _response:
if 200 <= _response.status_code < 300:
for _chunk in _response.iter_bytes():
@@ -242,10 +343,12 @@ def download_retrieve(self, id: str, *, mime_type: typing.Optional[str] = None)
raise ApiError(status_code=_response.status_code, body=_response.text)
raise ApiError(status_code=_response.status_code, body=_response_json)
- def meta_post_retrieve(self) -> MetaResponse:
+ def meta_post_retrieve(self, *, request_options: typing.Optional[RequestOptions] = None) -> MetaResponse:
"""
Returns metadata for `FileStorageFile` POSTs.
+ Parameters:
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import Merge
@@ -258,8 +361,20 @@ def meta_post_retrieve(self) -> MetaResponse:
_response = self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/filestorage/v1/files/meta/post"),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ request_options.get("additional_query_parameters") if request_options is not None else None
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(MetaResponse, _response.json()) # type: ignore
@@ -290,6 +405,7 @@ async def list(
name: typing.Optional[str] = None,
page_size: typing.Optional[int] = None,
remote_id: typing.Optional[str] = None,
+ request_options: typing.Optional[RequestOptions] = None,
) -> PaginatedFileList:
"""
Returns a list of `File` objects.
@@ -320,6 +436,8 @@ async def list(
- page_size: typing.Optional[int]. Number of results to return per page.
- remote_id: typing.Optional[str]. The API provider's ID for the given object.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import AsyncMerge
from merge.resources.filestorage import FilesListRequestExpand
@@ -335,25 +453,41 @@ async def list(
_response = await self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/filestorage/v1/files"),
- params=remove_none_from_dict(
- {
- "created_after": serialize_datetime(created_after) if created_after is not None else None,
- "created_before": serialize_datetime(created_before) if created_before is not None else None,
- "cursor": cursor,
- "drive_id": drive_id,
- "expand": expand,
- "folder_id": folder_id,
- "include_deleted_data": include_deleted_data,
- "include_remote_data": include_remote_data,
- "modified_after": serialize_datetime(modified_after) if modified_after is not None else None,
- "modified_before": serialize_datetime(modified_before) if modified_before is not None else None,
- "name": name,
- "page_size": page_size,
- "remote_id": remote_id,
- }
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "created_after": serialize_datetime(created_after) if created_after is not None else None,
+ "created_before": serialize_datetime(created_before) if created_before is not None else None,
+ "cursor": cursor,
+ "drive_id": drive_id,
+ "expand": expand,
+ "folder_id": folder_id,
+ "include_deleted_data": include_deleted_data,
+ "include_remote_data": include_remote_data,
+ "modified_after": serialize_datetime(modified_after) if modified_after is not None else None,
+ "modified_before": serialize_datetime(modified_before) if modified_before is not None else None,
+ "name": name,
+ "page_size": page_size,
+ "remote_id": remote_id,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(PaginatedFileList, _response.json()) # type: ignore
@@ -369,6 +503,7 @@ async def create(
is_debug_mode: typing.Optional[bool] = None,
run_async: typing.Optional[bool] = None,
model: FileRequest,
+ request_options: typing.Optional[RequestOptions] = None,
) -> FileStorageFileResponse:
"""
Creates a `File` object with the given values.
@@ -379,6 +514,8 @@ async def create(
- run_async: typing.Optional[bool]. Whether or not third-party updates should be run asynchronously.
- model: FileRequest.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import AsyncMerge
from merge.resources.filestorage import FileRequest
@@ -392,7 +529,7 @@ async def create(
name="omg_common_model_scope.docx",
file_url="https://drive.com/1234",
file_thumbnail_url="https://drive.com/1234/thumbnail.png",
- size=254,
+ size=1,
mime_type=".docx",
description="This file is OP",
),
@@ -401,10 +538,36 @@ async def create(
_response = await self._client_wrapper.httpx_client.request(
"POST",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/filestorage/v1/files"),
- params=remove_none_from_dict({"is_debug_mode": is_debug_mode, "run_async": run_async}),
- json=jsonable_encoder({"model": model}),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "is_debug_mode": is_debug_mode,
+ "run_async": run_async,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ json=jsonable_encoder({"model": model})
+ if request_options is None or request_options.get("additional_body_parameters") is None
+ else {
+ **jsonable_encoder({"model": model}),
+ **(jsonable_encoder(remove_none_from_dict(request_options.get("additional_body_parameters", {})))),
+ },
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(FileStorageFileResponse, _response.json()) # type: ignore
@@ -420,6 +583,7 @@ async def retrieve(
*,
expand: typing.Optional[FilesRetrieveRequestExpand] = None,
include_remote_data: typing.Optional[bool] = None,
+ request_options: typing.Optional[RequestOptions] = None,
) -> File:
"""
Returns a `File` object with the given `id`.
@@ -430,6 +594,8 @@ async def retrieve(
- expand: typing.Optional[FilesRetrieveRequestExpand]. Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces.
- include_remote_data: typing.Optional[bool]. Whether to include the original data Merge fetched from the third-party to produce these models.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import AsyncMerge
from merge.resources.filestorage import FilesRetrieveRequestExpand
@@ -439,16 +605,37 @@ async def retrieve(
api_key="YOUR_API_KEY",
)
await client.filestorage.files.retrieve(
- id="id",
+ id="string",
expand=FilesRetrieveRequestExpand.DRIVE,
)
"""
_response = await self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", f"api/filestorage/v1/files/{id}"),
- params=remove_none_from_dict({"expand": expand, "include_remote_data": include_remote_data}),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "expand": expand,
+ "include_remote_data": include_remote_data,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(File, _response.json()) # type: ignore
@@ -459,7 +646,11 @@ async def retrieve(
raise ApiError(status_code=_response.status_code, body=_response_json)
async def download_retrieve(
- self, id: str, *, mime_type: typing.Optional[str] = None
+ self,
+ id: str,
+ *,
+ mime_type: typing.Optional[str] = None,
+ request_options: typing.Optional[RequestOptions] = None,
) -> typing.AsyncIterator[bytes]:
"""
Returns a `File` object with the given `id`.
@@ -468,13 +659,35 @@ async def download_retrieve(
- id: str.
- mime_type: typing.Optional[str]. If provided, specifies the export format of the file to be downloaded. For information on supported export formats, please refer to our export format help center article.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
"""
async with self._client_wrapper.httpx_client.stream(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", f"api/filestorage/v1/files/{id}/download"),
- params=remove_none_from_dict({"mime_type": mime_type}),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "mime_type": mime_type,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
) as _response:
if 200 <= _response.status_code < 300:
async for _chunk in _response.aiter_bytes():
@@ -487,10 +700,12 @@ async def download_retrieve(
raise ApiError(status_code=_response.status_code, body=_response.text)
raise ApiError(status_code=_response.status_code, body=_response_json)
- async def meta_post_retrieve(self) -> MetaResponse:
+ async def meta_post_retrieve(self, *, request_options: typing.Optional[RequestOptions] = None) -> MetaResponse:
"""
Returns metadata for `FileStorageFile` POSTs.
+ Parameters:
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import AsyncMerge
@@ -503,8 +718,20 @@ async def meta_post_retrieve(self) -> MetaResponse:
_response = await self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/filestorage/v1/files/meta/post"),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ request_options.get("additional_query_parameters") if request_options is not None else None
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(MetaResponse, _response.json()) # type: ignore
diff --git a/src/merge/resources/filestorage/resources/folders/client.py b/src/merge/resources/filestorage/resources/folders/client.py
index 601d7d82..59319bcf 100644
--- a/src/merge/resources/filestorage/resources/folders/client.py
+++ b/src/merge/resources/filestorage/resources/folders/client.py
@@ -10,6 +10,7 @@
from .....core.datetime_utils import serialize_datetime
from .....core.jsonable_encoder import jsonable_encoder
from .....core.remove_none_from_dict import remove_none_from_dict
+from .....core.request_options import RequestOptions
from ...types.file_storage_folder_response import FileStorageFolderResponse
from ...types.folder import Folder
from ...types.folder_request import FolderRequest
@@ -47,6 +48,7 @@ def list(
page_size: typing.Optional[int] = None,
parent_folder_id: typing.Optional[str] = None,
remote_id: typing.Optional[str] = None,
+ request_options: typing.Optional[RequestOptions] = None,
) -> PaginatedFolderList:
"""
Returns a list of `Folder` objects.
@@ -77,6 +79,8 @@ def list(
- parent_folder_id: typing.Optional[str]. If provided, will only return folders in this parent folder. If null, will return folders in root directory.
- remote_id: typing.Optional[str]. The API provider's ID for the given object.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import Merge
from merge.resources.filestorage import FoldersListRequestExpand
@@ -92,25 +96,41 @@ def list(
_response = self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/filestorage/v1/folders"),
- params=remove_none_from_dict(
- {
- "created_after": serialize_datetime(created_after) if created_after is not None else None,
- "created_before": serialize_datetime(created_before) if created_before is not None else None,
- "cursor": cursor,
- "drive_id": drive_id,
- "expand": expand,
- "include_deleted_data": include_deleted_data,
- "include_remote_data": include_remote_data,
- "modified_after": serialize_datetime(modified_after) if modified_after is not None else None,
- "modified_before": serialize_datetime(modified_before) if modified_before is not None else None,
- "name": name,
- "page_size": page_size,
- "parent_folder_id": parent_folder_id,
- "remote_id": remote_id,
- }
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "created_after": serialize_datetime(created_after) if created_after is not None else None,
+ "created_before": serialize_datetime(created_before) if created_before is not None else None,
+ "cursor": cursor,
+ "drive_id": drive_id,
+ "expand": expand,
+ "include_deleted_data": include_deleted_data,
+ "include_remote_data": include_remote_data,
+ "modified_after": serialize_datetime(modified_after) if modified_after is not None else None,
+ "modified_before": serialize_datetime(modified_before) if modified_before is not None else None,
+ "name": name,
+ "page_size": page_size,
+ "parent_folder_id": parent_folder_id,
+ "remote_id": remote_id,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(PaginatedFolderList, _response.json()) # type: ignore
@@ -126,6 +146,7 @@ def create(
is_debug_mode: typing.Optional[bool] = None,
run_async: typing.Optional[bool] = None,
model: FolderRequest,
+ request_options: typing.Optional[RequestOptions] = None,
) -> FileStorageFolderResponse:
"""
Creates a `Folder` object with the given values.
@@ -136,6 +157,8 @@ def create(
- run_async: typing.Optional[bool]. Whether or not third-party updates should be run asynchronously.
- model: FolderRequest.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import Merge
from merge.resources.filestorage import FolderRequest
@@ -148,7 +171,7 @@ def create(
model=FolderRequest(
name="Platform",
folder_url="https://drive.com/1234",
- size=2738000,
+ size=1,
description="This is a wild folder.",
),
)
@@ -156,10 +179,36 @@ def create(
_response = self._client_wrapper.httpx_client.request(
"POST",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/filestorage/v1/folders"),
- params=remove_none_from_dict({"is_debug_mode": is_debug_mode, "run_async": run_async}),
- json=jsonable_encoder({"model": model}),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "is_debug_mode": is_debug_mode,
+ "run_async": run_async,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ json=jsonable_encoder({"model": model})
+ if request_options is None or request_options.get("additional_body_parameters") is None
+ else {
+ **jsonable_encoder({"model": model}),
+ **(jsonable_encoder(remove_none_from_dict(request_options.get("additional_body_parameters", {})))),
+ },
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(FileStorageFolderResponse, _response.json()) # type: ignore
@@ -175,6 +224,7 @@ def retrieve(
*,
expand: typing.Optional[FoldersRetrieveRequestExpand] = None,
include_remote_data: typing.Optional[bool] = None,
+ request_options: typing.Optional[RequestOptions] = None,
) -> Folder:
"""
Returns a `Folder` object with the given `id`.
@@ -185,6 +235,8 @@ def retrieve(
- expand: typing.Optional[FoldersRetrieveRequestExpand]. Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces.
- include_remote_data: typing.Optional[bool]. Whether to include the original data Merge fetched from the third-party to produce these models.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import Merge
from merge.resources.filestorage import FoldersRetrieveRequestExpand
@@ -194,16 +246,37 @@ def retrieve(
api_key="YOUR_API_KEY",
)
client.filestorage.folders.retrieve(
- id="id",
+ id="string",
expand=FoldersRetrieveRequestExpand.DRIVE,
)
"""
_response = self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", f"api/filestorage/v1/folders/{id}"),
- params=remove_none_from_dict({"expand": expand, "include_remote_data": include_remote_data}),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "expand": expand,
+ "include_remote_data": include_remote_data,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(Folder, _response.json()) # type: ignore
@@ -213,10 +286,12 @@ def retrieve(
raise ApiError(status_code=_response.status_code, body=_response.text)
raise ApiError(status_code=_response.status_code, body=_response_json)
- def meta_post_retrieve(self) -> MetaResponse:
+ def meta_post_retrieve(self, *, request_options: typing.Optional[RequestOptions] = None) -> MetaResponse:
"""
Returns metadata for `FileStorageFolder` POSTs.
+ Parameters:
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import Merge
@@ -229,8 +304,20 @@ def meta_post_retrieve(self) -> MetaResponse:
_response = self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/filestorage/v1/folders/meta/post"),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ request_options.get("additional_query_parameters") if request_options is not None else None
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(MetaResponse, _response.json()) # type: ignore
@@ -261,6 +348,7 @@ async def list(
page_size: typing.Optional[int] = None,
parent_folder_id: typing.Optional[str] = None,
remote_id: typing.Optional[str] = None,
+ request_options: typing.Optional[RequestOptions] = None,
) -> PaginatedFolderList:
"""
Returns a list of `Folder` objects.
@@ -291,6 +379,8 @@ async def list(
- parent_folder_id: typing.Optional[str]. If provided, will only return folders in this parent folder. If null, will return folders in root directory.
- remote_id: typing.Optional[str]. The API provider's ID for the given object.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import AsyncMerge
from merge.resources.filestorage import FoldersListRequestExpand
@@ -306,25 +396,41 @@ async def list(
_response = await self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/filestorage/v1/folders"),
- params=remove_none_from_dict(
- {
- "created_after": serialize_datetime(created_after) if created_after is not None else None,
- "created_before": serialize_datetime(created_before) if created_before is not None else None,
- "cursor": cursor,
- "drive_id": drive_id,
- "expand": expand,
- "include_deleted_data": include_deleted_data,
- "include_remote_data": include_remote_data,
- "modified_after": serialize_datetime(modified_after) if modified_after is not None else None,
- "modified_before": serialize_datetime(modified_before) if modified_before is not None else None,
- "name": name,
- "page_size": page_size,
- "parent_folder_id": parent_folder_id,
- "remote_id": remote_id,
- }
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "created_after": serialize_datetime(created_after) if created_after is not None else None,
+ "created_before": serialize_datetime(created_before) if created_before is not None else None,
+ "cursor": cursor,
+ "drive_id": drive_id,
+ "expand": expand,
+ "include_deleted_data": include_deleted_data,
+ "include_remote_data": include_remote_data,
+ "modified_after": serialize_datetime(modified_after) if modified_after is not None else None,
+ "modified_before": serialize_datetime(modified_before) if modified_before is not None else None,
+ "name": name,
+ "page_size": page_size,
+ "parent_folder_id": parent_folder_id,
+ "remote_id": remote_id,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(PaginatedFolderList, _response.json()) # type: ignore
@@ -340,6 +446,7 @@ async def create(
is_debug_mode: typing.Optional[bool] = None,
run_async: typing.Optional[bool] = None,
model: FolderRequest,
+ request_options: typing.Optional[RequestOptions] = None,
) -> FileStorageFolderResponse:
"""
Creates a `Folder` object with the given values.
@@ -350,6 +457,8 @@ async def create(
- run_async: typing.Optional[bool]. Whether or not third-party updates should be run asynchronously.
- model: FolderRequest.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import AsyncMerge
from merge.resources.filestorage import FolderRequest
@@ -362,7 +471,7 @@ async def create(
model=FolderRequest(
name="Platform",
folder_url="https://drive.com/1234",
- size=2738000,
+ size=1,
description="This is a wild folder.",
),
)
@@ -370,10 +479,36 @@ async def create(
_response = await self._client_wrapper.httpx_client.request(
"POST",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/filestorage/v1/folders"),
- params=remove_none_from_dict({"is_debug_mode": is_debug_mode, "run_async": run_async}),
- json=jsonable_encoder({"model": model}),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "is_debug_mode": is_debug_mode,
+ "run_async": run_async,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ json=jsonable_encoder({"model": model})
+ if request_options is None or request_options.get("additional_body_parameters") is None
+ else {
+ **jsonable_encoder({"model": model}),
+ **(jsonable_encoder(remove_none_from_dict(request_options.get("additional_body_parameters", {})))),
+ },
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(FileStorageFolderResponse, _response.json()) # type: ignore
@@ -389,6 +524,7 @@ async def retrieve(
*,
expand: typing.Optional[FoldersRetrieveRequestExpand] = None,
include_remote_data: typing.Optional[bool] = None,
+ request_options: typing.Optional[RequestOptions] = None,
) -> Folder:
"""
Returns a `Folder` object with the given `id`.
@@ -399,6 +535,8 @@ async def retrieve(
- expand: typing.Optional[FoldersRetrieveRequestExpand]. Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces.
- include_remote_data: typing.Optional[bool]. Whether to include the original data Merge fetched from the third-party to produce these models.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import AsyncMerge
from merge.resources.filestorage import FoldersRetrieveRequestExpand
@@ -408,16 +546,37 @@ async def retrieve(
api_key="YOUR_API_KEY",
)
await client.filestorage.folders.retrieve(
- id="id",
+ id="string",
expand=FoldersRetrieveRequestExpand.DRIVE,
)
"""
_response = await self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", f"api/filestorage/v1/folders/{id}"),
- params=remove_none_from_dict({"expand": expand, "include_remote_data": include_remote_data}),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "expand": expand,
+ "include_remote_data": include_remote_data,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(Folder, _response.json()) # type: ignore
@@ -427,10 +586,12 @@ async def retrieve(
raise ApiError(status_code=_response.status_code, body=_response.text)
raise ApiError(status_code=_response.status_code, body=_response_json)
- async def meta_post_retrieve(self) -> MetaResponse:
+ async def meta_post_retrieve(self, *, request_options: typing.Optional[RequestOptions] = None) -> MetaResponse:
"""
Returns metadata for `FileStorageFolder` POSTs.
+ Parameters:
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import AsyncMerge
@@ -443,8 +604,20 @@ async def meta_post_retrieve(self) -> MetaResponse:
_response = await self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/filestorage/v1/folders/meta/post"),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ request_options.get("additional_query_parameters") if request_options is not None else None
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(MetaResponse, _response.json()) # type: ignore
diff --git a/src/merge/resources/filestorage/resources/force_resync/client.py b/src/merge/resources/filestorage/resources/force_resync/client.py
index 1cabdb4b..4607f0b0 100644
--- a/src/merge/resources/filestorage/resources/force_resync/client.py
+++ b/src/merge/resources/filestorage/resources/force_resync/client.py
@@ -6,6 +6,9 @@
from .....core.api_error import ApiError
from .....core.client_wrapper import AsyncClientWrapper, SyncClientWrapper
+from .....core.jsonable_encoder import jsonable_encoder
+from .....core.remove_none_from_dict import remove_none_from_dict
+from .....core.request_options import RequestOptions
from ...types.sync_status import SyncStatus
try:
@@ -18,10 +21,14 @@ class ForceResyncClient:
def __init__(self, *, client_wrapper: SyncClientWrapper):
self._client_wrapper = client_wrapper
- def sync_status_resync_create(self) -> typing.List[SyncStatus]:
+ def sync_status_resync_create(
+ self, *, request_options: typing.Optional[RequestOptions] = None
+ ) -> typing.List[SyncStatus]:
"""
Force re-sync of all models. This is available for all organizations via the dashboard. Force re-sync is also available programmatically via API for monthly, quarterly, and highest sync frequency customers on the Core, Professional, or Enterprise plans. Doing so will consume a sync credit for the relevant linked account.
+ Parameters:
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import Merge
@@ -34,8 +41,23 @@ def sync_status_resync_create(self) -> typing.List[SyncStatus]:
_response = self._client_wrapper.httpx_client.request(
"POST",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/filestorage/v1/sync-status/resync"),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ request_options.get("additional_query_parameters") if request_options is not None else None
+ ),
+ json=jsonable_encoder(remove_none_from_dict(request_options.get("additional_body_parameters", {})))
+ if request_options is not None
+ else None,
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(typing.List[SyncStatus], _response.json()) # type: ignore
@@ -50,10 +72,14 @@ class AsyncForceResyncClient:
def __init__(self, *, client_wrapper: AsyncClientWrapper):
self._client_wrapper = client_wrapper
- async def sync_status_resync_create(self) -> typing.List[SyncStatus]:
+ async def sync_status_resync_create(
+ self, *, request_options: typing.Optional[RequestOptions] = None
+ ) -> typing.List[SyncStatus]:
"""
Force re-sync of all models. This is available for all organizations via the dashboard. Force re-sync is also available programmatically via API for monthly, quarterly, and highest sync frequency customers on the Core, Professional, or Enterprise plans. Doing so will consume a sync credit for the relevant linked account.
+ Parameters:
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import AsyncMerge
@@ -66,8 +92,23 @@ async def sync_status_resync_create(self) -> typing.List[SyncStatus]:
_response = await self._client_wrapper.httpx_client.request(
"POST",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/filestorage/v1/sync-status/resync"),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ request_options.get("additional_query_parameters") if request_options is not None else None
+ ),
+ json=jsonable_encoder(remove_none_from_dict(request_options.get("additional_body_parameters", {})))
+ if request_options is not None
+ else None,
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(typing.List[SyncStatus], _response.json()) # type: ignore
diff --git a/src/merge/resources/filestorage/resources/generate_key/client.py b/src/merge/resources/filestorage/resources/generate_key/client.py
index e28e0b6d..aa67a09b 100644
--- a/src/merge/resources/filestorage/resources/generate_key/client.py
+++ b/src/merge/resources/filestorage/resources/generate_key/client.py
@@ -7,6 +7,8 @@
from .....core.api_error import ApiError
from .....core.client_wrapper import AsyncClientWrapper, SyncClientWrapper
from .....core.jsonable_encoder import jsonable_encoder
+from .....core.remove_none_from_dict import remove_none_from_dict
+from .....core.request_options import RequestOptions
from ...types.remote_key import RemoteKey
try:
@@ -22,12 +24,14 @@ class GenerateKeyClient:
def __init__(self, *, client_wrapper: SyncClientWrapper):
self._client_wrapper = client_wrapper
- def create(self, *, name: str) -> RemoteKey:
+ def create(self, *, name: str, request_options: typing.Optional[RequestOptions] = None) -> RemoteKey:
"""
Create a remote key.
Parameters:
- name: str.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import Merge
@@ -42,9 +46,26 @@ def create(self, *, name: str) -> RemoteKey:
_response = self._client_wrapper.httpx_client.request(
"POST",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/filestorage/v1/generate-key"),
- json=jsonable_encoder({"name": name}),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ request_options.get("additional_query_parameters") if request_options is not None else None
+ ),
+ json=jsonable_encoder({"name": name})
+ if request_options is None or request_options.get("additional_body_parameters") is None
+ else {
+ **jsonable_encoder({"name": name}),
+ **(jsonable_encoder(remove_none_from_dict(request_options.get("additional_body_parameters", {})))),
+ },
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(RemoteKey, _response.json()) # type: ignore
@@ -59,12 +80,14 @@ class AsyncGenerateKeyClient:
def __init__(self, *, client_wrapper: AsyncClientWrapper):
self._client_wrapper = client_wrapper
- async def create(self, *, name: str) -> RemoteKey:
+ async def create(self, *, name: str, request_options: typing.Optional[RequestOptions] = None) -> RemoteKey:
"""
Create a remote key.
Parameters:
- name: str.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import AsyncMerge
@@ -79,9 +102,26 @@ async def create(self, *, name: str) -> RemoteKey:
_response = await self._client_wrapper.httpx_client.request(
"POST",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/filestorage/v1/generate-key"),
- json=jsonable_encoder({"name": name}),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ request_options.get("additional_query_parameters") if request_options is not None else None
+ ),
+ json=jsonable_encoder({"name": name})
+ if request_options is None or request_options.get("additional_body_parameters") is None
+ else {
+ **jsonable_encoder({"name": name}),
+ **(jsonable_encoder(remove_none_from_dict(request_options.get("additional_body_parameters", {})))),
+ },
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(RemoteKey, _response.json()) # type: ignore
diff --git a/src/merge/resources/filestorage/resources/groups/client.py b/src/merge/resources/filestorage/resources/groups/client.py
index e59bdc0a..dc08e96b 100644
--- a/src/merge/resources/filestorage/resources/groups/client.py
+++ b/src/merge/resources/filestorage/resources/groups/client.py
@@ -8,7 +8,9 @@
from .....core.api_error import ApiError
from .....core.client_wrapper import AsyncClientWrapper, SyncClientWrapper
from .....core.datetime_utils import serialize_datetime
+from .....core.jsonable_encoder import jsonable_encoder
from .....core.remove_none_from_dict import remove_none_from_dict
+from .....core.request_options import RequestOptions
from ...types.group import Group
from ...types.paginated_group_list import PaginatedGroupList
@@ -34,6 +36,7 @@ def list(
modified_before: typing.Optional[dt.datetime] = None,
page_size: typing.Optional[int] = None,
remote_id: typing.Optional[str] = None,
+ request_options: typing.Optional[RequestOptions] = None,
) -> PaginatedGroupList:
"""
Returns a list of `Group` objects.
@@ -56,6 +59,8 @@ def list(
- page_size: typing.Optional[int]. Number of results to return per page.
- remote_id: typing.Optional[str]. The API provider's ID for the given object.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import Merge
@@ -68,21 +73,37 @@ def list(
_response = self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/filestorage/v1/groups"),
- params=remove_none_from_dict(
- {
- "created_after": serialize_datetime(created_after) if created_after is not None else None,
- "created_before": serialize_datetime(created_before) if created_before is not None else None,
- "cursor": cursor,
- "include_deleted_data": include_deleted_data,
- "include_remote_data": include_remote_data,
- "modified_after": serialize_datetime(modified_after) if modified_after is not None else None,
- "modified_before": serialize_datetime(modified_before) if modified_before is not None else None,
- "page_size": page_size,
- "remote_id": remote_id,
- }
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "created_after": serialize_datetime(created_after) if created_after is not None else None,
+ "created_before": serialize_datetime(created_before) if created_before is not None else None,
+ "cursor": cursor,
+ "include_deleted_data": include_deleted_data,
+ "include_remote_data": include_remote_data,
+ "modified_after": serialize_datetime(modified_after) if modified_after is not None else None,
+ "modified_before": serialize_datetime(modified_before) if modified_before is not None else None,
+ "page_size": page_size,
+ "remote_id": remote_id,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(PaginatedGroupList, _response.json()) # type: ignore
@@ -92,7 +113,13 @@ def list(
raise ApiError(status_code=_response.status_code, body=_response.text)
raise ApiError(status_code=_response.status_code, body=_response_json)
- def retrieve(self, id: str, *, include_remote_data: typing.Optional[bool] = None) -> Group:
+ def retrieve(
+ self,
+ id: str,
+ *,
+ include_remote_data: typing.Optional[bool] = None,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> Group:
"""
Returns a `Group` object with the given `id`.
@@ -100,6 +127,8 @@ def retrieve(self, id: str, *, include_remote_data: typing.Optional[bool] = None
- id: str.
- include_remote_data: typing.Optional[bool]. Whether to include the original data Merge fetched from the third-party to produce these models.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import Merge
@@ -108,15 +137,35 @@ def retrieve(self, id: str, *, include_remote_data: typing.Optional[bool] = None
api_key="YOUR_API_KEY",
)
client.filestorage.groups.retrieve(
- id="id",
+ id="string",
)
"""
_response = self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", f"api/filestorage/v1/groups/{id}"),
- params=remove_none_from_dict({"include_remote_data": include_remote_data}),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "include_remote_data": include_remote_data,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(Group, _response.json()) # type: ignore
@@ -143,6 +192,7 @@ async def list(
modified_before: typing.Optional[dt.datetime] = None,
page_size: typing.Optional[int] = None,
remote_id: typing.Optional[str] = None,
+ request_options: typing.Optional[RequestOptions] = None,
) -> PaginatedGroupList:
"""
Returns a list of `Group` objects.
@@ -165,6 +215,8 @@ async def list(
- page_size: typing.Optional[int]. Number of results to return per page.
- remote_id: typing.Optional[str]. The API provider's ID for the given object.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import AsyncMerge
@@ -177,21 +229,37 @@ async def list(
_response = await self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/filestorage/v1/groups"),
- params=remove_none_from_dict(
- {
- "created_after": serialize_datetime(created_after) if created_after is not None else None,
- "created_before": serialize_datetime(created_before) if created_before is not None else None,
- "cursor": cursor,
- "include_deleted_data": include_deleted_data,
- "include_remote_data": include_remote_data,
- "modified_after": serialize_datetime(modified_after) if modified_after is not None else None,
- "modified_before": serialize_datetime(modified_before) if modified_before is not None else None,
- "page_size": page_size,
- "remote_id": remote_id,
- }
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "created_after": serialize_datetime(created_after) if created_after is not None else None,
+ "created_before": serialize_datetime(created_before) if created_before is not None else None,
+ "cursor": cursor,
+ "include_deleted_data": include_deleted_data,
+ "include_remote_data": include_remote_data,
+ "modified_after": serialize_datetime(modified_after) if modified_after is not None else None,
+ "modified_before": serialize_datetime(modified_before) if modified_before is not None else None,
+ "page_size": page_size,
+ "remote_id": remote_id,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(PaginatedGroupList, _response.json()) # type: ignore
@@ -201,7 +269,13 @@ async def list(
raise ApiError(status_code=_response.status_code, body=_response.text)
raise ApiError(status_code=_response.status_code, body=_response_json)
- async def retrieve(self, id: str, *, include_remote_data: typing.Optional[bool] = None) -> Group:
+ async def retrieve(
+ self,
+ id: str,
+ *,
+ include_remote_data: typing.Optional[bool] = None,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> Group:
"""
Returns a `Group` object with the given `id`.
@@ -209,6 +283,8 @@ async def retrieve(self, id: str, *, include_remote_data: typing.Optional[bool]
- id: str.
- include_remote_data: typing.Optional[bool]. Whether to include the original data Merge fetched from the third-party to produce these models.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import AsyncMerge
@@ -217,15 +293,35 @@ async def retrieve(self, id: str, *, include_remote_data: typing.Optional[bool]
api_key="YOUR_API_KEY",
)
await client.filestorage.groups.retrieve(
- id="id",
+ id="string",
)
"""
_response = await self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", f"api/filestorage/v1/groups/{id}"),
- params=remove_none_from_dict({"include_remote_data": include_remote_data}),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "include_remote_data": include_remote_data,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(Group, _response.json()) # type: ignore
diff --git a/src/merge/resources/filestorage/resources/issues/client.py b/src/merge/resources/filestorage/resources/issues/client.py
index 89534a93..a3335b5f 100644
--- a/src/merge/resources/filestorage/resources/issues/client.py
+++ b/src/merge/resources/filestorage/resources/issues/client.py
@@ -8,7 +8,9 @@
from .....core.api_error import ApiError
from .....core.client_wrapper import AsyncClientWrapper, SyncClientWrapper
from .....core.datetime_utils import serialize_datetime
+from .....core.jsonable_encoder import jsonable_encoder
from .....core.remove_none_from_dict import remove_none_from_dict
+from .....core.request_options import RequestOptions
from ...types.issue import Issue
from ...types.paginated_issue_list import PaginatedIssueList
from .types.issues_list_request_status import IssuesListRequestStatus
@@ -39,6 +41,7 @@ def list(
page_size: typing.Optional[int] = None,
start_date: typing.Optional[str] = None,
status: typing.Optional[IssuesListRequestStatus] = None,
+ request_options: typing.Optional[RequestOptions] = None,
) -> PaginatedIssueList:
"""
Gets issues.
@@ -71,7 +74,9 @@ def list(
- status: typing.Optional[IssuesListRequestStatus]. Status of the issue. Options: ('ONGOING', 'RESOLVED')
- `ONGOING` - ONGOING
- - `RESOLVED` - RESOLVED---
+ - `RESOLVED` - RESOLVED
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
+ ---
from merge.client import Merge
from merge.resources.filestorage import IssuesListRequestStatus
@@ -86,33 +91,49 @@ def list(
_response = self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/filestorage/v1/issues"),
- params=remove_none_from_dict(
- {
- "account_token": account_token,
- "cursor": cursor,
- "end_date": end_date,
- "end_user_organization_name": end_user_organization_name,
- "first_incident_time_after": serialize_datetime(first_incident_time_after)
- if first_incident_time_after is not None
- else None,
- "first_incident_time_before": serialize_datetime(first_incident_time_before)
- if first_incident_time_before is not None
- else None,
- "include_muted": include_muted,
- "integration_name": integration_name,
- "last_incident_time_after": serialize_datetime(last_incident_time_after)
- if last_incident_time_after is not None
- else None,
- "last_incident_time_before": serialize_datetime(last_incident_time_before)
- if last_incident_time_before is not None
- else None,
- "page_size": page_size,
- "start_date": start_date,
- "status": status,
- }
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "account_token": account_token,
+ "cursor": cursor,
+ "end_date": end_date,
+ "end_user_organization_name": end_user_organization_name,
+ "first_incident_time_after": serialize_datetime(first_incident_time_after)
+ if first_incident_time_after is not None
+ else None,
+ "first_incident_time_before": serialize_datetime(first_incident_time_before)
+ if first_incident_time_before is not None
+ else None,
+ "include_muted": include_muted,
+ "integration_name": integration_name,
+ "last_incident_time_after": serialize_datetime(last_incident_time_after)
+ if last_incident_time_after is not None
+ else None,
+ "last_incident_time_before": serialize_datetime(last_incident_time_before)
+ if last_incident_time_before is not None
+ else None,
+ "page_size": page_size,
+ "start_date": start_date,
+ "status": status,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(PaginatedIssueList, _response.json()) # type: ignore
@@ -122,12 +143,14 @@ def list(
raise ApiError(status_code=_response.status_code, body=_response.text)
raise ApiError(status_code=_response.status_code, body=_response_json)
- def retrieve(self, id: str) -> Issue:
+ def retrieve(self, id: str, *, request_options: typing.Optional[RequestOptions] = None) -> Issue:
"""
Get a specific issue.
Parameters:
- id: str.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import Merge
@@ -136,14 +159,26 @@ def retrieve(self, id: str) -> Issue:
api_key="YOUR_API_KEY",
)
client.filestorage.issues.retrieve(
- id="id",
+ id="string",
)
"""
_response = self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", f"api/filestorage/v1/issues/{id}"),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ request_options.get("additional_query_parameters") if request_options is not None else None
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(Issue, _response.json()) # type: ignore
@@ -174,6 +209,7 @@ async def list(
page_size: typing.Optional[int] = None,
start_date: typing.Optional[str] = None,
status: typing.Optional[IssuesListRequestStatus] = None,
+ request_options: typing.Optional[RequestOptions] = None,
) -> PaginatedIssueList:
"""
Gets issues.
@@ -206,7 +242,9 @@ async def list(
- status: typing.Optional[IssuesListRequestStatus]. Status of the issue. Options: ('ONGOING', 'RESOLVED')
- `ONGOING` - ONGOING
- - `RESOLVED` - RESOLVED---
+ - `RESOLVED` - RESOLVED
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
+ ---
from merge.client import AsyncMerge
from merge.resources.filestorage import IssuesListRequestStatus
@@ -221,33 +259,49 @@ async def list(
_response = await self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/filestorage/v1/issues"),
- params=remove_none_from_dict(
- {
- "account_token": account_token,
- "cursor": cursor,
- "end_date": end_date,
- "end_user_organization_name": end_user_organization_name,
- "first_incident_time_after": serialize_datetime(first_incident_time_after)
- if first_incident_time_after is not None
- else None,
- "first_incident_time_before": serialize_datetime(first_incident_time_before)
- if first_incident_time_before is not None
- else None,
- "include_muted": include_muted,
- "integration_name": integration_name,
- "last_incident_time_after": serialize_datetime(last_incident_time_after)
- if last_incident_time_after is not None
- else None,
- "last_incident_time_before": serialize_datetime(last_incident_time_before)
- if last_incident_time_before is not None
- else None,
- "page_size": page_size,
- "start_date": start_date,
- "status": status,
- }
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "account_token": account_token,
+ "cursor": cursor,
+ "end_date": end_date,
+ "end_user_organization_name": end_user_organization_name,
+ "first_incident_time_after": serialize_datetime(first_incident_time_after)
+ if first_incident_time_after is not None
+ else None,
+ "first_incident_time_before": serialize_datetime(first_incident_time_before)
+ if first_incident_time_before is not None
+ else None,
+ "include_muted": include_muted,
+ "integration_name": integration_name,
+ "last_incident_time_after": serialize_datetime(last_incident_time_after)
+ if last_incident_time_after is not None
+ else None,
+ "last_incident_time_before": serialize_datetime(last_incident_time_before)
+ if last_incident_time_before is not None
+ else None,
+ "page_size": page_size,
+ "start_date": start_date,
+ "status": status,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(PaginatedIssueList, _response.json()) # type: ignore
@@ -257,12 +311,14 @@ async def list(
raise ApiError(status_code=_response.status_code, body=_response.text)
raise ApiError(status_code=_response.status_code, body=_response_json)
- async def retrieve(self, id: str) -> Issue:
+ async def retrieve(self, id: str, *, request_options: typing.Optional[RequestOptions] = None) -> Issue:
"""
Get a specific issue.
Parameters:
- id: str.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import AsyncMerge
@@ -271,14 +327,26 @@ async def retrieve(self, id: str) -> Issue:
api_key="YOUR_API_KEY",
)
await client.filestorage.issues.retrieve(
- id="id",
+ id="string",
)
"""
_response = await self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", f"api/filestorage/v1/issues/{id}"),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ request_options.get("additional_query_parameters") if request_options is not None else None
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(Issue, _response.json()) # type: ignore
diff --git a/src/merge/resources/filestorage/resources/link_token/client.py b/src/merge/resources/filestorage/resources/link_token/client.py
index 86572f0e..4f287ee4 100644
--- a/src/merge/resources/filestorage/resources/link_token/client.py
+++ b/src/merge/resources/filestorage/resources/link_token/client.py
@@ -7,6 +7,8 @@
from .....core.api_error import ApiError
from .....core.client_wrapper import AsyncClientWrapper, SyncClientWrapper
from .....core.jsonable_encoder import jsonable_encoder
+from .....core.remove_none_from_dict import remove_none_from_dict
+from .....core.request_options import RequestOptions
from ...types.categories_enum import CategoriesEnum
from ...types.common_model_scopes_body_request import CommonModelScopesBodyRequest
from ...types.link_token import LinkToken
@@ -35,6 +37,7 @@ def create(
link_expiry_mins: typing.Optional[int] = OMIT,
should_create_magic_link_url: typing.Optional[bool] = OMIT,
common_models: typing.Optional[typing.List[CommonModelScopesBodyRequest]] = OMIT,
+ request_options: typing.Optional[RequestOptions] = None,
) -> LinkToken:
"""
Creates a link token to be used when linking a new end user.
@@ -55,6 +58,21 @@ def create(
- should_create_magic_link_url: typing.Optional[bool]. Whether to generate a Magic Link URL. Defaults to false. For more information on Magic Link, see https://merge.dev/blog/integrations-fast-say-hello-to-magic-link.
- common_models: typing.Optional[typing.List[CommonModelScopesBodyRequest]]. An array of objects to specify the models and fields that will be disabled for a given Linked Account. Each object uses model_id, enabled_actions, and disabled_fields to specify the model, method, and fields that are scoped for a given Linked Account.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
+ ---
+ from merge.client import Merge
+
+ client = Merge(
+ account_token="YOUR_ACCOUNT_TOKEN",
+ api_key="YOUR_API_KEY",
+ )
+ client.filestorage.link_token.create(
+ end_user_email_address="string",
+ end_user_organization_name="string",
+ end_user_origin_id="string",
+ categories=[],
+ )
"""
_request: typing.Dict[str, typing.Any] = {
"end_user_email_address": end_user_email_address,
@@ -73,9 +91,26 @@ def create(
_response = self._client_wrapper.httpx_client.request(
"POST",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/filestorage/v1/link-token"),
- json=jsonable_encoder(_request),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ request_options.get("additional_query_parameters") if request_options is not None else None
+ ),
+ json=jsonable_encoder(_request)
+ if request_options is None or request_options.get("additional_body_parameters") is None
+ else {
+ **jsonable_encoder(_request),
+ **(jsonable_encoder(remove_none_from_dict(request_options.get("additional_body_parameters", {})))),
+ },
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(LinkToken, _response.json()) # type: ignore
@@ -101,6 +136,7 @@ async def create(
link_expiry_mins: typing.Optional[int] = OMIT,
should_create_magic_link_url: typing.Optional[bool] = OMIT,
common_models: typing.Optional[typing.List[CommonModelScopesBodyRequest]] = OMIT,
+ request_options: typing.Optional[RequestOptions] = None,
) -> LinkToken:
"""
Creates a link token to be used when linking a new end user.
@@ -121,6 +157,21 @@ async def create(
- should_create_magic_link_url: typing.Optional[bool]. Whether to generate a Magic Link URL. Defaults to false. For more information on Magic Link, see https://merge.dev/blog/integrations-fast-say-hello-to-magic-link.
- common_models: typing.Optional[typing.List[CommonModelScopesBodyRequest]]. An array of objects to specify the models and fields that will be disabled for a given Linked Account. Each object uses model_id, enabled_actions, and disabled_fields to specify the model, method, and fields that are scoped for a given Linked Account.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
+ ---
+ from merge.client import AsyncMerge
+
+ client = AsyncMerge(
+ account_token="YOUR_ACCOUNT_TOKEN",
+ api_key="YOUR_API_KEY",
+ )
+ await client.filestorage.link_token.create(
+ end_user_email_address="string",
+ end_user_organization_name="string",
+ end_user_origin_id="string",
+ categories=[],
+ )
"""
_request: typing.Dict[str, typing.Any] = {
"end_user_email_address": end_user_email_address,
@@ -139,9 +190,26 @@ async def create(
_response = await self._client_wrapper.httpx_client.request(
"POST",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/filestorage/v1/link-token"),
- json=jsonable_encoder(_request),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ request_options.get("additional_query_parameters") if request_options is not None else None
+ ),
+ json=jsonable_encoder(_request)
+ if request_options is None or request_options.get("additional_body_parameters") is None
+ else {
+ **jsonable_encoder(_request),
+ **(jsonable_encoder(remove_none_from_dict(request_options.get("additional_body_parameters", {})))),
+ },
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(LinkToken, _response.json()) # type: ignore
diff --git a/src/merge/resources/filestorage/resources/linked_accounts/client.py b/src/merge/resources/filestorage/resources/linked_accounts/client.py
index 0c8d2c0d..465cd771 100644
--- a/src/merge/resources/filestorage/resources/linked_accounts/client.py
+++ b/src/merge/resources/filestorage/resources/linked_accounts/client.py
@@ -6,7 +6,9 @@
from .....core.api_error import ApiError
from .....core.client_wrapper import AsyncClientWrapper, SyncClientWrapper
+from .....core.jsonable_encoder import jsonable_encoder
from .....core.remove_none_from_dict import remove_none_from_dict
+from .....core.request_options import RequestOptions
from ...types.paginated_account_details_and_actions_list import PaginatedAccountDetailsAndActionsList
from .types.linked_accounts_list_request_category import LinkedAccountsListRequestCategory
@@ -36,6 +38,7 @@ def list(
is_test_account: typing.Optional[str] = None,
page_size: typing.Optional[int] = None,
status: typing.Optional[str] = None,
+ request_options: typing.Optional[RequestOptions] = None,
) -> PaginatedAccountDetailsAndActionsList:
"""
List linked accounts for your organization.
@@ -73,6 +76,8 @@ def list(
- page_size: typing.Optional[int]. Number of results to return per page.
- status: typing.Optional[str]. Filter by status. Options: `COMPLETE`, `INCOMPLETE`, `RELINK_NEEDED`
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import Merge
from merge.resources.filestorage import LinkedAccountsListRequestCategory
@@ -88,25 +93,41 @@ def list(
_response = self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/filestorage/v1/linked-accounts"),
- params=remove_none_from_dict(
- {
- "category": category,
- "cursor": cursor,
- "end_user_email_address": end_user_email_address,
- "end_user_organization_name": end_user_organization_name,
- "end_user_origin_id": end_user_origin_id,
- "end_user_origin_ids": end_user_origin_ids,
- "id": id,
- "ids": ids,
- "include_duplicates": include_duplicates,
- "integration_name": integration_name,
- "is_test_account": is_test_account,
- "page_size": page_size,
- "status": status,
- }
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "category": category,
+ "cursor": cursor,
+ "end_user_email_address": end_user_email_address,
+ "end_user_organization_name": end_user_organization_name,
+ "end_user_origin_id": end_user_origin_id,
+ "end_user_origin_ids": end_user_origin_ids,
+ "id": id,
+ "ids": ids,
+ "include_duplicates": include_duplicates,
+ "integration_name": integration_name,
+ "is_test_account": is_test_account,
+ "page_size": page_size,
+ "status": status,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(PaginatedAccountDetailsAndActionsList, _response.json()) # type: ignore
@@ -137,6 +158,7 @@ async def list(
is_test_account: typing.Optional[str] = None,
page_size: typing.Optional[int] = None,
status: typing.Optional[str] = None,
+ request_options: typing.Optional[RequestOptions] = None,
) -> PaginatedAccountDetailsAndActionsList:
"""
List linked accounts for your organization.
@@ -174,6 +196,8 @@ async def list(
- page_size: typing.Optional[int]. Number of results to return per page.
- status: typing.Optional[str]. Filter by status. Options: `COMPLETE`, `INCOMPLETE`, `RELINK_NEEDED`
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import AsyncMerge
from merge.resources.filestorage import LinkedAccountsListRequestCategory
@@ -189,25 +213,41 @@ async def list(
_response = await self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/filestorage/v1/linked-accounts"),
- params=remove_none_from_dict(
- {
- "category": category,
- "cursor": cursor,
- "end_user_email_address": end_user_email_address,
- "end_user_organization_name": end_user_organization_name,
- "end_user_origin_id": end_user_origin_id,
- "end_user_origin_ids": end_user_origin_ids,
- "id": id,
- "ids": ids,
- "include_duplicates": include_duplicates,
- "integration_name": integration_name,
- "is_test_account": is_test_account,
- "page_size": page_size,
- "status": status,
- }
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "category": category,
+ "cursor": cursor,
+ "end_user_email_address": end_user_email_address,
+ "end_user_organization_name": end_user_organization_name,
+ "end_user_origin_id": end_user_origin_id,
+ "end_user_origin_ids": end_user_origin_ids,
+ "id": id,
+ "ids": ids,
+ "include_duplicates": include_duplicates,
+ "integration_name": integration_name,
+ "is_test_account": is_test_account,
+ "page_size": page_size,
+ "status": status,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(PaginatedAccountDetailsAndActionsList, _response.json()) # type: ignore
diff --git a/src/merge/resources/filestorage/resources/passthrough/client.py b/src/merge/resources/filestorage/resources/passthrough/client.py
index f179f70f..ec4202d4 100644
--- a/src/merge/resources/filestorage/resources/passthrough/client.py
+++ b/src/merge/resources/filestorage/resources/passthrough/client.py
@@ -7,6 +7,8 @@
from .....core.api_error import ApiError
from .....core.client_wrapper import AsyncClientWrapper, SyncClientWrapper
from .....core.jsonable_encoder import jsonable_encoder
+from .....core.remove_none_from_dict import remove_none_from_dict
+from .....core.request_options import RequestOptions
from ...types.data_passthrough_request import DataPassthroughRequest
from ...types.remote_response import RemoteResponse
@@ -23,19 +25,60 @@ class PassthroughClient:
def __init__(self, *, client_wrapper: SyncClientWrapper):
self._client_wrapper = client_wrapper
- def create(self, *, request: DataPassthroughRequest) -> RemoteResponse:
+ def create(
+ self, *, request: DataPassthroughRequest, request_options: typing.Optional[RequestOptions] = None
+ ) -> RemoteResponse:
"""
Pull data from an endpoint not currently supported by Merge.
Parameters:
- request: DataPassthroughRequest.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
+ ---
+ from merge.client import Merge
+ from merge.resources.filestorage import (
+ DataPassthroughRequest,
+ MethodEnum,
+ RequestFormatEnum,
+ )
+
+ client = Merge(
+ account_token="YOUR_ACCOUNT_TOKEN",
+ api_key="YOUR_API_KEY",
+ )
+ client.filestorage.passthrough.create(
+ request=DataPassthroughRequest(
+ method=MethodEnum.GET,
+ path="/scooters",
+ data='{"company": "Lime", "model": "Gen 2.5"}',
+ request_format=RequestFormatEnum.JSON,
+ ),
+ )
"""
_response = self._client_wrapper.httpx_client.request(
"POST",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/filestorage/v1/passthrough"),
- json=jsonable_encoder(request),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ request_options.get("additional_query_parameters") if request_options is not None else None
+ ),
+ json=jsonable_encoder(request)
+ if request_options is None or request_options.get("additional_body_parameters") is None
+ else {
+ **jsonable_encoder(request),
+ **(jsonable_encoder(remove_none_from_dict(request_options.get("additional_body_parameters", {})))),
+ },
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(RemoteResponse, _response.json()) # type: ignore
@@ -50,19 +93,60 @@ class AsyncPassthroughClient:
def __init__(self, *, client_wrapper: AsyncClientWrapper):
self._client_wrapper = client_wrapper
- async def create(self, *, request: DataPassthroughRequest) -> RemoteResponse:
+ async def create(
+ self, *, request: DataPassthroughRequest, request_options: typing.Optional[RequestOptions] = None
+ ) -> RemoteResponse:
"""
Pull data from an endpoint not currently supported by Merge.
Parameters:
- request: DataPassthroughRequest.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
+ ---
+ from merge.client import AsyncMerge
+ from merge.resources.filestorage import (
+ DataPassthroughRequest,
+ MethodEnum,
+ RequestFormatEnum,
+ )
+
+ client = AsyncMerge(
+ account_token="YOUR_ACCOUNT_TOKEN",
+ api_key="YOUR_API_KEY",
+ )
+ await client.filestorage.passthrough.create(
+ request=DataPassthroughRequest(
+ method=MethodEnum.GET,
+ path="/scooters",
+ data='{"company": "Lime", "model": "Gen 2.5"}',
+ request_format=RequestFormatEnum.JSON,
+ ),
+ )
"""
_response = await self._client_wrapper.httpx_client.request(
"POST",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/filestorage/v1/passthrough"),
- json=jsonable_encoder(request),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ request_options.get("additional_query_parameters") if request_options is not None else None
+ ),
+ json=jsonable_encoder(request)
+ if request_options is None or request_options.get("additional_body_parameters") is None
+ else {
+ **jsonable_encoder(request),
+ **(jsonable_encoder(remove_none_from_dict(request_options.get("additional_body_parameters", {})))),
+ },
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(RemoteResponse, _response.json()) # type: ignore
diff --git a/src/merge/resources/filestorage/resources/regenerate_key/client.py b/src/merge/resources/filestorage/resources/regenerate_key/client.py
index 5696ec63..c7684f08 100644
--- a/src/merge/resources/filestorage/resources/regenerate_key/client.py
+++ b/src/merge/resources/filestorage/resources/regenerate_key/client.py
@@ -7,6 +7,8 @@
from .....core.api_error import ApiError
from .....core.client_wrapper import AsyncClientWrapper, SyncClientWrapper
from .....core.jsonable_encoder import jsonable_encoder
+from .....core.remove_none_from_dict import remove_none_from_dict
+from .....core.request_options import RequestOptions
from ...types.remote_key import RemoteKey
try:
@@ -22,12 +24,14 @@ class RegenerateKeyClient:
def __init__(self, *, client_wrapper: SyncClientWrapper):
self._client_wrapper = client_wrapper
- def create(self, *, name: str) -> RemoteKey:
+ def create(self, *, name: str, request_options: typing.Optional[RequestOptions] = None) -> RemoteKey:
"""
Exchange remote keys.
Parameters:
- name: str.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import Merge
@@ -42,9 +46,26 @@ def create(self, *, name: str) -> RemoteKey:
_response = self._client_wrapper.httpx_client.request(
"POST",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/filestorage/v1/regenerate-key"),
- json=jsonable_encoder({"name": name}),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ request_options.get("additional_query_parameters") if request_options is not None else None
+ ),
+ json=jsonable_encoder({"name": name})
+ if request_options is None or request_options.get("additional_body_parameters") is None
+ else {
+ **jsonable_encoder({"name": name}),
+ **(jsonable_encoder(remove_none_from_dict(request_options.get("additional_body_parameters", {})))),
+ },
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(RemoteKey, _response.json()) # type: ignore
@@ -59,12 +80,14 @@ class AsyncRegenerateKeyClient:
def __init__(self, *, client_wrapper: AsyncClientWrapper):
self._client_wrapper = client_wrapper
- async def create(self, *, name: str) -> RemoteKey:
+ async def create(self, *, name: str, request_options: typing.Optional[RequestOptions] = None) -> RemoteKey:
"""
Exchange remote keys.
Parameters:
- name: str.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import AsyncMerge
@@ -79,9 +102,26 @@ async def create(self, *, name: str) -> RemoteKey:
_response = await self._client_wrapper.httpx_client.request(
"POST",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/filestorage/v1/regenerate-key"),
- json=jsonable_encoder({"name": name}),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ request_options.get("additional_query_parameters") if request_options is not None else None
+ ),
+ json=jsonable_encoder({"name": name})
+ if request_options is None or request_options.get("additional_body_parameters") is None
+ else {
+ **jsonable_encoder({"name": name}),
+ **(jsonable_encoder(remove_none_from_dict(request_options.get("additional_body_parameters", {})))),
+ },
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(RemoteKey, _response.json()) # type: ignore
diff --git a/src/merge/resources/filestorage/resources/selective_sync/client.py b/src/merge/resources/filestorage/resources/selective_sync/client.py
index a7005b8f..2838d1dd 100644
--- a/src/merge/resources/filestorage/resources/selective_sync/client.py
+++ b/src/merge/resources/filestorage/resources/selective_sync/client.py
@@ -8,6 +8,7 @@
from .....core.client_wrapper import AsyncClientWrapper, SyncClientWrapper
from .....core.jsonable_encoder import jsonable_encoder
from .....core.remove_none_from_dict import remove_none_from_dict
+from .....core.request_options import RequestOptions
from ...types.linked_account_selective_sync_configuration import LinkedAccountSelectiveSyncConfiguration
from ...types.linked_account_selective_sync_configuration_request import LinkedAccountSelectiveSyncConfigurationRequest
from ...types.paginated_condition_schema_list import PaginatedConditionSchemaList
@@ -25,10 +26,14 @@ class SelectiveSyncClient:
def __init__(self, *, client_wrapper: SyncClientWrapper):
self._client_wrapper = client_wrapper
- def configurations_list(self) -> typing.List[LinkedAccountSelectiveSyncConfiguration]:
+ def configurations_list(
+ self, *, request_options: typing.Optional[RequestOptions] = None
+ ) -> typing.List[LinkedAccountSelectiveSyncConfiguration]:
"""
Get a linked account's selective syncs.
+ Parameters:
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import Merge
@@ -43,8 +48,20 @@ def configurations_list(self) -> typing.List[LinkedAccountSelectiveSyncConfigura
urllib.parse.urljoin(
f"{self._client_wrapper.get_base_url()}/", "api/filestorage/v1/selective-sync/configurations"
),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ request_options.get("additional_query_parameters") if request_options is not None else None
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(typing.List[LinkedAccountSelectiveSyncConfiguration], _response.json()) # type: ignore
@@ -55,29 +72,27 @@ def configurations_list(self) -> typing.List[LinkedAccountSelectiveSyncConfigura
raise ApiError(status_code=_response.status_code, body=_response_json)
def configurations_update(
- self, *, sync_configurations: typing.List[LinkedAccountSelectiveSyncConfigurationRequest]
+ self,
+ *,
+ sync_configurations: typing.List[LinkedAccountSelectiveSyncConfigurationRequest],
+ request_options: typing.Optional[RequestOptions] = None,
) -> typing.List[LinkedAccountSelectiveSyncConfiguration]:
"""
Replace a linked account's selective syncs.
Parameters:
- sync_configurations: typing.List[LinkedAccountSelectiveSyncConfigurationRequest]. The selective syncs associated with a linked account.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import Merge
- from merge.resources.filestorage import (
- LinkedAccountSelectiveSyncConfigurationRequest,
- )
client = Merge(
account_token="YOUR_ACCOUNT_TOKEN",
api_key="YOUR_API_KEY",
)
client.filestorage.selective_sync.configurations_update(
- sync_configurations=[
- LinkedAccountSelectiveSyncConfigurationRequest(
- linked_account_conditions=[],
- )
- ],
+ sync_configurations=[],
)
"""
_response = self._client_wrapper.httpx_client.request(
@@ -85,9 +100,26 @@ def configurations_update(
urllib.parse.urljoin(
f"{self._client_wrapper.get_base_url()}/", "api/filestorage/v1/selective-sync/configurations"
),
- json=jsonable_encoder({"sync_configurations": sync_configurations}),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ request_options.get("additional_query_parameters") if request_options is not None else None
+ ),
+ json=jsonable_encoder({"sync_configurations": sync_configurations})
+ if request_options is None or request_options.get("additional_body_parameters") is None
+ else {
+ **jsonable_encoder({"sync_configurations": sync_configurations}),
+ **(jsonable_encoder(remove_none_from_dict(request_options.get("additional_body_parameters", {})))),
+ },
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(typing.List[LinkedAccountSelectiveSyncConfiguration], _response.json()) # type: ignore
@@ -103,6 +135,7 @@ def meta_list(
common_model: typing.Optional[str] = None,
cursor: typing.Optional[str] = None,
page_size: typing.Optional[int] = None,
+ request_options: typing.Optional[RequestOptions] = None,
) -> PaginatedConditionSchemaList:
"""
Get metadata for the conditions available to a linked account.
@@ -113,6 +146,8 @@ def meta_list(
- cursor: typing.Optional[str]. The pagination cursor value.
- page_size: typing.Optional[int]. Number of results to return per page.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import Merge
@@ -125,9 +160,31 @@ def meta_list(
_response = self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/filestorage/v1/selective-sync/meta"),
- params=remove_none_from_dict({"common_model": common_model, "cursor": cursor, "page_size": page_size}),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "common_model": common_model,
+ "cursor": cursor,
+ "page_size": page_size,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(PaginatedConditionSchemaList, _response.json()) # type: ignore
@@ -142,10 +199,14 @@ class AsyncSelectiveSyncClient:
def __init__(self, *, client_wrapper: AsyncClientWrapper):
self._client_wrapper = client_wrapper
- async def configurations_list(self) -> typing.List[LinkedAccountSelectiveSyncConfiguration]:
+ async def configurations_list(
+ self, *, request_options: typing.Optional[RequestOptions] = None
+ ) -> typing.List[LinkedAccountSelectiveSyncConfiguration]:
"""
Get a linked account's selective syncs.
+ Parameters:
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import AsyncMerge
@@ -160,8 +221,20 @@ async def configurations_list(self) -> typing.List[LinkedAccountSelectiveSyncCon
urllib.parse.urljoin(
f"{self._client_wrapper.get_base_url()}/", "api/filestorage/v1/selective-sync/configurations"
),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ request_options.get("additional_query_parameters") if request_options is not None else None
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(typing.List[LinkedAccountSelectiveSyncConfiguration], _response.json()) # type: ignore
@@ -172,29 +245,27 @@ async def configurations_list(self) -> typing.List[LinkedAccountSelectiveSyncCon
raise ApiError(status_code=_response.status_code, body=_response_json)
async def configurations_update(
- self, *, sync_configurations: typing.List[LinkedAccountSelectiveSyncConfigurationRequest]
+ self,
+ *,
+ sync_configurations: typing.List[LinkedAccountSelectiveSyncConfigurationRequest],
+ request_options: typing.Optional[RequestOptions] = None,
) -> typing.List[LinkedAccountSelectiveSyncConfiguration]:
"""
Replace a linked account's selective syncs.
Parameters:
- sync_configurations: typing.List[LinkedAccountSelectiveSyncConfigurationRequest]. The selective syncs associated with a linked account.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import AsyncMerge
- from merge.resources.filestorage import (
- LinkedAccountSelectiveSyncConfigurationRequest,
- )
client = AsyncMerge(
account_token="YOUR_ACCOUNT_TOKEN",
api_key="YOUR_API_KEY",
)
await client.filestorage.selective_sync.configurations_update(
- sync_configurations=[
- LinkedAccountSelectiveSyncConfigurationRequest(
- linked_account_conditions=[],
- )
- ],
+ sync_configurations=[],
)
"""
_response = await self._client_wrapper.httpx_client.request(
@@ -202,9 +273,26 @@ async def configurations_update(
urllib.parse.urljoin(
f"{self._client_wrapper.get_base_url()}/", "api/filestorage/v1/selective-sync/configurations"
),
- json=jsonable_encoder({"sync_configurations": sync_configurations}),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ request_options.get("additional_query_parameters") if request_options is not None else None
+ ),
+ json=jsonable_encoder({"sync_configurations": sync_configurations})
+ if request_options is None or request_options.get("additional_body_parameters") is None
+ else {
+ **jsonable_encoder({"sync_configurations": sync_configurations}),
+ **(jsonable_encoder(remove_none_from_dict(request_options.get("additional_body_parameters", {})))),
+ },
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(typing.List[LinkedAccountSelectiveSyncConfiguration], _response.json()) # type: ignore
@@ -220,6 +308,7 @@ async def meta_list(
common_model: typing.Optional[str] = None,
cursor: typing.Optional[str] = None,
page_size: typing.Optional[int] = None,
+ request_options: typing.Optional[RequestOptions] = None,
) -> PaginatedConditionSchemaList:
"""
Get metadata for the conditions available to a linked account.
@@ -230,6 +319,8 @@ async def meta_list(
- cursor: typing.Optional[str]. The pagination cursor value.
- page_size: typing.Optional[int]. Number of results to return per page.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import AsyncMerge
@@ -242,9 +333,31 @@ async def meta_list(
_response = await self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/filestorage/v1/selective-sync/meta"),
- params=remove_none_from_dict({"common_model": common_model, "cursor": cursor, "page_size": page_size}),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "common_model": common_model,
+ "cursor": cursor,
+ "page_size": page_size,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(PaginatedConditionSchemaList, _response.json()) # type: ignore
diff --git a/src/merge/resources/filestorage/resources/sync_status/client.py b/src/merge/resources/filestorage/resources/sync_status/client.py
index 790e11a9..2e12514b 100644
--- a/src/merge/resources/filestorage/resources/sync_status/client.py
+++ b/src/merge/resources/filestorage/resources/sync_status/client.py
@@ -6,7 +6,9 @@
from .....core.api_error import ApiError
from .....core.client_wrapper import AsyncClientWrapper, SyncClientWrapper
+from .....core.jsonable_encoder import jsonable_encoder
from .....core.remove_none_from_dict import remove_none_from_dict
+from .....core.request_options import RequestOptions
from ...types.paginated_sync_status_list import PaginatedSyncStatusList
try:
@@ -20,7 +22,11 @@ def __init__(self, *, client_wrapper: SyncClientWrapper):
self._client_wrapper = client_wrapper
def list(
- self, *, cursor: typing.Optional[str] = None, page_size: typing.Optional[int] = None
+ self,
+ *,
+ cursor: typing.Optional[str] = None,
+ page_size: typing.Optional[int] = None,
+ request_options: typing.Optional[RequestOptions] = None,
) -> PaginatedSyncStatusList:
"""
Get syncing status. Possible values: `DISABLED`, `DONE`, `FAILED`, `PARTIALLY_SYNCED`, `PAUSED`, `SYNCING`. Learn more about sync status in our [Help Center](https://help.merge.dev/en/articles/8184193-merge-sync-statuses).
@@ -29,6 +35,8 @@ def list(
- cursor: typing.Optional[str]. The pagination cursor value.
- page_size: typing.Optional[int]. Number of results to return per page.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import Merge
@@ -41,9 +49,30 @@ def list(
_response = self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/filestorage/v1/sync-status"),
- params=remove_none_from_dict({"cursor": cursor, "page_size": page_size}),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "cursor": cursor,
+ "page_size": page_size,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(PaginatedSyncStatusList, _response.json()) # type: ignore
@@ -59,7 +88,11 @@ def __init__(self, *, client_wrapper: AsyncClientWrapper):
self._client_wrapper = client_wrapper
async def list(
- self, *, cursor: typing.Optional[str] = None, page_size: typing.Optional[int] = None
+ self,
+ *,
+ cursor: typing.Optional[str] = None,
+ page_size: typing.Optional[int] = None,
+ request_options: typing.Optional[RequestOptions] = None,
) -> PaginatedSyncStatusList:
"""
Get syncing status. Possible values: `DISABLED`, `DONE`, `FAILED`, `PARTIALLY_SYNCED`, `PAUSED`, `SYNCING`. Learn more about sync status in our [Help Center](https://help.merge.dev/en/articles/8184193-merge-sync-statuses).
@@ -68,6 +101,8 @@ async def list(
- cursor: typing.Optional[str]. The pagination cursor value.
- page_size: typing.Optional[int]. Number of results to return per page.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import AsyncMerge
@@ -80,9 +115,30 @@ async def list(
_response = await self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/filestorage/v1/sync-status"),
- params=remove_none_from_dict({"cursor": cursor, "page_size": page_size}),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "cursor": cursor,
+ "page_size": page_size,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(PaginatedSyncStatusList, _response.json()) # type: ignore
diff --git a/src/merge/resources/filestorage/resources/users/client.py b/src/merge/resources/filestorage/resources/users/client.py
index 323700e3..30721120 100644
--- a/src/merge/resources/filestorage/resources/users/client.py
+++ b/src/merge/resources/filestorage/resources/users/client.py
@@ -8,7 +8,9 @@
from .....core.api_error import ApiError
from .....core.client_wrapper import AsyncClientWrapper, SyncClientWrapper
from .....core.datetime_utils import serialize_datetime
+from .....core.jsonable_encoder import jsonable_encoder
from .....core.remove_none_from_dict import remove_none_from_dict
+from .....core.request_options import RequestOptions
from ...types.paginated_user_list import PaginatedUserList
from ...types.user import User
@@ -35,6 +37,7 @@ def list(
modified_before: typing.Optional[dt.datetime] = None,
page_size: typing.Optional[int] = None,
remote_id: typing.Optional[str] = None,
+ request_options: typing.Optional[RequestOptions] = None,
) -> PaginatedUserList:
"""
Returns a list of `User` objects.
@@ -59,6 +62,8 @@ def list(
- page_size: typing.Optional[int]. Number of results to return per page.
- remote_id: typing.Optional[str]. The API provider's ID for the given object.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import Merge
@@ -71,22 +76,38 @@ def list(
_response = self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/filestorage/v1/users"),
- params=remove_none_from_dict(
- {
- "created_after": serialize_datetime(created_after) if created_after is not None else None,
- "created_before": serialize_datetime(created_before) if created_before is not None else None,
- "cursor": cursor,
- "include_deleted_data": include_deleted_data,
- "include_remote_data": include_remote_data,
- "is_me": is_me,
- "modified_after": serialize_datetime(modified_after) if modified_after is not None else None,
- "modified_before": serialize_datetime(modified_before) if modified_before is not None else None,
- "page_size": page_size,
- "remote_id": remote_id,
- }
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "created_after": serialize_datetime(created_after) if created_after is not None else None,
+ "created_before": serialize_datetime(created_before) if created_before is not None else None,
+ "cursor": cursor,
+ "include_deleted_data": include_deleted_data,
+ "include_remote_data": include_remote_data,
+ "is_me": is_me,
+ "modified_after": serialize_datetime(modified_after) if modified_after is not None else None,
+ "modified_before": serialize_datetime(modified_before) if modified_before is not None else None,
+ "page_size": page_size,
+ "remote_id": remote_id,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(PaginatedUserList, _response.json()) # type: ignore
@@ -96,7 +117,13 @@ def list(
raise ApiError(status_code=_response.status_code, body=_response.text)
raise ApiError(status_code=_response.status_code, body=_response_json)
- def retrieve(self, id: str, *, include_remote_data: typing.Optional[bool] = None) -> User:
+ def retrieve(
+ self,
+ id: str,
+ *,
+ include_remote_data: typing.Optional[bool] = None,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> User:
"""
Returns a `User` object with the given `id`.
@@ -104,6 +131,8 @@ def retrieve(self, id: str, *, include_remote_data: typing.Optional[bool] = None
- id: str.
- include_remote_data: typing.Optional[bool]. Whether to include the original data Merge fetched from the third-party to produce these models.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import Merge
@@ -112,15 +141,35 @@ def retrieve(self, id: str, *, include_remote_data: typing.Optional[bool] = None
api_key="YOUR_API_KEY",
)
client.filestorage.users.retrieve(
- id="id",
+ id="string",
)
"""
_response = self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", f"api/filestorage/v1/users/{id}"),
- params=remove_none_from_dict({"include_remote_data": include_remote_data}),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "include_remote_data": include_remote_data,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(User, _response.json()) # type: ignore
@@ -148,6 +197,7 @@ async def list(
modified_before: typing.Optional[dt.datetime] = None,
page_size: typing.Optional[int] = None,
remote_id: typing.Optional[str] = None,
+ request_options: typing.Optional[RequestOptions] = None,
) -> PaginatedUserList:
"""
Returns a list of `User` objects.
@@ -172,6 +222,8 @@ async def list(
- page_size: typing.Optional[int]. Number of results to return per page.
- remote_id: typing.Optional[str]. The API provider's ID for the given object.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import AsyncMerge
@@ -184,22 +236,38 @@ async def list(
_response = await self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/filestorage/v1/users"),
- params=remove_none_from_dict(
- {
- "created_after": serialize_datetime(created_after) if created_after is not None else None,
- "created_before": serialize_datetime(created_before) if created_before is not None else None,
- "cursor": cursor,
- "include_deleted_data": include_deleted_data,
- "include_remote_data": include_remote_data,
- "is_me": is_me,
- "modified_after": serialize_datetime(modified_after) if modified_after is not None else None,
- "modified_before": serialize_datetime(modified_before) if modified_before is not None else None,
- "page_size": page_size,
- "remote_id": remote_id,
- }
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "created_after": serialize_datetime(created_after) if created_after is not None else None,
+ "created_before": serialize_datetime(created_before) if created_before is not None else None,
+ "cursor": cursor,
+ "include_deleted_data": include_deleted_data,
+ "include_remote_data": include_remote_data,
+ "is_me": is_me,
+ "modified_after": serialize_datetime(modified_after) if modified_after is not None else None,
+ "modified_before": serialize_datetime(modified_before) if modified_before is not None else None,
+ "page_size": page_size,
+ "remote_id": remote_id,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(PaginatedUserList, _response.json()) # type: ignore
@@ -209,7 +277,13 @@ async def list(
raise ApiError(status_code=_response.status_code, body=_response.text)
raise ApiError(status_code=_response.status_code, body=_response_json)
- async def retrieve(self, id: str, *, include_remote_data: typing.Optional[bool] = None) -> User:
+ async def retrieve(
+ self,
+ id: str,
+ *,
+ include_remote_data: typing.Optional[bool] = None,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> User:
"""
Returns a `User` object with the given `id`.
@@ -217,6 +291,8 @@ async def retrieve(self, id: str, *, include_remote_data: typing.Optional[bool]
- id: str.
- include_remote_data: typing.Optional[bool]. Whether to include the original data Merge fetched from the third-party to produce these models.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import AsyncMerge
@@ -225,15 +301,35 @@ async def retrieve(self, id: str, *, include_remote_data: typing.Optional[bool]
api_key="YOUR_API_KEY",
)
await client.filestorage.users.retrieve(
- id="id",
+ id="string",
)
"""
_response = await self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", f"api/filestorage/v1/users/{id}"),
- params=remove_none_from_dict({"include_remote_data": include_remote_data}),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "include_remote_data": include_remote_data,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(User, _response.json()) # type: ignore
diff --git a/src/merge/resources/filestorage/resources/webhook_receivers/client.py b/src/merge/resources/filestorage/resources/webhook_receivers/client.py
index 3d5f30b8..b3dffc44 100644
--- a/src/merge/resources/filestorage/resources/webhook_receivers/client.py
+++ b/src/merge/resources/filestorage/resources/webhook_receivers/client.py
@@ -7,6 +7,8 @@
from .....core.api_error import ApiError
from .....core.client_wrapper import AsyncClientWrapper, SyncClientWrapper
from .....core.jsonable_encoder import jsonable_encoder
+from .....core.remove_none_from_dict import remove_none_from_dict
+from .....core.request_options import RequestOptions
from ...types.webhook_receiver import WebhookReceiver
try:
@@ -22,10 +24,12 @@ class WebhookReceiversClient:
def __init__(self, *, client_wrapper: SyncClientWrapper):
self._client_wrapper = client_wrapper
- def list(self) -> typing.List[WebhookReceiver]:
+ def list(self, *, request_options: typing.Optional[RequestOptions] = None) -> typing.List[WebhookReceiver]:
"""
Returns a list of `WebhookReceiver` objects.
+ Parameters:
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import Merge
@@ -38,8 +42,20 @@ def list(self) -> typing.List[WebhookReceiver]:
_response = self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/filestorage/v1/webhook-receivers"),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ request_options.get("additional_query_parameters") if request_options is not None else None
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(typing.List[WebhookReceiver], _response.json()) # type: ignore
@@ -49,7 +65,14 @@ def list(self) -> typing.List[WebhookReceiver]:
raise ApiError(status_code=_response.status_code, body=_response.text)
raise ApiError(status_code=_response.status_code, body=_response_json)
- def create(self, *, event: str, is_active: bool, key: typing.Optional[str] = OMIT) -> WebhookReceiver:
+ def create(
+ self,
+ *,
+ event: str,
+ is_active: bool,
+ key: typing.Optional[str] = OMIT,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> WebhookReceiver:
"""
Creates a `WebhookReceiver` object with the given values.
@@ -59,6 +82,19 @@ def create(self, *, event: str, is_active: bool, key: typing.Optional[str] = OMI
- is_active: bool.
- key: typing.Optional[str].
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
+ ---
+ from merge.client import Merge
+
+ client = Merge(
+ account_token="YOUR_ACCOUNT_TOKEN",
+ api_key="YOUR_API_KEY",
+ )
+ client.filestorage.webhook_receivers.create(
+ event="string",
+ is_active=True,
+ )
"""
_request: typing.Dict[str, typing.Any] = {"event": event, "is_active": is_active}
if key is not OMIT:
@@ -66,9 +102,26 @@ def create(self, *, event: str, is_active: bool, key: typing.Optional[str] = OMI
_response = self._client_wrapper.httpx_client.request(
"POST",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/filestorage/v1/webhook-receivers"),
- json=jsonable_encoder(_request),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ request_options.get("additional_query_parameters") if request_options is not None else None
+ ),
+ json=jsonable_encoder(_request)
+ if request_options is None or request_options.get("additional_body_parameters") is None
+ else {
+ **jsonable_encoder(_request),
+ **(jsonable_encoder(remove_none_from_dict(request_options.get("additional_body_parameters", {})))),
+ },
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(WebhookReceiver, _response.json()) # type: ignore
@@ -83,10 +136,12 @@ class AsyncWebhookReceiversClient:
def __init__(self, *, client_wrapper: AsyncClientWrapper):
self._client_wrapper = client_wrapper
- async def list(self) -> typing.List[WebhookReceiver]:
+ async def list(self, *, request_options: typing.Optional[RequestOptions] = None) -> typing.List[WebhookReceiver]:
"""
Returns a list of `WebhookReceiver` objects.
+ Parameters:
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import AsyncMerge
@@ -99,8 +154,20 @@ async def list(self) -> typing.List[WebhookReceiver]:
_response = await self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/filestorage/v1/webhook-receivers"),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ request_options.get("additional_query_parameters") if request_options is not None else None
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(typing.List[WebhookReceiver], _response.json()) # type: ignore
@@ -110,7 +177,14 @@ async def list(self) -> typing.List[WebhookReceiver]:
raise ApiError(status_code=_response.status_code, body=_response.text)
raise ApiError(status_code=_response.status_code, body=_response_json)
- async def create(self, *, event: str, is_active: bool, key: typing.Optional[str] = OMIT) -> WebhookReceiver:
+ async def create(
+ self,
+ *,
+ event: str,
+ is_active: bool,
+ key: typing.Optional[str] = OMIT,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> WebhookReceiver:
"""
Creates a `WebhookReceiver` object with the given values.
@@ -120,6 +194,19 @@ async def create(self, *, event: str, is_active: bool, key: typing.Optional[str]
- is_active: bool.
- key: typing.Optional[str].
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
+ ---
+ from merge.client import AsyncMerge
+
+ client = AsyncMerge(
+ account_token="YOUR_ACCOUNT_TOKEN",
+ api_key="YOUR_API_KEY",
+ )
+ await client.filestorage.webhook_receivers.create(
+ event="string",
+ is_active=True,
+ )
"""
_request: typing.Dict[str, typing.Any] = {"event": event, "is_active": is_active}
if key is not OMIT:
@@ -127,9 +214,26 @@ async def create(self, *, event: str, is_active: bool, key: typing.Optional[str]
_response = await self._client_wrapper.httpx_client.request(
"POST",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/filestorage/v1/webhook-receivers"),
- json=jsonable_encoder(_request),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ request_options.get("additional_query_parameters") if request_options is not None else None
+ ),
+ json=jsonable_encoder(_request)
+ if request_options is None or request_options.get("additional_body_parameters") is None
+ else {
+ **jsonable_encoder(_request),
+ **(jsonable_encoder(remove_none_from_dict(request_options.get("additional_body_parameters", {})))),
+ },
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(WebhookReceiver, _response.json()) # type: ignore
diff --git a/src/merge/resources/hris/resources/account_details/client.py b/src/merge/resources/hris/resources/account_details/client.py
index 171c991b..b1b450bd 100644
--- a/src/merge/resources/hris/resources/account_details/client.py
+++ b/src/merge/resources/hris/resources/account_details/client.py
@@ -1,10 +1,14 @@
# This file was auto-generated by Fern from our API Definition.
+import typing
import urllib.parse
from json.decoder import JSONDecodeError
from .....core.api_error import ApiError
from .....core.client_wrapper import AsyncClientWrapper, SyncClientWrapper
+from .....core.jsonable_encoder import jsonable_encoder
+from .....core.remove_none_from_dict import remove_none_from_dict
+from .....core.request_options import RequestOptions
from ...types.account_details import AccountDetails
try:
@@ -17,10 +21,12 @@ class AccountDetailsClient:
def __init__(self, *, client_wrapper: SyncClientWrapper):
self._client_wrapper = client_wrapper
- def retrieve(self) -> AccountDetails:
+ def retrieve(self, *, request_options: typing.Optional[RequestOptions] = None) -> AccountDetails:
"""
Get details for a linked account.
+ Parameters:
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import Merge
@@ -33,8 +39,20 @@ def retrieve(self) -> AccountDetails:
_response = self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/hris/v1/account-details"),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ request_options.get("additional_query_parameters") if request_options is not None else None
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(AccountDetails, _response.json()) # type: ignore
@@ -49,10 +67,12 @@ class AsyncAccountDetailsClient:
def __init__(self, *, client_wrapper: AsyncClientWrapper):
self._client_wrapper = client_wrapper
- async def retrieve(self) -> AccountDetails:
+ async def retrieve(self, *, request_options: typing.Optional[RequestOptions] = None) -> AccountDetails:
"""
Get details for a linked account.
+ Parameters:
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import AsyncMerge
@@ -65,8 +85,20 @@ async def retrieve(self) -> AccountDetails:
_response = await self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/hris/v1/account-details"),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ request_options.get("additional_query_parameters") if request_options is not None else None
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(AccountDetails, _response.json()) # type: ignore
diff --git a/src/merge/resources/hris/resources/account_token/client.py b/src/merge/resources/hris/resources/account_token/client.py
index 4ede0990..43a81517 100644
--- a/src/merge/resources/hris/resources/account_token/client.py
+++ b/src/merge/resources/hris/resources/account_token/client.py
@@ -1,10 +1,14 @@
# This file was auto-generated by Fern from our API Definition.
+import typing
import urllib.parse
from json.decoder import JSONDecodeError
from .....core.api_error import ApiError
from .....core.client_wrapper import AsyncClientWrapper, SyncClientWrapper
+from .....core.jsonable_encoder import jsonable_encoder
+from .....core.remove_none_from_dict import remove_none_from_dict
+from .....core.request_options import RequestOptions
from ...types.account_token import AccountToken
try:
@@ -17,20 +21,44 @@ class AccountTokenClient:
def __init__(self, *, client_wrapper: SyncClientWrapper):
self._client_wrapper = client_wrapper
- def retrieve(self, public_token: str) -> AccountToken:
+ def retrieve(self, public_token: str, *, request_options: typing.Optional[RequestOptions] = None) -> AccountToken:
"""
Returns the account token for the end user with the provided public token.
Parameters:
- public_token: str.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
+ ---
+ from merge.client import Merge
+
+ client = Merge(
+ account_token="YOUR_ACCOUNT_TOKEN",
+ api_key="YOUR_API_KEY",
+ )
+ client.hris.account_token.retrieve(
+ public_token="string",
+ )
"""
_response = self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(
f"{self._client_wrapper.get_base_url()}/", f"api/hris/v1/account-token/{public_token}"
),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ request_options.get("additional_query_parameters") if request_options is not None else None
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(AccountToken, _response.json()) # type: ignore
@@ -45,20 +73,46 @@ class AsyncAccountTokenClient:
def __init__(self, *, client_wrapper: AsyncClientWrapper):
self._client_wrapper = client_wrapper
- async def retrieve(self, public_token: str) -> AccountToken:
+ async def retrieve(
+ self, public_token: str, *, request_options: typing.Optional[RequestOptions] = None
+ ) -> AccountToken:
"""
Returns the account token for the end user with the provided public token.
Parameters:
- public_token: str.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
+ ---
+ from merge.client import AsyncMerge
+
+ client = AsyncMerge(
+ account_token="YOUR_ACCOUNT_TOKEN",
+ api_key="YOUR_API_KEY",
+ )
+ await client.hris.account_token.retrieve(
+ public_token="string",
+ )
"""
_response = await self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(
f"{self._client_wrapper.get_base_url()}/", f"api/hris/v1/account-token/{public_token}"
),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ request_options.get("additional_query_parameters") if request_options is not None else None
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(AccountToken, _response.json()) # type: ignore
diff --git a/src/merge/resources/hris/resources/async_passthrough/client.py b/src/merge/resources/hris/resources/async_passthrough/client.py
index 750252b0..04b97ea1 100644
--- a/src/merge/resources/hris/resources/async_passthrough/client.py
+++ b/src/merge/resources/hris/resources/async_passthrough/client.py
@@ -7,6 +7,8 @@
from .....core.api_error import ApiError
from .....core.client_wrapper import AsyncClientWrapper, SyncClientWrapper
from .....core.jsonable_encoder import jsonable_encoder
+from .....core.remove_none_from_dict import remove_none_from_dict
+from .....core.request_options import RequestOptions
from ...types.async_passthrough_reciept import AsyncPassthroughReciept
from ...types.data_passthrough_request import DataPassthroughRequest
from ...types.remote_response import RemoteResponse
@@ -24,18 +26,21 @@ class AsyncPassthroughClient:
def __init__(self, *, client_wrapper: SyncClientWrapper):
self._client_wrapper = client_wrapper
- def create(self, *, request: DataPassthroughRequest) -> AsyncPassthroughReciept:
+ def create(
+ self, *, request: DataPassthroughRequest, request_options: typing.Optional[RequestOptions] = None
+ ) -> AsyncPassthroughReciept:
"""
Asynchronously pull data from an endpoint not currently supported by Merge.
Parameters:
- request: DataPassthroughRequest.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import Merge
from merge.resources.hris import (
DataPassthroughRequest,
MethodEnum,
- MultipartFormFieldRequest,
RequestFormatEnum,
)
@@ -48,14 +53,6 @@ def create(self, *, request: DataPassthroughRequest) -> AsyncPassthroughReciept:
method=MethodEnum.GET,
path="/scooters",
data='{"company": "Lime", "model": "Gen 2.5"}',
- multipart_form_data=[
- MultipartFormFieldRequest(
- name="resume",
- data="SW50ZWdyYXRlIGZhc3QKSW50ZWdyYXRlIG9uY2U=",
- file_name="resume.pdf",
- content_type="application/pdf",
- )
- ],
request_format=RequestFormatEnum.JSON,
),
)
@@ -63,9 +60,26 @@ def create(self, *, request: DataPassthroughRequest) -> AsyncPassthroughReciept:
_response = self._client_wrapper.httpx_client.request(
"POST",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/hris/v1/async-passthrough"),
- json=jsonable_encoder(request),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ request_options.get("additional_query_parameters") if request_options is not None else None
+ ),
+ json=jsonable_encoder(request)
+ if request_options is None or request_options.get("additional_body_parameters") is None
+ else {
+ **jsonable_encoder(request),
+ **(jsonable_encoder(remove_none_from_dict(request_options.get("additional_body_parameters", {})))),
+ },
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(AsyncPassthroughReciept, _response.json()) # type: ignore
@@ -75,12 +89,26 @@ def create(self, *, request: DataPassthroughRequest) -> AsyncPassthroughReciept:
raise ApiError(status_code=_response.status_code, body=_response.text)
raise ApiError(status_code=_response.status_code, body=_response_json)
- def retrieve(self, async_passthrough_receipt_id: str) -> RemoteResponse:
+ def retrieve(
+ self, async_passthrough_receipt_id: str, *, request_options: typing.Optional[RequestOptions] = None
+ ) -> RemoteResponse:
"""
Retrieves data from earlier async-passthrough POST request
Parameters:
- async_passthrough_receipt_id: str.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
+ ---
+ from merge.client import Merge
+
+ client = Merge(
+ account_token="YOUR_ACCOUNT_TOKEN",
+ api_key="YOUR_API_KEY",
+ )
+ client.hris.async_passthrough.retrieve(
+ async_passthrough_receipt_id="string",
+ )
"""
_response = self._client_wrapper.httpx_client.request(
"GET",
@@ -88,8 +116,20 @@ def retrieve(self, async_passthrough_receipt_id: str) -> RemoteResponse:
f"{self._client_wrapper.get_base_url()}/",
f"api/hris/v1/async-passthrough/{async_passthrough_receipt_id}",
),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ request_options.get("additional_query_parameters") if request_options is not None else None
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(RemoteResponse, _response.json()) # type: ignore
@@ -104,18 +144,21 @@ class AsyncAsyncPassthroughClient:
def __init__(self, *, client_wrapper: AsyncClientWrapper):
self._client_wrapper = client_wrapper
- async def create(self, *, request: DataPassthroughRequest) -> AsyncPassthroughReciept:
+ async def create(
+ self, *, request: DataPassthroughRequest, request_options: typing.Optional[RequestOptions] = None
+ ) -> AsyncPassthroughReciept:
"""
Asynchronously pull data from an endpoint not currently supported by Merge.
Parameters:
- request: DataPassthroughRequest.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import AsyncMerge
from merge.resources.hris import (
DataPassthroughRequest,
MethodEnum,
- MultipartFormFieldRequest,
RequestFormatEnum,
)
@@ -128,14 +171,6 @@ async def create(self, *, request: DataPassthroughRequest) -> AsyncPassthroughRe
method=MethodEnum.GET,
path="/scooters",
data='{"company": "Lime", "model": "Gen 2.5"}',
- multipart_form_data=[
- MultipartFormFieldRequest(
- name="resume",
- data="SW50ZWdyYXRlIGZhc3QKSW50ZWdyYXRlIG9uY2U=",
- file_name="resume.pdf",
- content_type="application/pdf",
- )
- ],
request_format=RequestFormatEnum.JSON,
),
)
@@ -143,9 +178,26 @@ async def create(self, *, request: DataPassthroughRequest) -> AsyncPassthroughRe
_response = await self._client_wrapper.httpx_client.request(
"POST",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/hris/v1/async-passthrough"),
- json=jsonable_encoder(request),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ request_options.get("additional_query_parameters") if request_options is not None else None
+ ),
+ json=jsonable_encoder(request)
+ if request_options is None or request_options.get("additional_body_parameters") is None
+ else {
+ **jsonable_encoder(request),
+ **(jsonable_encoder(remove_none_from_dict(request_options.get("additional_body_parameters", {})))),
+ },
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(AsyncPassthroughReciept, _response.json()) # type: ignore
@@ -155,12 +207,26 @@ async def create(self, *, request: DataPassthroughRequest) -> AsyncPassthroughRe
raise ApiError(status_code=_response.status_code, body=_response.text)
raise ApiError(status_code=_response.status_code, body=_response_json)
- async def retrieve(self, async_passthrough_receipt_id: str) -> RemoteResponse:
+ async def retrieve(
+ self, async_passthrough_receipt_id: str, *, request_options: typing.Optional[RequestOptions] = None
+ ) -> RemoteResponse:
"""
Retrieves data from earlier async-passthrough POST request
Parameters:
- async_passthrough_receipt_id: str.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
+ ---
+ from merge.client import AsyncMerge
+
+ client = AsyncMerge(
+ account_token="YOUR_ACCOUNT_TOKEN",
+ api_key="YOUR_API_KEY",
+ )
+ await client.hris.async_passthrough.retrieve(
+ async_passthrough_receipt_id="string",
+ )
"""
_response = await self._client_wrapper.httpx_client.request(
"GET",
@@ -168,8 +234,20 @@ async def retrieve(self, async_passthrough_receipt_id: str) -> RemoteResponse:
f"{self._client_wrapper.get_base_url()}/",
f"api/hris/v1/async-passthrough/{async_passthrough_receipt_id}",
),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ request_options.get("additional_query_parameters") if request_options is not None else None
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(RemoteResponse, _response.json()) # type: ignore
diff --git a/src/merge/resources/hris/resources/audit_trail/client.py b/src/merge/resources/hris/resources/audit_trail/client.py
index 7dd54630..2e411aec 100644
--- a/src/merge/resources/hris/resources/audit_trail/client.py
+++ b/src/merge/resources/hris/resources/audit_trail/client.py
@@ -6,7 +6,9 @@
from .....core.api_error import ApiError
from .....core.client_wrapper import AsyncClientWrapper, SyncClientWrapper
+from .....core.jsonable_encoder import jsonable_encoder
from .....core.remove_none_from_dict import remove_none_from_dict
+from .....core.request_options import RequestOptions
from ...types.paginated_audit_log_event_list import PaginatedAuditLogEventList
try:
@@ -28,6 +30,7 @@ def list(
page_size: typing.Optional[int] = None,
start_date: typing.Optional[str] = None,
user_email: typing.Optional[str] = None,
+ request_options: typing.Optional[RequestOptions] = None,
) -> PaginatedAuditLogEventList:
"""
Gets a list of audit trail events.
@@ -44,6 +47,8 @@ def list(
- start_date: typing.Optional[str]. If included, will only include audit trail events that occurred after this time
- user_email: typing.Optional[str]. If provided, this will return events associated with the specified user email. Please note that the email address reflects the user's email at the time of the event, and may not be their current email.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import Merge
@@ -56,18 +61,34 @@ def list(
_response = self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/hris/v1/audit-trail"),
- params=remove_none_from_dict(
- {
- "cursor": cursor,
- "end_date": end_date,
- "event_type": event_type,
- "page_size": page_size,
- "start_date": start_date,
- "user_email": user_email,
- }
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "cursor": cursor,
+ "end_date": end_date,
+ "event_type": event_type,
+ "page_size": page_size,
+ "start_date": start_date,
+ "user_email": user_email,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(PaginatedAuditLogEventList, _response.json()) # type: ignore
@@ -91,6 +112,7 @@ async def list(
page_size: typing.Optional[int] = None,
start_date: typing.Optional[str] = None,
user_email: typing.Optional[str] = None,
+ request_options: typing.Optional[RequestOptions] = None,
) -> PaginatedAuditLogEventList:
"""
Gets a list of audit trail events.
@@ -107,6 +129,8 @@ async def list(
- start_date: typing.Optional[str]. If included, will only include audit trail events that occurred after this time
- user_email: typing.Optional[str]. If provided, this will return events associated with the specified user email. Please note that the email address reflects the user's email at the time of the event, and may not be their current email.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import AsyncMerge
@@ -119,18 +143,34 @@ async def list(
_response = await self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/hris/v1/audit-trail"),
- params=remove_none_from_dict(
- {
- "cursor": cursor,
- "end_date": end_date,
- "event_type": event_type,
- "page_size": page_size,
- "start_date": start_date,
- "user_email": user_email,
- }
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "cursor": cursor,
+ "end_date": end_date,
+ "event_type": event_type,
+ "page_size": page_size,
+ "start_date": start_date,
+ "user_email": user_email,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(PaginatedAuditLogEventList, _response.json()) # type: ignore
diff --git a/src/merge/resources/hris/resources/available_actions/client.py b/src/merge/resources/hris/resources/available_actions/client.py
index 2aa8022b..609faa4c 100644
--- a/src/merge/resources/hris/resources/available_actions/client.py
+++ b/src/merge/resources/hris/resources/available_actions/client.py
@@ -1,10 +1,14 @@
# This file was auto-generated by Fern from our API Definition.
+import typing
import urllib.parse
from json.decoder import JSONDecodeError
from .....core.api_error import ApiError
from .....core.client_wrapper import AsyncClientWrapper, SyncClientWrapper
+from .....core.jsonable_encoder import jsonable_encoder
+from .....core.remove_none_from_dict import remove_none_from_dict
+from .....core.request_options import RequestOptions
from ...types.available_actions import AvailableActions
try:
@@ -17,15 +21,38 @@ class AvailableActionsClient:
def __init__(self, *, client_wrapper: SyncClientWrapper):
self._client_wrapper = client_wrapper
- def retrieve(self) -> AvailableActions:
+ def retrieve(self, *, request_options: typing.Optional[RequestOptions] = None) -> AvailableActions:
"""
Returns a list of models and actions available for an account.
+
+ Parameters:
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
+ ---
+ from merge.client import Merge
+
+ client = Merge(
+ account_token="YOUR_ACCOUNT_TOKEN",
+ api_key="YOUR_API_KEY",
+ )
+ client.hris.available_actions.retrieve()
"""
_response = self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/hris/v1/available-actions"),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ request_options.get("additional_query_parameters") if request_options is not None else None
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(AvailableActions, _response.json()) # type: ignore
@@ -40,15 +67,38 @@ class AsyncAvailableActionsClient:
def __init__(self, *, client_wrapper: AsyncClientWrapper):
self._client_wrapper = client_wrapper
- async def retrieve(self) -> AvailableActions:
+ async def retrieve(self, *, request_options: typing.Optional[RequestOptions] = None) -> AvailableActions:
"""
Returns a list of models and actions available for an account.
+
+ Parameters:
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
+ ---
+ from merge.client import AsyncMerge
+
+ client = AsyncMerge(
+ account_token="YOUR_ACCOUNT_TOKEN",
+ api_key="YOUR_API_KEY",
+ )
+ await client.hris.available_actions.retrieve()
"""
_response = await self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/hris/v1/available-actions"),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ request_options.get("additional_query_parameters") if request_options is not None else None
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(AvailableActions, _response.json()) # type: ignore
diff --git a/src/merge/resources/hris/resources/bank_info/client.py b/src/merge/resources/hris/resources/bank_info/client.py
index 040546e2..1e4f1e80 100644
--- a/src/merge/resources/hris/resources/bank_info/client.py
+++ b/src/merge/resources/hris/resources/bank_info/client.py
@@ -5,12 +5,12 @@
import urllib.parse
from json.decoder import JSONDecodeError
-import typing_extensions
-
from .....core.api_error import ApiError
from .....core.client_wrapper import AsyncClientWrapper, SyncClientWrapper
from .....core.datetime_utils import serialize_datetime
+from .....core.jsonable_encoder import jsonable_encoder
from .....core.remove_none_from_dict import remove_none_from_dict
+from .....core.request_options import RequestOptions
from ...types.bank_info import BankInfo
from ...types.paginated_bank_info_list import PaginatedBankInfoList
from .types.bank_info_list_request_account_type import BankInfoListRequestAccountType
@@ -35,16 +35,17 @@ def list(
created_before: typing.Optional[dt.datetime] = None,
cursor: typing.Optional[str] = None,
employee_id: typing.Optional[str] = None,
- expand: typing.Optional[typing_extensions.Literal["employee"]] = None,
+ expand: typing.Optional[typing.Literal["employee"]] = None,
include_deleted_data: typing.Optional[bool] = None,
include_remote_data: typing.Optional[bool] = None,
modified_after: typing.Optional[dt.datetime] = None,
modified_before: typing.Optional[dt.datetime] = None,
order_by: typing.Optional[BankInfoListRequestOrderBy] = None,
page_size: typing.Optional[int] = None,
- remote_fields: typing.Optional[typing_extensions.Literal["account_type"]] = None,
+ remote_fields: typing.Optional[typing.Literal["account_type"]] = None,
remote_id: typing.Optional[str] = None,
- show_enum_origins: typing.Optional[typing_extensions.Literal["account_type"]] = None,
+ show_enum_origins: typing.Optional[typing.Literal["account_type"]] = None,
+ request_options: typing.Optional[RequestOptions] = None,
) -> PaginatedBankInfoList:
"""
Returns a list of `BankInfo` objects.
@@ -64,7 +65,7 @@ def list(
- employee_id: typing.Optional[str]. If provided, will only return bank accounts for this employee.
- - expand: typing.Optional[typing_extensions.Literal["employee"]]. Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces.
+ - expand: typing.Optional[typing.Literal["employee"]]. Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces.
- include_deleted_data: typing.Optional[bool]. Whether to include data that was marked as deleted by third party webhooks.
@@ -78,11 +79,13 @@ def list(
- page_size: typing.Optional[int]. Number of results to return per page.
- - remote_fields: typing.Optional[typing_extensions.Literal["account_type"]]. Deprecated. Use show_enum_origins.
+ - remote_fields: typing.Optional[typing.Literal["account_type"]]. Deprecated. Use show_enum_origins.
- remote_id: typing.Optional[str]. The API provider's ID for the given object.
- - show_enum_origins: typing.Optional[typing_extensions.Literal["account_type"]]. Which fields should be returned in non-normalized form.
+ - show_enum_origins: typing.Optional[typing.Literal["account_type"]]. Which fields should be returned in non-normalized form.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import Merge
from merge.resources.hris import (
@@ -105,28 +108,44 @@ def list(
_response = self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/hris/v1/bank-info"),
- params=remove_none_from_dict(
- {
- "account_type": account_type,
- "bank_name": bank_name,
- "created_after": serialize_datetime(created_after) if created_after is not None else None,
- "created_before": serialize_datetime(created_before) if created_before is not None else None,
- "cursor": cursor,
- "employee_id": employee_id,
- "expand": expand,
- "include_deleted_data": include_deleted_data,
- "include_remote_data": include_remote_data,
- "modified_after": serialize_datetime(modified_after) if modified_after is not None else None,
- "modified_before": serialize_datetime(modified_before) if modified_before is not None else None,
- "order_by": order_by,
- "page_size": page_size,
- "remote_fields": remote_fields,
- "remote_id": remote_id,
- "show_enum_origins": show_enum_origins,
- }
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "account_type": account_type,
+ "bank_name": bank_name,
+ "created_after": serialize_datetime(created_after) if created_after is not None else None,
+ "created_before": serialize_datetime(created_before) if created_before is not None else None,
+ "cursor": cursor,
+ "employee_id": employee_id,
+ "expand": expand,
+ "include_deleted_data": include_deleted_data,
+ "include_remote_data": include_remote_data,
+ "modified_after": serialize_datetime(modified_after) if modified_after is not None else None,
+ "modified_before": serialize_datetime(modified_before) if modified_before is not None else None,
+ "order_by": order_by,
+ "page_size": page_size,
+ "remote_fields": remote_fields,
+ "remote_id": remote_id,
+ "show_enum_origins": show_enum_origins,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(PaginatedBankInfoList, _response.json()) # type: ignore
@@ -140,10 +159,11 @@ def retrieve(
self,
id: str,
*,
- expand: typing.Optional[typing_extensions.Literal["employee"]] = None,
+ expand: typing.Optional[typing.Literal["employee"]] = None,
include_remote_data: typing.Optional[bool] = None,
- remote_fields: typing.Optional[typing_extensions.Literal["account_type"]] = None,
- show_enum_origins: typing.Optional[typing_extensions.Literal["account_type"]] = None,
+ remote_fields: typing.Optional[typing.Literal["account_type"]] = None,
+ show_enum_origins: typing.Optional[typing.Literal["account_type"]] = None,
+ request_options: typing.Optional[RequestOptions] = None,
) -> BankInfo:
"""
Returns a `BankInfo` object with the given `id`.
@@ -151,13 +171,15 @@ def retrieve(
Parameters:
- id: str.
- - expand: typing.Optional[typing_extensions.Literal["employee"]]. Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces.
+ - expand: typing.Optional[typing.Literal["employee"]]. Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces.
- include_remote_data: typing.Optional[bool]. Whether to include the original data Merge fetched from the third-party to produce these models.
- - remote_fields: typing.Optional[typing_extensions.Literal["account_type"]]. Deprecated. Use show_enum_origins.
+ - remote_fields: typing.Optional[typing.Literal["account_type"]]. Deprecated. Use show_enum_origins.
- - show_enum_origins: typing.Optional[typing_extensions.Literal["account_type"]]. Which fields should be returned in non-normalized form.
+ - show_enum_origins: typing.Optional[typing.Literal["account_type"]]. Which fields should be returned in non-normalized form.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import Merge
@@ -166,7 +188,7 @@ def retrieve(
api_key="YOUR_API_KEY",
)
client.hris.bank_info.retrieve(
- id="id",
+ id="string",
expand="employee",
remote_fields="account_type",
show_enum_origins="account_type",
@@ -175,16 +197,32 @@ def retrieve(
_response = self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", f"api/hris/v1/bank-info/{id}"),
- params=remove_none_from_dict(
- {
- "expand": expand,
- "include_remote_data": include_remote_data,
- "remote_fields": remote_fields,
- "show_enum_origins": show_enum_origins,
- }
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "expand": expand,
+ "include_remote_data": include_remote_data,
+ "remote_fields": remote_fields,
+ "show_enum_origins": show_enum_origins,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(BankInfo, _response.json()) # type: ignore
@@ -208,16 +246,17 @@ async def list(
created_before: typing.Optional[dt.datetime] = None,
cursor: typing.Optional[str] = None,
employee_id: typing.Optional[str] = None,
- expand: typing.Optional[typing_extensions.Literal["employee"]] = None,
+ expand: typing.Optional[typing.Literal["employee"]] = None,
include_deleted_data: typing.Optional[bool] = None,
include_remote_data: typing.Optional[bool] = None,
modified_after: typing.Optional[dt.datetime] = None,
modified_before: typing.Optional[dt.datetime] = None,
order_by: typing.Optional[BankInfoListRequestOrderBy] = None,
page_size: typing.Optional[int] = None,
- remote_fields: typing.Optional[typing_extensions.Literal["account_type"]] = None,
+ remote_fields: typing.Optional[typing.Literal["account_type"]] = None,
remote_id: typing.Optional[str] = None,
- show_enum_origins: typing.Optional[typing_extensions.Literal["account_type"]] = None,
+ show_enum_origins: typing.Optional[typing.Literal["account_type"]] = None,
+ request_options: typing.Optional[RequestOptions] = None,
) -> PaginatedBankInfoList:
"""
Returns a list of `BankInfo` objects.
@@ -237,7 +276,7 @@ async def list(
- employee_id: typing.Optional[str]. If provided, will only return bank accounts for this employee.
- - expand: typing.Optional[typing_extensions.Literal["employee"]]. Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces.
+ - expand: typing.Optional[typing.Literal["employee"]]. Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces.
- include_deleted_data: typing.Optional[bool]. Whether to include data that was marked as deleted by third party webhooks.
@@ -251,11 +290,13 @@ async def list(
- page_size: typing.Optional[int]. Number of results to return per page.
- - remote_fields: typing.Optional[typing_extensions.Literal["account_type"]]. Deprecated. Use show_enum_origins.
+ - remote_fields: typing.Optional[typing.Literal["account_type"]]. Deprecated. Use show_enum_origins.
- remote_id: typing.Optional[str]. The API provider's ID for the given object.
- - show_enum_origins: typing.Optional[typing_extensions.Literal["account_type"]]. Which fields should be returned in non-normalized form.
+ - show_enum_origins: typing.Optional[typing.Literal["account_type"]]. Which fields should be returned in non-normalized form.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import AsyncMerge
from merge.resources.hris import (
@@ -278,28 +319,44 @@ async def list(
_response = await self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/hris/v1/bank-info"),
- params=remove_none_from_dict(
- {
- "account_type": account_type,
- "bank_name": bank_name,
- "created_after": serialize_datetime(created_after) if created_after is not None else None,
- "created_before": serialize_datetime(created_before) if created_before is not None else None,
- "cursor": cursor,
- "employee_id": employee_id,
- "expand": expand,
- "include_deleted_data": include_deleted_data,
- "include_remote_data": include_remote_data,
- "modified_after": serialize_datetime(modified_after) if modified_after is not None else None,
- "modified_before": serialize_datetime(modified_before) if modified_before is not None else None,
- "order_by": order_by,
- "page_size": page_size,
- "remote_fields": remote_fields,
- "remote_id": remote_id,
- "show_enum_origins": show_enum_origins,
- }
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "account_type": account_type,
+ "bank_name": bank_name,
+ "created_after": serialize_datetime(created_after) if created_after is not None else None,
+ "created_before": serialize_datetime(created_before) if created_before is not None else None,
+ "cursor": cursor,
+ "employee_id": employee_id,
+ "expand": expand,
+ "include_deleted_data": include_deleted_data,
+ "include_remote_data": include_remote_data,
+ "modified_after": serialize_datetime(modified_after) if modified_after is not None else None,
+ "modified_before": serialize_datetime(modified_before) if modified_before is not None else None,
+ "order_by": order_by,
+ "page_size": page_size,
+ "remote_fields": remote_fields,
+ "remote_id": remote_id,
+ "show_enum_origins": show_enum_origins,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(PaginatedBankInfoList, _response.json()) # type: ignore
@@ -313,10 +370,11 @@ async def retrieve(
self,
id: str,
*,
- expand: typing.Optional[typing_extensions.Literal["employee"]] = None,
+ expand: typing.Optional[typing.Literal["employee"]] = None,
include_remote_data: typing.Optional[bool] = None,
- remote_fields: typing.Optional[typing_extensions.Literal["account_type"]] = None,
- show_enum_origins: typing.Optional[typing_extensions.Literal["account_type"]] = None,
+ remote_fields: typing.Optional[typing.Literal["account_type"]] = None,
+ show_enum_origins: typing.Optional[typing.Literal["account_type"]] = None,
+ request_options: typing.Optional[RequestOptions] = None,
) -> BankInfo:
"""
Returns a `BankInfo` object with the given `id`.
@@ -324,13 +382,15 @@ async def retrieve(
Parameters:
- id: str.
- - expand: typing.Optional[typing_extensions.Literal["employee"]]. Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces.
+ - expand: typing.Optional[typing.Literal["employee"]]. Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces.
- include_remote_data: typing.Optional[bool]. Whether to include the original data Merge fetched from the third-party to produce these models.
- - remote_fields: typing.Optional[typing_extensions.Literal["account_type"]]. Deprecated. Use show_enum_origins.
+ - remote_fields: typing.Optional[typing.Literal["account_type"]]. Deprecated. Use show_enum_origins.
- - show_enum_origins: typing.Optional[typing_extensions.Literal["account_type"]]. Which fields should be returned in non-normalized form.
+ - show_enum_origins: typing.Optional[typing.Literal["account_type"]]. Which fields should be returned in non-normalized form.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import AsyncMerge
@@ -339,7 +399,7 @@ async def retrieve(
api_key="YOUR_API_KEY",
)
await client.hris.bank_info.retrieve(
- id="id",
+ id="string",
expand="employee",
remote_fields="account_type",
show_enum_origins="account_type",
@@ -348,16 +408,32 @@ async def retrieve(
_response = await self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", f"api/hris/v1/bank-info/{id}"),
- params=remove_none_from_dict(
- {
- "expand": expand,
- "include_remote_data": include_remote_data,
- "remote_fields": remote_fields,
- "show_enum_origins": show_enum_origins,
- }
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "expand": expand,
+ "include_remote_data": include_remote_data,
+ "remote_fields": remote_fields,
+ "show_enum_origins": show_enum_origins,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(BankInfo, _response.json()) # type: ignore
diff --git a/src/merge/resources/hris/resources/benefits/client.py b/src/merge/resources/hris/resources/benefits/client.py
index 29e54f2a..149d1de9 100644
--- a/src/merge/resources/hris/resources/benefits/client.py
+++ b/src/merge/resources/hris/resources/benefits/client.py
@@ -5,12 +5,12 @@
import urllib.parse
from json.decoder import JSONDecodeError
-import typing_extensions
-
from .....core.api_error import ApiError
from .....core.client_wrapper import AsyncClientWrapper, SyncClientWrapper
from .....core.datetime_utils import serialize_datetime
+from .....core.jsonable_encoder import jsonable_encoder
from .....core.remove_none_from_dict import remove_none_from_dict
+from .....core.request_options import RequestOptions
from ...types.benefit import Benefit
from ...types.paginated_benefit_list import PaginatedBenefitList
@@ -31,13 +31,14 @@ def list(
created_before: typing.Optional[dt.datetime] = None,
cursor: typing.Optional[str] = None,
employee_id: typing.Optional[str] = None,
- expand: typing.Optional[typing_extensions.Literal["employee"]] = None,
+ expand: typing.Optional[typing.Literal["employee"]] = None,
include_deleted_data: typing.Optional[bool] = None,
include_remote_data: typing.Optional[bool] = None,
modified_after: typing.Optional[dt.datetime] = None,
modified_before: typing.Optional[dt.datetime] = None,
page_size: typing.Optional[int] = None,
remote_id: typing.Optional[str] = None,
+ request_options: typing.Optional[RequestOptions] = None,
) -> PaginatedBenefitList:
"""
Returns a list of `Benefit` objects.
@@ -51,7 +52,7 @@ def list(
- employee_id: typing.Optional[str]. If provided, will return the benefits associated with the employee.
- - expand: typing.Optional[typing_extensions.Literal["employee"]]. Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces.
+ - expand: typing.Optional[typing.Literal["employee"]]. Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces.
- include_deleted_data: typing.Optional[bool]. Whether to include data that was marked as deleted by third party webhooks.
@@ -64,6 +65,8 @@ def list(
- page_size: typing.Optional[int]. Number of results to return per page.
- remote_id: typing.Optional[str]. The API provider's ID for the given object.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import Merge
@@ -78,23 +81,39 @@ def list(
_response = self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/hris/v1/benefits"),
- params=remove_none_from_dict(
- {
- "created_after": serialize_datetime(created_after) if created_after is not None else None,
- "created_before": serialize_datetime(created_before) if created_before is not None else None,
- "cursor": cursor,
- "employee_id": employee_id,
- "expand": expand,
- "include_deleted_data": include_deleted_data,
- "include_remote_data": include_remote_data,
- "modified_after": serialize_datetime(modified_after) if modified_after is not None else None,
- "modified_before": serialize_datetime(modified_before) if modified_before is not None else None,
- "page_size": page_size,
- "remote_id": remote_id,
- }
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "created_after": serialize_datetime(created_after) if created_after is not None else None,
+ "created_before": serialize_datetime(created_before) if created_before is not None else None,
+ "cursor": cursor,
+ "employee_id": employee_id,
+ "expand": expand,
+ "include_deleted_data": include_deleted_data,
+ "include_remote_data": include_remote_data,
+ "modified_after": serialize_datetime(modified_after) if modified_after is not None else None,
+ "modified_before": serialize_datetime(modified_before) if modified_before is not None else None,
+ "page_size": page_size,
+ "remote_id": remote_id,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(PaginatedBenefitList, _response.json()) # type: ignore
@@ -108,8 +127,9 @@ def retrieve(
self,
id: str,
*,
- expand: typing.Optional[typing_extensions.Literal["employee"]] = None,
+ expand: typing.Optional[typing.Literal["employee"]] = None,
include_remote_data: typing.Optional[bool] = None,
+ request_options: typing.Optional[RequestOptions] = None,
) -> Benefit:
"""
Returns a `Benefit` object with the given `id`.
@@ -117,9 +137,11 @@ def retrieve(
Parameters:
- id: str.
- - expand: typing.Optional[typing_extensions.Literal["employee"]]. Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces.
+ - expand: typing.Optional[typing.Literal["employee"]]. Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces.
- include_remote_data: typing.Optional[bool]. Whether to include the original data Merge fetched from the third-party to produce these models.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import Merge
@@ -128,16 +150,37 @@ def retrieve(
api_key="YOUR_API_KEY",
)
client.hris.benefits.retrieve(
- id="id",
+ id="string",
expand="employee",
)
"""
_response = self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", f"api/hris/v1/benefits/{id}"),
- params=remove_none_from_dict({"expand": expand, "include_remote_data": include_remote_data}),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "expand": expand,
+ "include_remote_data": include_remote_data,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(Benefit, _response.json()) # type: ignore
@@ -159,13 +202,14 @@ async def list(
created_before: typing.Optional[dt.datetime] = None,
cursor: typing.Optional[str] = None,
employee_id: typing.Optional[str] = None,
- expand: typing.Optional[typing_extensions.Literal["employee"]] = None,
+ expand: typing.Optional[typing.Literal["employee"]] = None,
include_deleted_data: typing.Optional[bool] = None,
include_remote_data: typing.Optional[bool] = None,
modified_after: typing.Optional[dt.datetime] = None,
modified_before: typing.Optional[dt.datetime] = None,
page_size: typing.Optional[int] = None,
remote_id: typing.Optional[str] = None,
+ request_options: typing.Optional[RequestOptions] = None,
) -> PaginatedBenefitList:
"""
Returns a list of `Benefit` objects.
@@ -179,7 +223,7 @@ async def list(
- employee_id: typing.Optional[str]. If provided, will return the benefits associated with the employee.
- - expand: typing.Optional[typing_extensions.Literal["employee"]]. Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces.
+ - expand: typing.Optional[typing.Literal["employee"]]. Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces.
- include_deleted_data: typing.Optional[bool]. Whether to include data that was marked as deleted by third party webhooks.
@@ -192,6 +236,8 @@ async def list(
- page_size: typing.Optional[int]. Number of results to return per page.
- remote_id: typing.Optional[str]. The API provider's ID for the given object.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import AsyncMerge
@@ -206,23 +252,39 @@ async def list(
_response = await self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/hris/v1/benefits"),
- params=remove_none_from_dict(
- {
- "created_after": serialize_datetime(created_after) if created_after is not None else None,
- "created_before": serialize_datetime(created_before) if created_before is not None else None,
- "cursor": cursor,
- "employee_id": employee_id,
- "expand": expand,
- "include_deleted_data": include_deleted_data,
- "include_remote_data": include_remote_data,
- "modified_after": serialize_datetime(modified_after) if modified_after is not None else None,
- "modified_before": serialize_datetime(modified_before) if modified_before is not None else None,
- "page_size": page_size,
- "remote_id": remote_id,
- }
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "created_after": serialize_datetime(created_after) if created_after is not None else None,
+ "created_before": serialize_datetime(created_before) if created_before is not None else None,
+ "cursor": cursor,
+ "employee_id": employee_id,
+ "expand": expand,
+ "include_deleted_data": include_deleted_data,
+ "include_remote_data": include_remote_data,
+ "modified_after": serialize_datetime(modified_after) if modified_after is not None else None,
+ "modified_before": serialize_datetime(modified_before) if modified_before is not None else None,
+ "page_size": page_size,
+ "remote_id": remote_id,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(PaginatedBenefitList, _response.json()) # type: ignore
@@ -236,8 +298,9 @@ async def retrieve(
self,
id: str,
*,
- expand: typing.Optional[typing_extensions.Literal["employee"]] = None,
+ expand: typing.Optional[typing.Literal["employee"]] = None,
include_remote_data: typing.Optional[bool] = None,
+ request_options: typing.Optional[RequestOptions] = None,
) -> Benefit:
"""
Returns a `Benefit` object with the given `id`.
@@ -245,9 +308,11 @@ async def retrieve(
Parameters:
- id: str.
- - expand: typing.Optional[typing_extensions.Literal["employee"]]. Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces.
+ - expand: typing.Optional[typing.Literal["employee"]]. Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces.
- include_remote_data: typing.Optional[bool]. Whether to include the original data Merge fetched from the third-party to produce these models.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import AsyncMerge
@@ -256,16 +321,37 @@ async def retrieve(
api_key="YOUR_API_KEY",
)
await client.hris.benefits.retrieve(
- id="id",
+ id="string",
expand="employee",
)
"""
_response = await self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", f"api/hris/v1/benefits/{id}"),
- params=remove_none_from_dict({"expand": expand, "include_remote_data": include_remote_data}),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "expand": expand,
+ "include_remote_data": include_remote_data,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(Benefit, _response.json()) # type: ignore
diff --git a/src/merge/resources/hris/resources/companies/client.py b/src/merge/resources/hris/resources/companies/client.py
index 52a66080..30e64c33 100644
--- a/src/merge/resources/hris/resources/companies/client.py
+++ b/src/merge/resources/hris/resources/companies/client.py
@@ -8,7 +8,9 @@
from .....core.api_error import ApiError
from .....core.client_wrapper import AsyncClientWrapper, SyncClientWrapper
from .....core.datetime_utils import serialize_datetime
+from .....core.jsonable_encoder import jsonable_encoder
from .....core.remove_none_from_dict import remove_none_from_dict
+from .....core.request_options import RequestOptions
from ...types.company import Company
from ...types.paginated_company_list import PaginatedCompanyList
@@ -34,6 +36,7 @@ def list(
modified_before: typing.Optional[dt.datetime] = None,
page_size: typing.Optional[int] = None,
remote_id: typing.Optional[str] = None,
+ request_options: typing.Optional[RequestOptions] = None,
) -> PaginatedCompanyList:
"""
Returns a list of `Company` objects.
@@ -56,6 +59,8 @@ def list(
- page_size: typing.Optional[int]. Number of results to return per page.
- remote_id: typing.Optional[str]. The API provider's ID for the given object.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import Merge
@@ -68,21 +73,37 @@ def list(
_response = self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/hris/v1/companies"),
- params=remove_none_from_dict(
- {
- "created_after": serialize_datetime(created_after) if created_after is not None else None,
- "created_before": serialize_datetime(created_before) if created_before is not None else None,
- "cursor": cursor,
- "include_deleted_data": include_deleted_data,
- "include_remote_data": include_remote_data,
- "modified_after": serialize_datetime(modified_after) if modified_after is not None else None,
- "modified_before": serialize_datetime(modified_before) if modified_before is not None else None,
- "page_size": page_size,
- "remote_id": remote_id,
- }
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "created_after": serialize_datetime(created_after) if created_after is not None else None,
+ "created_before": serialize_datetime(created_before) if created_before is not None else None,
+ "cursor": cursor,
+ "include_deleted_data": include_deleted_data,
+ "include_remote_data": include_remote_data,
+ "modified_after": serialize_datetime(modified_after) if modified_after is not None else None,
+ "modified_before": serialize_datetime(modified_before) if modified_before is not None else None,
+ "page_size": page_size,
+ "remote_id": remote_id,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(PaginatedCompanyList, _response.json()) # type: ignore
@@ -92,7 +113,13 @@ def list(
raise ApiError(status_code=_response.status_code, body=_response.text)
raise ApiError(status_code=_response.status_code, body=_response_json)
- def retrieve(self, id: str, *, include_remote_data: typing.Optional[bool] = None) -> Company:
+ def retrieve(
+ self,
+ id: str,
+ *,
+ include_remote_data: typing.Optional[bool] = None,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> Company:
"""
Returns a `Company` object with the given `id`.
@@ -100,6 +127,8 @@ def retrieve(self, id: str, *, include_remote_data: typing.Optional[bool] = None
- id: str.
- include_remote_data: typing.Optional[bool]. Whether to include the original data Merge fetched from the third-party to produce these models.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import Merge
@@ -108,15 +137,35 @@ def retrieve(self, id: str, *, include_remote_data: typing.Optional[bool] = None
api_key="YOUR_API_KEY",
)
client.hris.companies.retrieve(
- id="id",
+ id="string",
)
"""
_response = self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", f"api/hris/v1/companies/{id}"),
- params=remove_none_from_dict({"include_remote_data": include_remote_data}),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "include_remote_data": include_remote_data,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(Company, _response.json()) # type: ignore
@@ -143,6 +192,7 @@ async def list(
modified_before: typing.Optional[dt.datetime] = None,
page_size: typing.Optional[int] = None,
remote_id: typing.Optional[str] = None,
+ request_options: typing.Optional[RequestOptions] = None,
) -> PaginatedCompanyList:
"""
Returns a list of `Company` objects.
@@ -165,6 +215,8 @@ async def list(
- page_size: typing.Optional[int]. Number of results to return per page.
- remote_id: typing.Optional[str]. The API provider's ID for the given object.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import AsyncMerge
@@ -177,21 +229,37 @@ async def list(
_response = await self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/hris/v1/companies"),
- params=remove_none_from_dict(
- {
- "created_after": serialize_datetime(created_after) if created_after is not None else None,
- "created_before": serialize_datetime(created_before) if created_before is not None else None,
- "cursor": cursor,
- "include_deleted_data": include_deleted_data,
- "include_remote_data": include_remote_data,
- "modified_after": serialize_datetime(modified_after) if modified_after is not None else None,
- "modified_before": serialize_datetime(modified_before) if modified_before is not None else None,
- "page_size": page_size,
- "remote_id": remote_id,
- }
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "created_after": serialize_datetime(created_after) if created_after is not None else None,
+ "created_before": serialize_datetime(created_before) if created_before is not None else None,
+ "cursor": cursor,
+ "include_deleted_data": include_deleted_data,
+ "include_remote_data": include_remote_data,
+ "modified_after": serialize_datetime(modified_after) if modified_after is not None else None,
+ "modified_before": serialize_datetime(modified_before) if modified_before is not None else None,
+ "page_size": page_size,
+ "remote_id": remote_id,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(PaginatedCompanyList, _response.json()) # type: ignore
@@ -201,7 +269,13 @@ async def list(
raise ApiError(status_code=_response.status_code, body=_response.text)
raise ApiError(status_code=_response.status_code, body=_response_json)
- async def retrieve(self, id: str, *, include_remote_data: typing.Optional[bool] = None) -> Company:
+ async def retrieve(
+ self,
+ id: str,
+ *,
+ include_remote_data: typing.Optional[bool] = None,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> Company:
"""
Returns a `Company` object with the given `id`.
@@ -209,6 +283,8 @@ async def retrieve(self, id: str, *, include_remote_data: typing.Optional[bool]
- id: str.
- include_remote_data: typing.Optional[bool]. Whether to include the original data Merge fetched from the third-party to produce these models.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import AsyncMerge
@@ -217,15 +293,35 @@ async def retrieve(self, id: str, *, include_remote_data: typing.Optional[bool]
api_key="YOUR_API_KEY",
)
await client.hris.companies.retrieve(
- id="id",
+ id="string",
)
"""
_response = await self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", f"api/hris/v1/companies/{id}"),
- params=remove_none_from_dict({"include_remote_data": include_remote_data}),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "include_remote_data": include_remote_data,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(Company, _response.json()) # type: ignore
diff --git a/src/merge/resources/hris/resources/delete_account/client.py b/src/merge/resources/hris/resources/delete_account/client.py
index 79efa510..f2d2c3d3 100644
--- a/src/merge/resources/hris/resources/delete_account/client.py
+++ b/src/merge/resources/hris/resources/delete_account/client.py
@@ -1,20 +1,26 @@
# This file was auto-generated by Fern from our API Definition.
+import typing
import urllib.parse
from json.decoder import JSONDecodeError
from .....core.api_error import ApiError
from .....core.client_wrapper import AsyncClientWrapper, SyncClientWrapper
+from .....core.jsonable_encoder import jsonable_encoder
+from .....core.remove_none_from_dict import remove_none_from_dict
+from .....core.request_options import RequestOptions
class DeleteAccountClient:
def __init__(self, *, client_wrapper: SyncClientWrapper):
self._client_wrapper = client_wrapper
- def delete(self) -> None:
+ def delete(self, *, request_options: typing.Optional[RequestOptions] = None) -> None:
"""
Delete a linked account.
+ Parameters:
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import Merge
@@ -27,8 +33,23 @@ def delete(self) -> None:
_response = self._client_wrapper.httpx_client.request(
"POST",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/hris/v1/delete-account"),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ request_options.get("additional_query_parameters") if request_options is not None else None
+ ),
+ json=jsonable_encoder(remove_none_from_dict(request_options.get("additional_body_parameters", {})))
+ if request_options is not None
+ else None,
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return
@@ -43,10 +64,12 @@ class AsyncDeleteAccountClient:
def __init__(self, *, client_wrapper: AsyncClientWrapper):
self._client_wrapper = client_wrapper
- async def delete(self) -> None:
+ async def delete(self, *, request_options: typing.Optional[RequestOptions] = None) -> None:
"""
Delete a linked account.
+ Parameters:
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import AsyncMerge
@@ -59,8 +82,23 @@ async def delete(self) -> None:
_response = await self._client_wrapper.httpx_client.request(
"POST",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/hris/v1/delete-account"),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ request_options.get("additional_query_parameters") if request_options is not None else None
+ ),
+ json=jsonable_encoder(remove_none_from_dict(request_options.get("additional_body_parameters", {})))
+ if request_options is not None
+ else None,
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return
diff --git a/src/merge/resources/hris/resources/dependents/client.py b/src/merge/resources/hris/resources/dependents/client.py
index 580f0b93..114868fb 100644
--- a/src/merge/resources/hris/resources/dependents/client.py
+++ b/src/merge/resources/hris/resources/dependents/client.py
@@ -8,7 +8,9 @@
from .....core.api_error import ApiError
from .....core.client_wrapper import AsyncClientWrapper, SyncClientWrapper
from .....core.datetime_utils import serialize_datetime
+from .....core.jsonable_encoder import jsonable_encoder
from .....core.remove_none_from_dict import remove_none_from_dict
+from .....core.request_options import RequestOptions
from ...types.dependent import Dependent
from ...types.paginated_dependent_list import PaginatedDependentList
@@ -35,6 +37,7 @@ def list(
modified_before: typing.Optional[dt.datetime] = None,
page_size: typing.Optional[int] = None,
remote_id: typing.Optional[str] = None,
+ request_options: typing.Optional[RequestOptions] = None,
) -> PaginatedDependentList:
"""
Returns a list of `Dependent` objects.
@@ -59,6 +62,8 @@ def list(
- page_size: typing.Optional[int]. Number of results to return per page.
- remote_id: typing.Optional[str]. The API provider's ID for the given object.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import Merge
@@ -71,22 +76,38 @@ def list(
_response = self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/hris/v1/dependents"),
- params=remove_none_from_dict(
- {
- "created_after": serialize_datetime(created_after) if created_after is not None else None,
- "created_before": serialize_datetime(created_before) if created_before is not None else None,
- "cursor": cursor,
- "include_deleted_data": include_deleted_data,
- "include_remote_data": include_remote_data,
- "include_sensitive_fields": include_sensitive_fields,
- "modified_after": serialize_datetime(modified_after) if modified_after is not None else None,
- "modified_before": serialize_datetime(modified_before) if modified_before is not None else None,
- "page_size": page_size,
- "remote_id": remote_id,
- }
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "created_after": serialize_datetime(created_after) if created_after is not None else None,
+ "created_before": serialize_datetime(created_before) if created_before is not None else None,
+ "cursor": cursor,
+ "include_deleted_data": include_deleted_data,
+ "include_remote_data": include_remote_data,
+ "include_sensitive_fields": include_sensitive_fields,
+ "modified_after": serialize_datetime(modified_after) if modified_after is not None else None,
+ "modified_before": serialize_datetime(modified_before) if modified_before is not None else None,
+ "page_size": page_size,
+ "remote_id": remote_id,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(PaginatedDependentList, _response.json()) # type: ignore
@@ -102,6 +123,7 @@ def retrieve(
*,
include_remote_data: typing.Optional[bool] = None,
include_sensitive_fields: typing.Optional[bool] = None,
+ request_options: typing.Optional[RequestOptions] = None,
) -> Dependent:
"""
Returns a `Dependent` object with the given `id`.
@@ -112,6 +134,8 @@ def retrieve(
- include_remote_data: typing.Optional[bool]. Whether to include the original data Merge fetched from the third-party to produce these models.
- include_sensitive_fields: typing.Optional[bool]. Whether to include sensitive fields (such as social security numbers) in the response.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import Merge
@@ -120,17 +144,36 @@ def retrieve(
api_key="YOUR_API_KEY",
)
client.hris.dependents.retrieve(
- id="id",
+ id="string",
)
"""
_response = self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", f"api/hris/v1/dependents/{id}"),
- params=remove_none_from_dict(
- {"include_remote_data": include_remote_data, "include_sensitive_fields": include_sensitive_fields}
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "include_remote_data": include_remote_data,
+ "include_sensitive_fields": include_sensitive_fields,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(Dependent, _response.json()) # type: ignore
@@ -158,6 +201,7 @@ async def list(
modified_before: typing.Optional[dt.datetime] = None,
page_size: typing.Optional[int] = None,
remote_id: typing.Optional[str] = None,
+ request_options: typing.Optional[RequestOptions] = None,
) -> PaginatedDependentList:
"""
Returns a list of `Dependent` objects.
@@ -182,6 +226,8 @@ async def list(
- page_size: typing.Optional[int]. Number of results to return per page.
- remote_id: typing.Optional[str]. The API provider's ID for the given object.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import AsyncMerge
@@ -194,22 +240,38 @@ async def list(
_response = await self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/hris/v1/dependents"),
- params=remove_none_from_dict(
- {
- "created_after": serialize_datetime(created_after) if created_after is not None else None,
- "created_before": serialize_datetime(created_before) if created_before is not None else None,
- "cursor": cursor,
- "include_deleted_data": include_deleted_data,
- "include_remote_data": include_remote_data,
- "include_sensitive_fields": include_sensitive_fields,
- "modified_after": serialize_datetime(modified_after) if modified_after is not None else None,
- "modified_before": serialize_datetime(modified_before) if modified_before is not None else None,
- "page_size": page_size,
- "remote_id": remote_id,
- }
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "created_after": serialize_datetime(created_after) if created_after is not None else None,
+ "created_before": serialize_datetime(created_before) if created_before is not None else None,
+ "cursor": cursor,
+ "include_deleted_data": include_deleted_data,
+ "include_remote_data": include_remote_data,
+ "include_sensitive_fields": include_sensitive_fields,
+ "modified_after": serialize_datetime(modified_after) if modified_after is not None else None,
+ "modified_before": serialize_datetime(modified_before) if modified_before is not None else None,
+ "page_size": page_size,
+ "remote_id": remote_id,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(PaginatedDependentList, _response.json()) # type: ignore
@@ -225,6 +287,7 @@ async def retrieve(
*,
include_remote_data: typing.Optional[bool] = None,
include_sensitive_fields: typing.Optional[bool] = None,
+ request_options: typing.Optional[RequestOptions] = None,
) -> Dependent:
"""
Returns a `Dependent` object with the given `id`.
@@ -235,6 +298,8 @@ async def retrieve(
- include_remote_data: typing.Optional[bool]. Whether to include the original data Merge fetched from the third-party to produce these models.
- include_sensitive_fields: typing.Optional[bool]. Whether to include sensitive fields (such as social security numbers) in the response.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import AsyncMerge
@@ -243,17 +308,36 @@ async def retrieve(
api_key="YOUR_API_KEY",
)
await client.hris.dependents.retrieve(
- id="id",
+ id="string",
)
"""
_response = await self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", f"api/hris/v1/dependents/{id}"),
- params=remove_none_from_dict(
- {"include_remote_data": include_remote_data, "include_sensitive_fields": include_sensitive_fields}
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "include_remote_data": include_remote_data,
+ "include_sensitive_fields": include_sensitive_fields,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(Dependent, _response.json()) # type: ignore
diff --git a/src/merge/resources/hris/resources/employee_payroll_runs/client.py b/src/merge/resources/hris/resources/employee_payroll_runs/client.py
index 82146401..ee03512b 100644
--- a/src/merge/resources/hris/resources/employee_payroll_runs/client.py
+++ b/src/merge/resources/hris/resources/employee_payroll_runs/client.py
@@ -8,7 +8,9 @@
from .....core.api_error import ApiError
from .....core.client_wrapper import AsyncClientWrapper, SyncClientWrapper
from .....core.datetime_utils import serialize_datetime
+from .....core.jsonable_encoder import jsonable_encoder
from .....core.remove_none_from_dict import remove_none_from_dict
+from .....core.request_options import RequestOptions
from ...types.employee_payroll_run import EmployeePayrollRun
from ...types.paginated_employee_payroll_run_list import PaginatedEmployeePayrollRunList
from .types.employee_payroll_runs_list_request_expand import EmployeePayrollRunsListRequestExpand
@@ -43,6 +45,7 @@ def list(
remote_id: typing.Optional[str] = None,
started_after: typing.Optional[dt.datetime] = None,
started_before: typing.Optional[dt.datetime] = None,
+ request_options: typing.Optional[RequestOptions] = None,
) -> PaginatedEmployeePayrollRunList:
"""
Returns a list of `EmployeePayrollRun` objects.
@@ -79,6 +82,8 @@ def list(
- started_after: typing.Optional[dt.datetime]. If provided, will only return employee payroll runs started after this datetime.
- started_before: typing.Optional[dt.datetime]. If provided, will only return employee payroll runs started before this datetime.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import Merge
from merge.resources.hris import EmployeePayrollRunsListRequestExpand
@@ -94,28 +99,44 @@ def list(
_response = self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/hris/v1/employee-payroll-runs"),
- params=remove_none_from_dict(
- {
- "created_after": serialize_datetime(created_after) if created_after is not None else None,
- "created_before": serialize_datetime(created_before) if created_before is not None else None,
- "cursor": cursor,
- "employee_id": employee_id,
- "ended_after": serialize_datetime(ended_after) if ended_after is not None else None,
- "ended_before": serialize_datetime(ended_before) if ended_before is not None else None,
- "expand": expand,
- "include_deleted_data": include_deleted_data,
- "include_remote_data": include_remote_data,
- "modified_after": serialize_datetime(modified_after) if modified_after is not None else None,
- "modified_before": serialize_datetime(modified_before) if modified_before is not None else None,
- "page_size": page_size,
- "payroll_run_id": payroll_run_id,
- "remote_id": remote_id,
- "started_after": serialize_datetime(started_after) if started_after is not None else None,
- "started_before": serialize_datetime(started_before) if started_before is not None else None,
- }
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "created_after": serialize_datetime(created_after) if created_after is not None else None,
+ "created_before": serialize_datetime(created_before) if created_before is not None else None,
+ "cursor": cursor,
+ "employee_id": employee_id,
+ "ended_after": serialize_datetime(ended_after) if ended_after is not None else None,
+ "ended_before": serialize_datetime(ended_before) if ended_before is not None else None,
+ "expand": expand,
+ "include_deleted_data": include_deleted_data,
+ "include_remote_data": include_remote_data,
+ "modified_after": serialize_datetime(modified_after) if modified_after is not None else None,
+ "modified_before": serialize_datetime(modified_before) if modified_before is not None else None,
+ "page_size": page_size,
+ "payroll_run_id": payroll_run_id,
+ "remote_id": remote_id,
+ "started_after": serialize_datetime(started_after) if started_after is not None else None,
+ "started_before": serialize_datetime(started_before) if started_before is not None else None,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(PaginatedEmployeePayrollRunList, _response.json()) # type: ignore
@@ -131,6 +152,7 @@ def retrieve(
*,
expand: typing.Optional[EmployeePayrollRunsRetrieveRequestExpand] = None,
include_remote_data: typing.Optional[bool] = None,
+ request_options: typing.Optional[RequestOptions] = None,
) -> EmployeePayrollRun:
"""
Returns an `EmployeePayrollRun` object with the given `id`.
@@ -141,6 +163,8 @@ def retrieve(
- expand: typing.Optional[EmployeePayrollRunsRetrieveRequestExpand]. Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces.
- include_remote_data: typing.Optional[bool]. Whether to include the original data Merge fetched from the third-party to produce these models.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import Merge
from merge.resources.hris import EmployeePayrollRunsRetrieveRequestExpand
@@ -150,16 +174,37 @@ def retrieve(
api_key="YOUR_API_KEY",
)
client.hris.employee_payroll_runs.retrieve(
- id="id",
+ id="string",
expand=EmployeePayrollRunsRetrieveRequestExpand.EMPLOYEE,
)
"""
_response = self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", f"api/hris/v1/employee-payroll-runs/{id}"),
- params=remove_none_from_dict({"expand": expand, "include_remote_data": include_remote_data}),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "expand": expand,
+ "include_remote_data": include_remote_data,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(EmployeePayrollRun, _response.json()) # type: ignore
@@ -193,6 +238,7 @@ async def list(
remote_id: typing.Optional[str] = None,
started_after: typing.Optional[dt.datetime] = None,
started_before: typing.Optional[dt.datetime] = None,
+ request_options: typing.Optional[RequestOptions] = None,
) -> PaginatedEmployeePayrollRunList:
"""
Returns a list of `EmployeePayrollRun` objects.
@@ -229,6 +275,8 @@ async def list(
- started_after: typing.Optional[dt.datetime]. If provided, will only return employee payroll runs started after this datetime.
- started_before: typing.Optional[dt.datetime]. If provided, will only return employee payroll runs started before this datetime.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import AsyncMerge
from merge.resources.hris import EmployeePayrollRunsListRequestExpand
@@ -244,28 +292,44 @@ async def list(
_response = await self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/hris/v1/employee-payroll-runs"),
- params=remove_none_from_dict(
- {
- "created_after": serialize_datetime(created_after) if created_after is not None else None,
- "created_before": serialize_datetime(created_before) if created_before is not None else None,
- "cursor": cursor,
- "employee_id": employee_id,
- "ended_after": serialize_datetime(ended_after) if ended_after is not None else None,
- "ended_before": serialize_datetime(ended_before) if ended_before is not None else None,
- "expand": expand,
- "include_deleted_data": include_deleted_data,
- "include_remote_data": include_remote_data,
- "modified_after": serialize_datetime(modified_after) if modified_after is not None else None,
- "modified_before": serialize_datetime(modified_before) if modified_before is not None else None,
- "page_size": page_size,
- "payroll_run_id": payroll_run_id,
- "remote_id": remote_id,
- "started_after": serialize_datetime(started_after) if started_after is not None else None,
- "started_before": serialize_datetime(started_before) if started_before is not None else None,
- }
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "created_after": serialize_datetime(created_after) if created_after is not None else None,
+ "created_before": serialize_datetime(created_before) if created_before is not None else None,
+ "cursor": cursor,
+ "employee_id": employee_id,
+ "ended_after": serialize_datetime(ended_after) if ended_after is not None else None,
+ "ended_before": serialize_datetime(ended_before) if ended_before is not None else None,
+ "expand": expand,
+ "include_deleted_data": include_deleted_data,
+ "include_remote_data": include_remote_data,
+ "modified_after": serialize_datetime(modified_after) if modified_after is not None else None,
+ "modified_before": serialize_datetime(modified_before) if modified_before is not None else None,
+ "page_size": page_size,
+ "payroll_run_id": payroll_run_id,
+ "remote_id": remote_id,
+ "started_after": serialize_datetime(started_after) if started_after is not None else None,
+ "started_before": serialize_datetime(started_before) if started_before is not None else None,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(PaginatedEmployeePayrollRunList, _response.json()) # type: ignore
@@ -281,6 +345,7 @@ async def retrieve(
*,
expand: typing.Optional[EmployeePayrollRunsRetrieveRequestExpand] = None,
include_remote_data: typing.Optional[bool] = None,
+ request_options: typing.Optional[RequestOptions] = None,
) -> EmployeePayrollRun:
"""
Returns an `EmployeePayrollRun` object with the given `id`.
@@ -291,6 +356,8 @@ async def retrieve(
- expand: typing.Optional[EmployeePayrollRunsRetrieveRequestExpand]. Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces.
- include_remote_data: typing.Optional[bool]. Whether to include the original data Merge fetched from the third-party to produce these models.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import AsyncMerge
from merge.resources.hris import EmployeePayrollRunsRetrieveRequestExpand
@@ -300,16 +367,37 @@ async def retrieve(
api_key="YOUR_API_KEY",
)
await client.hris.employee_payroll_runs.retrieve(
- id="id",
+ id="string",
expand=EmployeePayrollRunsRetrieveRequestExpand.EMPLOYEE,
)
"""
_response = await self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", f"api/hris/v1/employee-payroll-runs/{id}"),
- params=remove_none_from_dict({"expand": expand, "include_remote_data": include_remote_data}),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "expand": expand,
+ "include_remote_data": include_remote_data,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(EmployeePayrollRun, _response.json()) # type: ignore
diff --git a/src/merge/resources/hris/resources/employees/client.py b/src/merge/resources/hris/resources/employees/client.py
index b14707bf..fb8a6dfd 100644
--- a/src/merge/resources/hris/resources/employees/client.py
+++ b/src/merge/resources/hris/resources/employees/client.py
@@ -10,6 +10,7 @@
from .....core.datetime_utils import serialize_datetime
from .....core.jsonable_encoder import jsonable_encoder
from .....core.remove_none_from_dict import remove_none_from_dict
+from .....core.request_options import RequestOptions
from ...types.employee import Employee
from ...types.employee_request import EmployeeRequest
from ...types.employee_response import EmployeeResponse
@@ -72,6 +73,7 @@ def list(
terminated_before: typing.Optional[dt.datetime] = None,
work_email: typing.Optional[str] = None,
work_location_id: typing.Optional[str] = None,
+ request_options: typing.Optional[RequestOptions] = None,
) -> PaginatedEmployeeList:
"""
Returns a list of `Employee` objects.
@@ -143,6 +145,8 @@ def list(
- work_email: typing.Optional[str]. If provided, will only return Employees with this work email
- work_location_id: typing.Optional[str]. If provided, will only return employees for this location.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import Merge
from merge.resources.hris import (
@@ -166,46 +170,64 @@ def list(
_response = self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/hris/v1/employees"),
- params=remove_none_from_dict(
- {
- "company_id": company_id,
- "created_after": serialize_datetime(created_after) if created_after is not None else None,
- "created_before": serialize_datetime(created_before) if created_before is not None else None,
- "cursor": cursor,
- "display_full_name": display_full_name,
- "employment_status": employment_status,
- "employment_type": employment_type,
- "expand": expand,
- "first_name": first_name,
- "groups": groups,
- "home_location_id": home_location_id,
- "include_deleted_data": include_deleted_data,
- "include_remote_data": include_remote_data,
- "include_sensitive_fields": include_sensitive_fields,
- "job_title": job_title,
- "last_name": last_name,
- "manager_id": manager_id,
- "modified_after": serialize_datetime(modified_after) if modified_after is not None else None,
- "modified_before": serialize_datetime(modified_before) if modified_before is not None else None,
- "page_size": page_size,
- "pay_group_id": pay_group_id,
- "personal_email": personal_email,
- "remote_fields": remote_fields,
- "remote_id": remote_id,
- "show_enum_origins": show_enum_origins,
- "started_after": serialize_datetime(started_after) if started_after is not None else None,
- "started_before": serialize_datetime(started_before) if started_before is not None else None,
- "team_id": team_id,
- "terminated_after": serialize_datetime(terminated_after) if terminated_after is not None else None,
- "terminated_before": serialize_datetime(terminated_before)
- if terminated_before is not None
- else None,
- "work_email": work_email,
- "work_location_id": work_location_id,
- }
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "company_id": company_id,
+ "created_after": serialize_datetime(created_after) if created_after is not None else None,
+ "created_before": serialize_datetime(created_before) if created_before is not None else None,
+ "cursor": cursor,
+ "display_full_name": display_full_name,
+ "employment_status": employment_status,
+ "employment_type": employment_type,
+ "expand": expand,
+ "first_name": first_name,
+ "groups": groups,
+ "home_location_id": home_location_id,
+ "include_deleted_data": include_deleted_data,
+ "include_remote_data": include_remote_data,
+ "include_sensitive_fields": include_sensitive_fields,
+ "job_title": job_title,
+ "last_name": last_name,
+ "manager_id": manager_id,
+ "modified_after": serialize_datetime(modified_after) if modified_after is not None else None,
+ "modified_before": serialize_datetime(modified_before) if modified_before is not None else None,
+ "page_size": page_size,
+ "pay_group_id": pay_group_id,
+ "personal_email": personal_email,
+ "remote_fields": remote_fields,
+ "remote_id": remote_id,
+ "show_enum_origins": show_enum_origins,
+ "started_after": serialize_datetime(started_after) if started_after is not None else None,
+ "started_before": serialize_datetime(started_before) if started_before is not None else None,
+ "team_id": team_id,
+ "terminated_after": serialize_datetime(terminated_after)
+ if terminated_after is not None
+ else None,
+ "terminated_before": serialize_datetime(terminated_before)
+ if terminated_before is not None
+ else None,
+ "work_email": work_email,
+ "work_location_id": work_location_id,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(PaginatedEmployeeList, _response.json()) # type: ignore
@@ -221,6 +243,7 @@ def create(
is_debug_mode: typing.Optional[bool] = None,
run_async: typing.Optional[bool] = None,
model: EmployeeRequest,
+ request_options: typing.Optional[RequestOptions] = None,
) -> EmployeeResponse:
"""
Creates an `Employee` object with the given values.
@@ -231,6 +254,8 @@ def create(
- run_async: typing.Optional[bool]. Whether or not third-party updates should be run asynchronously.
- model: EmployeeRequest.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
import datetime
@@ -272,10 +297,36 @@ def create(
_response = self._client_wrapper.httpx_client.request(
"POST",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/hris/v1/employees"),
- params=remove_none_from_dict({"is_debug_mode": is_debug_mode, "run_async": run_async}),
- json=jsonable_encoder({"model": model}),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "is_debug_mode": is_debug_mode,
+ "run_async": run_async,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ json=jsonable_encoder({"model": model})
+ if request_options is None or request_options.get("additional_body_parameters") is None
+ else {
+ **jsonable_encoder({"model": model}),
+ **(jsonable_encoder(remove_none_from_dict(request_options.get("additional_body_parameters", {})))),
+ },
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(EmployeeResponse, _response.json()) # type: ignore
@@ -294,6 +345,7 @@ def retrieve(
include_sensitive_fields: typing.Optional[bool] = None,
remote_fields: typing.Optional[EmployeesRetrieveRequestRemoteFields] = None,
show_enum_origins: typing.Optional[EmployeesRetrieveRequestShowEnumOrigins] = None,
+ request_options: typing.Optional[RequestOptions] = None,
) -> Employee:
"""
Returns an `Employee` object with the given `id`.
@@ -310,6 +362,8 @@ def retrieve(
- remote_fields: typing.Optional[EmployeesRetrieveRequestRemoteFields]. Deprecated. Use show_enum_origins.
- show_enum_origins: typing.Optional[EmployeesRetrieveRequestShowEnumOrigins]. Which fields should be returned in non-normalized form.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import Merge
from merge.resources.hris import (
@@ -323,7 +377,7 @@ def retrieve(
api_key="YOUR_API_KEY",
)
client.hris.employees.retrieve(
- id="id",
+ id="string",
expand=EmployeesRetrieveRequestExpand.COMPANY,
remote_fields=EmployeesRetrieveRequestRemoteFields.EMPLOYMENT_STATUS,
show_enum_origins=EmployeesRetrieveRequestShowEnumOrigins.EMPLOYMENT_STATUS,
@@ -332,17 +386,33 @@ def retrieve(
_response = self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", f"api/hris/v1/employees/{id}"),
- params=remove_none_from_dict(
- {
- "expand": expand,
- "include_remote_data": include_remote_data,
- "include_sensitive_fields": include_sensitive_fields,
- "remote_fields": remote_fields,
- "show_enum_origins": show_enum_origins,
- }
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "expand": expand,
+ "include_remote_data": include_remote_data,
+ "include_sensitive_fields": include_sensitive_fields,
+ "remote_fields": remote_fields,
+ "show_enum_origins": show_enum_origins,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(Employee, _response.json()) # type: ignore
@@ -353,7 +423,12 @@ def retrieve(
raise ApiError(status_code=_response.status_code, body=_response_json)
def ignore_create(
- self, model_id: str, *, reason: IgnoreCommonModelRequestReason, message: typing.Optional[str] = OMIT
+ self,
+ model_id: str,
+ *,
+ reason: IgnoreCommonModelRequestReason,
+ message: typing.Optional[str] = OMIT,
+ request_options: typing.Optional[RequestOptions] = None,
) -> None:
"""
Ignores a specific row based on the `model_id` in the url. These records will have their properties set to null, and will not be updated in future syncs. The "reason" and "message" fields in the request body will be stored for audit purposes.
@@ -364,6 +439,19 @@ def ignore_create(
- reason: IgnoreCommonModelRequestReason.
- message: typing.Optional[str].
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
+ ---
+ from merge.client import Merge
+
+ client = Merge(
+ account_token="YOUR_ACCOUNT_TOKEN",
+ api_key="YOUR_API_KEY",
+ )
+ client.hris.employees.ignore_create(
+ model_id="string",
+ message="deletion request by user id 51903790-7dfe-4053-8d63-5a10cc4ffd39",
+ )
"""
_request: typing.Dict[str, typing.Any] = {"reason": reason}
if message is not OMIT:
@@ -371,9 +459,26 @@ def ignore_create(
_response = self._client_wrapper.httpx_client.request(
"POST",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", f"api/hris/v1/employees/ignore/{model_id}"),
- json=jsonable_encoder(_request),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ request_options.get("additional_query_parameters") if request_options is not None else None
+ ),
+ json=jsonable_encoder(_request)
+ if request_options is None or request_options.get("additional_body_parameters") is None
+ else {
+ **jsonable_encoder(_request),
+ **(jsonable_encoder(remove_none_from_dict(request_options.get("additional_body_parameters", {})))),
+ },
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return
@@ -383,10 +488,12 @@ def ignore_create(
raise ApiError(status_code=_response.status_code, body=_response.text)
raise ApiError(status_code=_response.status_code, body=_response_json)
- def meta_post_retrieve(self) -> MetaResponse:
+ def meta_post_retrieve(self, *, request_options: typing.Optional[RequestOptions] = None) -> MetaResponse:
"""
Returns metadata for `Employee` POSTs.
+ Parameters:
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import Merge
@@ -399,8 +506,20 @@ def meta_post_retrieve(self) -> MetaResponse:
_response = self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/hris/v1/employees/meta/post"),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ request_options.get("additional_query_parameters") if request_options is not None else None
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(MetaResponse, _response.json()) # type: ignore
@@ -450,6 +569,7 @@ async def list(
terminated_before: typing.Optional[dt.datetime] = None,
work_email: typing.Optional[str] = None,
work_location_id: typing.Optional[str] = None,
+ request_options: typing.Optional[RequestOptions] = None,
) -> PaginatedEmployeeList:
"""
Returns a list of `Employee` objects.
@@ -521,6 +641,8 @@ async def list(
- work_email: typing.Optional[str]. If provided, will only return Employees with this work email
- work_location_id: typing.Optional[str]. If provided, will only return employees for this location.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import AsyncMerge
from merge.resources.hris import (
@@ -544,46 +666,64 @@ async def list(
_response = await self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/hris/v1/employees"),
- params=remove_none_from_dict(
- {
- "company_id": company_id,
- "created_after": serialize_datetime(created_after) if created_after is not None else None,
- "created_before": serialize_datetime(created_before) if created_before is not None else None,
- "cursor": cursor,
- "display_full_name": display_full_name,
- "employment_status": employment_status,
- "employment_type": employment_type,
- "expand": expand,
- "first_name": first_name,
- "groups": groups,
- "home_location_id": home_location_id,
- "include_deleted_data": include_deleted_data,
- "include_remote_data": include_remote_data,
- "include_sensitive_fields": include_sensitive_fields,
- "job_title": job_title,
- "last_name": last_name,
- "manager_id": manager_id,
- "modified_after": serialize_datetime(modified_after) if modified_after is not None else None,
- "modified_before": serialize_datetime(modified_before) if modified_before is not None else None,
- "page_size": page_size,
- "pay_group_id": pay_group_id,
- "personal_email": personal_email,
- "remote_fields": remote_fields,
- "remote_id": remote_id,
- "show_enum_origins": show_enum_origins,
- "started_after": serialize_datetime(started_after) if started_after is not None else None,
- "started_before": serialize_datetime(started_before) if started_before is not None else None,
- "team_id": team_id,
- "terminated_after": serialize_datetime(terminated_after) if terminated_after is not None else None,
- "terminated_before": serialize_datetime(terminated_before)
- if terminated_before is not None
- else None,
- "work_email": work_email,
- "work_location_id": work_location_id,
- }
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "company_id": company_id,
+ "created_after": serialize_datetime(created_after) if created_after is not None else None,
+ "created_before": serialize_datetime(created_before) if created_before is not None else None,
+ "cursor": cursor,
+ "display_full_name": display_full_name,
+ "employment_status": employment_status,
+ "employment_type": employment_type,
+ "expand": expand,
+ "first_name": first_name,
+ "groups": groups,
+ "home_location_id": home_location_id,
+ "include_deleted_data": include_deleted_data,
+ "include_remote_data": include_remote_data,
+ "include_sensitive_fields": include_sensitive_fields,
+ "job_title": job_title,
+ "last_name": last_name,
+ "manager_id": manager_id,
+ "modified_after": serialize_datetime(modified_after) if modified_after is not None else None,
+ "modified_before": serialize_datetime(modified_before) if modified_before is not None else None,
+ "page_size": page_size,
+ "pay_group_id": pay_group_id,
+ "personal_email": personal_email,
+ "remote_fields": remote_fields,
+ "remote_id": remote_id,
+ "show_enum_origins": show_enum_origins,
+ "started_after": serialize_datetime(started_after) if started_after is not None else None,
+ "started_before": serialize_datetime(started_before) if started_before is not None else None,
+ "team_id": team_id,
+ "terminated_after": serialize_datetime(terminated_after)
+ if terminated_after is not None
+ else None,
+ "terminated_before": serialize_datetime(terminated_before)
+ if terminated_before is not None
+ else None,
+ "work_email": work_email,
+ "work_location_id": work_location_id,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(PaginatedEmployeeList, _response.json()) # type: ignore
@@ -599,6 +739,7 @@ async def create(
is_debug_mode: typing.Optional[bool] = None,
run_async: typing.Optional[bool] = None,
model: EmployeeRequest,
+ request_options: typing.Optional[RequestOptions] = None,
) -> EmployeeResponse:
"""
Creates an `Employee` object with the given values.
@@ -609,6 +750,8 @@ async def create(
- run_async: typing.Optional[bool]. Whether or not third-party updates should be run asynchronously.
- model: EmployeeRequest.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
import datetime
@@ -650,10 +793,36 @@ async def create(
_response = await self._client_wrapper.httpx_client.request(
"POST",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/hris/v1/employees"),
- params=remove_none_from_dict({"is_debug_mode": is_debug_mode, "run_async": run_async}),
- json=jsonable_encoder({"model": model}),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "is_debug_mode": is_debug_mode,
+ "run_async": run_async,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ json=jsonable_encoder({"model": model})
+ if request_options is None or request_options.get("additional_body_parameters") is None
+ else {
+ **jsonable_encoder({"model": model}),
+ **(jsonable_encoder(remove_none_from_dict(request_options.get("additional_body_parameters", {})))),
+ },
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(EmployeeResponse, _response.json()) # type: ignore
@@ -672,6 +841,7 @@ async def retrieve(
include_sensitive_fields: typing.Optional[bool] = None,
remote_fields: typing.Optional[EmployeesRetrieveRequestRemoteFields] = None,
show_enum_origins: typing.Optional[EmployeesRetrieveRequestShowEnumOrigins] = None,
+ request_options: typing.Optional[RequestOptions] = None,
) -> Employee:
"""
Returns an `Employee` object with the given `id`.
@@ -688,6 +858,8 @@ async def retrieve(
- remote_fields: typing.Optional[EmployeesRetrieveRequestRemoteFields]. Deprecated. Use show_enum_origins.
- show_enum_origins: typing.Optional[EmployeesRetrieveRequestShowEnumOrigins]. Which fields should be returned in non-normalized form.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import AsyncMerge
from merge.resources.hris import (
@@ -701,7 +873,7 @@ async def retrieve(
api_key="YOUR_API_KEY",
)
await client.hris.employees.retrieve(
- id="id",
+ id="string",
expand=EmployeesRetrieveRequestExpand.COMPANY,
remote_fields=EmployeesRetrieveRequestRemoteFields.EMPLOYMENT_STATUS,
show_enum_origins=EmployeesRetrieveRequestShowEnumOrigins.EMPLOYMENT_STATUS,
@@ -710,17 +882,33 @@ async def retrieve(
_response = await self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", f"api/hris/v1/employees/{id}"),
- params=remove_none_from_dict(
- {
- "expand": expand,
- "include_remote_data": include_remote_data,
- "include_sensitive_fields": include_sensitive_fields,
- "remote_fields": remote_fields,
- "show_enum_origins": show_enum_origins,
- }
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "expand": expand,
+ "include_remote_data": include_remote_data,
+ "include_sensitive_fields": include_sensitive_fields,
+ "remote_fields": remote_fields,
+ "show_enum_origins": show_enum_origins,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(Employee, _response.json()) # type: ignore
@@ -731,7 +919,12 @@ async def retrieve(
raise ApiError(status_code=_response.status_code, body=_response_json)
async def ignore_create(
- self, model_id: str, *, reason: IgnoreCommonModelRequestReason, message: typing.Optional[str] = OMIT
+ self,
+ model_id: str,
+ *,
+ reason: IgnoreCommonModelRequestReason,
+ message: typing.Optional[str] = OMIT,
+ request_options: typing.Optional[RequestOptions] = None,
) -> None:
"""
Ignores a specific row based on the `model_id` in the url. These records will have their properties set to null, and will not be updated in future syncs. The "reason" and "message" fields in the request body will be stored for audit purposes.
@@ -742,6 +935,19 @@ async def ignore_create(
- reason: IgnoreCommonModelRequestReason.
- message: typing.Optional[str].
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
+ ---
+ from merge.client import AsyncMerge
+
+ client = AsyncMerge(
+ account_token="YOUR_ACCOUNT_TOKEN",
+ api_key="YOUR_API_KEY",
+ )
+ await client.hris.employees.ignore_create(
+ model_id="string",
+ message="deletion request by user id 51903790-7dfe-4053-8d63-5a10cc4ffd39",
+ )
"""
_request: typing.Dict[str, typing.Any] = {"reason": reason}
if message is not OMIT:
@@ -749,9 +955,26 @@ async def ignore_create(
_response = await self._client_wrapper.httpx_client.request(
"POST",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", f"api/hris/v1/employees/ignore/{model_id}"),
- json=jsonable_encoder(_request),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ request_options.get("additional_query_parameters") if request_options is not None else None
+ ),
+ json=jsonable_encoder(_request)
+ if request_options is None or request_options.get("additional_body_parameters") is None
+ else {
+ **jsonable_encoder(_request),
+ **(jsonable_encoder(remove_none_from_dict(request_options.get("additional_body_parameters", {})))),
+ },
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return
@@ -761,10 +984,12 @@ async def ignore_create(
raise ApiError(status_code=_response.status_code, body=_response.text)
raise ApiError(status_code=_response.status_code, body=_response_json)
- async def meta_post_retrieve(self) -> MetaResponse:
+ async def meta_post_retrieve(self, *, request_options: typing.Optional[RequestOptions] = None) -> MetaResponse:
"""
Returns metadata for `Employee` POSTs.
+ Parameters:
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import AsyncMerge
@@ -777,8 +1002,20 @@ async def meta_post_retrieve(self) -> MetaResponse:
_response = await self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/hris/v1/employees/meta/post"),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ request_options.get("additional_query_parameters") if request_options is not None else None
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(MetaResponse, _response.json()) # type: ignore
diff --git a/src/merge/resources/hris/resources/employer_benefits/client.py b/src/merge/resources/hris/resources/employer_benefits/client.py
index 2ad1a607..f9795ee9 100644
--- a/src/merge/resources/hris/resources/employer_benefits/client.py
+++ b/src/merge/resources/hris/resources/employer_benefits/client.py
@@ -8,7 +8,9 @@
from .....core.api_error import ApiError
from .....core.client_wrapper import AsyncClientWrapper, SyncClientWrapper
from .....core.datetime_utils import serialize_datetime
+from .....core.jsonable_encoder import jsonable_encoder
from .....core.remove_none_from_dict import remove_none_from_dict
+from .....core.request_options import RequestOptions
from ...types.employer_benefit import EmployerBenefit
from ...types.paginated_employer_benefit_list import PaginatedEmployerBenefitList
@@ -34,6 +36,7 @@ def list(
modified_before: typing.Optional[dt.datetime] = None,
page_size: typing.Optional[int] = None,
remote_id: typing.Optional[str] = None,
+ request_options: typing.Optional[RequestOptions] = None,
) -> PaginatedEmployerBenefitList:
"""
Returns a list of `EmployerBenefit` objects.
@@ -56,6 +59,8 @@ def list(
- page_size: typing.Optional[int]. Number of results to return per page.
- remote_id: typing.Optional[str]. The API provider's ID for the given object.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import Merge
@@ -68,21 +73,37 @@ def list(
_response = self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/hris/v1/employer-benefits"),
- params=remove_none_from_dict(
- {
- "created_after": serialize_datetime(created_after) if created_after is not None else None,
- "created_before": serialize_datetime(created_before) if created_before is not None else None,
- "cursor": cursor,
- "include_deleted_data": include_deleted_data,
- "include_remote_data": include_remote_data,
- "modified_after": serialize_datetime(modified_after) if modified_after is not None else None,
- "modified_before": serialize_datetime(modified_before) if modified_before is not None else None,
- "page_size": page_size,
- "remote_id": remote_id,
- }
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "created_after": serialize_datetime(created_after) if created_after is not None else None,
+ "created_before": serialize_datetime(created_before) if created_before is not None else None,
+ "cursor": cursor,
+ "include_deleted_data": include_deleted_data,
+ "include_remote_data": include_remote_data,
+ "modified_after": serialize_datetime(modified_after) if modified_after is not None else None,
+ "modified_before": serialize_datetime(modified_before) if modified_before is not None else None,
+ "page_size": page_size,
+ "remote_id": remote_id,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(PaginatedEmployerBenefitList, _response.json()) # type: ignore
@@ -92,7 +113,13 @@ def list(
raise ApiError(status_code=_response.status_code, body=_response.text)
raise ApiError(status_code=_response.status_code, body=_response_json)
- def retrieve(self, id: str, *, include_remote_data: typing.Optional[bool] = None) -> EmployerBenefit:
+ def retrieve(
+ self,
+ id: str,
+ *,
+ include_remote_data: typing.Optional[bool] = None,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> EmployerBenefit:
"""
Returns an `EmployerBenefit` object with the given `id`.
@@ -100,6 +127,8 @@ def retrieve(self, id: str, *, include_remote_data: typing.Optional[bool] = None
- id: str.
- include_remote_data: typing.Optional[bool]. Whether to include the original data Merge fetched from the third-party to produce these models.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import Merge
@@ -108,15 +137,35 @@ def retrieve(self, id: str, *, include_remote_data: typing.Optional[bool] = None
api_key="YOUR_API_KEY",
)
client.hris.employer_benefits.retrieve(
- id="id",
+ id="string",
)
"""
_response = self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", f"api/hris/v1/employer-benefits/{id}"),
- params=remove_none_from_dict({"include_remote_data": include_remote_data}),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "include_remote_data": include_remote_data,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(EmployerBenefit, _response.json()) # type: ignore
@@ -143,6 +192,7 @@ async def list(
modified_before: typing.Optional[dt.datetime] = None,
page_size: typing.Optional[int] = None,
remote_id: typing.Optional[str] = None,
+ request_options: typing.Optional[RequestOptions] = None,
) -> PaginatedEmployerBenefitList:
"""
Returns a list of `EmployerBenefit` objects.
@@ -165,6 +215,8 @@ async def list(
- page_size: typing.Optional[int]. Number of results to return per page.
- remote_id: typing.Optional[str]. The API provider's ID for the given object.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import AsyncMerge
@@ -177,21 +229,37 @@ async def list(
_response = await self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/hris/v1/employer-benefits"),
- params=remove_none_from_dict(
- {
- "created_after": serialize_datetime(created_after) if created_after is not None else None,
- "created_before": serialize_datetime(created_before) if created_before is not None else None,
- "cursor": cursor,
- "include_deleted_data": include_deleted_data,
- "include_remote_data": include_remote_data,
- "modified_after": serialize_datetime(modified_after) if modified_after is not None else None,
- "modified_before": serialize_datetime(modified_before) if modified_before is not None else None,
- "page_size": page_size,
- "remote_id": remote_id,
- }
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "created_after": serialize_datetime(created_after) if created_after is not None else None,
+ "created_before": serialize_datetime(created_before) if created_before is not None else None,
+ "cursor": cursor,
+ "include_deleted_data": include_deleted_data,
+ "include_remote_data": include_remote_data,
+ "modified_after": serialize_datetime(modified_after) if modified_after is not None else None,
+ "modified_before": serialize_datetime(modified_before) if modified_before is not None else None,
+ "page_size": page_size,
+ "remote_id": remote_id,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(PaginatedEmployerBenefitList, _response.json()) # type: ignore
@@ -201,7 +269,13 @@ async def list(
raise ApiError(status_code=_response.status_code, body=_response.text)
raise ApiError(status_code=_response.status_code, body=_response_json)
- async def retrieve(self, id: str, *, include_remote_data: typing.Optional[bool] = None) -> EmployerBenefit:
+ async def retrieve(
+ self,
+ id: str,
+ *,
+ include_remote_data: typing.Optional[bool] = None,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> EmployerBenefit:
"""
Returns an `EmployerBenefit` object with the given `id`.
@@ -209,6 +283,8 @@ async def retrieve(self, id: str, *, include_remote_data: typing.Optional[bool]
- id: str.
- include_remote_data: typing.Optional[bool]. Whether to include the original data Merge fetched from the third-party to produce these models.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import AsyncMerge
@@ -217,15 +293,35 @@ async def retrieve(self, id: str, *, include_remote_data: typing.Optional[bool]
api_key="YOUR_API_KEY",
)
await client.hris.employer_benefits.retrieve(
- id="id",
+ id="string",
)
"""
_response = await self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", f"api/hris/v1/employer-benefits/{id}"),
- params=remove_none_from_dict({"include_remote_data": include_remote_data}),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "include_remote_data": include_remote_data,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(EmployerBenefit, _response.json()) # type: ignore
diff --git a/src/merge/resources/hris/resources/employments/client.py b/src/merge/resources/hris/resources/employments/client.py
index 407bacc3..fd1bce56 100644
--- a/src/merge/resources/hris/resources/employments/client.py
+++ b/src/merge/resources/hris/resources/employments/client.py
@@ -8,7 +8,9 @@
from .....core.api_error import ApiError
from .....core.client_wrapper import AsyncClientWrapper, SyncClientWrapper
from .....core.datetime_utils import serialize_datetime
+from .....core.jsonable_encoder import jsonable_encoder
from .....core.remove_none_from_dict import remove_none_from_dict
+from .....core.request_options import RequestOptions
from ...types.employment import Employment
from ...types.paginated_employment_list import PaginatedEmploymentList
from .types.employments_list_request_expand import EmploymentsListRequestExpand
@@ -46,6 +48,7 @@ def list(
remote_fields: typing.Optional[EmploymentsListRequestRemoteFields] = None,
remote_id: typing.Optional[str] = None,
show_enum_origins: typing.Optional[EmploymentsListRequestShowEnumOrigins] = None,
+ request_options: typing.Optional[RequestOptions] = None,
) -> PaginatedEmploymentList:
"""
Returns a list of `Employment` objects.
@@ -78,6 +81,8 @@ def list(
- remote_id: typing.Optional[str]. The API provider's ID for the given object.
- show_enum_origins: typing.Optional[EmploymentsListRequestShowEnumOrigins]. Which fields should be returned in non-normalized form.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import Merge
from merge.resources.hris import (
@@ -101,26 +106,42 @@ def list(
_response = self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/hris/v1/employments"),
- params=remove_none_from_dict(
- {
- "created_after": serialize_datetime(created_after) if created_after is not None else None,
- "created_before": serialize_datetime(created_before) if created_before is not None else None,
- "cursor": cursor,
- "employee_id": employee_id,
- "expand": expand,
- "include_deleted_data": include_deleted_data,
- "include_remote_data": include_remote_data,
- "modified_after": serialize_datetime(modified_after) if modified_after is not None else None,
- "modified_before": serialize_datetime(modified_before) if modified_before is not None else None,
- "order_by": order_by,
- "page_size": page_size,
- "remote_fields": remote_fields,
- "remote_id": remote_id,
- "show_enum_origins": show_enum_origins,
- }
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "created_after": serialize_datetime(created_after) if created_after is not None else None,
+ "created_before": serialize_datetime(created_before) if created_before is not None else None,
+ "cursor": cursor,
+ "employee_id": employee_id,
+ "expand": expand,
+ "include_deleted_data": include_deleted_data,
+ "include_remote_data": include_remote_data,
+ "modified_after": serialize_datetime(modified_after) if modified_after is not None else None,
+ "modified_before": serialize_datetime(modified_before) if modified_before is not None else None,
+ "order_by": order_by,
+ "page_size": page_size,
+ "remote_fields": remote_fields,
+ "remote_id": remote_id,
+ "show_enum_origins": show_enum_origins,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(PaginatedEmploymentList, _response.json()) # type: ignore
@@ -138,6 +159,7 @@ def retrieve(
include_remote_data: typing.Optional[bool] = None,
remote_fields: typing.Optional[EmploymentsRetrieveRequestRemoteFields] = None,
show_enum_origins: typing.Optional[EmploymentsRetrieveRequestShowEnumOrigins] = None,
+ request_options: typing.Optional[RequestOptions] = None,
) -> Employment:
"""
Returns an `Employment` object with the given `id`.
@@ -152,6 +174,8 @@ def retrieve(
- remote_fields: typing.Optional[EmploymentsRetrieveRequestRemoteFields]. Deprecated. Use show_enum_origins.
- show_enum_origins: typing.Optional[EmploymentsRetrieveRequestShowEnumOrigins]. Which fields should be returned in non-normalized form.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import Merge
from merge.resources.hris import (
@@ -165,7 +189,7 @@ def retrieve(
api_key="YOUR_API_KEY",
)
client.hris.employments.retrieve(
- id="id",
+ id="string",
expand=EmploymentsRetrieveRequestExpand.EMPLOYEE,
remote_fields=EmploymentsRetrieveRequestRemoteFields.EMPLOYMENT_TYPE,
show_enum_origins=EmploymentsRetrieveRequestShowEnumOrigins.EMPLOYMENT_TYPE,
@@ -174,16 +198,32 @@ def retrieve(
_response = self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", f"api/hris/v1/employments/{id}"),
- params=remove_none_from_dict(
- {
- "expand": expand,
- "include_remote_data": include_remote_data,
- "remote_fields": remote_fields,
- "show_enum_origins": show_enum_origins,
- }
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "expand": expand,
+ "include_remote_data": include_remote_data,
+ "remote_fields": remote_fields,
+ "show_enum_origins": show_enum_origins,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(Employment, _response.json()) # type: ignore
@@ -215,6 +255,7 @@ async def list(
remote_fields: typing.Optional[EmploymentsListRequestRemoteFields] = None,
remote_id: typing.Optional[str] = None,
show_enum_origins: typing.Optional[EmploymentsListRequestShowEnumOrigins] = None,
+ request_options: typing.Optional[RequestOptions] = None,
) -> PaginatedEmploymentList:
"""
Returns a list of `Employment` objects.
@@ -247,6 +288,8 @@ async def list(
- remote_id: typing.Optional[str]. The API provider's ID for the given object.
- show_enum_origins: typing.Optional[EmploymentsListRequestShowEnumOrigins]. Which fields should be returned in non-normalized form.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import AsyncMerge
from merge.resources.hris import (
@@ -270,26 +313,42 @@ async def list(
_response = await self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/hris/v1/employments"),
- params=remove_none_from_dict(
- {
- "created_after": serialize_datetime(created_after) if created_after is not None else None,
- "created_before": serialize_datetime(created_before) if created_before is not None else None,
- "cursor": cursor,
- "employee_id": employee_id,
- "expand": expand,
- "include_deleted_data": include_deleted_data,
- "include_remote_data": include_remote_data,
- "modified_after": serialize_datetime(modified_after) if modified_after is not None else None,
- "modified_before": serialize_datetime(modified_before) if modified_before is not None else None,
- "order_by": order_by,
- "page_size": page_size,
- "remote_fields": remote_fields,
- "remote_id": remote_id,
- "show_enum_origins": show_enum_origins,
- }
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "created_after": serialize_datetime(created_after) if created_after is not None else None,
+ "created_before": serialize_datetime(created_before) if created_before is not None else None,
+ "cursor": cursor,
+ "employee_id": employee_id,
+ "expand": expand,
+ "include_deleted_data": include_deleted_data,
+ "include_remote_data": include_remote_data,
+ "modified_after": serialize_datetime(modified_after) if modified_after is not None else None,
+ "modified_before": serialize_datetime(modified_before) if modified_before is not None else None,
+ "order_by": order_by,
+ "page_size": page_size,
+ "remote_fields": remote_fields,
+ "remote_id": remote_id,
+ "show_enum_origins": show_enum_origins,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(PaginatedEmploymentList, _response.json()) # type: ignore
@@ -307,6 +366,7 @@ async def retrieve(
include_remote_data: typing.Optional[bool] = None,
remote_fields: typing.Optional[EmploymentsRetrieveRequestRemoteFields] = None,
show_enum_origins: typing.Optional[EmploymentsRetrieveRequestShowEnumOrigins] = None,
+ request_options: typing.Optional[RequestOptions] = None,
) -> Employment:
"""
Returns an `Employment` object with the given `id`.
@@ -321,6 +381,8 @@ async def retrieve(
- remote_fields: typing.Optional[EmploymentsRetrieveRequestRemoteFields]. Deprecated. Use show_enum_origins.
- show_enum_origins: typing.Optional[EmploymentsRetrieveRequestShowEnumOrigins]. Which fields should be returned in non-normalized form.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import AsyncMerge
from merge.resources.hris import (
@@ -334,7 +396,7 @@ async def retrieve(
api_key="YOUR_API_KEY",
)
await client.hris.employments.retrieve(
- id="id",
+ id="string",
expand=EmploymentsRetrieveRequestExpand.EMPLOYEE,
remote_fields=EmploymentsRetrieveRequestRemoteFields.EMPLOYMENT_TYPE,
show_enum_origins=EmploymentsRetrieveRequestShowEnumOrigins.EMPLOYMENT_TYPE,
@@ -343,16 +405,32 @@ async def retrieve(
_response = await self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", f"api/hris/v1/employments/{id}"),
- params=remove_none_from_dict(
- {
- "expand": expand,
- "include_remote_data": include_remote_data,
- "remote_fields": remote_fields,
- "show_enum_origins": show_enum_origins,
- }
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "expand": expand,
+ "include_remote_data": include_remote_data,
+ "remote_fields": remote_fields,
+ "show_enum_origins": show_enum_origins,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(Employment, _response.json()) # type: ignore
diff --git a/src/merge/resources/hris/resources/force_resync/client.py b/src/merge/resources/hris/resources/force_resync/client.py
index 6ad027d1..787c1c24 100644
--- a/src/merge/resources/hris/resources/force_resync/client.py
+++ b/src/merge/resources/hris/resources/force_resync/client.py
@@ -6,6 +6,9 @@
from .....core.api_error import ApiError
from .....core.client_wrapper import AsyncClientWrapper, SyncClientWrapper
+from .....core.jsonable_encoder import jsonable_encoder
+from .....core.remove_none_from_dict import remove_none_from_dict
+from .....core.request_options import RequestOptions
from ...types.sync_status import SyncStatus
try:
@@ -18,10 +21,14 @@ class ForceResyncClient:
def __init__(self, *, client_wrapper: SyncClientWrapper):
self._client_wrapper = client_wrapper
- def sync_status_resync_create(self) -> typing.List[SyncStatus]:
+ def sync_status_resync_create(
+ self, *, request_options: typing.Optional[RequestOptions] = None
+ ) -> typing.List[SyncStatus]:
"""
Force re-sync of all models. This is available for all organizations via the dashboard. Force re-sync is also available programmatically via API for monthly, quarterly, and highest sync frequency customers on the Core, Professional, or Enterprise plans. Doing so will consume a sync credit for the relevant linked account.
+ Parameters:
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import Merge
@@ -34,8 +41,23 @@ def sync_status_resync_create(self) -> typing.List[SyncStatus]:
_response = self._client_wrapper.httpx_client.request(
"POST",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/hris/v1/sync-status/resync"),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ request_options.get("additional_query_parameters") if request_options is not None else None
+ ),
+ json=jsonable_encoder(remove_none_from_dict(request_options.get("additional_body_parameters", {})))
+ if request_options is not None
+ else None,
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(typing.List[SyncStatus], _response.json()) # type: ignore
@@ -50,10 +72,14 @@ class AsyncForceResyncClient:
def __init__(self, *, client_wrapper: AsyncClientWrapper):
self._client_wrapper = client_wrapper
- async def sync_status_resync_create(self) -> typing.List[SyncStatus]:
+ async def sync_status_resync_create(
+ self, *, request_options: typing.Optional[RequestOptions] = None
+ ) -> typing.List[SyncStatus]:
"""
Force re-sync of all models. This is available for all organizations via the dashboard. Force re-sync is also available programmatically via API for monthly, quarterly, and highest sync frequency customers on the Core, Professional, or Enterprise plans. Doing so will consume a sync credit for the relevant linked account.
+ Parameters:
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import AsyncMerge
@@ -66,8 +92,23 @@ async def sync_status_resync_create(self) -> typing.List[SyncStatus]:
_response = await self._client_wrapper.httpx_client.request(
"POST",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/hris/v1/sync-status/resync"),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ request_options.get("additional_query_parameters") if request_options is not None else None
+ ),
+ json=jsonable_encoder(remove_none_from_dict(request_options.get("additional_body_parameters", {})))
+ if request_options is not None
+ else None,
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(typing.List[SyncStatus], _response.json()) # type: ignore
diff --git a/src/merge/resources/hris/resources/generate_key/client.py b/src/merge/resources/hris/resources/generate_key/client.py
index 20ee0f4d..854a0017 100644
--- a/src/merge/resources/hris/resources/generate_key/client.py
+++ b/src/merge/resources/hris/resources/generate_key/client.py
@@ -7,6 +7,8 @@
from .....core.api_error import ApiError
from .....core.client_wrapper import AsyncClientWrapper, SyncClientWrapper
from .....core.jsonable_encoder import jsonable_encoder
+from .....core.remove_none_from_dict import remove_none_from_dict
+from .....core.request_options import RequestOptions
from ...types.remote_key import RemoteKey
try:
@@ -22,12 +24,14 @@ class GenerateKeyClient:
def __init__(self, *, client_wrapper: SyncClientWrapper):
self._client_wrapper = client_wrapper
- def create(self, *, name: str) -> RemoteKey:
+ def create(self, *, name: str, request_options: typing.Optional[RequestOptions] = None) -> RemoteKey:
"""
Create a remote key.
Parameters:
- name: str.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import Merge
@@ -42,9 +46,26 @@ def create(self, *, name: str) -> RemoteKey:
_response = self._client_wrapper.httpx_client.request(
"POST",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/hris/v1/generate-key"),
- json=jsonable_encoder({"name": name}),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ request_options.get("additional_query_parameters") if request_options is not None else None
+ ),
+ json=jsonable_encoder({"name": name})
+ if request_options is None or request_options.get("additional_body_parameters") is None
+ else {
+ **jsonable_encoder({"name": name}),
+ **(jsonable_encoder(remove_none_from_dict(request_options.get("additional_body_parameters", {})))),
+ },
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(RemoteKey, _response.json()) # type: ignore
@@ -59,12 +80,14 @@ class AsyncGenerateKeyClient:
def __init__(self, *, client_wrapper: AsyncClientWrapper):
self._client_wrapper = client_wrapper
- async def create(self, *, name: str) -> RemoteKey:
+ async def create(self, *, name: str, request_options: typing.Optional[RequestOptions] = None) -> RemoteKey:
"""
Create a remote key.
Parameters:
- name: str.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import AsyncMerge
@@ -79,9 +102,26 @@ async def create(self, *, name: str) -> RemoteKey:
_response = await self._client_wrapper.httpx_client.request(
"POST",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/hris/v1/generate-key"),
- json=jsonable_encoder({"name": name}),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ request_options.get("additional_query_parameters") if request_options is not None else None
+ ),
+ json=jsonable_encoder({"name": name})
+ if request_options is None or request_options.get("additional_body_parameters") is None
+ else {
+ **jsonable_encoder({"name": name}),
+ **(jsonable_encoder(remove_none_from_dict(request_options.get("additional_body_parameters", {})))),
+ },
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(RemoteKey, _response.json()) # type: ignore
diff --git a/src/merge/resources/hris/resources/groups/client.py b/src/merge/resources/hris/resources/groups/client.py
index 953335cf..96597c32 100644
--- a/src/merge/resources/hris/resources/groups/client.py
+++ b/src/merge/resources/hris/resources/groups/client.py
@@ -5,12 +5,12 @@
import urllib.parse
from json.decoder import JSONDecodeError
-import typing_extensions
-
from .....core.api_error import ApiError
from .....core.client_wrapper import AsyncClientWrapper, SyncClientWrapper
from .....core.datetime_utils import serialize_datetime
+from .....core.jsonable_encoder import jsonable_encoder
from .....core.remove_none_from_dict import remove_none_from_dict
+from .....core.request_options import RequestOptions
from ...types.group import Group
from ...types.paginated_group_list import PaginatedGroupList
@@ -35,10 +35,11 @@ def list(
modified_after: typing.Optional[dt.datetime] = None,
modified_before: typing.Optional[dt.datetime] = None,
page_size: typing.Optional[int] = None,
- remote_fields: typing.Optional[typing_extensions.Literal["type"]] = None,
+ remote_fields: typing.Optional[typing.Literal["type"]] = None,
remote_id: typing.Optional[str] = None,
- show_enum_origins: typing.Optional[typing_extensions.Literal["type"]] = None,
+ show_enum_origins: typing.Optional[typing.Literal["type"]] = None,
types: typing.Optional[str] = None,
+ request_options: typing.Optional[RequestOptions] = None,
) -> PaginatedGroupList:
"""
Returns a list of `Group` objects.
@@ -60,13 +61,15 @@ def list(
- page_size: typing.Optional[int]. Number of results to return per page.
- - remote_fields: typing.Optional[typing_extensions.Literal["type"]]. Deprecated. Use show_enum_origins.
+ - remote_fields: typing.Optional[typing.Literal["type"]]. Deprecated. Use show_enum_origins.
- remote_id: typing.Optional[str]. The API provider's ID for the given object.
- - show_enum_origins: typing.Optional[typing_extensions.Literal["type"]]. Which fields should be returned in non-normalized form.
+ - show_enum_origins: typing.Optional[typing.Literal["type"]]. Which fields should be returned in non-normalized form.
- types: typing.Optional[str]. If provided, will only return groups of these types. Multiple values can be separated by commas.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import Merge
@@ -82,24 +85,40 @@ def list(
_response = self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/hris/v1/groups"),
- params=remove_none_from_dict(
- {
- "created_after": serialize_datetime(created_after) if created_after is not None else None,
- "created_before": serialize_datetime(created_before) if created_before is not None else None,
- "cursor": cursor,
- "include_deleted_data": include_deleted_data,
- "include_remote_data": include_remote_data,
- "modified_after": serialize_datetime(modified_after) if modified_after is not None else None,
- "modified_before": serialize_datetime(modified_before) if modified_before is not None else None,
- "page_size": page_size,
- "remote_fields": remote_fields,
- "remote_id": remote_id,
- "show_enum_origins": show_enum_origins,
- "types": types,
- }
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "created_after": serialize_datetime(created_after) if created_after is not None else None,
+ "created_before": serialize_datetime(created_before) if created_before is not None else None,
+ "cursor": cursor,
+ "include_deleted_data": include_deleted_data,
+ "include_remote_data": include_remote_data,
+ "modified_after": serialize_datetime(modified_after) if modified_after is not None else None,
+ "modified_before": serialize_datetime(modified_before) if modified_before is not None else None,
+ "page_size": page_size,
+ "remote_fields": remote_fields,
+ "remote_id": remote_id,
+ "show_enum_origins": show_enum_origins,
+ "types": types,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(PaginatedGroupList, _response.json()) # type: ignore
@@ -114,8 +133,9 @@ def retrieve(
id: str,
*,
include_remote_data: typing.Optional[bool] = None,
- remote_fields: typing.Optional[typing_extensions.Literal["type"]] = None,
- show_enum_origins: typing.Optional[typing_extensions.Literal["type"]] = None,
+ remote_fields: typing.Optional[typing.Literal["type"]] = None,
+ show_enum_origins: typing.Optional[typing.Literal["type"]] = None,
+ request_options: typing.Optional[RequestOptions] = None,
) -> Group:
"""
Returns a `Group` object with the given `id`.
@@ -125,9 +145,11 @@ def retrieve(
- include_remote_data: typing.Optional[bool]. Whether to include the original data Merge fetched from the third-party to produce these models.
- - remote_fields: typing.Optional[typing_extensions.Literal["type"]]. Deprecated. Use show_enum_origins.
+ - remote_fields: typing.Optional[typing.Literal["type"]]. Deprecated. Use show_enum_origins.
- - show_enum_origins: typing.Optional[typing_extensions.Literal["type"]]. Which fields should be returned in non-normalized form.
+ - show_enum_origins: typing.Optional[typing.Literal["type"]]. Which fields should be returned in non-normalized form.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import Merge
@@ -136,7 +158,7 @@ def retrieve(
api_key="YOUR_API_KEY",
)
client.hris.groups.retrieve(
- id="id",
+ id="string",
remote_fields="type",
show_enum_origins="type",
)
@@ -144,15 +166,31 @@ def retrieve(
_response = self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", f"api/hris/v1/groups/{id}"),
- params=remove_none_from_dict(
- {
- "include_remote_data": include_remote_data,
- "remote_fields": remote_fields,
- "show_enum_origins": show_enum_origins,
- }
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "include_remote_data": include_remote_data,
+ "remote_fields": remote_fields,
+ "show_enum_origins": show_enum_origins,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(Group, _response.json()) # type: ignore
@@ -178,10 +216,11 @@ async def list(
modified_after: typing.Optional[dt.datetime] = None,
modified_before: typing.Optional[dt.datetime] = None,
page_size: typing.Optional[int] = None,
- remote_fields: typing.Optional[typing_extensions.Literal["type"]] = None,
+ remote_fields: typing.Optional[typing.Literal["type"]] = None,
remote_id: typing.Optional[str] = None,
- show_enum_origins: typing.Optional[typing_extensions.Literal["type"]] = None,
+ show_enum_origins: typing.Optional[typing.Literal["type"]] = None,
types: typing.Optional[str] = None,
+ request_options: typing.Optional[RequestOptions] = None,
) -> PaginatedGroupList:
"""
Returns a list of `Group` objects.
@@ -203,13 +242,15 @@ async def list(
- page_size: typing.Optional[int]. Number of results to return per page.
- - remote_fields: typing.Optional[typing_extensions.Literal["type"]]. Deprecated. Use show_enum_origins.
+ - remote_fields: typing.Optional[typing.Literal["type"]]. Deprecated. Use show_enum_origins.
- remote_id: typing.Optional[str]. The API provider's ID for the given object.
- - show_enum_origins: typing.Optional[typing_extensions.Literal["type"]]. Which fields should be returned in non-normalized form.
+ - show_enum_origins: typing.Optional[typing.Literal["type"]]. Which fields should be returned in non-normalized form.
- types: typing.Optional[str]. If provided, will only return groups of these types. Multiple values can be separated by commas.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import AsyncMerge
@@ -225,24 +266,40 @@ async def list(
_response = await self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/hris/v1/groups"),
- params=remove_none_from_dict(
- {
- "created_after": serialize_datetime(created_after) if created_after is not None else None,
- "created_before": serialize_datetime(created_before) if created_before is not None else None,
- "cursor": cursor,
- "include_deleted_data": include_deleted_data,
- "include_remote_data": include_remote_data,
- "modified_after": serialize_datetime(modified_after) if modified_after is not None else None,
- "modified_before": serialize_datetime(modified_before) if modified_before is not None else None,
- "page_size": page_size,
- "remote_fields": remote_fields,
- "remote_id": remote_id,
- "show_enum_origins": show_enum_origins,
- "types": types,
- }
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "created_after": serialize_datetime(created_after) if created_after is not None else None,
+ "created_before": serialize_datetime(created_before) if created_before is not None else None,
+ "cursor": cursor,
+ "include_deleted_data": include_deleted_data,
+ "include_remote_data": include_remote_data,
+ "modified_after": serialize_datetime(modified_after) if modified_after is not None else None,
+ "modified_before": serialize_datetime(modified_before) if modified_before is not None else None,
+ "page_size": page_size,
+ "remote_fields": remote_fields,
+ "remote_id": remote_id,
+ "show_enum_origins": show_enum_origins,
+ "types": types,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(PaginatedGroupList, _response.json()) # type: ignore
@@ -257,8 +314,9 @@ async def retrieve(
id: str,
*,
include_remote_data: typing.Optional[bool] = None,
- remote_fields: typing.Optional[typing_extensions.Literal["type"]] = None,
- show_enum_origins: typing.Optional[typing_extensions.Literal["type"]] = None,
+ remote_fields: typing.Optional[typing.Literal["type"]] = None,
+ show_enum_origins: typing.Optional[typing.Literal["type"]] = None,
+ request_options: typing.Optional[RequestOptions] = None,
) -> Group:
"""
Returns a `Group` object with the given `id`.
@@ -268,9 +326,11 @@ async def retrieve(
- include_remote_data: typing.Optional[bool]. Whether to include the original data Merge fetched from the third-party to produce these models.
- - remote_fields: typing.Optional[typing_extensions.Literal["type"]]. Deprecated. Use show_enum_origins.
+ - remote_fields: typing.Optional[typing.Literal["type"]]. Deprecated. Use show_enum_origins.
- - show_enum_origins: typing.Optional[typing_extensions.Literal["type"]]. Which fields should be returned in non-normalized form.
+ - show_enum_origins: typing.Optional[typing.Literal["type"]]. Which fields should be returned in non-normalized form.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import AsyncMerge
@@ -279,7 +339,7 @@ async def retrieve(
api_key="YOUR_API_KEY",
)
await client.hris.groups.retrieve(
- id="id",
+ id="string",
remote_fields="type",
show_enum_origins="type",
)
@@ -287,15 +347,31 @@ async def retrieve(
_response = await self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", f"api/hris/v1/groups/{id}"),
- params=remove_none_from_dict(
- {
- "include_remote_data": include_remote_data,
- "remote_fields": remote_fields,
- "show_enum_origins": show_enum_origins,
- }
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "include_remote_data": include_remote_data,
+ "remote_fields": remote_fields,
+ "show_enum_origins": show_enum_origins,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(Group, _response.json()) # type: ignore
diff --git a/src/merge/resources/hris/resources/issues/client.py b/src/merge/resources/hris/resources/issues/client.py
index 5ab1d52f..feee4f8e 100644
--- a/src/merge/resources/hris/resources/issues/client.py
+++ b/src/merge/resources/hris/resources/issues/client.py
@@ -8,7 +8,9 @@
from .....core.api_error import ApiError
from .....core.client_wrapper import AsyncClientWrapper, SyncClientWrapper
from .....core.datetime_utils import serialize_datetime
+from .....core.jsonable_encoder import jsonable_encoder
from .....core.remove_none_from_dict import remove_none_from_dict
+from .....core.request_options import RequestOptions
from ...types.issue import Issue
from ...types.paginated_issue_list import PaginatedIssueList
from .types.issues_list_request_status import IssuesListRequestStatus
@@ -39,6 +41,7 @@ def list(
page_size: typing.Optional[int] = None,
start_date: typing.Optional[str] = None,
status: typing.Optional[IssuesListRequestStatus] = None,
+ request_options: typing.Optional[RequestOptions] = None,
) -> PaginatedIssueList:
"""
Gets issues.
@@ -71,7 +74,9 @@ def list(
- status: typing.Optional[IssuesListRequestStatus]. Status of the issue. Options: ('ONGOING', 'RESOLVED')
- `ONGOING` - ONGOING
- - `RESOLVED` - RESOLVED---
+ - `RESOLVED` - RESOLVED
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
+ ---
from merge.client import Merge
from merge.resources.hris import IssuesListRequestStatus
@@ -86,33 +91,49 @@ def list(
_response = self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/hris/v1/issues"),
- params=remove_none_from_dict(
- {
- "account_token": account_token,
- "cursor": cursor,
- "end_date": end_date,
- "end_user_organization_name": end_user_organization_name,
- "first_incident_time_after": serialize_datetime(first_incident_time_after)
- if first_incident_time_after is not None
- else None,
- "first_incident_time_before": serialize_datetime(first_incident_time_before)
- if first_incident_time_before is not None
- else None,
- "include_muted": include_muted,
- "integration_name": integration_name,
- "last_incident_time_after": serialize_datetime(last_incident_time_after)
- if last_incident_time_after is not None
- else None,
- "last_incident_time_before": serialize_datetime(last_incident_time_before)
- if last_incident_time_before is not None
- else None,
- "page_size": page_size,
- "start_date": start_date,
- "status": status,
- }
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "account_token": account_token,
+ "cursor": cursor,
+ "end_date": end_date,
+ "end_user_organization_name": end_user_organization_name,
+ "first_incident_time_after": serialize_datetime(first_incident_time_after)
+ if first_incident_time_after is not None
+ else None,
+ "first_incident_time_before": serialize_datetime(first_incident_time_before)
+ if first_incident_time_before is not None
+ else None,
+ "include_muted": include_muted,
+ "integration_name": integration_name,
+ "last_incident_time_after": serialize_datetime(last_incident_time_after)
+ if last_incident_time_after is not None
+ else None,
+ "last_incident_time_before": serialize_datetime(last_incident_time_before)
+ if last_incident_time_before is not None
+ else None,
+ "page_size": page_size,
+ "start_date": start_date,
+ "status": status,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(PaginatedIssueList, _response.json()) # type: ignore
@@ -122,12 +143,14 @@ def list(
raise ApiError(status_code=_response.status_code, body=_response.text)
raise ApiError(status_code=_response.status_code, body=_response_json)
- def retrieve(self, id: str) -> Issue:
+ def retrieve(self, id: str, *, request_options: typing.Optional[RequestOptions] = None) -> Issue:
"""
Get a specific issue.
Parameters:
- id: str.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import Merge
@@ -136,14 +159,26 @@ def retrieve(self, id: str) -> Issue:
api_key="YOUR_API_KEY",
)
client.hris.issues.retrieve(
- id="id",
+ id="string",
)
"""
_response = self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", f"api/hris/v1/issues/{id}"),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ request_options.get("additional_query_parameters") if request_options is not None else None
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(Issue, _response.json()) # type: ignore
@@ -174,6 +209,7 @@ async def list(
page_size: typing.Optional[int] = None,
start_date: typing.Optional[str] = None,
status: typing.Optional[IssuesListRequestStatus] = None,
+ request_options: typing.Optional[RequestOptions] = None,
) -> PaginatedIssueList:
"""
Gets issues.
@@ -206,7 +242,9 @@ async def list(
- status: typing.Optional[IssuesListRequestStatus]. Status of the issue. Options: ('ONGOING', 'RESOLVED')
- `ONGOING` - ONGOING
- - `RESOLVED` - RESOLVED---
+ - `RESOLVED` - RESOLVED
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
+ ---
from merge.client import AsyncMerge
from merge.resources.hris import IssuesListRequestStatus
@@ -221,33 +259,49 @@ async def list(
_response = await self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/hris/v1/issues"),
- params=remove_none_from_dict(
- {
- "account_token": account_token,
- "cursor": cursor,
- "end_date": end_date,
- "end_user_organization_name": end_user_organization_name,
- "first_incident_time_after": serialize_datetime(first_incident_time_after)
- if first_incident_time_after is not None
- else None,
- "first_incident_time_before": serialize_datetime(first_incident_time_before)
- if first_incident_time_before is not None
- else None,
- "include_muted": include_muted,
- "integration_name": integration_name,
- "last_incident_time_after": serialize_datetime(last_incident_time_after)
- if last_incident_time_after is not None
- else None,
- "last_incident_time_before": serialize_datetime(last_incident_time_before)
- if last_incident_time_before is not None
- else None,
- "page_size": page_size,
- "start_date": start_date,
- "status": status,
- }
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "account_token": account_token,
+ "cursor": cursor,
+ "end_date": end_date,
+ "end_user_organization_name": end_user_organization_name,
+ "first_incident_time_after": serialize_datetime(first_incident_time_after)
+ if first_incident_time_after is not None
+ else None,
+ "first_incident_time_before": serialize_datetime(first_incident_time_before)
+ if first_incident_time_before is not None
+ else None,
+ "include_muted": include_muted,
+ "integration_name": integration_name,
+ "last_incident_time_after": serialize_datetime(last_incident_time_after)
+ if last_incident_time_after is not None
+ else None,
+ "last_incident_time_before": serialize_datetime(last_incident_time_before)
+ if last_incident_time_before is not None
+ else None,
+ "page_size": page_size,
+ "start_date": start_date,
+ "status": status,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(PaginatedIssueList, _response.json()) # type: ignore
@@ -257,12 +311,14 @@ async def list(
raise ApiError(status_code=_response.status_code, body=_response.text)
raise ApiError(status_code=_response.status_code, body=_response_json)
- async def retrieve(self, id: str) -> Issue:
+ async def retrieve(self, id: str, *, request_options: typing.Optional[RequestOptions] = None) -> Issue:
"""
Get a specific issue.
Parameters:
- id: str.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import AsyncMerge
@@ -271,14 +327,26 @@ async def retrieve(self, id: str) -> Issue:
api_key="YOUR_API_KEY",
)
await client.hris.issues.retrieve(
- id="id",
+ id="string",
)
"""
_response = await self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", f"api/hris/v1/issues/{id}"),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ request_options.get("additional_query_parameters") if request_options is not None else None
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(Issue, _response.json()) # type: ignore
diff --git a/src/merge/resources/hris/resources/link_token/client.py b/src/merge/resources/hris/resources/link_token/client.py
index 74d1a19e..f9a4e09c 100644
--- a/src/merge/resources/hris/resources/link_token/client.py
+++ b/src/merge/resources/hris/resources/link_token/client.py
@@ -7,6 +7,8 @@
from .....core.api_error import ApiError
from .....core.client_wrapper import AsyncClientWrapper, SyncClientWrapper
from .....core.jsonable_encoder import jsonable_encoder
+from .....core.remove_none_from_dict import remove_none_from_dict
+from .....core.request_options import RequestOptions
from ...types.categories_enum import CategoriesEnum
from ...types.common_model_scopes_body_request import CommonModelScopesBodyRequest
from ...types.link_token import LinkToken
@@ -35,6 +37,7 @@ def create(
link_expiry_mins: typing.Optional[int] = OMIT,
should_create_magic_link_url: typing.Optional[bool] = OMIT,
common_models: typing.Optional[typing.List[CommonModelScopesBodyRequest]] = OMIT,
+ request_options: typing.Optional[RequestOptions] = None,
) -> LinkToken:
"""
Creates a link token to be used when linking a new end user.
@@ -55,6 +58,21 @@ def create(
- should_create_magic_link_url: typing.Optional[bool]. Whether to generate a Magic Link URL. Defaults to false. For more information on Magic Link, see https://merge.dev/blog/integrations-fast-say-hello-to-magic-link.
- common_models: typing.Optional[typing.List[CommonModelScopesBodyRequest]]. An array of objects to specify the models and fields that will be disabled for a given Linked Account. Each object uses model_id, enabled_actions, and disabled_fields to specify the model, method, and fields that are scoped for a given Linked Account.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
+ ---
+ from merge.client import Merge
+
+ client = Merge(
+ account_token="YOUR_ACCOUNT_TOKEN",
+ api_key="YOUR_API_KEY",
+ )
+ client.hris.link_token.create(
+ end_user_email_address="string",
+ end_user_organization_name="string",
+ end_user_origin_id="string",
+ categories=[],
+ )
"""
_request: typing.Dict[str, typing.Any] = {
"end_user_email_address": end_user_email_address,
@@ -73,9 +91,26 @@ def create(
_response = self._client_wrapper.httpx_client.request(
"POST",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/hris/v1/link-token"),
- json=jsonable_encoder(_request),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ request_options.get("additional_query_parameters") if request_options is not None else None
+ ),
+ json=jsonable_encoder(_request)
+ if request_options is None or request_options.get("additional_body_parameters") is None
+ else {
+ **jsonable_encoder(_request),
+ **(jsonable_encoder(remove_none_from_dict(request_options.get("additional_body_parameters", {})))),
+ },
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(LinkToken, _response.json()) # type: ignore
@@ -101,6 +136,7 @@ async def create(
link_expiry_mins: typing.Optional[int] = OMIT,
should_create_magic_link_url: typing.Optional[bool] = OMIT,
common_models: typing.Optional[typing.List[CommonModelScopesBodyRequest]] = OMIT,
+ request_options: typing.Optional[RequestOptions] = None,
) -> LinkToken:
"""
Creates a link token to be used when linking a new end user.
@@ -121,6 +157,21 @@ async def create(
- should_create_magic_link_url: typing.Optional[bool]. Whether to generate a Magic Link URL. Defaults to false. For more information on Magic Link, see https://merge.dev/blog/integrations-fast-say-hello-to-magic-link.
- common_models: typing.Optional[typing.List[CommonModelScopesBodyRequest]]. An array of objects to specify the models and fields that will be disabled for a given Linked Account. Each object uses model_id, enabled_actions, and disabled_fields to specify the model, method, and fields that are scoped for a given Linked Account.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
+ ---
+ from merge.client import AsyncMerge
+
+ client = AsyncMerge(
+ account_token="YOUR_ACCOUNT_TOKEN",
+ api_key="YOUR_API_KEY",
+ )
+ await client.hris.link_token.create(
+ end_user_email_address="string",
+ end_user_organization_name="string",
+ end_user_origin_id="string",
+ categories=[],
+ )
"""
_request: typing.Dict[str, typing.Any] = {
"end_user_email_address": end_user_email_address,
@@ -139,9 +190,26 @@ async def create(
_response = await self._client_wrapper.httpx_client.request(
"POST",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/hris/v1/link-token"),
- json=jsonable_encoder(_request),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ request_options.get("additional_query_parameters") if request_options is not None else None
+ ),
+ json=jsonable_encoder(_request)
+ if request_options is None or request_options.get("additional_body_parameters") is None
+ else {
+ **jsonable_encoder(_request),
+ **(jsonable_encoder(remove_none_from_dict(request_options.get("additional_body_parameters", {})))),
+ },
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(LinkToken, _response.json()) # type: ignore
diff --git a/src/merge/resources/hris/resources/linked_accounts/client.py b/src/merge/resources/hris/resources/linked_accounts/client.py
index 47e07887..50073260 100644
--- a/src/merge/resources/hris/resources/linked_accounts/client.py
+++ b/src/merge/resources/hris/resources/linked_accounts/client.py
@@ -6,7 +6,9 @@
from .....core.api_error import ApiError
from .....core.client_wrapper import AsyncClientWrapper, SyncClientWrapper
+from .....core.jsonable_encoder import jsonable_encoder
from .....core.remove_none_from_dict import remove_none_from_dict
+from .....core.request_options import RequestOptions
from ...types.paginated_account_details_and_actions_list import PaginatedAccountDetailsAndActionsList
from .types.linked_accounts_list_request_category import LinkedAccountsListRequestCategory
@@ -36,6 +38,7 @@ def list(
is_test_account: typing.Optional[str] = None,
page_size: typing.Optional[int] = None,
status: typing.Optional[str] = None,
+ request_options: typing.Optional[RequestOptions] = None,
) -> PaginatedAccountDetailsAndActionsList:
"""
List linked accounts for your organization.
@@ -73,6 +76,8 @@ def list(
- page_size: typing.Optional[int]. Number of results to return per page.
- status: typing.Optional[str]. Filter by status. Options: `COMPLETE`, `INCOMPLETE`, `RELINK_NEEDED`
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import Merge
from merge.resources.hris import LinkedAccountsListRequestCategory
@@ -88,25 +93,41 @@ def list(
_response = self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/hris/v1/linked-accounts"),
- params=remove_none_from_dict(
- {
- "category": category,
- "cursor": cursor,
- "end_user_email_address": end_user_email_address,
- "end_user_organization_name": end_user_organization_name,
- "end_user_origin_id": end_user_origin_id,
- "end_user_origin_ids": end_user_origin_ids,
- "id": id,
- "ids": ids,
- "include_duplicates": include_duplicates,
- "integration_name": integration_name,
- "is_test_account": is_test_account,
- "page_size": page_size,
- "status": status,
- }
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "category": category,
+ "cursor": cursor,
+ "end_user_email_address": end_user_email_address,
+ "end_user_organization_name": end_user_organization_name,
+ "end_user_origin_id": end_user_origin_id,
+ "end_user_origin_ids": end_user_origin_ids,
+ "id": id,
+ "ids": ids,
+ "include_duplicates": include_duplicates,
+ "integration_name": integration_name,
+ "is_test_account": is_test_account,
+ "page_size": page_size,
+ "status": status,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(PaginatedAccountDetailsAndActionsList, _response.json()) # type: ignore
@@ -137,6 +158,7 @@ async def list(
is_test_account: typing.Optional[str] = None,
page_size: typing.Optional[int] = None,
status: typing.Optional[str] = None,
+ request_options: typing.Optional[RequestOptions] = None,
) -> PaginatedAccountDetailsAndActionsList:
"""
List linked accounts for your organization.
@@ -174,6 +196,8 @@ async def list(
- page_size: typing.Optional[int]. Number of results to return per page.
- status: typing.Optional[str]. Filter by status. Options: `COMPLETE`, `INCOMPLETE`, `RELINK_NEEDED`
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import AsyncMerge
from merge.resources.hris import LinkedAccountsListRequestCategory
@@ -189,25 +213,41 @@ async def list(
_response = await self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/hris/v1/linked-accounts"),
- params=remove_none_from_dict(
- {
- "category": category,
- "cursor": cursor,
- "end_user_email_address": end_user_email_address,
- "end_user_organization_name": end_user_organization_name,
- "end_user_origin_id": end_user_origin_id,
- "end_user_origin_ids": end_user_origin_ids,
- "id": id,
- "ids": ids,
- "include_duplicates": include_duplicates,
- "integration_name": integration_name,
- "is_test_account": is_test_account,
- "page_size": page_size,
- "status": status,
- }
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "category": category,
+ "cursor": cursor,
+ "end_user_email_address": end_user_email_address,
+ "end_user_organization_name": end_user_organization_name,
+ "end_user_origin_id": end_user_origin_id,
+ "end_user_origin_ids": end_user_origin_ids,
+ "id": id,
+ "ids": ids,
+ "include_duplicates": include_duplicates,
+ "integration_name": integration_name,
+ "is_test_account": is_test_account,
+ "page_size": page_size,
+ "status": status,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(PaginatedAccountDetailsAndActionsList, _response.json()) # type: ignore
diff --git a/src/merge/resources/hris/resources/locations/client.py b/src/merge/resources/hris/resources/locations/client.py
index ff1d4300..80163848 100644
--- a/src/merge/resources/hris/resources/locations/client.py
+++ b/src/merge/resources/hris/resources/locations/client.py
@@ -5,12 +5,12 @@
import urllib.parse
from json.decoder import JSONDecodeError
-import typing_extensions
-
from .....core.api_error import ApiError
from .....core.client_wrapper import AsyncClientWrapper, SyncClientWrapper
from .....core.datetime_utils import serialize_datetime
+from .....core.jsonable_encoder import jsonable_encoder
from .....core.remove_none_from_dict import remove_none_from_dict
+from .....core.request_options import RequestOptions
from ...types.location import Location
from ...types.paginated_location_list import PaginatedLocationList
from .types.locations_list_request_location_type import LocationsListRequestLocationType
@@ -37,9 +37,10 @@ def list(
modified_after: typing.Optional[dt.datetime] = None,
modified_before: typing.Optional[dt.datetime] = None,
page_size: typing.Optional[int] = None,
- remote_fields: typing.Optional[typing_extensions.Literal["location_type"]] = None,
+ remote_fields: typing.Optional[typing.Literal["location_type"]] = None,
remote_id: typing.Optional[str] = None,
- show_enum_origins: typing.Optional[typing_extensions.Literal["location_type"]] = None,
+ show_enum_origins: typing.Optional[typing.Literal["location_type"]] = None,
+ request_options: typing.Optional[RequestOptions] = None,
) -> PaginatedLocationList:
"""
Returns a list of `Location` objects.
@@ -65,11 +66,13 @@ def list(
- page_size: typing.Optional[int]. Number of results to return per page.
- - remote_fields: typing.Optional[typing_extensions.Literal["location_type"]]. Deprecated. Use show_enum_origins.
+ - remote_fields: typing.Optional[typing.Literal["location_type"]]. Deprecated. Use show_enum_origins.
- remote_id: typing.Optional[str]. The API provider's ID for the given object.
- - show_enum_origins: typing.Optional[typing_extensions.Literal["location_type"]]. Which fields should be returned in non-normalized form.
+ - show_enum_origins: typing.Optional[typing.Literal["location_type"]]. Which fields should be returned in non-normalized form.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import Merge
from merge.resources.hris import LocationsListRequestLocationType
@@ -87,24 +90,40 @@ def list(
_response = self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/hris/v1/locations"),
- params=remove_none_from_dict(
- {
- "created_after": serialize_datetime(created_after) if created_after is not None else None,
- "created_before": serialize_datetime(created_before) if created_before is not None else None,
- "cursor": cursor,
- "include_deleted_data": include_deleted_data,
- "include_remote_data": include_remote_data,
- "location_type": location_type,
- "modified_after": serialize_datetime(modified_after) if modified_after is not None else None,
- "modified_before": serialize_datetime(modified_before) if modified_before is not None else None,
- "page_size": page_size,
- "remote_fields": remote_fields,
- "remote_id": remote_id,
- "show_enum_origins": show_enum_origins,
- }
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "created_after": serialize_datetime(created_after) if created_after is not None else None,
+ "created_before": serialize_datetime(created_before) if created_before is not None else None,
+ "cursor": cursor,
+ "include_deleted_data": include_deleted_data,
+ "include_remote_data": include_remote_data,
+ "location_type": location_type,
+ "modified_after": serialize_datetime(modified_after) if modified_after is not None else None,
+ "modified_before": serialize_datetime(modified_before) if modified_before is not None else None,
+ "page_size": page_size,
+ "remote_fields": remote_fields,
+ "remote_id": remote_id,
+ "show_enum_origins": show_enum_origins,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(PaginatedLocationList, _response.json()) # type: ignore
@@ -119,8 +138,9 @@ def retrieve(
id: str,
*,
include_remote_data: typing.Optional[bool] = None,
- remote_fields: typing.Optional[typing_extensions.Literal["location_type"]] = None,
- show_enum_origins: typing.Optional[typing_extensions.Literal["location_type"]] = None,
+ remote_fields: typing.Optional[typing.Literal["location_type"]] = None,
+ show_enum_origins: typing.Optional[typing.Literal["location_type"]] = None,
+ request_options: typing.Optional[RequestOptions] = None,
) -> Location:
"""
Returns a `Location` object with the given `id`.
@@ -130,9 +150,11 @@ def retrieve(
- include_remote_data: typing.Optional[bool]. Whether to include the original data Merge fetched from the third-party to produce these models.
- - remote_fields: typing.Optional[typing_extensions.Literal["location_type"]]. Deprecated. Use show_enum_origins.
+ - remote_fields: typing.Optional[typing.Literal["location_type"]]. Deprecated. Use show_enum_origins.
- - show_enum_origins: typing.Optional[typing_extensions.Literal["location_type"]]. Which fields should be returned in non-normalized form.
+ - show_enum_origins: typing.Optional[typing.Literal["location_type"]]. Which fields should be returned in non-normalized form.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import Merge
@@ -141,7 +163,7 @@ def retrieve(
api_key="YOUR_API_KEY",
)
client.hris.locations.retrieve(
- id="id",
+ id="string",
remote_fields="location_type",
show_enum_origins="location_type",
)
@@ -149,15 +171,31 @@ def retrieve(
_response = self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", f"api/hris/v1/locations/{id}"),
- params=remove_none_from_dict(
- {
- "include_remote_data": include_remote_data,
- "remote_fields": remote_fields,
- "show_enum_origins": show_enum_origins,
- }
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "include_remote_data": include_remote_data,
+ "remote_fields": remote_fields,
+ "show_enum_origins": show_enum_origins,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(Location, _response.json()) # type: ignore
@@ -184,9 +222,10 @@ async def list(
modified_after: typing.Optional[dt.datetime] = None,
modified_before: typing.Optional[dt.datetime] = None,
page_size: typing.Optional[int] = None,
- remote_fields: typing.Optional[typing_extensions.Literal["location_type"]] = None,
+ remote_fields: typing.Optional[typing.Literal["location_type"]] = None,
remote_id: typing.Optional[str] = None,
- show_enum_origins: typing.Optional[typing_extensions.Literal["location_type"]] = None,
+ show_enum_origins: typing.Optional[typing.Literal["location_type"]] = None,
+ request_options: typing.Optional[RequestOptions] = None,
) -> PaginatedLocationList:
"""
Returns a list of `Location` objects.
@@ -212,11 +251,13 @@ async def list(
- page_size: typing.Optional[int]. Number of results to return per page.
- - remote_fields: typing.Optional[typing_extensions.Literal["location_type"]]. Deprecated. Use show_enum_origins.
+ - remote_fields: typing.Optional[typing.Literal["location_type"]]. Deprecated. Use show_enum_origins.
- remote_id: typing.Optional[str]. The API provider's ID for the given object.
- - show_enum_origins: typing.Optional[typing_extensions.Literal["location_type"]]. Which fields should be returned in non-normalized form.
+ - show_enum_origins: typing.Optional[typing.Literal["location_type"]]. Which fields should be returned in non-normalized form.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import AsyncMerge
from merge.resources.hris import LocationsListRequestLocationType
@@ -234,24 +275,40 @@ async def list(
_response = await self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/hris/v1/locations"),
- params=remove_none_from_dict(
- {
- "created_after": serialize_datetime(created_after) if created_after is not None else None,
- "created_before": serialize_datetime(created_before) if created_before is not None else None,
- "cursor": cursor,
- "include_deleted_data": include_deleted_data,
- "include_remote_data": include_remote_data,
- "location_type": location_type,
- "modified_after": serialize_datetime(modified_after) if modified_after is not None else None,
- "modified_before": serialize_datetime(modified_before) if modified_before is not None else None,
- "page_size": page_size,
- "remote_fields": remote_fields,
- "remote_id": remote_id,
- "show_enum_origins": show_enum_origins,
- }
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "created_after": serialize_datetime(created_after) if created_after is not None else None,
+ "created_before": serialize_datetime(created_before) if created_before is not None else None,
+ "cursor": cursor,
+ "include_deleted_data": include_deleted_data,
+ "include_remote_data": include_remote_data,
+ "location_type": location_type,
+ "modified_after": serialize_datetime(modified_after) if modified_after is not None else None,
+ "modified_before": serialize_datetime(modified_before) if modified_before is not None else None,
+ "page_size": page_size,
+ "remote_fields": remote_fields,
+ "remote_id": remote_id,
+ "show_enum_origins": show_enum_origins,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(PaginatedLocationList, _response.json()) # type: ignore
@@ -266,8 +323,9 @@ async def retrieve(
id: str,
*,
include_remote_data: typing.Optional[bool] = None,
- remote_fields: typing.Optional[typing_extensions.Literal["location_type"]] = None,
- show_enum_origins: typing.Optional[typing_extensions.Literal["location_type"]] = None,
+ remote_fields: typing.Optional[typing.Literal["location_type"]] = None,
+ show_enum_origins: typing.Optional[typing.Literal["location_type"]] = None,
+ request_options: typing.Optional[RequestOptions] = None,
) -> Location:
"""
Returns a `Location` object with the given `id`.
@@ -277,9 +335,11 @@ async def retrieve(
- include_remote_data: typing.Optional[bool]. Whether to include the original data Merge fetched from the third-party to produce these models.
- - remote_fields: typing.Optional[typing_extensions.Literal["location_type"]]. Deprecated. Use show_enum_origins.
+ - remote_fields: typing.Optional[typing.Literal["location_type"]]. Deprecated. Use show_enum_origins.
- - show_enum_origins: typing.Optional[typing_extensions.Literal["location_type"]]. Which fields should be returned in non-normalized form.
+ - show_enum_origins: typing.Optional[typing.Literal["location_type"]]. Which fields should be returned in non-normalized form.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import AsyncMerge
@@ -288,7 +348,7 @@ async def retrieve(
api_key="YOUR_API_KEY",
)
await client.hris.locations.retrieve(
- id="id",
+ id="string",
remote_fields="location_type",
show_enum_origins="location_type",
)
@@ -296,15 +356,31 @@ async def retrieve(
_response = await self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", f"api/hris/v1/locations/{id}"),
- params=remove_none_from_dict(
- {
- "include_remote_data": include_remote_data,
- "remote_fields": remote_fields,
- "show_enum_origins": show_enum_origins,
- }
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "include_remote_data": include_remote_data,
+ "remote_fields": remote_fields,
+ "show_enum_origins": show_enum_origins,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(Location, _response.json()) # type: ignore
diff --git a/src/merge/resources/hris/resources/passthrough/client.py b/src/merge/resources/hris/resources/passthrough/client.py
index cb940f38..83fe2d20 100644
--- a/src/merge/resources/hris/resources/passthrough/client.py
+++ b/src/merge/resources/hris/resources/passthrough/client.py
@@ -7,6 +7,8 @@
from .....core.api_error import ApiError
from .....core.client_wrapper import AsyncClientWrapper, SyncClientWrapper
from .....core.jsonable_encoder import jsonable_encoder
+from .....core.remove_none_from_dict import remove_none_from_dict
+from .....core.request_options import RequestOptions
from ...types.data_passthrough_request import DataPassthroughRequest
from ...types.remote_response import RemoteResponse
@@ -23,19 +25,60 @@ class PassthroughClient:
def __init__(self, *, client_wrapper: SyncClientWrapper):
self._client_wrapper = client_wrapper
- def create(self, *, request: DataPassthroughRequest) -> RemoteResponse:
+ def create(
+ self, *, request: DataPassthroughRequest, request_options: typing.Optional[RequestOptions] = None
+ ) -> RemoteResponse:
"""
Pull data from an endpoint not currently supported by Merge.
Parameters:
- request: DataPassthroughRequest.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
+ ---
+ from merge.client import Merge
+ from merge.resources.hris import (
+ DataPassthroughRequest,
+ MethodEnum,
+ RequestFormatEnum,
+ )
+
+ client = Merge(
+ account_token="YOUR_ACCOUNT_TOKEN",
+ api_key="YOUR_API_KEY",
+ )
+ client.hris.passthrough.create(
+ request=DataPassthroughRequest(
+ method=MethodEnum.GET,
+ path="/scooters",
+ data='{"company": "Lime", "model": "Gen 2.5"}',
+ request_format=RequestFormatEnum.JSON,
+ ),
+ )
"""
_response = self._client_wrapper.httpx_client.request(
"POST",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/hris/v1/passthrough"),
- json=jsonable_encoder(request),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ request_options.get("additional_query_parameters") if request_options is not None else None
+ ),
+ json=jsonable_encoder(request)
+ if request_options is None or request_options.get("additional_body_parameters") is None
+ else {
+ **jsonable_encoder(request),
+ **(jsonable_encoder(remove_none_from_dict(request_options.get("additional_body_parameters", {})))),
+ },
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(RemoteResponse, _response.json()) # type: ignore
@@ -50,19 +93,60 @@ class AsyncPassthroughClient:
def __init__(self, *, client_wrapper: AsyncClientWrapper):
self._client_wrapper = client_wrapper
- async def create(self, *, request: DataPassthroughRequest) -> RemoteResponse:
+ async def create(
+ self, *, request: DataPassthroughRequest, request_options: typing.Optional[RequestOptions] = None
+ ) -> RemoteResponse:
"""
Pull data from an endpoint not currently supported by Merge.
Parameters:
- request: DataPassthroughRequest.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
+ ---
+ from merge.client import AsyncMerge
+ from merge.resources.hris import (
+ DataPassthroughRequest,
+ MethodEnum,
+ RequestFormatEnum,
+ )
+
+ client = AsyncMerge(
+ account_token="YOUR_ACCOUNT_TOKEN",
+ api_key="YOUR_API_KEY",
+ )
+ await client.hris.passthrough.create(
+ request=DataPassthroughRequest(
+ method=MethodEnum.GET,
+ path="/scooters",
+ data='{"company": "Lime", "model": "Gen 2.5"}',
+ request_format=RequestFormatEnum.JSON,
+ ),
+ )
"""
_response = await self._client_wrapper.httpx_client.request(
"POST",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/hris/v1/passthrough"),
- json=jsonable_encoder(request),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ request_options.get("additional_query_parameters") if request_options is not None else None
+ ),
+ json=jsonable_encoder(request)
+ if request_options is None or request_options.get("additional_body_parameters") is None
+ else {
+ **jsonable_encoder(request),
+ **(jsonable_encoder(remove_none_from_dict(request_options.get("additional_body_parameters", {})))),
+ },
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(RemoteResponse, _response.json()) # type: ignore
diff --git a/src/merge/resources/hris/resources/pay_groups/client.py b/src/merge/resources/hris/resources/pay_groups/client.py
index 122f7a6b..6e5fd07c 100644
--- a/src/merge/resources/hris/resources/pay_groups/client.py
+++ b/src/merge/resources/hris/resources/pay_groups/client.py
@@ -8,7 +8,9 @@
from .....core.api_error import ApiError
from .....core.client_wrapper import AsyncClientWrapper, SyncClientWrapper
from .....core.datetime_utils import serialize_datetime
+from .....core.jsonable_encoder import jsonable_encoder
from .....core.remove_none_from_dict import remove_none_from_dict
+from .....core.request_options import RequestOptions
from ...types.paginated_pay_group_list import PaginatedPayGroupList
from ...types.pay_group import PayGroup
@@ -34,6 +36,7 @@ def list(
modified_before: typing.Optional[dt.datetime] = None,
page_size: typing.Optional[int] = None,
remote_id: typing.Optional[str] = None,
+ request_options: typing.Optional[RequestOptions] = None,
) -> PaginatedPayGroupList:
"""
Returns a list of `PayGroup` objects.
@@ -56,6 +59,8 @@ def list(
- page_size: typing.Optional[int]. Number of results to return per page.
- remote_id: typing.Optional[str]. The API provider's ID for the given object.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import Merge
@@ -68,21 +73,37 @@ def list(
_response = self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/hris/v1/pay-groups"),
- params=remove_none_from_dict(
- {
- "created_after": serialize_datetime(created_after) if created_after is not None else None,
- "created_before": serialize_datetime(created_before) if created_before is not None else None,
- "cursor": cursor,
- "include_deleted_data": include_deleted_data,
- "include_remote_data": include_remote_data,
- "modified_after": serialize_datetime(modified_after) if modified_after is not None else None,
- "modified_before": serialize_datetime(modified_before) if modified_before is not None else None,
- "page_size": page_size,
- "remote_id": remote_id,
- }
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "created_after": serialize_datetime(created_after) if created_after is not None else None,
+ "created_before": serialize_datetime(created_before) if created_before is not None else None,
+ "cursor": cursor,
+ "include_deleted_data": include_deleted_data,
+ "include_remote_data": include_remote_data,
+ "modified_after": serialize_datetime(modified_after) if modified_after is not None else None,
+ "modified_before": serialize_datetime(modified_before) if modified_before is not None else None,
+ "page_size": page_size,
+ "remote_id": remote_id,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(PaginatedPayGroupList, _response.json()) # type: ignore
@@ -92,7 +113,13 @@ def list(
raise ApiError(status_code=_response.status_code, body=_response.text)
raise ApiError(status_code=_response.status_code, body=_response_json)
- def retrieve(self, id: str, *, include_remote_data: typing.Optional[bool] = None) -> PayGroup:
+ def retrieve(
+ self,
+ id: str,
+ *,
+ include_remote_data: typing.Optional[bool] = None,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> PayGroup:
"""
Returns a `PayGroup` object with the given `id`.
@@ -100,6 +127,8 @@ def retrieve(self, id: str, *, include_remote_data: typing.Optional[bool] = None
- id: str.
- include_remote_data: typing.Optional[bool]. Whether to include the original data Merge fetched from the third-party to produce these models.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import Merge
@@ -108,15 +137,35 @@ def retrieve(self, id: str, *, include_remote_data: typing.Optional[bool] = None
api_key="YOUR_API_KEY",
)
client.hris.pay_groups.retrieve(
- id="id",
+ id="string",
)
"""
_response = self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", f"api/hris/v1/pay-groups/{id}"),
- params=remove_none_from_dict({"include_remote_data": include_remote_data}),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "include_remote_data": include_remote_data,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(PayGroup, _response.json()) # type: ignore
@@ -143,6 +192,7 @@ async def list(
modified_before: typing.Optional[dt.datetime] = None,
page_size: typing.Optional[int] = None,
remote_id: typing.Optional[str] = None,
+ request_options: typing.Optional[RequestOptions] = None,
) -> PaginatedPayGroupList:
"""
Returns a list of `PayGroup` objects.
@@ -165,6 +215,8 @@ async def list(
- page_size: typing.Optional[int]. Number of results to return per page.
- remote_id: typing.Optional[str]. The API provider's ID for the given object.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import AsyncMerge
@@ -177,21 +229,37 @@ async def list(
_response = await self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/hris/v1/pay-groups"),
- params=remove_none_from_dict(
- {
- "created_after": serialize_datetime(created_after) if created_after is not None else None,
- "created_before": serialize_datetime(created_before) if created_before is not None else None,
- "cursor": cursor,
- "include_deleted_data": include_deleted_data,
- "include_remote_data": include_remote_data,
- "modified_after": serialize_datetime(modified_after) if modified_after is not None else None,
- "modified_before": serialize_datetime(modified_before) if modified_before is not None else None,
- "page_size": page_size,
- "remote_id": remote_id,
- }
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "created_after": serialize_datetime(created_after) if created_after is not None else None,
+ "created_before": serialize_datetime(created_before) if created_before is not None else None,
+ "cursor": cursor,
+ "include_deleted_data": include_deleted_data,
+ "include_remote_data": include_remote_data,
+ "modified_after": serialize_datetime(modified_after) if modified_after is not None else None,
+ "modified_before": serialize_datetime(modified_before) if modified_before is not None else None,
+ "page_size": page_size,
+ "remote_id": remote_id,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(PaginatedPayGroupList, _response.json()) # type: ignore
@@ -201,7 +269,13 @@ async def list(
raise ApiError(status_code=_response.status_code, body=_response.text)
raise ApiError(status_code=_response.status_code, body=_response_json)
- async def retrieve(self, id: str, *, include_remote_data: typing.Optional[bool] = None) -> PayGroup:
+ async def retrieve(
+ self,
+ id: str,
+ *,
+ include_remote_data: typing.Optional[bool] = None,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> PayGroup:
"""
Returns a `PayGroup` object with the given `id`.
@@ -209,6 +283,8 @@ async def retrieve(self, id: str, *, include_remote_data: typing.Optional[bool]
- id: str.
- include_remote_data: typing.Optional[bool]. Whether to include the original data Merge fetched from the third-party to produce these models.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import AsyncMerge
@@ -217,15 +293,35 @@ async def retrieve(self, id: str, *, include_remote_data: typing.Optional[bool]
api_key="YOUR_API_KEY",
)
await client.hris.pay_groups.retrieve(
- id="id",
+ id="string",
)
"""
_response = await self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", f"api/hris/v1/pay-groups/{id}"),
- params=remove_none_from_dict({"include_remote_data": include_remote_data}),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "include_remote_data": include_remote_data,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(PayGroup, _response.json()) # type: ignore
diff --git a/src/merge/resources/hris/resources/payroll_runs/client.py b/src/merge/resources/hris/resources/payroll_runs/client.py
index 33ef7e81..fb2ed0e4 100644
--- a/src/merge/resources/hris/resources/payroll_runs/client.py
+++ b/src/merge/resources/hris/resources/payroll_runs/client.py
@@ -8,7 +8,9 @@
from .....core.api_error import ApiError
from .....core.client_wrapper import AsyncClientWrapper, SyncClientWrapper
from .....core.datetime_utils import serialize_datetime
+from .....core.jsonable_encoder import jsonable_encoder
from .....core.remove_none_from_dict import remove_none_from_dict
+from .....core.request_options import RequestOptions
from ...types.paginated_payroll_run_list import PaginatedPayrollRunList
from ...types.payroll_run import PayrollRun
from .types.payroll_runs_list_request_remote_fields import PayrollRunsListRequestRemoteFields
@@ -46,6 +48,7 @@ def list(
show_enum_origins: typing.Optional[PayrollRunsListRequestShowEnumOrigins] = None,
started_after: typing.Optional[dt.datetime] = None,
started_before: typing.Optional[dt.datetime] = None,
+ request_options: typing.Optional[RequestOptions] = None,
) -> PaginatedPayrollRunList:
"""
Returns a list of `PayrollRun` objects.
@@ -87,6 +90,8 @@ def list(
- started_after: typing.Optional[dt.datetime]. If provided, will only return payroll runs started after this datetime.
- started_before: typing.Optional[dt.datetime]. If provided, will only return payroll runs started before this datetime.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import Merge
from merge.resources.hris import (
@@ -108,28 +113,44 @@ def list(
_response = self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/hris/v1/payroll-runs"),
- params=remove_none_from_dict(
- {
- "created_after": serialize_datetime(created_after) if created_after is not None else None,
- "created_before": serialize_datetime(created_before) if created_before is not None else None,
- "cursor": cursor,
- "ended_after": serialize_datetime(ended_after) if ended_after is not None else None,
- "ended_before": serialize_datetime(ended_before) if ended_before is not None else None,
- "include_deleted_data": include_deleted_data,
- "include_remote_data": include_remote_data,
- "modified_after": serialize_datetime(modified_after) if modified_after is not None else None,
- "modified_before": serialize_datetime(modified_before) if modified_before is not None else None,
- "page_size": page_size,
- "remote_fields": remote_fields,
- "remote_id": remote_id,
- "run_type": run_type,
- "show_enum_origins": show_enum_origins,
- "started_after": serialize_datetime(started_after) if started_after is not None else None,
- "started_before": serialize_datetime(started_before) if started_before is not None else None,
- }
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "created_after": serialize_datetime(created_after) if created_after is not None else None,
+ "created_before": serialize_datetime(created_before) if created_before is not None else None,
+ "cursor": cursor,
+ "ended_after": serialize_datetime(ended_after) if ended_after is not None else None,
+ "ended_before": serialize_datetime(ended_before) if ended_before is not None else None,
+ "include_deleted_data": include_deleted_data,
+ "include_remote_data": include_remote_data,
+ "modified_after": serialize_datetime(modified_after) if modified_after is not None else None,
+ "modified_before": serialize_datetime(modified_before) if modified_before is not None else None,
+ "page_size": page_size,
+ "remote_fields": remote_fields,
+ "remote_id": remote_id,
+ "run_type": run_type,
+ "show_enum_origins": show_enum_origins,
+ "started_after": serialize_datetime(started_after) if started_after is not None else None,
+ "started_before": serialize_datetime(started_before) if started_before is not None else None,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(PaginatedPayrollRunList, _response.json()) # type: ignore
@@ -146,6 +167,7 @@ def retrieve(
include_remote_data: typing.Optional[bool] = None,
remote_fields: typing.Optional[PayrollRunsRetrieveRequestRemoteFields] = None,
show_enum_origins: typing.Optional[PayrollRunsRetrieveRequestShowEnumOrigins] = None,
+ request_options: typing.Optional[RequestOptions] = None,
) -> PayrollRun:
"""
Returns a `PayrollRun` object with the given `id`.
@@ -158,6 +180,8 @@ def retrieve(
- remote_fields: typing.Optional[PayrollRunsRetrieveRequestRemoteFields]. Deprecated. Use show_enum_origins.
- show_enum_origins: typing.Optional[PayrollRunsRetrieveRequestShowEnumOrigins]. Which fields should be returned in non-normalized form.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import Merge
from merge.resources.hris import (
@@ -170,7 +194,7 @@ def retrieve(
api_key="YOUR_API_KEY",
)
client.hris.payroll_runs.retrieve(
- id="id",
+ id="string",
remote_fields=PayrollRunsRetrieveRequestRemoteFields.RUN_STATE,
show_enum_origins=PayrollRunsRetrieveRequestShowEnumOrigins.RUN_STATE,
)
@@ -178,15 +202,31 @@ def retrieve(
_response = self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", f"api/hris/v1/payroll-runs/{id}"),
- params=remove_none_from_dict(
- {
- "include_remote_data": include_remote_data,
- "remote_fields": remote_fields,
- "show_enum_origins": show_enum_origins,
- }
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "include_remote_data": include_remote_data,
+ "remote_fields": remote_fields,
+ "show_enum_origins": show_enum_origins,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(PayrollRun, _response.json()) # type: ignore
@@ -220,6 +260,7 @@ async def list(
show_enum_origins: typing.Optional[PayrollRunsListRequestShowEnumOrigins] = None,
started_after: typing.Optional[dt.datetime] = None,
started_before: typing.Optional[dt.datetime] = None,
+ request_options: typing.Optional[RequestOptions] = None,
) -> PaginatedPayrollRunList:
"""
Returns a list of `PayrollRun` objects.
@@ -261,6 +302,8 @@ async def list(
- started_after: typing.Optional[dt.datetime]. If provided, will only return payroll runs started after this datetime.
- started_before: typing.Optional[dt.datetime]. If provided, will only return payroll runs started before this datetime.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import AsyncMerge
from merge.resources.hris import (
@@ -282,28 +325,44 @@ async def list(
_response = await self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/hris/v1/payroll-runs"),
- params=remove_none_from_dict(
- {
- "created_after": serialize_datetime(created_after) if created_after is not None else None,
- "created_before": serialize_datetime(created_before) if created_before is not None else None,
- "cursor": cursor,
- "ended_after": serialize_datetime(ended_after) if ended_after is not None else None,
- "ended_before": serialize_datetime(ended_before) if ended_before is not None else None,
- "include_deleted_data": include_deleted_data,
- "include_remote_data": include_remote_data,
- "modified_after": serialize_datetime(modified_after) if modified_after is not None else None,
- "modified_before": serialize_datetime(modified_before) if modified_before is not None else None,
- "page_size": page_size,
- "remote_fields": remote_fields,
- "remote_id": remote_id,
- "run_type": run_type,
- "show_enum_origins": show_enum_origins,
- "started_after": serialize_datetime(started_after) if started_after is not None else None,
- "started_before": serialize_datetime(started_before) if started_before is not None else None,
- }
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "created_after": serialize_datetime(created_after) if created_after is not None else None,
+ "created_before": serialize_datetime(created_before) if created_before is not None else None,
+ "cursor": cursor,
+ "ended_after": serialize_datetime(ended_after) if ended_after is not None else None,
+ "ended_before": serialize_datetime(ended_before) if ended_before is not None else None,
+ "include_deleted_data": include_deleted_data,
+ "include_remote_data": include_remote_data,
+ "modified_after": serialize_datetime(modified_after) if modified_after is not None else None,
+ "modified_before": serialize_datetime(modified_before) if modified_before is not None else None,
+ "page_size": page_size,
+ "remote_fields": remote_fields,
+ "remote_id": remote_id,
+ "run_type": run_type,
+ "show_enum_origins": show_enum_origins,
+ "started_after": serialize_datetime(started_after) if started_after is not None else None,
+ "started_before": serialize_datetime(started_before) if started_before is not None else None,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(PaginatedPayrollRunList, _response.json()) # type: ignore
@@ -320,6 +379,7 @@ async def retrieve(
include_remote_data: typing.Optional[bool] = None,
remote_fields: typing.Optional[PayrollRunsRetrieveRequestRemoteFields] = None,
show_enum_origins: typing.Optional[PayrollRunsRetrieveRequestShowEnumOrigins] = None,
+ request_options: typing.Optional[RequestOptions] = None,
) -> PayrollRun:
"""
Returns a `PayrollRun` object with the given `id`.
@@ -332,6 +392,8 @@ async def retrieve(
- remote_fields: typing.Optional[PayrollRunsRetrieveRequestRemoteFields]. Deprecated. Use show_enum_origins.
- show_enum_origins: typing.Optional[PayrollRunsRetrieveRequestShowEnumOrigins]. Which fields should be returned in non-normalized form.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import AsyncMerge
from merge.resources.hris import (
@@ -344,7 +406,7 @@ async def retrieve(
api_key="YOUR_API_KEY",
)
await client.hris.payroll_runs.retrieve(
- id="id",
+ id="string",
remote_fields=PayrollRunsRetrieveRequestRemoteFields.RUN_STATE,
show_enum_origins=PayrollRunsRetrieveRequestShowEnumOrigins.RUN_STATE,
)
@@ -352,15 +414,31 @@ async def retrieve(
_response = await self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", f"api/hris/v1/payroll-runs/{id}"),
- params=remove_none_from_dict(
- {
- "include_remote_data": include_remote_data,
- "remote_fields": remote_fields,
- "show_enum_origins": show_enum_origins,
- }
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "include_remote_data": include_remote_data,
+ "remote_fields": remote_fields,
+ "show_enum_origins": show_enum_origins,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(PayrollRun, _response.json()) # type: ignore
diff --git a/src/merge/resources/hris/resources/regenerate_key/client.py b/src/merge/resources/hris/resources/regenerate_key/client.py
index f046c408..ab603401 100644
--- a/src/merge/resources/hris/resources/regenerate_key/client.py
+++ b/src/merge/resources/hris/resources/regenerate_key/client.py
@@ -7,6 +7,8 @@
from .....core.api_error import ApiError
from .....core.client_wrapper import AsyncClientWrapper, SyncClientWrapper
from .....core.jsonable_encoder import jsonable_encoder
+from .....core.remove_none_from_dict import remove_none_from_dict
+from .....core.request_options import RequestOptions
from ...types.remote_key import RemoteKey
try:
@@ -22,12 +24,14 @@ class RegenerateKeyClient:
def __init__(self, *, client_wrapper: SyncClientWrapper):
self._client_wrapper = client_wrapper
- def create(self, *, name: str) -> RemoteKey:
+ def create(self, *, name: str, request_options: typing.Optional[RequestOptions] = None) -> RemoteKey:
"""
Exchange remote keys.
Parameters:
- name: str.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import Merge
@@ -42,9 +46,26 @@ def create(self, *, name: str) -> RemoteKey:
_response = self._client_wrapper.httpx_client.request(
"POST",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/hris/v1/regenerate-key"),
- json=jsonable_encoder({"name": name}),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ request_options.get("additional_query_parameters") if request_options is not None else None
+ ),
+ json=jsonable_encoder({"name": name})
+ if request_options is None or request_options.get("additional_body_parameters") is None
+ else {
+ **jsonable_encoder({"name": name}),
+ **(jsonable_encoder(remove_none_from_dict(request_options.get("additional_body_parameters", {})))),
+ },
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(RemoteKey, _response.json()) # type: ignore
@@ -59,12 +80,14 @@ class AsyncRegenerateKeyClient:
def __init__(self, *, client_wrapper: AsyncClientWrapper):
self._client_wrapper = client_wrapper
- async def create(self, *, name: str) -> RemoteKey:
+ async def create(self, *, name: str, request_options: typing.Optional[RequestOptions] = None) -> RemoteKey:
"""
Exchange remote keys.
Parameters:
- name: str.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import AsyncMerge
@@ -79,9 +102,26 @@ async def create(self, *, name: str) -> RemoteKey:
_response = await self._client_wrapper.httpx_client.request(
"POST",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/hris/v1/regenerate-key"),
- json=jsonable_encoder({"name": name}),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ request_options.get("additional_query_parameters") if request_options is not None else None
+ ),
+ json=jsonable_encoder({"name": name})
+ if request_options is None or request_options.get("additional_body_parameters") is None
+ else {
+ **jsonable_encoder({"name": name}),
+ **(jsonable_encoder(remove_none_from_dict(request_options.get("additional_body_parameters", {})))),
+ },
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(RemoteKey, _response.json()) # type: ignore
diff --git a/src/merge/resources/hris/resources/selective_sync/client.py b/src/merge/resources/hris/resources/selective_sync/client.py
index e2d51142..a7b1dd36 100644
--- a/src/merge/resources/hris/resources/selective_sync/client.py
+++ b/src/merge/resources/hris/resources/selective_sync/client.py
@@ -8,6 +8,7 @@
from .....core.client_wrapper import AsyncClientWrapper, SyncClientWrapper
from .....core.jsonable_encoder import jsonable_encoder
from .....core.remove_none_from_dict import remove_none_from_dict
+from .....core.request_options import RequestOptions
from ...types.linked_account_selective_sync_configuration import LinkedAccountSelectiveSyncConfiguration
from ...types.linked_account_selective_sync_configuration_request import LinkedAccountSelectiveSyncConfigurationRequest
from ...types.paginated_condition_schema_list import PaginatedConditionSchemaList
@@ -25,10 +26,14 @@ class SelectiveSyncClient:
def __init__(self, *, client_wrapper: SyncClientWrapper):
self._client_wrapper = client_wrapper
- def configurations_list(self) -> typing.List[LinkedAccountSelectiveSyncConfiguration]:
+ def configurations_list(
+ self, *, request_options: typing.Optional[RequestOptions] = None
+ ) -> typing.List[LinkedAccountSelectiveSyncConfiguration]:
"""
Get a linked account's selective syncs.
+ Parameters:
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import Merge
@@ -43,8 +48,20 @@ def configurations_list(self) -> typing.List[LinkedAccountSelectiveSyncConfigura
urllib.parse.urljoin(
f"{self._client_wrapper.get_base_url()}/", "api/hris/v1/selective-sync/configurations"
),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ request_options.get("additional_query_parameters") if request_options is not None else None
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(typing.List[LinkedAccountSelectiveSyncConfiguration], _response.json()) # type: ignore
@@ -55,27 +72,27 @@ def configurations_list(self) -> typing.List[LinkedAccountSelectiveSyncConfigura
raise ApiError(status_code=_response.status_code, body=_response_json)
def configurations_update(
- self, *, sync_configurations: typing.List[LinkedAccountSelectiveSyncConfigurationRequest]
+ self,
+ *,
+ sync_configurations: typing.List[LinkedAccountSelectiveSyncConfigurationRequest],
+ request_options: typing.Optional[RequestOptions] = None,
) -> typing.List[LinkedAccountSelectiveSyncConfiguration]:
"""
Replace a linked account's selective syncs.
Parameters:
- sync_configurations: typing.List[LinkedAccountSelectiveSyncConfigurationRequest]. The selective syncs associated with a linked account.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import Merge
- from merge.resources.hris import LinkedAccountSelectiveSyncConfigurationRequest
client = Merge(
account_token="YOUR_ACCOUNT_TOKEN",
api_key="YOUR_API_KEY",
)
client.hris.selective_sync.configurations_update(
- sync_configurations=[
- LinkedAccountSelectiveSyncConfigurationRequest(
- linked_account_conditions=[],
- )
- ],
+ sync_configurations=[],
)
"""
_response = self._client_wrapper.httpx_client.request(
@@ -83,9 +100,26 @@ def configurations_update(
urllib.parse.urljoin(
f"{self._client_wrapper.get_base_url()}/", "api/hris/v1/selective-sync/configurations"
),
- json=jsonable_encoder({"sync_configurations": sync_configurations}),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ request_options.get("additional_query_parameters") if request_options is not None else None
+ ),
+ json=jsonable_encoder({"sync_configurations": sync_configurations})
+ if request_options is None or request_options.get("additional_body_parameters") is None
+ else {
+ **jsonable_encoder({"sync_configurations": sync_configurations}),
+ **(jsonable_encoder(remove_none_from_dict(request_options.get("additional_body_parameters", {})))),
+ },
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(typing.List[LinkedAccountSelectiveSyncConfiguration], _response.json()) # type: ignore
@@ -101,6 +135,7 @@ def meta_list(
common_model: typing.Optional[str] = None,
cursor: typing.Optional[str] = None,
page_size: typing.Optional[int] = None,
+ request_options: typing.Optional[RequestOptions] = None,
) -> PaginatedConditionSchemaList:
"""
Get metadata for the conditions available to a linked account.
@@ -111,6 +146,8 @@ def meta_list(
- cursor: typing.Optional[str]. The pagination cursor value.
- page_size: typing.Optional[int]. Number of results to return per page.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import Merge
@@ -123,9 +160,31 @@ def meta_list(
_response = self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/hris/v1/selective-sync/meta"),
- params=remove_none_from_dict({"common_model": common_model, "cursor": cursor, "page_size": page_size}),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "common_model": common_model,
+ "cursor": cursor,
+ "page_size": page_size,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(PaginatedConditionSchemaList, _response.json()) # type: ignore
@@ -140,10 +199,14 @@ class AsyncSelectiveSyncClient:
def __init__(self, *, client_wrapper: AsyncClientWrapper):
self._client_wrapper = client_wrapper
- async def configurations_list(self) -> typing.List[LinkedAccountSelectiveSyncConfiguration]:
+ async def configurations_list(
+ self, *, request_options: typing.Optional[RequestOptions] = None
+ ) -> typing.List[LinkedAccountSelectiveSyncConfiguration]:
"""
Get a linked account's selective syncs.
+ Parameters:
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import AsyncMerge
@@ -158,8 +221,20 @@ async def configurations_list(self) -> typing.List[LinkedAccountSelectiveSyncCon
urllib.parse.urljoin(
f"{self._client_wrapper.get_base_url()}/", "api/hris/v1/selective-sync/configurations"
),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ request_options.get("additional_query_parameters") if request_options is not None else None
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(typing.List[LinkedAccountSelectiveSyncConfiguration], _response.json()) # type: ignore
@@ -170,27 +245,27 @@ async def configurations_list(self) -> typing.List[LinkedAccountSelectiveSyncCon
raise ApiError(status_code=_response.status_code, body=_response_json)
async def configurations_update(
- self, *, sync_configurations: typing.List[LinkedAccountSelectiveSyncConfigurationRequest]
+ self,
+ *,
+ sync_configurations: typing.List[LinkedAccountSelectiveSyncConfigurationRequest],
+ request_options: typing.Optional[RequestOptions] = None,
) -> typing.List[LinkedAccountSelectiveSyncConfiguration]:
"""
Replace a linked account's selective syncs.
Parameters:
- sync_configurations: typing.List[LinkedAccountSelectiveSyncConfigurationRequest]. The selective syncs associated with a linked account.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import AsyncMerge
- from merge.resources.hris import LinkedAccountSelectiveSyncConfigurationRequest
client = AsyncMerge(
account_token="YOUR_ACCOUNT_TOKEN",
api_key="YOUR_API_KEY",
)
await client.hris.selective_sync.configurations_update(
- sync_configurations=[
- LinkedAccountSelectiveSyncConfigurationRequest(
- linked_account_conditions=[],
- )
- ],
+ sync_configurations=[],
)
"""
_response = await self._client_wrapper.httpx_client.request(
@@ -198,9 +273,26 @@ async def configurations_update(
urllib.parse.urljoin(
f"{self._client_wrapper.get_base_url()}/", "api/hris/v1/selective-sync/configurations"
),
- json=jsonable_encoder({"sync_configurations": sync_configurations}),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ request_options.get("additional_query_parameters") if request_options is not None else None
+ ),
+ json=jsonable_encoder({"sync_configurations": sync_configurations})
+ if request_options is None or request_options.get("additional_body_parameters") is None
+ else {
+ **jsonable_encoder({"sync_configurations": sync_configurations}),
+ **(jsonable_encoder(remove_none_from_dict(request_options.get("additional_body_parameters", {})))),
+ },
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(typing.List[LinkedAccountSelectiveSyncConfiguration], _response.json()) # type: ignore
@@ -216,6 +308,7 @@ async def meta_list(
common_model: typing.Optional[str] = None,
cursor: typing.Optional[str] = None,
page_size: typing.Optional[int] = None,
+ request_options: typing.Optional[RequestOptions] = None,
) -> PaginatedConditionSchemaList:
"""
Get metadata for the conditions available to a linked account.
@@ -226,6 +319,8 @@ async def meta_list(
- cursor: typing.Optional[str]. The pagination cursor value.
- page_size: typing.Optional[int]. Number of results to return per page.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import AsyncMerge
@@ -238,9 +333,31 @@ async def meta_list(
_response = await self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/hris/v1/selective-sync/meta"),
- params=remove_none_from_dict({"common_model": common_model, "cursor": cursor, "page_size": page_size}),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "common_model": common_model,
+ "cursor": cursor,
+ "page_size": page_size,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(PaginatedConditionSchemaList, _response.json()) # type: ignore
diff --git a/src/merge/resources/hris/resources/sync_status/client.py b/src/merge/resources/hris/resources/sync_status/client.py
index 1ead298a..4163e98a 100644
--- a/src/merge/resources/hris/resources/sync_status/client.py
+++ b/src/merge/resources/hris/resources/sync_status/client.py
@@ -6,7 +6,9 @@
from .....core.api_error import ApiError
from .....core.client_wrapper import AsyncClientWrapper, SyncClientWrapper
+from .....core.jsonable_encoder import jsonable_encoder
from .....core.remove_none_from_dict import remove_none_from_dict
+from .....core.request_options import RequestOptions
from ...types.paginated_sync_status_list import PaginatedSyncStatusList
try:
@@ -20,7 +22,11 @@ def __init__(self, *, client_wrapper: SyncClientWrapper):
self._client_wrapper = client_wrapper
def list(
- self, *, cursor: typing.Optional[str] = None, page_size: typing.Optional[int] = None
+ self,
+ *,
+ cursor: typing.Optional[str] = None,
+ page_size: typing.Optional[int] = None,
+ request_options: typing.Optional[RequestOptions] = None,
) -> PaginatedSyncStatusList:
"""
Get syncing status. Possible values: `DISABLED`, `DONE`, `FAILED`, `PARTIALLY_SYNCED`, `PAUSED`, `SYNCING`. Learn more about sync status in our [Help Center](https://help.merge.dev/en/articles/8184193-merge-sync-statuses).
@@ -29,6 +35,8 @@ def list(
- cursor: typing.Optional[str]. The pagination cursor value.
- page_size: typing.Optional[int]. Number of results to return per page.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import Merge
@@ -41,9 +49,30 @@ def list(
_response = self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/hris/v1/sync-status"),
- params=remove_none_from_dict({"cursor": cursor, "page_size": page_size}),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "cursor": cursor,
+ "page_size": page_size,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(PaginatedSyncStatusList, _response.json()) # type: ignore
@@ -59,7 +88,11 @@ def __init__(self, *, client_wrapper: AsyncClientWrapper):
self._client_wrapper = client_wrapper
async def list(
- self, *, cursor: typing.Optional[str] = None, page_size: typing.Optional[int] = None
+ self,
+ *,
+ cursor: typing.Optional[str] = None,
+ page_size: typing.Optional[int] = None,
+ request_options: typing.Optional[RequestOptions] = None,
) -> PaginatedSyncStatusList:
"""
Get syncing status. Possible values: `DISABLED`, `DONE`, `FAILED`, `PARTIALLY_SYNCED`, `PAUSED`, `SYNCING`. Learn more about sync status in our [Help Center](https://help.merge.dev/en/articles/8184193-merge-sync-statuses).
@@ -68,6 +101,8 @@ async def list(
- cursor: typing.Optional[str]. The pagination cursor value.
- page_size: typing.Optional[int]. Number of results to return per page.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import AsyncMerge
@@ -80,9 +115,30 @@ async def list(
_response = await self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/hris/v1/sync-status"),
- params=remove_none_from_dict({"cursor": cursor, "page_size": page_size}),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "cursor": cursor,
+ "page_size": page_size,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(PaginatedSyncStatusList, _response.json()) # type: ignore
diff --git a/src/merge/resources/hris/resources/teams/client.py b/src/merge/resources/hris/resources/teams/client.py
index 670bc3ce..cd67093b 100644
--- a/src/merge/resources/hris/resources/teams/client.py
+++ b/src/merge/resources/hris/resources/teams/client.py
@@ -5,12 +5,12 @@
import urllib.parse
from json.decoder import JSONDecodeError
-import typing_extensions
-
from .....core.api_error import ApiError
from .....core.client_wrapper import AsyncClientWrapper, SyncClientWrapper
from .....core.datetime_utils import serialize_datetime
+from .....core.jsonable_encoder import jsonable_encoder
from .....core.remove_none_from_dict import remove_none_from_dict
+from .....core.request_options import RequestOptions
from ...types.paginated_team_list import PaginatedTeamList
from ...types.team import Team
@@ -30,7 +30,7 @@ def list(
created_after: typing.Optional[dt.datetime] = None,
created_before: typing.Optional[dt.datetime] = None,
cursor: typing.Optional[str] = None,
- expand: typing.Optional[typing_extensions.Literal["parent_team"]] = None,
+ expand: typing.Optional[typing.Literal["parent_team"]] = None,
include_deleted_data: typing.Optional[bool] = None,
include_remote_data: typing.Optional[bool] = None,
modified_after: typing.Optional[dt.datetime] = None,
@@ -38,6 +38,7 @@ def list(
page_size: typing.Optional[int] = None,
parent_team_id: typing.Optional[str] = None,
remote_id: typing.Optional[str] = None,
+ request_options: typing.Optional[RequestOptions] = None,
) -> PaginatedTeamList:
"""
Returns a list of `Team` objects.
@@ -49,7 +50,7 @@ def list(
- cursor: typing.Optional[str]. The pagination cursor value.
- - expand: typing.Optional[typing_extensions.Literal["parent_team"]]. Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces.
+ - expand: typing.Optional[typing.Literal["parent_team"]]. Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces.
- include_deleted_data: typing.Optional[bool]. Whether to include data that was marked as deleted by third party webhooks.
@@ -64,6 +65,8 @@ def list(
- parent_team_id: typing.Optional[str]. If provided, will only return teams with this parent team.
- remote_id: typing.Optional[str]. The API provider's ID for the given object.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import Merge
@@ -78,23 +81,39 @@ def list(
_response = self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/hris/v1/teams"),
- params=remove_none_from_dict(
- {
- "created_after": serialize_datetime(created_after) if created_after is not None else None,
- "created_before": serialize_datetime(created_before) if created_before is not None else None,
- "cursor": cursor,
- "expand": expand,
- "include_deleted_data": include_deleted_data,
- "include_remote_data": include_remote_data,
- "modified_after": serialize_datetime(modified_after) if modified_after is not None else None,
- "modified_before": serialize_datetime(modified_before) if modified_before is not None else None,
- "page_size": page_size,
- "parent_team_id": parent_team_id,
- "remote_id": remote_id,
- }
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "created_after": serialize_datetime(created_after) if created_after is not None else None,
+ "created_before": serialize_datetime(created_before) if created_before is not None else None,
+ "cursor": cursor,
+ "expand": expand,
+ "include_deleted_data": include_deleted_data,
+ "include_remote_data": include_remote_data,
+ "modified_after": serialize_datetime(modified_after) if modified_after is not None else None,
+ "modified_before": serialize_datetime(modified_before) if modified_before is not None else None,
+ "page_size": page_size,
+ "parent_team_id": parent_team_id,
+ "remote_id": remote_id,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(PaginatedTeamList, _response.json()) # type: ignore
@@ -108,8 +127,9 @@ def retrieve(
self,
id: str,
*,
- expand: typing.Optional[typing_extensions.Literal["parent_team"]] = None,
+ expand: typing.Optional[typing.Literal["parent_team"]] = None,
include_remote_data: typing.Optional[bool] = None,
+ request_options: typing.Optional[RequestOptions] = None,
) -> Team:
"""
Returns a `Team` object with the given `id`.
@@ -117,9 +137,11 @@ def retrieve(
Parameters:
- id: str.
- - expand: typing.Optional[typing_extensions.Literal["parent_team"]]. Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces.
+ - expand: typing.Optional[typing.Literal["parent_team"]]. Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces.
- include_remote_data: typing.Optional[bool]. Whether to include the original data Merge fetched from the third-party to produce these models.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import Merge
@@ -128,16 +150,37 @@ def retrieve(
api_key="YOUR_API_KEY",
)
client.hris.teams.retrieve(
- id="id",
+ id="string",
expand="parent_team",
)
"""
_response = self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", f"api/hris/v1/teams/{id}"),
- params=remove_none_from_dict({"expand": expand, "include_remote_data": include_remote_data}),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "expand": expand,
+ "include_remote_data": include_remote_data,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(Team, _response.json()) # type: ignore
@@ -158,7 +201,7 @@ async def list(
created_after: typing.Optional[dt.datetime] = None,
created_before: typing.Optional[dt.datetime] = None,
cursor: typing.Optional[str] = None,
- expand: typing.Optional[typing_extensions.Literal["parent_team"]] = None,
+ expand: typing.Optional[typing.Literal["parent_team"]] = None,
include_deleted_data: typing.Optional[bool] = None,
include_remote_data: typing.Optional[bool] = None,
modified_after: typing.Optional[dt.datetime] = None,
@@ -166,6 +209,7 @@ async def list(
page_size: typing.Optional[int] = None,
parent_team_id: typing.Optional[str] = None,
remote_id: typing.Optional[str] = None,
+ request_options: typing.Optional[RequestOptions] = None,
) -> PaginatedTeamList:
"""
Returns a list of `Team` objects.
@@ -177,7 +221,7 @@ async def list(
- cursor: typing.Optional[str]. The pagination cursor value.
- - expand: typing.Optional[typing_extensions.Literal["parent_team"]]. Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces.
+ - expand: typing.Optional[typing.Literal["parent_team"]]. Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces.
- include_deleted_data: typing.Optional[bool]. Whether to include data that was marked as deleted by third party webhooks.
@@ -192,6 +236,8 @@ async def list(
- parent_team_id: typing.Optional[str]. If provided, will only return teams with this parent team.
- remote_id: typing.Optional[str]. The API provider's ID for the given object.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import AsyncMerge
@@ -206,23 +252,39 @@ async def list(
_response = await self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/hris/v1/teams"),
- params=remove_none_from_dict(
- {
- "created_after": serialize_datetime(created_after) if created_after is not None else None,
- "created_before": serialize_datetime(created_before) if created_before is not None else None,
- "cursor": cursor,
- "expand": expand,
- "include_deleted_data": include_deleted_data,
- "include_remote_data": include_remote_data,
- "modified_after": serialize_datetime(modified_after) if modified_after is not None else None,
- "modified_before": serialize_datetime(modified_before) if modified_before is not None else None,
- "page_size": page_size,
- "parent_team_id": parent_team_id,
- "remote_id": remote_id,
- }
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "created_after": serialize_datetime(created_after) if created_after is not None else None,
+ "created_before": serialize_datetime(created_before) if created_before is not None else None,
+ "cursor": cursor,
+ "expand": expand,
+ "include_deleted_data": include_deleted_data,
+ "include_remote_data": include_remote_data,
+ "modified_after": serialize_datetime(modified_after) if modified_after is not None else None,
+ "modified_before": serialize_datetime(modified_before) if modified_before is not None else None,
+ "page_size": page_size,
+ "parent_team_id": parent_team_id,
+ "remote_id": remote_id,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(PaginatedTeamList, _response.json()) # type: ignore
@@ -236,8 +298,9 @@ async def retrieve(
self,
id: str,
*,
- expand: typing.Optional[typing_extensions.Literal["parent_team"]] = None,
+ expand: typing.Optional[typing.Literal["parent_team"]] = None,
include_remote_data: typing.Optional[bool] = None,
+ request_options: typing.Optional[RequestOptions] = None,
) -> Team:
"""
Returns a `Team` object with the given `id`.
@@ -245,9 +308,11 @@ async def retrieve(
Parameters:
- id: str.
- - expand: typing.Optional[typing_extensions.Literal["parent_team"]]. Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces.
+ - expand: typing.Optional[typing.Literal["parent_team"]]. Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces.
- include_remote_data: typing.Optional[bool]. Whether to include the original data Merge fetched from the third-party to produce these models.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import AsyncMerge
@@ -256,16 +321,37 @@ async def retrieve(
api_key="YOUR_API_KEY",
)
await client.hris.teams.retrieve(
- id="id",
+ id="string",
expand="parent_team",
)
"""
_response = await self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", f"api/hris/v1/teams/{id}"),
- params=remove_none_from_dict({"expand": expand, "include_remote_data": include_remote_data}),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "expand": expand,
+ "include_remote_data": include_remote_data,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(Team, _response.json()) # type: ignore
diff --git a/src/merge/resources/hris/resources/time_off/client.py b/src/merge/resources/hris/resources/time_off/client.py
index b7c21860..4a68e1b2 100644
--- a/src/merge/resources/hris/resources/time_off/client.py
+++ b/src/merge/resources/hris/resources/time_off/client.py
@@ -10,6 +10,7 @@
from .....core.datetime_utils import serialize_datetime
from .....core.jsonable_encoder import jsonable_encoder
from .....core.remove_none_from_dict import remove_none_from_dict
+from .....core.request_options import RequestOptions
from ...types.meta_response import MetaResponse
from ...types.paginated_time_off_list import PaginatedTimeOffList
from ...types.time_off import TimeOff
@@ -56,6 +57,7 @@ def list(
request_type: typing.Optional[TimeOffListRequestRequestType] = None,
show_enum_origins: typing.Optional[TimeOffListRequestShowEnumOrigins] = None,
status: typing.Optional[TimeOffListRequestStatus] = None,
+ request_options: typing.Optional[RequestOptions] = None,
) -> PaginatedTimeOffList:
"""
Returns a list of `TimeOff` objects.
@@ -103,7 +105,9 @@ def list(
- `APPROVED` - APPROVED
- `DECLINED` - DECLINED
- `CANCELLED` - CANCELLED
- - `DELETED` - DELETED---
+ - `DELETED` - DELETED
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
+ ---
from merge.client import Merge
from merge.resources.hris import (
TimeOffListRequestExpand,
@@ -128,28 +132,44 @@ def list(
_response = self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/hris/v1/time-off"),
- params=remove_none_from_dict(
- {
- "approver_id": approver_id,
- "created_after": serialize_datetime(created_after) if created_after is not None else None,
- "created_before": serialize_datetime(created_before) if created_before is not None else None,
- "cursor": cursor,
- "employee_id": employee_id,
- "expand": expand,
- "include_deleted_data": include_deleted_data,
- "include_remote_data": include_remote_data,
- "modified_after": serialize_datetime(modified_after) if modified_after is not None else None,
- "modified_before": serialize_datetime(modified_before) if modified_before is not None else None,
- "page_size": page_size,
- "remote_fields": remote_fields,
- "remote_id": remote_id,
- "request_type": request_type,
- "show_enum_origins": show_enum_origins,
- "status": status,
- }
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "approver_id": approver_id,
+ "created_after": serialize_datetime(created_after) if created_after is not None else None,
+ "created_before": serialize_datetime(created_before) if created_before is not None else None,
+ "cursor": cursor,
+ "employee_id": employee_id,
+ "expand": expand,
+ "include_deleted_data": include_deleted_data,
+ "include_remote_data": include_remote_data,
+ "modified_after": serialize_datetime(modified_after) if modified_after is not None else None,
+ "modified_before": serialize_datetime(modified_before) if modified_before is not None else None,
+ "page_size": page_size,
+ "remote_fields": remote_fields,
+ "remote_id": remote_id,
+ "request_type": request_type,
+ "show_enum_origins": show_enum_origins,
+ "status": status,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(PaginatedTimeOffList, _response.json()) # type: ignore
@@ -165,6 +185,7 @@ def create(
is_debug_mode: typing.Optional[bool] = None,
run_async: typing.Optional[bool] = None,
model: TimeOffRequest,
+ request_options: typing.Optional[RequestOptions] = None,
) -> TimeOffResponse:
"""
Creates a `TimeOff` object with the given values.
@@ -175,6 +196,8 @@ def create(
- run_async: typing.Optional[bool]. Whether or not third-party updates should be run asynchronously.
- model: TimeOffRequest.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
import datetime
@@ -201,10 +224,36 @@ def create(
_response = self._client_wrapper.httpx_client.request(
"POST",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/hris/v1/time-off"),
- params=remove_none_from_dict({"is_debug_mode": is_debug_mode, "run_async": run_async}),
- json=jsonable_encoder({"model": model}),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "is_debug_mode": is_debug_mode,
+ "run_async": run_async,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ json=jsonable_encoder({"model": model})
+ if request_options is None or request_options.get("additional_body_parameters") is None
+ else {
+ **jsonable_encoder({"model": model}),
+ **(jsonable_encoder(remove_none_from_dict(request_options.get("additional_body_parameters", {})))),
+ },
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(TimeOffResponse, _response.json()) # type: ignore
@@ -222,6 +271,7 @@ def retrieve(
include_remote_data: typing.Optional[bool] = None,
remote_fields: typing.Optional[TimeOffRetrieveRequestRemoteFields] = None,
show_enum_origins: typing.Optional[TimeOffRetrieveRequestShowEnumOrigins] = None,
+ request_options: typing.Optional[RequestOptions] = None,
) -> TimeOff:
"""
Returns a `TimeOff` object with the given `id`.
@@ -236,6 +286,8 @@ def retrieve(
- remote_fields: typing.Optional[TimeOffRetrieveRequestRemoteFields]. Deprecated. Use show_enum_origins.
- show_enum_origins: typing.Optional[TimeOffRetrieveRequestShowEnumOrigins]. Which fields should be returned in non-normalized form.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import Merge
from merge.resources.hris import (
@@ -249,7 +301,7 @@ def retrieve(
api_key="YOUR_API_KEY",
)
client.hris.time_off.retrieve(
- id="id",
+ id="string",
expand=TimeOffRetrieveRequestExpand.APPROVER,
remote_fields=TimeOffRetrieveRequestRemoteFields.REQUEST_TYPE,
show_enum_origins=TimeOffRetrieveRequestShowEnumOrigins.REQUEST_TYPE,
@@ -258,16 +310,32 @@ def retrieve(
_response = self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", f"api/hris/v1/time-off/{id}"),
- params=remove_none_from_dict(
- {
- "expand": expand,
- "include_remote_data": include_remote_data,
- "remote_fields": remote_fields,
- "show_enum_origins": show_enum_origins,
- }
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "expand": expand,
+ "include_remote_data": include_remote_data,
+ "remote_fields": remote_fields,
+ "show_enum_origins": show_enum_origins,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(TimeOff, _response.json()) # type: ignore
@@ -277,10 +345,12 @@ def retrieve(
raise ApiError(status_code=_response.status_code, body=_response.text)
raise ApiError(status_code=_response.status_code, body=_response_json)
- def meta_post_retrieve(self) -> MetaResponse:
+ def meta_post_retrieve(self, *, request_options: typing.Optional[RequestOptions] = None) -> MetaResponse:
"""
Returns metadata for `TimeOff` POSTs.
+ Parameters:
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import Merge
@@ -293,8 +363,20 @@ def meta_post_retrieve(self) -> MetaResponse:
_response = self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/hris/v1/time-off/meta/post"),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ request_options.get("additional_query_parameters") if request_options is not None else None
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(MetaResponse, _response.json()) # type: ignore
@@ -328,6 +410,7 @@ async def list(
request_type: typing.Optional[TimeOffListRequestRequestType] = None,
show_enum_origins: typing.Optional[TimeOffListRequestShowEnumOrigins] = None,
status: typing.Optional[TimeOffListRequestStatus] = None,
+ request_options: typing.Optional[RequestOptions] = None,
) -> PaginatedTimeOffList:
"""
Returns a list of `TimeOff` objects.
@@ -375,7 +458,9 @@ async def list(
- `APPROVED` - APPROVED
- `DECLINED` - DECLINED
- `CANCELLED` - CANCELLED
- - `DELETED` - DELETED---
+ - `DELETED` - DELETED
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
+ ---
from merge.client import AsyncMerge
from merge.resources.hris import (
TimeOffListRequestExpand,
@@ -400,28 +485,44 @@ async def list(
_response = await self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/hris/v1/time-off"),
- params=remove_none_from_dict(
- {
- "approver_id": approver_id,
- "created_after": serialize_datetime(created_after) if created_after is not None else None,
- "created_before": serialize_datetime(created_before) if created_before is not None else None,
- "cursor": cursor,
- "employee_id": employee_id,
- "expand": expand,
- "include_deleted_data": include_deleted_data,
- "include_remote_data": include_remote_data,
- "modified_after": serialize_datetime(modified_after) if modified_after is not None else None,
- "modified_before": serialize_datetime(modified_before) if modified_before is not None else None,
- "page_size": page_size,
- "remote_fields": remote_fields,
- "remote_id": remote_id,
- "request_type": request_type,
- "show_enum_origins": show_enum_origins,
- "status": status,
- }
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "approver_id": approver_id,
+ "created_after": serialize_datetime(created_after) if created_after is not None else None,
+ "created_before": serialize_datetime(created_before) if created_before is not None else None,
+ "cursor": cursor,
+ "employee_id": employee_id,
+ "expand": expand,
+ "include_deleted_data": include_deleted_data,
+ "include_remote_data": include_remote_data,
+ "modified_after": serialize_datetime(modified_after) if modified_after is not None else None,
+ "modified_before": serialize_datetime(modified_before) if modified_before is not None else None,
+ "page_size": page_size,
+ "remote_fields": remote_fields,
+ "remote_id": remote_id,
+ "request_type": request_type,
+ "show_enum_origins": show_enum_origins,
+ "status": status,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(PaginatedTimeOffList, _response.json()) # type: ignore
@@ -437,6 +538,7 @@ async def create(
is_debug_mode: typing.Optional[bool] = None,
run_async: typing.Optional[bool] = None,
model: TimeOffRequest,
+ request_options: typing.Optional[RequestOptions] = None,
) -> TimeOffResponse:
"""
Creates a `TimeOff` object with the given values.
@@ -447,6 +549,8 @@ async def create(
- run_async: typing.Optional[bool]. Whether or not third-party updates should be run asynchronously.
- model: TimeOffRequest.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
import datetime
@@ -473,10 +577,36 @@ async def create(
_response = await self._client_wrapper.httpx_client.request(
"POST",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/hris/v1/time-off"),
- params=remove_none_from_dict({"is_debug_mode": is_debug_mode, "run_async": run_async}),
- json=jsonable_encoder({"model": model}),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "is_debug_mode": is_debug_mode,
+ "run_async": run_async,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ json=jsonable_encoder({"model": model})
+ if request_options is None or request_options.get("additional_body_parameters") is None
+ else {
+ **jsonable_encoder({"model": model}),
+ **(jsonable_encoder(remove_none_from_dict(request_options.get("additional_body_parameters", {})))),
+ },
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(TimeOffResponse, _response.json()) # type: ignore
@@ -494,6 +624,7 @@ async def retrieve(
include_remote_data: typing.Optional[bool] = None,
remote_fields: typing.Optional[TimeOffRetrieveRequestRemoteFields] = None,
show_enum_origins: typing.Optional[TimeOffRetrieveRequestShowEnumOrigins] = None,
+ request_options: typing.Optional[RequestOptions] = None,
) -> TimeOff:
"""
Returns a `TimeOff` object with the given `id`.
@@ -508,6 +639,8 @@ async def retrieve(
- remote_fields: typing.Optional[TimeOffRetrieveRequestRemoteFields]. Deprecated. Use show_enum_origins.
- show_enum_origins: typing.Optional[TimeOffRetrieveRequestShowEnumOrigins]. Which fields should be returned in non-normalized form.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import AsyncMerge
from merge.resources.hris import (
@@ -521,7 +654,7 @@ async def retrieve(
api_key="YOUR_API_KEY",
)
await client.hris.time_off.retrieve(
- id="id",
+ id="string",
expand=TimeOffRetrieveRequestExpand.APPROVER,
remote_fields=TimeOffRetrieveRequestRemoteFields.REQUEST_TYPE,
show_enum_origins=TimeOffRetrieveRequestShowEnumOrigins.REQUEST_TYPE,
@@ -530,16 +663,32 @@ async def retrieve(
_response = await self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", f"api/hris/v1/time-off/{id}"),
- params=remove_none_from_dict(
- {
- "expand": expand,
- "include_remote_data": include_remote_data,
- "remote_fields": remote_fields,
- "show_enum_origins": show_enum_origins,
- }
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "expand": expand,
+ "include_remote_data": include_remote_data,
+ "remote_fields": remote_fields,
+ "show_enum_origins": show_enum_origins,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(TimeOff, _response.json()) # type: ignore
@@ -549,10 +698,12 @@ async def retrieve(
raise ApiError(status_code=_response.status_code, body=_response.text)
raise ApiError(status_code=_response.status_code, body=_response_json)
- async def meta_post_retrieve(self) -> MetaResponse:
+ async def meta_post_retrieve(self, *, request_options: typing.Optional[RequestOptions] = None) -> MetaResponse:
"""
Returns metadata for `TimeOff` POSTs.
+ Parameters:
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import AsyncMerge
@@ -565,8 +716,20 @@ async def meta_post_retrieve(self) -> MetaResponse:
_response = await self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/hris/v1/time-off/meta/post"),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ request_options.get("additional_query_parameters") if request_options is not None else None
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(MetaResponse, _response.json()) # type: ignore
diff --git a/src/merge/resources/hris/resources/time_off_balances/client.py b/src/merge/resources/hris/resources/time_off_balances/client.py
index be423a8b..4b2152aa 100644
--- a/src/merge/resources/hris/resources/time_off_balances/client.py
+++ b/src/merge/resources/hris/resources/time_off_balances/client.py
@@ -5,12 +5,12 @@
import urllib.parse
from json.decoder import JSONDecodeError
-import typing_extensions
-
from .....core.api_error import ApiError
from .....core.client_wrapper import AsyncClientWrapper, SyncClientWrapper
from .....core.datetime_utils import serialize_datetime
+from .....core.jsonable_encoder import jsonable_encoder
from .....core.remove_none_from_dict import remove_none_from_dict
+from .....core.request_options import RequestOptions
from ...types.paginated_time_off_balance_list import PaginatedTimeOffBalanceList
from ...types.time_off_balance import TimeOffBalance
from .types.time_off_balances_list_request_policy_type import TimeOffBalancesListRequestPolicyType
@@ -32,16 +32,17 @@ def list(
created_before: typing.Optional[dt.datetime] = None,
cursor: typing.Optional[str] = None,
employee_id: typing.Optional[str] = None,
- expand: typing.Optional[typing_extensions.Literal["employee"]] = None,
+ expand: typing.Optional[typing.Literal["employee"]] = None,
include_deleted_data: typing.Optional[bool] = None,
include_remote_data: typing.Optional[bool] = None,
modified_after: typing.Optional[dt.datetime] = None,
modified_before: typing.Optional[dt.datetime] = None,
page_size: typing.Optional[int] = None,
policy_type: typing.Optional[TimeOffBalancesListRequestPolicyType] = None,
- remote_fields: typing.Optional[typing_extensions.Literal["policy_type"]] = None,
+ remote_fields: typing.Optional[typing.Literal["policy_type"]] = None,
remote_id: typing.Optional[str] = None,
- show_enum_origins: typing.Optional[typing_extensions.Literal["policy_type"]] = None,
+ show_enum_origins: typing.Optional[typing.Literal["policy_type"]] = None,
+ request_options: typing.Optional[RequestOptions] = None,
) -> PaginatedTimeOffBalanceList:
"""
Returns a list of `TimeOffBalance` objects.
@@ -55,7 +56,7 @@ def list(
- employee_id: typing.Optional[str]. If provided, will only return time off balances for this employee.
- - expand: typing.Optional[typing_extensions.Literal["employee"]]. Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces.
+ - expand: typing.Optional[typing.Literal["employee"]]. Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces.
- include_deleted_data: typing.Optional[bool]. Whether to include data that was marked as deleted by third party webhooks.
@@ -75,11 +76,13 @@ def list(
- `JURY_DUTY` - JURY_DUTY
- `VOLUNTEER` - VOLUNTEER
- `BEREAVEMENT` - BEREAVEMENT
- - remote_fields: typing.Optional[typing_extensions.Literal["policy_type"]]. Deprecated. Use show_enum_origins.
+ - remote_fields: typing.Optional[typing.Literal["policy_type"]]. Deprecated. Use show_enum_origins.
- remote_id: typing.Optional[str]. The API provider's ID for the given object.
- - show_enum_origins: typing.Optional[typing_extensions.Literal["policy_type"]]. Which fields should be returned in non-normalized form.
+ - show_enum_origins: typing.Optional[typing.Literal["policy_type"]]. Which fields should be returned in non-normalized form.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import Merge
from merge.resources.hris import TimeOffBalancesListRequestPolicyType
@@ -98,26 +101,42 @@ def list(
_response = self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/hris/v1/time-off-balances"),
- params=remove_none_from_dict(
- {
- "created_after": serialize_datetime(created_after) if created_after is not None else None,
- "created_before": serialize_datetime(created_before) if created_before is not None else None,
- "cursor": cursor,
- "employee_id": employee_id,
- "expand": expand,
- "include_deleted_data": include_deleted_data,
- "include_remote_data": include_remote_data,
- "modified_after": serialize_datetime(modified_after) if modified_after is not None else None,
- "modified_before": serialize_datetime(modified_before) if modified_before is not None else None,
- "page_size": page_size,
- "policy_type": policy_type,
- "remote_fields": remote_fields,
- "remote_id": remote_id,
- "show_enum_origins": show_enum_origins,
- }
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "created_after": serialize_datetime(created_after) if created_after is not None else None,
+ "created_before": serialize_datetime(created_before) if created_before is not None else None,
+ "cursor": cursor,
+ "employee_id": employee_id,
+ "expand": expand,
+ "include_deleted_data": include_deleted_data,
+ "include_remote_data": include_remote_data,
+ "modified_after": serialize_datetime(modified_after) if modified_after is not None else None,
+ "modified_before": serialize_datetime(modified_before) if modified_before is not None else None,
+ "page_size": page_size,
+ "policy_type": policy_type,
+ "remote_fields": remote_fields,
+ "remote_id": remote_id,
+ "show_enum_origins": show_enum_origins,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(PaginatedTimeOffBalanceList, _response.json()) # type: ignore
@@ -131,10 +150,11 @@ def retrieve(
self,
id: str,
*,
- expand: typing.Optional[typing_extensions.Literal["employee"]] = None,
+ expand: typing.Optional[typing.Literal["employee"]] = None,
include_remote_data: typing.Optional[bool] = None,
- remote_fields: typing.Optional[typing_extensions.Literal["policy_type"]] = None,
- show_enum_origins: typing.Optional[typing_extensions.Literal["policy_type"]] = None,
+ remote_fields: typing.Optional[typing.Literal["policy_type"]] = None,
+ show_enum_origins: typing.Optional[typing.Literal["policy_type"]] = None,
+ request_options: typing.Optional[RequestOptions] = None,
) -> TimeOffBalance:
"""
Returns a `TimeOffBalance` object with the given `id`.
@@ -142,13 +162,15 @@ def retrieve(
Parameters:
- id: str.
- - expand: typing.Optional[typing_extensions.Literal["employee"]]. Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces.
+ - expand: typing.Optional[typing.Literal["employee"]]. Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces.
- include_remote_data: typing.Optional[bool]. Whether to include the original data Merge fetched from the third-party to produce these models.
- - remote_fields: typing.Optional[typing_extensions.Literal["policy_type"]]. Deprecated. Use show_enum_origins.
+ - remote_fields: typing.Optional[typing.Literal["policy_type"]]. Deprecated. Use show_enum_origins.
- - show_enum_origins: typing.Optional[typing_extensions.Literal["policy_type"]]. Which fields should be returned in non-normalized form.
+ - show_enum_origins: typing.Optional[typing.Literal["policy_type"]]. Which fields should be returned in non-normalized form.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import Merge
@@ -157,7 +179,7 @@ def retrieve(
api_key="YOUR_API_KEY",
)
client.hris.time_off_balances.retrieve(
- id="id",
+ id="string",
expand="employee",
remote_fields="policy_type",
show_enum_origins="policy_type",
@@ -166,16 +188,32 @@ def retrieve(
_response = self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", f"api/hris/v1/time-off-balances/{id}"),
- params=remove_none_from_dict(
- {
- "expand": expand,
- "include_remote_data": include_remote_data,
- "remote_fields": remote_fields,
- "show_enum_origins": show_enum_origins,
- }
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "expand": expand,
+ "include_remote_data": include_remote_data,
+ "remote_fields": remote_fields,
+ "show_enum_origins": show_enum_origins,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(TimeOffBalance, _response.json()) # type: ignore
@@ -197,16 +235,17 @@ async def list(
created_before: typing.Optional[dt.datetime] = None,
cursor: typing.Optional[str] = None,
employee_id: typing.Optional[str] = None,
- expand: typing.Optional[typing_extensions.Literal["employee"]] = None,
+ expand: typing.Optional[typing.Literal["employee"]] = None,
include_deleted_data: typing.Optional[bool] = None,
include_remote_data: typing.Optional[bool] = None,
modified_after: typing.Optional[dt.datetime] = None,
modified_before: typing.Optional[dt.datetime] = None,
page_size: typing.Optional[int] = None,
policy_type: typing.Optional[TimeOffBalancesListRequestPolicyType] = None,
- remote_fields: typing.Optional[typing_extensions.Literal["policy_type"]] = None,
+ remote_fields: typing.Optional[typing.Literal["policy_type"]] = None,
remote_id: typing.Optional[str] = None,
- show_enum_origins: typing.Optional[typing_extensions.Literal["policy_type"]] = None,
+ show_enum_origins: typing.Optional[typing.Literal["policy_type"]] = None,
+ request_options: typing.Optional[RequestOptions] = None,
) -> PaginatedTimeOffBalanceList:
"""
Returns a list of `TimeOffBalance` objects.
@@ -220,7 +259,7 @@ async def list(
- employee_id: typing.Optional[str]. If provided, will only return time off balances for this employee.
- - expand: typing.Optional[typing_extensions.Literal["employee"]]. Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces.
+ - expand: typing.Optional[typing.Literal["employee"]]. Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces.
- include_deleted_data: typing.Optional[bool]. Whether to include data that was marked as deleted by third party webhooks.
@@ -240,11 +279,13 @@ async def list(
- `JURY_DUTY` - JURY_DUTY
- `VOLUNTEER` - VOLUNTEER
- `BEREAVEMENT` - BEREAVEMENT
- - remote_fields: typing.Optional[typing_extensions.Literal["policy_type"]]. Deprecated. Use show_enum_origins.
+ - remote_fields: typing.Optional[typing.Literal["policy_type"]]. Deprecated. Use show_enum_origins.
- remote_id: typing.Optional[str]. The API provider's ID for the given object.
- - show_enum_origins: typing.Optional[typing_extensions.Literal["policy_type"]]. Which fields should be returned in non-normalized form.
+ - show_enum_origins: typing.Optional[typing.Literal["policy_type"]]. Which fields should be returned in non-normalized form.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import AsyncMerge
from merge.resources.hris import TimeOffBalancesListRequestPolicyType
@@ -263,26 +304,42 @@ async def list(
_response = await self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/hris/v1/time-off-balances"),
- params=remove_none_from_dict(
- {
- "created_after": serialize_datetime(created_after) if created_after is not None else None,
- "created_before": serialize_datetime(created_before) if created_before is not None else None,
- "cursor": cursor,
- "employee_id": employee_id,
- "expand": expand,
- "include_deleted_data": include_deleted_data,
- "include_remote_data": include_remote_data,
- "modified_after": serialize_datetime(modified_after) if modified_after is not None else None,
- "modified_before": serialize_datetime(modified_before) if modified_before is not None else None,
- "page_size": page_size,
- "policy_type": policy_type,
- "remote_fields": remote_fields,
- "remote_id": remote_id,
- "show_enum_origins": show_enum_origins,
- }
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "created_after": serialize_datetime(created_after) if created_after is not None else None,
+ "created_before": serialize_datetime(created_before) if created_before is not None else None,
+ "cursor": cursor,
+ "employee_id": employee_id,
+ "expand": expand,
+ "include_deleted_data": include_deleted_data,
+ "include_remote_data": include_remote_data,
+ "modified_after": serialize_datetime(modified_after) if modified_after is not None else None,
+ "modified_before": serialize_datetime(modified_before) if modified_before is not None else None,
+ "page_size": page_size,
+ "policy_type": policy_type,
+ "remote_fields": remote_fields,
+ "remote_id": remote_id,
+ "show_enum_origins": show_enum_origins,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(PaginatedTimeOffBalanceList, _response.json()) # type: ignore
@@ -296,10 +353,11 @@ async def retrieve(
self,
id: str,
*,
- expand: typing.Optional[typing_extensions.Literal["employee"]] = None,
+ expand: typing.Optional[typing.Literal["employee"]] = None,
include_remote_data: typing.Optional[bool] = None,
- remote_fields: typing.Optional[typing_extensions.Literal["policy_type"]] = None,
- show_enum_origins: typing.Optional[typing_extensions.Literal["policy_type"]] = None,
+ remote_fields: typing.Optional[typing.Literal["policy_type"]] = None,
+ show_enum_origins: typing.Optional[typing.Literal["policy_type"]] = None,
+ request_options: typing.Optional[RequestOptions] = None,
) -> TimeOffBalance:
"""
Returns a `TimeOffBalance` object with the given `id`.
@@ -307,13 +365,15 @@ async def retrieve(
Parameters:
- id: str.
- - expand: typing.Optional[typing_extensions.Literal["employee"]]. Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces.
+ - expand: typing.Optional[typing.Literal["employee"]]. Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces.
- include_remote_data: typing.Optional[bool]. Whether to include the original data Merge fetched from the third-party to produce these models.
- - remote_fields: typing.Optional[typing_extensions.Literal["policy_type"]]. Deprecated. Use show_enum_origins.
+ - remote_fields: typing.Optional[typing.Literal["policy_type"]]. Deprecated. Use show_enum_origins.
- - show_enum_origins: typing.Optional[typing_extensions.Literal["policy_type"]]. Which fields should be returned in non-normalized form.
+ - show_enum_origins: typing.Optional[typing.Literal["policy_type"]]. Which fields should be returned in non-normalized form.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import AsyncMerge
@@ -322,7 +382,7 @@ async def retrieve(
api_key="YOUR_API_KEY",
)
await client.hris.time_off_balances.retrieve(
- id="id",
+ id="string",
expand="employee",
remote_fields="policy_type",
show_enum_origins="policy_type",
@@ -331,16 +391,32 @@ async def retrieve(
_response = await self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", f"api/hris/v1/time-off-balances/{id}"),
- params=remove_none_from_dict(
- {
- "expand": expand,
- "include_remote_data": include_remote_data,
- "remote_fields": remote_fields,
- "show_enum_origins": show_enum_origins,
- }
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "expand": expand,
+ "include_remote_data": include_remote_data,
+ "remote_fields": remote_fields,
+ "show_enum_origins": show_enum_origins,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(TimeOffBalance, _response.json()) # type: ignore
diff --git a/src/merge/resources/hris/resources/timesheet_entries/client.py b/src/merge/resources/hris/resources/timesheet_entries/client.py
index cb24d5df..8fe2a3b5 100644
--- a/src/merge/resources/hris/resources/timesheet_entries/client.py
+++ b/src/merge/resources/hris/resources/timesheet_entries/client.py
@@ -10,6 +10,7 @@
from .....core.datetime_utils import serialize_datetime
from .....core.jsonable_encoder import jsonable_encoder
from .....core.remove_none_from_dict import remove_none_from_dict
+from .....core.request_options import RequestOptions
from ...types.meta_response import MetaResponse
from ...types.paginated_timesheet_entry_list import PaginatedTimesheetEntryList
from ...types.timesheet_entry import TimesheetEntry
@@ -48,6 +49,7 @@ def list(
remote_id: typing.Optional[str] = None,
started_after: typing.Optional[str] = None,
started_before: typing.Optional[str] = None,
+ request_options: typing.Optional[RequestOptions] = None,
) -> PaginatedTimesheetEntryList:
"""
Returns a list of `TimesheetEntry` objects.
@@ -82,6 +84,8 @@ def list(
- started_after: typing.Optional[str]. If provided, will only return employee payroll runs started after this datetime.
- started_before: typing.Optional[str]. If provided, will only return employee payroll runs started before this datetime.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import Merge
from merge.resources.hris import TimesheetEntriesListRequestOrderBy
@@ -97,27 +101,43 @@ def list(
_response = self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/hris/v1/timesheet-entries"),
- params=remove_none_from_dict(
- {
- "created_after": serialize_datetime(created_after) if created_after is not None else None,
- "created_before": serialize_datetime(created_before) if created_before is not None else None,
- "cursor": cursor,
- "employee_id": employee_id,
- "ended_after": ended_after,
- "ended_before": ended_before,
- "include_deleted_data": include_deleted_data,
- "include_remote_data": include_remote_data,
- "modified_after": serialize_datetime(modified_after) if modified_after is not None else None,
- "modified_before": serialize_datetime(modified_before) if modified_before is not None else None,
- "order_by": order_by,
- "page_size": page_size,
- "remote_id": remote_id,
- "started_after": started_after,
- "started_before": started_before,
- }
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "created_after": serialize_datetime(created_after) if created_after is not None else None,
+ "created_before": serialize_datetime(created_before) if created_before is not None else None,
+ "cursor": cursor,
+ "employee_id": employee_id,
+ "ended_after": ended_after,
+ "ended_before": ended_before,
+ "include_deleted_data": include_deleted_data,
+ "include_remote_data": include_remote_data,
+ "modified_after": serialize_datetime(modified_after) if modified_after is not None else None,
+ "modified_before": serialize_datetime(modified_before) if modified_before is not None else None,
+ "order_by": order_by,
+ "page_size": page_size,
+ "remote_id": remote_id,
+ "started_after": started_after,
+ "started_before": started_before,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(PaginatedTimesheetEntryList, _response.json()) # type: ignore
@@ -133,6 +153,7 @@ def create(
is_debug_mode: typing.Optional[bool] = None,
run_async: typing.Optional[bool] = None,
model: TimesheetEntryRequest,
+ request_options: typing.Optional[RequestOptions] = None,
) -> TimesheetEntryResponse:
"""
Creates a `TimesheetEntry` object with the given values.
@@ -143,6 +164,8 @@ def create(
- run_async: typing.Optional[bool]. Whether or not third-party updates should be run asynchronously.
- model: TimesheetEntryRequest.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
import datetime
@@ -169,10 +192,36 @@ def create(
_response = self._client_wrapper.httpx_client.request(
"POST",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/hris/v1/timesheet-entries"),
- params=remove_none_from_dict({"is_debug_mode": is_debug_mode, "run_async": run_async}),
- json=jsonable_encoder({"model": model}),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "is_debug_mode": is_debug_mode,
+ "run_async": run_async,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ json=jsonable_encoder({"model": model})
+ if request_options is None or request_options.get("additional_body_parameters") is None
+ else {
+ **jsonable_encoder({"model": model}),
+ **(jsonable_encoder(remove_none_from_dict(request_options.get("additional_body_parameters", {})))),
+ },
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(TimesheetEntryResponse, _response.json()) # type: ignore
@@ -182,7 +231,13 @@ def create(
raise ApiError(status_code=_response.status_code, body=_response.text)
raise ApiError(status_code=_response.status_code, body=_response_json)
- def retrieve(self, id: str, *, include_remote_data: typing.Optional[bool] = None) -> TimesheetEntry:
+ def retrieve(
+ self,
+ id: str,
+ *,
+ include_remote_data: typing.Optional[bool] = None,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> TimesheetEntry:
"""
Returns a `TimesheetEntry` object with the given `id`.
@@ -190,6 +245,8 @@ def retrieve(self, id: str, *, include_remote_data: typing.Optional[bool] = None
- id: str.
- include_remote_data: typing.Optional[bool]. Whether to include the original data Merge fetched from the third-party to produce these models.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import Merge
@@ -198,15 +255,35 @@ def retrieve(self, id: str, *, include_remote_data: typing.Optional[bool] = None
api_key="YOUR_API_KEY",
)
client.hris.timesheet_entries.retrieve(
- id="id",
+ id="string",
)
"""
_response = self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", f"api/hris/v1/timesheet-entries/{id}"),
- params=remove_none_from_dict({"include_remote_data": include_remote_data}),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "include_remote_data": include_remote_data,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(TimesheetEntry, _response.json()) # type: ignore
@@ -216,10 +293,12 @@ def retrieve(self, id: str, *, include_remote_data: typing.Optional[bool] = None
raise ApiError(status_code=_response.status_code, body=_response.text)
raise ApiError(status_code=_response.status_code, body=_response_json)
- def meta_post_retrieve(self) -> MetaResponse:
+ def meta_post_retrieve(self, *, request_options: typing.Optional[RequestOptions] = None) -> MetaResponse:
"""
Returns metadata for `TimesheetEntry` POSTs.
+ Parameters:
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import Merge
@@ -232,8 +311,20 @@ def meta_post_retrieve(self) -> MetaResponse:
_response = self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/hris/v1/timesheet-entries/meta/post"),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ request_options.get("additional_query_parameters") if request_options is not None else None
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(MetaResponse, _response.json()) # type: ignore
@@ -266,6 +357,7 @@ async def list(
remote_id: typing.Optional[str] = None,
started_after: typing.Optional[str] = None,
started_before: typing.Optional[str] = None,
+ request_options: typing.Optional[RequestOptions] = None,
) -> PaginatedTimesheetEntryList:
"""
Returns a list of `TimesheetEntry` objects.
@@ -300,6 +392,8 @@ async def list(
- started_after: typing.Optional[str]. If provided, will only return employee payroll runs started after this datetime.
- started_before: typing.Optional[str]. If provided, will only return employee payroll runs started before this datetime.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import AsyncMerge
from merge.resources.hris import TimesheetEntriesListRequestOrderBy
@@ -315,27 +409,43 @@ async def list(
_response = await self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/hris/v1/timesheet-entries"),
- params=remove_none_from_dict(
- {
- "created_after": serialize_datetime(created_after) if created_after is not None else None,
- "created_before": serialize_datetime(created_before) if created_before is not None else None,
- "cursor": cursor,
- "employee_id": employee_id,
- "ended_after": ended_after,
- "ended_before": ended_before,
- "include_deleted_data": include_deleted_data,
- "include_remote_data": include_remote_data,
- "modified_after": serialize_datetime(modified_after) if modified_after is not None else None,
- "modified_before": serialize_datetime(modified_before) if modified_before is not None else None,
- "order_by": order_by,
- "page_size": page_size,
- "remote_id": remote_id,
- "started_after": started_after,
- "started_before": started_before,
- }
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "created_after": serialize_datetime(created_after) if created_after is not None else None,
+ "created_before": serialize_datetime(created_before) if created_before is not None else None,
+ "cursor": cursor,
+ "employee_id": employee_id,
+ "ended_after": ended_after,
+ "ended_before": ended_before,
+ "include_deleted_data": include_deleted_data,
+ "include_remote_data": include_remote_data,
+ "modified_after": serialize_datetime(modified_after) if modified_after is not None else None,
+ "modified_before": serialize_datetime(modified_before) if modified_before is not None else None,
+ "order_by": order_by,
+ "page_size": page_size,
+ "remote_id": remote_id,
+ "started_after": started_after,
+ "started_before": started_before,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(PaginatedTimesheetEntryList, _response.json()) # type: ignore
@@ -351,6 +461,7 @@ async def create(
is_debug_mode: typing.Optional[bool] = None,
run_async: typing.Optional[bool] = None,
model: TimesheetEntryRequest,
+ request_options: typing.Optional[RequestOptions] = None,
) -> TimesheetEntryResponse:
"""
Creates a `TimesheetEntry` object with the given values.
@@ -361,6 +472,8 @@ async def create(
- run_async: typing.Optional[bool]. Whether or not third-party updates should be run asynchronously.
- model: TimesheetEntryRequest.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
import datetime
@@ -387,10 +500,36 @@ async def create(
_response = await self._client_wrapper.httpx_client.request(
"POST",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/hris/v1/timesheet-entries"),
- params=remove_none_from_dict({"is_debug_mode": is_debug_mode, "run_async": run_async}),
- json=jsonable_encoder({"model": model}),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "is_debug_mode": is_debug_mode,
+ "run_async": run_async,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ json=jsonable_encoder({"model": model})
+ if request_options is None or request_options.get("additional_body_parameters") is None
+ else {
+ **jsonable_encoder({"model": model}),
+ **(jsonable_encoder(remove_none_from_dict(request_options.get("additional_body_parameters", {})))),
+ },
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(TimesheetEntryResponse, _response.json()) # type: ignore
@@ -400,7 +539,13 @@ async def create(
raise ApiError(status_code=_response.status_code, body=_response.text)
raise ApiError(status_code=_response.status_code, body=_response_json)
- async def retrieve(self, id: str, *, include_remote_data: typing.Optional[bool] = None) -> TimesheetEntry:
+ async def retrieve(
+ self,
+ id: str,
+ *,
+ include_remote_data: typing.Optional[bool] = None,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> TimesheetEntry:
"""
Returns a `TimesheetEntry` object with the given `id`.
@@ -408,6 +553,8 @@ async def retrieve(self, id: str, *, include_remote_data: typing.Optional[bool]
- id: str.
- include_remote_data: typing.Optional[bool]. Whether to include the original data Merge fetched from the third-party to produce these models.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import AsyncMerge
@@ -416,15 +563,35 @@ async def retrieve(self, id: str, *, include_remote_data: typing.Optional[bool]
api_key="YOUR_API_KEY",
)
await client.hris.timesheet_entries.retrieve(
- id="id",
+ id="string",
)
"""
_response = await self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", f"api/hris/v1/timesheet-entries/{id}"),
- params=remove_none_from_dict({"include_remote_data": include_remote_data}),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "include_remote_data": include_remote_data,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(TimesheetEntry, _response.json()) # type: ignore
@@ -434,10 +601,12 @@ async def retrieve(self, id: str, *, include_remote_data: typing.Optional[bool]
raise ApiError(status_code=_response.status_code, body=_response.text)
raise ApiError(status_code=_response.status_code, body=_response_json)
- async def meta_post_retrieve(self) -> MetaResponse:
+ async def meta_post_retrieve(self, *, request_options: typing.Optional[RequestOptions] = None) -> MetaResponse:
"""
Returns metadata for `TimesheetEntry` POSTs.
+ Parameters:
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import AsyncMerge
@@ -450,8 +619,20 @@ async def meta_post_retrieve(self) -> MetaResponse:
_response = await self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/hris/v1/timesheet-entries/meta/post"),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ request_options.get("additional_query_parameters") if request_options is not None else None
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(MetaResponse, _response.json()) # type: ignore
diff --git a/src/merge/resources/hris/resources/webhook_receivers/client.py b/src/merge/resources/hris/resources/webhook_receivers/client.py
index 6b699682..d2544011 100644
--- a/src/merge/resources/hris/resources/webhook_receivers/client.py
+++ b/src/merge/resources/hris/resources/webhook_receivers/client.py
@@ -7,6 +7,8 @@
from .....core.api_error import ApiError
from .....core.client_wrapper import AsyncClientWrapper, SyncClientWrapper
from .....core.jsonable_encoder import jsonable_encoder
+from .....core.remove_none_from_dict import remove_none_from_dict
+from .....core.request_options import RequestOptions
from ...types.webhook_receiver import WebhookReceiver
try:
@@ -22,10 +24,12 @@ class WebhookReceiversClient:
def __init__(self, *, client_wrapper: SyncClientWrapper):
self._client_wrapper = client_wrapper
- def list(self) -> typing.List[WebhookReceiver]:
+ def list(self, *, request_options: typing.Optional[RequestOptions] = None) -> typing.List[WebhookReceiver]:
"""
Returns a list of `WebhookReceiver` objects.
+ Parameters:
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import Merge
@@ -38,8 +42,20 @@ def list(self) -> typing.List[WebhookReceiver]:
_response = self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/hris/v1/webhook-receivers"),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ request_options.get("additional_query_parameters") if request_options is not None else None
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(typing.List[WebhookReceiver], _response.json()) # type: ignore
@@ -49,7 +65,14 @@ def list(self) -> typing.List[WebhookReceiver]:
raise ApiError(status_code=_response.status_code, body=_response.text)
raise ApiError(status_code=_response.status_code, body=_response_json)
- def create(self, *, event: str, is_active: bool, key: typing.Optional[str] = OMIT) -> WebhookReceiver:
+ def create(
+ self,
+ *,
+ event: str,
+ is_active: bool,
+ key: typing.Optional[str] = OMIT,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> WebhookReceiver:
"""
Creates a `WebhookReceiver` object with the given values.
@@ -59,6 +82,19 @@ def create(self, *, event: str, is_active: bool, key: typing.Optional[str] = OMI
- is_active: bool.
- key: typing.Optional[str].
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
+ ---
+ from merge.client import Merge
+
+ client = Merge(
+ account_token="YOUR_ACCOUNT_TOKEN",
+ api_key="YOUR_API_KEY",
+ )
+ client.hris.webhook_receivers.create(
+ event="string",
+ is_active=True,
+ )
"""
_request: typing.Dict[str, typing.Any] = {"event": event, "is_active": is_active}
if key is not OMIT:
@@ -66,9 +102,26 @@ def create(self, *, event: str, is_active: bool, key: typing.Optional[str] = OMI
_response = self._client_wrapper.httpx_client.request(
"POST",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/hris/v1/webhook-receivers"),
- json=jsonable_encoder(_request),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ request_options.get("additional_query_parameters") if request_options is not None else None
+ ),
+ json=jsonable_encoder(_request)
+ if request_options is None or request_options.get("additional_body_parameters") is None
+ else {
+ **jsonable_encoder(_request),
+ **(jsonable_encoder(remove_none_from_dict(request_options.get("additional_body_parameters", {})))),
+ },
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(WebhookReceiver, _response.json()) # type: ignore
@@ -83,10 +136,12 @@ class AsyncWebhookReceiversClient:
def __init__(self, *, client_wrapper: AsyncClientWrapper):
self._client_wrapper = client_wrapper
- async def list(self) -> typing.List[WebhookReceiver]:
+ async def list(self, *, request_options: typing.Optional[RequestOptions] = None) -> typing.List[WebhookReceiver]:
"""
Returns a list of `WebhookReceiver` objects.
+ Parameters:
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import AsyncMerge
@@ -99,8 +154,20 @@ async def list(self) -> typing.List[WebhookReceiver]:
_response = await self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/hris/v1/webhook-receivers"),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ request_options.get("additional_query_parameters") if request_options is not None else None
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(typing.List[WebhookReceiver], _response.json()) # type: ignore
@@ -110,7 +177,14 @@ async def list(self) -> typing.List[WebhookReceiver]:
raise ApiError(status_code=_response.status_code, body=_response.text)
raise ApiError(status_code=_response.status_code, body=_response_json)
- async def create(self, *, event: str, is_active: bool, key: typing.Optional[str] = OMIT) -> WebhookReceiver:
+ async def create(
+ self,
+ *,
+ event: str,
+ is_active: bool,
+ key: typing.Optional[str] = OMIT,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> WebhookReceiver:
"""
Creates a `WebhookReceiver` object with the given values.
@@ -120,6 +194,19 @@ async def create(self, *, event: str, is_active: bool, key: typing.Optional[str]
- is_active: bool.
- key: typing.Optional[str].
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
+ ---
+ from merge.client import AsyncMerge
+
+ client = AsyncMerge(
+ account_token="YOUR_ACCOUNT_TOKEN",
+ api_key="YOUR_API_KEY",
+ )
+ await client.hris.webhook_receivers.create(
+ event="string",
+ is_active=True,
+ )
"""
_request: typing.Dict[str, typing.Any] = {"event": event, "is_active": is_active}
if key is not OMIT:
@@ -127,9 +214,26 @@ async def create(self, *, event: str, is_active: bool, key: typing.Optional[str]
_response = await self._client_wrapper.httpx_client.request(
"POST",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/hris/v1/webhook-receivers"),
- json=jsonable_encoder(_request),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ request_options.get("additional_query_parameters") if request_options is not None else None
+ ),
+ json=jsonable_encoder(_request)
+ if request_options is None or request_options.get("additional_body_parameters") is None
+ else {
+ **jsonable_encoder(_request),
+ **(jsonable_encoder(remove_none_from_dict(request_options.get("additional_body_parameters", {})))),
+ },
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(WebhookReceiver, _response.json()) # type: ignore
diff --git a/src/merge/resources/ticketing/resources/account_details/client.py b/src/merge/resources/ticketing/resources/account_details/client.py
index fabab6b8..dd3bee8b 100644
--- a/src/merge/resources/ticketing/resources/account_details/client.py
+++ b/src/merge/resources/ticketing/resources/account_details/client.py
@@ -1,10 +1,14 @@
# This file was auto-generated by Fern from our API Definition.
+import typing
import urllib.parse
from json.decoder import JSONDecodeError
from .....core.api_error import ApiError
from .....core.client_wrapper import AsyncClientWrapper, SyncClientWrapper
+from .....core.jsonable_encoder import jsonable_encoder
+from .....core.remove_none_from_dict import remove_none_from_dict
+from .....core.request_options import RequestOptions
from ...types.account_details import AccountDetails
try:
@@ -17,10 +21,12 @@ class AccountDetailsClient:
def __init__(self, *, client_wrapper: SyncClientWrapper):
self._client_wrapper = client_wrapper
- def retrieve(self) -> AccountDetails:
+ def retrieve(self, *, request_options: typing.Optional[RequestOptions] = None) -> AccountDetails:
"""
Get details for a linked account.
+ Parameters:
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import Merge
@@ -33,8 +39,20 @@ def retrieve(self) -> AccountDetails:
_response = self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/ticketing/v1/account-details"),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ request_options.get("additional_query_parameters") if request_options is not None else None
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(AccountDetails, _response.json()) # type: ignore
@@ -49,10 +67,12 @@ class AsyncAccountDetailsClient:
def __init__(self, *, client_wrapper: AsyncClientWrapper):
self._client_wrapper = client_wrapper
- async def retrieve(self) -> AccountDetails:
+ async def retrieve(self, *, request_options: typing.Optional[RequestOptions] = None) -> AccountDetails:
"""
Get details for a linked account.
+ Parameters:
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import AsyncMerge
@@ -65,8 +85,20 @@ async def retrieve(self) -> AccountDetails:
_response = await self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/ticketing/v1/account-details"),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ request_options.get("additional_query_parameters") if request_options is not None else None
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(AccountDetails, _response.json()) # type: ignore
diff --git a/src/merge/resources/ticketing/resources/account_token/client.py b/src/merge/resources/ticketing/resources/account_token/client.py
index 81a61cf5..2dcd65dd 100644
--- a/src/merge/resources/ticketing/resources/account_token/client.py
+++ b/src/merge/resources/ticketing/resources/account_token/client.py
@@ -1,10 +1,14 @@
# This file was auto-generated by Fern from our API Definition.
+import typing
import urllib.parse
from json.decoder import JSONDecodeError
from .....core.api_error import ApiError
from .....core.client_wrapper import AsyncClientWrapper, SyncClientWrapper
+from .....core.jsonable_encoder import jsonable_encoder
+from .....core.remove_none_from_dict import remove_none_from_dict
+from .....core.request_options import RequestOptions
from ...types.account_token import AccountToken
try:
@@ -17,20 +21,44 @@ class AccountTokenClient:
def __init__(self, *, client_wrapper: SyncClientWrapper):
self._client_wrapper = client_wrapper
- def retrieve(self, public_token: str) -> AccountToken:
+ def retrieve(self, public_token: str, *, request_options: typing.Optional[RequestOptions] = None) -> AccountToken:
"""
Returns the account token for the end user with the provided public token.
Parameters:
- public_token: str.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
+ ---
+ from merge.client import Merge
+
+ client = Merge(
+ account_token="YOUR_ACCOUNT_TOKEN",
+ api_key="YOUR_API_KEY",
+ )
+ client.ticketing.account_token.retrieve(
+ public_token="string",
+ )
"""
_response = self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(
f"{self._client_wrapper.get_base_url()}/", f"api/ticketing/v1/account-token/{public_token}"
),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ request_options.get("additional_query_parameters") if request_options is not None else None
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(AccountToken, _response.json()) # type: ignore
@@ -45,20 +73,46 @@ class AsyncAccountTokenClient:
def __init__(self, *, client_wrapper: AsyncClientWrapper):
self._client_wrapper = client_wrapper
- async def retrieve(self, public_token: str) -> AccountToken:
+ async def retrieve(
+ self, public_token: str, *, request_options: typing.Optional[RequestOptions] = None
+ ) -> AccountToken:
"""
Returns the account token for the end user with the provided public token.
Parameters:
- public_token: str.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
+ ---
+ from merge.client import AsyncMerge
+
+ client = AsyncMerge(
+ account_token="YOUR_ACCOUNT_TOKEN",
+ api_key="YOUR_API_KEY",
+ )
+ await client.ticketing.account_token.retrieve(
+ public_token="string",
+ )
"""
_response = await self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(
f"{self._client_wrapper.get_base_url()}/", f"api/ticketing/v1/account-token/{public_token}"
),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ request_options.get("additional_query_parameters") if request_options is not None else None
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(AccountToken, _response.json()) # type: ignore
diff --git a/src/merge/resources/ticketing/resources/accounts/client.py b/src/merge/resources/ticketing/resources/accounts/client.py
index e33733f2..7af09429 100644
--- a/src/merge/resources/ticketing/resources/accounts/client.py
+++ b/src/merge/resources/ticketing/resources/accounts/client.py
@@ -8,7 +8,9 @@
from .....core.api_error import ApiError
from .....core.client_wrapper import AsyncClientWrapper, SyncClientWrapper
from .....core.datetime_utils import serialize_datetime
+from .....core.jsonable_encoder import jsonable_encoder
from .....core.remove_none_from_dict import remove_none_from_dict
+from .....core.request_options import RequestOptions
from ...types.account import Account
from ...types.paginated_account_list import PaginatedAccountList
@@ -34,6 +36,7 @@ def list(
modified_before: typing.Optional[dt.datetime] = None,
page_size: typing.Optional[int] = None,
remote_id: typing.Optional[str] = None,
+ request_options: typing.Optional[RequestOptions] = None,
) -> PaginatedAccountList:
"""
Returns a list of `Account` objects.
@@ -56,6 +59,8 @@ def list(
- page_size: typing.Optional[int]. Number of results to return per page.
- remote_id: typing.Optional[str]. The API provider's ID for the given object.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import Merge
@@ -68,21 +73,37 @@ def list(
_response = self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/ticketing/v1/accounts"),
- params=remove_none_from_dict(
- {
- "created_after": serialize_datetime(created_after) if created_after is not None else None,
- "created_before": serialize_datetime(created_before) if created_before is not None else None,
- "cursor": cursor,
- "include_deleted_data": include_deleted_data,
- "include_remote_data": include_remote_data,
- "modified_after": serialize_datetime(modified_after) if modified_after is not None else None,
- "modified_before": serialize_datetime(modified_before) if modified_before is not None else None,
- "page_size": page_size,
- "remote_id": remote_id,
- }
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "created_after": serialize_datetime(created_after) if created_after is not None else None,
+ "created_before": serialize_datetime(created_before) if created_before is not None else None,
+ "cursor": cursor,
+ "include_deleted_data": include_deleted_data,
+ "include_remote_data": include_remote_data,
+ "modified_after": serialize_datetime(modified_after) if modified_after is not None else None,
+ "modified_before": serialize_datetime(modified_before) if modified_before is not None else None,
+ "page_size": page_size,
+ "remote_id": remote_id,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(PaginatedAccountList, _response.json()) # type: ignore
@@ -92,7 +113,13 @@ def list(
raise ApiError(status_code=_response.status_code, body=_response.text)
raise ApiError(status_code=_response.status_code, body=_response_json)
- def retrieve(self, id: str, *, include_remote_data: typing.Optional[bool] = None) -> Account:
+ def retrieve(
+ self,
+ id: str,
+ *,
+ include_remote_data: typing.Optional[bool] = None,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> Account:
"""
Returns an `Account` object with the given `id`.
@@ -100,6 +127,8 @@ def retrieve(self, id: str, *, include_remote_data: typing.Optional[bool] = None
- id: str.
- include_remote_data: typing.Optional[bool]. Whether to include the original data Merge fetched from the third-party to produce these models.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import Merge
@@ -108,15 +137,35 @@ def retrieve(self, id: str, *, include_remote_data: typing.Optional[bool] = None
api_key="YOUR_API_KEY",
)
client.ticketing.accounts.retrieve(
- id="id",
+ id="string",
)
"""
_response = self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", f"api/ticketing/v1/accounts/{id}"),
- params=remove_none_from_dict({"include_remote_data": include_remote_data}),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "include_remote_data": include_remote_data,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(Account, _response.json()) # type: ignore
@@ -143,6 +192,7 @@ async def list(
modified_before: typing.Optional[dt.datetime] = None,
page_size: typing.Optional[int] = None,
remote_id: typing.Optional[str] = None,
+ request_options: typing.Optional[RequestOptions] = None,
) -> PaginatedAccountList:
"""
Returns a list of `Account` objects.
@@ -165,6 +215,8 @@ async def list(
- page_size: typing.Optional[int]. Number of results to return per page.
- remote_id: typing.Optional[str]. The API provider's ID for the given object.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import AsyncMerge
@@ -177,21 +229,37 @@ async def list(
_response = await self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/ticketing/v1/accounts"),
- params=remove_none_from_dict(
- {
- "created_after": serialize_datetime(created_after) if created_after is not None else None,
- "created_before": serialize_datetime(created_before) if created_before is not None else None,
- "cursor": cursor,
- "include_deleted_data": include_deleted_data,
- "include_remote_data": include_remote_data,
- "modified_after": serialize_datetime(modified_after) if modified_after is not None else None,
- "modified_before": serialize_datetime(modified_before) if modified_before is not None else None,
- "page_size": page_size,
- "remote_id": remote_id,
- }
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "created_after": serialize_datetime(created_after) if created_after is not None else None,
+ "created_before": serialize_datetime(created_before) if created_before is not None else None,
+ "cursor": cursor,
+ "include_deleted_data": include_deleted_data,
+ "include_remote_data": include_remote_data,
+ "modified_after": serialize_datetime(modified_after) if modified_after is not None else None,
+ "modified_before": serialize_datetime(modified_before) if modified_before is not None else None,
+ "page_size": page_size,
+ "remote_id": remote_id,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(PaginatedAccountList, _response.json()) # type: ignore
@@ -201,7 +269,13 @@ async def list(
raise ApiError(status_code=_response.status_code, body=_response.text)
raise ApiError(status_code=_response.status_code, body=_response_json)
- async def retrieve(self, id: str, *, include_remote_data: typing.Optional[bool] = None) -> Account:
+ async def retrieve(
+ self,
+ id: str,
+ *,
+ include_remote_data: typing.Optional[bool] = None,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> Account:
"""
Returns an `Account` object with the given `id`.
@@ -209,6 +283,8 @@ async def retrieve(self, id: str, *, include_remote_data: typing.Optional[bool]
- id: str.
- include_remote_data: typing.Optional[bool]. Whether to include the original data Merge fetched from the third-party to produce these models.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import AsyncMerge
@@ -217,15 +293,35 @@ async def retrieve(self, id: str, *, include_remote_data: typing.Optional[bool]
api_key="YOUR_API_KEY",
)
await client.ticketing.accounts.retrieve(
- id="id",
+ id="string",
)
"""
_response = await self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", f"api/ticketing/v1/accounts/{id}"),
- params=remove_none_from_dict({"include_remote_data": include_remote_data}),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "include_remote_data": include_remote_data,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(Account, _response.json()) # type: ignore
diff --git a/src/merge/resources/ticketing/resources/async_passthrough/client.py b/src/merge/resources/ticketing/resources/async_passthrough/client.py
index 43e53411..ff79f10a 100644
--- a/src/merge/resources/ticketing/resources/async_passthrough/client.py
+++ b/src/merge/resources/ticketing/resources/async_passthrough/client.py
@@ -7,6 +7,8 @@
from .....core.api_error import ApiError
from .....core.client_wrapper import AsyncClientWrapper, SyncClientWrapper
from .....core.jsonable_encoder import jsonable_encoder
+from .....core.remove_none_from_dict import remove_none_from_dict
+from .....core.request_options import RequestOptions
from ...types.async_passthrough_reciept import AsyncPassthroughReciept
from ...types.data_passthrough_request import DataPassthroughRequest
from ...types.remote_response import RemoteResponse
@@ -24,18 +26,21 @@ class AsyncPassthroughClient:
def __init__(self, *, client_wrapper: SyncClientWrapper):
self._client_wrapper = client_wrapper
- def create(self, *, request: DataPassthroughRequest) -> AsyncPassthroughReciept:
+ def create(
+ self, *, request: DataPassthroughRequest, request_options: typing.Optional[RequestOptions] = None
+ ) -> AsyncPassthroughReciept:
"""
Asynchronously pull data from an endpoint not currently supported by Merge.
Parameters:
- request: DataPassthroughRequest.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import Merge
from merge.resources.ticketing import (
DataPassthroughRequest,
MethodEnum,
- MultipartFormFieldRequest,
RequestFormatEnum,
)
@@ -48,14 +53,6 @@ def create(self, *, request: DataPassthroughRequest) -> AsyncPassthroughReciept:
method=MethodEnum.GET,
path="/scooters",
data='{"company": "Lime", "model": "Gen 2.5"}',
- multipart_form_data=[
- MultipartFormFieldRequest(
- name="resume",
- data="SW50ZWdyYXRlIGZhc3QKSW50ZWdyYXRlIG9uY2U=",
- file_name="resume.pdf",
- content_type="application/pdf",
- )
- ],
request_format=RequestFormatEnum.JSON,
),
)
@@ -63,9 +60,26 @@ def create(self, *, request: DataPassthroughRequest) -> AsyncPassthroughReciept:
_response = self._client_wrapper.httpx_client.request(
"POST",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/ticketing/v1/async-passthrough"),
- json=jsonable_encoder(request),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ request_options.get("additional_query_parameters") if request_options is not None else None
+ ),
+ json=jsonable_encoder(request)
+ if request_options is None or request_options.get("additional_body_parameters") is None
+ else {
+ **jsonable_encoder(request),
+ **(jsonable_encoder(remove_none_from_dict(request_options.get("additional_body_parameters", {})))),
+ },
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(AsyncPassthroughReciept, _response.json()) # type: ignore
@@ -75,12 +89,26 @@ def create(self, *, request: DataPassthroughRequest) -> AsyncPassthroughReciept:
raise ApiError(status_code=_response.status_code, body=_response.text)
raise ApiError(status_code=_response.status_code, body=_response_json)
- def retrieve(self, async_passthrough_receipt_id: str) -> RemoteResponse:
+ def retrieve(
+ self, async_passthrough_receipt_id: str, *, request_options: typing.Optional[RequestOptions] = None
+ ) -> RemoteResponse:
"""
Retrieves data from earlier async-passthrough POST request
Parameters:
- async_passthrough_receipt_id: str.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
+ ---
+ from merge.client import Merge
+
+ client = Merge(
+ account_token="YOUR_ACCOUNT_TOKEN",
+ api_key="YOUR_API_KEY",
+ )
+ client.ticketing.async_passthrough.retrieve(
+ async_passthrough_receipt_id="string",
+ )
"""
_response = self._client_wrapper.httpx_client.request(
"GET",
@@ -88,8 +116,20 @@ def retrieve(self, async_passthrough_receipt_id: str) -> RemoteResponse:
f"{self._client_wrapper.get_base_url()}/",
f"api/ticketing/v1/async-passthrough/{async_passthrough_receipt_id}",
),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ request_options.get("additional_query_parameters") if request_options is not None else None
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(RemoteResponse, _response.json()) # type: ignore
@@ -104,18 +144,21 @@ class AsyncAsyncPassthroughClient:
def __init__(self, *, client_wrapper: AsyncClientWrapper):
self._client_wrapper = client_wrapper
- async def create(self, *, request: DataPassthroughRequest) -> AsyncPassthroughReciept:
+ async def create(
+ self, *, request: DataPassthroughRequest, request_options: typing.Optional[RequestOptions] = None
+ ) -> AsyncPassthroughReciept:
"""
Asynchronously pull data from an endpoint not currently supported by Merge.
Parameters:
- request: DataPassthroughRequest.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import AsyncMerge
from merge.resources.ticketing import (
DataPassthroughRequest,
MethodEnum,
- MultipartFormFieldRequest,
RequestFormatEnum,
)
@@ -128,14 +171,6 @@ async def create(self, *, request: DataPassthroughRequest) -> AsyncPassthroughRe
method=MethodEnum.GET,
path="/scooters",
data='{"company": "Lime", "model": "Gen 2.5"}',
- multipart_form_data=[
- MultipartFormFieldRequest(
- name="resume",
- data="SW50ZWdyYXRlIGZhc3QKSW50ZWdyYXRlIG9uY2U=",
- file_name="resume.pdf",
- content_type="application/pdf",
- )
- ],
request_format=RequestFormatEnum.JSON,
),
)
@@ -143,9 +178,26 @@ async def create(self, *, request: DataPassthroughRequest) -> AsyncPassthroughRe
_response = await self._client_wrapper.httpx_client.request(
"POST",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/ticketing/v1/async-passthrough"),
- json=jsonable_encoder(request),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ request_options.get("additional_query_parameters") if request_options is not None else None
+ ),
+ json=jsonable_encoder(request)
+ if request_options is None or request_options.get("additional_body_parameters") is None
+ else {
+ **jsonable_encoder(request),
+ **(jsonable_encoder(remove_none_from_dict(request_options.get("additional_body_parameters", {})))),
+ },
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(AsyncPassthroughReciept, _response.json()) # type: ignore
@@ -155,12 +207,26 @@ async def create(self, *, request: DataPassthroughRequest) -> AsyncPassthroughRe
raise ApiError(status_code=_response.status_code, body=_response.text)
raise ApiError(status_code=_response.status_code, body=_response_json)
- async def retrieve(self, async_passthrough_receipt_id: str) -> RemoteResponse:
+ async def retrieve(
+ self, async_passthrough_receipt_id: str, *, request_options: typing.Optional[RequestOptions] = None
+ ) -> RemoteResponse:
"""
Retrieves data from earlier async-passthrough POST request
Parameters:
- async_passthrough_receipt_id: str.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
+ ---
+ from merge.client import AsyncMerge
+
+ client = AsyncMerge(
+ account_token="YOUR_ACCOUNT_TOKEN",
+ api_key="YOUR_API_KEY",
+ )
+ await client.ticketing.async_passthrough.retrieve(
+ async_passthrough_receipt_id="string",
+ )
"""
_response = await self._client_wrapper.httpx_client.request(
"GET",
@@ -168,8 +234,20 @@ async def retrieve(self, async_passthrough_receipt_id: str) -> RemoteResponse:
f"{self._client_wrapper.get_base_url()}/",
f"api/ticketing/v1/async-passthrough/{async_passthrough_receipt_id}",
),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ request_options.get("additional_query_parameters") if request_options is not None else None
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(RemoteResponse, _response.json()) # type: ignore
diff --git a/src/merge/resources/ticketing/resources/attachments/client.py b/src/merge/resources/ticketing/resources/attachments/client.py
index 57ea7d0e..5c315633 100644
--- a/src/merge/resources/ticketing/resources/attachments/client.py
+++ b/src/merge/resources/ticketing/resources/attachments/client.py
@@ -5,13 +5,12 @@
import urllib.parse
from json.decoder import JSONDecodeError
-import typing_extensions
-
from .....core.api_error import ApiError
from .....core.client_wrapper import AsyncClientWrapper, SyncClientWrapper
from .....core.datetime_utils import serialize_datetime
from .....core.jsonable_encoder import jsonable_encoder
from .....core.remove_none_from_dict import remove_none_from_dict
+from .....core.request_options import RequestOptions
from ...types.attachment import Attachment
from ...types.attachment_request import AttachmentRequest
from ...types.meta_response import MetaResponse
@@ -37,7 +36,7 @@ def list(
created_after: typing.Optional[dt.datetime] = None,
created_before: typing.Optional[dt.datetime] = None,
cursor: typing.Optional[str] = None,
- expand: typing.Optional[typing_extensions.Literal["ticket"]] = None,
+ expand: typing.Optional[typing.Literal["ticket"]] = None,
include_deleted_data: typing.Optional[bool] = None,
include_remote_data: typing.Optional[bool] = None,
modified_after: typing.Optional[dt.datetime] = None,
@@ -46,6 +45,7 @@ def list(
remote_created_after: typing.Optional[dt.datetime] = None,
remote_id: typing.Optional[str] = None,
ticket_id: typing.Optional[str] = None,
+ request_options: typing.Optional[RequestOptions] = None,
) -> PaginatedAttachmentList:
"""
Returns a list of `Attachment` objects.
@@ -57,7 +57,7 @@ def list(
- cursor: typing.Optional[str]. The pagination cursor value.
- - expand: typing.Optional[typing_extensions.Literal["ticket"]]. Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces.
+ - expand: typing.Optional[typing.Literal["ticket"]]. Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces.
- include_deleted_data: typing.Optional[bool]. Whether to include data that was marked as deleted by third party webhooks.
@@ -74,6 +74,8 @@ def list(
- remote_id: typing.Optional[str]. The API provider's ID for the given object.
- ticket_id: typing.Optional[str]. If provided, will only return comments for this ticket.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import Merge
@@ -88,26 +90,42 @@ def list(
_response = self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/ticketing/v1/attachments"),
- params=remove_none_from_dict(
- {
- "created_after": serialize_datetime(created_after) if created_after is not None else None,
- "created_before": serialize_datetime(created_before) if created_before is not None else None,
- "cursor": cursor,
- "expand": expand,
- "include_deleted_data": include_deleted_data,
- "include_remote_data": include_remote_data,
- "modified_after": serialize_datetime(modified_after) if modified_after is not None else None,
- "modified_before": serialize_datetime(modified_before) if modified_before is not None else None,
- "page_size": page_size,
- "remote_created_after": serialize_datetime(remote_created_after)
- if remote_created_after is not None
- else None,
- "remote_id": remote_id,
- "ticket_id": ticket_id,
- }
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "created_after": serialize_datetime(created_after) if created_after is not None else None,
+ "created_before": serialize_datetime(created_before) if created_before is not None else None,
+ "cursor": cursor,
+ "expand": expand,
+ "include_deleted_data": include_deleted_data,
+ "include_remote_data": include_remote_data,
+ "modified_after": serialize_datetime(modified_after) if modified_after is not None else None,
+ "modified_before": serialize_datetime(modified_before) if modified_before is not None else None,
+ "page_size": page_size,
+ "remote_created_after": serialize_datetime(remote_created_after)
+ if remote_created_after is not None
+ else None,
+ "remote_id": remote_id,
+ "ticket_id": ticket_id,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(PaginatedAttachmentList, _response.json()) # type: ignore
@@ -123,6 +141,7 @@ def create(
is_debug_mode: typing.Optional[bool] = None,
run_async: typing.Optional[bool] = None,
model: AttachmentRequest,
+ request_options: typing.Optional[RequestOptions] = None,
) -> TicketingAttachmentResponse:
"""
Creates an `Attachment` object with the given values.
@@ -133,6 +152,8 @@ def create(
- run_async: typing.Optional[bool]. Whether or not third-party updates should be run asynchronously.
- model: AttachmentRequest.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import Merge
from merge.resources.ticketing import AttachmentRequest
@@ -153,10 +174,36 @@ def create(
_response = self._client_wrapper.httpx_client.request(
"POST",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/ticketing/v1/attachments"),
- params=remove_none_from_dict({"is_debug_mode": is_debug_mode, "run_async": run_async}),
- json=jsonable_encoder({"model": model}),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "is_debug_mode": is_debug_mode,
+ "run_async": run_async,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ json=jsonable_encoder({"model": model})
+ if request_options is None or request_options.get("additional_body_parameters") is None
+ else {
+ **jsonable_encoder({"model": model}),
+ **(jsonable_encoder(remove_none_from_dict(request_options.get("additional_body_parameters", {})))),
+ },
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(TicketingAttachmentResponse, _response.json()) # type: ignore
@@ -170,8 +217,9 @@ def retrieve(
self,
id: str,
*,
- expand: typing.Optional[typing_extensions.Literal["ticket"]] = None,
+ expand: typing.Optional[typing.Literal["ticket"]] = None,
include_remote_data: typing.Optional[bool] = None,
+ request_options: typing.Optional[RequestOptions] = None,
) -> Attachment:
"""
Returns an `Attachment` object with the given `id`.
@@ -179,9 +227,11 @@ def retrieve(
Parameters:
- id: str.
- - expand: typing.Optional[typing_extensions.Literal["ticket"]]. Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces.
+ - expand: typing.Optional[typing.Literal["ticket"]]. Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces.
- include_remote_data: typing.Optional[bool]. Whether to include the original data Merge fetched from the third-party to produce these models.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import Merge
@@ -190,16 +240,37 @@ def retrieve(
api_key="YOUR_API_KEY",
)
client.ticketing.attachments.retrieve(
- id="id",
+ id="string",
expand="ticket",
)
"""
_response = self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", f"api/ticketing/v1/attachments/{id}"),
- params=remove_none_from_dict({"expand": expand, "include_remote_data": include_remote_data}),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "expand": expand,
+ "include_remote_data": include_remote_data,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(Attachment, _response.json()) # type: ignore
@@ -209,7 +280,13 @@ def retrieve(
raise ApiError(status_code=_response.status_code, body=_response.text)
raise ApiError(status_code=_response.status_code, body=_response_json)
- def download_retrieve(self, id: str, *, mime_type: typing.Optional[str] = None) -> typing.Iterator[bytes]:
+ def download_retrieve(
+ self,
+ id: str,
+ *,
+ mime_type: typing.Optional[str] = None,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> typing.Iterator[bytes]:
"""
Returns an `Attachment` object with the given `id`.
@@ -217,15 +294,37 @@ def download_retrieve(self, id: str, *, mime_type: typing.Optional[str] = None)
- id: str.
- mime_type: typing.Optional[str]. If provided, specifies the export format of the file to be downloaded. For information on supported export formats, please refer to our export format help center article.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
"""
with self._client_wrapper.httpx_client.stream(
"GET",
urllib.parse.urljoin(
f"{self._client_wrapper.get_base_url()}/", f"api/ticketing/v1/attachments/{id}/download"
),
- params=remove_none_from_dict({"mime_type": mime_type}),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "mime_type": mime_type,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
) as _response:
if 200 <= _response.status_code < 300:
for _chunk in _response.iter_bytes():
@@ -238,10 +337,12 @@ def download_retrieve(self, id: str, *, mime_type: typing.Optional[str] = None)
raise ApiError(status_code=_response.status_code, body=_response.text)
raise ApiError(status_code=_response.status_code, body=_response_json)
- def meta_post_retrieve(self) -> MetaResponse:
+ def meta_post_retrieve(self, *, request_options: typing.Optional[RequestOptions] = None) -> MetaResponse:
"""
Returns metadata for `TicketingAttachment` POSTs.
+ Parameters:
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import Merge
@@ -254,8 +355,20 @@ def meta_post_retrieve(self) -> MetaResponse:
_response = self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/ticketing/v1/attachments/meta/post"),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ request_options.get("additional_query_parameters") if request_options is not None else None
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(MetaResponse, _response.json()) # type: ignore
@@ -276,7 +389,7 @@ async def list(
created_after: typing.Optional[dt.datetime] = None,
created_before: typing.Optional[dt.datetime] = None,
cursor: typing.Optional[str] = None,
- expand: typing.Optional[typing_extensions.Literal["ticket"]] = None,
+ expand: typing.Optional[typing.Literal["ticket"]] = None,
include_deleted_data: typing.Optional[bool] = None,
include_remote_data: typing.Optional[bool] = None,
modified_after: typing.Optional[dt.datetime] = None,
@@ -285,6 +398,7 @@ async def list(
remote_created_after: typing.Optional[dt.datetime] = None,
remote_id: typing.Optional[str] = None,
ticket_id: typing.Optional[str] = None,
+ request_options: typing.Optional[RequestOptions] = None,
) -> PaginatedAttachmentList:
"""
Returns a list of `Attachment` objects.
@@ -296,7 +410,7 @@ async def list(
- cursor: typing.Optional[str]. The pagination cursor value.
- - expand: typing.Optional[typing_extensions.Literal["ticket"]]. Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces.
+ - expand: typing.Optional[typing.Literal["ticket"]]. Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces.
- include_deleted_data: typing.Optional[bool]. Whether to include data that was marked as deleted by third party webhooks.
@@ -313,6 +427,8 @@ async def list(
- remote_id: typing.Optional[str]. The API provider's ID for the given object.
- ticket_id: typing.Optional[str]. If provided, will only return comments for this ticket.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import AsyncMerge
@@ -327,26 +443,42 @@ async def list(
_response = await self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/ticketing/v1/attachments"),
- params=remove_none_from_dict(
- {
- "created_after": serialize_datetime(created_after) if created_after is not None else None,
- "created_before": serialize_datetime(created_before) if created_before is not None else None,
- "cursor": cursor,
- "expand": expand,
- "include_deleted_data": include_deleted_data,
- "include_remote_data": include_remote_data,
- "modified_after": serialize_datetime(modified_after) if modified_after is not None else None,
- "modified_before": serialize_datetime(modified_before) if modified_before is not None else None,
- "page_size": page_size,
- "remote_created_after": serialize_datetime(remote_created_after)
- if remote_created_after is not None
- else None,
- "remote_id": remote_id,
- "ticket_id": ticket_id,
- }
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "created_after": serialize_datetime(created_after) if created_after is not None else None,
+ "created_before": serialize_datetime(created_before) if created_before is not None else None,
+ "cursor": cursor,
+ "expand": expand,
+ "include_deleted_data": include_deleted_data,
+ "include_remote_data": include_remote_data,
+ "modified_after": serialize_datetime(modified_after) if modified_after is not None else None,
+ "modified_before": serialize_datetime(modified_before) if modified_before is not None else None,
+ "page_size": page_size,
+ "remote_created_after": serialize_datetime(remote_created_after)
+ if remote_created_after is not None
+ else None,
+ "remote_id": remote_id,
+ "ticket_id": ticket_id,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(PaginatedAttachmentList, _response.json()) # type: ignore
@@ -362,6 +494,7 @@ async def create(
is_debug_mode: typing.Optional[bool] = None,
run_async: typing.Optional[bool] = None,
model: AttachmentRequest,
+ request_options: typing.Optional[RequestOptions] = None,
) -> TicketingAttachmentResponse:
"""
Creates an `Attachment` object with the given values.
@@ -372,6 +505,8 @@ async def create(
- run_async: typing.Optional[bool]. Whether or not third-party updates should be run asynchronously.
- model: AttachmentRequest.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import AsyncMerge
from merge.resources.ticketing import AttachmentRequest
@@ -392,10 +527,36 @@ async def create(
_response = await self._client_wrapper.httpx_client.request(
"POST",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/ticketing/v1/attachments"),
- params=remove_none_from_dict({"is_debug_mode": is_debug_mode, "run_async": run_async}),
- json=jsonable_encoder({"model": model}),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "is_debug_mode": is_debug_mode,
+ "run_async": run_async,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ json=jsonable_encoder({"model": model})
+ if request_options is None or request_options.get("additional_body_parameters") is None
+ else {
+ **jsonable_encoder({"model": model}),
+ **(jsonable_encoder(remove_none_from_dict(request_options.get("additional_body_parameters", {})))),
+ },
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(TicketingAttachmentResponse, _response.json()) # type: ignore
@@ -409,8 +570,9 @@ async def retrieve(
self,
id: str,
*,
- expand: typing.Optional[typing_extensions.Literal["ticket"]] = None,
+ expand: typing.Optional[typing.Literal["ticket"]] = None,
include_remote_data: typing.Optional[bool] = None,
+ request_options: typing.Optional[RequestOptions] = None,
) -> Attachment:
"""
Returns an `Attachment` object with the given `id`.
@@ -418,9 +580,11 @@ async def retrieve(
Parameters:
- id: str.
- - expand: typing.Optional[typing_extensions.Literal["ticket"]]. Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces.
+ - expand: typing.Optional[typing.Literal["ticket"]]. Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces.
- include_remote_data: typing.Optional[bool]. Whether to include the original data Merge fetched from the third-party to produce these models.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import AsyncMerge
@@ -429,16 +593,37 @@ async def retrieve(
api_key="YOUR_API_KEY",
)
await client.ticketing.attachments.retrieve(
- id="id",
+ id="string",
expand="ticket",
)
"""
_response = await self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", f"api/ticketing/v1/attachments/{id}"),
- params=remove_none_from_dict({"expand": expand, "include_remote_data": include_remote_data}),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "expand": expand,
+ "include_remote_data": include_remote_data,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(Attachment, _response.json()) # type: ignore
@@ -449,7 +634,11 @@ async def retrieve(
raise ApiError(status_code=_response.status_code, body=_response_json)
async def download_retrieve(
- self, id: str, *, mime_type: typing.Optional[str] = None
+ self,
+ id: str,
+ *,
+ mime_type: typing.Optional[str] = None,
+ request_options: typing.Optional[RequestOptions] = None,
) -> typing.AsyncIterator[bytes]:
"""
Returns an `Attachment` object with the given `id`.
@@ -458,15 +647,37 @@ async def download_retrieve(
- id: str.
- mime_type: typing.Optional[str]. If provided, specifies the export format of the file to be downloaded. For information on supported export formats, please refer to our export format help center article.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
"""
async with self._client_wrapper.httpx_client.stream(
"GET",
urllib.parse.urljoin(
f"{self._client_wrapper.get_base_url()}/", f"api/ticketing/v1/attachments/{id}/download"
),
- params=remove_none_from_dict({"mime_type": mime_type}),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "mime_type": mime_type,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
) as _response:
if 200 <= _response.status_code < 300:
async for _chunk in _response.aiter_bytes():
@@ -479,10 +690,12 @@ async def download_retrieve(
raise ApiError(status_code=_response.status_code, body=_response.text)
raise ApiError(status_code=_response.status_code, body=_response_json)
- async def meta_post_retrieve(self) -> MetaResponse:
+ async def meta_post_retrieve(self, *, request_options: typing.Optional[RequestOptions] = None) -> MetaResponse:
"""
Returns metadata for `TicketingAttachment` POSTs.
+ Parameters:
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import AsyncMerge
@@ -495,8 +708,20 @@ async def meta_post_retrieve(self) -> MetaResponse:
_response = await self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/ticketing/v1/attachments/meta/post"),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ request_options.get("additional_query_parameters") if request_options is not None else None
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(MetaResponse, _response.json()) # type: ignore
diff --git a/src/merge/resources/ticketing/resources/audit_trail/client.py b/src/merge/resources/ticketing/resources/audit_trail/client.py
index ceb74bc0..461e41ea 100644
--- a/src/merge/resources/ticketing/resources/audit_trail/client.py
+++ b/src/merge/resources/ticketing/resources/audit_trail/client.py
@@ -6,7 +6,9 @@
from .....core.api_error import ApiError
from .....core.client_wrapper import AsyncClientWrapper, SyncClientWrapper
+from .....core.jsonable_encoder import jsonable_encoder
from .....core.remove_none_from_dict import remove_none_from_dict
+from .....core.request_options import RequestOptions
from ...types.paginated_audit_log_event_list import PaginatedAuditLogEventList
try:
@@ -28,6 +30,7 @@ def list(
page_size: typing.Optional[int] = None,
start_date: typing.Optional[str] = None,
user_email: typing.Optional[str] = None,
+ request_options: typing.Optional[RequestOptions] = None,
) -> PaginatedAuditLogEventList:
"""
Gets a list of audit trail events.
@@ -44,6 +47,8 @@ def list(
- start_date: typing.Optional[str]. If included, will only include audit trail events that occurred after this time
- user_email: typing.Optional[str]. If provided, this will return events associated with the specified user email. Please note that the email address reflects the user's email at the time of the event, and may not be their current email.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import Merge
@@ -56,18 +61,34 @@ def list(
_response = self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/ticketing/v1/audit-trail"),
- params=remove_none_from_dict(
- {
- "cursor": cursor,
- "end_date": end_date,
- "event_type": event_type,
- "page_size": page_size,
- "start_date": start_date,
- "user_email": user_email,
- }
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "cursor": cursor,
+ "end_date": end_date,
+ "event_type": event_type,
+ "page_size": page_size,
+ "start_date": start_date,
+ "user_email": user_email,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(PaginatedAuditLogEventList, _response.json()) # type: ignore
@@ -91,6 +112,7 @@ async def list(
page_size: typing.Optional[int] = None,
start_date: typing.Optional[str] = None,
user_email: typing.Optional[str] = None,
+ request_options: typing.Optional[RequestOptions] = None,
) -> PaginatedAuditLogEventList:
"""
Gets a list of audit trail events.
@@ -107,6 +129,8 @@ async def list(
- start_date: typing.Optional[str]. If included, will only include audit trail events that occurred after this time
- user_email: typing.Optional[str]. If provided, this will return events associated with the specified user email. Please note that the email address reflects the user's email at the time of the event, and may not be their current email.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import AsyncMerge
@@ -119,18 +143,34 @@ async def list(
_response = await self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/ticketing/v1/audit-trail"),
- params=remove_none_from_dict(
- {
- "cursor": cursor,
- "end_date": end_date,
- "event_type": event_type,
- "page_size": page_size,
- "start_date": start_date,
- "user_email": user_email,
- }
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "cursor": cursor,
+ "end_date": end_date,
+ "event_type": event_type,
+ "page_size": page_size,
+ "start_date": start_date,
+ "user_email": user_email,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(PaginatedAuditLogEventList, _response.json()) # type: ignore
diff --git a/src/merge/resources/ticketing/resources/available_actions/client.py b/src/merge/resources/ticketing/resources/available_actions/client.py
index 2e7c4dc7..6f4df41f 100644
--- a/src/merge/resources/ticketing/resources/available_actions/client.py
+++ b/src/merge/resources/ticketing/resources/available_actions/client.py
@@ -1,10 +1,14 @@
# This file was auto-generated by Fern from our API Definition.
+import typing
import urllib.parse
from json.decoder import JSONDecodeError
from .....core.api_error import ApiError
from .....core.client_wrapper import AsyncClientWrapper, SyncClientWrapper
+from .....core.jsonable_encoder import jsonable_encoder
+from .....core.remove_none_from_dict import remove_none_from_dict
+from .....core.request_options import RequestOptions
from ...types.available_actions import AvailableActions
try:
@@ -17,15 +21,38 @@ class AvailableActionsClient:
def __init__(self, *, client_wrapper: SyncClientWrapper):
self._client_wrapper = client_wrapper
- def retrieve(self) -> AvailableActions:
+ def retrieve(self, *, request_options: typing.Optional[RequestOptions] = None) -> AvailableActions:
"""
Returns a list of models and actions available for an account.
+
+ Parameters:
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
+ ---
+ from merge.client import Merge
+
+ client = Merge(
+ account_token="YOUR_ACCOUNT_TOKEN",
+ api_key="YOUR_API_KEY",
+ )
+ client.ticketing.available_actions.retrieve()
"""
_response = self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/ticketing/v1/available-actions"),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ request_options.get("additional_query_parameters") if request_options is not None else None
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(AvailableActions, _response.json()) # type: ignore
@@ -40,15 +67,38 @@ class AsyncAvailableActionsClient:
def __init__(self, *, client_wrapper: AsyncClientWrapper):
self._client_wrapper = client_wrapper
- async def retrieve(self) -> AvailableActions:
+ async def retrieve(self, *, request_options: typing.Optional[RequestOptions] = None) -> AvailableActions:
"""
Returns a list of models and actions available for an account.
+
+ Parameters:
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
+ ---
+ from merge.client import AsyncMerge
+
+ client = AsyncMerge(
+ account_token="YOUR_ACCOUNT_TOKEN",
+ api_key="YOUR_API_KEY",
+ )
+ await client.ticketing.available_actions.retrieve()
"""
_response = await self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/ticketing/v1/available-actions"),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ request_options.get("additional_query_parameters") if request_options is not None else None
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(AvailableActions, _response.json()) # type: ignore
diff --git a/src/merge/resources/ticketing/resources/collections/client.py b/src/merge/resources/ticketing/resources/collections/client.py
index 1f8e9797..c3583d34 100644
--- a/src/merge/resources/ticketing/resources/collections/client.py
+++ b/src/merge/resources/ticketing/resources/collections/client.py
@@ -5,12 +5,12 @@
import urllib.parse
from json.decoder import JSONDecodeError
-import typing_extensions
-
from .....core.api_error import ApiError
from .....core.client_wrapper import AsyncClientWrapper, SyncClientWrapper
from .....core.datetime_utils import serialize_datetime
+from .....core.jsonable_encoder import jsonable_encoder
from .....core.remove_none_from_dict import remove_none_from_dict
+from .....core.request_options import RequestOptions
from ...types.collection import Collection
from ...types.paginated_collection_list import PaginatedCollectionList
from ...types.paginated_user_list import PaginatedUserList
@@ -34,16 +34,17 @@ def list(
created_after: typing.Optional[dt.datetime] = None,
created_before: typing.Optional[dt.datetime] = None,
cursor: typing.Optional[str] = None,
- expand: typing.Optional[typing_extensions.Literal["parent_collection"]] = None,
+ expand: typing.Optional[typing.Literal["parent_collection"]] = None,
include_deleted_data: typing.Optional[bool] = None,
include_remote_data: typing.Optional[bool] = None,
modified_after: typing.Optional[dt.datetime] = None,
modified_before: typing.Optional[dt.datetime] = None,
page_size: typing.Optional[int] = None,
parent_collection_id: typing.Optional[str] = None,
- remote_fields: typing.Optional[typing_extensions.Literal["collection_type"]] = None,
+ remote_fields: typing.Optional[typing.Literal["collection_type"]] = None,
remote_id: typing.Optional[str] = None,
- show_enum_origins: typing.Optional[typing_extensions.Literal["collection_type"]] = None,
+ show_enum_origins: typing.Optional[typing.Literal["collection_type"]] = None,
+ request_options: typing.Optional[RequestOptions] = None,
) -> PaginatedCollectionList:
"""
Returns a list of `Collection` objects.
@@ -59,7 +60,7 @@ def list(
- cursor: typing.Optional[str]. The pagination cursor value.
- - expand: typing.Optional[typing_extensions.Literal["parent_collection"]]. Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces.
+ - expand: typing.Optional[typing.Literal["parent_collection"]]. Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces.
- include_deleted_data: typing.Optional[bool]. Whether to include data that was marked as deleted by third party webhooks.
@@ -73,11 +74,13 @@ def list(
- parent_collection_id: typing.Optional[str]. If provided, will only return collections whose parent collection matches the given id.
- - remote_fields: typing.Optional[typing_extensions.Literal["collection_type"]]. Deprecated. Use show_enum_origins.
+ - remote_fields: typing.Optional[typing.Literal["collection_type"]]. Deprecated. Use show_enum_origins.
- remote_id: typing.Optional[str]. The API provider's ID for the given object.
- - show_enum_origins: typing.Optional[typing_extensions.Literal["collection_type"]]. Which fields should be returned in non-normalized form.
+ - show_enum_origins: typing.Optional[typing.Literal["collection_type"]]. Which fields should be returned in non-normalized form.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import Merge
from merge.resources.ticketing import CollectionsListRequestCollectionType
@@ -96,26 +99,42 @@ def list(
_response = self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/ticketing/v1/collections"),
- params=remove_none_from_dict(
- {
- "collection_type": collection_type,
- "created_after": serialize_datetime(created_after) if created_after is not None else None,
- "created_before": serialize_datetime(created_before) if created_before is not None else None,
- "cursor": cursor,
- "expand": expand,
- "include_deleted_data": include_deleted_data,
- "include_remote_data": include_remote_data,
- "modified_after": serialize_datetime(modified_after) if modified_after is not None else None,
- "modified_before": serialize_datetime(modified_before) if modified_before is not None else None,
- "page_size": page_size,
- "parent_collection_id": parent_collection_id,
- "remote_fields": remote_fields,
- "remote_id": remote_id,
- "show_enum_origins": show_enum_origins,
- }
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "collection_type": collection_type,
+ "created_after": serialize_datetime(created_after) if created_after is not None else None,
+ "created_before": serialize_datetime(created_before) if created_before is not None else None,
+ "cursor": cursor,
+ "expand": expand,
+ "include_deleted_data": include_deleted_data,
+ "include_remote_data": include_remote_data,
+ "modified_after": serialize_datetime(modified_after) if modified_after is not None else None,
+ "modified_before": serialize_datetime(modified_before) if modified_before is not None else None,
+ "page_size": page_size,
+ "parent_collection_id": parent_collection_id,
+ "remote_fields": remote_fields,
+ "remote_id": remote_id,
+ "show_enum_origins": show_enum_origins,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(PaginatedCollectionList, _response.json()) # type: ignore
@@ -129,10 +148,11 @@ def retrieve(
self,
id: str,
*,
- expand: typing.Optional[typing_extensions.Literal["parent_collection"]] = None,
+ expand: typing.Optional[typing.Literal["parent_collection"]] = None,
include_remote_data: typing.Optional[bool] = None,
- remote_fields: typing.Optional[typing_extensions.Literal["collection_type"]] = None,
- show_enum_origins: typing.Optional[typing_extensions.Literal["collection_type"]] = None,
+ remote_fields: typing.Optional[typing.Literal["collection_type"]] = None,
+ show_enum_origins: typing.Optional[typing.Literal["collection_type"]] = None,
+ request_options: typing.Optional[RequestOptions] = None,
) -> Collection:
"""
Returns a `Collection` object with the given `id`.
@@ -140,13 +160,15 @@ def retrieve(
Parameters:
- id: str.
- - expand: typing.Optional[typing_extensions.Literal["parent_collection"]]. Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces.
+ - expand: typing.Optional[typing.Literal["parent_collection"]]. Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces.
- include_remote_data: typing.Optional[bool]. Whether to include the original data Merge fetched from the third-party to produce these models.
- - remote_fields: typing.Optional[typing_extensions.Literal["collection_type"]]. Deprecated. Use show_enum_origins.
+ - remote_fields: typing.Optional[typing.Literal["collection_type"]]. Deprecated. Use show_enum_origins.
+
+ - show_enum_origins: typing.Optional[typing.Literal["collection_type"]]. Which fields should be returned in non-normalized form.
- - show_enum_origins: typing.Optional[typing_extensions.Literal["collection_type"]]. Which fields should be returned in non-normalized form.
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import Merge
@@ -155,7 +177,7 @@ def retrieve(
api_key="YOUR_API_KEY",
)
client.ticketing.collections.retrieve(
- id="id",
+ id="string",
expand="parent_collection",
remote_fields="collection_type",
show_enum_origins="collection_type",
@@ -164,16 +186,32 @@ def retrieve(
_response = self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", f"api/ticketing/v1/collections/{id}"),
- params=remove_none_from_dict(
- {
- "expand": expand,
- "include_remote_data": include_remote_data,
- "remote_fields": remote_fields,
- "show_enum_origins": show_enum_origins,
- }
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "expand": expand,
+ "include_remote_data": include_remote_data,
+ "remote_fields": remote_fields,
+ "show_enum_origins": show_enum_origins,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(Collection, _response.json()) # type: ignore
@@ -192,6 +230,7 @@ def users_list(
include_deleted_data: typing.Optional[bool] = None,
include_remote_data: typing.Optional[bool] = None,
page_size: typing.Optional[int] = None,
+ request_options: typing.Optional[RequestOptions] = None,
) -> PaginatedUserList:
"""
Returns a list of `User` objects.
@@ -208,6 +247,8 @@ def users_list(
- include_remote_data: typing.Optional[bool]. Whether to include the original data Merge fetched from the third-party to produce these models.
- page_size: typing.Optional[int]. Number of results to return per page.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import Merge
from merge.resources.ticketing import CollectionsUsersListRequestExpand
@@ -217,7 +258,7 @@ def users_list(
api_key="YOUR_API_KEY",
)
client.ticketing.collections.users_list(
- parent_id="parent-id",
+ parent_id="string",
expand=CollectionsUsersListRequestExpand.ROLES,
)
"""
@@ -226,17 +267,33 @@ def users_list(
urllib.parse.urljoin(
f"{self._client_wrapper.get_base_url()}/", f"api/ticketing/v1/collections/{parent_id}/users"
),
- params=remove_none_from_dict(
- {
- "cursor": cursor,
- "expand": expand,
- "include_deleted_data": include_deleted_data,
- "include_remote_data": include_remote_data,
- "page_size": page_size,
- }
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "cursor": cursor,
+ "expand": expand,
+ "include_deleted_data": include_deleted_data,
+ "include_remote_data": include_remote_data,
+ "page_size": page_size,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(PaginatedUserList, _response.json()) # type: ignore
@@ -258,16 +315,17 @@ async def list(
created_after: typing.Optional[dt.datetime] = None,
created_before: typing.Optional[dt.datetime] = None,
cursor: typing.Optional[str] = None,
- expand: typing.Optional[typing_extensions.Literal["parent_collection"]] = None,
+ expand: typing.Optional[typing.Literal["parent_collection"]] = None,
include_deleted_data: typing.Optional[bool] = None,
include_remote_data: typing.Optional[bool] = None,
modified_after: typing.Optional[dt.datetime] = None,
modified_before: typing.Optional[dt.datetime] = None,
page_size: typing.Optional[int] = None,
parent_collection_id: typing.Optional[str] = None,
- remote_fields: typing.Optional[typing_extensions.Literal["collection_type"]] = None,
+ remote_fields: typing.Optional[typing.Literal["collection_type"]] = None,
remote_id: typing.Optional[str] = None,
- show_enum_origins: typing.Optional[typing_extensions.Literal["collection_type"]] = None,
+ show_enum_origins: typing.Optional[typing.Literal["collection_type"]] = None,
+ request_options: typing.Optional[RequestOptions] = None,
) -> PaginatedCollectionList:
"""
Returns a list of `Collection` objects.
@@ -283,7 +341,7 @@ async def list(
- cursor: typing.Optional[str]. The pagination cursor value.
- - expand: typing.Optional[typing_extensions.Literal["parent_collection"]]. Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces.
+ - expand: typing.Optional[typing.Literal["parent_collection"]]. Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces.
- include_deleted_data: typing.Optional[bool]. Whether to include data that was marked as deleted by third party webhooks.
@@ -297,11 +355,13 @@ async def list(
- parent_collection_id: typing.Optional[str]. If provided, will only return collections whose parent collection matches the given id.
- - remote_fields: typing.Optional[typing_extensions.Literal["collection_type"]]. Deprecated. Use show_enum_origins.
+ - remote_fields: typing.Optional[typing.Literal["collection_type"]]. Deprecated. Use show_enum_origins.
- remote_id: typing.Optional[str]. The API provider's ID for the given object.
- - show_enum_origins: typing.Optional[typing_extensions.Literal["collection_type"]]. Which fields should be returned in non-normalized form.
+ - show_enum_origins: typing.Optional[typing.Literal["collection_type"]]. Which fields should be returned in non-normalized form.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import AsyncMerge
from merge.resources.ticketing import CollectionsListRequestCollectionType
@@ -320,26 +380,42 @@ async def list(
_response = await self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/ticketing/v1/collections"),
- params=remove_none_from_dict(
- {
- "collection_type": collection_type,
- "created_after": serialize_datetime(created_after) if created_after is not None else None,
- "created_before": serialize_datetime(created_before) if created_before is not None else None,
- "cursor": cursor,
- "expand": expand,
- "include_deleted_data": include_deleted_data,
- "include_remote_data": include_remote_data,
- "modified_after": serialize_datetime(modified_after) if modified_after is not None else None,
- "modified_before": serialize_datetime(modified_before) if modified_before is not None else None,
- "page_size": page_size,
- "parent_collection_id": parent_collection_id,
- "remote_fields": remote_fields,
- "remote_id": remote_id,
- "show_enum_origins": show_enum_origins,
- }
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "collection_type": collection_type,
+ "created_after": serialize_datetime(created_after) if created_after is not None else None,
+ "created_before": serialize_datetime(created_before) if created_before is not None else None,
+ "cursor": cursor,
+ "expand": expand,
+ "include_deleted_data": include_deleted_data,
+ "include_remote_data": include_remote_data,
+ "modified_after": serialize_datetime(modified_after) if modified_after is not None else None,
+ "modified_before": serialize_datetime(modified_before) if modified_before is not None else None,
+ "page_size": page_size,
+ "parent_collection_id": parent_collection_id,
+ "remote_fields": remote_fields,
+ "remote_id": remote_id,
+ "show_enum_origins": show_enum_origins,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(PaginatedCollectionList, _response.json()) # type: ignore
@@ -353,10 +429,11 @@ async def retrieve(
self,
id: str,
*,
- expand: typing.Optional[typing_extensions.Literal["parent_collection"]] = None,
+ expand: typing.Optional[typing.Literal["parent_collection"]] = None,
include_remote_data: typing.Optional[bool] = None,
- remote_fields: typing.Optional[typing_extensions.Literal["collection_type"]] = None,
- show_enum_origins: typing.Optional[typing_extensions.Literal["collection_type"]] = None,
+ remote_fields: typing.Optional[typing.Literal["collection_type"]] = None,
+ show_enum_origins: typing.Optional[typing.Literal["collection_type"]] = None,
+ request_options: typing.Optional[RequestOptions] = None,
) -> Collection:
"""
Returns a `Collection` object with the given `id`.
@@ -364,13 +441,15 @@ async def retrieve(
Parameters:
- id: str.
- - expand: typing.Optional[typing_extensions.Literal["parent_collection"]]. Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces.
+ - expand: typing.Optional[typing.Literal["parent_collection"]]. Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces.
- include_remote_data: typing.Optional[bool]. Whether to include the original data Merge fetched from the third-party to produce these models.
- - remote_fields: typing.Optional[typing_extensions.Literal["collection_type"]]. Deprecated. Use show_enum_origins.
+ - remote_fields: typing.Optional[typing.Literal["collection_type"]]. Deprecated. Use show_enum_origins.
+
+ - show_enum_origins: typing.Optional[typing.Literal["collection_type"]]. Which fields should be returned in non-normalized form.
- - show_enum_origins: typing.Optional[typing_extensions.Literal["collection_type"]]. Which fields should be returned in non-normalized form.
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import AsyncMerge
@@ -379,7 +458,7 @@ async def retrieve(
api_key="YOUR_API_KEY",
)
await client.ticketing.collections.retrieve(
- id="id",
+ id="string",
expand="parent_collection",
remote_fields="collection_type",
show_enum_origins="collection_type",
@@ -388,16 +467,32 @@ async def retrieve(
_response = await self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", f"api/ticketing/v1/collections/{id}"),
- params=remove_none_from_dict(
- {
- "expand": expand,
- "include_remote_data": include_remote_data,
- "remote_fields": remote_fields,
- "show_enum_origins": show_enum_origins,
- }
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "expand": expand,
+ "include_remote_data": include_remote_data,
+ "remote_fields": remote_fields,
+ "show_enum_origins": show_enum_origins,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(Collection, _response.json()) # type: ignore
@@ -416,6 +511,7 @@ async def users_list(
include_deleted_data: typing.Optional[bool] = None,
include_remote_data: typing.Optional[bool] = None,
page_size: typing.Optional[int] = None,
+ request_options: typing.Optional[RequestOptions] = None,
) -> PaginatedUserList:
"""
Returns a list of `User` objects.
@@ -432,6 +528,8 @@ async def users_list(
- include_remote_data: typing.Optional[bool]. Whether to include the original data Merge fetched from the third-party to produce these models.
- page_size: typing.Optional[int]. Number of results to return per page.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import AsyncMerge
from merge.resources.ticketing import CollectionsUsersListRequestExpand
@@ -441,7 +539,7 @@ async def users_list(
api_key="YOUR_API_KEY",
)
await client.ticketing.collections.users_list(
- parent_id="parent-id",
+ parent_id="string",
expand=CollectionsUsersListRequestExpand.ROLES,
)
"""
@@ -450,17 +548,33 @@ async def users_list(
urllib.parse.urljoin(
f"{self._client_wrapper.get_base_url()}/", f"api/ticketing/v1/collections/{parent_id}/users"
),
- params=remove_none_from_dict(
- {
- "cursor": cursor,
- "expand": expand,
- "include_deleted_data": include_deleted_data,
- "include_remote_data": include_remote_data,
- "page_size": page_size,
- }
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "cursor": cursor,
+ "expand": expand,
+ "include_deleted_data": include_deleted_data,
+ "include_remote_data": include_remote_data,
+ "page_size": page_size,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(PaginatedUserList, _response.json()) # type: ignore
diff --git a/src/merge/resources/ticketing/resources/comments/client.py b/src/merge/resources/ticketing/resources/comments/client.py
index e2df6954..7729a94c 100644
--- a/src/merge/resources/ticketing/resources/comments/client.py
+++ b/src/merge/resources/ticketing/resources/comments/client.py
@@ -10,6 +10,7 @@
from .....core.datetime_utils import serialize_datetime
from .....core.jsonable_encoder import jsonable_encoder
from .....core.remove_none_from_dict import remove_none_from_dict
+from .....core.request_options import RequestOptions
from ...types.comment import Comment
from ...types.comment_request import CommentRequest
from ...types.comment_response import CommentResponse
@@ -46,6 +47,7 @@ def list(
remote_created_after: typing.Optional[dt.datetime] = None,
remote_id: typing.Optional[str] = None,
ticket_id: typing.Optional[str] = None,
+ request_options: typing.Optional[RequestOptions] = None,
) -> PaginatedCommentList:
"""
Returns a list of `Comment` objects.
@@ -74,6 +76,8 @@ def list(
- remote_id: typing.Optional[str]. The API provider's ID for the given object.
- ticket_id: typing.Optional[str]. If provided, will only return comments for this ticket.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import Merge
from merge.resources.ticketing import CommentsListRequestExpand
@@ -89,26 +93,42 @@ def list(
_response = self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/ticketing/v1/comments"),
- params=remove_none_from_dict(
- {
- "created_after": serialize_datetime(created_after) if created_after is not None else None,
- "created_before": serialize_datetime(created_before) if created_before is not None else None,
- "cursor": cursor,
- "expand": expand,
- "include_deleted_data": include_deleted_data,
- "include_remote_data": include_remote_data,
- "modified_after": serialize_datetime(modified_after) if modified_after is not None else None,
- "modified_before": serialize_datetime(modified_before) if modified_before is not None else None,
- "page_size": page_size,
- "remote_created_after": serialize_datetime(remote_created_after)
- if remote_created_after is not None
- else None,
- "remote_id": remote_id,
- "ticket_id": ticket_id,
- }
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "created_after": serialize_datetime(created_after) if created_after is not None else None,
+ "created_before": serialize_datetime(created_before) if created_before is not None else None,
+ "cursor": cursor,
+ "expand": expand,
+ "include_deleted_data": include_deleted_data,
+ "include_remote_data": include_remote_data,
+ "modified_after": serialize_datetime(modified_after) if modified_after is not None else None,
+ "modified_before": serialize_datetime(modified_before) if modified_before is not None else None,
+ "page_size": page_size,
+ "remote_created_after": serialize_datetime(remote_created_after)
+ if remote_created_after is not None
+ else None,
+ "remote_id": remote_id,
+ "ticket_id": ticket_id,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(PaginatedCommentList, _response.json()) # type: ignore
@@ -124,6 +144,7 @@ def create(
is_debug_mode: typing.Optional[bool] = None,
run_async: typing.Optional[bool] = None,
model: CommentRequest,
+ request_options: typing.Optional[RequestOptions] = None,
) -> CommentResponse:
"""
Creates a `Comment` object with the given values.
@@ -134,6 +155,8 @@ def create(
- run_async: typing.Optional[bool]. Whether or not third-party updates should be run asynchronously.
- model: CommentRequest.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import Merge
from merge.resources.ticketing import CommentRequest
@@ -152,10 +175,36 @@ def create(
_response = self._client_wrapper.httpx_client.request(
"POST",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/ticketing/v1/comments"),
- params=remove_none_from_dict({"is_debug_mode": is_debug_mode, "run_async": run_async}),
- json=jsonable_encoder({"model": model}),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "is_debug_mode": is_debug_mode,
+ "run_async": run_async,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ json=jsonable_encoder({"model": model})
+ if request_options is None or request_options.get("additional_body_parameters") is None
+ else {
+ **jsonable_encoder({"model": model}),
+ **(jsonable_encoder(remove_none_from_dict(request_options.get("additional_body_parameters", {})))),
+ },
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(CommentResponse, _response.json()) # type: ignore
@@ -171,6 +220,7 @@ def retrieve(
*,
expand: typing.Optional[CommentsRetrieveRequestExpand] = None,
include_remote_data: typing.Optional[bool] = None,
+ request_options: typing.Optional[RequestOptions] = None,
) -> Comment:
"""
Returns a `Comment` object with the given `id`.
@@ -181,6 +231,8 @@ def retrieve(
- expand: typing.Optional[CommentsRetrieveRequestExpand]. Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces.
- include_remote_data: typing.Optional[bool]. Whether to include the original data Merge fetched from the third-party to produce these models.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import Merge
from merge.resources.ticketing import CommentsRetrieveRequestExpand
@@ -190,16 +242,37 @@ def retrieve(
api_key="YOUR_API_KEY",
)
client.ticketing.comments.retrieve(
- id="id",
+ id="string",
expand=CommentsRetrieveRequestExpand.CONTACT,
)
"""
_response = self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", f"api/ticketing/v1/comments/{id}"),
- params=remove_none_from_dict({"expand": expand, "include_remote_data": include_remote_data}),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "expand": expand,
+ "include_remote_data": include_remote_data,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(Comment, _response.json()) # type: ignore
@@ -209,10 +282,12 @@ def retrieve(
raise ApiError(status_code=_response.status_code, body=_response.text)
raise ApiError(status_code=_response.status_code, body=_response_json)
- def meta_post_retrieve(self) -> MetaResponse:
+ def meta_post_retrieve(self, *, request_options: typing.Optional[RequestOptions] = None) -> MetaResponse:
"""
Returns metadata for `Comment` POSTs.
+ Parameters:
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import Merge
@@ -225,8 +300,20 @@ def meta_post_retrieve(self) -> MetaResponse:
_response = self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/ticketing/v1/comments/meta/post"),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ request_options.get("additional_query_parameters") if request_options is not None else None
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(MetaResponse, _response.json()) # type: ignore
@@ -256,6 +343,7 @@ async def list(
remote_created_after: typing.Optional[dt.datetime] = None,
remote_id: typing.Optional[str] = None,
ticket_id: typing.Optional[str] = None,
+ request_options: typing.Optional[RequestOptions] = None,
) -> PaginatedCommentList:
"""
Returns a list of `Comment` objects.
@@ -284,6 +372,8 @@ async def list(
- remote_id: typing.Optional[str]. The API provider's ID for the given object.
- ticket_id: typing.Optional[str]. If provided, will only return comments for this ticket.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import AsyncMerge
from merge.resources.ticketing import CommentsListRequestExpand
@@ -299,26 +389,42 @@ async def list(
_response = await self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/ticketing/v1/comments"),
- params=remove_none_from_dict(
- {
- "created_after": serialize_datetime(created_after) if created_after is not None else None,
- "created_before": serialize_datetime(created_before) if created_before is not None else None,
- "cursor": cursor,
- "expand": expand,
- "include_deleted_data": include_deleted_data,
- "include_remote_data": include_remote_data,
- "modified_after": serialize_datetime(modified_after) if modified_after is not None else None,
- "modified_before": serialize_datetime(modified_before) if modified_before is not None else None,
- "page_size": page_size,
- "remote_created_after": serialize_datetime(remote_created_after)
- if remote_created_after is not None
- else None,
- "remote_id": remote_id,
- "ticket_id": ticket_id,
- }
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "created_after": serialize_datetime(created_after) if created_after is not None else None,
+ "created_before": serialize_datetime(created_before) if created_before is not None else None,
+ "cursor": cursor,
+ "expand": expand,
+ "include_deleted_data": include_deleted_data,
+ "include_remote_data": include_remote_data,
+ "modified_after": serialize_datetime(modified_after) if modified_after is not None else None,
+ "modified_before": serialize_datetime(modified_before) if modified_before is not None else None,
+ "page_size": page_size,
+ "remote_created_after": serialize_datetime(remote_created_after)
+ if remote_created_after is not None
+ else None,
+ "remote_id": remote_id,
+ "ticket_id": ticket_id,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(PaginatedCommentList, _response.json()) # type: ignore
@@ -334,6 +440,7 @@ async def create(
is_debug_mode: typing.Optional[bool] = None,
run_async: typing.Optional[bool] = None,
model: CommentRequest,
+ request_options: typing.Optional[RequestOptions] = None,
) -> CommentResponse:
"""
Creates a `Comment` object with the given values.
@@ -344,6 +451,8 @@ async def create(
- run_async: typing.Optional[bool]. Whether or not third-party updates should be run asynchronously.
- model: CommentRequest.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import AsyncMerge
from merge.resources.ticketing import CommentRequest
@@ -362,10 +471,36 @@ async def create(
_response = await self._client_wrapper.httpx_client.request(
"POST",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/ticketing/v1/comments"),
- params=remove_none_from_dict({"is_debug_mode": is_debug_mode, "run_async": run_async}),
- json=jsonable_encoder({"model": model}),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "is_debug_mode": is_debug_mode,
+ "run_async": run_async,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ json=jsonable_encoder({"model": model})
+ if request_options is None or request_options.get("additional_body_parameters") is None
+ else {
+ **jsonable_encoder({"model": model}),
+ **(jsonable_encoder(remove_none_from_dict(request_options.get("additional_body_parameters", {})))),
+ },
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(CommentResponse, _response.json()) # type: ignore
@@ -381,6 +516,7 @@ async def retrieve(
*,
expand: typing.Optional[CommentsRetrieveRequestExpand] = None,
include_remote_data: typing.Optional[bool] = None,
+ request_options: typing.Optional[RequestOptions] = None,
) -> Comment:
"""
Returns a `Comment` object with the given `id`.
@@ -391,6 +527,8 @@ async def retrieve(
- expand: typing.Optional[CommentsRetrieveRequestExpand]. Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces.
- include_remote_data: typing.Optional[bool]. Whether to include the original data Merge fetched from the third-party to produce these models.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import AsyncMerge
from merge.resources.ticketing import CommentsRetrieveRequestExpand
@@ -400,16 +538,37 @@ async def retrieve(
api_key="YOUR_API_KEY",
)
await client.ticketing.comments.retrieve(
- id="id",
+ id="string",
expand=CommentsRetrieveRequestExpand.CONTACT,
)
"""
_response = await self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", f"api/ticketing/v1/comments/{id}"),
- params=remove_none_from_dict({"expand": expand, "include_remote_data": include_remote_data}),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "expand": expand,
+ "include_remote_data": include_remote_data,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(Comment, _response.json()) # type: ignore
@@ -419,10 +578,12 @@ async def retrieve(
raise ApiError(status_code=_response.status_code, body=_response.text)
raise ApiError(status_code=_response.status_code, body=_response_json)
- async def meta_post_retrieve(self) -> MetaResponse:
+ async def meta_post_retrieve(self, *, request_options: typing.Optional[RequestOptions] = None) -> MetaResponse:
"""
Returns metadata for `Comment` POSTs.
+ Parameters:
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import AsyncMerge
@@ -435,8 +596,20 @@ async def meta_post_retrieve(self) -> MetaResponse:
_response = await self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/ticketing/v1/comments/meta/post"),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ request_options.get("additional_query_parameters") if request_options is not None else None
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(MetaResponse, _response.json()) # type: ignore
diff --git a/src/merge/resources/ticketing/resources/contacts/client.py b/src/merge/resources/ticketing/resources/contacts/client.py
index 7091cd54..35f3a003 100644
--- a/src/merge/resources/ticketing/resources/contacts/client.py
+++ b/src/merge/resources/ticketing/resources/contacts/client.py
@@ -5,12 +5,12 @@
import urllib.parse
from json.decoder import JSONDecodeError
-import typing_extensions
-
from .....core.api_error import ApiError
from .....core.client_wrapper import AsyncClientWrapper, SyncClientWrapper
from .....core.datetime_utils import serialize_datetime
+from .....core.jsonable_encoder import jsonable_encoder
from .....core.remove_none_from_dict import remove_none_from_dict
+from .....core.request_options import RequestOptions
from ...types.contact import Contact
from ...types.paginated_contact_list import PaginatedContactList
@@ -30,13 +30,14 @@ def list(
created_after: typing.Optional[dt.datetime] = None,
created_before: typing.Optional[dt.datetime] = None,
cursor: typing.Optional[str] = None,
- expand: typing.Optional[typing_extensions.Literal["account"]] = None,
+ expand: typing.Optional[typing.Literal["account"]] = None,
include_deleted_data: typing.Optional[bool] = None,
include_remote_data: typing.Optional[bool] = None,
modified_after: typing.Optional[dt.datetime] = None,
modified_before: typing.Optional[dt.datetime] = None,
page_size: typing.Optional[int] = None,
remote_id: typing.Optional[str] = None,
+ request_options: typing.Optional[RequestOptions] = None,
) -> PaginatedContactList:
"""
Returns a list of `Contact` objects.
@@ -48,7 +49,7 @@ def list(
- cursor: typing.Optional[str]. The pagination cursor value.
- - expand: typing.Optional[typing_extensions.Literal["account"]]. Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces.
+ - expand: typing.Optional[typing.Literal["account"]]. Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces.
- include_deleted_data: typing.Optional[bool]. Whether to include data that was marked as deleted by third party webhooks.
@@ -61,6 +62,8 @@ def list(
- page_size: typing.Optional[int]. Number of results to return per page.
- remote_id: typing.Optional[str]. The API provider's ID for the given object.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import Merge
@@ -75,22 +78,38 @@ def list(
_response = self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/ticketing/v1/contacts"),
- params=remove_none_from_dict(
- {
- "created_after": serialize_datetime(created_after) if created_after is not None else None,
- "created_before": serialize_datetime(created_before) if created_before is not None else None,
- "cursor": cursor,
- "expand": expand,
- "include_deleted_data": include_deleted_data,
- "include_remote_data": include_remote_data,
- "modified_after": serialize_datetime(modified_after) if modified_after is not None else None,
- "modified_before": serialize_datetime(modified_before) if modified_before is not None else None,
- "page_size": page_size,
- "remote_id": remote_id,
- }
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "created_after": serialize_datetime(created_after) if created_after is not None else None,
+ "created_before": serialize_datetime(created_before) if created_before is not None else None,
+ "cursor": cursor,
+ "expand": expand,
+ "include_deleted_data": include_deleted_data,
+ "include_remote_data": include_remote_data,
+ "modified_after": serialize_datetime(modified_after) if modified_after is not None else None,
+ "modified_before": serialize_datetime(modified_before) if modified_before is not None else None,
+ "page_size": page_size,
+ "remote_id": remote_id,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(PaginatedContactList, _response.json()) # type: ignore
@@ -104,8 +123,9 @@ def retrieve(
self,
id: str,
*,
- expand: typing.Optional[typing_extensions.Literal["account"]] = None,
+ expand: typing.Optional[typing.Literal["account"]] = None,
include_remote_data: typing.Optional[bool] = None,
+ request_options: typing.Optional[RequestOptions] = None,
) -> Contact:
"""
Returns a `Contact` object with the given `id`.
@@ -113,9 +133,11 @@ def retrieve(
Parameters:
- id: str.
- - expand: typing.Optional[typing_extensions.Literal["account"]]. Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces.
+ - expand: typing.Optional[typing.Literal["account"]]. Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces.
- include_remote_data: typing.Optional[bool]. Whether to include the original data Merge fetched from the third-party to produce these models.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import Merge
@@ -124,16 +146,37 @@ def retrieve(
api_key="YOUR_API_KEY",
)
client.ticketing.contacts.retrieve(
- id="id",
+ id="string",
expand="account",
)
"""
_response = self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", f"api/ticketing/v1/contacts/{id}"),
- params=remove_none_from_dict({"expand": expand, "include_remote_data": include_remote_data}),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "expand": expand,
+ "include_remote_data": include_remote_data,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(Contact, _response.json()) # type: ignore
@@ -154,13 +197,14 @@ async def list(
created_after: typing.Optional[dt.datetime] = None,
created_before: typing.Optional[dt.datetime] = None,
cursor: typing.Optional[str] = None,
- expand: typing.Optional[typing_extensions.Literal["account"]] = None,
+ expand: typing.Optional[typing.Literal["account"]] = None,
include_deleted_data: typing.Optional[bool] = None,
include_remote_data: typing.Optional[bool] = None,
modified_after: typing.Optional[dt.datetime] = None,
modified_before: typing.Optional[dt.datetime] = None,
page_size: typing.Optional[int] = None,
remote_id: typing.Optional[str] = None,
+ request_options: typing.Optional[RequestOptions] = None,
) -> PaginatedContactList:
"""
Returns a list of `Contact` objects.
@@ -172,7 +216,7 @@ async def list(
- cursor: typing.Optional[str]. The pagination cursor value.
- - expand: typing.Optional[typing_extensions.Literal["account"]]. Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces.
+ - expand: typing.Optional[typing.Literal["account"]]. Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces.
- include_deleted_data: typing.Optional[bool]. Whether to include data that was marked as deleted by third party webhooks.
@@ -185,6 +229,8 @@ async def list(
- page_size: typing.Optional[int]. Number of results to return per page.
- remote_id: typing.Optional[str]. The API provider's ID for the given object.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import AsyncMerge
@@ -199,22 +245,38 @@ async def list(
_response = await self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/ticketing/v1/contacts"),
- params=remove_none_from_dict(
- {
- "created_after": serialize_datetime(created_after) if created_after is not None else None,
- "created_before": serialize_datetime(created_before) if created_before is not None else None,
- "cursor": cursor,
- "expand": expand,
- "include_deleted_data": include_deleted_data,
- "include_remote_data": include_remote_data,
- "modified_after": serialize_datetime(modified_after) if modified_after is not None else None,
- "modified_before": serialize_datetime(modified_before) if modified_before is not None else None,
- "page_size": page_size,
- "remote_id": remote_id,
- }
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "created_after": serialize_datetime(created_after) if created_after is not None else None,
+ "created_before": serialize_datetime(created_before) if created_before is not None else None,
+ "cursor": cursor,
+ "expand": expand,
+ "include_deleted_data": include_deleted_data,
+ "include_remote_data": include_remote_data,
+ "modified_after": serialize_datetime(modified_after) if modified_after is not None else None,
+ "modified_before": serialize_datetime(modified_before) if modified_before is not None else None,
+ "page_size": page_size,
+ "remote_id": remote_id,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(PaginatedContactList, _response.json()) # type: ignore
@@ -228,8 +290,9 @@ async def retrieve(
self,
id: str,
*,
- expand: typing.Optional[typing_extensions.Literal["account"]] = None,
+ expand: typing.Optional[typing.Literal["account"]] = None,
include_remote_data: typing.Optional[bool] = None,
+ request_options: typing.Optional[RequestOptions] = None,
) -> Contact:
"""
Returns a `Contact` object with the given `id`.
@@ -237,9 +300,11 @@ async def retrieve(
Parameters:
- id: str.
- - expand: typing.Optional[typing_extensions.Literal["account"]]. Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces.
+ - expand: typing.Optional[typing.Literal["account"]]. Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces.
- include_remote_data: typing.Optional[bool]. Whether to include the original data Merge fetched from the third-party to produce these models.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import AsyncMerge
@@ -248,16 +313,37 @@ async def retrieve(
api_key="YOUR_API_KEY",
)
await client.ticketing.contacts.retrieve(
- id="id",
+ id="string",
expand="account",
)
"""
_response = await self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", f"api/ticketing/v1/contacts/{id}"),
- params=remove_none_from_dict({"expand": expand, "include_remote_data": include_remote_data}),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "expand": expand,
+ "include_remote_data": include_remote_data,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(Contact, _response.json()) # type: ignore
diff --git a/src/merge/resources/ticketing/resources/delete_account/client.py b/src/merge/resources/ticketing/resources/delete_account/client.py
index fe860155..4307c2db 100644
--- a/src/merge/resources/ticketing/resources/delete_account/client.py
+++ b/src/merge/resources/ticketing/resources/delete_account/client.py
@@ -1,20 +1,26 @@
# This file was auto-generated by Fern from our API Definition.
+import typing
import urllib.parse
from json.decoder import JSONDecodeError
from .....core.api_error import ApiError
from .....core.client_wrapper import AsyncClientWrapper, SyncClientWrapper
+from .....core.jsonable_encoder import jsonable_encoder
+from .....core.remove_none_from_dict import remove_none_from_dict
+from .....core.request_options import RequestOptions
class DeleteAccountClient:
def __init__(self, *, client_wrapper: SyncClientWrapper):
self._client_wrapper = client_wrapper
- def delete(self) -> None:
+ def delete(self, *, request_options: typing.Optional[RequestOptions] = None) -> None:
"""
Delete a linked account.
+ Parameters:
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import Merge
@@ -27,8 +33,23 @@ def delete(self) -> None:
_response = self._client_wrapper.httpx_client.request(
"POST",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/ticketing/v1/delete-account"),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ request_options.get("additional_query_parameters") if request_options is not None else None
+ ),
+ json=jsonable_encoder(remove_none_from_dict(request_options.get("additional_body_parameters", {})))
+ if request_options is not None
+ else None,
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return
@@ -43,10 +64,12 @@ class AsyncDeleteAccountClient:
def __init__(self, *, client_wrapper: AsyncClientWrapper):
self._client_wrapper = client_wrapper
- async def delete(self) -> None:
+ async def delete(self, *, request_options: typing.Optional[RequestOptions] = None) -> None:
"""
Delete a linked account.
+ Parameters:
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import AsyncMerge
@@ -59,8 +82,23 @@ async def delete(self) -> None:
_response = await self._client_wrapper.httpx_client.request(
"POST",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/ticketing/v1/delete-account"),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ request_options.get("additional_query_parameters") if request_options is not None else None
+ ),
+ json=jsonable_encoder(remove_none_from_dict(request_options.get("additional_body_parameters", {})))
+ if request_options is not None
+ else None,
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return
diff --git a/src/merge/resources/ticketing/resources/force_resync/client.py b/src/merge/resources/ticketing/resources/force_resync/client.py
index ad6be5f3..3db9ed52 100644
--- a/src/merge/resources/ticketing/resources/force_resync/client.py
+++ b/src/merge/resources/ticketing/resources/force_resync/client.py
@@ -6,6 +6,9 @@
from .....core.api_error import ApiError
from .....core.client_wrapper import AsyncClientWrapper, SyncClientWrapper
+from .....core.jsonable_encoder import jsonable_encoder
+from .....core.remove_none_from_dict import remove_none_from_dict
+from .....core.request_options import RequestOptions
from ...types.sync_status import SyncStatus
try:
@@ -18,10 +21,14 @@ class ForceResyncClient:
def __init__(self, *, client_wrapper: SyncClientWrapper):
self._client_wrapper = client_wrapper
- def sync_status_resync_create(self) -> typing.List[SyncStatus]:
+ def sync_status_resync_create(
+ self, *, request_options: typing.Optional[RequestOptions] = None
+ ) -> typing.List[SyncStatus]:
"""
Force re-sync of all models. This is available for all organizations via the dashboard. Force re-sync is also available programmatically via API for monthly, quarterly, and highest sync frequency customers on the Core, Professional, or Enterprise plans. Doing so will consume a sync credit for the relevant linked account.
+ Parameters:
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import Merge
@@ -34,8 +41,23 @@ def sync_status_resync_create(self) -> typing.List[SyncStatus]:
_response = self._client_wrapper.httpx_client.request(
"POST",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/ticketing/v1/sync-status/resync"),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ request_options.get("additional_query_parameters") if request_options is not None else None
+ ),
+ json=jsonable_encoder(remove_none_from_dict(request_options.get("additional_body_parameters", {})))
+ if request_options is not None
+ else None,
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(typing.List[SyncStatus], _response.json()) # type: ignore
@@ -50,10 +72,14 @@ class AsyncForceResyncClient:
def __init__(self, *, client_wrapper: AsyncClientWrapper):
self._client_wrapper = client_wrapper
- async def sync_status_resync_create(self) -> typing.List[SyncStatus]:
+ async def sync_status_resync_create(
+ self, *, request_options: typing.Optional[RequestOptions] = None
+ ) -> typing.List[SyncStatus]:
"""
Force re-sync of all models. This is available for all organizations via the dashboard. Force re-sync is also available programmatically via API for monthly, quarterly, and highest sync frequency customers on the Core, Professional, or Enterprise plans. Doing so will consume a sync credit for the relevant linked account.
+ Parameters:
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import AsyncMerge
@@ -66,8 +92,23 @@ async def sync_status_resync_create(self) -> typing.List[SyncStatus]:
_response = await self._client_wrapper.httpx_client.request(
"POST",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/ticketing/v1/sync-status/resync"),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ request_options.get("additional_query_parameters") if request_options is not None else None
+ ),
+ json=jsonable_encoder(remove_none_from_dict(request_options.get("additional_body_parameters", {})))
+ if request_options is not None
+ else None,
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(typing.List[SyncStatus], _response.json()) # type: ignore
diff --git a/src/merge/resources/ticketing/resources/generate_key/client.py b/src/merge/resources/ticketing/resources/generate_key/client.py
index ceeb9148..66855acc 100644
--- a/src/merge/resources/ticketing/resources/generate_key/client.py
+++ b/src/merge/resources/ticketing/resources/generate_key/client.py
@@ -7,6 +7,8 @@
from .....core.api_error import ApiError
from .....core.client_wrapper import AsyncClientWrapper, SyncClientWrapper
from .....core.jsonable_encoder import jsonable_encoder
+from .....core.remove_none_from_dict import remove_none_from_dict
+from .....core.request_options import RequestOptions
from ...types.remote_key import RemoteKey
try:
@@ -22,12 +24,14 @@ class GenerateKeyClient:
def __init__(self, *, client_wrapper: SyncClientWrapper):
self._client_wrapper = client_wrapper
- def create(self, *, name: str) -> RemoteKey:
+ def create(self, *, name: str, request_options: typing.Optional[RequestOptions] = None) -> RemoteKey:
"""
Create a remote key.
Parameters:
- name: str.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import Merge
@@ -42,9 +46,26 @@ def create(self, *, name: str) -> RemoteKey:
_response = self._client_wrapper.httpx_client.request(
"POST",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/ticketing/v1/generate-key"),
- json=jsonable_encoder({"name": name}),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ request_options.get("additional_query_parameters") if request_options is not None else None
+ ),
+ json=jsonable_encoder({"name": name})
+ if request_options is None or request_options.get("additional_body_parameters") is None
+ else {
+ **jsonable_encoder({"name": name}),
+ **(jsonable_encoder(remove_none_from_dict(request_options.get("additional_body_parameters", {})))),
+ },
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(RemoteKey, _response.json()) # type: ignore
@@ -59,12 +80,14 @@ class AsyncGenerateKeyClient:
def __init__(self, *, client_wrapper: AsyncClientWrapper):
self._client_wrapper = client_wrapper
- async def create(self, *, name: str) -> RemoteKey:
+ async def create(self, *, name: str, request_options: typing.Optional[RequestOptions] = None) -> RemoteKey:
"""
Create a remote key.
Parameters:
- name: str.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import AsyncMerge
@@ -79,9 +102,26 @@ async def create(self, *, name: str) -> RemoteKey:
_response = await self._client_wrapper.httpx_client.request(
"POST",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/ticketing/v1/generate-key"),
- json=jsonable_encoder({"name": name}),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ request_options.get("additional_query_parameters") if request_options is not None else None
+ ),
+ json=jsonable_encoder({"name": name})
+ if request_options is None or request_options.get("additional_body_parameters") is None
+ else {
+ **jsonable_encoder({"name": name}),
+ **(jsonable_encoder(remove_none_from_dict(request_options.get("additional_body_parameters", {})))),
+ },
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(RemoteKey, _response.json()) # type: ignore
diff --git a/src/merge/resources/ticketing/resources/issues/client.py b/src/merge/resources/ticketing/resources/issues/client.py
index 211f1d45..b074723d 100644
--- a/src/merge/resources/ticketing/resources/issues/client.py
+++ b/src/merge/resources/ticketing/resources/issues/client.py
@@ -8,7 +8,9 @@
from .....core.api_error import ApiError
from .....core.client_wrapper import AsyncClientWrapper, SyncClientWrapper
from .....core.datetime_utils import serialize_datetime
+from .....core.jsonable_encoder import jsonable_encoder
from .....core.remove_none_from_dict import remove_none_from_dict
+from .....core.request_options import RequestOptions
from ...types.issue import Issue
from ...types.paginated_issue_list import PaginatedIssueList
from .types.issues_list_request_status import IssuesListRequestStatus
@@ -39,6 +41,7 @@ def list(
page_size: typing.Optional[int] = None,
start_date: typing.Optional[str] = None,
status: typing.Optional[IssuesListRequestStatus] = None,
+ request_options: typing.Optional[RequestOptions] = None,
) -> PaginatedIssueList:
"""
Gets issues.
@@ -71,7 +74,9 @@ def list(
- status: typing.Optional[IssuesListRequestStatus]. Status of the issue. Options: ('ONGOING', 'RESOLVED')
- `ONGOING` - ONGOING
- - `RESOLVED` - RESOLVED---
+ - `RESOLVED` - RESOLVED
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
+ ---
from merge.client import Merge
from merge.resources.ticketing import IssuesListRequestStatus
@@ -86,33 +91,49 @@ def list(
_response = self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/ticketing/v1/issues"),
- params=remove_none_from_dict(
- {
- "account_token": account_token,
- "cursor": cursor,
- "end_date": end_date,
- "end_user_organization_name": end_user_organization_name,
- "first_incident_time_after": serialize_datetime(first_incident_time_after)
- if first_incident_time_after is not None
- else None,
- "first_incident_time_before": serialize_datetime(first_incident_time_before)
- if first_incident_time_before is not None
- else None,
- "include_muted": include_muted,
- "integration_name": integration_name,
- "last_incident_time_after": serialize_datetime(last_incident_time_after)
- if last_incident_time_after is not None
- else None,
- "last_incident_time_before": serialize_datetime(last_incident_time_before)
- if last_incident_time_before is not None
- else None,
- "page_size": page_size,
- "start_date": start_date,
- "status": status,
- }
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "account_token": account_token,
+ "cursor": cursor,
+ "end_date": end_date,
+ "end_user_organization_name": end_user_organization_name,
+ "first_incident_time_after": serialize_datetime(first_incident_time_after)
+ if first_incident_time_after is not None
+ else None,
+ "first_incident_time_before": serialize_datetime(first_incident_time_before)
+ if first_incident_time_before is not None
+ else None,
+ "include_muted": include_muted,
+ "integration_name": integration_name,
+ "last_incident_time_after": serialize_datetime(last_incident_time_after)
+ if last_incident_time_after is not None
+ else None,
+ "last_incident_time_before": serialize_datetime(last_incident_time_before)
+ if last_incident_time_before is not None
+ else None,
+ "page_size": page_size,
+ "start_date": start_date,
+ "status": status,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(PaginatedIssueList, _response.json()) # type: ignore
@@ -122,12 +143,14 @@ def list(
raise ApiError(status_code=_response.status_code, body=_response.text)
raise ApiError(status_code=_response.status_code, body=_response_json)
- def retrieve(self, id: str) -> Issue:
+ def retrieve(self, id: str, *, request_options: typing.Optional[RequestOptions] = None) -> Issue:
"""
Get a specific issue.
Parameters:
- id: str.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import Merge
@@ -136,14 +159,26 @@ def retrieve(self, id: str) -> Issue:
api_key="YOUR_API_KEY",
)
client.ticketing.issues.retrieve(
- id="id",
+ id="string",
)
"""
_response = self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", f"api/ticketing/v1/issues/{id}"),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ request_options.get("additional_query_parameters") if request_options is not None else None
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(Issue, _response.json()) # type: ignore
@@ -174,6 +209,7 @@ async def list(
page_size: typing.Optional[int] = None,
start_date: typing.Optional[str] = None,
status: typing.Optional[IssuesListRequestStatus] = None,
+ request_options: typing.Optional[RequestOptions] = None,
) -> PaginatedIssueList:
"""
Gets issues.
@@ -206,7 +242,9 @@ async def list(
- status: typing.Optional[IssuesListRequestStatus]. Status of the issue. Options: ('ONGOING', 'RESOLVED')
- `ONGOING` - ONGOING
- - `RESOLVED` - RESOLVED---
+ - `RESOLVED` - RESOLVED
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
+ ---
from merge.client import AsyncMerge
from merge.resources.ticketing import IssuesListRequestStatus
@@ -221,33 +259,49 @@ async def list(
_response = await self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/ticketing/v1/issues"),
- params=remove_none_from_dict(
- {
- "account_token": account_token,
- "cursor": cursor,
- "end_date": end_date,
- "end_user_organization_name": end_user_organization_name,
- "first_incident_time_after": serialize_datetime(first_incident_time_after)
- if first_incident_time_after is not None
- else None,
- "first_incident_time_before": serialize_datetime(first_incident_time_before)
- if first_incident_time_before is not None
- else None,
- "include_muted": include_muted,
- "integration_name": integration_name,
- "last_incident_time_after": serialize_datetime(last_incident_time_after)
- if last_incident_time_after is not None
- else None,
- "last_incident_time_before": serialize_datetime(last_incident_time_before)
- if last_incident_time_before is not None
- else None,
- "page_size": page_size,
- "start_date": start_date,
- "status": status,
- }
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "account_token": account_token,
+ "cursor": cursor,
+ "end_date": end_date,
+ "end_user_organization_name": end_user_organization_name,
+ "first_incident_time_after": serialize_datetime(first_incident_time_after)
+ if first_incident_time_after is not None
+ else None,
+ "first_incident_time_before": serialize_datetime(first_incident_time_before)
+ if first_incident_time_before is not None
+ else None,
+ "include_muted": include_muted,
+ "integration_name": integration_name,
+ "last_incident_time_after": serialize_datetime(last_incident_time_after)
+ if last_incident_time_after is not None
+ else None,
+ "last_incident_time_before": serialize_datetime(last_incident_time_before)
+ if last_incident_time_before is not None
+ else None,
+ "page_size": page_size,
+ "start_date": start_date,
+ "status": status,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(PaginatedIssueList, _response.json()) # type: ignore
@@ -257,12 +311,14 @@ async def list(
raise ApiError(status_code=_response.status_code, body=_response.text)
raise ApiError(status_code=_response.status_code, body=_response_json)
- async def retrieve(self, id: str) -> Issue:
+ async def retrieve(self, id: str, *, request_options: typing.Optional[RequestOptions] = None) -> Issue:
"""
Get a specific issue.
Parameters:
- id: str.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import AsyncMerge
@@ -271,14 +327,26 @@ async def retrieve(self, id: str) -> Issue:
api_key="YOUR_API_KEY",
)
await client.ticketing.issues.retrieve(
- id="id",
+ id="string",
)
"""
_response = await self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", f"api/ticketing/v1/issues/{id}"),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ request_options.get("additional_query_parameters") if request_options is not None else None
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(Issue, _response.json()) # type: ignore
diff --git a/src/merge/resources/ticketing/resources/link_token/client.py b/src/merge/resources/ticketing/resources/link_token/client.py
index e53ae662..57e6daa8 100644
--- a/src/merge/resources/ticketing/resources/link_token/client.py
+++ b/src/merge/resources/ticketing/resources/link_token/client.py
@@ -7,6 +7,8 @@
from .....core.api_error import ApiError
from .....core.client_wrapper import AsyncClientWrapper, SyncClientWrapper
from .....core.jsonable_encoder import jsonable_encoder
+from .....core.remove_none_from_dict import remove_none_from_dict
+from .....core.request_options import RequestOptions
from ...types.categories_enum import CategoriesEnum
from ...types.common_model_scopes_body_request import CommonModelScopesBodyRequest
from ...types.link_token import LinkToken
@@ -35,6 +37,7 @@ def create(
link_expiry_mins: typing.Optional[int] = OMIT,
should_create_magic_link_url: typing.Optional[bool] = OMIT,
common_models: typing.Optional[typing.List[CommonModelScopesBodyRequest]] = OMIT,
+ request_options: typing.Optional[RequestOptions] = None,
) -> LinkToken:
"""
Creates a link token to be used when linking a new end user.
@@ -55,6 +58,21 @@ def create(
- should_create_magic_link_url: typing.Optional[bool]. Whether to generate a Magic Link URL. Defaults to false. For more information on Magic Link, see https://merge.dev/blog/integrations-fast-say-hello-to-magic-link.
- common_models: typing.Optional[typing.List[CommonModelScopesBodyRequest]]. An array of objects to specify the models and fields that will be disabled for a given Linked Account. Each object uses model_id, enabled_actions, and disabled_fields to specify the model, method, and fields that are scoped for a given Linked Account.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
+ ---
+ from merge.client import Merge
+
+ client = Merge(
+ account_token="YOUR_ACCOUNT_TOKEN",
+ api_key="YOUR_API_KEY",
+ )
+ client.ticketing.link_token.create(
+ end_user_email_address="string",
+ end_user_organization_name="string",
+ end_user_origin_id="string",
+ categories=[],
+ )
"""
_request: typing.Dict[str, typing.Any] = {
"end_user_email_address": end_user_email_address,
@@ -73,9 +91,26 @@ def create(
_response = self._client_wrapper.httpx_client.request(
"POST",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/ticketing/v1/link-token"),
- json=jsonable_encoder(_request),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ request_options.get("additional_query_parameters") if request_options is not None else None
+ ),
+ json=jsonable_encoder(_request)
+ if request_options is None or request_options.get("additional_body_parameters") is None
+ else {
+ **jsonable_encoder(_request),
+ **(jsonable_encoder(remove_none_from_dict(request_options.get("additional_body_parameters", {})))),
+ },
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(LinkToken, _response.json()) # type: ignore
@@ -101,6 +136,7 @@ async def create(
link_expiry_mins: typing.Optional[int] = OMIT,
should_create_magic_link_url: typing.Optional[bool] = OMIT,
common_models: typing.Optional[typing.List[CommonModelScopesBodyRequest]] = OMIT,
+ request_options: typing.Optional[RequestOptions] = None,
) -> LinkToken:
"""
Creates a link token to be used when linking a new end user.
@@ -121,6 +157,21 @@ async def create(
- should_create_magic_link_url: typing.Optional[bool]. Whether to generate a Magic Link URL. Defaults to false. For more information on Magic Link, see https://merge.dev/blog/integrations-fast-say-hello-to-magic-link.
- common_models: typing.Optional[typing.List[CommonModelScopesBodyRequest]]. An array of objects to specify the models and fields that will be disabled for a given Linked Account. Each object uses model_id, enabled_actions, and disabled_fields to specify the model, method, and fields that are scoped for a given Linked Account.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
+ ---
+ from merge.client import AsyncMerge
+
+ client = AsyncMerge(
+ account_token="YOUR_ACCOUNT_TOKEN",
+ api_key="YOUR_API_KEY",
+ )
+ await client.ticketing.link_token.create(
+ end_user_email_address="string",
+ end_user_organization_name="string",
+ end_user_origin_id="string",
+ categories=[],
+ )
"""
_request: typing.Dict[str, typing.Any] = {
"end_user_email_address": end_user_email_address,
@@ -139,9 +190,26 @@ async def create(
_response = await self._client_wrapper.httpx_client.request(
"POST",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/ticketing/v1/link-token"),
- json=jsonable_encoder(_request),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ request_options.get("additional_query_parameters") if request_options is not None else None
+ ),
+ json=jsonable_encoder(_request)
+ if request_options is None or request_options.get("additional_body_parameters") is None
+ else {
+ **jsonable_encoder(_request),
+ **(jsonable_encoder(remove_none_from_dict(request_options.get("additional_body_parameters", {})))),
+ },
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(LinkToken, _response.json()) # type: ignore
diff --git a/src/merge/resources/ticketing/resources/linked_accounts/client.py b/src/merge/resources/ticketing/resources/linked_accounts/client.py
index 9d670bfb..cf626e9b 100644
--- a/src/merge/resources/ticketing/resources/linked_accounts/client.py
+++ b/src/merge/resources/ticketing/resources/linked_accounts/client.py
@@ -6,7 +6,9 @@
from .....core.api_error import ApiError
from .....core.client_wrapper import AsyncClientWrapper, SyncClientWrapper
+from .....core.jsonable_encoder import jsonable_encoder
from .....core.remove_none_from_dict import remove_none_from_dict
+from .....core.request_options import RequestOptions
from ...types.paginated_account_details_and_actions_list import PaginatedAccountDetailsAndActionsList
from .types.linked_accounts_list_request_category import LinkedAccountsListRequestCategory
@@ -36,6 +38,7 @@ def list(
is_test_account: typing.Optional[str] = None,
page_size: typing.Optional[int] = None,
status: typing.Optional[str] = None,
+ request_options: typing.Optional[RequestOptions] = None,
) -> PaginatedAccountDetailsAndActionsList:
"""
List linked accounts for your organization.
@@ -73,6 +76,8 @@ def list(
- page_size: typing.Optional[int]. Number of results to return per page.
- status: typing.Optional[str]. Filter by status. Options: `COMPLETE`, `INCOMPLETE`, `RELINK_NEEDED`
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import Merge
from merge.resources.ticketing import LinkedAccountsListRequestCategory
@@ -88,25 +93,41 @@ def list(
_response = self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/ticketing/v1/linked-accounts"),
- params=remove_none_from_dict(
- {
- "category": category,
- "cursor": cursor,
- "end_user_email_address": end_user_email_address,
- "end_user_organization_name": end_user_organization_name,
- "end_user_origin_id": end_user_origin_id,
- "end_user_origin_ids": end_user_origin_ids,
- "id": id,
- "ids": ids,
- "include_duplicates": include_duplicates,
- "integration_name": integration_name,
- "is_test_account": is_test_account,
- "page_size": page_size,
- "status": status,
- }
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "category": category,
+ "cursor": cursor,
+ "end_user_email_address": end_user_email_address,
+ "end_user_organization_name": end_user_organization_name,
+ "end_user_origin_id": end_user_origin_id,
+ "end_user_origin_ids": end_user_origin_ids,
+ "id": id,
+ "ids": ids,
+ "include_duplicates": include_duplicates,
+ "integration_name": integration_name,
+ "is_test_account": is_test_account,
+ "page_size": page_size,
+ "status": status,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(PaginatedAccountDetailsAndActionsList, _response.json()) # type: ignore
@@ -137,6 +158,7 @@ async def list(
is_test_account: typing.Optional[str] = None,
page_size: typing.Optional[int] = None,
status: typing.Optional[str] = None,
+ request_options: typing.Optional[RequestOptions] = None,
) -> PaginatedAccountDetailsAndActionsList:
"""
List linked accounts for your organization.
@@ -174,6 +196,8 @@ async def list(
- page_size: typing.Optional[int]. Number of results to return per page.
- status: typing.Optional[str]. Filter by status. Options: `COMPLETE`, `INCOMPLETE`, `RELINK_NEEDED`
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import AsyncMerge
from merge.resources.ticketing import LinkedAccountsListRequestCategory
@@ -189,25 +213,41 @@ async def list(
_response = await self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/ticketing/v1/linked-accounts"),
- params=remove_none_from_dict(
- {
- "category": category,
- "cursor": cursor,
- "end_user_email_address": end_user_email_address,
- "end_user_organization_name": end_user_organization_name,
- "end_user_origin_id": end_user_origin_id,
- "end_user_origin_ids": end_user_origin_ids,
- "id": id,
- "ids": ids,
- "include_duplicates": include_duplicates,
- "integration_name": integration_name,
- "is_test_account": is_test_account,
- "page_size": page_size,
- "status": status,
- }
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "category": category,
+ "cursor": cursor,
+ "end_user_email_address": end_user_email_address,
+ "end_user_organization_name": end_user_organization_name,
+ "end_user_origin_id": end_user_origin_id,
+ "end_user_origin_ids": end_user_origin_ids,
+ "id": id,
+ "ids": ids,
+ "include_duplicates": include_duplicates,
+ "integration_name": integration_name,
+ "is_test_account": is_test_account,
+ "page_size": page_size,
+ "status": status,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(PaginatedAccountDetailsAndActionsList, _response.json()) # type: ignore
diff --git a/src/merge/resources/ticketing/resources/passthrough/client.py b/src/merge/resources/ticketing/resources/passthrough/client.py
index 1c0f85db..355485c6 100644
--- a/src/merge/resources/ticketing/resources/passthrough/client.py
+++ b/src/merge/resources/ticketing/resources/passthrough/client.py
@@ -7,6 +7,8 @@
from .....core.api_error import ApiError
from .....core.client_wrapper import AsyncClientWrapper, SyncClientWrapper
from .....core.jsonable_encoder import jsonable_encoder
+from .....core.remove_none_from_dict import remove_none_from_dict
+from .....core.request_options import RequestOptions
from ...types.data_passthrough_request import DataPassthroughRequest
from ...types.remote_response import RemoteResponse
@@ -23,19 +25,60 @@ class PassthroughClient:
def __init__(self, *, client_wrapper: SyncClientWrapper):
self._client_wrapper = client_wrapper
- def create(self, *, request: DataPassthroughRequest) -> RemoteResponse:
+ def create(
+ self, *, request: DataPassthroughRequest, request_options: typing.Optional[RequestOptions] = None
+ ) -> RemoteResponse:
"""
Pull data from an endpoint not currently supported by Merge.
Parameters:
- request: DataPassthroughRequest.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
+ ---
+ from merge.client import Merge
+ from merge.resources.ticketing import (
+ DataPassthroughRequest,
+ MethodEnum,
+ RequestFormatEnum,
+ )
+
+ client = Merge(
+ account_token="YOUR_ACCOUNT_TOKEN",
+ api_key="YOUR_API_KEY",
+ )
+ client.ticketing.passthrough.create(
+ request=DataPassthroughRequest(
+ method=MethodEnum.GET,
+ path="/scooters",
+ data='{"company": "Lime", "model": "Gen 2.5"}',
+ request_format=RequestFormatEnum.JSON,
+ ),
+ )
"""
_response = self._client_wrapper.httpx_client.request(
"POST",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/ticketing/v1/passthrough"),
- json=jsonable_encoder(request),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ request_options.get("additional_query_parameters") if request_options is not None else None
+ ),
+ json=jsonable_encoder(request)
+ if request_options is None or request_options.get("additional_body_parameters") is None
+ else {
+ **jsonable_encoder(request),
+ **(jsonable_encoder(remove_none_from_dict(request_options.get("additional_body_parameters", {})))),
+ },
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(RemoteResponse, _response.json()) # type: ignore
@@ -50,19 +93,60 @@ class AsyncPassthroughClient:
def __init__(self, *, client_wrapper: AsyncClientWrapper):
self._client_wrapper = client_wrapper
- async def create(self, *, request: DataPassthroughRequest) -> RemoteResponse:
+ async def create(
+ self, *, request: DataPassthroughRequest, request_options: typing.Optional[RequestOptions] = None
+ ) -> RemoteResponse:
"""
Pull data from an endpoint not currently supported by Merge.
Parameters:
- request: DataPassthroughRequest.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
+ ---
+ from merge.client import AsyncMerge
+ from merge.resources.ticketing import (
+ DataPassthroughRequest,
+ MethodEnum,
+ RequestFormatEnum,
+ )
+
+ client = AsyncMerge(
+ account_token="YOUR_ACCOUNT_TOKEN",
+ api_key="YOUR_API_KEY",
+ )
+ await client.ticketing.passthrough.create(
+ request=DataPassthroughRequest(
+ method=MethodEnum.GET,
+ path="/scooters",
+ data='{"company": "Lime", "model": "Gen 2.5"}',
+ request_format=RequestFormatEnum.JSON,
+ ),
+ )
"""
_response = await self._client_wrapper.httpx_client.request(
"POST",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/ticketing/v1/passthrough"),
- json=jsonable_encoder(request),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ request_options.get("additional_query_parameters") if request_options is not None else None
+ ),
+ json=jsonable_encoder(request)
+ if request_options is None or request_options.get("additional_body_parameters") is None
+ else {
+ **jsonable_encoder(request),
+ **(jsonable_encoder(remove_none_from_dict(request_options.get("additional_body_parameters", {})))),
+ },
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(RemoteResponse, _response.json()) # type: ignore
diff --git a/src/merge/resources/ticketing/resources/projects/client.py b/src/merge/resources/ticketing/resources/projects/client.py
index b69c0ab5..5739bf77 100644
--- a/src/merge/resources/ticketing/resources/projects/client.py
+++ b/src/merge/resources/ticketing/resources/projects/client.py
@@ -8,7 +8,9 @@
from .....core.api_error import ApiError
from .....core.client_wrapper import AsyncClientWrapper, SyncClientWrapper
from .....core.datetime_utils import serialize_datetime
+from .....core.jsonable_encoder import jsonable_encoder
from .....core.remove_none_from_dict import remove_none_from_dict
+from .....core.request_options import RequestOptions
from ...types.paginated_project_list import PaginatedProjectList
from ...types.paginated_user_list import PaginatedUserList
from ...types.project import Project
@@ -36,6 +38,7 @@ def list(
modified_before: typing.Optional[dt.datetime] = None,
page_size: typing.Optional[int] = None,
remote_id: typing.Optional[str] = None,
+ request_options: typing.Optional[RequestOptions] = None,
) -> PaginatedProjectList:
"""
Returns a list of `Project` objects.
@@ -58,6 +61,8 @@ def list(
- page_size: typing.Optional[int]. Number of results to return per page.
- remote_id: typing.Optional[str]. The API provider's ID for the given object.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import Merge
@@ -70,21 +75,37 @@ def list(
_response = self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/ticketing/v1/projects"),
- params=remove_none_from_dict(
- {
- "created_after": serialize_datetime(created_after) if created_after is not None else None,
- "created_before": serialize_datetime(created_before) if created_before is not None else None,
- "cursor": cursor,
- "include_deleted_data": include_deleted_data,
- "include_remote_data": include_remote_data,
- "modified_after": serialize_datetime(modified_after) if modified_after is not None else None,
- "modified_before": serialize_datetime(modified_before) if modified_before is not None else None,
- "page_size": page_size,
- "remote_id": remote_id,
- }
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "created_after": serialize_datetime(created_after) if created_after is not None else None,
+ "created_before": serialize_datetime(created_before) if created_before is not None else None,
+ "cursor": cursor,
+ "include_deleted_data": include_deleted_data,
+ "include_remote_data": include_remote_data,
+ "modified_after": serialize_datetime(modified_after) if modified_after is not None else None,
+ "modified_before": serialize_datetime(modified_before) if modified_before is not None else None,
+ "page_size": page_size,
+ "remote_id": remote_id,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(PaginatedProjectList, _response.json()) # type: ignore
@@ -94,7 +115,13 @@ def list(
raise ApiError(status_code=_response.status_code, body=_response.text)
raise ApiError(status_code=_response.status_code, body=_response_json)
- def retrieve(self, id: str, *, include_remote_data: typing.Optional[bool] = None) -> Project:
+ def retrieve(
+ self,
+ id: str,
+ *,
+ include_remote_data: typing.Optional[bool] = None,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> Project:
"""
Returns a `Project` object with the given `id`.
@@ -102,6 +129,8 @@ def retrieve(self, id: str, *, include_remote_data: typing.Optional[bool] = None
- id: str.
- include_remote_data: typing.Optional[bool]. Whether to include the original data Merge fetched from the third-party to produce these models.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import Merge
@@ -110,15 +139,35 @@ def retrieve(self, id: str, *, include_remote_data: typing.Optional[bool] = None
api_key="YOUR_API_KEY",
)
client.ticketing.projects.retrieve(
- id="id",
+ id="string",
)
"""
_response = self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", f"api/ticketing/v1/projects/{id}"),
- params=remove_none_from_dict({"include_remote_data": include_remote_data}),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "include_remote_data": include_remote_data,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(Project, _response.json()) # type: ignore
@@ -137,6 +186,7 @@ def users_list(
include_deleted_data: typing.Optional[bool] = None,
include_remote_data: typing.Optional[bool] = None,
page_size: typing.Optional[int] = None,
+ request_options: typing.Optional[RequestOptions] = None,
) -> PaginatedUserList:
"""
Returns a list of `User` objects.
@@ -153,6 +203,8 @@ def users_list(
- include_remote_data: typing.Optional[bool]. Whether to include the original data Merge fetched from the third-party to produce these models.
- page_size: typing.Optional[int]. Number of results to return per page.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import Merge
from merge.resources.ticketing import ProjectsUsersListRequestExpand
@@ -162,7 +214,7 @@ def users_list(
api_key="YOUR_API_KEY",
)
client.ticketing.projects.users_list(
- parent_id="parent-id",
+ parent_id="string",
expand=ProjectsUsersListRequestExpand.ROLES,
)
"""
@@ -171,17 +223,33 @@ def users_list(
urllib.parse.urljoin(
f"{self._client_wrapper.get_base_url()}/", f"api/ticketing/v1/projects/{parent_id}/users"
),
- params=remove_none_from_dict(
- {
- "cursor": cursor,
- "expand": expand,
- "include_deleted_data": include_deleted_data,
- "include_remote_data": include_remote_data,
- "page_size": page_size,
- }
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "cursor": cursor,
+ "expand": expand,
+ "include_deleted_data": include_deleted_data,
+ "include_remote_data": include_remote_data,
+ "page_size": page_size,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(PaginatedUserList, _response.json()) # type: ignore
@@ -208,6 +276,7 @@ async def list(
modified_before: typing.Optional[dt.datetime] = None,
page_size: typing.Optional[int] = None,
remote_id: typing.Optional[str] = None,
+ request_options: typing.Optional[RequestOptions] = None,
) -> PaginatedProjectList:
"""
Returns a list of `Project` objects.
@@ -230,6 +299,8 @@ async def list(
- page_size: typing.Optional[int]. Number of results to return per page.
- remote_id: typing.Optional[str]. The API provider's ID for the given object.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import AsyncMerge
@@ -242,21 +313,37 @@ async def list(
_response = await self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/ticketing/v1/projects"),
- params=remove_none_from_dict(
- {
- "created_after": serialize_datetime(created_after) if created_after is not None else None,
- "created_before": serialize_datetime(created_before) if created_before is not None else None,
- "cursor": cursor,
- "include_deleted_data": include_deleted_data,
- "include_remote_data": include_remote_data,
- "modified_after": serialize_datetime(modified_after) if modified_after is not None else None,
- "modified_before": serialize_datetime(modified_before) if modified_before is not None else None,
- "page_size": page_size,
- "remote_id": remote_id,
- }
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "created_after": serialize_datetime(created_after) if created_after is not None else None,
+ "created_before": serialize_datetime(created_before) if created_before is not None else None,
+ "cursor": cursor,
+ "include_deleted_data": include_deleted_data,
+ "include_remote_data": include_remote_data,
+ "modified_after": serialize_datetime(modified_after) if modified_after is not None else None,
+ "modified_before": serialize_datetime(modified_before) if modified_before is not None else None,
+ "page_size": page_size,
+ "remote_id": remote_id,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(PaginatedProjectList, _response.json()) # type: ignore
@@ -266,7 +353,13 @@ async def list(
raise ApiError(status_code=_response.status_code, body=_response.text)
raise ApiError(status_code=_response.status_code, body=_response_json)
- async def retrieve(self, id: str, *, include_remote_data: typing.Optional[bool] = None) -> Project:
+ async def retrieve(
+ self,
+ id: str,
+ *,
+ include_remote_data: typing.Optional[bool] = None,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> Project:
"""
Returns a `Project` object with the given `id`.
@@ -274,6 +367,8 @@ async def retrieve(self, id: str, *, include_remote_data: typing.Optional[bool]
- id: str.
- include_remote_data: typing.Optional[bool]. Whether to include the original data Merge fetched from the third-party to produce these models.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import AsyncMerge
@@ -282,15 +377,35 @@ async def retrieve(self, id: str, *, include_remote_data: typing.Optional[bool]
api_key="YOUR_API_KEY",
)
await client.ticketing.projects.retrieve(
- id="id",
+ id="string",
)
"""
_response = await self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", f"api/ticketing/v1/projects/{id}"),
- params=remove_none_from_dict({"include_remote_data": include_remote_data}),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "include_remote_data": include_remote_data,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(Project, _response.json()) # type: ignore
@@ -309,6 +424,7 @@ async def users_list(
include_deleted_data: typing.Optional[bool] = None,
include_remote_data: typing.Optional[bool] = None,
page_size: typing.Optional[int] = None,
+ request_options: typing.Optional[RequestOptions] = None,
) -> PaginatedUserList:
"""
Returns a list of `User` objects.
@@ -325,6 +441,8 @@ async def users_list(
- include_remote_data: typing.Optional[bool]. Whether to include the original data Merge fetched from the third-party to produce these models.
- page_size: typing.Optional[int]. Number of results to return per page.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import AsyncMerge
from merge.resources.ticketing import ProjectsUsersListRequestExpand
@@ -334,7 +452,7 @@ async def users_list(
api_key="YOUR_API_KEY",
)
await client.ticketing.projects.users_list(
- parent_id="parent-id",
+ parent_id="string",
expand=ProjectsUsersListRequestExpand.ROLES,
)
"""
@@ -343,17 +461,33 @@ async def users_list(
urllib.parse.urljoin(
f"{self._client_wrapper.get_base_url()}/", f"api/ticketing/v1/projects/{parent_id}/users"
),
- params=remove_none_from_dict(
- {
- "cursor": cursor,
- "expand": expand,
- "include_deleted_data": include_deleted_data,
- "include_remote_data": include_remote_data,
- "page_size": page_size,
- }
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "cursor": cursor,
+ "expand": expand,
+ "include_deleted_data": include_deleted_data,
+ "include_remote_data": include_remote_data,
+ "page_size": page_size,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(PaginatedUserList, _response.json()) # type: ignore
diff --git a/src/merge/resources/ticketing/resources/regenerate_key/client.py b/src/merge/resources/ticketing/resources/regenerate_key/client.py
index 68ab58cf..7287cfa9 100644
--- a/src/merge/resources/ticketing/resources/regenerate_key/client.py
+++ b/src/merge/resources/ticketing/resources/regenerate_key/client.py
@@ -7,6 +7,8 @@
from .....core.api_error import ApiError
from .....core.client_wrapper import AsyncClientWrapper, SyncClientWrapper
from .....core.jsonable_encoder import jsonable_encoder
+from .....core.remove_none_from_dict import remove_none_from_dict
+from .....core.request_options import RequestOptions
from ...types.remote_key import RemoteKey
try:
@@ -22,12 +24,14 @@ class RegenerateKeyClient:
def __init__(self, *, client_wrapper: SyncClientWrapper):
self._client_wrapper = client_wrapper
- def create(self, *, name: str) -> RemoteKey:
+ def create(self, *, name: str, request_options: typing.Optional[RequestOptions] = None) -> RemoteKey:
"""
Exchange remote keys.
Parameters:
- name: str.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import Merge
@@ -42,9 +46,26 @@ def create(self, *, name: str) -> RemoteKey:
_response = self._client_wrapper.httpx_client.request(
"POST",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/ticketing/v1/regenerate-key"),
- json=jsonable_encoder({"name": name}),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ request_options.get("additional_query_parameters") if request_options is not None else None
+ ),
+ json=jsonable_encoder({"name": name})
+ if request_options is None or request_options.get("additional_body_parameters") is None
+ else {
+ **jsonable_encoder({"name": name}),
+ **(jsonable_encoder(remove_none_from_dict(request_options.get("additional_body_parameters", {})))),
+ },
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(RemoteKey, _response.json()) # type: ignore
@@ -59,12 +80,14 @@ class AsyncRegenerateKeyClient:
def __init__(self, *, client_wrapper: AsyncClientWrapper):
self._client_wrapper = client_wrapper
- async def create(self, *, name: str) -> RemoteKey:
+ async def create(self, *, name: str, request_options: typing.Optional[RequestOptions] = None) -> RemoteKey:
"""
Exchange remote keys.
Parameters:
- name: str.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import AsyncMerge
@@ -79,9 +102,26 @@ async def create(self, *, name: str) -> RemoteKey:
_response = await self._client_wrapper.httpx_client.request(
"POST",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/ticketing/v1/regenerate-key"),
- json=jsonable_encoder({"name": name}),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ request_options.get("additional_query_parameters") if request_options is not None else None
+ ),
+ json=jsonable_encoder({"name": name})
+ if request_options is None or request_options.get("additional_body_parameters") is None
+ else {
+ **jsonable_encoder({"name": name}),
+ **(jsonable_encoder(remove_none_from_dict(request_options.get("additional_body_parameters", {})))),
+ },
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(RemoteKey, _response.json()) # type: ignore
diff --git a/src/merge/resources/ticketing/resources/roles/client.py b/src/merge/resources/ticketing/resources/roles/client.py
index 62dde277..8b36ceb9 100644
--- a/src/merge/resources/ticketing/resources/roles/client.py
+++ b/src/merge/resources/ticketing/resources/roles/client.py
@@ -8,7 +8,9 @@
from .....core.api_error import ApiError
from .....core.client_wrapper import AsyncClientWrapper, SyncClientWrapper
from .....core.datetime_utils import serialize_datetime
+from .....core.jsonable_encoder import jsonable_encoder
from .....core.remove_none_from_dict import remove_none_from_dict
+from .....core.request_options import RequestOptions
from ...types.paginated_role_list import PaginatedRoleList
from ...types.role import Role
@@ -34,6 +36,7 @@ def list(
modified_before: typing.Optional[dt.datetime] = None,
page_size: typing.Optional[int] = None,
remote_id: typing.Optional[str] = None,
+ request_options: typing.Optional[RequestOptions] = None,
) -> PaginatedRoleList:
"""
Returns a list of `Role` objects.
@@ -56,6 +59,8 @@ def list(
- page_size: typing.Optional[int]. Number of results to return per page.
- remote_id: typing.Optional[str]. The API provider's ID for the given object.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import Merge
@@ -68,21 +73,37 @@ def list(
_response = self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/ticketing/v1/roles"),
- params=remove_none_from_dict(
- {
- "created_after": serialize_datetime(created_after) if created_after is not None else None,
- "created_before": serialize_datetime(created_before) if created_before is not None else None,
- "cursor": cursor,
- "include_deleted_data": include_deleted_data,
- "include_remote_data": include_remote_data,
- "modified_after": serialize_datetime(modified_after) if modified_after is not None else None,
- "modified_before": serialize_datetime(modified_before) if modified_before is not None else None,
- "page_size": page_size,
- "remote_id": remote_id,
- }
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "created_after": serialize_datetime(created_after) if created_after is not None else None,
+ "created_before": serialize_datetime(created_before) if created_before is not None else None,
+ "cursor": cursor,
+ "include_deleted_data": include_deleted_data,
+ "include_remote_data": include_remote_data,
+ "modified_after": serialize_datetime(modified_after) if modified_after is not None else None,
+ "modified_before": serialize_datetime(modified_before) if modified_before is not None else None,
+ "page_size": page_size,
+ "remote_id": remote_id,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(PaginatedRoleList, _response.json()) # type: ignore
@@ -92,7 +113,13 @@ def list(
raise ApiError(status_code=_response.status_code, body=_response.text)
raise ApiError(status_code=_response.status_code, body=_response_json)
- def retrieve(self, id: str, *, include_remote_data: typing.Optional[bool] = None) -> Role:
+ def retrieve(
+ self,
+ id: str,
+ *,
+ include_remote_data: typing.Optional[bool] = None,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> Role:
"""
Returns a `Role` object with the given `id`.
@@ -100,6 +127,8 @@ def retrieve(self, id: str, *, include_remote_data: typing.Optional[bool] = None
- id: str.
- include_remote_data: typing.Optional[bool]. Whether to include the original data Merge fetched from the third-party to produce these models.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import Merge
@@ -108,15 +137,35 @@ def retrieve(self, id: str, *, include_remote_data: typing.Optional[bool] = None
api_key="YOUR_API_KEY",
)
client.ticketing.roles.retrieve(
- id="id",
+ id="string",
)
"""
_response = self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", f"api/ticketing/v1/roles/{id}"),
- params=remove_none_from_dict({"include_remote_data": include_remote_data}),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "include_remote_data": include_remote_data,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(Role, _response.json()) # type: ignore
@@ -143,6 +192,7 @@ async def list(
modified_before: typing.Optional[dt.datetime] = None,
page_size: typing.Optional[int] = None,
remote_id: typing.Optional[str] = None,
+ request_options: typing.Optional[RequestOptions] = None,
) -> PaginatedRoleList:
"""
Returns a list of `Role` objects.
@@ -165,6 +215,8 @@ async def list(
- page_size: typing.Optional[int]. Number of results to return per page.
- remote_id: typing.Optional[str]. The API provider's ID for the given object.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import AsyncMerge
@@ -177,21 +229,37 @@ async def list(
_response = await self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/ticketing/v1/roles"),
- params=remove_none_from_dict(
- {
- "created_after": serialize_datetime(created_after) if created_after is not None else None,
- "created_before": serialize_datetime(created_before) if created_before is not None else None,
- "cursor": cursor,
- "include_deleted_data": include_deleted_data,
- "include_remote_data": include_remote_data,
- "modified_after": serialize_datetime(modified_after) if modified_after is not None else None,
- "modified_before": serialize_datetime(modified_before) if modified_before is not None else None,
- "page_size": page_size,
- "remote_id": remote_id,
- }
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "created_after": serialize_datetime(created_after) if created_after is not None else None,
+ "created_before": serialize_datetime(created_before) if created_before is not None else None,
+ "cursor": cursor,
+ "include_deleted_data": include_deleted_data,
+ "include_remote_data": include_remote_data,
+ "modified_after": serialize_datetime(modified_after) if modified_after is not None else None,
+ "modified_before": serialize_datetime(modified_before) if modified_before is not None else None,
+ "page_size": page_size,
+ "remote_id": remote_id,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(PaginatedRoleList, _response.json()) # type: ignore
@@ -201,7 +269,13 @@ async def list(
raise ApiError(status_code=_response.status_code, body=_response.text)
raise ApiError(status_code=_response.status_code, body=_response_json)
- async def retrieve(self, id: str, *, include_remote_data: typing.Optional[bool] = None) -> Role:
+ async def retrieve(
+ self,
+ id: str,
+ *,
+ include_remote_data: typing.Optional[bool] = None,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> Role:
"""
Returns a `Role` object with the given `id`.
@@ -209,6 +283,8 @@ async def retrieve(self, id: str, *, include_remote_data: typing.Optional[bool]
- id: str.
- include_remote_data: typing.Optional[bool]. Whether to include the original data Merge fetched from the third-party to produce these models.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import AsyncMerge
@@ -217,15 +293,35 @@ async def retrieve(self, id: str, *, include_remote_data: typing.Optional[bool]
api_key="YOUR_API_KEY",
)
await client.ticketing.roles.retrieve(
- id="id",
+ id="string",
)
"""
_response = await self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", f"api/ticketing/v1/roles/{id}"),
- params=remove_none_from_dict({"include_remote_data": include_remote_data}),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "include_remote_data": include_remote_data,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(Role, _response.json()) # type: ignore
diff --git a/src/merge/resources/ticketing/resources/selective_sync/client.py b/src/merge/resources/ticketing/resources/selective_sync/client.py
index fa2789c1..b314fb3c 100644
--- a/src/merge/resources/ticketing/resources/selective_sync/client.py
+++ b/src/merge/resources/ticketing/resources/selective_sync/client.py
@@ -8,6 +8,7 @@
from .....core.client_wrapper import AsyncClientWrapper, SyncClientWrapper
from .....core.jsonable_encoder import jsonable_encoder
from .....core.remove_none_from_dict import remove_none_from_dict
+from .....core.request_options import RequestOptions
from ...types.linked_account_selective_sync_configuration import LinkedAccountSelectiveSyncConfiguration
from ...types.linked_account_selective_sync_configuration_request import LinkedAccountSelectiveSyncConfigurationRequest
from ...types.paginated_condition_schema_list import PaginatedConditionSchemaList
@@ -25,10 +26,14 @@ class SelectiveSyncClient:
def __init__(self, *, client_wrapper: SyncClientWrapper):
self._client_wrapper = client_wrapper
- def configurations_list(self) -> typing.List[LinkedAccountSelectiveSyncConfiguration]:
+ def configurations_list(
+ self, *, request_options: typing.Optional[RequestOptions] = None
+ ) -> typing.List[LinkedAccountSelectiveSyncConfiguration]:
"""
Get a linked account's selective syncs.
+ Parameters:
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import Merge
@@ -43,8 +48,20 @@ def configurations_list(self) -> typing.List[LinkedAccountSelectiveSyncConfigura
urllib.parse.urljoin(
f"{self._client_wrapper.get_base_url()}/", "api/ticketing/v1/selective-sync/configurations"
),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ request_options.get("additional_query_parameters") if request_options is not None else None
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(typing.List[LinkedAccountSelectiveSyncConfiguration], _response.json()) # type: ignore
@@ -55,29 +72,27 @@ def configurations_list(self) -> typing.List[LinkedAccountSelectiveSyncConfigura
raise ApiError(status_code=_response.status_code, body=_response_json)
def configurations_update(
- self, *, sync_configurations: typing.List[LinkedAccountSelectiveSyncConfigurationRequest]
+ self,
+ *,
+ sync_configurations: typing.List[LinkedAccountSelectiveSyncConfigurationRequest],
+ request_options: typing.Optional[RequestOptions] = None,
) -> typing.List[LinkedAccountSelectiveSyncConfiguration]:
"""
Replace a linked account's selective syncs.
Parameters:
- sync_configurations: typing.List[LinkedAccountSelectiveSyncConfigurationRequest]. The selective syncs associated with a linked account.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import Merge
- from merge.resources.ticketing import (
- LinkedAccountSelectiveSyncConfigurationRequest,
- )
client = Merge(
account_token="YOUR_ACCOUNT_TOKEN",
api_key="YOUR_API_KEY",
)
client.ticketing.selective_sync.configurations_update(
- sync_configurations=[
- LinkedAccountSelectiveSyncConfigurationRequest(
- linked_account_conditions=[],
- )
- ],
+ sync_configurations=[],
)
"""
_response = self._client_wrapper.httpx_client.request(
@@ -85,9 +100,26 @@ def configurations_update(
urllib.parse.urljoin(
f"{self._client_wrapper.get_base_url()}/", "api/ticketing/v1/selective-sync/configurations"
),
- json=jsonable_encoder({"sync_configurations": sync_configurations}),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ request_options.get("additional_query_parameters") if request_options is not None else None
+ ),
+ json=jsonable_encoder({"sync_configurations": sync_configurations})
+ if request_options is None or request_options.get("additional_body_parameters") is None
+ else {
+ **jsonable_encoder({"sync_configurations": sync_configurations}),
+ **(jsonable_encoder(remove_none_from_dict(request_options.get("additional_body_parameters", {})))),
+ },
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(typing.List[LinkedAccountSelectiveSyncConfiguration], _response.json()) # type: ignore
@@ -103,6 +135,7 @@ def meta_list(
common_model: typing.Optional[str] = None,
cursor: typing.Optional[str] = None,
page_size: typing.Optional[int] = None,
+ request_options: typing.Optional[RequestOptions] = None,
) -> PaginatedConditionSchemaList:
"""
Get metadata for the conditions available to a linked account.
@@ -113,6 +146,8 @@ def meta_list(
- cursor: typing.Optional[str]. The pagination cursor value.
- page_size: typing.Optional[int]. Number of results to return per page.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import Merge
@@ -125,9 +160,31 @@ def meta_list(
_response = self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/ticketing/v1/selective-sync/meta"),
- params=remove_none_from_dict({"common_model": common_model, "cursor": cursor, "page_size": page_size}),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "common_model": common_model,
+ "cursor": cursor,
+ "page_size": page_size,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(PaginatedConditionSchemaList, _response.json()) # type: ignore
@@ -142,10 +199,14 @@ class AsyncSelectiveSyncClient:
def __init__(self, *, client_wrapper: AsyncClientWrapper):
self._client_wrapper = client_wrapper
- async def configurations_list(self) -> typing.List[LinkedAccountSelectiveSyncConfiguration]:
+ async def configurations_list(
+ self, *, request_options: typing.Optional[RequestOptions] = None
+ ) -> typing.List[LinkedAccountSelectiveSyncConfiguration]:
"""
Get a linked account's selective syncs.
+ Parameters:
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import AsyncMerge
@@ -160,8 +221,20 @@ async def configurations_list(self) -> typing.List[LinkedAccountSelectiveSyncCon
urllib.parse.urljoin(
f"{self._client_wrapper.get_base_url()}/", "api/ticketing/v1/selective-sync/configurations"
),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ request_options.get("additional_query_parameters") if request_options is not None else None
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(typing.List[LinkedAccountSelectiveSyncConfiguration], _response.json()) # type: ignore
@@ -172,29 +245,27 @@ async def configurations_list(self) -> typing.List[LinkedAccountSelectiveSyncCon
raise ApiError(status_code=_response.status_code, body=_response_json)
async def configurations_update(
- self, *, sync_configurations: typing.List[LinkedAccountSelectiveSyncConfigurationRequest]
+ self,
+ *,
+ sync_configurations: typing.List[LinkedAccountSelectiveSyncConfigurationRequest],
+ request_options: typing.Optional[RequestOptions] = None,
) -> typing.List[LinkedAccountSelectiveSyncConfiguration]:
"""
Replace a linked account's selective syncs.
Parameters:
- sync_configurations: typing.List[LinkedAccountSelectiveSyncConfigurationRequest]. The selective syncs associated with a linked account.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import AsyncMerge
- from merge.resources.ticketing import (
- LinkedAccountSelectiveSyncConfigurationRequest,
- )
client = AsyncMerge(
account_token="YOUR_ACCOUNT_TOKEN",
api_key="YOUR_API_KEY",
)
await client.ticketing.selective_sync.configurations_update(
- sync_configurations=[
- LinkedAccountSelectiveSyncConfigurationRequest(
- linked_account_conditions=[],
- )
- ],
+ sync_configurations=[],
)
"""
_response = await self._client_wrapper.httpx_client.request(
@@ -202,9 +273,26 @@ async def configurations_update(
urllib.parse.urljoin(
f"{self._client_wrapper.get_base_url()}/", "api/ticketing/v1/selective-sync/configurations"
),
- json=jsonable_encoder({"sync_configurations": sync_configurations}),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ request_options.get("additional_query_parameters") if request_options is not None else None
+ ),
+ json=jsonable_encoder({"sync_configurations": sync_configurations})
+ if request_options is None or request_options.get("additional_body_parameters") is None
+ else {
+ **jsonable_encoder({"sync_configurations": sync_configurations}),
+ **(jsonable_encoder(remove_none_from_dict(request_options.get("additional_body_parameters", {})))),
+ },
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(typing.List[LinkedAccountSelectiveSyncConfiguration], _response.json()) # type: ignore
@@ -220,6 +308,7 @@ async def meta_list(
common_model: typing.Optional[str] = None,
cursor: typing.Optional[str] = None,
page_size: typing.Optional[int] = None,
+ request_options: typing.Optional[RequestOptions] = None,
) -> PaginatedConditionSchemaList:
"""
Get metadata for the conditions available to a linked account.
@@ -230,6 +319,8 @@ async def meta_list(
- cursor: typing.Optional[str]. The pagination cursor value.
- page_size: typing.Optional[int]. Number of results to return per page.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import AsyncMerge
@@ -242,9 +333,31 @@ async def meta_list(
_response = await self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/ticketing/v1/selective-sync/meta"),
- params=remove_none_from_dict({"common_model": common_model, "cursor": cursor, "page_size": page_size}),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "common_model": common_model,
+ "cursor": cursor,
+ "page_size": page_size,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(PaginatedConditionSchemaList, _response.json()) # type: ignore
diff --git a/src/merge/resources/ticketing/resources/sync_status/client.py b/src/merge/resources/ticketing/resources/sync_status/client.py
index f1f4cf06..4c7352ce 100644
--- a/src/merge/resources/ticketing/resources/sync_status/client.py
+++ b/src/merge/resources/ticketing/resources/sync_status/client.py
@@ -6,7 +6,9 @@
from .....core.api_error import ApiError
from .....core.client_wrapper import AsyncClientWrapper, SyncClientWrapper
+from .....core.jsonable_encoder import jsonable_encoder
from .....core.remove_none_from_dict import remove_none_from_dict
+from .....core.request_options import RequestOptions
from ...types.paginated_sync_status_list import PaginatedSyncStatusList
try:
@@ -20,7 +22,11 @@ def __init__(self, *, client_wrapper: SyncClientWrapper):
self._client_wrapper = client_wrapper
def list(
- self, *, cursor: typing.Optional[str] = None, page_size: typing.Optional[int] = None
+ self,
+ *,
+ cursor: typing.Optional[str] = None,
+ page_size: typing.Optional[int] = None,
+ request_options: typing.Optional[RequestOptions] = None,
) -> PaginatedSyncStatusList:
"""
Get syncing status. Possible values: `DISABLED`, `DONE`, `FAILED`, `PARTIALLY_SYNCED`, `PAUSED`, `SYNCING`. Learn more about sync status in our [Help Center](https://help.merge.dev/en/articles/8184193-merge-sync-statuses).
@@ -29,6 +35,8 @@ def list(
- cursor: typing.Optional[str]. The pagination cursor value.
- page_size: typing.Optional[int]. Number of results to return per page.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import Merge
@@ -41,9 +49,30 @@ def list(
_response = self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/ticketing/v1/sync-status"),
- params=remove_none_from_dict({"cursor": cursor, "page_size": page_size}),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "cursor": cursor,
+ "page_size": page_size,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(PaginatedSyncStatusList, _response.json()) # type: ignore
@@ -59,7 +88,11 @@ def __init__(self, *, client_wrapper: AsyncClientWrapper):
self._client_wrapper = client_wrapper
async def list(
- self, *, cursor: typing.Optional[str] = None, page_size: typing.Optional[int] = None
+ self,
+ *,
+ cursor: typing.Optional[str] = None,
+ page_size: typing.Optional[int] = None,
+ request_options: typing.Optional[RequestOptions] = None,
) -> PaginatedSyncStatusList:
"""
Get syncing status. Possible values: `DISABLED`, `DONE`, `FAILED`, `PARTIALLY_SYNCED`, `PAUSED`, `SYNCING`. Learn more about sync status in our [Help Center](https://help.merge.dev/en/articles/8184193-merge-sync-statuses).
@@ -68,6 +101,8 @@ async def list(
- cursor: typing.Optional[str]. The pagination cursor value.
- page_size: typing.Optional[int]. Number of results to return per page.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import AsyncMerge
@@ -80,9 +115,30 @@ async def list(
_response = await self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/ticketing/v1/sync-status"),
- params=remove_none_from_dict({"cursor": cursor, "page_size": page_size}),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "cursor": cursor,
+ "page_size": page_size,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(PaginatedSyncStatusList, _response.json()) # type: ignore
diff --git a/src/merge/resources/ticketing/resources/tags/client.py b/src/merge/resources/ticketing/resources/tags/client.py
index a7cf50b9..c9a975d7 100644
--- a/src/merge/resources/ticketing/resources/tags/client.py
+++ b/src/merge/resources/ticketing/resources/tags/client.py
@@ -8,7 +8,9 @@
from .....core.api_error import ApiError
from .....core.client_wrapper import AsyncClientWrapper, SyncClientWrapper
from .....core.datetime_utils import serialize_datetime
+from .....core.jsonable_encoder import jsonable_encoder
from .....core.remove_none_from_dict import remove_none_from_dict
+from .....core.request_options import RequestOptions
from ...types.paginated_tag_list import PaginatedTagList
from ...types.tag import Tag
@@ -34,6 +36,7 @@ def list(
modified_before: typing.Optional[dt.datetime] = None,
page_size: typing.Optional[int] = None,
remote_id: typing.Optional[str] = None,
+ request_options: typing.Optional[RequestOptions] = None,
) -> PaginatedTagList:
"""
Returns a list of `Tag` objects.
@@ -56,6 +59,8 @@ def list(
- page_size: typing.Optional[int]. Number of results to return per page.
- remote_id: typing.Optional[str]. The API provider's ID for the given object.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import Merge
@@ -68,21 +73,37 @@ def list(
_response = self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/ticketing/v1/tags"),
- params=remove_none_from_dict(
- {
- "created_after": serialize_datetime(created_after) if created_after is not None else None,
- "created_before": serialize_datetime(created_before) if created_before is not None else None,
- "cursor": cursor,
- "include_deleted_data": include_deleted_data,
- "include_remote_data": include_remote_data,
- "modified_after": serialize_datetime(modified_after) if modified_after is not None else None,
- "modified_before": serialize_datetime(modified_before) if modified_before is not None else None,
- "page_size": page_size,
- "remote_id": remote_id,
- }
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "created_after": serialize_datetime(created_after) if created_after is not None else None,
+ "created_before": serialize_datetime(created_before) if created_before is not None else None,
+ "cursor": cursor,
+ "include_deleted_data": include_deleted_data,
+ "include_remote_data": include_remote_data,
+ "modified_after": serialize_datetime(modified_after) if modified_after is not None else None,
+ "modified_before": serialize_datetime(modified_before) if modified_before is not None else None,
+ "page_size": page_size,
+ "remote_id": remote_id,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(PaginatedTagList, _response.json()) # type: ignore
@@ -92,7 +113,13 @@ def list(
raise ApiError(status_code=_response.status_code, body=_response.text)
raise ApiError(status_code=_response.status_code, body=_response_json)
- def retrieve(self, id: str, *, include_remote_data: typing.Optional[bool] = None) -> Tag:
+ def retrieve(
+ self,
+ id: str,
+ *,
+ include_remote_data: typing.Optional[bool] = None,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> Tag:
"""
Returns a `Tag` object with the given `id`.
@@ -100,6 +127,8 @@ def retrieve(self, id: str, *, include_remote_data: typing.Optional[bool] = None
- id: str.
- include_remote_data: typing.Optional[bool]. Whether to include the original data Merge fetched from the third-party to produce these models.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import Merge
@@ -108,15 +137,35 @@ def retrieve(self, id: str, *, include_remote_data: typing.Optional[bool] = None
api_key="YOUR_API_KEY",
)
client.ticketing.tags.retrieve(
- id="id",
+ id="string",
)
"""
_response = self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", f"api/ticketing/v1/tags/{id}"),
- params=remove_none_from_dict({"include_remote_data": include_remote_data}),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "include_remote_data": include_remote_data,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(Tag, _response.json()) # type: ignore
@@ -143,6 +192,7 @@ async def list(
modified_before: typing.Optional[dt.datetime] = None,
page_size: typing.Optional[int] = None,
remote_id: typing.Optional[str] = None,
+ request_options: typing.Optional[RequestOptions] = None,
) -> PaginatedTagList:
"""
Returns a list of `Tag` objects.
@@ -165,6 +215,8 @@ async def list(
- page_size: typing.Optional[int]. Number of results to return per page.
- remote_id: typing.Optional[str]. The API provider's ID for the given object.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import AsyncMerge
@@ -177,21 +229,37 @@ async def list(
_response = await self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/ticketing/v1/tags"),
- params=remove_none_from_dict(
- {
- "created_after": serialize_datetime(created_after) if created_after is not None else None,
- "created_before": serialize_datetime(created_before) if created_before is not None else None,
- "cursor": cursor,
- "include_deleted_data": include_deleted_data,
- "include_remote_data": include_remote_data,
- "modified_after": serialize_datetime(modified_after) if modified_after is not None else None,
- "modified_before": serialize_datetime(modified_before) if modified_before is not None else None,
- "page_size": page_size,
- "remote_id": remote_id,
- }
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "created_after": serialize_datetime(created_after) if created_after is not None else None,
+ "created_before": serialize_datetime(created_before) if created_before is not None else None,
+ "cursor": cursor,
+ "include_deleted_data": include_deleted_data,
+ "include_remote_data": include_remote_data,
+ "modified_after": serialize_datetime(modified_after) if modified_after is not None else None,
+ "modified_before": serialize_datetime(modified_before) if modified_before is not None else None,
+ "page_size": page_size,
+ "remote_id": remote_id,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(PaginatedTagList, _response.json()) # type: ignore
@@ -201,7 +269,13 @@ async def list(
raise ApiError(status_code=_response.status_code, body=_response.text)
raise ApiError(status_code=_response.status_code, body=_response_json)
- async def retrieve(self, id: str, *, include_remote_data: typing.Optional[bool] = None) -> Tag:
+ async def retrieve(
+ self,
+ id: str,
+ *,
+ include_remote_data: typing.Optional[bool] = None,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> Tag:
"""
Returns a `Tag` object with the given `id`.
@@ -209,6 +283,8 @@ async def retrieve(self, id: str, *, include_remote_data: typing.Optional[bool]
- id: str.
- include_remote_data: typing.Optional[bool]. Whether to include the original data Merge fetched from the third-party to produce these models.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import AsyncMerge
@@ -217,15 +293,35 @@ async def retrieve(self, id: str, *, include_remote_data: typing.Optional[bool]
api_key="YOUR_API_KEY",
)
await client.ticketing.tags.retrieve(
- id="id",
+ id="string",
)
"""
_response = await self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", f"api/ticketing/v1/tags/{id}"),
- params=remove_none_from_dict({"include_remote_data": include_remote_data}),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "include_remote_data": include_remote_data,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(Tag, _response.json()) # type: ignore
diff --git a/src/merge/resources/ticketing/resources/teams/client.py b/src/merge/resources/ticketing/resources/teams/client.py
index 3ef968f4..a14ee732 100644
--- a/src/merge/resources/ticketing/resources/teams/client.py
+++ b/src/merge/resources/ticketing/resources/teams/client.py
@@ -8,7 +8,9 @@
from .....core.api_error import ApiError
from .....core.client_wrapper import AsyncClientWrapper, SyncClientWrapper
from .....core.datetime_utils import serialize_datetime
+from .....core.jsonable_encoder import jsonable_encoder
from .....core.remove_none_from_dict import remove_none_from_dict
+from .....core.request_options import RequestOptions
from ...types.paginated_team_list import PaginatedTeamList
from ...types.team import Team
@@ -34,6 +36,7 @@ def list(
modified_before: typing.Optional[dt.datetime] = None,
page_size: typing.Optional[int] = None,
remote_id: typing.Optional[str] = None,
+ request_options: typing.Optional[RequestOptions] = None,
) -> PaginatedTeamList:
"""
Returns a list of `Team` objects.
@@ -56,6 +59,8 @@ def list(
- page_size: typing.Optional[int]. Number of results to return per page.
- remote_id: typing.Optional[str]. The API provider's ID for the given object.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import Merge
@@ -68,21 +73,37 @@ def list(
_response = self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/ticketing/v1/teams"),
- params=remove_none_from_dict(
- {
- "created_after": serialize_datetime(created_after) if created_after is not None else None,
- "created_before": serialize_datetime(created_before) if created_before is not None else None,
- "cursor": cursor,
- "include_deleted_data": include_deleted_data,
- "include_remote_data": include_remote_data,
- "modified_after": serialize_datetime(modified_after) if modified_after is not None else None,
- "modified_before": serialize_datetime(modified_before) if modified_before is not None else None,
- "page_size": page_size,
- "remote_id": remote_id,
- }
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "created_after": serialize_datetime(created_after) if created_after is not None else None,
+ "created_before": serialize_datetime(created_before) if created_before is not None else None,
+ "cursor": cursor,
+ "include_deleted_data": include_deleted_data,
+ "include_remote_data": include_remote_data,
+ "modified_after": serialize_datetime(modified_after) if modified_after is not None else None,
+ "modified_before": serialize_datetime(modified_before) if modified_before is not None else None,
+ "page_size": page_size,
+ "remote_id": remote_id,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(PaginatedTeamList, _response.json()) # type: ignore
@@ -92,7 +113,13 @@ def list(
raise ApiError(status_code=_response.status_code, body=_response.text)
raise ApiError(status_code=_response.status_code, body=_response_json)
- def retrieve(self, id: str, *, include_remote_data: typing.Optional[bool] = None) -> Team:
+ def retrieve(
+ self,
+ id: str,
+ *,
+ include_remote_data: typing.Optional[bool] = None,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> Team:
"""
Returns a `Team` object with the given `id`.
@@ -100,6 +127,8 @@ def retrieve(self, id: str, *, include_remote_data: typing.Optional[bool] = None
- id: str.
- include_remote_data: typing.Optional[bool]. Whether to include the original data Merge fetched from the third-party to produce these models.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import Merge
@@ -108,15 +137,35 @@ def retrieve(self, id: str, *, include_remote_data: typing.Optional[bool] = None
api_key="YOUR_API_KEY",
)
client.ticketing.teams.retrieve(
- id="id",
+ id="string",
)
"""
_response = self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", f"api/ticketing/v1/teams/{id}"),
- params=remove_none_from_dict({"include_remote_data": include_remote_data}),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "include_remote_data": include_remote_data,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(Team, _response.json()) # type: ignore
@@ -143,6 +192,7 @@ async def list(
modified_before: typing.Optional[dt.datetime] = None,
page_size: typing.Optional[int] = None,
remote_id: typing.Optional[str] = None,
+ request_options: typing.Optional[RequestOptions] = None,
) -> PaginatedTeamList:
"""
Returns a list of `Team` objects.
@@ -165,6 +215,8 @@ async def list(
- page_size: typing.Optional[int]. Number of results to return per page.
- remote_id: typing.Optional[str]. The API provider's ID for the given object.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import AsyncMerge
@@ -177,21 +229,37 @@ async def list(
_response = await self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/ticketing/v1/teams"),
- params=remove_none_from_dict(
- {
- "created_after": serialize_datetime(created_after) if created_after is not None else None,
- "created_before": serialize_datetime(created_before) if created_before is not None else None,
- "cursor": cursor,
- "include_deleted_data": include_deleted_data,
- "include_remote_data": include_remote_data,
- "modified_after": serialize_datetime(modified_after) if modified_after is not None else None,
- "modified_before": serialize_datetime(modified_before) if modified_before is not None else None,
- "page_size": page_size,
- "remote_id": remote_id,
- }
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "created_after": serialize_datetime(created_after) if created_after is not None else None,
+ "created_before": serialize_datetime(created_before) if created_before is not None else None,
+ "cursor": cursor,
+ "include_deleted_data": include_deleted_data,
+ "include_remote_data": include_remote_data,
+ "modified_after": serialize_datetime(modified_after) if modified_after is not None else None,
+ "modified_before": serialize_datetime(modified_before) if modified_before is not None else None,
+ "page_size": page_size,
+ "remote_id": remote_id,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(PaginatedTeamList, _response.json()) # type: ignore
@@ -201,7 +269,13 @@ async def list(
raise ApiError(status_code=_response.status_code, body=_response.text)
raise ApiError(status_code=_response.status_code, body=_response_json)
- async def retrieve(self, id: str, *, include_remote_data: typing.Optional[bool] = None) -> Team:
+ async def retrieve(
+ self,
+ id: str,
+ *,
+ include_remote_data: typing.Optional[bool] = None,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> Team:
"""
Returns a `Team` object with the given `id`.
@@ -209,6 +283,8 @@ async def retrieve(self, id: str, *, include_remote_data: typing.Optional[bool]
- id: str.
- include_remote_data: typing.Optional[bool]. Whether to include the original data Merge fetched from the third-party to produce these models.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import AsyncMerge
@@ -217,15 +293,35 @@ async def retrieve(self, id: str, *, include_remote_data: typing.Optional[bool]
api_key="YOUR_API_KEY",
)
await client.ticketing.teams.retrieve(
- id="id",
+ id="string",
)
"""
_response = await self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", f"api/ticketing/v1/teams/{id}"),
- params=remove_none_from_dict({"include_remote_data": include_remote_data}),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "include_remote_data": include_remote_data,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(Team, _response.json()) # type: ignore
diff --git a/src/merge/resources/ticketing/resources/tickets/client.py b/src/merge/resources/ticketing/resources/tickets/client.py
index 20a75ff8..22dfa1f5 100644
--- a/src/merge/resources/ticketing/resources/tickets/client.py
+++ b/src/merge/resources/ticketing/resources/tickets/client.py
@@ -10,6 +10,7 @@
from .....core.datetime_utils import serialize_datetime
from .....core.jsonable_encoder import jsonable_encoder
from .....core.remove_none_from_dict import remove_none_from_dict
+from .....core.request_options import RequestOptions
from ...types.meta_response import MetaResponse
from ...types.paginated_remote_field_class_list import PaginatedRemoteFieldClassList
from ...types.paginated_ticket_list import PaginatedTicketList
@@ -75,6 +76,7 @@ def list(
status: typing.Optional[TicketsListRequestStatus] = None,
tags: typing.Optional[str] = None,
ticket_type: typing.Optional[str] = None,
+ request_options: typing.Optional[RequestOptions] = None,
) -> PaginatedTicketList:
"""
Returns a list of `Ticket` objects.
@@ -149,6 +151,8 @@ def list(
- tags: typing.Optional[str]. If provided, will only return tickets matching the tags; multiple tags can be separated by commas.
- ticket_type: typing.Optional[str]. If provided, will only return tickets of this type.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import Merge
from merge.resources.ticketing import (
@@ -174,51 +178,69 @@ def list(
_response = self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/ticketing/v1/tickets"),
- params=remove_none_from_dict(
- {
- "account_id": account_id,
- "assignee_ids": assignee_ids,
- "collection_ids": collection_ids,
- "completed_after": serialize_datetime(completed_after) if completed_after is not None else None,
- "completed_before": serialize_datetime(completed_before) if completed_before is not None else None,
- "contact_id": contact_id,
- "created_after": serialize_datetime(created_after) if created_after is not None else None,
- "created_before": serialize_datetime(created_before) if created_before is not None else None,
- "cursor": cursor,
- "due_after": serialize_datetime(due_after) if due_after is not None else None,
- "due_before": serialize_datetime(due_before) if due_before is not None else None,
- "expand": expand,
- "include_deleted_data": include_deleted_data,
- "include_remote_data": include_remote_data,
- "include_remote_fields": include_remote_fields,
- "modified_after": serialize_datetime(modified_after) if modified_after is not None else None,
- "modified_before": serialize_datetime(modified_before) if modified_before is not None else None,
- "page_size": page_size,
- "parent_ticket_id": parent_ticket_id,
- "priority": priority,
- "project_id": project_id,
- "remote_created_after": serialize_datetime(remote_created_after)
- if remote_created_after is not None
- else None,
- "remote_created_before": serialize_datetime(remote_created_before)
- if remote_created_before is not None
- else None,
- "remote_fields": remote_fields,
- "remote_id": remote_id,
- "remote_updated_after": serialize_datetime(remote_updated_after)
- if remote_updated_after is not None
- else None,
- "remote_updated_before": serialize_datetime(remote_updated_before)
- if remote_updated_before is not None
- else None,
- "show_enum_origins": show_enum_origins,
- "status": status,
- "tags": tags,
- "ticket_type": ticket_type,
- }
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "account_id": account_id,
+ "assignee_ids": assignee_ids,
+ "collection_ids": collection_ids,
+ "completed_after": serialize_datetime(completed_after) if completed_after is not None else None,
+ "completed_before": serialize_datetime(completed_before)
+ if completed_before is not None
+ else None,
+ "contact_id": contact_id,
+ "created_after": serialize_datetime(created_after) if created_after is not None else None,
+ "created_before": serialize_datetime(created_before) if created_before is not None else None,
+ "cursor": cursor,
+ "due_after": serialize_datetime(due_after) if due_after is not None else None,
+ "due_before": serialize_datetime(due_before) if due_before is not None else None,
+ "expand": expand,
+ "include_deleted_data": include_deleted_data,
+ "include_remote_data": include_remote_data,
+ "include_remote_fields": include_remote_fields,
+ "modified_after": serialize_datetime(modified_after) if modified_after is not None else None,
+ "modified_before": serialize_datetime(modified_before) if modified_before is not None else None,
+ "page_size": page_size,
+ "parent_ticket_id": parent_ticket_id,
+ "priority": priority,
+ "project_id": project_id,
+ "remote_created_after": serialize_datetime(remote_created_after)
+ if remote_created_after is not None
+ else None,
+ "remote_created_before": serialize_datetime(remote_created_before)
+ if remote_created_before is not None
+ else None,
+ "remote_fields": remote_fields,
+ "remote_id": remote_id,
+ "remote_updated_after": serialize_datetime(remote_updated_after)
+ if remote_updated_after is not None
+ else None,
+ "remote_updated_before": serialize_datetime(remote_updated_before)
+ if remote_updated_before is not None
+ else None,
+ "show_enum_origins": show_enum_origins,
+ "status": status,
+ "tags": tags,
+ "ticket_type": ticket_type,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(PaginatedTicketList, _response.json()) # type: ignore
@@ -234,6 +256,7 @@ def create(
is_debug_mode: typing.Optional[bool] = None,
run_async: typing.Optional[bool] = None,
model: TicketRequest,
+ request_options: typing.Optional[RequestOptions] = None,
) -> TicketResponse:
"""
Creates a `Ticket` object with the given values.
@@ -244,6 +267,8 @@ def create(
- run_async: typing.Optional[bool]. Whether or not third-party updates should be run asynchronously.
- model: TicketRequest.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
import datetime
@@ -272,10 +297,36 @@ def create(
_response = self._client_wrapper.httpx_client.request(
"POST",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/ticketing/v1/tickets"),
- params=remove_none_from_dict({"is_debug_mode": is_debug_mode, "run_async": run_async}),
- json=jsonable_encoder({"model": model}),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "is_debug_mode": is_debug_mode,
+ "run_async": run_async,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ json=jsonable_encoder({"model": model})
+ if request_options is None or request_options.get("additional_body_parameters") is None
+ else {
+ **jsonable_encoder({"model": model}),
+ **(jsonable_encoder(remove_none_from_dict(request_options.get("additional_body_parameters", {})))),
+ },
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(TicketResponse, _response.json()) # type: ignore
@@ -294,6 +345,7 @@ def retrieve(
include_remote_fields: typing.Optional[bool] = None,
remote_fields: typing.Optional[TicketsRetrieveRequestRemoteFields] = None,
show_enum_origins: typing.Optional[TicketsRetrieveRequestShowEnumOrigins] = None,
+ request_options: typing.Optional[RequestOptions] = None,
) -> Ticket:
"""
Returns a `Ticket` object with the given `id`.
@@ -310,6 +362,8 @@ def retrieve(
- remote_fields: typing.Optional[TicketsRetrieveRequestRemoteFields]. Deprecated. Use show_enum_origins.
- show_enum_origins: typing.Optional[TicketsRetrieveRequestShowEnumOrigins]. Which fields should be returned in non-normalized form.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import Merge
from merge.resources.ticketing import (
@@ -323,7 +377,7 @@ def retrieve(
api_key="YOUR_API_KEY",
)
client.ticketing.tickets.retrieve(
- id="id",
+ id="string",
expand=TicketsRetrieveRequestExpand.ACCOUNT,
remote_fields=TicketsRetrieveRequestRemoteFields.PRIORITY,
show_enum_origins=TicketsRetrieveRequestShowEnumOrigins.PRIORITY,
@@ -332,17 +386,33 @@ def retrieve(
_response = self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", f"api/ticketing/v1/tickets/{id}"),
- params=remove_none_from_dict(
- {
- "expand": expand,
- "include_remote_data": include_remote_data,
- "include_remote_fields": include_remote_fields,
- "remote_fields": remote_fields,
- "show_enum_origins": show_enum_origins,
- }
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "expand": expand,
+ "include_remote_data": include_remote_data,
+ "include_remote_fields": include_remote_fields,
+ "remote_fields": remote_fields,
+ "show_enum_origins": show_enum_origins,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(Ticket, _response.json()) # type: ignore
@@ -359,6 +429,7 @@ def partial_update(
is_debug_mode: typing.Optional[bool] = None,
run_async: typing.Optional[bool] = None,
model: PatchedTicketRequest,
+ request_options: typing.Optional[RequestOptions] = None,
) -> TicketResponse:
"""
Updates a `Ticket` object with the given `id`.
@@ -371,6 +442,8 @@ def partial_update(
- run_async: typing.Optional[bool]. Whether or not third-party updates should be run asynchronously.
- model: PatchedTicketRequest.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
import datetime
@@ -382,7 +455,7 @@ def partial_update(
api_key="YOUR_API_KEY",
)
client.ticketing.tickets.partial_update(
- id="id",
+ id="string",
model=PatchedTicketRequest(
name="Please add more integrations",
due_date=datetime.datetime.fromisoformat(
@@ -403,10 +476,36 @@ def partial_update(
_response = self._client_wrapper.httpx_client.request(
"PATCH",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", f"api/ticketing/v1/tickets/{id}"),
- params=remove_none_from_dict({"is_debug_mode": is_debug_mode, "run_async": run_async}),
- json=jsonable_encoder({"model": model}),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "is_debug_mode": is_debug_mode,
+ "run_async": run_async,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ json=jsonable_encoder({"model": model})
+ if request_options is None or request_options.get("additional_body_parameters") is None
+ else {
+ **jsonable_encoder({"model": model}),
+ **(jsonable_encoder(remove_none_from_dict(request_options.get("additional_body_parameters", {})))),
+ },
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(TicketResponse, _response.json()) # type: ignore
@@ -425,6 +524,7 @@ def collaborators_list(
include_deleted_data: typing.Optional[bool] = None,
include_remote_data: typing.Optional[bool] = None,
page_size: typing.Optional[int] = None,
+ request_options: typing.Optional[RequestOptions] = None,
) -> PaginatedUserList:
"""
Returns a list of `User` objects.
@@ -441,6 +541,8 @@ def collaborators_list(
- include_remote_data: typing.Optional[bool]. Whether to include the original data Merge fetched from the third-party to produce these models.
- page_size: typing.Optional[int]. Number of results to return per page.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import Merge
from merge.resources.ticketing import TicketsCollaboratorsListRequestExpand
@@ -450,7 +552,7 @@ def collaborators_list(
api_key="YOUR_API_KEY",
)
client.ticketing.tickets.collaborators_list(
- parent_id="parent-id",
+ parent_id="string",
expand=TicketsCollaboratorsListRequestExpand.ROLES,
)
"""
@@ -459,17 +561,33 @@ def collaborators_list(
urllib.parse.urljoin(
f"{self._client_wrapper.get_base_url()}/", f"api/ticketing/v1/tickets/{parent_id}/collaborators"
),
- params=remove_none_from_dict(
- {
- "cursor": cursor,
- "expand": expand,
- "include_deleted_data": include_deleted_data,
- "include_remote_data": include_remote_data,
- "page_size": page_size,
- }
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "cursor": cursor,
+ "expand": expand,
+ "include_deleted_data": include_deleted_data,
+ "include_remote_data": include_remote_data,
+ "page_size": page_size,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(PaginatedUserList, _response.json()) # type: ignore
@@ -479,12 +597,14 @@ def collaborators_list(
raise ApiError(status_code=_response.status_code, body=_response.text)
raise ApiError(status_code=_response.status_code, body=_response_json)
- def meta_patch_retrieve(self, id: str) -> MetaResponse:
+ def meta_patch_retrieve(self, id: str, *, request_options: typing.Optional[RequestOptions] = None) -> MetaResponse:
"""
Returns metadata for `Ticket` PATCHs.
Parameters:
- id: str.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import Merge
@@ -493,7 +613,7 @@ def meta_patch_retrieve(self, id: str) -> MetaResponse:
api_key="YOUR_API_KEY",
)
client.ticketing.tickets.meta_patch_retrieve(
- id="id",
+ id="string",
)
"""
_response = self._client_wrapper.httpx_client.request(
@@ -501,8 +621,20 @@ def meta_patch_retrieve(self, id: str) -> MetaResponse:
urllib.parse.urljoin(
f"{self._client_wrapper.get_base_url()}/", f"api/ticketing/v1/tickets/meta/patch/{id}"
),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ request_options.get("additional_query_parameters") if request_options is not None else None
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(MetaResponse, _response.json()) # type: ignore
@@ -512,10 +644,12 @@ def meta_patch_retrieve(self, id: str) -> MetaResponse:
raise ApiError(status_code=_response.status_code, body=_response.text)
raise ApiError(status_code=_response.status_code, body=_response_json)
- def meta_post_retrieve(self) -> MetaResponse:
+ def meta_post_retrieve(self, *, request_options: typing.Optional[RequestOptions] = None) -> MetaResponse:
"""
Returns metadata for `Ticket` POSTs.
+ Parameters:
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import Merge
@@ -528,8 +662,20 @@ def meta_post_retrieve(self) -> MetaResponse:
_response = self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/ticketing/v1/tickets/meta/post"),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ request_options.get("additional_query_parameters") if request_options is not None else None
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(MetaResponse, _response.json()) # type: ignore
@@ -546,6 +692,7 @@ def remote_field_classes_list(
include_deleted_data: typing.Optional[bool] = None,
include_remote_data: typing.Optional[bool] = None,
page_size: typing.Optional[int] = None,
+ request_options: typing.Optional[RequestOptions] = None,
) -> PaginatedRemoteFieldClassList:
"""
Returns a list of `RemoteFieldClass` objects.
@@ -558,6 +705,8 @@ def remote_field_classes_list(
- include_remote_data: typing.Optional[bool]. Whether to include the original data Merge fetched from the third-party to produce these models.
- page_size: typing.Optional[int]. Number of results to return per page.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import Merge
@@ -572,16 +721,32 @@ def remote_field_classes_list(
urllib.parse.urljoin(
f"{self._client_wrapper.get_base_url()}/", "api/ticketing/v1/tickets/remote-field-classes"
),
- params=remove_none_from_dict(
- {
- "cursor": cursor,
- "include_deleted_data": include_deleted_data,
- "include_remote_data": include_remote_data,
- "page_size": page_size,
- }
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "cursor": cursor,
+ "include_deleted_data": include_deleted_data,
+ "include_remote_data": include_remote_data,
+ "page_size": page_size,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(PaginatedRemoteFieldClassList, _response.json()) # type: ignore
@@ -630,6 +795,7 @@ async def list(
status: typing.Optional[TicketsListRequestStatus] = None,
tags: typing.Optional[str] = None,
ticket_type: typing.Optional[str] = None,
+ request_options: typing.Optional[RequestOptions] = None,
) -> PaginatedTicketList:
"""
Returns a list of `Ticket` objects.
@@ -704,6 +870,8 @@ async def list(
- tags: typing.Optional[str]. If provided, will only return tickets matching the tags; multiple tags can be separated by commas.
- ticket_type: typing.Optional[str]. If provided, will only return tickets of this type.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import AsyncMerge
from merge.resources.ticketing import (
@@ -729,51 +897,69 @@ async def list(
_response = await self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/ticketing/v1/tickets"),
- params=remove_none_from_dict(
- {
- "account_id": account_id,
- "assignee_ids": assignee_ids,
- "collection_ids": collection_ids,
- "completed_after": serialize_datetime(completed_after) if completed_after is not None else None,
- "completed_before": serialize_datetime(completed_before) if completed_before is not None else None,
- "contact_id": contact_id,
- "created_after": serialize_datetime(created_after) if created_after is not None else None,
- "created_before": serialize_datetime(created_before) if created_before is not None else None,
- "cursor": cursor,
- "due_after": serialize_datetime(due_after) if due_after is not None else None,
- "due_before": serialize_datetime(due_before) if due_before is not None else None,
- "expand": expand,
- "include_deleted_data": include_deleted_data,
- "include_remote_data": include_remote_data,
- "include_remote_fields": include_remote_fields,
- "modified_after": serialize_datetime(modified_after) if modified_after is not None else None,
- "modified_before": serialize_datetime(modified_before) if modified_before is not None else None,
- "page_size": page_size,
- "parent_ticket_id": parent_ticket_id,
- "priority": priority,
- "project_id": project_id,
- "remote_created_after": serialize_datetime(remote_created_after)
- if remote_created_after is not None
- else None,
- "remote_created_before": serialize_datetime(remote_created_before)
- if remote_created_before is not None
- else None,
- "remote_fields": remote_fields,
- "remote_id": remote_id,
- "remote_updated_after": serialize_datetime(remote_updated_after)
- if remote_updated_after is not None
- else None,
- "remote_updated_before": serialize_datetime(remote_updated_before)
- if remote_updated_before is not None
- else None,
- "show_enum_origins": show_enum_origins,
- "status": status,
- "tags": tags,
- "ticket_type": ticket_type,
- }
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "account_id": account_id,
+ "assignee_ids": assignee_ids,
+ "collection_ids": collection_ids,
+ "completed_after": serialize_datetime(completed_after) if completed_after is not None else None,
+ "completed_before": serialize_datetime(completed_before)
+ if completed_before is not None
+ else None,
+ "contact_id": contact_id,
+ "created_after": serialize_datetime(created_after) if created_after is not None else None,
+ "created_before": serialize_datetime(created_before) if created_before is not None else None,
+ "cursor": cursor,
+ "due_after": serialize_datetime(due_after) if due_after is not None else None,
+ "due_before": serialize_datetime(due_before) if due_before is not None else None,
+ "expand": expand,
+ "include_deleted_data": include_deleted_data,
+ "include_remote_data": include_remote_data,
+ "include_remote_fields": include_remote_fields,
+ "modified_after": serialize_datetime(modified_after) if modified_after is not None else None,
+ "modified_before": serialize_datetime(modified_before) if modified_before is not None else None,
+ "page_size": page_size,
+ "parent_ticket_id": parent_ticket_id,
+ "priority": priority,
+ "project_id": project_id,
+ "remote_created_after": serialize_datetime(remote_created_after)
+ if remote_created_after is not None
+ else None,
+ "remote_created_before": serialize_datetime(remote_created_before)
+ if remote_created_before is not None
+ else None,
+ "remote_fields": remote_fields,
+ "remote_id": remote_id,
+ "remote_updated_after": serialize_datetime(remote_updated_after)
+ if remote_updated_after is not None
+ else None,
+ "remote_updated_before": serialize_datetime(remote_updated_before)
+ if remote_updated_before is not None
+ else None,
+ "show_enum_origins": show_enum_origins,
+ "status": status,
+ "tags": tags,
+ "ticket_type": ticket_type,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(PaginatedTicketList, _response.json()) # type: ignore
@@ -789,6 +975,7 @@ async def create(
is_debug_mode: typing.Optional[bool] = None,
run_async: typing.Optional[bool] = None,
model: TicketRequest,
+ request_options: typing.Optional[RequestOptions] = None,
) -> TicketResponse:
"""
Creates a `Ticket` object with the given values.
@@ -799,6 +986,8 @@ async def create(
- run_async: typing.Optional[bool]. Whether or not third-party updates should be run asynchronously.
- model: TicketRequest.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
import datetime
@@ -827,10 +1016,36 @@ async def create(
_response = await self._client_wrapper.httpx_client.request(
"POST",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/ticketing/v1/tickets"),
- params=remove_none_from_dict({"is_debug_mode": is_debug_mode, "run_async": run_async}),
- json=jsonable_encoder({"model": model}),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "is_debug_mode": is_debug_mode,
+ "run_async": run_async,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ json=jsonable_encoder({"model": model})
+ if request_options is None or request_options.get("additional_body_parameters") is None
+ else {
+ **jsonable_encoder({"model": model}),
+ **(jsonable_encoder(remove_none_from_dict(request_options.get("additional_body_parameters", {})))),
+ },
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(TicketResponse, _response.json()) # type: ignore
@@ -849,6 +1064,7 @@ async def retrieve(
include_remote_fields: typing.Optional[bool] = None,
remote_fields: typing.Optional[TicketsRetrieveRequestRemoteFields] = None,
show_enum_origins: typing.Optional[TicketsRetrieveRequestShowEnumOrigins] = None,
+ request_options: typing.Optional[RequestOptions] = None,
) -> Ticket:
"""
Returns a `Ticket` object with the given `id`.
@@ -865,6 +1081,8 @@ async def retrieve(
- remote_fields: typing.Optional[TicketsRetrieveRequestRemoteFields]. Deprecated. Use show_enum_origins.
- show_enum_origins: typing.Optional[TicketsRetrieveRequestShowEnumOrigins]. Which fields should be returned in non-normalized form.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import AsyncMerge
from merge.resources.ticketing import (
@@ -878,7 +1096,7 @@ async def retrieve(
api_key="YOUR_API_KEY",
)
await client.ticketing.tickets.retrieve(
- id="id",
+ id="string",
expand=TicketsRetrieveRequestExpand.ACCOUNT,
remote_fields=TicketsRetrieveRequestRemoteFields.PRIORITY,
show_enum_origins=TicketsRetrieveRequestShowEnumOrigins.PRIORITY,
@@ -887,17 +1105,33 @@ async def retrieve(
_response = await self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", f"api/ticketing/v1/tickets/{id}"),
- params=remove_none_from_dict(
- {
- "expand": expand,
- "include_remote_data": include_remote_data,
- "include_remote_fields": include_remote_fields,
- "remote_fields": remote_fields,
- "show_enum_origins": show_enum_origins,
- }
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "expand": expand,
+ "include_remote_data": include_remote_data,
+ "include_remote_fields": include_remote_fields,
+ "remote_fields": remote_fields,
+ "show_enum_origins": show_enum_origins,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(Ticket, _response.json()) # type: ignore
@@ -914,6 +1148,7 @@ async def partial_update(
is_debug_mode: typing.Optional[bool] = None,
run_async: typing.Optional[bool] = None,
model: PatchedTicketRequest,
+ request_options: typing.Optional[RequestOptions] = None,
) -> TicketResponse:
"""
Updates a `Ticket` object with the given `id`.
@@ -926,6 +1161,8 @@ async def partial_update(
- run_async: typing.Optional[bool]. Whether or not third-party updates should be run asynchronously.
- model: PatchedTicketRequest.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
import datetime
@@ -937,7 +1174,7 @@ async def partial_update(
api_key="YOUR_API_KEY",
)
await client.ticketing.tickets.partial_update(
- id="id",
+ id="string",
model=PatchedTicketRequest(
name="Please add more integrations",
due_date=datetime.datetime.fromisoformat(
@@ -958,10 +1195,36 @@ async def partial_update(
_response = await self._client_wrapper.httpx_client.request(
"PATCH",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", f"api/ticketing/v1/tickets/{id}"),
- params=remove_none_from_dict({"is_debug_mode": is_debug_mode, "run_async": run_async}),
- json=jsonable_encoder({"model": model}),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "is_debug_mode": is_debug_mode,
+ "run_async": run_async,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ json=jsonable_encoder({"model": model})
+ if request_options is None or request_options.get("additional_body_parameters") is None
+ else {
+ **jsonable_encoder({"model": model}),
+ **(jsonable_encoder(remove_none_from_dict(request_options.get("additional_body_parameters", {})))),
+ },
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(TicketResponse, _response.json()) # type: ignore
@@ -980,6 +1243,7 @@ async def collaborators_list(
include_deleted_data: typing.Optional[bool] = None,
include_remote_data: typing.Optional[bool] = None,
page_size: typing.Optional[int] = None,
+ request_options: typing.Optional[RequestOptions] = None,
) -> PaginatedUserList:
"""
Returns a list of `User` objects.
@@ -996,6 +1260,8 @@ async def collaborators_list(
- include_remote_data: typing.Optional[bool]. Whether to include the original data Merge fetched from the third-party to produce these models.
- page_size: typing.Optional[int]. Number of results to return per page.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import AsyncMerge
from merge.resources.ticketing import TicketsCollaboratorsListRequestExpand
@@ -1005,7 +1271,7 @@ async def collaborators_list(
api_key="YOUR_API_KEY",
)
await client.ticketing.tickets.collaborators_list(
- parent_id="parent-id",
+ parent_id="string",
expand=TicketsCollaboratorsListRequestExpand.ROLES,
)
"""
@@ -1014,17 +1280,33 @@ async def collaborators_list(
urllib.parse.urljoin(
f"{self._client_wrapper.get_base_url()}/", f"api/ticketing/v1/tickets/{parent_id}/collaborators"
),
- params=remove_none_from_dict(
- {
- "cursor": cursor,
- "expand": expand,
- "include_deleted_data": include_deleted_data,
- "include_remote_data": include_remote_data,
- "page_size": page_size,
- }
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "cursor": cursor,
+ "expand": expand,
+ "include_deleted_data": include_deleted_data,
+ "include_remote_data": include_remote_data,
+ "page_size": page_size,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(PaginatedUserList, _response.json()) # type: ignore
@@ -1034,12 +1316,16 @@ async def collaborators_list(
raise ApiError(status_code=_response.status_code, body=_response.text)
raise ApiError(status_code=_response.status_code, body=_response_json)
- async def meta_patch_retrieve(self, id: str) -> MetaResponse:
+ async def meta_patch_retrieve(
+ self, id: str, *, request_options: typing.Optional[RequestOptions] = None
+ ) -> MetaResponse:
"""
Returns metadata for `Ticket` PATCHs.
Parameters:
- id: str.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import AsyncMerge
@@ -1048,7 +1334,7 @@ async def meta_patch_retrieve(self, id: str) -> MetaResponse:
api_key="YOUR_API_KEY",
)
await client.ticketing.tickets.meta_patch_retrieve(
- id="id",
+ id="string",
)
"""
_response = await self._client_wrapper.httpx_client.request(
@@ -1056,8 +1342,20 @@ async def meta_patch_retrieve(self, id: str) -> MetaResponse:
urllib.parse.urljoin(
f"{self._client_wrapper.get_base_url()}/", f"api/ticketing/v1/tickets/meta/patch/{id}"
),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ request_options.get("additional_query_parameters") if request_options is not None else None
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(MetaResponse, _response.json()) # type: ignore
@@ -1067,10 +1365,12 @@ async def meta_patch_retrieve(self, id: str) -> MetaResponse:
raise ApiError(status_code=_response.status_code, body=_response.text)
raise ApiError(status_code=_response.status_code, body=_response_json)
- async def meta_post_retrieve(self) -> MetaResponse:
+ async def meta_post_retrieve(self, *, request_options: typing.Optional[RequestOptions] = None) -> MetaResponse:
"""
Returns metadata for `Ticket` POSTs.
+ Parameters:
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import AsyncMerge
@@ -1083,8 +1383,20 @@ async def meta_post_retrieve(self) -> MetaResponse:
_response = await self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/ticketing/v1/tickets/meta/post"),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ request_options.get("additional_query_parameters") if request_options is not None else None
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(MetaResponse, _response.json()) # type: ignore
@@ -1101,6 +1413,7 @@ async def remote_field_classes_list(
include_deleted_data: typing.Optional[bool] = None,
include_remote_data: typing.Optional[bool] = None,
page_size: typing.Optional[int] = None,
+ request_options: typing.Optional[RequestOptions] = None,
) -> PaginatedRemoteFieldClassList:
"""
Returns a list of `RemoteFieldClass` objects.
@@ -1113,6 +1426,8 @@ async def remote_field_classes_list(
- include_remote_data: typing.Optional[bool]. Whether to include the original data Merge fetched from the third-party to produce these models.
- page_size: typing.Optional[int]. Number of results to return per page.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import AsyncMerge
@@ -1127,16 +1442,32 @@ async def remote_field_classes_list(
urllib.parse.urljoin(
f"{self._client_wrapper.get_base_url()}/", "api/ticketing/v1/tickets/remote-field-classes"
),
- params=remove_none_from_dict(
- {
- "cursor": cursor,
- "include_deleted_data": include_deleted_data,
- "include_remote_data": include_remote_data,
- "page_size": page_size,
- }
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "cursor": cursor,
+ "include_deleted_data": include_deleted_data,
+ "include_remote_data": include_remote_data,
+ "page_size": page_size,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(PaginatedRemoteFieldClassList, _response.json()) # type: ignore
diff --git a/src/merge/resources/ticketing/resources/users/client.py b/src/merge/resources/ticketing/resources/users/client.py
index 2aada68f..8f2d02a3 100644
--- a/src/merge/resources/ticketing/resources/users/client.py
+++ b/src/merge/resources/ticketing/resources/users/client.py
@@ -8,7 +8,9 @@
from .....core.api_error import ApiError
from .....core.client_wrapper import AsyncClientWrapper, SyncClientWrapper
from .....core.datetime_utils import serialize_datetime
+from .....core.jsonable_encoder import jsonable_encoder
from .....core.remove_none_from_dict import remove_none_from_dict
+from .....core.request_options import RequestOptions
from ...types.paginated_user_list import PaginatedUserList
from ...types.user import User
from .types.users_list_request_expand import UsersListRequestExpand
@@ -38,6 +40,7 @@ def list(
modified_before: typing.Optional[dt.datetime] = None,
page_size: typing.Optional[int] = None,
remote_id: typing.Optional[str] = None,
+ request_options: typing.Optional[RequestOptions] = None,
) -> PaginatedUserList:
"""
Returns a list of `User` objects.
@@ -64,6 +67,8 @@ def list(
- page_size: typing.Optional[int]. Number of results to return per page.
- remote_id: typing.Optional[str]. The API provider's ID for the given object.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import Merge
from merge.resources.ticketing import UsersListRequestExpand
@@ -79,23 +84,39 @@ def list(
_response = self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/ticketing/v1/users"),
- params=remove_none_from_dict(
- {
- "created_after": serialize_datetime(created_after) if created_after is not None else None,
- "created_before": serialize_datetime(created_before) if created_before is not None else None,
- "cursor": cursor,
- "email_address": email_address,
- "expand": expand,
- "include_deleted_data": include_deleted_data,
- "include_remote_data": include_remote_data,
- "modified_after": serialize_datetime(modified_after) if modified_after is not None else None,
- "modified_before": serialize_datetime(modified_before) if modified_before is not None else None,
- "page_size": page_size,
- "remote_id": remote_id,
- }
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "created_after": serialize_datetime(created_after) if created_after is not None else None,
+ "created_before": serialize_datetime(created_before) if created_before is not None else None,
+ "cursor": cursor,
+ "email_address": email_address,
+ "expand": expand,
+ "include_deleted_data": include_deleted_data,
+ "include_remote_data": include_remote_data,
+ "modified_after": serialize_datetime(modified_after) if modified_after is not None else None,
+ "modified_before": serialize_datetime(modified_before) if modified_before is not None else None,
+ "page_size": page_size,
+ "remote_id": remote_id,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(PaginatedUserList, _response.json()) # type: ignore
@@ -111,6 +132,7 @@ def retrieve(
*,
expand: typing.Optional[UsersRetrieveRequestExpand] = None,
include_remote_data: typing.Optional[bool] = None,
+ request_options: typing.Optional[RequestOptions] = None,
) -> User:
"""
Returns a `User` object with the given `id`.
@@ -121,6 +143,8 @@ def retrieve(
- expand: typing.Optional[UsersRetrieveRequestExpand]. Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces.
- include_remote_data: typing.Optional[bool]. Whether to include the original data Merge fetched from the third-party to produce these models.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import Merge
from merge.resources.ticketing import UsersRetrieveRequestExpand
@@ -130,16 +154,37 @@ def retrieve(
api_key="YOUR_API_KEY",
)
client.ticketing.users.retrieve(
- id="id",
+ id="string",
expand=UsersRetrieveRequestExpand.ROLES,
)
"""
_response = self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", f"api/ticketing/v1/users/{id}"),
- params=remove_none_from_dict({"expand": expand, "include_remote_data": include_remote_data}),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "expand": expand,
+ "include_remote_data": include_remote_data,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(User, _response.json()) # type: ignore
@@ -168,6 +213,7 @@ async def list(
modified_before: typing.Optional[dt.datetime] = None,
page_size: typing.Optional[int] = None,
remote_id: typing.Optional[str] = None,
+ request_options: typing.Optional[RequestOptions] = None,
) -> PaginatedUserList:
"""
Returns a list of `User` objects.
@@ -194,6 +240,8 @@ async def list(
- page_size: typing.Optional[int]. Number of results to return per page.
- remote_id: typing.Optional[str]. The API provider's ID for the given object.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import AsyncMerge
from merge.resources.ticketing import UsersListRequestExpand
@@ -209,23 +257,39 @@ async def list(
_response = await self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/ticketing/v1/users"),
- params=remove_none_from_dict(
- {
- "created_after": serialize_datetime(created_after) if created_after is not None else None,
- "created_before": serialize_datetime(created_before) if created_before is not None else None,
- "cursor": cursor,
- "email_address": email_address,
- "expand": expand,
- "include_deleted_data": include_deleted_data,
- "include_remote_data": include_remote_data,
- "modified_after": serialize_datetime(modified_after) if modified_after is not None else None,
- "modified_before": serialize_datetime(modified_before) if modified_before is not None else None,
- "page_size": page_size,
- "remote_id": remote_id,
- }
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "created_after": serialize_datetime(created_after) if created_after is not None else None,
+ "created_before": serialize_datetime(created_before) if created_before is not None else None,
+ "cursor": cursor,
+ "email_address": email_address,
+ "expand": expand,
+ "include_deleted_data": include_deleted_data,
+ "include_remote_data": include_remote_data,
+ "modified_after": serialize_datetime(modified_after) if modified_after is not None else None,
+ "modified_before": serialize_datetime(modified_before) if modified_before is not None else None,
+ "page_size": page_size,
+ "remote_id": remote_id,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(PaginatedUserList, _response.json()) # type: ignore
@@ -241,6 +305,7 @@ async def retrieve(
*,
expand: typing.Optional[UsersRetrieveRequestExpand] = None,
include_remote_data: typing.Optional[bool] = None,
+ request_options: typing.Optional[RequestOptions] = None,
) -> User:
"""
Returns a `User` object with the given `id`.
@@ -251,6 +316,8 @@ async def retrieve(
- expand: typing.Optional[UsersRetrieveRequestExpand]. Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces.
- include_remote_data: typing.Optional[bool]. Whether to include the original data Merge fetched from the third-party to produce these models.
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import AsyncMerge
from merge.resources.ticketing import UsersRetrieveRequestExpand
@@ -260,16 +327,37 @@ async def retrieve(
api_key="YOUR_API_KEY",
)
await client.ticketing.users.retrieve(
- id="id",
+ id="string",
expand=UsersRetrieveRequestExpand.ROLES,
)
"""
_response = await self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", f"api/ticketing/v1/users/{id}"),
- params=remove_none_from_dict({"expand": expand, "include_remote_data": include_remote_data}),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ "expand": expand,
+ "include_remote_data": include_remote_data,
+ **(
+ request_options.get("additional_query_parameters", {})
+ if request_options is not None
+ else {}
+ ),
+ }
+ )
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(User, _response.json()) # type: ignore
diff --git a/src/merge/resources/ticketing/resources/webhook_receivers/client.py b/src/merge/resources/ticketing/resources/webhook_receivers/client.py
index cc68fe1a..d80343bd 100644
--- a/src/merge/resources/ticketing/resources/webhook_receivers/client.py
+++ b/src/merge/resources/ticketing/resources/webhook_receivers/client.py
@@ -7,6 +7,8 @@
from .....core.api_error import ApiError
from .....core.client_wrapper import AsyncClientWrapper, SyncClientWrapper
from .....core.jsonable_encoder import jsonable_encoder
+from .....core.remove_none_from_dict import remove_none_from_dict
+from .....core.request_options import RequestOptions
from ...types.webhook_receiver import WebhookReceiver
try:
@@ -22,10 +24,12 @@ class WebhookReceiversClient:
def __init__(self, *, client_wrapper: SyncClientWrapper):
self._client_wrapper = client_wrapper
- def list(self) -> typing.List[WebhookReceiver]:
+ def list(self, *, request_options: typing.Optional[RequestOptions] = None) -> typing.List[WebhookReceiver]:
"""
Returns a list of `WebhookReceiver` objects.
+ Parameters:
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import Merge
@@ -38,8 +42,20 @@ def list(self) -> typing.List[WebhookReceiver]:
_response = self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/ticketing/v1/webhook-receivers"),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ request_options.get("additional_query_parameters") if request_options is not None else None
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(typing.List[WebhookReceiver], _response.json()) # type: ignore
@@ -49,7 +65,14 @@ def list(self) -> typing.List[WebhookReceiver]:
raise ApiError(status_code=_response.status_code, body=_response.text)
raise ApiError(status_code=_response.status_code, body=_response_json)
- def create(self, *, event: str, is_active: bool, key: typing.Optional[str] = OMIT) -> WebhookReceiver:
+ def create(
+ self,
+ *,
+ event: str,
+ is_active: bool,
+ key: typing.Optional[str] = OMIT,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> WebhookReceiver:
"""
Creates a `WebhookReceiver` object with the given values.
@@ -59,6 +82,19 @@ def create(self, *, event: str, is_active: bool, key: typing.Optional[str] = OMI
- is_active: bool.
- key: typing.Optional[str].
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
+ ---
+ from merge.client import Merge
+
+ client = Merge(
+ account_token="YOUR_ACCOUNT_TOKEN",
+ api_key="YOUR_API_KEY",
+ )
+ client.ticketing.webhook_receivers.create(
+ event="string",
+ is_active=True,
+ )
"""
_request: typing.Dict[str, typing.Any] = {"event": event, "is_active": is_active}
if key is not OMIT:
@@ -66,9 +102,26 @@ def create(self, *, event: str, is_active: bool, key: typing.Optional[str] = OMI
_response = self._client_wrapper.httpx_client.request(
"POST",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/ticketing/v1/webhook-receivers"),
- json=jsonable_encoder(_request),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ request_options.get("additional_query_parameters") if request_options is not None else None
+ ),
+ json=jsonable_encoder(_request)
+ if request_options is None or request_options.get("additional_body_parameters") is None
+ else {
+ **jsonable_encoder(_request),
+ **(jsonable_encoder(remove_none_from_dict(request_options.get("additional_body_parameters", {})))),
+ },
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(WebhookReceiver, _response.json()) # type: ignore
@@ -83,10 +136,12 @@ class AsyncWebhookReceiversClient:
def __init__(self, *, client_wrapper: AsyncClientWrapper):
self._client_wrapper = client_wrapper
- async def list(self) -> typing.List[WebhookReceiver]:
+ async def list(self, *, request_options: typing.Optional[RequestOptions] = None) -> typing.List[WebhookReceiver]:
"""
Returns a list of `WebhookReceiver` objects.
+ Parameters:
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
---
from merge.client import AsyncMerge
@@ -99,8 +154,20 @@ async def list(self) -> typing.List[WebhookReceiver]:
_response = await self._client_wrapper.httpx_client.request(
"GET",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/ticketing/v1/webhook-receivers"),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ request_options.get("additional_query_parameters") if request_options is not None else None
+ ),
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(typing.List[WebhookReceiver], _response.json()) # type: ignore
@@ -110,7 +177,14 @@ async def list(self) -> typing.List[WebhookReceiver]:
raise ApiError(status_code=_response.status_code, body=_response.text)
raise ApiError(status_code=_response.status_code, body=_response_json)
- async def create(self, *, event: str, is_active: bool, key: typing.Optional[str] = OMIT) -> WebhookReceiver:
+ async def create(
+ self,
+ *,
+ event: str,
+ is_active: bool,
+ key: typing.Optional[str] = OMIT,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> WebhookReceiver:
"""
Creates a `WebhookReceiver` object with the given values.
@@ -120,6 +194,19 @@ async def create(self, *, event: str, is_active: bool, key: typing.Optional[str]
- is_active: bool.
- key: typing.Optional[str].
+
+ - request_options: typing.Optional[RequestOptions]. Request-specific configuration.
+ ---
+ from merge.client import AsyncMerge
+
+ client = AsyncMerge(
+ account_token="YOUR_ACCOUNT_TOKEN",
+ api_key="YOUR_API_KEY",
+ )
+ await client.ticketing.webhook_receivers.create(
+ event="string",
+ is_active=True,
+ )
"""
_request: typing.Dict[str, typing.Any] = {"event": event, "is_active": is_active}
if key is not OMIT:
@@ -127,9 +214,26 @@ async def create(self, *, event: str, is_active: bool, key: typing.Optional[str]
_response = await self._client_wrapper.httpx_client.request(
"POST",
urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "api/ticketing/v1/webhook-receivers"),
- json=jsonable_encoder(_request),
- headers=self._client_wrapper.get_headers(),
- timeout=60,
+ params=jsonable_encoder(
+ request_options.get("additional_query_parameters") if request_options is not None else None
+ ),
+ json=jsonable_encoder(_request)
+ if request_options is None or request_options.get("additional_body_parameters") is None
+ else {
+ **jsonable_encoder(_request),
+ **(jsonable_encoder(remove_none_from_dict(request_options.get("additional_body_parameters", {})))),
+ },
+ headers=jsonable_encoder(
+ remove_none_from_dict(
+ {
+ **self._client_wrapper.get_headers(),
+ **(request_options.get("additional_headers", {}) if request_options is not None else {}),
+ }
+ )
+ ),
+ timeout=request_options.get("timeout_in_seconds")
+ if request_options is not None and request_options.get("timeout_in_seconds") is not None
+ else 60,
)
if 200 <= _response.status_code < 300:
return pydantic.parse_obj_as(WebhookReceiver, _response.json()) # type: ignore