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