diff --git a/poetry.lock b/poetry.lock index 4145c40d..a8a1c18d 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" @@ -207,7 +185,6 @@ files = [ [package.dependencies] mypy-extensions = ">=0.4.3" 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" [package.extras] @@ -239,36 +216,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 +250,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 +353,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 +383,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 = "07e17d1cfc967cad4c92d37c316ba472010f73710fdaf1e34ed68f2b1b3487de" diff --git a/pyproject.toml b/pyproject.toml index 98709950..ec553ee8 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [tool.poetry] name = "MergePythonClient" -version = "1.0.5" +version = "1.0.7" description = "" readme = "README.md" authors = [] @@ -9,9 +9,10 @@ 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" 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..7797af50 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.7", } 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/accounting/types/balance_sheet_company.py b/src/merge/resources/accounting/types/balance_sheet_company.py index 6d16af9e..ffb856fa 100644 --- a/src/merge/resources/accounting/types/balance_sheet_company.py +++ b/src/merge/resources/accounting/types/balance_sheet_company.py @@ -2,6 +2,15 @@ import typing +from .accounting_phone_number import AccountingPhoneNumber +from .address import Address +from .address_country import AddressCountry +from .address_type import AddressType +from .address_type_enum import AddressTypeEnum from .company_info import CompanyInfo +from .company_info_currency import CompanyInfoCurrency +from .country_enum import CountryEnum +from .currency_enum import CurrencyEnum +from .remote_data import RemoteData BalanceSheetCompany = typing.Union[str, CompanyInfo] diff --git a/src/merge/resources/accounting/types/cash_flow_statement_company.py b/src/merge/resources/accounting/types/cash_flow_statement_company.py index 43b1fd82..8cf59a21 100644 --- a/src/merge/resources/accounting/types/cash_flow_statement_company.py +++ b/src/merge/resources/accounting/types/cash_flow_statement_company.py @@ -2,6 +2,15 @@ import typing +from .accounting_phone_number import AccountingPhoneNumber +from .address import Address +from .address_country import AddressCountry +from .address_type import AddressType +from .address_type_enum import AddressTypeEnum from .company_info import CompanyInfo +from .company_info_currency import CompanyInfoCurrency +from .country_enum import CountryEnum +from .currency_enum import CurrencyEnum +from .remote_data import RemoteData CashFlowStatementCompany = typing.Union[str, CompanyInfo] diff --git a/src/merge/resources/accounting/types/contact_addresses_item.py b/src/merge/resources/accounting/types/contact_addresses_item.py index 9c305f5f..483649ef 100644 --- a/src/merge/resources/accounting/types/contact_addresses_item.py +++ b/src/merge/resources/accounting/types/contact_addresses_item.py @@ -3,5 +3,9 @@ import typing from .address import Address +from .address_country import AddressCountry +from .address_type import AddressType +from .address_type_enum import AddressTypeEnum +from .country_enum import CountryEnum ContactAddressesItem = typing.Union[str, Address] diff --git a/src/merge/resources/accounting/types/contact_request_addresses_item.py b/src/merge/resources/accounting/types/contact_request_addresses_item.py index e6ea9c20..a5f01424 100644 --- a/src/merge/resources/accounting/types/contact_request_addresses_item.py +++ b/src/merge/resources/accounting/types/contact_request_addresses_item.py @@ -3,5 +3,9 @@ import typing from .address import Address +from .address_country import AddressCountry +from .address_type import AddressType +from .address_type_enum import AddressTypeEnum +from .country_enum import CountryEnum ContactRequestAddressesItem = typing.Union[str, Address] diff --git a/src/merge/resources/accounting/types/credit_note_accounting_period.py b/src/merge/resources/accounting/types/credit_note_accounting_period.py index 77c885ce..83e106c5 100644 --- a/src/merge/resources/accounting/types/credit_note_accounting_period.py +++ b/src/merge/resources/accounting/types/credit_note_accounting_period.py @@ -3,5 +3,7 @@ import typing from .accounting_period import AccountingPeriod +from .accounting_period_status import AccountingPeriodStatus +from .accounting_period_status_enum import AccountingPeriodStatusEnum CreditNoteAccountingPeriod = typing.Union[str, AccountingPeriod] diff --git a/src/merge/resources/accounting/types/credit_note_company.py b/src/merge/resources/accounting/types/credit_note_company.py index 1241eff2..c27824c2 100644 --- a/src/merge/resources/accounting/types/credit_note_company.py +++ b/src/merge/resources/accounting/types/credit_note_company.py @@ -2,6 +2,15 @@ import typing +from .accounting_phone_number import AccountingPhoneNumber +from .address import Address +from .address_country import AddressCountry +from .address_type import AddressType +from .address_type_enum import AddressTypeEnum from .company_info import CompanyInfo +from .company_info_currency import CompanyInfoCurrency +from .country_enum import CountryEnum +from .currency_enum import CurrencyEnum +from .remote_data import RemoteData CreditNoteCompany = typing.Union[str, CompanyInfo] diff --git a/src/merge/resources/accounting/types/credit_note_contact.py b/src/merge/resources/accounting/types/credit_note_contact.py index 58479d5e..89aa43e9 100644 --- a/src/merge/resources/accounting/types/credit_note_contact.py +++ b/src/merge/resources/accounting/types/credit_note_contact.py @@ -2,6 +2,16 @@ import typing +from .accounting_phone_number import AccountingPhoneNumber +from .address import Address +from .address_country import AddressCountry +from .address_type import AddressType +from .address_type_enum import AddressTypeEnum from .contact import Contact +from .contact_addresses_item import ContactAddressesItem +from .contact_status import ContactStatus +from .country_enum import CountryEnum +from .remote_data import RemoteData +from .status_7_d_1_enum import Status7D1Enum CreditNoteContact = typing.Union[str, Contact] diff --git a/src/merge/resources/accounting/types/credit_note_line_item_company.py b/src/merge/resources/accounting/types/credit_note_line_item_company.py index 87e55a57..61282509 100644 --- a/src/merge/resources/accounting/types/credit_note_line_item_company.py +++ b/src/merge/resources/accounting/types/credit_note_line_item_company.py @@ -2,6 +2,15 @@ import typing +from .accounting_phone_number import AccountingPhoneNumber +from .address import Address +from .address_country import AddressCountry +from .address_type import AddressType +from .address_type_enum import AddressTypeEnum from .company_info import CompanyInfo +from .company_info_currency import CompanyInfoCurrency +from .country_enum import CountryEnum +from .currency_enum import CurrencyEnum +from .remote_data import RemoteData CreditNoteLineItemCompany = typing.Union[str, CompanyInfo] diff --git a/src/merge/resources/accounting/types/credit_note_line_item_item.py b/src/merge/resources/accounting/types/credit_note_line_item_item.py index 87bf291e..647b3bdc 100644 --- a/src/merge/resources/accounting/types/credit_note_line_item_item.py +++ b/src/merge/resources/accounting/types/credit_note_line_item_item.py @@ -2,6 +2,27 @@ import typing +from .account import Account +from .account_classification import AccountClassification +from .account_currency import AccountCurrency +from .account_status import AccountStatus +from .account_status_enum import AccountStatusEnum +from .accounting_phone_number import AccountingPhoneNumber +from .address import Address +from .address_country import AddressCountry +from .address_type import AddressType +from .address_type_enum import AddressTypeEnum +from .classification_enum import ClassificationEnum +from .company_info import CompanyInfo +from .company_info_currency import CompanyInfoCurrency +from .country_enum import CountryEnum +from .currency_enum import CurrencyEnum from .item import Item +from .item_company import ItemCompany +from .item_purchase_account import ItemPurchaseAccount +from .item_sales_account import ItemSalesAccount +from .item_status import ItemStatus +from .remote_data import RemoteData +from .status_7_d_1_enum import Status7D1Enum CreditNoteLineItemItem = typing.Union[str, Item] diff --git a/src/merge/resources/accounting/types/credit_note_payments_item.py b/src/merge/resources/accounting/types/credit_note_payments_item.py index eb5a2c36..0aa1e8fb 100644 --- a/src/merge/resources/accounting/types/credit_note_payments_item.py +++ b/src/merge/resources/accounting/types/credit_note_payments_item.py @@ -2,6 +2,42 @@ import typing +from .account import Account +from .account_classification import AccountClassification +from .account_currency import AccountCurrency +from .account_status import AccountStatus +from .account_status_enum import AccountStatusEnum +from .accounting_period import AccountingPeriod +from .accounting_period_status import AccountingPeriodStatus +from .accounting_period_status_enum import AccountingPeriodStatusEnum +from .accounting_phone_number import AccountingPhoneNumber +from .address import Address +from .address_country import AddressCountry +from .address_type import AddressType +from .address_type_enum import AddressTypeEnum +from .category_type_enum import CategoryTypeEnum +from .classification_enum import ClassificationEnum +from .company_info import CompanyInfo +from .company_info_currency import CompanyInfoCurrency +from .contact import Contact +from .contact_addresses_item import ContactAddressesItem +from .contact_status import ContactStatus +from .country_enum import CountryEnum +from .currency_enum import CurrencyEnum from .payment import Payment +from .payment_account import PaymentAccount +from .payment_accounting_period import PaymentAccountingPeriod +from .payment_applied_to_lines_item import PaymentAppliedToLinesItem +from .payment_company import PaymentCompany +from .payment_contact import PaymentContact +from .payment_currency import PaymentCurrency +from .payment_line_item import PaymentLineItem +from .payment_tracking_categories_item import PaymentTrackingCategoriesItem +from .remote_data import RemoteData +from .status_7_d_1_enum import Status7D1Enum +from .tracking_category import TrackingCategory +from .tracking_category_category_type import TrackingCategoryCategoryType +from .tracking_category_company import TrackingCategoryCompany +from .tracking_category_status import TrackingCategoryStatus CreditNotePaymentsItem = typing.Union[str, Payment] diff --git a/src/merge/resources/accounting/types/credit_note_tracking_categories_item.py b/src/merge/resources/accounting/types/credit_note_tracking_categories_item.py index 8d0758d3..f2ad7096 100644 --- a/src/merge/resources/accounting/types/credit_note_tracking_categories_item.py +++ b/src/merge/resources/accounting/types/credit_note_tracking_categories_item.py @@ -2,6 +2,21 @@ import typing +from .accounting_phone_number import AccountingPhoneNumber +from .address import Address +from .address_country import AddressCountry +from .address_type import AddressType +from .address_type_enum import AddressTypeEnum +from .category_type_enum import CategoryTypeEnum +from .company_info import CompanyInfo +from .company_info_currency import CompanyInfoCurrency +from .country_enum import CountryEnum +from .currency_enum import CurrencyEnum +from .remote_data import RemoteData +from .status_7_d_1_enum import Status7D1Enum from .tracking_category import TrackingCategory +from .tracking_category_category_type import TrackingCategoryCategoryType +from .tracking_category_company import TrackingCategoryCompany +from .tracking_category_status import TrackingCategoryStatus CreditNoteTrackingCategoriesItem = typing.Union[str, TrackingCategory] diff --git a/src/merge/resources/accounting/types/expense_account.py b/src/merge/resources/accounting/types/expense_account.py index 4da9826e..133b34b4 100644 --- a/src/merge/resources/accounting/types/expense_account.py +++ b/src/merge/resources/accounting/types/expense_account.py @@ -3,5 +3,12 @@ import typing from .account import Account +from .account_classification import AccountClassification +from .account_currency import AccountCurrency +from .account_status import AccountStatus +from .account_status_enum import AccountStatusEnum +from .classification_enum import ClassificationEnum +from .currency_enum import CurrencyEnum +from .remote_data import RemoteData ExpenseAccount = typing.Union[str, Account] diff --git a/src/merge/resources/accounting/types/expense_accounting_period.py b/src/merge/resources/accounting/types/expense_accounting_period.py index ef90ea80..6d081701 100644 --- a/src/merge/resources/accounting/types/expense_accounting_period.py +++ b/src/merge/resources/accounting/types/expense_accounting_period.py @@ -3,5 +3,7 @@ import typing from .accounting_period import AccountingPeriod +from .accounting_period_status import AccountingPeriodStatus +from .accounting_period_status_enum import AccountingPeriodStatusEnum ExpenseAccountingPeriod = typing.Union[str, AccountingPeriod] diff --git a/src/merge/resources/accounting/types/expense_company.py b/src/merge/resources/accounting/types/expense_company.py index fb3a47cb..f8fcbb71 100644 --- a/src/merge/resources/accounting/types/expense_company.py +++ b/src/merge/resources/accounting/types/expense_company.py @@ -2,6 +2,15 @@ import typing +from .accounting_phone_number import AccountingPhoneNumber +from .address import Address +from .address_country import AddressCountry +from .address_type import AddressType +from .address_type_enum import AddressTypeEnum from .company_info import CompanyInfo +from .company_info_currency import CompanyInfoCurrency +from .country_enum import CountryEnum +from .currency_enum import CurrencyEnum +from .remote_data import RemoteData ExpenseCompany = typing.Union[str, CompanyInfo] diff --git a/src/merge/resources/accounting/types/expense_contact.py b/src/merge/resources/accounting/types/expense_contact.py index b032b507..8f8f918c 100644 --- a/src/merge/resources/accounting/types/expense_contact.py +++ b/src/merge/resources/accounting/types/expense_contact.py @@ -2,6 +2,16 @@ import typing +from .accounting_phone_number import AccountingPhoneNumber +from .address import Address +from .address_country import AddressCountry +from .address_type import AddressType +from .address_type_enum import AddressTypeEnum from .contact import Contact +from .contact_addresses_item import ContactAddressesItem +from .contact_status import ContactStatus +from .country_enum import CountryEnum +from .remote_data import RemoteData +from .status_7_d_1_enum import Status7D1Enum ExpenseContact = typing.Union[str, Contact] diff --git a/src/merge/resources/accounting/types/expense_line_account.py b/src/merge/resources/accounting/types/expense_line_account.py index c04b7bd2..45a29694 100644 --- a/src/merge/resources/accounting/types/expense_line_account.py +++ b/src/merge/resources/accounting/types/expense_line_account.py @@ -3,5 +3,12 @@ import typing from .account import Account +from .account_classification import AccountClassification +from .account_currency import AccountCurrency +from .account_status import AccountStatus +from .account_status_enum import AccountStatusEnum +from .classification_enum import ClassificationEnum +from .currency_enum import CurrencyEnum +from .remote_data import RemoteData ExpenseLineAccount = typing.Union[str, Account] diff --git a/src/merge/resources/accounting/types/expense_line_contact.py b/src/merge/resources/accounting/types/expense_line_contact.py index 7152af35..a21ebaaf 100644 --- a/src/merge/resources/accounting/types/expense_line_contact.py +++ b/src/merge/resources/accounting/types/expense_line_contact.py @@ -2,6 +2,16 @@ import typing +from .accounting_phone_number import AccountingPhoneNumber +from .address import Address +from .address_country import AddressCountry +from .address_type import AddressType +from .address_type_enum import AddressTypeEnum from .contact import Contact +from .contact_addresses_item import ContactAddressesItem +from .contact_status import ContactStatus +from .country_enum import CountryEnum +from .remote_data import RemoteData +from .status_7_d_1_enum import Status7D1Enum ExpenseLineContact = typing.Union[str, Contact] diff --git a/src/merge/resources/accounting/types/expense_line_item.py b/src/merge/resources/accounting/types/expense_line_item.py index 321fe8a2..f36c7ba1 100644 --- a/src/merge/resources/accounting/types/expense_line_item.py +++ b/src/merge/resources/accounting/types/expense_line_item.py @@ -2,6 +2,27 @@ import typing +from .account import Account +from .account_classification import AccountClassification +from .account_currency import AccountCurrency +from .account_status import AccountStatus +from .account_status_enum import AccountStatusEnum +from .accounting_phone_number import AccountingPhoneNumber +from .address import Address +from .address_country import AddressCountry +from .address_type import AddressType +from .address_type_enum import AddressTypeEnum +from .classification_enum import ClassificationEnum +from .company_info import CompanyInfo +from .company_info_currency import CompanyInfoCurrency +from .country_enum import CountryEnum +from .currency_enum import CurrencyEnum from .item import Item +from .item_company import ItemCompany +from .item_purchase_account import ItemPurchaseAccount +from .item_sales_account import ItemSalesAccount +from .item_status import ItemStatus +from .remote_data import RemoteData +from .status_7_d_1_enum import Status7D1Enum ExpenseLineItem = typing.Union[str, Item] diff --git a/src/merge/resources/accounting/types/expense_line_request_account.py b/src/merge/resources/accounting/types/expense_line_request_account.py index 1b68d457..e3edf7bc 100644 --- a/src/merge/resources/accounting/types/expense_line_request_account.py +++ b/src/merge/resources/accounting/types/expense_line_request_account.py @@ -3,5 +3,12 @@ import typing from .account import Account +from .account_classification import AccountClassification +from .account_currency import AccountCurrency +from .account_status import AccountStatus +from .account_status_enum import AccountStatusEnum +from .classification_enum import ClassificationEnum +from .currency_enum import CurrencyEnum +from .remote_data import RemoteData ExpenseLineRequestAccount = typing.Union[str, Account] diff --git a/src/merge/resources/accounting/types/expense_line_request_contact.py b/src/merge/resources/accounting/types/expense_line_request_contact.py index 6bd0bfae..55b951ac 100644 --- a/src/merge/resources/accounting/types/expense_line_request_contact.py +++ b/src/merge/resources/accounting/types/expense_line_request_contact.py @@ -2,6 +2,16 @@ import typing +from .accounting_phone_number import AccountingPhoneNumber +from .address import Address +from .address_country import AddressCountry +from .address_type import AddressType +from .address_type_enum import AddressTypeEnum from .contact import Contact +from .contact_addresses_item import ContactAddressesItem +from .contact_status import ContactStatus +from .country_enum import CountryEnum +from .remote_data import RemoteData +from .status_7_d_1_enum import Status7D1Enum ExpenseLineRequestContact = typing.Union[str, Contact] diff --git a/src/merge/resources/accounting/types/expense_line_request_item.py b/src/merge/resources/accounting/types/expense_line_request_item.py index f65e9bde..69285257 100644 --- a/src/merge/resources/accounting/types/expense_line_request_item.py +++ b/src/merge/resources/accounting/types/expense_line_request_item.py @@ -2,6 +2,27 @@ import typing +from .account import Account +from .account_classification import AccountClassification +from .account_currency import AccountCurrency +from .account_status import AccountStatus +from .account_status_enum import AccountStatusEnum +from .accounting_phone_number import AccountingPhoneNumber +from .address import Address +from .address_country import AddressCountry +from .address_type import AddressType +from .address_type_enum import AddressTypeEnum +from .classification_enum import ClassificationEnum +from .company_info import CompanyInfo +from .company_info_currency import CompanyInfoCurrency +from .country_enum import CountryEnum +from .currency_enum import CurrencyEnum from .item import Item +from .item_company import ItemCompany +from .item_purchase_account import ItemPurchaseAccount +from .item_sales_account import ItemSalesAccount +from .item_status import ItemStatus +from .remote_data import RemoteData +from .status_7_d_1_enum import Status7D1Enum ExpenseLineRequestItem = typing.Union[str, Item] diff --git a/src/merge/resources/accounting/types/expense_line_request_tracking_categories_item.py b/src/merge/resources/accounting/types/expense_line_request_tracking_categories_item.py index d3a539e6..dbbb906b 100644 --- a/src/merge/resources/accounting/types/expense_line_request_tracking_categories_item.py +++ b/src/merge/resources/accounting/types/expense_line_request_tracking_categories_item.py @@ -2,6 +2,21 @@ import typing +from .accounting_phone_number import AccountingPhoneNumber +from .address import Address +from .address_country import AddressCountry +from .address_type import AddressType +from .address_type_enum import AddressTypeEnum +from .category_type_enum import CategoryTypeEnum +from .company_info import CompanyInfo +from .company_info_currency import CompanyInfoCurrency +from .country_enum import CountryEnum +from .currency_enum import CurrencyEnum +from .remote_data import RemoteData +from .status_7_d_1_enum import Status7D1Enum from .tracking_category import TrackingCategory +from .tracking_category_category_type import TrackingCategoryCategoryType +from .tracking_category_company import TrackingCategoryCompany +from .tracking_category_status import TrackingCategoryStatus ExpenseLineRequestTrackingCategoriesItem = typing.Union[str, TrackingCategory] diff --git a/src/merge/resources/accounting/types/expense_line_request_tracking_category.py b/src/merge/resources/accounting/types/expense_line_request_tracking_category.py index ccc3b333..cdef02b5 100644 --- a/src/merge/resources/accounting/types/expense_line_request_tracking_category.py +++ b/src/merge/resources/accounting/types/expense_line_request_tracking_category.py @@ -2,6 +2,21 @@ import typing +from .accounting_phone_number import AccountingPhoneNumber +from .address import Address +from .address_country import AddressCountry +from .address_type import AddressType +from .address_type_enum import AddressTypeEnum +from .category_type_enum import CategoryTypeEnum +from .company_info import CompanyInfo +from .company_info_currency import CompanyInfoCurrency +from .country_enum import CountryEnum +from .currency_enum import CurrencyEnum +from .remote_data import RemoteData +from .status_7_d_1_enum import Status7D1Enum from .tracking_category import TrackingCategory +from .tracking_category_category_type import TrackingCategoryCategoryType +from .tracking_category_company import TrackingCategoryCompany +from .tracking_category_status import TrackingCategoryStatus ExpenseLineRequestTrackingCategory = typing.Union[str, TrackingCategory] diff --git a/src/merge/resources/accounting/types/expense_line_tracking_categories_item.py b/src/merge/resources/accounting/types/expense_line_tracking_categories_item.py index a3e6f796..0595a58a 100644 --- a/src/merge/resources/accounting/types/expense_line_tracking_categories_item.py +++ b/src/merge/resources/accounting/types/expense_line_tracking_categories_item.py @@ -2,6 +2,21 @@ import typing +from .accounting_phone_number import AccountingPhoneNumber +from .address import Address +from .address_country import AddressCountry +from .address_type import AddressType +from .address_type_enum import AddressTypeEnum +from .category_type_enum import CategoryTypeEnum +from .company_info import CompanyInfo +from .company_info_currency import CompanyInfoCurrency +from .country_enum import CountryEnum +from .currency_enum import CurrencyEnum +from .remote_data import RemoteData +from .status_7_d_1_enum import Status7D1Enum from .tracking_category import TrackingCategory +from .tracking_category_category_type import TrackingCategoryCategoryType +from .tracking_category_company import TrackingCategoryCompany +from .tracking_category_status import TrackingCategoryStatus ExpenseLineTrackingCategoriesItem = typing.Union[str, TrackingCategory] diff --git a/src/merge/resources/accounting/types/expense_line_tracking_category.py b/src/merge/resources/accounting/types/expense_line_tracking_category.py index ea969833..4b85be54 100644 --- a/src/merge/resources/accounting/types/expense_line_tracking_category.py +++ b/src/merge/resources/accounting/types/expense_line_tracking_category.py @@ -2,6 +2,21 @@ import typing +from .accounting_phone_number import AccountingPhoneNumber +from .address import Address +from .address_country import AddressCountry +from .address_type import AddressType +from .address_type_enum import AddressTypeEnum +from .category_type_enum import CategoryTypeEnum +from .company_info import CompanyInfo +from .company_info_currency import CompanyInfoCurrency +from .country_enum import CountryEnum +from .currency_enum import CurrencyEnum +from .remote_data import RemoteData +from .status_7_d_1_enum import Status7D1Enum from .tracking_category import TrackingCategory +from .tracking_category_category_type import TrackingCategoryCategoryType +from .tracking_category_company import TrackingCategoryCompany +from .tracking_category_status import TrackingCategoryStatus ExpenseLineTrackingCategory = typing.Union[str, TrackingCategory] diff --git a/src/merge/resources/accounting/types/expense_request_account.py b/src/merge/resources/accounting/types/expense_request_account.py index 6d3d14de..830e43a2 100644 --- a/src/merge/resources/accounting/types/expense_request_account.py +++ b/src/merge/resources/accounting/types/expense_request_account.py @@ -3,5 +3,12 @@ import typing from .account import Account +from .account_classification import AccountClassification +from .account_currency import AccountCurrency +from .account_status import AccountStatus +from .account_status_enum import AccountStatusEnum +from .classification_enum import ClassificationEnum +from .currency_enum import CurrencyEnum +from .remote_data import RemoteData ExpenseRequestAccount = typing.Union[str, Account] diff --git a/src/merge/resources/accounting/types/expense_request_accounting_period.py b/src/merge/resources/accounting/types/expense_request_accounting_period.py index 42d60154..0e027581 100644 --- a/src/merge/resources/accounting/types/expense_request_accounting_period.py +++ b/src/merge/resources/accounting/types/expense_request_accounting_period.py @@ -3,5 +3,7 @@ import typing from .accounting_period import AccountingPeriod +from .accounting_period_status import AccountingPeriodStatus +from .accounting_period_status_enum import AccountingPeriodStatusEnum ExpenseRequestAccountingPeriod = typing.Union[str, AccountingPeriod] diff --git a/src/merge/resources/accounting/types/expense_request_company.py b/src/merge/resources/accounting/types/expense_request_company.py index c632888f..f79563b0 100644 --- a/src/merge/resources/accounting/types/expense_request_company.py +++ b/src/merge/resources/accounting/types/expense_request_company.py @@ -2,6 +2,15 @@ import typing +from .accounting_phone_number import AccountingPhoneNumber +from .address import Address +from .address_country import AddressCountry +from .address_type import AddressType +from .address_type_enum import AddressTypeEnum from .company_info import CompanyInfo +from .company_info_currency import CompanyInfoCurrency +from .country_enum import CountryEnum +from .currency_enum import CurrencyEnum +from .remote_data import RemoteData ExpenseRequestCompany = typing.Union[str, CompanyInfo] diff --git a/src/merge/resources/accounting/types/expense_request_contact.py b/src/merge/resources/accounting/types/expense_request_contact.py index 815e7427..b5e99151 100644 --- a/src/merge/resources/accounting/types/expense_request_contact.py +++ b/src/merge/resources/accounting/types/expense_request_contact.py @@ -2,6 +2,16 @@ import typing +from .accounting_phone_number import AccountingPhoneNumber +from .address import Address +from .address_country import AddressCountry +from .address_type import AddressType +from .address_type_enum import AddressTypeEnum from .contact import Contact +from .contact_addresses_item import ContactAddressesItem +from .contact_status import ContactStatus +from .country_enum import CountryEnum +from .remote_data import RemoteData +from .status_7_d_1_enum import Status7D1Enum ExpenseRequestContact = typing.Union[str, Contact] diff --git a/src/merge/resources/accounting/types/expense_request_tracking_categories_item.py b/src/merge/resources/accounting/types/expense_request_tracking_categories_item.py index a56580fa..42b37ef9 100644 --- a/src/merge/resources/accounting/types/expense_request_tracking_categories_item.py +++ b/src/merge/resources/accounting/types/expense_request_tracking_categories_item.py @@ -2,6 +2,21 @@ import typing +from .accounting_phone_number import AccountingPhoneNumber +from .address import Address +from .address_country import AddressCountry +from .address_type import AddressType +from .address_type_enum import AddressTypeEnum +from .category_type_enum import CategoryTypeEnum +from .company_info import CompanyInfo +from .company_info_currency import CompanyInfoCurrency +from .country_enum import CountryEnum +from .currency_enum import CurrencyEnum +from .remote_data import RemoteData +from .status_7_d_1_enum import Status7D1Enum from .tracking_category import TrackingCategory +from .tracking_category_category_type import TrackingCategoryCategoryType +from .tracking_category_company import TrackingCategoryCompany +from .tracking_category_status import TrackingCategoryStatus ExpenseRequestTrackingCategoriesItem = typing.Union[str, TrackingCategory] diff --git a/src/merge/resources/accounting/types/expense_tracking_categories_item.py b/src/merge/resources/accounting/types/expense_tracking_categories_item.py index 69a369cb..144c98c1 100644 --- a/src/merge/resources/accounting/types/expense_tracking_categories_item.py +++ b/src/merge/resources/accounting/types/expense_tracking_categories_item.py @@ -2,6 +2,21 @@ import typing +from .accounting_phone_number import AccountingPhoneNumber +from .address import Address +from .address_country import AddressCountry +from .address_type import AddressType +from .address_type_enum import AddressTypeEnum +from .category_type_enum import CategoryTypeEnum +from .company_info import CompanyInfo +from .company_info_currency import CompanyInfoCurrency +from .country_enum import CountryEnum +from .currency_enum import CurrencyEnum +from .remote_data import RemoteData +from .status_7_d_1_enum import Status7D1Enum from .tracking_category import TrackingCategory +from .tracking_category_category_type import TrackingCategoryCategoryType +from .tracking_category_company import TrackingCategoryCompany +from .tracking_category_status import TrackingCategoryStatus ExpenseTrackingCategoriesItem = typing.Union[str, TrackingCategory] diff --git a/src/merge/resources/accounting/types/income_statement_company.py b/src/merge/resources/accounting/types/income_statement_company.py index 62b20e79..fe62009c 100644 --- a/src/merge/resources/accounting/types/income_statement_company.py +++ b/src/merge/resources/accounting/types/income_statement_company.py @@ -2,6 +2,15 @@ import typing +from .accounting_phone_number import AccountingPhoneNumber +from .address import Address +from .address_country import AddressCountry +from .address_type import AddressType +from .address_type_enum import AddressTypeEnum from .company_info import CompanyInfo +from .company_info_currency import CompanyInfoCurrency +from .country_enum import CountryEnum +from .currency_enum import CurrencyEnum +from .remote_data import RemoteData IncomeStatementCompany = typing.Union[str, CompanyInfo] diff --git a/src/merge/resources/accounting/types/invoice_accounting_period.py b/src/merge/resources/accounting/types/invoice_accounting_period.py index e3b87d8c..a92f85b6 100644 --- a/src/merge/resources/accounting/types/invoice_accounting_period.py +++ b/src/merge/resources/accounting/types/invoice_accounting_period.py @@ -3,5 +3,7 @@ import typing from .accounting_period import AccountingPeriod +from .accounting_period_status import AccountingPeriodStatus +from .accounting_period_status_enum import AccountingPeriodStatusEnum InvoiceAccountingPeriod = typing.Union[str, AccountingPeriod] diff --git a/src/merge/resources/accounting/types/invoice_company.py b/src/merge/resources/accounting/types/invoice_company.py index e8558dc2..4ab8c7a4 100644 --- a/src/merge/resources/accounting/types/invoice_company.py +++ b/src/merge/resources/accounting/types/invoice_company.py @@ -2,6 +2,15 @@ import typing +from .accounting_phone_number import AccountingPhoneNumber +from .address import Address +from .address_country import AddressCountry +from .address_type import AddressType +from .address_type_enum import AddressTypeEnum from .company_info import CompanyInfo +from .company_info_currency import CompanyInfoCurrency +from .country_enum import CountryEnum +from .currency_enum import CurrencyEnum +from .remote_data import RemoteData InvoiceCompany = typing.Union[str, CompanyInfo] diff --git a/src/merge/resources/accounting/types/invoice_contact.py b/src/merge/resources/accounting/types/invoice_contact.py index 88b5c862..f3c2806c 100644 --- a/src/merge/resources/accounting/types/invoice_contact.py +++ b/src/merge/resources/accounting/types/invoice_contact.py @@ -2,6 +2,16 @@ import typing +from .accounting_phone_number import AccountingPhoneNumber +from .address import Address +from .address_country import AddressCountry +from .address_type import AddressType +from .address_type_enum import AddressTypeEnum from .contact import Contact +from .contact_addresses_item import ContactAddressesItem +from .contact_status import ContactStatus +from .country_enum import CountryEnum +from .remote_data import RemoteData +from .status_7_d_1_enum import Status7D1Enum InvoiceContact = typing.Union[str, Contact] diff --git a/src/merge/resources/accounting/types/invoice_line_item_account.py b/src/merge/resources/accounting/types/invoice_line_item_account.py index c9bd67f7..e68772af 100644 --- a/src/merge/resources/accounting/types/invoice_line_item_account.py +++ b/src/merge/resources/accounting/types/invoice_line_item_account.py @@ -3,5 +3,12 @@ import typing from .account import Account +from .account_classification import AccountClassification +from .account_currency import AccountCurrency +from .account_status import AccountStatus +from .account_status_enum import AccountStatusEnum +from .classification_enum import ClassificationEnum +from .currency_enum import CurrencyEnum +from .remote_data import RemoteData InvoiceLineItemAccount = typing.Union[str, Account] diff --git a/src/merge/resources/accounting/types/invoice_line_item_item.py b/src/merge/resources/accounting/types/invoice_line_item_item.py index dbf9418a..8dd92bd7 100644 --- a/src/merge/resources/accounting/types/invoice_line_item_item.py +++ b/src/merge/resources/accounting/types/invoice_line_item_item.py @@ -2,6 +2,27 @@ import typing +from .account import Account +from .account_classification import AccountClassification +from .account_currency import AccountCurrency +from .account_status import AccountStatus +from .account_status_enum import AccountStatusEnum +from .accounting_phone_number import AccountingPhoneNumber +from .address import Address +from .address_country import AddressCountry +from .address_type import AddressType +from .address_type_enum import AddressTypeEnum +from .classification_enum import ClassificationEnum +from .company_info import CompanyInfo +from .company_info_currency import CompanyInfoCurrency +from .country_enum import CountryEnum +from .currency_enum import CurrencyEnum from .item import Item +from .item_company import ItemCompany +from .item_purchase_account import ItemPurchaseAccount +from .item_sales_account import ItemSalesAccount +from .item_status import ItemStatus +from .remote_data import RemoteData +from .status_7_d_1_enum import Status7D1Enum InvoiceLineItemItem = typing.Union[str, Item] diff --git a/src/merge/resources/accounting/types/invoice_line_item_request_account.py b/src/merge/resources/accounting/types/invoice_line_item_request_account.py index 0b1c8cd6..24c11787 100644 --- a/src/merge/resources/accounting/types/invoice_line_item_request_account.py +++ b/src/merge/resources/accounting/types/invoice_line_item_request_account.py @@ -3,5 +3,12 @@ import typing from .account import Account +from .account_classification import AccountClassification +from .account_currency import AccountCurrency +from .account_status import AccountStatus +from .account_status_enum import AccountStatusEnum +from .classification_enum import ClassificationEnum +from .currency_enum import CurrencyEnum +from .remote_data import RemoteData InvoiceLineItemRequestAccount = typing.Union[str, Account] diff --git a/src/merge/resources/accounting/types/invoice_line_item_request_item.py b/src/merge/resources/accounting/types/invoice_line_item_request_item.py index a0c32380..f35063f3 100644 --- a/src/merge/resources/accounting/types/invoice_line_item_request_item.py +++ b/src/merge/resources/accounting/types/invoice_line_item_request_item.py @@ -2,6 +2,27 @@ import typing +from .account import Account +from .account_classification import AccountClassification +from .account_currency import AccountCurrency +from .account_status import AccountStatus +from .account_status_enum import AccountStatusEnum +from .accounting_phone_number import AccountingPhoneNumber +from .address import Address +from .address_country import AddressCountry +from .address_type import AddressType +from .address_type_enum import AddressTypeEnum +from .classification_enum import ClassificationEnum +from .company_info import CompanyInfo +from .company_info_currency import CompanyInfoCurrency +from .country_enum import CountryEnum +from .currency_enum import CurrencyEnum from .item import Item +from .item_company import ItemCompany +from .item_purchase_account import ItemPurchaseAccount +from .item_sales_account import ItemSalesAccount +from .item_status import ItemStatus +from .remote_data import RemoteData +from .status_7_d_1_enum import Status7D1Enum InvoiceLineItemRequestItem = typing.Union[str, Item] diff --git a/src/merge/resources/accounting/types/invoice_line_item_request_tracking_categories_item.py b/src/merge/resources/accounting/types/invoice_line_item_request_tracking_categories_item.py index a7eba0c4..f600092e 100644 --- a/src/merge/resources/accounting/types/invoice_line_item_request_tracking_categories_item.py +++ b/src/merge/resources/accounting/types/invoice_line_item_request_tracking_categories_item.py @@ -2,6 +2,21 @@ import typing +from .accounting_phone_number import AccountingPhoneNumber +from .address import Address +from .address_country import AddressCountry +from .address_type import AddressType +from .address_type_enum import AddressTypeEnum +from .category_type_enum import CategoryTypeEnum +from .company_info import CompanyInfo +from .company_info_currency import CompanyInfoCurrency +from .country_enum import CountryEnum +from .currency_enum import CurrencyEnum +from .remote_data import RemoteData +from .status_7_d_1_enum import Status7D1Enum from .tracking_category import TrackingCategory +from .tracking_category_category_type import TrackingCategoryCategoryType +from .tracking_category_company import TrackingCategoryCompany +from .tracking_category_status import TrackingCategoryStatus InvoiceLineItemRequestTrackingCategoriesItem = typing.Union[str, TrackingCategory] diff --git a/src/merge/resources/accounting/types/invoice_line_item_request_tracking_category.py b/src/merge/resources/accounting/types/invoice_line_item_request_tracking_category.py index 499d43ee..bd5015eb 100644 --- a/src/merge/resources/accounting/types/invoice_line_item_request_tracking_category.py +++ b/src/merge/resources/accounting/types/invoice_line_item_request_tracking_category.py @@ -2,6 +2,21 @@ import typing +from .accounting_phone_number import AccountingPhoneNumber +from .address import Address +from .address_country import AddressCountry +from .address_type import AddressType +from .address_type_enum import AddressTypeEnum +from .category_type_enum import CategoryTypeEnum +from .company_info import CompanyInfo +from .company_info_currency import CompanyInfoCurrency +from .country_enum import CountryEnum +from .currency_enum import CurrencyEnum +from .remote_data import RemoteData +from .status_7_d_1_enum import Status7D1Enum from .tracking_category import TrackingCategory +from .tracking_category_category_type import TrackingCategoryCategoryType +from .tracking_category_company import TrackingCategoryCompany +from .tracking_category_status import TrackingCategoryStatus InvoiceLineItemRequestTrackingCategory = typing.Union[str, TrackingCategory] diff --git a/src/merge/resources/accounting/types/invoice_line_item_tracking_categories_item.py b/src/merge/resources/accounting/types/invoice_line_item_tracking_categories_item.py index fa22c4ea..31cb9275 100644 --- a/src/merge/resources/accounting/types/invoice_line_item_tracking_categories_item.py +++ b/src/merge/resources/accounting/types/invoice_line_item_tracking_categories_item.py @@ -2,6 +2,21 @@ import typing +from .accounting_phone_number import AccountingPhoneNumber +from .address import Address +from .address_country import AddressCountry +from .address_type import AddressType +from .address_type_enum import AddressTypeEnum +from .category_type_enum import CategoryTypeEnum +from .company_info import CompanyInfo +from .company_info_currency import CompanyInfoCurrency +from .country_enum import CountryEnum +from .currency_enum import CurrencyEnum +from .remote_data import RemoteData +from .status_7_d_1_enum import Status7D1Enum from .tracking_category import TrackingCategory +from .tracking_category_category_type import TrackingCategoryCategoryType +from .tracking_category_company import TrackingCategoryCompany +from .tracking_category_status import TrackingCategoryStatus InvoiceLineItemTrackingCategoriesItem = typing.Union[str, TrackingCategory] diff --git a/src/merge/resources/accounting/types/invoice_line_item_tracking_category.py b/src/merge/resources/accounting/types/invoice_line_item_tracking_category.py index fff4c012..825e340c 100644 --- a/src/merge/resources/accounting/types/invoice_line_item_tracking_category.py +++ b/src/merge/resources/accounting/types/invoice_line_item_tracking_category.py @@ -2,6 +2,21 @@ import typing +from .accounting_phone_number import AccountingPhoneNumber +from .address import Address +from .address_country import AddressCountry +from .address_type import AddressType +from .address_type_enum import AddressTypeEnum +from .category_type_enum import CategoryTypeEnum +from .company_info import CompanyInfo +from .company_info_currency import CompanyInfoCurrency +from .country_enum import CountryEnum +from .currency_enum import CurrencyEnum +from .remote_data import RemoteData +from .status_7_d_1_enum import Status7D1Enum from .tracking_category import TrackingCategory +from .tracking_category_category_type import TrackingCategoryCategoryType +from .tracking_category_company import TrackingCategoryCompany +from .tracking_category_status import TrackingCategoryStatus InvoiceLineItemTrackingCategory = typing.Union[str, TrackingCategory] diff --git a/src/merge/resources/accounting/types/invoice_payments_item.py b/src/merge/resources/accounting/types/invoice_payments_item.py index 546f3ef2..af33fda5 100644 --- a/src/merge/resources/accounting/types/invoice_payments_item.py +++ b/src/merge/resources/accounting/types/invoice_payments_item.py @@ -2,6 +2,42 @@ import typing +from .account import Account +from .account_classification import AccountClassification +from .account_currency import AccountCurrency +from .account_status import AccountStatus +from .account_status_enum import AccountStatusEnum +from .accounting_period import AccountingPeriod +from .accounting_period_status import AccountingPeriodStatus +from .accounting_period_status_enum import AccountingPeriodStatusEnum +from .accounting_phone_number import AccountingPhoneNumber +from .address import Address +from .address_country import AddressCountry +from .address_type import AddressType +from .address_type_enum import AddressTypeEnum +from .category_type_enum import CategoryTypeEnum +from .classification_enum import ClassificationEnum +from .company_info import CompanyInfo +from .company_info_currency import CompanyInfoCurrency +from .contact import Contact +from .contact_addresses_item import ContactAddressesItem +from .contact_status import ContactStatus +from .country_enum import CountryEnum +from .currency_enum import CurrencyEnum from .payment import Payment +from .payment_account import PaymentAccount +from .payment_accounting_period import PaymentAccountingPeriod +from .payment_applied_to_lines_item import PaymentAppliedToLinesItem +from .payment_company import PaymentCompany +from .payment_contact import PaymentContact +from .payment_currency import PaymentCurrency +from .payment_line_item import PaymentLineItem +from .payment_tracking_categories_item import PaymentTrackingCategoriesItem +from .remote_data import RemoteData +from .status_7_d_1_enum import Status7D1Enum +from .tracking_category import TrackingCategory +from .tracking_category_category_type import TrackingCategoryCategoryType +from .tracking_category_company import TrackingCategoryCompany +from .tracking_category_status import TrackingCategoryStatus InvoicePaymentsItem = typing.Union[str, Payment] diff --git a/src/merge/resources/accounting/types/invoice_purchase_orders_item.py b/src/merge/resources/accounting/types/invoice_purchase_orders_item.py index a91afeba..944fe482 100644 --- a/src/merge/resources/accounting/types/invoice_purchase_orders_item.py +++ b/src/merge/resources/accounting/types/invoice_purchase_orders_item.py @@ -2,6 +2,50 @@ import typing +from .account import Account +from .account_classification import AccountClassification +from .account_currency import AccountCurrency +from .account_status import AccountStatus +from .account_status_enum import AccountStatusEnum +from .accounting_period import AccountingPeriod +from .accounting_period_status import AccountingPeriodStatus +from .accounting_period_status_enum import AccountingPeriodStatusEnum +from .accounting_phone_number import AccountingPhoneNumber +from .address import Address +from .address_country import AddressCountry +from .address_type import AddressType +from .address_type_enum import AddressTypeEnum +from .category_type_enum import CategoryTypeEnum +from .classification_enum import ClassificationEnum +from .company_info import CompanyInfo +from .company_info_currency import CompanyInfoCurrency +from .contact import Contact +from .contact_addresses_item import ContactAddressesItem +from .contact_status import ContactStatus +from .country_enum import CountryEnum +from .currency_enum import CurrencyEnum +from .item import Item +from .item_company import ItemCompany +from .item_purchase_account import ItemPurchaseAccount +from .item_sales_account import ItemSalesAccount +from .item_status import ItemStatus from .purchase_order import PurchaseOrder +from .purchase_order_accounting_period import PurchaseOrderAccountingPeriod +from .purchase_order_company import PurchaseOrderCompany +from .purchase_order_currency import PurchaseOrderCurrency +from .purchase_order_delivery_address import PurchaseOrderDeliveryAddress +from .purchase_order_line_item import PurchaseOrderLineItem +from .purchase_order_line_item_currency import PurchaseOrderLineItemCurrency +from .purchase_order_line_item_item import PurchaseOrderLineItemItem +from .purchase_order_status import PurchaseOrderStatus +from .purchase_order_status_enum import PurchaseOrderStatusEnum +from .purchase_order_tracking_categories_item import PurchaseOrderTrackingCategoriesItem +from .purchase_order_vendor import PurchaseOrderVendor +from .remote_data import RemoteData +from .status_7_d_1_enum import Status7D1Enum +from .tracking_category import TrackingCategory +from .tracking_category_category_type import TrackingCategoryCategoryType +from .tracking_category_company import TrackingCategoryCompany +from .tracking_category_status import TrackingCategoryStatus InvoicePurchaseOrdersItem = typing.Union[str, PurchaseOrder] diff --git a/src/merge/resources/accounting/types/invoice_request_company.py b/src/merge/resources/accounting/types/invoice_request_company.py index dba10e8c..5af3624f 100644 --- a/src/merge/resources/accounting/types/invoice_request_company.py +++ b/src/merge/resources/accounting/types/invoice_request_company.py @@ -2,6 +2,15 @@ import typing +from .accounting_phone_number import AccountingPhoneNumber +from .address import Address +from .address_country import AddressCountry +from .address_type import AddressType +from .address_type_enum import AddressTypeEnum from .company_info import CompanyInfo +from .company_info_currency import CompanyInfoCurrency +from .country_enum import CountryEnum +from .currency_enum import CurrencyEnum +from .remote_data import RemoteData InvoiceRequestCompany = typing.Union[str, CompanyInfo] diff --git a/src/merge/resources/accounting/types/invoice_request_contact.py b/src/merge/resources/accounting/types/invoice_request_contact.py index e197c573..e078a515 100644 --- a/src/merge/resources/accounting/types/invoice_request_contact.py +++ b/src/merge/resources/accounting/types/invoice_request_contact.py @@ -2,6 +2,16 @@ import typing +from .accounting_phone_number import AccountingPhoneNumber +from .address import Address +from .address_country import AddressCountry +from .address_type import AddressType +from .address_type_enum import AddressTypeEnum from .contact import Contact +from .contact_addresses_item import ContactAddressesItem +from .contact_status import ContactStatus +from .country_enum import CountryEnum +from .remote_data import RemoteData +from .status_7_d_1_enum import Status7D1Enum InvoiceRequestContact = typing.Union[str, Contact] diff --git a/src/merge/resources/accounting/types/invoice_request_payments_item.py b/src/merge/resources/accounting/types/invoice_request_payments_item.py index 9fce823b..81d9eef2 100644 --- a/src/merge/resources/accounting/types/invoice_request_payments_item.py +++ b/src/merge/resources/accounting/types/invoice_request_payments_item.py @@ -2,6 +2,42 @@ import typing +from .account import Account +from .account_classification import AccountClassification +from .account_currency import AccountCurrency +from .account_status import AccountStatus +from .account_status_enum import AccountStatusEnum +from .accounting_period import AccountingPeriod +from .accounting_period_status import AccountingPeriodStatus +from .accounting_period_status_enum import AccountingPeriodStatusEnum +from .accounting_phone_number import AccountingPhoneNumber +from .address import Address +from .address_country import AddressCountry +from .address_type import AddressType +from .address_type_enum import AddressTypeEnum +from .category_type_enum import CategoryTypeEnum +from .classification_enum import ClassificationEnum +from .company_info import CompanyInfo +from .company_info_currency import CompanyInfoCurrency +from .contact import Contact +from .contact_addresses_item import ContactAddressesItem +from .contact_status import ContactStatus +from .country_enum import CountryEnum +from .currency_enum import CurrencyEnum from .payment import Payment +from .payment_account import PaymentAccount +from .payment_accounting_period import PaymentAccountingPeriod +from .payment_applied_to_lines_item import PaymentAppliedToLinesItem +from .payment_company import PaymentCompany +from .payment_contact import PaymentContact +from .payment_currency import PaymentCurrency +from .payment_line_item import PaymentLineItem +from .payment_tracking_categories_item import PaymentTrackingCategoriesItem +from .remote_data import RemoteData +from .status_7_d_1_enum import Status7D1Enum +from .tracking_category import TrackingCategory +from .tracking_category_category_type import TrackingCategoryCategoryType +from .tracking_category_company import TrackingCategoryCompany +from .tracking_category_status import TrackingCategoryStatus InvoiceRequestPaymentsItem = typing.Union[str, Payment] diff --git a/src/merge/resources/accounting/types/invoice_request_purchase_orders_item.py b/src/merge/resources/accounting/types/invoice_request_purchase_orders_item.py index e45382ce..182ad491 100644 --- a/src/merge/resources/accounting/types/invoice_request_purchase_orders_item.py +++ b/src/merge/resources/accounting/types/invoice_request_purchase_orders_item.py @@ -2,6 +2,50 @@ import typing +from .account import Account +from .account_classification import AccountClassification +from .account_currency import AccountCurrency +from .account_status import AccountStatus +from .account_status_enum import AccountStatusEnum +from .accounting_period import AccountingPeriod +from .accounting_period_status import AccountingPeriodStatus +from .accounting_period_status_enum import AccountingPeriodStatusEnum +from .accounting_phone_number import AccountingPhoneNumber +from .address import Address +from .address_country import AddressCountry +from .address_type import AddressType +from .address_type_enum import AddressTypeEnum +from .category_type_enum import CategoryTypeEnum +from .classification_enum import ClassificationEnum +from .company_info import CompanyInfo +from .company_info_currency import CompanyInfoCurrency +from .contact import Contact +from .contact_addresses_item import ContactAddressesItem +from .contact_status import ContactStatus +from .country_enum import CountryEnum +from .currency_enum import CurrencyEnum +from .item import Item +from .item_company import ItemCompany +from .item_purchase_account import ItemPurchaseAccount +from .item_sales_account import ItemSalesAccount +from .item_status import ItemStatus from .purchase_order import PurchaseOrder +from .purchase_order_accounting_period import PurchaseOrderAccountingPeriod +from .purchase_order_company import PurchaseOrderCompany +from .purchase_order_currency import PurchaseOrderCurrency +from .purchase_order_delivery_address import PurchaseOrderDeliveryAddress +from .purchase_order_line_item import PurchaseOrderLineItem +from .purchase_order_line_item_currency import PurchaseOrderLineItemCurrency +from .purchase_order_line_item_item import PurchaseOrderLineItemItem +from .purchase_order_status import PurchaseOrderStatus +from .purchase_order_status_enum import PurchaseOrderStatusEnum +from .purchase_order_tracking_categories_item import PurchaseOrderTrackingCategoriesItem +from .purchase_order_vendor import PurchaseOrderVendor +from .remote_data import RemoteData +from .status_7_d_1_enum import Status7D1Enum +from .tracking_category import TrackingCategory +from .tracking_category_category_type import TrackingCategoryCategoryType +from .tracking_category_company import TrackingCategoryCompany +from .tracking_category_status import TrackingCategoryStatus InvoiceRequestPurchaseOrdersItem = typing.Union[str, PurchaseOrder] diff --git a/src/merge/resources/accounting/types/invoice_request_tracking_categories_item.py b/src/merge/resources/accounting/types/invoice_request_tracking_categories_item.py index 9a333048..47957aa6 100644 --- a/src/merge/resources/accounting/types/invoice_request_tracking_categories_item.py +++ b/src/merge/resources/accounting/types/invoice_request_tracking_categories_item.py @@ -2,6 +2,21 @@ import typing +from .accounting_phone_number import AccountingPhoneNumber +from .address import Address +from .address_country import AddressCountry +from .address_type import AddressType +from .address_type_enum import AddressTypeEnum +from .category_type_enum import CategoryTypeEnum +from .company_info import CompanyInfo +from .company_info_currency import CompanyInfoCurrency +from .country_enum import CountryEnum +from .currency_enum import CurrencyEnum +from .remote_data import RemoteData +from .status_7_d_1_enum import Status7D1Enum from .tracking_category import TrackingCategory +from .tracking_category_category_type import TrackingCategoryCategoryType +from .tracking_category_company import TrackingCategoryCompany +from .tracking_category_status import TrackingCategoryStatus InvoiceRequestTrackingCategoriesItem = typing.Union[str, TrackingCategory] diff --git a/src/merge/resources/accounting/types/invoice_tracking_categories_item.py b/src/merge/resources/accounting/types/invoice_tracking_categories_item.py index 1ade3e05..f621ab7b 100644 --- a/src/merge/resources/accounting/types/invoice_tracking_categories_item.py +++ b/src/merge/resources/accounting/types/invoice_tracking_categories_item.py @@ -2,6 +2,21 @@ import typing +from .accounting_phone_number import AccountingPhoneNumber +from .address import Address +from .address_country import AddressCountry +from .address_type import AddressType +from .address_type_enum import AddressTypeEnum +from .category_type_enum import CategoryTypeEnum +from .company_info import CompanyInfo +from .company_info_currency import CompanyInfoCurrency +from .country_enum import CountryEnum +from .currency_enum import CurrencyEnum +from .remote_data import RemoteData +from .status_7_d_1_enum import Status7D1Enum from .tracking_category import TrackingCategory +from .tracking_category_category_type import TrackingCategoryCategoryType +from .tracking_category_company import TrackingCategoryCompany +from .tracking_category_status import TrackingCategoryStatus InvoiceTrackingCategoriesItem = typing.Union[str, TrackingCategory] diff --git a/src/merge/resources/accounting/types/item_company.py b/src/merge/resources/accounting/types/item_company.py index 8bd6469f..8a65a307 100644 --- a/src/merge/resources/accounting/types/item_company.py +++ b/src/merge/resources/accounting/types/item_company.py @@ -2,6 +2,15 @@ import typing +from .accounting_phone_number import AccountingPhoneNumber +from .address import Address +from .address_country import AddressCountry +from .address_type import AddressType +from .address_type_enum import AddressTypeEnum from .company_info import CompanyInfo +from .company_info_currency import CompanyInfoCurrency +from .country_enum import CountryEnum +from .currency_enum import CurrencyEnum +from .remote_data import RemoteData ItemCompany = typing.Union[str, CompanyInfo] diff --git a/src/merge/resources/accounting/types/item_purchase_account.py b/src/merge/resources/accounting/types/item_purchase_account.py index adb31772..58799aa3 100644 --- a/src/merge/resources/accounting/types/item_purchase_account.py +++ b/src/merge/resources/accounting/types/item_purchase_account.py @@ -3,5 +3,12 @@ import typing from .account import Account +from .account_classification import AccountClassification +from .account_currency import AccountCurrency +from .account_status import AccountStatus +from .account_status_enum import AccountStatusEnum +from .classification_enum import ClassificationEnum +from .currency_enum import CurrencyEnum +from .remote_data import RemoteData ItemPurchaseAccount = typing.Union[str, Account] diff --git a/src/merge/resources/accounting/types/item_sales_account.py b/src/merge/resources/accounting/types/item_sales_account.py index 9c6991a2..45156c64 100644 --- a/src/merge/resources/accounting/types/item_sales_account.py +++ b/src/merge/resources/accounting/types/item_sales_account.py @@ -3,5 +3,12 @@ import typing from .account import Account +from .account_classification import AccountClassification +from .account_currency import AccountCurrency +from .account_status import AccountStatus +from .account_status_enum import AccountStatusEnum +from .classification_enum import ClassificationEnum +from .currency_enum import CurrencyEnum +from .remote_data import RemoteData ItemSalesAccount = typing.Union[str, Account] diff --git a/src/merge/resources/accounting/types/journal_entry_accounting_period.py b/src/merge/resources/accounting/types/journal_entry_accounting_period.py index 1684bcf6..5eaeb4f7 100644 --- a/src/merge/resources/accounting/types/journal_entry_accounting_period.py +++ b/src/merge/resources/accounting/types/journal_entry_accounting_period.py @@ -3,5 +3,7 @@ import typing from .accounting_period import AccountingPeriod +from .accounting_period_status import AccountingPeriodStatus +from .accounting_period_status_enum import AccountingPeriodStatusEnum JournalEntryAccountingPeriod = typing.Union[str, AccountingPeriod] diff --git a/src/merge/resources/accounting/types/journal_entry_company.py b/src/merge/resources/accounting/types/journal_entry_company.py index 6856f4f3..6a4db84b 100644 --- a/src/merge/resources/accounting/types/journal_entry_company.py +++ b/src/merge/resources/accounting/types/journal_entry_company.py @@ -2,6 +2,15 @@ import typing +from .accounting_phone_number import AccountingPhoneNumber +from .address import Address +from .address_country import AddressCountry +from .address_type import AddressType +from .address_type_enum import AddressTypeEnum from .company_info import CompanyInfo +from .company_info_currency import CompanyInfoCurrency +from .country_enum import CountryEnum +from .currency_enum import CurrencyEnum +from .remote_data import RemoteData JournalEntryCompany = typing.Union[str, CompanyInfo] diff --git a/src/merge/resources/accounting/types/journal_entry_payments_item.py b/src/merge/resources/accounting/types/journal_entry_payments_item.py index 286f7632..d18e7fb7 100644 --- a/src/merge/resources/accounting/types/journal_entry_payments_item.py +++ b/src/merge/resources/accounting/types/journal_entry_payments_item.py @@ -2,6 +2,42 @@ import typing +from .account import Account +from .account_classification import AccountClassification +from .account_currency import AccountCurrency +from .account_status import AccountStatus +from .account_status_enum import AccountStatusEnum +from .accounting_period import AccountingPeriod +from .accounting_period_status import AccountingPeriodStatus +from .accounting_period_status_enum import AccountingPeriodStatusEnum +from .accounting_phone_number import AccountingPhoneNumber +from .address import Address +from .address_country import AddressCountry +from .address_type import AddressType +from .address_type_enum import AddressTypeEnum +from .category_type_enum import CategoryTypeEnum +from .classification_enum import ClassificationEnum +from .company_info import CompanyInfo +from .company_info_currency import CompanyInfoCurrency +from .contact import Contact +from .contact_addresses_item import ContactAddressesItem +from .contact_status import ContactStatus +from .country_enum import CountryEnum +from .currency_enum import CurrencyEnum from .payment import Payment +from .payment_account import PaymentAccount +from .payment_accounting_period import PaymentAccountingPeriod +from .payment_applied_to_lines_item import PaymentAppliedToLinesItem +from .payment_company import PaymentCompany +from .payment_contact import PaymentContact +from .payment_currency import PaymentCurrency +from .payment_line_item import PaymentLineItem +from .payment_tracking_categories_item import PaymentTrackingCategoriesItem +from .remote_data import RemoteData +from .status_7_d_1_enum import Status7D1Enum +from .tracking_category import TrackingCategory +from .tracking_category_category_type import TrackingCategoryCategoryType +from .tracking_category_company import TrackingCategoryCompany +from .tracking_category_status import TrackingCategoryStatus JournalEntryPaymentsItem = typing.Union[str, Payment] diff --git a/src/merge/resources/accounting/types/journal_entry_request_company.py b/src/merge/resources/accounting/types/journal_entry_request_company.py index 5c388f77..412105a5 100644 --- a/src/merge/resources/accounting/types/journal_entry_request_company.py +++ b/src/merge/resources/accounting/types/journal_entry_request_company.py @@ -2,6 +2,15 @@ import typing +from .accounting_phone_number import AccountingPhoneNumber +from .address import Address +from .address_country import AddressCountry +from .address_type import AddressType +from .address_type_enum import AddressTypeEnum from .company_info import CompanyInfo +from .company_info_currency import CompanyInfoCurrency +from .country_enum import CountryEnum +from .currency_enum import CurrencyEnum +from .remote_data import RemoteData JournalEntryRequestCompany = typing.Union[str, CompanyInfo] diff --git a/src/merge/resources/accounting/types/journal_entry_request_payments_item.py b/src/merge/resources/accounting/types/journal_entry_request_payments_item.py index 13c34a9c..10457827 100644 --- a/src/merge/resources/accounting/types/journal_entry_request_payments_item.py +++ b/src/merge/resources/accounting/types/journal_entry_request_payments_item.py @@ -2,6 +2,42 @@ import typing +from .account import Account +from .account_classification import AccountClassification +from .account_currency import AccountCurrency +from .account_status import AccountStatus +from .account_status_enum import AccountStatusEnum +from .accounting_period import AccountingPeriod +from .accounting_period_status import AccountingPeriodStatus +from .accounting_period_status_enum import AccountingPeriodStatusEnum +from .accounting_phone_number import AccountingPhoneNumber +from .address import Address +from .address_country import AddressCountry +from .address_type import AddressType +from .address_type_enum import AddressTypeEnum +from .category_type_enum import CategoryTypeEnum +from .classification_enum import ClassificationEnum +from .company_info import CompanyInfo +from .company_info_currency import CompanyInfoCurrency +from .contact import Contact +from .contact_addresses_item import ContactAddressesItem +from .contact_status import ContactStatus +from .country_enum import CountryEnum +from .currency_enum import CurrencyEnum from .payment import Payment +from .payment_account import PaymentAccount +from .payment_accounting_period import PaymentAccountingPeriod +from .payment_applied_to_lines_item import PaymentAppliedToLinesItem +from .payment_company import PaymentCompany +from .payment_contact import PaymentContact +from .payment_currency import PaymentCurrency +from .payment_line_item import PaymentLineItem +from .payment_tracking_categories_item import PaymentTrackingCategoriesItem +from .remote_data import RemoteData +from .status_7_d_1_enum import Status7D1Enum +from .tracking_category import TrackingCategory +from .tracking_category_category_type import TrackingCategoryCategoryType +from .tracking_category_company import TrackingCategoryCompany +from .tracking_category_status import TrackingCategoryStatus JournalEntryRequestPaymentsItem = typing.Union[str, Payment] diff --git a/src/merge/resources/accounting/types/journal_entry_request_tracking_categories_item.py b/src/merge/resources/accounting/types/journal_entry_request_tracking_categories_item.py index 5661c699..5661f48d 100644 --- a/src/merge/resources/accounting/types/journal_entry_request_tracking_categories_item.py +++ b/src/merge/resources/accounting/types/journal_entry_request_tracking_categories_item.py @@ -2,6 +2,21 @@ import typing +from .accounting_phone_number import AccountingPhoneNumber +from .address import Address +from .address_country import AddressCountry +from .address_type import AddressType +from .address_type_enum import AddressTypeEnum +from .category_type_enum import CategoryTypeEnum +from .company_info import CompanyInfo +from .company_info_currency import CompanyInfoCurrency +from .country_enum import CountryEnum +from .currency_enum import CurrencyEnum +from .remote_data import RemoteData +from .status_7_d_1_enum import Status7D1Enum from .tracking_category import TrackingCategory +from .tracking_category_category_type import TrackingCategoryCategoryType +from .tracking_category_company import TrackingCategoryCompany +from .tracking_category_status import TrackingCategoryStatus JournalEntryRequestTrackingCategoriesItem = typing.Union[str, TrackingCategory] diff --git a/src/merge/resources/accounting/types/journal_entry_tracking_categories_item.py b/src/merge/resources/accounting/types/journal_entry_tracking_categories_item.py index dc3f6b22..4434e9df 100644 --- a/src/merge/resources/accounting/types/journal_entry_tracking_categories_item.py +++ b/src/merge/resources/accounting/types/journal_entry_tracking_categories_item.py @@ -2,6 +2,21 @@ import typing +from .accounting_phone_number import AccountingPhoneNumber +from .address import Address +from .address_country import AddressCountry +from .address_type import AddressType +from .address_type_enum import AddressTypeEnum +from .category_type_enum import CategoryTypeEnum +from .company_info import CompanyInfo +from .company_info_currency import CompanyInfoCurrency +from .country_enum import CountryEnum +from .currency_enum import CurrencyEnum +from .remote_data import RemoteData +from .status_7_d_1_enum import Status7D1Enum from .tracking_category import TrackingCategory +from .tracking_category_category_type import TrackingCategoryCategoryType +from .tracking_category_company import TrackingCategoryCompany +from .tracking_category_status import TrackingCategoryStatus JournalEntryTrackingCategoriesItem = typing.Union[str, TrackingCategory] diff --git a/src/merge/resources/accounting/types/journal_line_account.py b/src/merge/resources/accounting/types/journal_line_account.py index 3f1ff32c..9ec62030 100644 --- a/src/merge/resources/accounting/types/journal_line_account.py +++ b/src/merge/resources/accounting/types/journal_line_account.py @@ -3,5 +3,12 @@ import typing from .account import Account +from .account_classification import AccountClassification +from .account_currency import AccountCurrency +from .account_status import AccountStatus +from .account_status_enum import AccountStatusEnum +from .classification_enum import ClassificationEnum +from .currency_enum import CurrencyEnum +from .remote_data import RemoteData JournalLineAccount = typing.Union[str, Account] diff --git a/src/merge/resources/accounting/types/journal_line_request_account.py b/src/merge/resources/accounting/types/journal_line_request_account.py index a16863b7..46f08508 100644 --- a/src/merge/resources/accounting/types/journal_line_request_account.py +++ b/src/merge/resources/accounting/types/journal_line_request_account.py @@ -3,5 +3,12 @@ import typing from .account import Account +from .account_classification import AccountClassification +from .account_currency import AccountCurrency +from .account_status import AccountStatus +from .account_status_enum import AccountStatusEnum +from .classification_enum import ClassificationEnum +from .currency_enum import CurrencyEnum +from .remote_data import RemoteData JournalLineRequestAccount = typing.Union[str, Account] diff --git a/src/merge/resources/accounting/types/journal_line_request_tracking_categories_item.py b/src/merge/resources/accounting/types/journal_line_request_tracking_categories_item.py index 8833229a..df5f6d27 100644 --- a/src/merge/resources/accounting/types/journal_line_request_tracking_categories_item.py +++ b/src/merge/resources/accounting/types/journal_line_request_tracking_categories_item.py @@ -2,6 +2,21 @@ import typing +from .accounting_phone_number import AccountingPhoneNumber +from .address import Address +from .address_country import AddressCountry +from .address_type import AddressType +from .address_type_enum import AddressTypeEnum +from .category_type_enum import CategoryTypeEnum +from .company_info import CompanyInfo +from .company_info_currency import CompanyInfoCurrency +from .country_enum import CountryEnum +from .currency_enum import CurrencyEnum +from .remote_data import RemoteData +from .status_7_d_1_enum import Status7D1Enum from .tracking_category import TrackingCategory +from .tracking_category_category_type import TrackingCategoryCategoryType +from .tracking_category_company import TrackingCategoryCompany +from .tracking_category_status import TrackingCategoryStatus JournalLineRequestTrackingCategoriesItem = typing.Union[str, TrackingCategory] diff --git a/src/merge/resources/accounting/types/journal_line_request_tracking_category.py b/src/merge/resources/accounting/types/journal_line_request_tracking_category.py index 995705d7..561e55d0 100644 --- a/src/merge/resources/accounting/types/journal_line_request_tracking_category.py +++ b/src/merge/resources/accounting/types/journal_line_request_tracking_category.py @@ -2,6 +2,21 @@ import typing +from .accounting_phone_number import AccountingPhoneNumber +from .address import Address +from .address_country import AddressCountry +from .address_type import AddressType +from .address_type_enum import AddressTypeEnum +from .category_type_enum import CategoryTypeEnum +from .company_info import CompanyInfo +from .company_info_currency import CompanyInfoCurrency +from .country_enum import CountryEnum +from .currency_enum import CurrencyEnum +from .remote_data import RemoteData +from .status_7_d_1_enum import Status7D1Enum from .tracking_category import TrackingCategory +from .tracking_category_category_type import TrackingCategoryCategoryType +from .tracking_category_company import TrackingCategoryCompany +from .tracking_category_status import TrackingCategoryStatus JournalLineRequestTrackingCategory = typing.Union[str, TrackingCategory] diff --git a/src/merge/resources/accounting/types/journal_line_tracking_categories_item.py b/src/merge/resources/accounting/types/journal_line_tracking_categories_item.py index e63bdbaa..833b1ca0 100644 --- a/src/merge/resources/accounting/types/journal_line_tracking_categories_item.py +++ b/src/merge/resources/accounting/types/journal_line_tracking_categories_item.py @@ -2,6 +2,21 @@ import typing +from .accounting_phone_number import AccountingPhoneNumber +from .address import Address +from .address_country import AddressCountry +from .address_type import AddressType +from .address_type_enum import AddressTypeEnum +from .category_type_enum import CategoryTypeEnum +from .company_info import CompanyInfo +from .company_info_currency import CompanyInfoCurrency +from .country_enum import CountryEnum +from .currency_enum import CurrencyEnum +from .remote_data import RemoteData +from .status_7_d_1_enum import Status7D1Enum from .tracking_category import TrackingCategory +from .tracking_category_category_type import TrackingCategoryCategoryType +from .tracking_category_company import TrackingCategoryCompany +from .tracking_category_status import TrackingCategoryStatus JournalLineTrackingCategoriesItem = typing.Union[str, TrackingCategory] diff --git a/src/merge/resources/accounting/types/journal_line_tracking_category.py b/src/merge/resources/accounting/types/journal_line_tracking_category.py index 122dffa0..abba7007 100644 --- a/src/merge/resources/accounting/types/journal_line_tracking_category.py +++ b/src/merge/resources/accounting/types/journal_line_tracking_category.py @@ -2,6 +2,21 @@ import typing +from .accounting_phone_number import AccountingPhoneNumber +from .address import Address +from .address_country import AddressCountry +from .address_type import AddressType +from .address_type_enum import AddressTypeEnum +from .category_type_enum import CategoryTypeEnum +from .company_info import CompanyInfo +from .company_info_currency import CompanyInfoCurrency +from .country_enum import CountryEnum +from .currency_enum import CurrencyEnum +from .remote_data import RemoteData +from .status_7_d_1_enum import Status7D1Enum from .tracking_category import TrackingCategory +from .tracking_category_category_type import TrackingCategoryCategoryType +from .tracking_category_company import TrackingCategoryCompany +from .tracking_category_status import TrackingCategoryStatus JournalLineTrackingCategory = typing.Union[str, TrackingCategory] diff --git a/src/merge/resources/accounting/types/payment_account.py b/src/merge/resources/accounting/types/payment_account.py index 1134aaab..815751b9 100644 --- a/src/merge/resources/accounting/types/payment_account.py +++ b/src/merge/resources/accounting/types/payment_account.py @@ -3,5 +3,12 @@ import typing from .account import Account +from .account_classification import AccountClassification +from .account_currency import AccountCurrency +from .account_status import AccountStatus +from .account_status_enum import AccountStatusEnum +from .classification_enum import ClassificationEnum +from .currency_enum import CurrencyEnum +from .remote_data import RemoteData PaymentAccount = typing.Union[str, Account] diff --git a/src/merge/resources/accounting/types/payment_accounting_period.py b/src/merge/resources/accounting/types/payment_accounting_period.py index f53d132d..344469f8 100644 --- a/src/merge/resources/accounting/types/payment_accounting_period.py +++ b/src/merge/resources/accounting/types/payment_accounting_period.py @@ -3,5 +3,7 @@ import typing from .accounting_period import AccountingPeriod +from .accounting_period_status import AccountingPeriodStatus +from .accounting_period_status_enum import AccountingPeriodStatusEnum PaymentAccountingPeriod = typing.Union[str, AccountingPeriod] diff --git a/src/merge/resources/accounting/types/payment_company.py b/src/merge/resources/accounting/types/payment_company.py index 8dfe2cc3..569f75b9 100644 --- a/src/merge/resources/accounting/types/payment_company.py +++ b/src/merge/resources/accounting/types/payment_company.py @@ -2,6 +2,15 @@ import typing +from .accounting_phone_number import AccountingPhoneNumber +from .address import Address +from .address_country import AddressCountry +from .address_type import AddressType +from .address_type_enum import AddressTypeEnum from .company_info import CompanyInfo +from .company_info_currency import CompanyInfoCurrency +from .country_enum import CountryEnum +from .currency_enum import CurrencyEnum +from .remote_data import RemoteData PaymentCompany = typing.Union[str, CompanyInfo] diff --git a/src/merge/resources/accounting/types/payment_contact.py b/src/merge/resources/accounting/types/payment_contact.py index 70e0b700..5eba7838 100644 --- a/src/merge/resources/accounting/types/payment_contact.py +++ b/src/merge/resources/accounting/types/payment_contact.py @@ -2,6 +2,16 @@ import typing +from .accounting_phone_number import AccountingPhoneNumber +from .address import Address +from .address_country import AddressCountry +from .address_type import AddressType +from .address_type_enum import AddressTypeEnum from .contact import Contact +from .contact_addresses_item import ContactAddressesItem +from .contact_status import ContactStatus +from .country_enum import CountryEnum +from .remote_data import RemoteData +from .status_7_d_1_enum import Status7D1Enum PaymentContact = typing.Union[str, Contact] diff --git a/src/merge/resources/accounting/types/payment_request_account.py b/src/merge/resources/accounting/types/payment_request_account.py index de594743..7272f05f 100644 --- a/src/merge/resources/accounting/types/payment_request_account.py +++ b/src/merge/resources/accounting/types/payment_request_account.py @@ -3,5 +3,12 @@ import typing from .account import Account +from .account_classification import AccountClassification +from .account_currency import AccountCurrency +from .account_status import AccountStatus +from .account_status_enum import AccountStatusEnum +from .classification_enum import ClassificationEnum +from .currency_enum import CurrencyEnum +from .remote_data import RemoteData PaymentRequestAccount = typing.Union[str, Account] diff --git a/src/merge/resources/accounting/types/payment_request_accounting_period.py b/src/merge/resources/accounting/types/payment_request_accounting_period.py index 893f6f8e..15de7895 100644 --- a/src/merge/resources/accounting/types/payment_request_accounting_period.py +++ b/src/merge/resources/accounting/types/payment_request_accounting_period.py @@ -3,5 +3,7 @@ import typing from .accounting_period import AccountingPeriod +from .accounting_period_status import AccountingPeriodStatus +from .accounting_period_status_enum import AccountingPeriodStatusEnum PaymentRequestAccountingPeriod = typing.Union[str, AccountingPeriod] diff --git a/src/merge/resources/accounting/types/payment_request_company.py b/src/merge/resources/accounting/types/payment_request_company.py index 1ca40fe1..5861c163 100644 --- a/src/merge/resources/accounting/types/payment_request_company.py +++ b/src/merge/resources/accounting/types/payment_request_company.py @@ -2,6 +2,15 @@ import typing +from .accounting_phone_number import AccountingPhoneNumber +from .address import Address +from .address_country import AddressCountry +from .address_type import AddressType +from .address_type_enum import AddressTypeEnum from .company_info import CompanyInfo +from .company_info_currency import CompanyInfoCurrency +from .country_enum import CountryEnum +from .currency_enum import CurrencyEnum +from .remote_data import RemoteData PaymentRequestCompany = typing.Union[str, CompanyInfo] diff --git a/src/merge/resources/accounting/types/payment_request_contact.py b/src/merge/resources/accounting/types/payment_request_contact.py index 190cbc2f..2d858a6f 100644 --- a/src/merge/resources/accounting/types/payment_request_contact.py +++ b/src/merge/resources/accounting/types/payment_request_contact.py @@ -2,6 +2,16 @@ import typing +from .accounting_phone_number import AccountingPhoneNumber +from .address import Address +from .address_country import AddressCountry +from .address_type import AddressType +from .address_type_enum import AddressTypeEnum from .contact import Contact +from .contact_addresses_item import ContactAddressesItem +from .contact_status import ContactStatus +from .country_enum import CountryEnum +from .remote_data import RemoteData +from .status_7_d_1_enum import Status7D1Enum PaymentRequestContact = typing.Union[str, Contact] diff --git a/src/merge/resources/accounting/types/payment_request_tracking_categories_item.py b/src/merge/resources/accounting/types/payment_request_tracking_categories_item.py index a976f214..a34fe3a5 100644 --- a/src/merge/resources/accounting/types/payment_request_tracking_categories_item.py +++ b/src/merge/resources/accounting/types/payment_request_tracking_categories_item.py @@ -2,6 +2,21 @@ import typing +from .accounting_phone_number import AccountingPhoneNumber +from .address import Address +from .address_country import AddressCountry +from .address_type import AddressType +from .address_type_enum import AddressTypeEnum +from .category_type_enum import CategoryTypeEnum +from .company_info import CompanyInfo +from .company_info_currency import CompanyInfoCurrency +from .country_enum import CountryEnum +from .currency_enum import CurrencyEnum +from .remote_data import RemoteData +from .status_7_d_1_enum import Status7D1Enum from .tracking_category import TrackingCategory +from .tracking_category_category_type import TrackingCategoryCategoryType +from .tracking_category_company import TrackingCategoryCompany +from .tracking_category_status import TrackingCategoryStatus PaymentRequestTrackingCategoriesItem = typing.Union[str, TrackingCategory] diff --git a/src/merge/resources/accounting/types/payment_tracking_categories_item.py b/src/merge/resources/accounting/types/payment_tracking_categories_item.py index cf8204c9..c3e08e49 100644 --- a/src/merge/resources/accounting/types/payment_tracking_categories_item.py +++ b/src/merge/resources/accounting/types/payment_tracking_categories_item.py @@ -2,6 +2,21 @@ import typing +from .accounting_phone_number import AccountingPhoneNumber +from .address import Address +from .address_country import AddressCountry +from .address_type import AddressType +from .address_type_enum import AddressTypeEnum +from .category_type_enum import CategoryTypeEnum +from .company_info import CompanyInfo +from .company_info_currency import CompanyInfoCurrency +from .country_enum import CountryEnum +from .currency_enum import CurrencyEnum +from .remote_data import RemoteData +from .status_7_d_1_enum import Status7D1Enum from .tracking_category import TrackingCategory +from .tracking_category_category_type import TrackingCategoryCategoryType +from .tracking_category_company import TrackingCategoryCompany +from .tracking_category_status import TrackingCategoryStatus PaymentTrackingCategoriesItem = typing.Union[str, TrackingCategory] diff --git a/src/merge/resources/accounting/types/purchase_order_accounting_period.py b/src/merge/resources/accounting/types/purchase_order_accounting_period.py index a2e3e1eb..9b309912 100644 --- a/src/merge/resources/accounting/types/purchase_order_accounting_period.py +++ b/src/merge/resources/accounting/types/purchase_order_accounting_period.py @@ -3,5 +3,7 @@ import typing from .accounting_period import AccountingPeriod +from .accounting_period_status import AccountingPeriodStatus +from .accounting_period_status_enum import AccountingPeriodStatusEnum PurchaseOrderAccountingPeriod = typing.Union[str, AccountingPeriod] diff --git a/src/merge/resources/accounting/types/purchase_order_company.py b/src/merge/resources/accounting/types/purchase_order_company.py index ca2f0db9..a7a12d5a 100644 --- a/src/merge/resources/accounting/types/purchase_order_company.py +++ b/src/merge/resources/accounting/types/purchase_order_company.py @@ -2,6 +2,15 @@ import typing +from .accounting_phone_number import AccountingPhoneNumber +from .address import Address +from .address_country import AddressCountry +from .address_type import AddressType +from .address_type_enum import AddressTypeEnum from .company_info import CompanyInfo +from .company_info_currency import CompanyInfoCurrency +from .country_enum import CountryEnum +from .currency_enum import CurrencyEnum +from .remote_data import RemoteData PurchaseOrderCompany = typing.Union[str, CompanyInfo] diff --git a/src/merge/resources/accounting/types/purchase_order_delivery_address.py b/src/merge/resources/accounting/types/purchase_order_delivery_address.py index 333453d3..e79e8a35 100644 --- a/src/merge/resources/accounting/types/purchase_order_delivery_address.py +++ b/src/merge/resources/accounting/types/purchase_order_delivery_address.py @@ -3,5 +3,9 @@ import typing from .address import Address +from .address_country import AddressCountry +from .address_type import AddressType +from .address_type_enum import AddressTypeEnum +from .country_enum import CountryEnum PurchaseOrderDeliveryAddress = typing.Union[str, Address] diff --git a/src/merge/resources/accounting/types/purchase_order_line_item_item.py b/src/merge/resources/accounting/types/purchase_order_line_item_item.py index b1a2a0cf..460cb500 100644 --- a/src/merge/resources/accounting/types/purchase_order_line_item_item.py +++ b/src/merge/resources/accounting/types/purchase_order_line_item_item.py @@ -2,6 +2,27 @@ import typing +from .account import Account +from .account_classification import AccountClassification +from .account_currency import AccountCurrency +from .account_status import AccountStatus +from .account_status_enum import AccountStatusEnum +from .accounting_phone_number import AccountingPhoneNumber +from .address import Address +from .address_country import AddressCountry +from .address_type import AddressType +from .address_type_enum import AddressTypeEnum +from .classification_enum import ClassificationEnum +from .company_info import CompanyInfo +from .company_info_currency import CompanyInfoCurrency +from .country_enum import CountryEnum +from .currency_enum import CurrencyEnum from .item import Item +from .item_company import ItemCompany +from .item_purchase_account import ItemPurchaseAccount +from .item_sales_account import ItemSalesAccount +from .item_status import ItemStatus +from .remote_data import RemoteData +from .status_7_d_1_enum import Status7D1Enum PurchaseOrderLineItemItem = typing.Union[str, Item] diff --git a/src/merge/resources/accounting/types/purchase_order_line_item_request_item.py b/src/merge/resources/accounting/types/purchase_order_line_item_request_item.py index d3474562..3ddcf1e4 100644 --- a/src/merge/resources/accounting/types/purchase_order_line_item_request_item.py +++ b/src/merge/resources/accounting/types/purchase_order_line_item_request_item.py @@ -2,6 +2,27 @@ import typing +from .account import Account +from .account_classification import AccountClassification +from .account_currency import AccountCurrency +from .account_status import AccountStatus +from .account_status_enum import AccountStatusEnum +from .accounting_phone_number import AccountingPhoneNumber +from .address import Address +from .address_country import AddressCountry +from .address_type import AddressType +from .address_type_enum import AddressTypeEnum +from .classification_enum import ClassificationEnum +from .company_info import CompanyInfo +from .company_info_currency import CompanyInfoCurrency +from .country_enum import CountryEnum +from .currency_enum import CurrencyEnum from .item import Item +from .item_company import ItemCompany +from .item_purchase_account import ItemPurchaseAccount +from .item_sales_account import ItemSalesAccount +from .item_status import ItemStatus +from .remote_data import RemoteData +from .status_7_d_1_enum import Status7D1Enum PurchaseOrderLineItemRequestItem = typing.Union[str, Item] diff --git a/src/merge/resources/accounting/types/purchase_order_request_company.py b/src/merge/resources/accounting/types/purchase_order_request_company.py index 81167ef1..7d4453d4 100644 --- a/src/merge/resources/accounting/types/purchase_order_request_company.py +++ b/src/merge/resources/accounting/types/purchase_order_request_company.py @@ -2,6 +2,15 @@ import typing +from .accounting_phone_number import AccountingPhoneNumber +from .address import Address +from .address_country import AddressCountry +from .address_type import AddressType +from .address_type_enum import AddressTypeEnum from .company_info import CompanyInfo +from .company_info_currency import CompanyInfoCurrency +from .country_enum import CountryEnum +from .currency_enum import CurrencyEnum +from .remote_data import RemoteData PurchaseOrderRequestCompany = typing.Union[str, CompanyInfo] diff --git a/src/merge/resources/accounting/types/purchase_order_request_delivery_address.py b/src/merge/resources/accounting/types/purchase_order_request_delivery_address.py index 5387a269..4b711d30 100644 --- a/src/merge/resources/accounting/types/purchase_order_request_delivery_address.py +++ b/src/merge/resources/accounting/types/purchase_order_request_delivery_address.py @@ -3,5 +3,9 @@ import typing from .address import Address +from .address_country import AddressCountry +from .address_type import AddressType +from .address_type_enum import AddressTypeEnum +from .country_enum import CountryEnum PurchaseOrderRequestDeliveryAddress = typing.Union[str, Address] diff --git a/src/merge/resources/accounting/types/purchase_order_request_tracking_categories_item.py b/src/merge/resources/accounting/types/purchase_order_request_tracking_categories_item.py index e0006bb6..6c60370c 100644 --- a/src/merge/resources/accounting/types/purchase_order_request_tracking_categories_item.py +++ b/src/merge/resources/accounting/types/purchase_order_request_tracking_categories_item.py @@ -2,6 +2,21 @@ import typing +from .accounting_phone_number import AccountingPhoneNumber +from .address import Address +from .address_country import AddressCountry +from .address_type import AddressType +from .address_type_enum import AddressTypeEnum +from .category_type_enum import CategoryTypeEnum +from .company_info import CompanyInfo +from .company_info_currency import CompanyInfoCurrency +from .country_enum import CountryEnum +from .currency_enum import CurrencyEnum +from .remote_data import RemoteData +from .status_7_d_1_enum import Status7D1Enum from .tracking_category import TrackingCategory +from .tracking_category_category_type import TrackingCategoryCategoryType +from .tracking_category_company import TrackingCategoryCompany +from .tracking_category_status import TrackingCategoryStatus PurchaseOrderRequestTrackingCategoriesItem = typing.Union[str, TrackingCategory] diff --git a/src/merge/resources/accounting/types/purchase_order_request_vendor.py b/src/merge/resources/accounting/types/purchase_order_request_vendor.py index 7d0dae2b..f9572ded 100644 --- a/src/merge/resources/accounting/types/purchase_order_request_vendor.py +++ b/src/merge/resources/accounting/types/purchase_order_request_vendor.py @@ -2,6 +2,16 @@ import typing +from .accounting_phone_number import AccountingPhoneNumber +from .address import Address +from .address_country import AddressCountry +from .address_type import AddressType +from .address_type_enum import AddressTypeEnum from .contact import Contact +from .contact_addresses_item import ContactAddressesItem +from .contact_status import ContactStatus +from .country_enum import CountryEnum +from .remote_data import RemoteData +from .status_7_d_1_enum import Status7D1Enum PurchaseOrderRequestVendor = typing.Union[str, Contact] diff --git a/src/merge/resources/accounting/types/purchase_order_tracking_categories_item.py b/src/merge/resources/accounting/types/purchase_order_tracking_categories_item.py index 6662ceaa..1b154e00 100644 --- a/src/merge/resources/accounting/types/purchase_order_tracking_categories_item.py +++ b/src/merge/resources/accounting/types/purchase_order_tracking_categories_item.py @@ -2,6 +2,21 @@ import typing +from .accounting_phone_number import AccountingPhoneNumber +from .address import Address +from .address_country import AddressCountry +from .address_type import AddressType +from .address_type_enum import AddressTypeEnum +from .category_type_enum import CategoryTypeEnum +from .company_info import CompanyInfo +from .company_info_currency import CompanyInfoCurrency +from .country_enum import CountryEnum +from .currency_enum import CurrencyEnum +from .remote_data import RemoteData +from .status_7_d_1_enum import Status7D1Enum from .tracking_category import TrackingCategory +from .tracking_category_category_type import TrackingCategoryCategoryType +from .tracking_category_company import TrackingCategoryCompany +from .tracking_category_status import TrackingCategoryStatus PurchaseOrderTrackingCategoriesItem = typing.Union[str, TrackingCategory] diff --git a/src/merge/resources/accounting/types/purchase_order_vendor.py b/src/merge/resources/accounting/types/purchase_order_vendor.py index a0ead21e..316a240f 100644 --- a/src/merge/resources/accounting/types/purchase_order_vendor.py +++ b/src/merge/resources/accounting/types/purchase_order_vendor.py @@ -2,6 +2,16 @@ import typing +from .accounting_phone_number import AccountingPhoneNumber +from .address import Address +from .address_country import AddressCountry +from .address_type import AddressType +from .address_type_enum import AddressTypeEnum from .contact import Contact +from .contact_addresses_item import ContactAddressesItem +from .contact_status import ContactStatus +from .country_enum import CountryEnum +from .remote_data import RemoteData +from .status_7_d_1_enum import Status7D1Enum PurchaseOrderVendor = typing.Union[str, Contact] diff --git a/src/merge/resources/accounting/types/tax_rate_company.py b/src/merge/resources/accounting/types/tax_rate_company.py index a3b6cd68..ce608cd4 100644 --- a/src/merge/resources/accounting/types/tax_rate_company.py +++ b/src/merge/resources/accounting/types/tax_rate_company.py @@ -2,6 +2,15 @@ import typing +from .accounting_phone_number import AccountingPhoneNumber +from .address import Address +from .address_country import AddressCountry +from .address_type import AddressType +from .address_type_enum import AddressTypeEnum from .company_info import CompanyInfo +from .company_info_currency import CompanyInfoCurrency +from .country_enum import CountryEnum +from .currency_enum import CurrencyEnum +from .remote_data import RemoteData TaxRateCompany = typing.Union[str, CompanyInfo] diff --git a/src/merge/resources/accounting/types/tracking_category_company.py b/src/merge/resources/accounting/types/tracking_category_company.py index 47be6b88..767448b6 100644 --- a/src/merge/resources/accounting/types/tracking_category_company.py +++ b/src/merge/resources/accounting/types/tracking_category_company.py @@ -2,6 +2,15 @@ import typing +from .accounting_phone_number import AccountingPhoneNumber +from .address import Address +from .address_country import AddressCountry +from .address_type import AddressType +from .address_type_enum import AddressTypeEnum from .company_info import CompanyInfo +from .company_info_currency import CompanyInfoCurrency +from .country_enum import CountryEnum +from .currency_enum import CurrencyEnum +from .remote_data import RemoteData TrackingCategoryCompany = typing.Union[str, CompanyInfo] diff --git a/src/merge/resources/accounting/types/transaction_account.py b/src/merge/resources/accounting/types/transaction_account.py index d52c48e8..e57107b5 100644 --- a/src/merge/resources/accounting/types/transaction_account.py +++ b/src/merge/resources/accounting/types/transaction_account.py @@ -3,5 +3,12 @@ import typing from .account import Account +from .account_classification import AccountClassification +from .account_currency import AccountCurrency +from .account_status import AccountStatus +from .account_status_enum import AccountStatusEnum +from .classification_enum import ClassificationEnum +from .currency_enum import CurrencyEnum +from .remote_data import RemoteData TransactionAccount = typing.Union[str, Account] diff --git a/src/merge/resources/accounting/types/transaction_accounting_period.py b/src/merge/resources/accounting/types/transaction_accounting_period.py index 7de59158..b2a17bce 100644 --- a/src/merge/resources/accounting/types/transaction_accounting_period.py +++ b/src/merge/resources/accounting/types/transaction_accounting_period.py @@ -3,5 +3,7 @@ import typing from .accounting_period import AccountingPeriod +from .accounting_period_status import AccountingPeriodStatus +from .accounting_period_status_enum import AccountingPeriodStatusEnum TransactionAccountingPeriod = typing.Union[str, AccountingPeriod] diff --git a/src/merge/resources/accounting/types/transaction_contact.py b/src/merge/resources/accounting/types/transaction_contact.py index 424ca153..6f1ec978 100644 --- a/src/merge/resources/accounting/types/transaction_contact.py +++ b/src/merge/resources/accounting/types/transaction_contact.py @@ -2,6 +2,16 @@ import typing +from .accounting_phone_number import AccountingPhoneNumber +from .address import Address +from .address_country import AddressCountry +from .address_type import AddressType +from .address_type_enum import AddressTypeEnum from .contact import Contact +from .contact_addresses_item import ContactAddressesItem +from .contact_status import ContactStatus +from .country_enum import CountryEnum +from .remote_data import RemoteData +from .status_7_d_1_enum import Status7D1Enum TransactionContact = typing.Union[str, Contact] diff --git a/src/merge/resources/accounting/types/transaction_line_item_item.py b/src/merge/resources/accounting/types/transaction_line_item_item.py index 88c664ff..0351a60c 100644 --- a/src/merge/resources/accounting/types/transaction_line_item_item.py +++ b/src/merge/resources/accounting/types/transaction_line_item_item.py @@ -2,6 +2,27 @@ import typing +from .account import Account +from .account_classification import AccountClassification +from .account_currency import AccountCurrency +from .account_status import AccountStatus +from .account_status_enum import AccountStatusEnum +from .accounting_phone_number import AccountingPhoneNumber +from .address import Address +from .address_country import AddressCountry +from .address_type import AddressType +from .address_type_enum import AddressTypeEnum +from .classification_enum import ClassificationEnum +from .company_info import CompanyInfo +from .company_info_currency import CompanyInfoCurrency +from .country_enum import CountryEnum +from .currency_enum import CurrencyEnum from .item import Item +from .item_company import ItemCompany +from .item_purchase_account import ItemPurchaseAccount +from .item_sales_account import ItemSalesAccount +from .item_status import ItemStatus +from .remote_data import RemoteData +from .status_7_d_1_enum import Status7D1Enum TransactionLineItemItem = typing.Union[str, Item] diff --git a/src/merge/resources/accounting/types/transaction_tracking_categories_item.py b/src/merge/resources/accounting/types/transaction_tracking_categories_item.py index 08b778c9..571ee5a4 100644 --- a/src/merge/resources/accounting/types/transaction_tracking_categories_item.py +++ b/src/merge/resources/accounting/types/transaction_tracking_categories_item.py @@ -2,6 +2,21 @@ import typing +from .accounting_phone_number import AccountingPhoneNumber +from .address import Address +from .address_country import AddressCountry +from .address_type import AddressType +from .address_type_enum import AddressTypeEnum +from .category_type_enum import CategoryTypeEnum +from .company_info import CompanyInfo +from .company_info_currency import CompanyInfoCurrency +from .country_enum import CountryEnum +from .currency_enum import CurrencyEnum +from .remote_data import RemoteData +from .status_7_d_1_enum import Status7D1Enum from .tracking_category import TrackingCategory +from .tracking_category_category_type import TrackingCategoryCategoryType +from .tracking_category_company import TrackingCategoryCompany +from .tracking_category_status import TrackingCategoryStatus TransactionTrackingCategoriesItem = typing.Union[str, TrackingCategory] diff --git a/src/merge/resources/accounting/types/vendor_credit_accounting_period.py b/src/merge/resources/accounting/types/vendor_credit_accounting_period.py index 3ae13422..bb208c23 100644 --- a/src/merge/resources/accounting/types/vendor_credit_accounting_period.py +++ b/src/merge/resources/accounting/types/vendor_credit_accounting_period.py @@ -3,5 +3,7 @@ import typing from .accounting_period import AccountingPeriod +from .accounting_period_status import AccountingPeriodStatus +from .accounting_period_status_enum import AccountingPeriodStatusEnum VendorCreditAccountingPeriod = typing.Union[str, AccountingPeriod] diff --git a/src/merge/resources/accounting/types/vendor_credit_company.py b/src/merge/resources/accounting/types/vendor_credit_company.py index 1219a0c8..98ec10c8 100644 --- a/src/merge/resources/accounting/types/vendor_credit_company.py +++ b/src/merge/resources/accounting/types/vendor_credit_company.py @@ -2,6 +2,15 @@ import typing +from .accounting_phone_number import AccountingPhoneNumber +from .address import Address +from .address_country import AddressCountry +from .address_type import AddressType +from .address_type_enum import AddressTypeEnum from .company_info import CompanyInfo +from .company_info_currency import CompanyInfoCurrency +from .country_enum import CountryEnum +from .currency_enum import CurrencyEnum +from .remote_data import RemoteData VendorCreditCompany = typing.Union[str, CompanyInfo] diff --git a/src/merge/resources/accounting/types/vendor_credit_line_account.py b/src/merge/resources/accounting/types/vendor_credit_line_account.py index 22aad4ac..3c775d75 100644 --- a/src/merge/resources/accounting/types/vendor_credit_line_account.py +++ b/src/merge/resources/accounting/types/vendor_credit_line_account.py @@ -3,5 +3,12 @@ import typing from .account import Account +from .account_classification import AccountClassification +from .account_currency import AccountCurrency +from .account_status import AccountStatus +from .account_status_enum import AccountStatusEnum +from .classification_enum import ClassificationEnum +from .currency_enum import CurrencyEnum +from .remote_data import RemoteData VendorCreditLineAccount = typing.Union[str, Account] diff --git a/src/merge/resources/accounting/types/vendor_credit_tracking_categories_item.py b/src/merge/resources/accounting/types/vendor_credit_tracking_categories_item.py index f43c7cbe..598528cc 100644 --- a/src/merge/resources/accounting/types/vendor_credit_tracking_categories_item.py +++ b/src/merge/resources/accounting/types/vendor_credit_tracking_categories_item.py @@ -2,6 +2,21 @@ import typing +from .accounting_phone_number import AccountingPhoneNumber +from .address import Address +from .address_country import AddressCountry +from .address_type import AddressType +from .address_type_enum import AddressTypeEnum +from .category_type_enum import CategoryTypeEnum +from .company_info import CompanyInfo +from .company_info_currency import CompanyInfoCurrency +from .country_enum import CountryEnum +from .currency_enum import CurrencyEnum +from .remote_data import RemoteData +from .status_7_d_1_enum import Status7D1Enum from .tracking_category import TrackingCategory +from .tracking_category_category_type import TrackingCategoryCategoryType +from .tracking_category_company import TrackingCategoryCompany +from .tracking_category_status import TrackingCategoryStatus VendorCreditTrackingCategoriesItem = typing.Union[str, TrackingCategory] diff --git a/src/merge/resources/accounting/types/vendor_credit_vendor.py b/src/merge/resources/accounting/types/vendor_credit_vendor.py index 6e8012e7..e2d2acce 100644 --- a/src/merge/resources/accounting/types/vendor_credit_vendor.py +++ b/src/merge/resources/accounting/types/vendor_credit_vendor.py @@ -2,6 +2,16 @@ import typing +from .accounting_phone_number import AccountingPhoneNumber +from .address import Address +from .address_country import AddressCountry +from .address_type import AddressType +from .address_type_enum import AddressTypeEnum from .contact import Contact +from .contact_addresses_item import ContactAddressesItem +from .contact_status import ContactStatus +from .country_enum import CountryEnum +from .remote_data import RemoteData +from .status_7_d_1_enum import Status7D1Enum VendorCreditVendor = typing.Union[str, Contact] 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/ats/types/activity_request_user.py b/src/merge/resources/ats/types/activity_request_user.py index 9c4dfb0f..02541ae9 100644 --- a/src/merge/resources/ats/types/activity_request_user.py +++ b/src/merge/resources/ats/types/activity_request_user.py @@ -2,6 +2,9 @@ import typing +from .access_role_enum import AccessRoleEnum +from .remote_data import RemoteData from .remote_user import RemoteUser +from .remote_user_access_role import RemoteUserAccessRole ActivityRequestUser = typing.Union[str, RemoteUser] diff --git a/src/merge/resources/ats/types/activity_user.py b/src/merge/resources/ats/types/activity_user.py index db261e0f..59091f29 100644 --- a/src/merge/resources/ats/types/activity_user.py +++ b/src/merge/resources/ats/types/activity_user.py @@ -2,6 +2,9 @@ import typing +from .access_role_enum import AccessRoleEnum +from .remote_data import RemoteData from .remote_user import RemoteUser +from .remote_user_access_role import RemoteUserAccessRole ActivityUser = typing.Union[str, RemoteUser] diff --git a/src/merge/resources/ats/types/application.py b/src/merge/resources/ats/types/application.py index 5eadb333..efff9c2d 100644 --- a/src/merge/resources/ats/types/application.py +++ b/src/merge/resources/ats/types/application.py @@ -33,7 +33,7 @@ class Application(pydantic.BaseModel): id: typing.Optional[str] remote_id: typing.Optional[str] = pydantic.Field(description="The third-party API ID of the matching object.") - candidate: typing.Optional[ApplicationCandidate] = pydantic.Field(description="The candidate applying.") + candidate: typing.Optional["ApplicationCandidate"] = pydantic.Field(description="The candidate applying.") job: typing.Optional[ApplicationJob] = pydantic.Field(description="The job being applied for.") applied_at: typing.Optional[dt.datetime] = pydantic.Field(description="When the application was submitted.") rejected_at: typing.Optional[dt.datetime] = pydantic.Field(description="When the application was rejected.") @@ -70,5 +70,7 @@ class Config: from .application_candidate import ApplicationCandidate # noqa: E402 +from .candidate import Candidate # noqa: E402 +from .candidate_applications_item import CandidateApplicationsItem # noqa: E402 -Application.update_forward_refs() +Application.update_forward_refs(ApplicationCandidate=ApplicationCandidate) diff --git a/src/merge/resources/ats/types/application_candidate.py b/src/merge/resources/ats/types/application_candidate.py index 01933cce..aa361422 100644 --- a/src/merge/resources/ats/types/application_candidate.py +++ b/src/merge/resources/ats/types/application_candidate.py @@ -1,7 +1,44 @@ # This file was auto-generated by Fern from our API Definition. +from __future__ import annotations + import typing -from .candidate import Candidate +from .access_role_enum import AccessRoleEnum +from .application_credited_to import ApplicationCreditedTo +from .application_current_stage import ApplicationCurrentStage +from .application_job import ApplicationJob +from .application_reject_reason import ApplicationRejectReason +from .attachment import Attachment +from .attachment_attachment_type import AttachmentAttachmentType +from .attachment_type_enum import AttachmentTypeEnum +from .candidate_attachments_item import CandidateAttachmentsItem +from .department import Department +from .email_address import EmailAddress +from .email_address_email_address_type import EmailAddressEmailAddressType +from .email_address_type_enum import EmailAddressTypeEnum +from .job import Job +from .job_departments_item import JobDepartmentsItem +from .job_hiring_managers_item import JobHiringManagersItem +from .job_interview_stage import JobInterviewStage +from .job_interview_stage_job import JobInterviewStageJob +from .job_offices_item import JobOfficesItem +from .job_recruiters_item import JobRecruitersItem +from .job_status import JobStatus +from .job_status_enum import JobStatusEnum +from .office import Office +from .phone_number import PhoneNumber +from .phone_number_phone_number_type import PhoneNumberPhoneNumberType +from .phone_number_type_enum import PhoneNumberTypeEnum +from .reject_reason import RejectReason +from .remote_data import RemoteData +from .remote_user import RemoteUser +from .remote_user_access_role import RemoteUserAccessRole +from .url import Url +from .url_type_enum import UrlTypeEnum +from .url_url_type import UrlUrlType -ApplicationCandidate = typing.Union[str, Candidate] +ApplicationCandidate = typing.Union[str, "Candidate"] +from .application import Application # noqa: E402 +from .candidate import Candidate # noqa: E402 +from .candidate_applications_item import CandidateApplicationsItem # noqa: E402 diff --git a/src/merge/resources/ats/types/application_credited_to.py b/src/merge/resources/ats/types/application_credited_to.py index 9e58ac83..5d6653ec 100644 --- a/src/merge/resources/ats/types/application_credited_to.py +++ b/src/merge/resources/ats/types/application_credited_to.py @@ -2,6 +2,9 @@ import typing +from .access_role_enum import AccessRoleEnum +from .remote_data import RemoteData from .remote_user import RemoteUser +from .remote_user_access_role import RemoteUserAccessRole ApplicationCreditedTo = typing.Union[str, RemoteUser] diff --git a/src/merge/resources/ats/types/application_current_stage.py b/src/merge/resources/ats/types/application_current_stage.py index 599a3159..ce169667 100644 --- a/src/merge/resources/ats/types/application_current_stage.py +++ b/src/merge/resources/ats/types/application_current_stage.py @@ -2,6 +2,23 @@ import typing +from .access_role_enum import AccessRoleEnum +from .department import Department +from .job import Job +from .job_departments_item import JobDepartmentsItem +from .job_hiring_managers_item import JobHiringManagersItem from .job_interview_stage import JobInterviewStage +from .job_interview_stage_job import JobInterviewStageJob +from .job_offices_item import JobOfficesItem +from .job_recruiters_item import JobRecruitersItem +from .job_status import JobStatus +from .job_status_enum import JobStatusEnum +from .office import Office +from .remote_data import RemoteData +from .remote_user import RemoteUser +from .remote_user_access_role import RemoteUserAccessRole +from .url import Url +from .url_type_enum import UrlTypeEnum +from .url_url_type import UrlUrlType ApplicationCurrentStage = typing.Union[str, JobInterviewStage] diff --git a/src/merge/resources/ats/types/application_job.py b/src/merge/resources/ats/types/application_job.py index 17285343..3baf0250 100644 --- a/src/merge/resources/ats/types/application_job.py +++ b/src/merge/resources/ats/types/application_job.py @@ -2,6 +2,21 @@ import typing +from .access_role_enum import AccessRoleEnum +from .department import Department from .job import Job +from .job_departments_item import JobDepartmentsItem +from .job_hiring_managers_item import JobHiringManagersItem +from .job_offices_item import JobOfficesItem +from .job_recruiters_item import JobRecruitersItem +from .job_status import JobStatus +from .job_status_enum import JobStatusEnum +from .office import Office +from .remote_data import RemoteData +from .remote_user import RemoteUser +from .remote_user_access_role import RemoteUserAccessRole +from .url import Url +from .url_type_enum import UrlTypeEnum +from .url_url_type import UrlUrlType ApplicationJob = typing.Union[str, Job] diff --git a/src/merge/resources/ats/types/application_reject_reason.py b/src/merge/resources/ats/types/application_reject_reason.py index c4a28a8e..f2477774 100644 --- a/src/merge/resources/ats/types/application_reject_reason.py +++ b/src/merge/resources/ats/types/application_reject_reason.py @@ -3,5 +3,6 @@ import typing from .reject_reason import RejectReason +from .remote_data import RemoteData ApplicationRejectReason = typing.Union[str, RejectReason] diff --git a/src/merge/resources/ats/types/application_request_candidate.py b/src/merge/resources/ats/types/application_request_candidate.py index f931b70e..b19baa9b 100644 --- a/src/merge/resources/ats/types/application_request_candidate.py +++ b/src/merge/resources/ats/types/application_request_candidate.py @@ -1,7 +1,45 @@ # This file was auto-generated by Fern from our API Definition. +from __future__ import annotations + import typing -from .candidate import Candidate +from .access_role_enum import AccessRoleEnum +from .application_credited_to import ApplicationCreditedTo +from .application_current_stage import ApplicationCurrentStage +from .application_job import ApplicationJob +from .application_reject_reason import ApplicationRejectReason +from .attachment import Attachment +from .attachment_attachment_type import AttachmentAttachmentType +from .attachment_type_enum import AttachmentTypeEnum +from .candidate_attachments_item import CandidateAttachmentsItem +from .department import Department +from .email_address import EmailAddress +from .email_address_email_address_type import EmailAddressEmailAddressType +from .email_address_type_enum import EmailAddressTypeEnum +from .job import Job +from .job_departments_item import JobDepartmentsItem +from .job_hiring_managers_item import JobHiringManagersItem +from .job_interview_stage import JobInterviewStage +from .job_interview_stage_job import JobInterviewStageJob +from .job_offices_item import JobOfficesItem +from .job_recruiters_item import JobRecruitersItem +from .job_status import JobStatus +from .job_status_enum import JobStatusEnum +from .office import Office +from .phone_number import PhoneNumber +from .phone_number_phone_number_type import PhoneNumberPhoneNumberType +from .phone_number_type_enum import PhoneNumberTypeEnum +from .reject_reason import RejectReason +from .remote_data import RemoteData +from .remote_user import RemoteUser +from .remote_user_access_role import RemoteUserAccessRole +from .url import Url +from .url_type_enum import UrlTypeEnum +from .url_url_type import UrlUrlType -ApplicationRequestCandidate = typing.Union[str, Candidate] +ApplicationRequestCandidate = typing.Union[str, "Candidate"] +from .application import Application # noqa: E402 +from .application_candidate import ApplicationCandidate # noqa: E402 +from .candidate import Candidate # noqa: E402 +from .candidate_applications_item import CandidateApplicationsItem # noqa: E402 diff --git a/src/merge/resources/ats/types/application_request_credited_to.py b/src/merge/resources/ats/types/application_request_credited_to.py index a8ccaeff..ad88b967 100644 --- a/src/merge/resources/ats/types/application_request_credited_to.py +++ b/src/merge/resources/ats/types/application_request_credited_to.py @@ -2,6 +2,9 @@ import typing +from .access_role_enum import AccessRoleEnum +from .remote_data import RemoteData from .remote_user import RemoteUser +from .remote_user_access_role import RemoteUserAccessRole ApplicationRequestCreditedTo = typing.Union[str, RemoteUser] diff --git a/src/merge/resources/ats/types/application_request_current_stage.py b/src/merge/resources/ats/types/application_request_current_stage.py index dd56a6d3..a625dc1f 100644 --- a/src/merge/resources/ats/types/application_request_current_stage.py +++ b/src/merge/resources/ats/types/application_request_current_stage.py @@ -2,6 +2,23 @@ import typing +from .access_role_enum import AccessRoleEnum +from .department import Department +from .job import Job +from .job_departments_item import JobDepartmentsItem +from .job_hiring_managers_item import JobHiringManagersItem from .job_interview_stage import JobInterviewStage +from .job_interview_stage_job import JobInterviewStageJob +from .job_offices_item import JobOfficesItem +from .job_recruiters_item import JobRecruitersItem +from .job_status import JobStatus +from .job_status_enum import JobStatusEnum +from .office import Office +from .remote_data import RemoteData +from .remote_user import RemoteUser +from .remote_user_access_role import RemoteUserAccessRole +from .url import Url +from .url_type_enum import UrlTypeEnum +from .url_url_type import UrlUrlType ApplicationRequestCurrentStage = typing.Union[str, JobInterviewStage] diff --git a/src/merge/resources/ats/types/application_request_job.py b/src/merge/resources/ats/types/application_request_job.py index 354968cd..ffa21ced 100644 --- a/src/merge/resources/ats/types/application_request_job.py +++ b/src/merge/resources/ats/types/application_request_job.py @@ -2,6 +2,21 @@ import typing +from .access_role_enum import AccessRoleEnum +from .department import Department from .job import Job +from .job_departments_item import JobDepartmentsItem +from .job_hiring_managers_item import JobHiringManagersItem +from .job_offices_item import JobOfficesItem +from .job_recruiters_item import JobRecruitersItem +from .job_status import JobStatus +from .job_status_enum import JobStatusEnum +from .office import Office +from .remote_data import RemoteData +from .remote_user import RemoteUser +from .remote_user_access_role import RemoteUserAccessRole +from .url import Url +from .url_type_enum import UrlTypeEnum +from .url_url_type import UrlUrlType ApplicationRequestJob = typing.Union[str, Job] diff --git a/src/merge/resources/ats/types/application_request_reject_reason.py b/src/merge/resources/ats/types/application_request_reject_reason.py index 03e47492..51d5fadb 100644 --- a/src/merge/resources/ats/types/application_request_reject_reason.py +++ b/src/merge/resources/ats/types/application_request_reject_reason.py @@ -3,5 +3,6 @@ import typing from .reject_reason import RejectReason +from .remote_data import RemoteData ApplicationRequestRejectReason = typing.Union[str, RejectReason] diff --git a/src/merge/resources/ats/types/candidate.py b/src/merge/resources/ats/types/candidate.py index f20250f1..8fe8ab5d 100644 --- a/src/merge/resources/ats/types/candidate.py +++ b/src/merge/resources/ats/types/candidate.py @@ -57,7 +57,7 @@ class Candidate(pydantic.BaseModel): tags: typing.Optional[typing.List[typing.Optional[str]]] = pydantic.Field( description="Array of `Tag` names as strings." ) - applications: typing.Optional[typing.List[typing.Optional[CandidateApplicationsItem]]] = pydantic.Field( + applications: typing.Optional[typing.List[typing.Optional["CandidateApplicationsItem"]]] = pydantic.Field( description="Array of `Application` object IDs." ) attachments: typing.Optional[typing.List[typing.Optional[CandidateAttachmentsItem]]] = pydantic.Field( @@ -85,6 +85,8 @@ class Config: json_encoders = {dt.datetime: serialize_datetime} +from .application import Application # noqa: E402 +from .application_candidate import ApplicationCandidate # noqa: E402 from .candidate_applications_item import CandidateApplicationsItem # noqa: E402 -Candidate.update_forward_refs() +Candidate.update_forward_refs(CandidateApplicationsItem=CandidateApplicationsItem) diff --git a/src/merge/resources/ats/types/candidate_applications_item.py b/src/merge/resources/ats/types/candidate_applications_item.py index f39842cb..201512b8 100644 --- a/src/merge/resources/ats/types/candidate_applications_item.py +++ b/src/merge/resources/ats/types/candidate_applications_item.py @@ -1,7 +1,44 @@ # This file was auto-generated by Fern from our API Definition. +from __future__ import annotations + import typing -from .application import Application +from .access_role_enum import AccessRoleEnum +from .application_credited_to import ApplicationCreditedTo +from .application_current_stage import ApplicationCurrentStage +from .application_job import ApplicationJob +from .application_reject_reason import ApplicationRejectReason +from .attachment import Attachment +from .attachment_attachment_type import AttachmentAttachmentType +from .attachment_type_enum import AttachmentTypeEnum +from .candidate_attachments_item import CandidateAttachmentsItem +from .department import Department +from .email_address import EmailAddress +from .email_address_email_address_type import EmailAddressEmailAddressType +from .email_address_type_enum import EmailAddressTypeEnum +from .job import Job +from .job_departments_item import JobDepartmentsItem +from .job_hiring_managers_item import JobHiringManagersItem +from .job_interview_stage import JobInterviewStage +from .job_interview_stage_job import JobInterviewStageJob +from .job_offices_item import JobOfficesItem +from .job_recruiters_item import JobRecruitersItem +from .job_status import JobStatus +from .job_status_enum import JobStatusEnum +from .office import Office +from .phone_number import PhoneNumber +from .phone_number_phone_number_type import PhoneNumberPhoneNumberType +from .phone_number_type_enum import PhoneNumberTypeEnum +from .reject_reason import RejectReason +from .remote_data import RemoteData +from .remote_user import RemoteUser +from .remote_user_access_role import RemoteUserAccessRole +from .url import Url +from .url_type_enum import UrlTypeEnum +from .url_url_type import UrlUrlType -CandidateApplicationsItem = typing.Union[str, Application] +CandidateApplicationsItem = typing.Union[str, "Application"] +from .application import Application # noqa: E402 +from .application_candidate import ApplicationCandidate # noqa: E402 +from .candidate import Candidate # noqa: E402 diff --git a/src/merge/resources/ats/types/candidate_attachments_item.py b/src/merge/resources/ats/types/candidate_attachments_item.py index b5076acd..1843588b 100644 --- a/src/merge/resources/ats/types/candidate_attachments_item.py +++ b/src/merge/resources/ats/types/candidate_attachments_item.py @@ -3,5 +3,8 @@ import typing from .attachment import Attachment +from .attachment_attachment_type import AttachmentAttachmentType +from .attachment_type_enum import AttachmentTypeEnum +from .remote_data import RemoteData CandidateAttachmentsItem = typing.Union[str, Attachment] diff --git a/src/merge/resources/ats/types/candidate_request_applications_item.py b/src/merge/resources/ats/types/candidate_request_applications_item.py index 4c31a29e..fbf03bea 100644 --- a/src/merge/resources/ats/types/candidate_request_applications_item.py +++ b/src/merge/resources/ats/types/candidate_request_applications_item.py @@ -1,7 +1,45 @@ # This file was auto-generated by Fern from our API Definition. +from __future__ import annotations + import typing -from .application import Application +from .access_role_enum import AccessRoleEnum +from .application_credited_to import ApplicationCreditedTo +from .application_current_stage import ApplicationCurrentStage +from .application_job import ApplicationJob +from .application_reject_reason import ApplicationRejectReason +from .attachment import Attachment +from .attachment_attachment_type import AttachmentAttachmentType +from .attachment_type_enum import AttachmentTypeEnum +from .candidate_attachments_item import CandidateAttachmentsItem +from .department import Department +from .email_address import EmailAddress +from .email_address_email_address_type import EmailAddressEmailAddressType +from .email_address_type_enum import EmailAddressTypeEnum +from .job import Job +from .job_departments_item import JobDepartmentsItem +from .job_hiring_managers_item import JobHiringManagersItem +from .job_interview_stage import JobInterviewStage +from .job_interview_stage_job import JobInterviewStageJob +from .job_offices_item import JobOfficesItem +from .job_recruiters_item import JobRecruitersItem +from .job_status import JobStatus +from .job_status_enum import JobStatusEnum +from .office import Office +from .phone_number import PhoneNumber +from .phone_number_phone_number_type import PhoneNumberPhoneNumberType +from .phone_number_type_enum import PhoneNumberTypeEnum +from .reject_reason import RejectReason +from .remote_data import RemoteData +from .remote_user import RemoteUser +from .remote_user_access_role import RemoteUserAccessRole +from .url import Url +from .url_type_enum import UrlTypeEnum +from .url_url_type import UrlUrlType -CandidateRequestApplicationsItem = typing.Union[str, Application] +CandidateRequestApplicationsItem = typing.Union[str, "Application"] +from .application import Application # noqa: E402 +from .application_candidate import ApplicationCandidate # noqa: E402 +from .candidate import Candidate # noqa: E402 +from .candidate_applications_item import CandidateApplicationsItem # noqa: E402 diff --git a/src/merge/resources/ats/types/candidate_request_attachments_item.py b/src/merge/resources/ats/types/candidate_request_attachments_item.py index be6c3558..9b1e87e5 100644 --- a/src/merge/resources/ats/types/candidate_request_attachments_item.py +++ b/src/merge/resources/ats/types/candidate_request_attachments_item.py @@ -3,5 +3,8 @@ import typing from .attachment import Attachment +from .attachment_attachment_type import AttachmentAttachmentType +from .attachment_type_enum import AttachmentTypeEnum +from .remote_data import RemoteData CandidateRequestAttachmentsItem = typing.Union[str, Attachment] diff --git a/src/merge/resources/ats/types/eeoc_candidate.py b/src/merge/resources/ats/types/eeoc_candidate.py index 7b8461b2..6bdbd767 100644 --- a/src/merge/resources/ats/types/eeoc_candidate.py +++ b/src/merge/resources/ats/types/eeoc_candidate.py @@ -1,7 +1,45 @@ # This file was auto-generated by Fern from our API Definition. +from __future__ import annotations + import typing -from .candidate import Candidate +from .access_role_enum import AccessRoleEnum +from .application_credited_to import ApplicationCreditedTo +from .application_current_stage import ApplicationCurrentStage +from .application_job import ApplicationJob +from .application_reject_reason import ApplicationRejectReason +from .attachment import Attachment +from .attachment_attachment_type import AttachmentAttachmentType +from .attachment_type_enum import AttachmentTypeEnum +from .candidate_attachments_item import CandidateAttachmentsItem +from .department import Department +from .email_address import EmailAddress +from .email_address_email_address_type import EmailAddressEmailAddressType +from .email_address_type_enum import EmailAddressTypeEnum +from .job import Job +from .job_departments_item import JobDepartmentsItem +from .job_hiring_managers_item import JobHiringManagersItem +from .job_interview_stage import JobInterviewStage +from .job_interview_stage_job import JobInterviewStageJob +from .job_offices_item import JobOfficesItem +from .job_recruiters_item import JobRecruitersItem +from .job_status import JobStatus +from .job_status_enum import JobStatusEnum +from .office import Office +from .phone_number import PhoneNumber +from .phone_number_phone_number_type import PhoneNumberPhoneNumberType +from .phone_number_type_enum import PhoneNumberTypeEnum +from .reject_reason import RejectReason +from .remote_data import RemoteData +from .remote_user import RemoteUser +from .remote_user_access_role import RemoteUserAccessRole +from .url import Url +from .url_type_enum import UrlTypeEnum +from .url_url_type import UrlUrlType -EeocCandidate = typing.Union[str, Candidate] +EeocCandidate = typing.Union[str, "Candidate"] +from .application import Application # noqa: E402 +from .application_candidate import ApplicationCandidate # noqa: E402 +from .candidate import Candidate # noqa: E402 +from .candidate_applications_item import CandidateApplicationsItem # noqa: E402 diff --git a/src/merge/resources/ats/types/job_departments_item.py b/src/merge/resources/ats/types/job_departments_item.py index d85e47f5..deff02b9 100644 --- a/src/merge/resources/ats/types/job_departments_item.py +++ b/src/merge/resources/ats/types/job_departments_item.py @@ -3,5 +3,6 @@ import typing from .department import Department +from .remote_data import RemoteData JobDepartmentsItem = typing.Union[str, Department] diff --git a/src/merge/resources/ats/types/job_hiring_managers_item.py b/src/merge/resources/ats/types/job_hiring_managers_item.py index 2acfc40e..1509b9cd 100644 --- a/src/merge/resources/ats/types/job_hiring_managers_item.py +++ b/src/merge/resources/ats/types/job_hiring_managers_item.py @@ -2,6 +2,9 @@ import typing +from .access_role_enum import AccessRoleEnum +from .remote_data import RemoteData from .remote_user import RemoteUser +from .remote_user_access_role import RemoteUserAccessRole JobHiringManagersItem = typing.Union[str, RemoteUser] diff --git a/src/merge/resources/ats/types/job_interview_stage_job.py b/src/merge/resources/ats/types/job_interview_stage_job.py index 217ece49..da852bd9 100644 --- a/src/merge/resources/ats/types/job_interview_stage_job.py +++ b/src/merge/resources/ats/types/job_interview_stage_job.py @@ -2,6 +2,21 @@ import typing +from .access_role_enum import AccessRoleEnum +from .department import Department from .job import Job +from .job_departments_item import JobDepartmentsItem +from .job_hiring_managers_item import JobHiringManagersItem +from .job_offices_item import JobOfficesItem +from .job_recruiters_item import JobRecruitersItem +from .job_status import JobStatus +from .job_status_enum import JobStatusEnum +from .office import Office +from .remote_data import RemoteData +from .remote_user import RemoteUser +from .remote_user_access_role import RemoteUserAccessRole +from .url import Url +from .url_type_enum import UrlTypeEnum +from .url_url_type import UrlUrlType JobInterviewStageJob = typing.Union[str, Job] diff --git a/src/merge/resources/ats/types/job_offices_item.py b/src/merge/resources/ats/types/job_offices_item.py index e40e5f6c..99aac74a 100644 --- a/src/merge/resources/ats/types/job_offices_item.py +++ b/src/merge/resources/ats/types/job_offices_item.py @@ -3,5 +3,6 @@ import typing from .office import Office +from .remote_data import RemoteData JobOfficesItem = typing.Union[str, Office] diff --git a/src/merge/resources/ats/types/job_recruiters_item.py b/src/merge/resources/ats/types/job_recruiters_item.py index 989bcf4b..09fc17f4 100644 --- a/src/merge/resources/ats/types/job_recruiters_item.py +++ b/src/merge/resources/ats/types/job_recruiters_item.py @@ -2,6 +2,9 @@ import typing +from .access_role_enum import AccessRoleEnum +from .remote_data import RemoteData from .remote_user import RemoteUser +from .remote_user_access_role import RemoteUserAccessRole JobRecruitersItem = typing.Union[str, RemoteUser] diff --git a/src/merge/resources/ats/types/offer_application.py b/src/merge/resources/ats/types/offer_application.py index 1d5927d3..a1dc6d22 100644 --- a/src/merge/resources/ats/types/offer_application.py +++ b/src/merge/resources/ats/types/offer_application.py @@ -1,7 +1,45 @@ # This file was auto-generated by Fern from our API Definition. +from __future__ import annotations + import typing -from .application import Application +from .access_role_enum import AccessRoleEnum +from .application_credited_to import ApplicationCreditedTo +from .application_current_stage import ApplicationCurrentStage +from .application_job import ApplicationJob +from .application_reject_reason import ApplicationRejectReason +from .attachment import Attachment +from .attachment_attachment_type import AttachmentAttachmentType +from .attachment_type_enum import AttachmentTypeEnum +from .candidate_attachments_item import CandidateAttachmentsItem +from .department import Department +from .email_address import EmailAddress +from .email_address_email_address_type import EmailAddressEmailAddressType +from .email_address_type_enum import EmailAddressTypeEnum +from .job import Job +from .job_departments_item import JobDepartmentsItem +from .job_hiring_managers_item import JobHiringManagersItem +from .job_interview_stage import JobInterviewStage +from .job_interview_stage_job import JobInterviewStageJob +from .job_offices_item import JobOfficesItem +from .job_recruiters_item import JobRecruitersItem +from .job_status import JobStatus +from .job_status_enum import JobStatusEnum +from .office import Office +from .phone_number import PhoneNumber +from .phone_number_phone_number_type import PhoneNumberPhoneNumberType +from .phone_number_type_enum import PhoneNumberTypeEnum +from .reject_reason import RejectReason +from .remote_data import RemoteData +from .remote_user import RemoteUser +from .remote_user_access_role import RemoteUserAccessRole +from .url import Url +from .url_type_enum import UrlTypeEnum +from .url_url_type import UrlUrlType -OfferApplication = typing.Union[str, Application] +OfferApplication = typing.Union[str, "Application"] +from .application import Application # noqa: E402 +from .application_candidate import ApplicationCandidate # noqa: E402 +from .candidate import Candidate # noqa: E402 +from .candidate_applications_item import CandidateApplicationsItem # noqa: E402 diff --git a/src/merge/resources/ats/types/offer_creator.py b/src/merge/resources/ats/types/offer_creator.py index a06a8e2a..7258e0c7 100644 --- a/src/merge/resources/ats/types/offer_creator.py +++ b/src/merge/resources/ats/types/offer_creator.py @@ -2,6 +2,9 @@ import typing +from .access_role_enum import AccessRoleEnum +from .remote_data import RemoteData from .remote_user import RemoteUser +from .remote_user_access_role import RemoteUserAccessRole OfferCreator = typing.Union[str, RemoteUser] diff --git a/src/merge/resources/ats/types/scheduled_interview_application.py b/src/merge/resources/ats/types/scheduled_interview_application.py index 56b89e59..02c1b68b 100644 --- a/src/merge/resources/ats/types/scheduled_interview_application.py +++ b/src/merge/resources/ats/types/scheduled_interview_application.py @@ -1,7 +1,45 @@ # This file was auto-generated by Fern from our API Definition. +from __future__ import annotations + import typing -from .application import Application +from .access_role_enum import AccessRoleEnum +from .application_credited_to import ApplicationCreditedTo +from .application_current_stage import ApplicationCurrentStage +from .application_job import ApplicationJob +from .application_reject_reason import ApplicationRejectReason +from .attachment import Attachment +from .attachment_attachment_type import AttachmentAttachmentType +from .attachment_type_enum import AttachmentTypeEnum +from .candidate_attachments_item import CandidateAttachmentsItem +from .department import Department +from .email_address import EmailAddress +from .email_address_email_address_type import EmailAddressEmailAddressType +from .email_address_type_enum import EmailAddressTypeEnum +from .job import Job +from .job_departments_item import JobDepartmentsItem +from .job_hiring_managers_item import JobHiringManagersItem +from .job_interview_stage import JobInterviewStage +from .job_interview_stage_job import JobInterviewStageJob +from .job_offices_item import JobOfficesItem +from .job_recruiters_item import JobRecruitersItem +from .job_status import JobStatus +from .job_status_enum import JobStatusEnum +from .office import Office +from .phone_number import PhoneNumber +from .phone_number_phone_number_type import PhoneNumberPhoneNumberType +from .phone_number_type_enum import PhoneNumberTypeEnum +from .reject_reason import RejectReason +from .remote_data import RemoteData +from .remote_user import RemoteUser +from .remote_user_access_role import RemoteUserAccessRole +from .url import Url +from .url_type_enum import UrlTypeEnum +from .url_url_type import UrlUrlType -ScheduledInterviewApplication = typing.Union[str, Application] +ScheduledInterviewApplication = typing.Union[str, "Application"] +from .application import Application # noqa: E402 +from .application_candidate import ApplicationCandidate # noqa: E402 +from .candidate import Candidate # noqa: E402 +from .candidate_applications_item import CandidateApplicationsItem # noqa: E402 diff --git a/src/merge/resources/ats/types/scheduled_interview_interviewers_item.py b/src/merge/resources/ats/types/scheduled_interview_interviewers_item.py index b0d45222..2dbfc10f 100644 --- a/src/merge/resources/ats/types/scheduled_interview_interviewers_item.py +++ b/src/merge/resources/ats/types/scheduled_interview_interviewers_item.py @@ -2,6 +2,9 @@ import typing +from .access_role_enum import AccessRoleEnum +from .remote_data import RemoteData from .remote_user import RemoteUser +from .remote_user_access_role import RemoteUserAccessRole ScheduledInterviewInterviewersItem = typing.Union[str, RemoteUser] diff --git a/src/merge/resources/ats/types/scheduled_interview_job_interview_stage.py b/src/merge/resources/ats/types/scheduled_interview_job_interview_stage.py index b1eaeb95..a83cbbf7 100644 --- a/src/merge/resources/ats/types/scheduled_interview_job_interview_stage.py +++ b/src/merge/resources/ats/types/scheduled_interview_job_interview_stage.py @@ -2,6 +2,23 @@ import typing +from .access_role_enum import AccessRoleEnum +from .department import Department +from .job import Job +from .job_departments_item import JobDepartmentsItem +from .job_hiring_managers_item import JobHiringManagersItem from .job_interview_stage import JobInterviewStage +from .job_interview_stage_job import JobInterviewStageJob +from .job_offices_item import JobOfficesItem +from .job_recruiters_item import JobRecruitersItem +from .job_status import JobStatus +from .job_status_enum import JobStatusEnum +from .office import Office +from .remote_data import RemoteData +from .remote_user import RemoteUser +from .remote_user_access_role import RemoteUserAccessRole +from .url import Url +from .url_type_enum import UrlTypeEnum +from .url_url_type import UrlUrlType ScheduledInterviewJobInterviewStage = typing.Union[str, JobInterviewStage] diff --git a/src/merge/resources/ats/types/scheduled_interview_organizer.py b/src/merge/resources/ats/types/scheduled_interview_organizer.py index 6f28b445..e46341e7 100644 --- a/src/merge/resources/ats/types/scheduled_interview_organizer.py +++ b/src/merge/resources/ats/types/scheduled_interview_organizer.py @@ -2,6 +2,9 @@ import typing +from .access_role_enum import AccessRoleEnum +from .remote_data import RemoteData from .remote_user import RemoteUser +from .remote_user_access_role import RemoteUserAccessRole ScheduledInterviewOrganizer = typing.Union[str, RemoteUser] diff --git a/src/merge/resources/ats/types/scheduled_interview_request_application.py b/src/merge/resources/ats/types/scheduled_interview_request_application.py index 023e98bd..98724407 100644 --- a/src/merge/resources/ats/types/scheduled_interview_request_application.py +++ b/src/merge/resources/ats/types/scheduled_interview_request_application.py @@ -1,7 +1,45 @@ # This file was auto-generated by Fern from our API Definition. +from __future__ import annotations + import typing -from .application import Application +from .access_role_enum import AccessRoleEnum +from .application_credited_to import ApplicationCreditedTo +from .application_current_stage import ApplicationCurrentStage +from .application_job import ApplicationJob +from .application_reject_reason import ApplicationRejectReason +from .attachment import Attachment +from .attachment_attachment_type import AttachmentAttachmentType +from .attachment_type_enum import AttachmentTypeEnum +from .candidate_attachments_item import CandidateAttachmentsItem +from .department import Department +from .email_address import EmailAddress +from .email_address_email_address_type import EmailAddressEmailAddressType +from .email_address_type_enum import EmailAddressTypeEnum +from .job import Job +from .job_departments_item import JobDepartmentsItem +from .job_hiring_managers_item import JobHiringManagersItem +from .job_interview_stage import JobInterviewStage +from .job_interview_stage_job import JobInterviewStageJob +from .job_offices_item import JobOfficesItem +from .job_recruiters_item import JobRecruitersItem +from .job_status import JobStatus +from .job_status_enum import JobStatusEnum +from .office import Office +from .phone_number import PhoneNumber +from .phone_number_phone_number_type import PhoneNumberPhoneNumberType +from .phone_number_type_enum import PhoneNumberTypeEnum +from .reject_reason import RejectReason +from .remote_data import RemoteData +from .remote_user import RemoteUser +from .remote_user_access_role import RemoteUserAccessRole +from .url import Url +from .url_type_enum import UrlTypeEnum +from .url_url_type import UrlUrlType -ScheduledInterviewRequestApplication = typing.Union[str, Application] +ScheduledInterviewRequestApplication = typing.Union[str, "Application"] +from .application import Application # noqa: E402 +from .application_candidate import ApplicationCandidate # noqa: E402 +from .candidate import Candidate # noqa: E402 +from .candidate_applications_item import CandidateApplicationsItem # noqa: E402 diff --git a/src/merge/resources/ats/types/scheduled_interview_request_interviewers_item.py b/src/merge/resources/ats/types/scheduled_interview_request_interviewers_item.py index 9d91de72..92e1c143 100644 --- a/src/merge/resources/ats/types/scheduled_interview_request_interviewers_item.py +++ b/src/merge/resources/ats/types/scheduled_interview_request_interviewers_item.py @@ -2,6 +2,9 @@ import typing +from .access_role_enum import AccessRoleEnum +from .remote_data import RemoteData from .remote_user import RemoteUser +from .remote_user_access_role import RemoteUserAccessRole ScheduledInterviewRequestInterviewersItem = typing.Union[str, RemoteUser] diff --git a/src/merge/resources/ats/types/scheduled_interview_request_job_interview_stage.py b/src/merge/resources/ats/types/scheduled_interview_request_job_interview_stage.py index e3540ac2..5d3e2236 100644 --- a/src/merge/resources/ats/types/scheduled_interview_request_job_interview_stage.py +++ b/src/merge/resources/ats/types/scheduled_interview_request_job_interview_stage.py @@ -2,6 +2,23 @@ import typing +from .access_role_enum import AccessRoleEnum +from .department import Department +from .job import Job +from .job_departments_item import JobDepartmentsItem +from .job_hiring_managers_item import JobHiringManagersItem from .job_interview_stage import JobInterviewStage +from .job_interview_stage_job import JobInterviewStageJob +from .job_offices_item import JobOfficesItem +from .job_recruiters_item import JobRecruitersItem +from .job_status import JobStatus +from .job_status_enum import JobStatusEnum +from .office import Office +from .remote_data import RemoteData +from .remote_user import RemoteUser +from .remote_user_access_role import RemoteUserAccessRole +from .url import Url +from .url_type_enum import UrlTypeEnum +from .url_url_type import UrlUrlType ScheduledInterviewRequestJobInterviewStage = typing.Union[str, JobInterviewStage] diff --git a/src/merge/resources/ats/types/scheduled_interview_request_organizer.py b/src/merge/resources/ats/types/scheduled_interview_request_organizer.py index 39f4b8f9..b1c5097f 100644 --- a/src/merge/resources/ats/types/scheduled_interview_request_organizer.py +++ b/src/merge/resources/ats/types/scheduled_interview_request_organizer.py @@ -2,6 +2,9 @@ import typing +from .access_role_enum import AccessRoleEnum +from .remote_data import RemoteData from .remote_user import RemoteUser +from .remote_user_access_role import RemoteUserAccessRole ScheduledInterviewRequestOrganizer = typing.Union[str, RemoteUser] diff --git a/src/merge/resources/ats/types/scorecard_application.py b/src/merge/resources/ats/types/scorecard_application.py index 8d1b7dc2..da62706c 100644 --- a/src/merge/resources/ats/types/scorecard_application.py +++ b/src/merge/resources/ats/types/scorecard_application.py @@ -1,7 +1,45 @@ # This file was auto-generated by Fern from our API Definition. +from __future__ import annotations + import typing -from .application import Application +from .access_role_enum import AccessRoleEnum +from .application_credited_to import ApplicationCreditedTo +from .application_current_stage import ApplicationCurrentStage +from .application_job import ApplicationJob +from .application_reject_reason import ApplicationRejectReason +from .attachment import Attachment +from .attachment_attachment_type import AttachmentAttachmentType +from .attachment_type_enum import AttachmentTypeEnum +from .candidate_attachments_item import CandidateAttachmentsItem +from .department import Department +from .email_address import EmailAddress +from .email_address_email_address_type import EmailAddressEmailAddressType +from .email_address_type_enum import EmailAddressTypeEnum +from .job import Job +from .job_departments_item import JobDepartmentsItem +from .job_hiring_managers_item import JobHiringManagersItem +from .job_interview_stage import JobInterviewStage +from .job_interview_stage_job import JobInterviewStageJob +from .job_offices_item import JobOfficesItem +from .job_recruiters_item import JobRecruitersItem +from .job_status import JobStatus +from .job_status_enum import JobStatusEnum +from .office import Office +from .phone_number import PhoneNumber +from .phone_number_phone_number_type import PhoneNumberPhoneNumberType +from .phone_number_type_enum import PhoneNumberTypeEnum +from .reject_reason import RejectReason +from .remote_data import RemoteData +from .remote_user import RemoteUser +from .remote_user_access_role import RemoteUserAccessRole +from .url import Url +from .url_type_enum import UrlTypeEnum +from .url_url_type import UrlUrlType -ScorecardApplication = typing.Union[str, Application] +ScorecardApplication = typing.Union[str, "Application"] +from .application import Application # noqa: E402 +from .application_candidate import ApplicationCandidate # noqa: E402 +from .candidate import Candidate # noqa: E402 +from .candidate_applications_item import CandidateApplicationsItem # noqa: E402 diff --git a/src/merge/resources/ats/types/scorecard_interview.py b/src/merge/resources/ats/types/scorecard_interview.py index 2642494a..f6e21acb 100644 --- a/src/merge/resources/ats/types/scorecard_interview.py +++ b/src/merge/resources/ats/types/scorecard_interview.py @@ -1,7 +1,52 @@ # This file was auto-generated by Fern from our API Definition. +from __future__ import annotations + import typing +from .access_role_enum import AccessRoleEnum +from .application_credited_to import ApplicationCreditedTo +from .application_current_stage import ApplicationCurrentStage +from .application_job import ApplicationJob +from .application_reject_reason import ApplicationRejectReason +from .attachment import Attachment +from .attachment_attachment_type import AttachmentAttachmentType +from .attachment_type_enum import AttachmentTypeEnum +from .candidate_attachments_item import CandidateAttachmentsItem +from .department import Department +from .email_address import EmailAddress +from .email_address_email_address_type import EmailAddressEmailAddressType +from .email_address_type_enum import EmailAddressTypeEnum +from .job import Job +from .job_departments_item import JobDepartmentsItem +from .job_hiring_managers_item import JobHiringManagersItem +from .job_interview_stage import JobInterviewStage +from .job_interview_stage_job import JobInterviewStageJob +from .job_offices_item import JobOfficesItem +from .job_recruiters_item import JobRecruitersItem +from .job_status import JobStatus +from .job_status_enum import JobStatusEnum +from .office import Office +from .phone_number import PhoneNumber +from .phone_number_phone_number_type import PhoneNumberPhoneNumberType +from .phone_number_type_enum import PhoneNumberTypeEnum +from .reject_reason import RejectReason +from .remote_data import RemoteData +from .remote_user import RemoteUser +from .remote_user_access_role import RemoteUserAccessRole from .scheduled_interview import ScheduledInterview +from .scheduled_interview_application import ScheduledInterviewApplication +from .scheduled_interview_interviewers_item import ScheduledInterviewInterviewersItem +from .scheduled_interview_job_interview_stage import ScheduledInterviewJobInterviewStage +from .scheduled_interview_organizer import ScheduledInterviewOrganizer +from .scheduled_interview_status import ScheduledInterviewStatus +from .scheduled_interview_status_enum import ScheduledInterviewStatusEnum +from .url import Url +from .url_type_enum import UrlTypeEnum +from .url_url_type import UrlUrlType ScorecardInterview = typing.Union[str, ScheduledInterview] +from .application import Application # noqa: E402 +from .application_candidate import ApplicationCandidate # noqa: E402 +from .candidate import Candidate # noqa: E402 +from .candidate_applications_item import CandidateApplicationsItem # noqa: E402 diff --git a/src/merge/resources/ats/types/scorecard_interviewer.py b/src/merge/resources/ats/types/scorecard_interviewer.py index 96c34cc8..879248f7 100644 --- a/src/merge/resources/ats/types/scorecard_interviewer.py +++ b/src/merge/resources/ats/types/scorecard_interviewer.py @@ -2,6 +2,9 @@ import typing +from .access_role_enum import AccessRoleEnum +from .remote_data import RemoteData from .remote_user import RemoteUser +from .remote_user_access_role import RemoteUserAccessRole ScorecardInterviewer = typing.Union[str, RemoteUser] diff --git a/src/merge/resources/ats/types/screening_question_job.py b/src/merge/resources/ats/types/screening_question_job.py index 239c90e4..0858f507 100644 --- a/src/merge/resources/ats/types/screening_question_job.py +++ b/src/merge/resources/ats/types/screening_question_job.py @@ -2,6 +2,21 @@ import typing +from .access_role_enum import AccessRoleEnum +from .department import Department from .job import Job +from .job_departments_item import JobDepartmentsItem +from .job_hiring_managers_item import JobHiringManagersItem +from .job_offices_item import JobOfficesItem +from .job_recruiters_item import JobRecruitersItem +from .job_status import JobStatus +from .job_status_enum import JobStatusEnum +from .office import Office +from .remote_data import RemoteData +from .remote_user import RemoteUser +from .remote_user_access_role import RemoteUserAccessRole +from .url import Url +from .url_type_enum import UrlTypeEnum +from .url_url_type import UrlUrlType ScreeningQuestionJob = typing.Union[str, Job] 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/crm/types/account_owner.py b/src/merge/resources/crm/types/account_owner.py index eb20c8fc..c147c097 100644 --- a/src/merge/resources/crm/types/account_owner.py +++ b/src/merge/resources/crm/types/account_owner.py @@ -2,6 +2,18 @@ import typing +from .field_format_enum import FieldFormatEnum +from .field_type_enum import FieldTypeEnum +from .item_format_enum import ItemFormatEnum +from .item_schema import ItemSchema +from .item_type_enum import ItemTypeEnum +from .remote_data import RemoteData +from .remote_field import RemoteField +from .remote_field_class import RemoteFieldClass +from .remote_field_class_field_choices_item import RemoteFieldClassFieldChoicesItem +from .remote_field_class_field_format import RemoteFieldClassFieldFormat +from .remote_field_class_field_type import RemoteFieldClassFieldType +from .remote_field_remote_field_class import RemoteFieldRemoteFieldClass from .user import User AccountOwner = typing.Union[str, User] diff --git a/src/merge/resources/crm/types/account_request_owner.py b/src/merge/resources/crm/types/account_request_owner.py index 790ba846..86b43ead 100644 --- a/src/merge/resources/crm/types/account_request_owner.py +++ b/src/merge/resources/crm/types/account_request_owner.py @@ -2,6 +2,18 @@ import typing +from .field_format_enum import FieldFormatEnum +from .field_type_enum import FieldTypeEnum +from .item_format_enum import ItemFormatEnum +from .item_schema import ItemSchema +from .item_type_enum import ItemTypeEnum +from .remote_data import RemoteData +from .remote_field import RemoteField +from .remote_field_class import RemoteFieldClass +from .remote_field_class_field_choices_item import RemoteFieldClassFieldChoicesItem +from .remote_field_class_field_format import RemoteFieldClassFieldFormat +from .remote_field_class_field_type import RemoteFieldClassFieldType +from .remote_field_remote_field_class import RemoteFieldRemoteFieldClass from .user import User AccountRequestOwner = typing.Union[str, User] diff --git a/src/merge/resources/crm/types/association_association_type.py b/src/merge/resources/crm/types/association_association_type.py index 0395ebcc..e26a7019 100644 --- a/src/merge/resources/crm/types/association_association_type.py +++ b/src/merge/resources/crm/types/association_association_type.py @@ -2,6 +2,9 @@ import typing +from .association_sub_type import AssociationSubType from .association_type import AssociationType +from .association_type_cardinality import AssociationTypeCardinality +from .cardinality_enum import CardinalityEnum AssociationAssociationType = typing.Union[str, AssociationType] diff --git a/src/merge/resources/crm/types/contact_account.py b/src/merge/resources/crm/types/contact_account.py index f21ef820..809455e6 100644 --- a/src/merge/resources/crm/types/contact_account.py +++ b/src/merge/resources/crm/types/contact_account.py @@ -3,5 +3,25 @@ import typing from .account import Account +from .account_owner import AccountOwner +from .address import Address +from .address_address_type import AddressAddressType +from .address_country import AddressCountry +from .address_type_enum import AddressTypeEnum +from .country_enum import CountryEnum +from .field_format_enum import FieldFormatEnum +from .field_type_enum import FieldTypeEnum +from .item_format_enum import ItemFormatEnum +from .item_schema import ItemSchema +from .item_type_enum import ItemTypeEnum +from .phone_number import PhoneNumber +from .remote_data import RemoteData +from .remote_field import RemoteField +from .remote_field_class import RemoteFieldClass +from .remote_field_class_field_choices_item import RemoteFieldClassFieldChoicesItem +from .remote_field_class_field_format import RemoteFieldClassFieldFormat +from .remote_field_class_field_type import RemoteFieldClassFieldType +from .remote_field_remote_field_class import RemoteFieldRemoteFieldClass +from .user import User ContactAccount = typing.Union[str, Account] diff --git a/src/merge/resources/crm/types/contact_owner.py b/src/merge/resources/crm/types/contact_owner.py index 24fc6dc1..b5983aa2 100644 --- a/src/merge/resources/crm/types/contact_owner.py +++ b/src/merge/resources/crm/types/contact_owner.py @@ -2,6 +2,18 @@ import typing +from .field_format_enum import FieldFormatEnum +from .field_type_enum import FieldTypeEnum +from .item_format_enum import ItemFormatEnum +from .item_schema import ItemSchema +from .item_type_enum import ItemTypeEnum +from .remote_data import RemoteData +from .remote_field import RemoteField +from .remote_field_class import RemoteFieldClass +from .remote_field_class_field_choices_item import RemoteFieldClassFieldChoicesItem +from .remote_field_class_field_format import RemoteFieldClassFieldFormat +from .remote_field_class_field_type import RemoteFieldClassFieldType +from .remote_field_remote_field_class import RemoteFieldRemoteFieldClass from .user import User ContactOwner = typing.Union[str, User] diff --git a/src/merge/resources/crm/types/contact_request_account.py b/src/merge/resources/crm/types/contact_request_account.py index 449187af..0aafdef3 100644 --- a/src/merge/resources/crm/types/contact_request_account.py +++ b/src/merge/resources/crm/types/contact_request_account.py @@ -3,5 +3,25 @@ import typing from .account import Account +from .account_owner import AccountOwner +from .address import Address +from .address_address_type import AddressAddressType +from .address_country import AddressCountry +from .address_type_enum import AddressTypeEnum +from .country_enum import CountryEnum +from .field_format_enum import FieldFormatEnum +from .field_type_enum import FieldTypeEnum +from .item_format_enum import ItemFormatEnum +from .item_schema import ItemSchema +from .item_type_enum import ItemTypeEnum +from .phone_number import PhoneNumber +from .remote_data import RemoteData +from .remote_field import RemoteField +from .remote_field_class import RemoteFieldClass +from .remote_field_class_field_choices_item import RemoteFieldClassFieldChoicesItem +from .remote_field_class_field_format import RemoteFieldClassFieldFormat +from .remote_field_class_field_type import RemoteFieldClassFieldType +from .remote_field_remote_field_class import RemoteFieldRemoteFieldClass +from .user import User ContactRequestAccount = typing.Union[str, Account] diff --git a/src/merge/resources/crm/types/contact_request_owner.py b/src/merge/resources/crm/types/contact_request_owner.py index c41de073..ffc6a896 100644 --- a/src/merge/resources/crm/types/contact_request_owner.py +++ b/src/merge/resources/crm/types/contact_request_owner.py @@ -2,6 +2,18 @@ import typing +from .field_format_enum import FieldFormatEnum +from .field_type_enum import FieldTypeEnum +from .item_format_enum import ItemFormatEnum +from .item_schema import ItemSchema +from .item_type_enum import ItemTypeEnum +from .remote_data import RemoteData +from .remote_field import RemoteField +from .remote_field_class import RemoteFieldClass +from .remote_field_class_field_choices_item import RemoteFieldClassFieldChoicesItem +from .remote_field_class_field_format import RemoteFieldClassFieldFormat +from .remote_field_class_field_type import RemoteFieldClassFieldType +from .remote_field_remote_field_class import RemoteFieldRemoteFieldClass from .user import User ContactRequestOwner = typing.Union[str, User] diff --git a/src/merge/resources/crm/types/engagement_account.py b/src/merge/resources/crm/types/engagement_account.py index 670fbbd5..121c02ae 100644 --- a/src/merge/resources/crm/types/engagement_account.py +++ b/src/merge/resources/crm/types/engagement_account.py @@ -3,5 +3,25 @@ import typing from .account import Account +from .account_owner import AccountOwner +from .address import Address +from .address_address_type import AddressAddressType +from .address_country import AddressCountry +from .address_type_enum import AddressTypeEnum +from .country_enum import CountryEnum +from .field_format_enum import FieldFormatEnum +from .field_type_enum import FieldTypeEnum +from .item_format_enum import ItemFormatEnum +from .item_schema import ItemSchema +from .item_type_enum import ItemTypeEnum +from .phone_number import PhoneNumber +from .remote_data import RemoteData +from .remote_field import RemoteField +from .remote_field_class import RemoteFieldClass +from .remote_field_class_field_choices_item import RemoteFieldClassFieldChoicesItem +from .remote_field_class_field_format import RemoteFieldClassFieldFormat +from .remote_field_class_field_type import RemoteFieldClassFieldType +from .remote_field_remote_field_class import RemoteFieldRemoteFieldClass +from .user import User EngagementAccount = typing.Union[str, Account] diff --git a/src/merge/resources/crm/types/engagement_contacts_item.py b/src/merge/resources/crm/types/engagement_contacts_item.py index 12faa1ae..bf0cead1 100644 --- a/src/merge/resources/crm/types/engagement_contacts_item.py +++ b/src/merge/resources/crm/types/engagement_contacts_item.py @@ -2,6 +2,30 @@ import typing +from .account import Account +from .account_owner import AccountOwner +from .address import Address +from .address_address_type import AddressAddressType +from .address_country import AddressCountry +from .address_type_enum import AddressTypeEnum from .contact import Contact +from .contact_account import ContactAccount +from .contact_owner import ContactOwner +from .country_enum import CountryEnum +from .email_address import EmailAddress +from .field_format_enum import FieldFormatEnum +from .field_type_enum import FieldTypeEnum +from .item_format_enum import ItemFormatEnum +from .item_schema import ItemSchema +from .item_type_enum import ItemTypeEnum +from .phone_number import PhoneNumber +from .remote_data import RemoteData +from .remote_field import RemoteField +from .remote_field_class import RemoteFieldClass +from .remote_field_class_field_choices_item import RemoteFieldClassFieldChoicesItem +from .remote_field_class_field_format import RemoteFieldClassFieldFormat +from .remote_field_class_field_type import RemoteFieldClassFieldType +from .remote_field_remote_field_class import RemoteFieldRemoteFieldClass +from .user import User EngagementContactsItem = typing.Union[str, Contact] diff --git a/src/merge/resources/crm/types/engagement_engagement_type.py b/src/merge/resources/crm/types/engagement_engagement_type.py index 9eee8736..01aca481 100644 --- a/src/merge/resources/crm/types/engagement_engagement_type.py +++ b/src/merge/resources/crm/types/engagement_engagement_type.py @@ -2,6 +2,19 @@ import typing +from .activity_type_enum import ActivityTypeEnum from .engagement_type import EngagementType +from .engagement_type_activity_type import EngagementTypeActivityType +from .field_format_enum import FieldFormatEnum +from .field_type_enum import FieldTypeEnum +from .item_format_enum import ItemFormatEnum +from .item_schema import ItemSchema +from .item_type_enum import ItemTypeEnum +from .remote_field import RemoteField +from .remote_field_class import RemoteFieldClass +from .remote_field_class_field_choices_item import RemoteFieldClassFieldChoicesItem +from .remote_field_class_field_format import RemoteFieldClassFieldFormat +from .remote_field_class_field_type import RemoteFieldClassFieldType +from .remote_field_remote_field_class import RemoteFieldRemoteFieldClass EngagementEngagementType = typing.Union[str, EngagementType] diff --git a/src/merge/resources/crm/types/engagement_owner.py b/src/merge/resources/crm/types/engagement_owner.py index ec8d6da5..7f9f4187 100644 --- a/src/merge/resources/crm/types/engagement_owner.py +++ b/src/merge/resources/crm/types/engagement_owner.py @@ -2,6 +2,18 @@ import typing +from .field_format_enum import FieldFormatEnum +from .field_type_enum import FieldTypeEnum +from .item_format_enum import ItemFormatEnum +from .item_schema import ItemSchema +from .item_type_enum import ItemTypeEnum +from .remote_data import RemoteData +from .remote_field import RemoteField +from .remote_field_class import RemoteFieldClass +from .remote_field_class_field_choices_item import RemoteFieldClassFieldChoicesItem +from .remote_field_class_field_format import RemoteFieldClassFieldFormat +from .remote_field_class_field_type import RemoteFieldClassFieldType +from .remote_field_remote_field_class import RemoteFieldRemoteFieldClass from .user import User EngagementOwner = typing.Union[str, User] diff --git a/src/merge/resources/crm/types/engagement_request_account.py b/src/merge/resources/crm/types/engagement_request_account.py index 4cb22f6d..490984ef 100644 --- a/src/merge/resources/crm/types/engagement_request_account.py +++ b/src/merge/resources/crm/types/engagement_request_account.py @@ -3,5 +3,25 @@ import typing from .account import Account +from .account_owner import AccountOwner +from .address import Address +from .address_address_type import AddressAddressType +from .address_country import AddressCountry +from .address_type_enum import AddressTypeEnum +from .country_enum import CountryEnum +from .field_format_enum import FieldFormatEnum +from .field_type_enum import FieldTypeEnum +from .item_format_enum import ItemFormatEnum +from .item_schema import ItemSchema +from .item_type_enum import ItemTypeEnum +from .phone_number import PhoneNumber +from .remote_data import RemoteData +from .remote_field import RemoteField +from .remote_field_class import RemoteFieldClass +from .remote_field_class_field_choices_item import RemoteFieldClassFieldChoicesItem +from .remote_field_class_field_format import RemoteFieldClassFieldFormat +from .remote_field_class_field_type import RemoteFieldClassFieldType +from .remote_field_remote_field_class import RemoteFieldRemoteFieldClass +from .user import User EngagementRequestAccount = typing.Union[str, Account] diff --git a/src/merge/resources/crm/types/engagement_request_contacts_item.py b/src/merge/resources/crm/types/engagement_request_contacts_item.py index 677c7247..da3fb733 100644 --- a/src/merge/resources/crm/types/engagement_request_contacts_item.py +++ b/src/merge/resources/crm/types/engagement_request_contacts_item.py @@ -2,6 +2,30 @@ import typing +from .account import Account +from .account_owner import AccountOwner +from .address import Address +from .address_address_type import AddressAddressType +from .address_country import AddressCountry +from .address_type_enum import AddressTypeEnum from .contact import Contact +from .contact_account import ContactAccount +from .contact_owner import ContactOwner +from .country_enum import CountryEnum +from .email_address import EmailAddress +from .field_format_enum import FieldFormatEnum +from .field_type_enum import FieldTypeEnum +from .item_format_enum import ItemFormatEnum +from .item_schema import ItemSchema +from .item_type_enum import ItemTypeEnum +from .phone_number import PhoneNumber +from .remote_data import RemoteData +from .remote_field import RemoteField +from .remote_field_class import RemoteFieldClass +from .remote_field_class_field_choices_item import RemoteFieldClassFieldChoicesItem +from .remote_field_class_field_format import RemoteFieldClassFieldFormat +from .remote_field_class_field_type import RemoteFieldClassFieldType +from .remote_field_remote_field_class import RemoteFieldRemoteFieldClass +from .user import User EngagementRequestContactsItem = typing.Union[str, Contact] diff --git a/src/merge/resources/crm/types/engagement_request_engagement_type.py b/src/merge/resources/crm/types/engagement_request_engagement_type.py index 37803788..2c566199 100644 --- a/src/merge/resources/crm/types/engagement_request_engagement_type.py +++ b/src/merge/resources/crm/types/engagement_request_engagement_type.py @@ -2,6 +2,19 @@ import typing +from .activity_type_enum import ActivityTypeEnum from .engagement_type import EngagementType +from .engagement_type_activity_type import EngagementTypeActivityType +from .field_format_enum import FieldFormatEnum +from .field_type_enum import FieldTypeEnum +from .item_format_enum import ItemFormatEnum +from .item_schema import ItemSchema +from .item_type_enum import ItemTypeEnum +from .remote_field import RemoteField +from .remote_field_class import RemoteFieldClass +from .remote_field_class_field_choices_item import RemoteFieldClassFieldChoicesItem +from .remote_field_class_field_format import RemoteFieldClassFieldFormat +from .remote_field_class_field_type import RemoteFieldClassFieldType +from .remote_field_remote_field_class import RemoteFieldRemoteFieldClass EngagementRequestEngagementType = typing.Union[str, EngagementType] diff --git a/src/merge/resources/crm/types/engagement_request_owner.py b/src/merge/resources/crm/types/engagement_request_owner.py index 11fd7891..3122ba6e 100644 --- a/src/merge/resources/crm/types/engagement_request_owner.py +++ b/src/merge/resources/crm/types/engagement_request_owner.py @@ -2,6 +2,18 @@ import typing +from .field_format_enum import FieldFormatEnum +from .field_type_enum import FieldTypeEnum +from .item_format_enum import ItemFormatEnum +from .item_schema import ItemSchema +from .item_type_enum import ItemTypeEnum +from .remote_data import RemoteData +from .remote_field import RemoteField +from .remote_field_class import RemoteFieldClass +from .remote_field_class_field_choices_item import RemoteFieldClassFieldChoicesItem +from .remote_field_class_field_format import RemoteFieldClassFieldFormat +from .remote_field_class_field_type import RemoteFieldClassFieldType +from .remote_field_remote_field_class import RemoteFieldRemoteFieldClass from .user import User EngagementRequestOwner = typing.Union[str, User] diff --git a/src/merge/resources/crm/types/lead_converted_account.py b/src/merge/resources/crm/types/lead_converted_account.py index 9fa3a0fb..a1f08eae 100644 --- a/src/merge/resources/crm/types/lead_converted_account.py +++ b/src/merge/resources/crm/types/lead_converted_account.py @@ -3,5 +3,25 @@ import typing from .account import Account +from .account_owner import AccountOwner +from .address import Address +from .address_address_type import AddressAddressType +from .address_country import AddressCountry +from .address_type_enum import AddressTypeEnum +from .country_enum import CountryEnum +from .field_format_enum import FieldFormatEnum +from .field_type_enum import FieldTypeEnum +from .item_format_enum import ItemFormatEnum +from .item_schema import ItemSchema +from .item_type_enum import ItemTypeEnum +from .phone_number import PhoneNumber +from .remote_data import RemoteData +from .remote_field import RemoteField +from .remote_field_class import RemoteFieldClass +from .remote_field_class_field_choices_item import RemoteFieldClassFieldChoicesItem +from .remote_field_class_field_format import RemoteFieldClassFieldFormat +from .remote_field_class_field_type import RemoteFieldClassFieldType +from .remote_field_remote_field_class import RemoteFieldRemoteFieldClass +from .user import User LeadConvertedAccount = typing.Union[str, Account] diff --git a/src/merge/resources/crm/types/lead_converted_contact.py b/src/merge/resources/crm/types/lead_converted_contact.py index dc7f376b..fa093263 100644 --- a/src/merge/resources/crm/types/lead_converted_contact.py +++ b/src/merge/resources/crm/types/lead_converted_contact.py @@ -2,6 +2,30 @@ import typing +from .account import Account +from .account_owner import AccountOwner +from .address import Address +from .address_address_type import AddressAddressType +from .address_country import AddressCountry +from .address_type_enum import AddressTypeEnum from .contact import Contact +from .contact_account import ContactAccount +from .contact_owner import ContactOwner +from .country_enum import CountryEnum +from .email_address import EmailAddress +from .field_format_enum import FieldFormatEnum +from .field_type_enum import FieldTypeEnum +from .item_format_enum import ItemFormatEnum +from .item_schema import ItemSchema +from .item_type_enum import ItemTypeEnum +from .phone_number import PhoneNumber +from .remote_data import RemoteData +from .remote_field import RemoteField +from .remote_field_class import RemoteFieldClass +from .remote_field_class_field_choices_item import RemoteFieldClassFieldChoicesItem +from .remote_field_class_field_format import RemoteFieldClassFieldFormat +from .remote_field_class_field_type import RemoteFieldClassFieldType +from .remote_field_remote_field_class import RemoteFieldRemoteFieldClass +from .user import User LeadConvertedContact = typing.Union[str, Contact] diff --git a/src/merge/resources/crm/types/lead_owner.py b/src/merge/resources/crm/types/lead_owner.py index 15b1c97f..4c04d22c 100644 --- a/src/merge/resources/crm/types/lead_owner.py +++ b/src/merge/resources/crm/types/lead_owner.py @@ -2,6 +2,18 @@ import typing +from .field_format_enum import FieldFormatEnum +from .field_type_enum import FieldTypeEnum +from .item_format_enum import ItemFormatEnum +from .item_schema import ItemSchema +from .item_type_enum import ItemTypeEnum +from .remote_data import RemoteData +from .remote_field import RemoteField +from .remote_field_class import RemoteFieldClass +from .remote_field_class_field_choices_item import RemoteFieldClassFieldChoicesItem +from .remote_field_class_field_format import RemoteFieldClassFieldFormat +from .remote_field_class_field_type import RemoteFieldClassFieldType +from .remote_field_remote_field_class import RemoteFieldRemoteFieldClass from .user import User LeadOwner = typing.Union[str, User] diff --git a/src/merge/resources/crm/types/lead_request_converted_account.py b/src/merge/resources/crm/types/lead_request_converted_account.py index 6c66e7d6..4bb8ecfd 100644 --- a/src/merge/resources/crm/types/lead_request_converted_account.py +++ b/src/merge/resources/crm/types/lead_request_converted_account.py @@ -3,5 +3,25 @@ import typing from .account import Account +from .account_owner import AccountOwner +from .address import Address +from .address_address_type import AddressAddressType +from .address_country import AddressCountry +from .address_type_enum import AddressTypeEnum +from .country_enum import CountryEnum +from .field_format_enum import FieldFormatEnum +from .field_type_enum import FieldTypeEnum +from .item_format_enum import ItemFormatEnum +from .item_schema import ItemSchema +from .item_type_enum import ItemTypeEnum +from .phone_number import PhoneNumber +from .remote_data import RemoteData +from .remote_field import RemoteField +from .remote_field_class import RemoteFieldClass +from .remote_field_class_field_choices_item import RemoteFieldClassFieldChoicesItem +from .remote_field_class_field_format import RemoteFieldClassFieldFormat +from .remote_field_class_field_type import RemoteFieldClassFieldType +from .remote_field_remote_field_class import RemoteFieldRemoteFieldClass +from .user import User LeadRequestConvertedAccount = typing.Union[str, Account] diff --git a/src/merge/resources/crm/types/lead_request_converted_contact.py b/src/merge/resources/crm/types/lead_request_converted_contact.py index 8d7e5a8d..2d161766 100644 --- a/src/merge/resources/crm/types/lead_request_converted_contact.py +++ b/src/merge/resources/crm/types/lead_request_converted_contact.py @@ -2,6 +2,30 @@ import typing +from .account import Account +from .account_owner import AccountOwner +from .address import Address +from .address_address_type import AddressAddressType +from .address_country import AddressCountry +from .address_type_enum import AddressTypeEnum from .contact import Contact +from .contact_account import ContactAccount +from .contact_owner import ContactOwner +from .country_enum import CountryEnum +from .email_address import EmailAddress +from .field_format_enum import FieldFormatEnum +from .field_type_enum import FieldTypeEnum +from .item_format_enum import ItemFormatEnum +from .item_schema import ItemSchema +from .item_type_enum import ItemTypeEnum +from .phone_number import PhoneNumber +from .remote_data import RemoteData +from .remote_field import RemoteField +from .remote_field_class import RemoteFieldClass +from .remote_field_class_field_choices_item import RemoteFieldClassFieldChoicesItem +from .remote_field_class_field_format import RemoteFieldClassFieldFormat +from .remote_field_class_field_type import RemoteFieldClassFieldType +from .remote_field_remote_field_class import RemoteFieldRemoteFieldClass +from .user import User LeadRequestConvertedContact = typing.Union[str, Contact] diff --git a/src/merge/resources/crm/types/lead_request_owner.py b/src/merge/resources/crm/types/lead_request_owner.py index f0c6e51c..c832ddd2 100644 --- a/src/merge/resources/crm/types/lead_request_owner.py +++ b/src/merge/resources/crm/types/lead_request_owner.py @@ -2,6 +2,18 @@ import typing +from .field_format_enum import FieldFormatEnum +from .field_type_enum import FieldTypeEnum +from .item_format_enum import ItemFormatEnum +from .item_schema import ItemSchema +from .item_type_enum import ItemTypeEnum +from .remote_data import RemoteData +from .remote_field import RemoteField +from .remote_field_class import RemoteFieldClass +from .remote_field_class_field_choices_item import RemoteFieldClassFieldChoicesItem +from .remote_field_class_field_format import RemoteFieldClassFieldFormat +from .remote_field_class_field_type import RemoteFieldClassFieldType +from .remote_field_remote_field_class import RemoteFieldRemoteFieldClass from .user import User LeadRequestOwner = typing.Union[str, User] diff --git a/src/merge/resources/crm/types/note_account.py b/src/merge/resources/crm/types/note_account.py index 5dcfbb0f..b1fe22ed 100644 --- a/src/merge/resources/crm/types/note_account.py +++ b/src/merge/resources/crm/types/note_account.py @@ -3,5 +3,25 @@ import typing from .account import Account +from .account_owner import AccountOwner +from .address import Address +from .address_address_type import AddressAddressType +from .address_country import AddressCountry +from .address_type_enum import AddressTypeEnum +from .country_enum import CountryEnum +from .field_format_enum import FieldFormatEnum +from .field_type_enum import FieldTypeEnum +from .item_format_enum import ItemFormatEnum +from .item_schema import ItemSchema +from .item_type_enum import ItemTypeEnum +from .phone_number import PhoneNumber +from .remote_data import RemoteData +from .remote_field import RemoteField +from .remote_field_class import RemoteFieldClass +from .remote_field_class_field_choices_item import RemoteFieldClassFieldChoicesItem +from .remote_field_class_field_format import RemoteFieldClassFieldFormat +from .remote_field_class_field_type import RemoteFieldClassFieldType +from .remote_field_remote_field_class import RemoteFieldRemoteFieldClass +from .user import User NoteAccount = typing.Union[str, Account] diff --git a/src/merge/resources/crm/types/note_contact.py b/src/merge/resources/crm/types/note_contact.py index c1e000f6..d2e85eaf 100644 --- a/src/merge/resources/crm/types/note_contact.py +++ b/src/merge/resources/crm/types/note_contact.py @@ -2,6 +2,30 @@ import typing +from .account import Account +from .account_owner import AccountOwner +from .address import Address +from .address_address_type import AddressAddressType +from .address_country import AddressCountry +from .address_type_enum import AddressTypeEnum from .contact import Contact +from .contact_account import ContactAccount +from .contact_owner import ContactOwner +from .country_enum import CountryEnum +from .email_address import EmailAddress +from .field_format_enum import FieldFormatEnum +from .field_type_enum import FieldTypeEnum +from .item_format_enum import ItemFormatEnum +from .item_schema import ItemSchema +from .item_type_enum import ItemTypeEnum +from .phone_number import PhoneNumber +from .remote_data import RemoteData +from .remote_field import RemoteField +from .remote_field_class import RemoteFieldClass +from .remote_field_class_field_choices_item import RemoteFieldClassFieldChoicesItem +from .remote_field_class_field_format import RemoteFieldClassFieldFormat +from .remote_field_class_field_type import RemoteFieldClassFieldType +from .remote_field_remote_field_class import RemoteFieldRemoteFieldClass +from .user import User NoteContact = typing.Union[str, Contact] diff --git a/src/merge/resources/crm/types/note_opportunity.py b/src/merge/resources/crm/types/note_opportunity.py index c2c035a6..bbca317a 100644 --- a/src/merge/resources/crm/types/note_opportunity.py +++ b/src/merge/resources/crm/types/note_opportunity.py @@ -2,6 +2,33 @@ import typing +from .account import Account +from .account_owner import AccountOwner +from .address import Address +from .address_address_type import AddressAddressType +from .address_country import AddressCountry +from .address_type_enum import AddressTypeEnum +from .country_enum import CountryEnum +from .field_format_enum import FieldFormatEnum +from .field_type_enum import FieldTypeEnum +from .item_format_enum import ItemFormatEnum +from .item_schema import ItemSchema +from .item_type_enum import ItemTypeEnum from .opportunity import Opportunity +from .opportunity_account import OpportunityAccount +from .opportunity_owner import OpportunityOwner +from .opportunity_stage import OpportunityStage +from .opportunity_status import OpportunityStatus +from .opportunity_status_enum import OpportunityStatusEnum +from .phone_number import PhoneNumber +from .remote_data import RemoteData +from .remote_field import RemoteField +from .remote_field_class import RemoteFieldClass +from .remote_field_class_field_choices_item import RemoteFieldClassFieldChoicesItem +from .remote_field_class_field_format import RemoteFieldClassFieldFormat +from .remote_field_class_field_type import RemoteFieldClassFieldType +from .remote_field_remote_field_class import RemoteFieldRemoteFieldClass +from .stage import Stage +from .user import User NoteOpportunity = typing.Union[str, Opportunity] diff --git a/src/merge/resources/crm/types/note_owner.py b/src/merge/resources/crm/types/note_owner.py index 27f125fd..4a666452 100644 --- a/src/merge/resources/crm/types/note_owner.py +++ b/src/merge/resources/crm/types/note_owner.py @@ -2,6 +2,18 @@ import typing +from .field_format_enum import FieldFormatEnum +from .field_type_enum import FieldTypeEnum +from .item_format_enum import ItemFormatEnum +from .item_schema import ItemSchema +from .item_type_enum import ItemTypeEnum +from .remote_data import RemoteData +from .remote_field import RemoteField +from .remote_field_class import RemoteFieldClass +from .remote_field_class_field_choices_item import RemoteFieldClassFieldChoicesItem +from .remote_field_class_field_format import RemoteFieldClassFieldFormat +from .remote_field_class_field_type import RemoteFieldClassFieldType +from .remote_field_remote_field_class import RemoteFieldRemoteFieldClass from .user import User NoteOwner = typing.Union[str, User] diff --git a/src/merge/resources/crm/types/note_request_account.py b/src/merge/resources/crm/types/note_request_account.py index fbb7f8dd..6d2c341b 100644 --- a/src/merge/resources/crm/types/note_request_account.py +++ b/src/merge/resources/crm/types/note_request_account.py @@ -3,5 +3,25 @@ import typing from .account import Account +from .account_owner import AccountOwner +from .address import Address +from .address_address_type import AddressAddressType +from .address_country import AddressCountry +from .address_type_enum import AddressTypeEnum +from .country_enum import CountryEnum +from .field_format_enum import FieldFormatEnum +from .field_type_enum import FieldTypeEnum +from .item_format_enum import ItemFormatEnum +from .item_schema import ItemSchema +from .item_type_enum import ItemTypeEnum +from .phone_number import PhoneNumber +from .remote_data import RemoteData +from .remote_field import RemoteField +from .remote_field_class import RemoteFieldClass +from .remote_field_class_field_choices_item import RemoteFieldClassFieldChoicesItem +from .remote_field_class_field_format import RemoteFieldClassFieldFormat +from .remote_field_class_field_type import RemoteFieldClassFieldType +from .remote_field_remote_field_class import RemoteFieldRemoteFieldClass +from .user import User NoteRequestAccount = typing.Union[str, Account] diff --git a/src/merge/resources/crm/types/note_request_contact.py b/src/merge/resources/crm/types/note_request_contact.py index 3477ca0e..a73dcf37 100644 --- a/src/merge/resources/crm/types/note_request_contact.py +++ b/src/merge/resources/crm/types/note_request_contact.py @@ -2,6 +2,30 @@ import typing +from .account import Account +from .account_owner import AccountOwner +from .address import Address +from .address_address_type import AddressAddressType +from .address_country import AddressCountry +from .address_type_enum import AddressTypeEnum from .contact import Contact +from .contact_account import ContactAccount +from .contact_owner import ContactOwner +from .country_enum import CountryEnum +from .email_address import EmailAddress +from .field_format_enum import FieldFormatEnum +from .field_type_enum import FieldTypeEnum +from .item_format_enum import ItemFormatEnum +from .item_schema import ItemSchema +from .item_type_enum import ItemTypeEnum +from .phone_number import PhoneNumber +from .remote_data import RemoteData +from .remote_field import RemoteField +from .remote_field_class import RemoteFieldClass +from .remote_field_class_field_choices_item import RemoteFieldClassFieldChoicesItem +from .remote_field_class_field_format import RemoteFieldClassFieldFormat +from .remote_field_class_field_type import RemoteFieldClassFieldType +from .remote_field_remote_field_class import RemoteFieldRemoteFieldClass +from .user import User NoteRequestContact = typing.Union[str, Contact] diff --git a/src/merge/resources/crm/types/note_request_opportunity.py b/src/merge/resources/crm/types/note_request_opportunity.py index c08bebf8..650b4b40 100644 --- a/src/merge/resources/crm/types/note_request_opportunity.py +++ b/src/merge/resources/crm/types/note_request_opportunity.py @@ -2,6 +2,33 @@ import typing +from .account import Account +from .account_owner import AccountOwner +from .address import Address +from .address_address_type import AddressAddressType +from .address_country import AddressCountry +from .address_type_enum import AddressTypeEnum +from .country_enum import CountryEnum +from .field_format_enum import FieldFormatEnum +from .field_type_enum import FieldTypeEnum +from .item_format_enum import ItemFormatEnum +from .item_schema import ItemSchema +from .item_type_enum import ItemTypeEnum from .opportunity import Opportunity +from .opportunity_account import OpportunityAccount +from .opportunity_owner import OpportunityOwner +from .opportunity_stage import OpportunityStage +from .opportunity_status import OpportunityStatus +from .opportunity_status_enum import OpportunityStatusEnum +from .phone_number import PhoneNumber +from .remote_data import RemoteData +from .remote_field import RemoteField +from .remote_field_class import RemoteFieldClass +from .remote_field_class_field_choices_item import RemoteFieldClassFieldChoicesItem +from .remote_field_class_field_format import RemoteFieldClassFieldFormat +from .remote_field_class_field_type import RemoteFieldClassFieldType +from .remote_field_remote_field_class import RemoteFieldRemoteFieldClass +from .stage import Stage +from .user import User NoteRequestOpportunity = typing.Union[str, Opportunity] diff --git a/src/merge/resources/crm/types/note_request_owner.py b/src/merge/resources/crm/types/note_request_owner.py index 558efe8f..772c1683 100644 --- a/src/merge/resources/crm/types/note_request_owner.py +++ b/src/merge/resources/crm/types/note_request_owner.py @@ -2,6 +2,18 @@ import typing +from .field_format_enum import FieldFormatEnum +from .field_type_enum import FieldTypeEnum +from .item_format_enum import ItemFormatEnum +from .item_schema import ItemSchema +from .item_type_enum import ItemTypeEnum +from .remote_data import RemoteData +from .remote_field import RemoteField +from .remote_field_class import RemoteFieldClass +from .remote_field_class_field_choices_item import RemoteFieldClassFieldChoicesItem +from .remote_field_class_field_format import RemoteFieldClassFieldFormat +from .remote_field_class_field_type import RemoteFieldClassFieldType +from .remote_field_remote_field_class import RemoteFieldRemoteFieldClass from .user import User NoteRequestOwner = typing.Union[str, User] diff --git a/src/merge/resources/crm/types/opportunity_account.py b/src/merge/resources/crm/types/opportunity_account.py index db9ff512..3d76cc6a 100644 --- a/src/merge/resources/crm/types/opportunity_account.py +++ b/src/merge/resources/crm/types/opportunity_account.py @@ -3,5 +3,25 @@ import typing from .account import Account +from .account_owner import AccountOwner +from .address import Address +from .address_address_type import AddressAddressType +from .address_country import AddressCountry +from .address_type_enum import AddressTypeEnum +from .country_enum import CountryEnum +from .field_format_enum import FieldFormatEnum +from .field_type_enum import FieldTypeEnum +from .item_format_enum import ItemFormatEnum +from .item_schema import ItemSchema +from .item_type_enum import ItemTypeEnum +from .phone_number import PhoneNumber +from .remote_data import RemoteData +from .remote_field import RemoteField +from .remote_field_class import RemoteFieldClass +from .remote_field_class_field_choices_item import RemoteFieldClassFieldChoicesItem +from .remote_field_class_field_format import RemoteFieldClassFieldFormat +from .remote_field_class_field_type import RemoteFieldClassFieldType +from .remote_field_remote_field_class import RemoteFieldRemoteFieldClass +from .user import User OpportunityAccount = typing.Union[str, Account] diff --git a/src/merge/resources/crm/types/opportunity_owner.py b/src/merge/resources/crm/types/opportunity_owner.py index 8ff3242c..8862753c 100644 --- a/src/merge/resources/crm/types/opportunity_owner.py +++ b/src/merge/resources/crm/types/opportunity_owner.py @@ -2,6 +2,18 @@ import typing +from .field_format_enum import FieldFormatEnum +from .field_type_enum import FieldTypeEnum +from .item_format_enum import ItemFormatEnum +from .item_schema import ItemSchema +from .item_type_enum import ItemTypeEnum +from .remote_data import RemoteData +from .remote_field import RemoteField +from .remote_field_class import RemoteFieldClass +from .remote_field_class_field_choices_item import RemoteFieldClassFieldChoicesItem +from .remote_field_class_field_format import RemoteFieldClassFieldFormat +from .remote_field_class_field_type import RemoteFieldClassFieldType +from .remote_field_remote_field_class import RemoteFieldRemoteFieldClass from .user import User OpportunityOwner = typing.Union[str, User] diff --git a/src/merge/resources/crm/types/opportunity_request_account.py b/src/merge/resources/crm/types/opportunity_request_account.py index 4d405b9c..5f507798 100644 --- a/src/merge/resources/crm/types/opportunity_request_account.py +++ b/src/merge/resources/crm/types/opportunity_request_account.py @@ -3,5 +3,25 @@ import typing from .account import Account +from .account_owner import AccountOwner +from .address import Address +from .address_address_type import AddressAddressType +from .address_country import AddressCountry +from .address_type_enum import AddressTypeEnum +from .country_enum import CountryEnum +from .field_format_enum import FieldFormatEnum +from .field_type_enum import FieldTypeEnum +from .item_format_enum import ItemFormatEnum +from .item_schema import ItemSchema +from .item_type_enum import ItemTypeEnum +from .phone_number import PhoneNumber +from .remote_data import RemoteData +from .remote_field import RemoteField +from .remote_field_class import RemoteFieldClass +from .remote_field_class_field_choices_item import RemoteFieldClassFieldChoicesItem +from .remote_field_class_field_format import RemoteFieldClassFieldFormat +from .remote_field_class_field_type import RemoteFieldClassFieldType +from .remote_field_remote_field_class import RemoteFieldRemoteFieldClass +from .user import User OpportunityRequestAccount = typing.Union[str, Account] diff --git a/src/merge/resources/crm/types/opportunity_request_owner.py b/src/merge/resources/crm/types/opportunity_request_owner.py index d97f6d73..d37a5d23 100644 --- a/src/merge/resources/crm/types/opportunity_request_owner.py +++ b/src/merge/resources/crm/types/opportunity_request_owner.py @@ -2,6 +2,18 @@ import typing +from .field_format_enum import FieldFormatEnum +from .field_type_enum import FieldTypeEnum +from .item_format_enum import ItemFormatEnum +from .item_schema import ItemSchema +from .item_type_enum import ItemTypeEnum +from .remote_data import RemoteData +from .remote_field import RemoteField +from .remote_field_class import RemoteFieldClass +from .remote_field_class_field_choices_item import RemoteFieldClassFieldChoicesItem +from .remote_field_class_field_format import RemoteFieldClassFieldFormat +from .remote_field_class_field_type import RemoteFieldClassFieldType +from .remote_field_remote_field_class import RemoteFieldRemoteFieldClass from .user import User OpportunityRequestOwner = typing.Union[str, User] diff --git a/src/merge/resources/crm/types/opportunity_request_stage.py b/src/merge/resources/crm/types/opportunity_request_stage.py index d781d136..ce964e19 100644 --- a/src/merge/resources/crm/types/opportunity_request_stage.py +++ b/src/merge/resources/crm/types/opportunity_request_stage.py @@ -2,6 +2,18 @@ import typing +from .field_format_enum import FieldFormatEnum +from .field_type_enum import FieldTypeEnum +from .item_format_enum import ItemFormatEnum +from .item_schema import ItemSchema +from .item_type_enum import ItemTypeEnum +from .remote_data import RemoteData +from .remote_field import RemoteField +from .remote_field_class import RemoteFieldClass +from .remote_field_class_field_choices_item import RemoteFieldClassFieldChoicesItem +from .remote_field_class_field_format import RemoteFieldClassFieldFormat +from .remote_field_class_field_type import RemoteFieldClassFieldType +from .remote_field_remote_field_class import RemoteFieldRemoteFieldClass from .stage import Stage OpportunityRequestStage = typing.Union[str, Stage] diff --git a/src/merge/resources/crm/types/opportunity_stage.py b/src/merge/resources/crm/types/opportunity_stage.py index d882ebd9..a5a1f09e 100644 --- a/src/merge/resources/crm/types/opportunity_stage.py +++ b/src/merge/resources/crm/types/opportunity_stage.py @@ -2,6 +2,18 @@ import typing +from .field_format_enum import FieldFormatEnum +from .field_type_enum import FieldTypeEnum +from .item_format_enum import ItemFormatEnum +from .item_schema import ItemSchema +from .item_type_enum import ItemTypeEnum +from .remote_data import RemoteData +from .remote_field import RemoteField +from .remote_field_class import RemoteFieldClass +from .remote_field_class_field_choices_item import RemoteFieldClassFieldChoicesItem +from .remote_field_class_field_format import RemoteFieldClassFieldFormat +from .remote_field_class_field_type import RemoteFieldClassFieldType +from .remote_field_remote_field_class import RemoteFieldRemoteFieldClass from .stage import Stage OpportunityStage = typing.Union[str, Stage] diff --git a/src/merge/resources/crm/types/patched_contact_request_owner.py b/src/merge/resources/crm/types/patched_contact_request_owner.py index 00bd5551..b28474cc 100644 --- a/src/merge/resources/crm/types/patched_contact_request_owner.py +++ b/src/merge/resources/crm/types/patched_contact_request_owner.py @@ -2,6 +2,18 @@ import typing +from .field_format_enum import FieldFormatEnum +from .field_type_enum import FieldTypeEnum +from .item_format_enum import ItemFormatEnum +from .item_schema import ItemSchema +from .item_type_enum import ItemTypeEnum +from .remote_data import RemoteData +from .remote_field import RemoteField +from .remote_field_class import RemoteFieldClass +from .remote_field_class_field_choices_item import RemoteFieldClassFieldChoicesItem +from .remote_field_class_field_format import RemoteFieldClassFieldFormat +from .remote_field_class_field_type import RemoteFieldClassFieldType +from .remote_field_remote_field_class import RemoteFieldRemoteFieldClass from .user import User PatchedContactRequestOwner = typing.Union[str, User] diff --git a/src/merge/resources/crm/types/remote_field_remote_field_class.py b/src/merge/resources/crm/types/remote_field_remote_field_class.py index b7ab0ef6..262f78d1 100644 --- a/src/merge/resources/crm/types/remote_field_remote_field_class.py +++ b/src/merge/resources/crm/types/remote_field_remote_field_class.py @@ -2,6 +2,14 @@ import typing +from .field_format_enum import FieldFormatEnum +from .field_type_enum import FieldTypeEnum +from .item_format_enum import ItemFormatEnum +from .item_schema import ItemSchema +from .item_type_enum import ItemTypeEnum from .remote_field_class import RemoteFieldClass +from .remote_field_class_field_choices_item import RemoteFieldClassFieldChoicesItem +from .remote_field_class_field_format import RemoteFieldClassFieldFormat +from .remote_field_class_field_type import RemoteFieldClassFieldType RemoteFieldRemoteFieldClass = typing.Union[str, RemoteFieldClass] diff --git a/src/merge/resources/crm/types/remote_field_request_remote_field_class.py b/src/merge/resources/crm/types/remote_field_request_remote_field_class.py index 08797e5e..7a6238f4 100644 --- a/src/merge/resources/crm/types/remote_field_request_remote_field_class.py +++ b/src/merge/resources/crm/types/remote_field_request_remote_field_class.py @@ -2,6 +2,14 @@ import typing +from .field_format_enum import FieldFormatEnum +from .field_type_enum import FieldTypeEnum +from .item_format_enum import ItemFormatEnum +from .item_schema import ItemSchema +from .item_type_enum import ItemTypeEnum from .remote_field_class import RemoteFieldClass +from .remote_field_class_field_choices_item import RemoteFieldClassFieldChoicesItem +from .remote_field_class_field_format import RemoteFieldClassFieldFormat +from .remote_field_class_field_type import RemoteFieldClassFieldType RemoteFieldRequestRemoteFieldClass = typing.Union[str, RemoteFieldClass] diff --git a/src/merge/resources/crm/types/task_account.py b/src/merge/resources/crm/types/task_account.py index a3bf248f..09d37fae 100644 --- a/src/merge/resources/crm/types/task_account.py +++ b/src/merge/resources/crm/types/task_account.py @@ -3,5 +3,25 @@ import typing from .account import Account +from .account_owner import AccountOwner +from .address import Address +from .address_address_type import AddressAddressType +from .address_country import AddressCountry +from .address_type_enum import AddressTypeEnum +from .country_enum import CountryEnum +from .field_format_enum import FieldFormatEnum +from .field_type_enum import FieldTypeEnum +from .item_format_enum import ItemFormatEnum +from .item_schema import ItemSchema +from .item_type_enum import ItemTypeEnum +from .phone_number import PhoneNumber +from .remote_data import RemoteData +from .remote_field import RemoteField +from .remote_field_class import RemoteFieldClass +from .remote_field_class_field_choices_item import RemoteFieldClassFieldChoicesItem +from .remote_field_class_field_format import RemoteFieldClassFieldFormat +from .remote_field_class_field_type import RemoteFieldClassFieldType +from .remote_field_remote_field_class import RemoteFieldRemoteFieldClass +from .user import User TaskAccount = typing.Union[str, Account] diff --git a/src/merge/resources/crm/types/task_opportunity.py b/src/merge/resources/crm/types/task_opportunity.py index b8cd81df..d2437885 100644 --- a/src/merge/resources/crm/types/task_opportunity.py +++ b/src/merge/resources/crm/types/task_opportunity.py @@ -2,6 +2,33 @@ import typing +from .account import Account +from .account_owner import AccountOwner +from .address import Address +from .address_address_type import AddressAddressType +from .address_country import AddressCountry +from .address_type_enum import AddressTypeEnum +from .country_enum import CountryEnum +from .field_format_enum import FieldFormatEnum +from .field_type_enum import FieldTypeEnum +from .item_format_enum import ItemFormatEnum +from .item_schema import ItemSchema +from .item_type_enum import ItemTypeEnum from .opportunity import Opportunity +from .opportunity_account import OpportunityAccount +from .opportunity_owner import OpportunityOwner +from .opportunity_stage import OpportunityStage +from .opportunity_status import OpportunityStatus +from .opportunity_status_enum import OpportunityStatusEnum +from .phone_number import PhoneNumber +from .remote_data import RemoteData +from .remote_field import RemoteField +from .remote_field_class import RemoteFieldClass +from .remote_field_class_field_choices_item import RemoteFieldClassFieldChoicesItem +from .remote_field_class_field_format import RemoteFieldClassFieldFormat +from .remote_field_class_field_type import RemoteFieldClassFieldType +from .remote_field_remote_field_class import RemoteFieldRemoteFieldClass +from .stage import Stage +from .user import User TaskOpportunity = typing.Union[str, Opportunity] diff --git a/src/merge/resources/crm/types/task_owner.py b/src/merge/resources/crm/types/task_owner.py index b7a0711f..d55ccab2 100644 --- a/src/merge/resources/crm/types/task_owner.py +++ b/src/merge/resources/crm/types/task_owner.py @@ -2,6 +2,18 @@ import typing +from .field_format_enum import FieldFormatEnum +from .field_type_enum import FieldTypeEnum +from .item_format_enum import ItemFormatEnum +from .item_schema import ItemSchema +from .item_type_enum import ItemTypeEnum +from .remote_data import RemoteData +from .remote_field import RemoteField +from .remote_field_class import RemoteFieldClass +from .remote_field_class_field_choices_item import RemoteFieldClassFieldChoicesItem +from .remote_field_class_field_format import RemoteFieldClassFieldFormat +from .remote_field_class_field_type import RemoteFieldClassFieldType +from .remote_field_remote_field_class import RemoteFieldRemoteFieldClass from .user import User TaskOwner = typing.Union[str, User] diff --git a/src/merge/resources/crm/types/task_request_account.py b/src/merge/resources/crm/types/task_request_account.py index cac39842..8cc34faa 100644 --- a/src/merge/resources/crm/types/task_request_account.py +++ b/src/merge/resources/crm/types/task_request_account.py @@ -3,5 +3,25 @@ import typing from .account import Account +from .account_owner import AccountOwner +from .address import Address +from .address_address_type import AddressAddressType +from .address_country import AddressCountry +from .address_type_enum import AddressTypeEnum +from .country_enum import CountryEnum +from .field_format_enum import FieldFormatEnum +from .field_type_enum import FieldTypeEnum +from .item_format_enum import ItemFormatEnum +from .item_schema import ItemSchema +from .item_type_enum import ItemTypeEnum +from .phone_number import PhoneNumber +from .remote_data import RemoteData +from .remote_field import RemoteField +from .remote_field_class import RemoteFieldClass +from .remote_field_class_field_choices_item import RemoteFieldClassFieldChoicesItem +from .remote_field_class_field_format import RemoteFieldClassFieldFormat +from .remote_field_class_field_type import RemoteFieldClassFieldType +from .remote_field_remote_field_class import RemoteFieldRemoteFieldClass +from .user import User TaskRequestAccount = typing.Union[str, Account] diff --git a/src/merge/resources/crm/types/task_request_opportunity.py b/src/merge/resources/crm/types/task_request_opportunity.py index ee239cba..a19dbb87 100644 --- a/src/merge/resources/crm/types/task_request_opportunity.py +++ b/src/merge/resources/crm/types/task_request_opportunity.py @@ -2,6 +2,33 @@ import typing +from .account import Account +from .account_owner import AccountOwner +from .address import Address +from .address_address_type import AddressAddressType +from .address_country import AddressCountry +from .address_type_enum import AddressTypeEnum +from .country_enum import CountryEnum +from .field_format_enum import FieldFormatEnum +from .field_type_enum import FieldTypeEnum +from .item_format_enum import ItemFormatEnum +from .item_schema import ItemSchema +from .item_type_enum import ItemTypeEnum from .opportunity import Opportunity +from .opportunity_account import OpportunityAccount +from .opportunity_owner import OpportunityOwner +from .opportunity_stage import OpportunityStage +from .opportunity_status import OpportunityStatus +from .opportunity_status_enum import OpportunityStatusEnum +from .phone_number import PhoneNumber +from .remote_data import RemoteData +from .remote_field import RemoteField +from .remote_field_class import RemoteFieldClass +from .remote_field_class_field_choices_item import RemoteFieldClassFieldChoicesItem +from .remote_field_class_field_format import RemoteFieldClassFieldFormat +from .remote_field_class_field_type import RemoteFieldClassFieldType +from .remote_field_remote_field_class import RemoteFieldRemoteFieldClass +from .stage import Stage +from .user import User TaskRequestOpportunity = typing.Union[str, Opportunity] diff --git a/src/merge/resources/crm/types/task_request_owner.py b/src/merge/resources/crm/types/task_request_owner.py index e0344b13..2844ce0c 100644 --- a/src/merge/resources/crm/types/task_request_owner.py +++ b/src/merge/resources/crm/types/task_request_owner.py @@ -2,6 +2,18 @@ import typing +from .field_format_enum import FieldFormatEnum +from .field_type_enum import FieldTypeEnum +from .item_format_enum import ItemFormatEnum +from .item_schema import ItemSchema +from .item_type_enum import ItemTypeEnum +from .remote_data import RemoteData +from .remote_field import RemoteField +from .remote_field_class import RemoteFieldClass +from .remote_field_class_field_choices_item import RemoteFieldClassFieldChoicesItem +from .remote_field_class_field_format import RemoteFieldClassFieldFormat +from .remote_field_class_field_type import RemoteFieldClassFieldType +from .remote_field_remote_field_class import RemoteFieldRemoteFieldClass from .user import User TaskRequestOwner = typing.Union[str, User] 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/filestorage/types/file_folder.py b/src/merge/resources/filestorage/types/file_folder.py index 2c06f030..18f5f388 100644 --- a/src/merge/resources/filestorage/types/file_folder.py +++ b/src/merge/resources/filestorage/types/file_folder.py @@ -1,7 +1,23 @@ # This file was auto-generated by Fern from our API Definition. +from __future__ import annotations + import typing -from .folder import Folder +from .drive import Drive +from .folder_drive import FolderDrive +from .folder_permissions import FolderPermissions +from .folder_permissions_item import FolderPermissionsItem +from .group import Group +from .permission_request import PermissionRequest +from .permission_request_group import PermissionRequestGroup +from .permission_request_roles_item import PermissionRequestRolesItem +from .permission_request_type import PermissionRequestType +from .permission_request_user import PermissionRequestUser +from .roles_enum import RolesEnum +from .type_enum import TypeEnum +from .user import User -FileFolder = typing.Union[str, Folder] +FileFolder = typing.Union[str, "Folder"] +from .folder import Folder # noqa: E402 +from .folder_parent_folder import FolderParentFolder # noqa: E402 diff --git a/src/merge/resources/filestorage/types/file_permissions.py b/src/merge/resources/filestorage/types/file_permissions.py index 6e466019..04069ee6 100644 --- a/src/merge/resources/filestorage/types/file_permissions.py +++ b/src/merge/resources/filestorage/types/file_permissions.py @@ -3,5 +3,14 @@ import typing from .file_permissions_item import FilePermissionsItem +from .group import Group +from .permission_request import PermissionRequest +from .permission_request_group import PermissionRequestGroup +from .permission_request_roles_item import PermissionRequestRolesItem +from .permission_request_type import PermissionRequestType +from .permission_request_user import PermissionRequestUser +from .roles_enum import RolesEnum +from .type_enum import TypeEnum +from .user import User FilePermissions = typing.Union[str, typing.Any, typing.List[FilePermissionsItem]] diff --git a/src/merge/resources/filestorage/types/file_permissions_item.py b/src/merge/resources/filestorage/types/file_permissions_item.py index 250d3332..4a8ea8f0 100644 --- a/src/merge/resources/filestorage/types/file_permissions_item.py +++ b/src/merge/resources/filestorage/types/file_permissions_item.py @@ -2,6 +2,14 @@ import typing +from .group import Group from .permission_request import PermissionRequest +from .permission_request_group import PermissionRequestGroup +from .permission_request_roles_item import PermissionRequestRolesItem +from .permission_request_type import PermissionRequestType +from .permission_request_user import PermissionRequestUser +from .roles_enum import RolesEnum +from .type_enum import TypeEnum +from .user import User FilePermissionsItem = typing.Union[str, PermissionRequest] diff --git a/src/merge/resources/filestorage/types/file_request_folder.py b/src/merge/resources/filestorage/types/file_request_folder.py index 1a5fe16b..af6c6f72 100644 --- a/src/merge/resources/filestorage/types/file_request_folder.py +++ b/src/merge/resources/filestorage/types/file_request_folder.py @@ -1,7 +1,23 @@ # This file was auto-generated by Fern from our API Definition. +from __future__ import annotations + import typing -from .folder import Folder +from .drive import Drive +from .folder_drive import FolderDrive +from .folder_permissions import FolderPermissions +from .folder_permissions_item import FolderPermissionsItem +from .group import Group +from .permission_request import PermissionRequest +from .permission_request_group import PermissionRequestGroup +from .permission_request_roles_item import PermissionRequestRolesItem +from .permission_request_type import PermissionRequestType +from .permission_request_user import PermissionRequestUser +from .roles_enum import RolesEnum +from .type_enum import TypeEnum +from .user import User -FileRequestFolder = typing.Union[str, Folder] +FileRequestFolder = typing.Union[str, "Folder"] +from .folder import Folder # noqa: E402 +from .folder_parent_folder import FolderParentFolder # noqa: E402 diff --git a/src/merge/resources/filestorage/types/file_request_permissions.py b/src/merge/resources/filestorage/types/file_request_permissions.py index 75ca420e..e1214bbe 100644 --- a/src/merge/resources/filestorage/types/file_request_permissions.py +++ b/src/merge/resources/filestorage/types/file_request_permissions.py @@ -3,5 +3,14 @@ import typing from .file_request_permissions_item import FileRequestPermissionsItem +from .group import Group +from .permission_request import PermissionRequest +from .permission_request_group import PermissionRequestGroup +from .permission_request_roles_item import PermissionRequestRolesItem +from .permission_request_type import PermissionRequestType +from .permission_request_user import PermissionRequestUser +from .roles_enum import RolesEnum +from .type_enum import TypeEnum +from .user import User FileRequestPermissions = typing.Union[str, typing.Any, typing.List[FileRequestPermissionsItem]] diff --git a/src/merge/resources/filestorage/types/file_request_permissions_item.py b/src/merge/resources/filestorage/types/file_request_permissions_item.py index c6e44350..35895d25 100644 --- a/src/merge/resources/filestorage/types/file_request_permissions_item.py +++ b/src/merge/resources/filestorage/types/file_request_permissions_item.py @@ -2,6 +2,14 @@ import typing +from .group import Group from .permission_request import PermissionRequest +from .permission_request_group import PermissionRequestGroup +from .permission_request_roles_item import PermissionRequestRolesItem +from .permission_request_type import PermissionRequestType +from .permission_request_user import PermissionRequestUser +from .roles_enum import RolesEnum +from .type_enum import TypeEnum +from .user import User FileRequestPermissionsItem = typing.Union[str, PermissionRequest] diff --git a/src/merge/resources/filestorage/types/folder.py b/src/merge/resources/filestorage/types/folder.py index a4eeca45..a9d8b1bb 100644 --- a/src/merge/resources/filestorage/types/folder.py +++ b/src/merge/resources/filestorage/types/folder.py @@ -34,7 +34,7 @@ class Folder(pydantic.BaseModel): folder_url: typing.Optional[str] = pydantic.Field(description="The URL to access the folder.") size: typing.Optional[int] = pydantic.Field(description="The folder's size, in bytes.") description: typing.Optional[str] = pydantic.Field(description="The folder's description.") - parent_folder: typing.Optional[FolderParentFolder] = pydantic.Field( + parent_folder: typing.Optional["FolderParentFolder"] = pydantic.Field( description="The folder that the folder belongs to." ) drive: typing.Optional[FolderDrive] = pydantic.Field(description="The drive that the folder belongs to.") @@ -73,4 +73,4 @@ class Config: from .folder_parent_folder import FolderParentFolder # noqa: E402 -Folder.update_forward_refs() +Folder.update_forward_refs(FolderParentFolder=FolderParentFolder) diff --git a/src/merge/resources/filestorage/types/folder_parent_folder.py b/src/merge/resources/filestorage/types/folder_parent_folder.py index c8b5c79a..862fd1f2 100644 --- a/src/merge/resources/filestorage/types/folder_parent_folder.py +++ b/src/merge/resources/filestorage/types/folder_parent_folder.py @@ -1,7 +1,22 @@ # This file was auto-generated by Fern from our API Definition. +from __future__ import annotations + import typing -from .folder import Folder +from .drive import Drive +from .folder_drive import FolderDrive +from .folder_permissions import FolderPermissions +from .folder_permissions_item import FolderPermissionsItem +from .group import Group +from .permission_request import PermissionRequest +from .permission_request_group import PermissionRequestGroup +from .permission_request_roles_item import PermissionRequestRolesItem +from .permission_request_type import PermissionRequestType +from .permission_request_user import PermissionRequestUser +from .roles_enum import RolesEnum +from .type_enum import TypeEnum +from .user import User -FolderParentFolder = typing.Union[str, Folder] +FolderParentFolder = typing.Union[str, "Folder"] +from .folder import Folder # noqa: E402 diff --git a/src/merge/resources/filestorage/types/folder_permissions.py b/src/merge/resources/filestorage/types/folder_permissions.py index 0609650a..b04763f3 100644 --- a/src/merge/resources/filestorage/types/folder_permissions.py +++ b/src/merge/resources/filestorage/types/folder_permissions.py @@ -3,5 +3,14 @@ import typing from .folder_permissions_item import FolderPermissionsItem +from .group import Group +from .permission_request import PermissionRequest +from .permission_request_group import PermissionRequestGroup +from .permission_request_roles_item import PermissionRequestRolesItem +from .permission_request_type import PermissionRequestType +from .permission_request_user import PermissionRequestUser +from .roles_enum import RolesEnum +from .type_enum import TypeEnum +from .user import User FolderPermissions = typing.Union[str, typing.Any, typing.List[FolderPermissionsItem]] diff --git a/src/merge/resources/filestorage/types/folder_permissions_item.py b/src/merge/resources/filestorage/types/folder_permissions_item.py index 1d33e70d..998ae436 100644 --- a/src/merge/resources/filestorage/types/folder_permissions_item.py +++ b/src/merge/resources/filestorage/types/folder_permissions_item.py @@ -2,6 +2,14 @@ import typing +from .group import Group from .permission_request import PermissionRequest +from .permission_request_group import PermissionRequestGroup +from .permission_request_roles_item import PermissionRequestRolesItem +from .permission_request_type import PermissionRequestType +from .permission_request_user import PermissionRequestUser +from .roles_enum import RolesEnum +from .type_enum import TypeEnum +from .user import User FolderPermissionsItem = typing.Union[str, PermissionRequest] diff --git a/src/merge/resources/filestorage/types/folder_request_parent_folder.py b/src/merge/resources/filestorage/types/folder_request_parent_folder.py index 52f6b3ad..8e3c0eba 100644 --- a/src/merge/resources/filestorage/types/folder_request_parent_folder.py +++ b/src/merge/resources/filestorage/types/folder_request_parent_folder.py @@ -1,7 +1,23 @@ # This file was auto-generated by Fern from our API Definition. +from __future__ import annotations + import typing -from .folder import Folder +from .drive import Drive +from .folder_drive import FolderDrive +from .folder_permissions import FolderPermissions +from .folder_permissions_item import FolderPermissionsItem +from .group import Group +from .permission_request import PermissionRequest +from .permission_request_group import PermissionRequestGroup +from .permission_request_roles_item import PermissionRequestRolesItem +from .permission_request_type import PermissionRequestType +from .permission_request_user import PermissionRequestUser +from .roles_enum import RolesEnum +from .type_enum import TypeEnum +from .user import User -FolderRequestParentFolder = typing.Union[str, Folder] +FolderRequestParentFolder = typing.Union[str, "Folder"] +from .folder import Folder # noqa: E402 +from .folder_parent_folder import FolderParentFolder # noqa: E402 diff --git a/src/merge/resources/filestorage/types/folder_request_permissions.py b/src/merge/resources/filestorage/types/folder_request_permissions.py index 8e12fc51..eec05241 100644 --- a/src/merge/resources/filestorage/types/folder_request_permissions.py +++ b/src/merge/resources/filestorage/types/folder_request_permissions.py @@ -3,5 +3,14 @@ import typing from .folder_request_permissions_item import FolderRequestPermissionsItem +from .group import Group +from .permission_request import PermissionRequest +from .permission_request_group import PermissionRequestGroup +from .permission_request_roles_item import PermissionRequestRolesItem +from .permission_request_type import PermissionRequestType +from .permission_request_user import PermissionRequestUser +from .roles_enum import RolesEnum +from .type_enum import TypeEnum +from .user import User FolderRequestPermissions = typing.Union[str, typing.Any, typing.List[FolderRequestPermissionsItem]] diff --git a/src/merge/resources/filestorage/types/folder_request_permissions_item.py b/src/merge/resources/filestorage/types/folder_request_permissions_item.py index 7fc6ee86..f939baea 100644 --- a/src/merge/resources/filestorage/types/folder_request_permissions_item.py +++ b/src/merge/resources/filestorage/types/folder_request_permissions_item.py @@ -2,6 +2,14 @@ import typing +from .group import Group from .permission_request import PermissionRequest +from .permission_request_group import PermissionRequestGroup +from .permission_request_roles_item import PermissionRequestRolesItem +from .permission_request_type import PermissionRequestType +from .permission_request_user import PermissionRequestUser +from .roles_enum import RolesEnum +from .type_enum import TypeEnum +from .user import User FolderRequestPermissionsItem = typing.Union[str, PermissionRequest] 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/hris/types/bank_info_employee.py b/src/merge/resources/hris/types/bank_info_employee.py index b81c6648..68c35513 100644 --- a/src/merge/resources/hris/types/bank_info_employee.py +++ b/src/merge/resources/hris/types/bank_info_employee.py @@ -1,7 +1,51 @@ # This file was auto-generated by Fern from our API Definition. +from __future__ import annotations + import typing -from .employee import Employee +from .company import Company +from .country_enum import CountryEnum +from .employee_company import EmployeeCompany +from .employee_employment_status import EmployeeEmploymentStatus +from .employee_ethnicity import EmployeeEthnicity +from .employee_gender import EmployeeGender +from .employee_groups_item import EmployeeGroupsItem +from .employee_home_location import EmployeeHomeLocation +from .employee_marital_status import EmployeeMaritalStatus +from .employee_pay_group import EmployeePayGroup +from .employee_team import EmployeeTeam +from .employee_work_location import EmployeeWorkLocation +from .employment_employment_type import EmploymentEmploymentType +from .employment_flsa_status import EmploymentFlsaStatus +from .employment_pay_currency import EmploymentPayCurrency +from .employment_pay_frequency import EmploymentPayFrequency +from .employment_pay_group import EmploymentPayGroup +from .employment_pay_period import EmploymentPayPeriod +from .employment_status_enum import EmploymentStatusEnum +from .employment_type_enum import EmploymentTypeEnum +from .ethnicity_enum import EthnicityEnum +from .flsa_status_enum import FlsaStatusEnum +from .gender_enum import GenderEnum +from .group import Group +from .group_type import GroupType +from .group_type_enum import GroupTypeEnum +from .location import Location +from .location_country import LocationCountry +from .location_location_type import LocationLocationType +from .location_type_enum import LocationTypeEnum +from .marital_status_enum import MaritalStatusEnum +from .pay_currency_enum import PayCurrencyEnum +from .pay_frequency_enum import PayFrequencyEnum +from .pay_group import PayGroup +from .pay_period_enum import PayPeriodEnum +from .remote_data import RemoteData -BankInfoEmployee = typing.Union[str, Employee] +BankInfoEmployee = typing.Union[str, "Employee"] +from .employee import Employee # noqa: E402 +from .employee_employments_item import EmployeeEmploymentsItem # noqa: E402 +from .employee_manager import EmployeeManager # noqa: E402 +from .employment import Employment # noqa: E402 +from .employment_employee import EmploymentEmployee # noqa: E402 +from .team import Team # noqa: E402 +from .team_parent_team import TeamParentTeam # noqa: E402 diff --git a/src/merge/resources/hris/types/benefit_employee.py b/src/merge/resources/hris/types/benefit_employee.py index 4ded9a94..a0f74657 100644 --- a/src/merge/resources/hris/types/benefit_employee.py +++ b/src/merge/resources/hris/types/benefit_employee.py @@ -1,7 +1,51 @@ # This file was auto-generated by Fern from our API Definition. +from __future__ import annotations + import typing -from .employee import Employee +from .company import Company +from .country_enum import CountryEnum +from .employee_company import EmployeeCompany +from .employee_employment_status import EmployeeEmploymentStatus +from .employee_ethnicity import EmployeeEthnicity +from .employee_gender import EmployeeGender +from .employee_groups_item import EmployeeGroupsItem +from .employee_home_location import EmployeeHomeLocation +from .employee_marital_status import EmployeeMaritalStatus +from .employee_pay_group import EmployeePayGroup +from .employee_team import EmployeeTeam +from .employee_work_location import EmployeeWorkLocation +from .employment_employment_type import EmploymentEmploymentType +from .employment_flsa_status import EmploymentFlsaStatus +from .employment_pay_currency import EmploymentPayCurrency +from .employment_pay_frequency import EmploymentPayFrequency +from .employment_pay_group import EmploymentPayGroup +from .employment_pay_period import EmploymentPayPeriod +from .employment_status_enum import EmploymentStatusEnum +from .employment_type_enum import EmploymentTypeEnum +from .ethnicity_enum import EthnicityEnum +from .flsa_status_enum import FlsaStatusEnum +from .gender_enum import GenderEnum +from .group import Group +from .group_type import GroupType +from .group_type_enum import GroupTypeEnum +from .location import Location +from .location_country import LocationCountry +from .location_location_type import LocationLocationType +from .location_type_enum import LocationTypeEnum +from .marital_status_enum import MaritalStatusEnum +from .pay_currency_enum import PayCurrencyEnum +from .pay_frequency_enum import PayFrequencyEnum +from .pay_group import PayGroup +from .pay_period_enum import PayPeriodEnum +from .remote_data import RemoteData -BenefitEmployee = typing.Union[str, Employee] +BenefitEmployee = typing.Union[str, "Employee"] +from .employee import Employee # noqa: E402 +from .employee_employments_item import EmployeeEmploymentsItem # noqa: E402 +from .employee_manager import EmployeeManager # noqa: E402 +from .employment import Employment # noqa: E402 +from .employment_employee import EmploymentEmployee # noqa: E402 +from .team import Team # noqa: E402 +from .team_parent_team import TeamParentTeam # noqa: E402 diff --git a/src/merge/resources/hris/types/employee.py b/src/merge/resources/hris/types/employee.py index d22a0c2a..a344531d 100644 --- a/src/merge/resources/hris/types/employee.py +++ b/src/merge/resources/hris/types/employee.py @@ -56,12 +56,14 @@ class Employee(pydantic.BaseModel): work_email: typing.Optional[str] = pydantic.Field(description="The employee's work email.") personal_email: typing.Optional[str] = pydantic.Field(description="The employee's personal email.") mobile_phone_number: typing.Optional[str] = pydantic.Field(description="The employee's mobile phone number.") - employments: typing.Optional[typing.List[typing.Optional[EmployeeEmploymentsItem]]] = pydantic.Field( + employments: typing.Optional[typing.List[typing.Optional["EmployeeEmploymentsItem"]]] = pydantic.Field( description="Array of `Employment` IDs for this Employee." ) home_location: typing.Optional[EmployeeHomeLocation] = pydantic.Field(description="The employee's home address.") work_location: typing.Optional[EmployeeWorkLocation] = pydantic.Field(description="The employee's work address.") - manager: typing.Optional[EmployeeManager] = pydantic.Field(description="The employee ID of the employee's manager.") + manager: typing.Optional["EmployeeManager"] = pydantic.Field( + description="The employee ID of the employee's manager." + ) team: typing.Optional[EmployeeTeam] = pydantic.Field(description="The employee's team.") pay_group: typing.Optional[EmployeePayGroup] = pydantic.Field(description="The employee's pay group") ssn: typing.Optional[str] = pydantic.Field(description="The employee's social security number.") @@ -149,5 +151,7 @@ class Config: from .employee_employments_item import EmployeeEmploymentsItem # noqa: E402 from .employee_manager import EmployeeManager # noqa: E402 +from .employment import Employment # noqa: E402 +from .employment_employee import EmploymentEmployee # noqa: E402 -Employee.update_forward_refs() +Employee.update_forward_refs(EmployeeEmploymentsItem=EmployeeEmploymentsItem, EmployeeManager=EmployeeManager) diff --git a/src/merge/resources/hris/types/employee_company.py b/src/merge/resources/hris/types/employee_company.py index ff02a5e3..d5a3ea5b 100644 --- a/src/merge/resources/hris/types/employee_company.py +++ b/src/merge/resources/hris/types/employee_company.py @@ -3,5 +3,6 @@ import typing from .company import Company +from .remote_data import RemoteData EmployeeCompany = typing.Union[str, Company] diff --git a/src/merge/resources/hris/types/employee_employments_item.py b/src/merge/resources/hris/types/employee_employments_item.py index 3648173b..b55c36cc 100644 --- a/src/merge/resources/hris/types/employee_employments_item.py +++ b/src/merge/resources/hris/types/employee_employments_item.py @@ -1,7 +1,50 @@ # This file was auto-generated by Fern from our API Definition. +from __future__ import annotations + import typing -from .employment import Employment +from .company import Company +from .country_enum import CountryEnum +from .employee_company import EmployeeCompany +from .employee_employment_status import EmployeeEmploymentStatus +from .employee_ethnicity import EmployeeEthnicity +from .employee_gender import EmployeeGender +from .employee_groups_item import EmployeeGroupsItem +from .employee_home_location import EmployeeHomeLocation +from .employee_marital_status import EmployeeMaritalStatus +from .employee_pay_group import EmployeePayGroup +from .employee_team import EmployeeTeam +from .employee_work_location import EmployeeWorkLocation +from .employment_employment_type import EmploymentEmploymentType +from .employment_flsa_status import EmploymentFlsaStatus +from .employment_pay_currency import EmploymentPayCurrency +from .employment_pay_frequency import EmploymentPayFrequency +from .employment_pay_group import EmploymentPayGroup +from .employment_pay_period import EmploymentPayPeriod +from .employment_status_enum import EmploymentStatusEnum +from .employment_type_enum import EmploymentTypeEnum +from .ethnicity_enum import EthnicityEnum +from .flsa_status_enum import FlsaStatusEnum +from .gender_enum import GenderEnum +from .group import Group +from .group_type import GroupType +from .group_type_enum import GroupTypeEnum +from .location import Location +from .location_country import LocationCountry +from .location_location_type import LocationLocationType +from .location_type_enum import LocationTypeEnum +from .marital_status_enum import MaritalStatusEnum +from .pay_currency_enum import PayCurrencyEnum +from .pay_frequency_enum import PayFrequencyEnum +from .pay_group import PayGroup +from .pay_period_enum import PayPeriodEnum +from .remote_data import RemoteData -EmployeeEmploymentsItem = typing.Union[str, Employment] +EmployeeEmploymentsItem = typing.Union[str, "Employment"] +from .employee import Employee # noqa: E402 +from .employee_manager import EmployeeManager # noqa: E402 +from .employment import Employment # noqa: E402 +from .employment_employee import EmploymentEmployee # noqa: E402 +from .team import Team # noqa: E402 +from .team_parent_team import TeamParentTeam # noqa: E402 diff --git a/src/merge/resources/hris/types/employee_groups_item.py b/src/merge/resources/hris/types/employee_groups_item.py index c593a390..9940018d 100644 --- a/src/merge/resources/hris/types/employee_groups_item.py +++ b/src/merge/resources/hris/types/employee_groups_item.py @@ -3,5 +3,8 @@ import typing from .group import Group +from .group_type import GroupType +from .group_type_enum import GroupTypeEnum +from .remote_data import RemoteData EmployeeGroupsItem = typing.Union[str, Group] diff --git a/src/merge/resources/hris/types/employee_home_location.py b/src/merge/resources/hris/types/employee_home_location.py index 47c456b9..e30a6f63 100644 --- a/src/merge/resources/hris/types/employee_home_location.py +++ b/src/merge/resources/hris/types/employee_home_location.py @@ -2,6 +2,11 @@ import typing +from .country_enum import CountryEnum from .location import Location +from .location_country import LocationCountry +from .location_location_type import LocationLocationType +from .location_type_enum import LocationTypeEnum +from .remote_data import RemoteData EmployeeHomeLocation = typing.Union[str, Location] diff --git a/src/merge/resources/hris/types/employee_manager.py b/src/merge/resources/hris/types/employee_manager.py index 1c30831f..c3c73ba7 100644 --- a/src/merge/resources/hris/types/employee_manager.py +++ b/src/merge/resources/hris/types/employee_manager.py @@ -1,7 +1,50 @@ # This file was auto-generated by Fern from our API Definition. +from __future__ import annotations + import typing -from .employee import Employee +from .company import Company +from .country_enum import CountryEnum +from .employee_company import EmployeeCompany +from .employee_employment_status import EmployeeEmploymentStatus +from .employee_ethnicity import EmployeeEthnicity +from .employee_gender import EmployeeGender +from .employee_groups_item import EmployeeGroupsItem +from .employee_home_location import EmployeeHomeLocation +from .employee_marital_status import EmployeeMaritalStatus +from .employee_pay_group import EmployeePayGroup +from .employee_team import EmployeeTeam +from .employee_work_location import EmployeeWorkLocation +from .employment_employment_type import EmploymentEmploymentType +from .employment_flsa_status import EmploymentFlsaStatus +from .employment_pay_currency import EmploymentPayCurrency +from .employment_pay_frequency import EmploymentPayFrequency +from .employment_pay_group import EmploymentPayGroup +from .employment_pay_period import EmploymentPayPeriod +from .employment_status_enum import EmploymentStatusEnum +from .employment_type_enum import EmploymentTypeEnum +from .ethnicity_enum import EthnicityEnum +from .flsa_status_enum import FlsaStatusEnum +from .gender_enum import GenderEnum +from .group import Group +from .group_type import GroupType +from .group_type_enum import GroupTypeEnum +from .location import Location +from .location_country import LocationCountry +from .location_location_type import LocationLocationType +from .location_type_enum import LocationTypeEnum +from .marital_status_enum import MaritalStatusEnum +from .pay_currency_enum import PayCurrencyEnum +from .pay_frequency_enum import PayFrequencyEnum +from .pay_group import PayGroup +from .pay_period_enum import PayPeriodEnum +from .remote_data import RemoteData -EmployeeManager = typing.Union[str, Employee] +EmployeeManager = typing.Union[str, "Employee"] +from .employee import Employee # noqa: E402 +from .employee_employments_item import EmployeeEmploymentsItem # noqa: E402 +from .employment import Employment # noqa: E402 +from .employment_employee import EmploymentEmployee # noqa: E402 +from .team import Team # noqa: E402 +from .team_parent_team import TeamParentTeam # noqa: E402 diff --git a/src/merge/resources/hris/types/employee_pay_group.py b/src/merge/resources/hris/types/employee_pay_group.py index bbd48716..3fe4b44f 100644 --- a/src/merge/resources/hris/types/employee_pay_group.py +++ b/src/merge/resources/hris/types/employee_pay_group.py @@ -3,5 +3,6 @@ import typing from .pay_group import PayGroup +from .remote_data import RemoteData EmployeePayGroup = typing.Union[str, PayGroup] diff --git a/src/merge/resources/hris/types/employee_payroll_run_employee.py b/src/merge/resources/hris/types/employee_payroll_run_employee.py index 81b936f7..c27cb3ec 100644 --- a/src/merge/resources/hris/types/employee_payroll_run_employee.py +++ b/src/merge/resources/hris/types/employee_payroll_run_employee.py @@ -1,7 +1,51 @@ # This file was auto-generated by Fern from our API Definition. +from __future__ import annotations + import typing -from .employee import Employee +from .company import Company +from .country_enum import CountryEnum +from .employee_company import EmployeeCompany +from .employee_employment_status import EmployeeEmploymentStatus +from .employee_ethnicity import EmployeeEthnicity +from .employee_gender import EmployeeGender +from .employee_groups_item import EmployeeGroupsItem +from .employee_home_location import EmployeeHomeLocation +from .employee_marital_status import EmployeeMaritalStatus +from .employee_pay_group import EmployeePayGroup +from .employee_team import EmployeeTeam +from .employee_work_location import EmployeeWorkLocation +from .employment_employment_type import EmploymentEmploymentType +from .employment_flsa_status import EmploymentFlsaStatus +from .employment_pay_currency import EmploymentPayCurrency +from .employment_pay_frequency import EmploymentPayFrequency +from .employment_pay_group import EmploymentPayGroup +from .employment_pay_period import EmploymentPayPeriod +from .employment_status_enum import EmploymentStatusEnum +from .employment_type_enum import EmploymentTypeEnum +from .ethnicity_enum import EthnicityEnum +from .flsa_status_enum import FlsaStatusEnum +from .gender_enum import GenderEnum +from .group import Group +from .group_type import GroupType +from .group_type_enum import GroupTypeEnum +from .location import Location +from .location_country import LocationCountry +from .location_location_type import LocationLocationType +from .location_type_enum import LocationTypeEnum +from .marital_status_enum import MaritalStatusEnum +from .pay_currency_enum import PayCurrencyEnum +from .pay_frequency_enum import PayFrequencyEnum +from .pay_group import PayGroup +from .pay_period_enum import PayPeriodEnum +from .remote_data import RemoteData -EmployeePayrollRunEmployee = typing.Union[str, Employee] +EmployeePayrollRunEmployee = typing.Union[str, "Employee"] +from .employee import Employee # noqa: E402 +from .employee_employments_item import EmployeeEmploymentsItem # noqa: E402 +from .employee_manager import EmployeeManager # noqa: E402 +from .employment import Employment # noqa: E402 +from .employment_employee import EmploymentEmployee # noqa: E402 +from .team import Team # noqa: E402 +from .team_parent_team import TeamParentTeam # noqa: E402 diff --git a/src/merge/resources/hris/types/employee_payroll_run_payroll_run.py b/src/merge/resources/hris/types/employee_payroll_run_payroll_run.py index df420988..dc6ebaba 100644 --- a/src/merge/resources/hris/types/employee_payroll_run_payroll_run.py +++ b/src/merge/resources/hris/types/employee_payroll_run_payroll_run.py @@ -3,5 +3,10 @@ import typing from .payroll_run import PayrollRun +from .payroll_run_run_state import PayrollRunRunState +from .payroll_run_run_type import PayrollRunRunType +from .remote_data import RemoteData +from .run_state_enum import RunStateEnum +from .run_type_enum import RunTypeEnum EmployeePayrollRunPayrollRun = typing.Union[str, PayrollRun] diff --git a/src/merge/resources/hris/types/employee_request_company.py b/src/merge/resources/hris/types/employee_request_company.py index e17c35a2..3179a83f 100644 --- a/src/merge/resources/hris/types/employee_request_company.py +++ b/src/merge/resources/hris/types/employee_request_company.py @@ -3,5 +3,6 @@ import typing from .company import Company +from .remote_data import RemoteData EmployeeRequestCompany = typing.Union[str, Company] diff --git a/src/merge/resources/hris/types/employee_request_employments_item.py b/src/merge/resources/hris/types/employee_request_employments_item.py index cc4eee8a..d4ea46b9 100644 --- a/src/merge/resources/hris/types/employee_request_employments_item.py +++ b/src/merge/resources/hris/types/employee_request_employments_item.py @@ -1,7 +1,51 @@ # This file was auto-generated by Fern from our API Definition. +from __future__ import annotations + import typing -from .employment import Employment +from .company import Company +from .country_enum import CountryEnum +from .employee_company import EmployeeCompany +from .employee_employment_status import EmployeeEmploymentStatus +from .employee_ethnicity import EmployeeEthnicity +from .employee_gender import EmployeeGender +from .employee_groups_item import EmployeeGroupsItem +from .employee_home_location import EmployeeHomeLocation +from .employee_marital_status import EmployeeMaritalStatus +from .employee_pay_group import EmployeePayGroup +from .employee_team import EmployeeTeam +from .employee_work_location import EmployeeWorkLocation +from .employment_employment_type import EmploymentEmploymentType +from .employment_flsa_status import EmploymentFlsaStatus +from .employment_pay_currency import EmploymentPayCurrency +from .employment_pay_frequency import EmploymentPayFrequency +from .employment_pay_group import EmploymentPayGroup +from .employment_pay_period import EmploymentPayPeriod +from .employment_status_enum import EmploymentStatusEnum +from .employment_type_enum import EmploymentTypeEnum +from .ethnicity_enum import EthnicityEnum +from .flsa_status_enum import FlsaStatusEnum +from .gender_enum import GenderEnum +from .group import Group +from .group_type import GroupType +from .group_type_enum import GroupTypeEnum +from .location import Location +from .location_country import LocationCountry +from .location_location_type import LocationLocationType +from .location_type_enum import LocationTypeEnum +from .marital_status_enum import MaritalStatusEnum +from .pay_currency_enum import PayCurrencyEnum +from .pay_frequency_enum import PayFrequencyEnum +from .pay_group import PayGroup +from .pay_period_enum import PayPeriodEnum +from .remote_data import RemoteData -EmployeeRequestEmploymentsItem = typing.Union[str, Employment] +EmployeeRequestEmploymentsItem = typing.Union[str, "Employment"] +from .employee import Employee # noqa: E402 +from .employee_employments_item import EmployeeEmploymentsItem # noqa: E402 +from .employee_manager import EmployeeManager # noqa: E402 +from .employment import Employment # noqa: E402 +from .employment_employee import EmploymentEmployee # noqa: E402 +from .team import Team # noqa: E402 +from .team_parent_team import TeamParentTeam # noqa: E402 diff --git a/src/merge/resources/hris/types/employee_request_groups_item.py b/src/merge/resources/hris/types/employee_request_groups_item.py index 6507e912..33d3e412 100644 --- a/src/merge/resources/hris/types/employee_request_groups_item.py +++ b/src/merge/resources/hris/types/employee_request_groups_item.py @@ -3,5 +3,8 @@ import typing from .group import Group +from .group_type import GroupType +from .group_type_enum import GroupTypeEnum +from .remote_data import RemoteData EmployeeRequestGroupsItem = typing.Union[str, Group] diff --git a/src/merge/resources/hris/types/employee_request_home_location.py b/src/merge/resources/hris/types/employee_request_home_location.py index ac679a4e..fd2a0ec8 100644 --- a/src/merge/resources/hris/types/employee_request_home_location.py +++ b/src/merge/resources/hris/types/employee_request_home_location.py @@ -2,6 +2,11 @@ import typing +from .country_enum import CountryEnum from .location import Location +from .location_country import LocationCountry +from .location_location_type import LocationLocationType +from .location_type_enum import LocationTypeEnum +from .remote_data import RemoteData EmployeeRequestHomeLocation = typing.Union[str, Location] diff --git a/src/merge/resources/hris/types/employee_request_manager.py b/src/merge/resources/hris/types/employee_request_manager.py index 7951bebb..59afcce1 100644 --- a/src/merge/resources/hris/types/employee_request_manager.py +++ b/src/merge/resources/hris/types/employee_request_manager.py @@ -1,7 +1,51 @@ # This file was auto-generated by Fern from our API Definition. +from __future__ import annotations + import typing -from .employee import Employee +from .company import Company +from .country_enum import CountryEnum +from .employee_company import EmployeeCompany +from .employee_employment_status import EmployeeEmploymentStatus +from .employee_ethnicity import EmployeeEthnicity +from .employee_gender import EmployeeGender +from .employee_groups_item import EmployeeGroupsItem +from .employee_home_location import EmployeeHomeLocation +from .employee_marital_status import EmployeeMaritalStatus +from .employee_pay_group import EmployeePayGroup +from .employee_team import EmployeeTeam +from .employee_work_location import EmployeeWorkLocation +from .employment_employment_type import EmploymentEmploymentType +from .employment_flsa_status import EmploymentFlsaStatus +from .employment_pay_currency import EmploymentPayCurrency +from .employment_pay_frequency import EmploymentPayFrequency +from .employment_pay_group import EmploymentPayGroup +from .employment_pay_period import EmploymentPayPeriod +from .employment_status_enum import EmploymentStatusEnum +from .employment_type_enum import EmploymentTypeEnum +from .ethnicity_enum import EthnicityEnum +from .flsa_status_enum import FlsaStatusEnum +from .gender_enum import GenderEnum +from .group import Group +from .group_type import GroupType +from .group_type_enum import GroupTypeEnum +from .location import Location +from .location_country import LocationCountry +from .location_location_type import LocationLocationType +from .location_type_enum import LocationTypeEnum +from .marital_status_enum import MaritalStatusEnum +from .pay_currency_enum import PayCurrencyEnum +from .pay_frequency_enum import PayFrequencyEnum +from .pay_group import PayGroup +from .pay_period_enum import PayPeriodEnum +from .remote_data import RemoteData -EmployeeRequestManager = typing.Union[str, Employee] +EmployeeRequestManager = typing.Union[str, "Employee"] +from .employee import Employee # noqa: E402 +from .employee_employments_item import EmployeeEmploymentsItem # noqa: E402 +from .employee_manager import EmployeeManager # noqa: E402 +from .employment import Employment # noqa: E402 +from .employment_employee import EmploymentEmployee # noqa: E402 +from .team import Team # noqa: E402 +from .team_parent_team import TeamParentTeam # noqa: E402 diff --git a/src/merge/resources/hris/types/employee_request_pay_group.py b/src/merge/resources/hris/types/employee_request_pay_group.py index 383335c7..468cfb83 100644 --- a/src/merge/resources/hris/types/employee_request_pay_group.py +++ b/src/merge/resources/hris/types/employee_request_pay_group.py @@ -3,5 +3,6 @@ import typing from .pay_group import PayGroup +from .remote_data import RemoteData EmployeeRequestPayGroup = typing.Union[str, PayGroup] diff --git a/src/merge/resources/hris/types/employee_request_team.py b/src/merge/resources/hris/types/employee_request_team.py index a08d6d41..887601ff 100644 --- a/src/merge/resources/hris/types/employee_request_team.py +++ b/src/merge/resources/hris/types/employee_request_team.py @@ -1,7 +1,11 @@ # This file was auto-generated by Fern from our API Definition. +from __future__ import annotations + import typing -from .team import Team +from .remote_data import RemoteData -EmployeeRequestTeam = typing.Union[str, Team] +EmployeeRequestTeam = typing.Union[str, "Team"] +from .team import Team # noqa: E402 +from .team_parent_team import TeamParentTeam # noqa: E402 diff --git a/src/merge/resources/hris/types/employee_request_work_location.py b/src/merge/resources/hris/types/employee_request_work_location.py index 118c99b5..2ec6f681 100644 --- a/src/merge/resources/hris/types/employee_request_work_location.py +++ b/src/merge/resources/hris/types/employee_request_work_location.py @@ -2,6 +2,11 @@ import typing +from .country_enum import CountryEnum from .location import Location +from .location_country import LocationCountry +from .location_location_type import LocationLocationType +from .location_type_enum import LocationTypeEnum +from .remote_data import RemoteData EmployeeRequestWorkLocation = typing.Union[str, Location] diff --git a/src/merge/resources/hris/types/employee_team.py b/src/merge/resources/hris/types/employee_team.py index 5e623a95..930051e8 100644 --- a/src/merge/resources/hris/types/employee_team.py +++ b/src/merge/resources/hris/types/employee_team.py @@ -1,7 +1,11 @@ # This file was auto-generated by Fern from our API Definition. +from __future__ import annotations + import typing -from .team import Team +from .remote_data import RemoteData -EmployeeTeam = typing.Union[str, Team] +EmployeeTeam = typing.Union[str, "Team"] +from .team import Team # noqa: E402 +from .team_parent_team import TeamParentTeam # noqa: E402 diff --git a/src/merge/resources/hris/types/employee_work_location.py b/src/merge/resources/hris/types/employee_work_location.py index 9a38a1d8..3bd3a858 100644 --- a/src/merge/resources/hris/types/employee_work_location.py +++ b/src/merge/resources/hris/types/employee_work_location.py @@ -2,6 +2,11 @@ import typing +from .country_enum import CountryEnum from .location import Location +from .location_country import LocationCountry +from .location_location_type import LocationLocationType +from .location_type_enum import LocationTypeEnum +from .remote_data import RemoteData EmployeeWorkLocation = typing.Union[str, Location] diff --git a/src/merge/resources/hris/types/employment.py b/src/merge/resources/hris/types/employment.py index 8a2ddd48..44dad8fe 100644 --- a/src/merge/resources/hris/types/employment.py +++ b/src/merge/resources/hris/types/employment.py @@ -37,7 +37,7 @@ class Employment(pydantic.BaseModel): id: typing.Optional[str] remote_id: typing.Optional[str] = pydantic.Field(description="The third-party API ID of the matching object.") - employee: typing.Optional[EmploymentEmployee] = pydantic.Field(description="The employee holding this position.") + employee: typing.Optional["EmploymentEmployee"] = pydantic.Field(description="The employee holding this position.") job_title: typing.Optional[str] = pydantic.Field(description="The position's title.") pay_rate: typing.Optional[float] = pydantic.Field(description="The position's pay rate in dollars.") pay_period: typing.Optional[EmploymentPayPeriod] = pydantic.Field( @@ -429,6 +429,9 @@ class Config: json_encoders = {dt.datetime: serialize_datetime} +from .employee import Employee # noqa: E402 +from .employee_employments_item import EmployeeEmploymentsItem # noqa: E402 +from .employee_manager import EmployeeManager # noqa: E402 from .employment_employee import EmploymentEmployee # noqa: E402 -Employment.update_forward_refs() +Employment.update_forward_refs(EmploymentEmployee=EmploymentEmployee) diff --git a/src/merge/resources/hris/types/employment_employee.py b/src/merge/resources/hris/types/employment_employee.py index 60394f2e..63639147 100644 --- a/src/merge/resources/hris/types/employment_employee.py +++ b/src/merge/resources/hris/types/employment_employee.py @@ -1,7 +1,50 @@ # This file was auto-generated by Fern from our API Definition. +from __future__ import annotations + import typing -from .employee import Employee +from .company import Company +from .country_enum import CountryEnum +from .employee_company import EmployeeCompany +from .employee_employment_status import EmployeeEmploymentStatus +from .employee_ethnicity import EmployeeEthnicity +from .employee_gender import EmployeeGender +from .employee_groups_item import EmployeeGroupsItem +from .employee_home_location import EmployeeHomeLocation +from .employee_marital_status import EmployeeMaritalStatus +from .employee_pay_group import EmployeePayGroup +from .employee_team import EmployeeTeam +from .employee_work_location import EmployeeWorkLocation +from .employment_employment_type import EmploymentEmploymentType +from .employment_flsa_status import EmploymentFlsaStatus +from .employment_pay_currency import EmploymentPayCurrency +from .employment_pay_frequency import EmploymentPayFrequency +from .employment_pay_group import EmploymentPayGroup +from .employment_pay_period import EmploymentPayPeriod +from .employment_status_enum import EmploymentStatusEnum +from .employment_type_enum import EmploymentTypeEnum +from .ethnicity_enum import EthnicityEnum +from .flsa_status_enum import FlsaStatusEnum +from .gender_enum import GenderEnum +from .group import Group +from .group_type import GroupType +from .group_type_enum import GroupTypeEnum +from .location import Location +from .location_country import LocationCountry +from .location_location_type import LocationLocationType +from .location_type_enum import LocationTypeEnum +from .marital_status_enum import MaritalStatusEnum +from .pay_currency_enum import PayCurrencyEnum +from .pay_frequency_enum import PayFrequencyEnum +from .pay_group import PayGroup +from .pay_period_enum import PayPeriodEnum +from .remote_data import RemoteData -EmploymentEmployee = typing.Union[str, Employee] +EmploymentEmployee = typing.Union[str, "Employee"] +from .employee import Employee # noqa: E402 +from .employee_employments_item import EmployeeEmploymentsItem # noqa: E402 +from .employee_manager import EmployeeManager # noqa: E402 +from .employment import Employment # noqa: E402 +from .team import Team # noqa: E402 +from .team_parent_team import TeamParentTeam # noqa: E402 diff --git a/src/merge/resources/hris/types/employment_pay_group.py b/src/merge/resources/hris/types/employment_pay_group.py index d2259900..e3af9985 100644 --- a/src/merge/resources/hris/types/employment_pay_group.py +++ b/src/merge/resources/hris/types/employment_pay_group.py @@ -3,5 +3,6 @@ import typing from .pay_group import PayGroup +from .remote_data import RemoteData EmploymentPayGroup = typing.Union[str, PayGroup] diff --git a/src/merge/resources/hris/types/team.py b/src/merge/resources/hris/types/team.py index dac30a00..4c1e807f 100644 --- a/src/merge/resources/hris/types/team.py +++ b/src/merge/resources/hris/types/team.py @@ -30,7 +30,7 @@ class Team(pydantic.BaseModel): id: typing.Optional[str] remote_id: typing.Optional[str] = pydantic.Field(description="The third-party API ID of the matching object.") name: typing.Optional[str] = pydantic.Field(description="The team's name.") - parent_team: typing.Optional[TeamParentTeam] = pydantic.Field(description="The team's parent team.") + parent_team: typing.Optional["TeamParentTeam"] = pydantic.Field(description="The team's parent team.") remote_was_deleted: typing.Optional[bool] = pydantic.Field( description="Indicates whether or not this object has been deleted in the third party platform." ) @@ -57,4 +57,4 @@ class Config: from .team_parent_team import TeamParentTeam # noqa: E402 -Team.update_forward_refs() +Team.update_forward_refs(TeamParentTeam=TeamParentTeam) diff --git a/src/merge/resources/hris/types/team_parent_team.py b/src/merge/resources/hris/types/team_parent_team.py index 53cc5b6b..de0e0538 100644 --- a/src/merge/resources/hris/types/team_parent_team.py +++ b/src/merge/resources/hris/types/team_parent_team.py @@ -1,7 +1,10 @@ # This file was auto-generated by Fern from our API Definition. +from __future__ import annotations + import typing -from .team import Team +from .remote_data import RemoteData -TeamParentTeam = typing.Union[str, Team] +TeamParentTeam = typing.Union[str, "Team"] +from .team import Team # noqa: E402 diff --git a/src/merge/resources/hris/types/time_off_approver.py b/src/merge/resources/hris/types/time_off_approver.py index 93a01925..7df00432 100644 --- a/src/merge/resources/hris/types/time_off_approver.py +++ b/src/merge/resources/hris/types/time_off_approver.py @@ -1,7 +1,51 @@ # This file was auto-generated by Fern from our API Definition. +from __future__ import annotations + import typing -from .employee import Employee +from .company import Company +from .country_enum import CountryEnum +from .employee_company import EmployeeCompany +from .employee_employment_status import EmployeeEmploymentStatus +from .employee_ethnicity import EmployeeEthnicity +from .employee_gender import EmployeeGender +from .employee_groups_item import EmployeeGroupsItem +from .employee_home_location import EmployeeHomeLocation +from .employee_marital_status import EmployeeMaritalStatus +from .employee_pay_group import EmployeePayGroup +from .employee_team import EmployeeTeam +from .employee_work_location import EmployeeWorkLocation +from .employment_employment_type import EmploymentEmploymentType +from .employment_flsa_status import EmploymentFlsaStatus +from .employment_pay_currency import EmploymentPayCurrency +from .employment_pay_frequency import EmploymentPayFrequency +from .employment_pay_group import EmploymentPayGroup +from .employment_pay_period import EmploymentPayPeriod +from .employment_status_enum import EmploymentStatusEnum +from .employment_type_enum import EmploymentTypeEnum +from .ethnicity_enum import EthnicityEnum +from .flsa_status_enum import FlsaStatusEnum +from .gender_enum import GenderEnum +from .group import Group +from .group_type import GroupType +from .group_type_enum import GroupTypeEnum +from .location import Location +from .location_country import LocationCountry +from .location_location_type import LocationLocationType +from .location_type_enum import LocationTypeEnum +from .marital_status_enum import MaritalStatusEnum +from .pay_currency_enum import PayCurrencyEnum +from .pay_frequency_enum import PayFrequencyEnum +from .pay_group import PayGroup +from .pay_period_enum import PayPeriodEnum +from .remote_data import RemoteData -TimeOffApprover = typing.Union[str, Employee] +TimeOffApprover = typing.Union[str, "Employee"] +from .employee import Employee # noqa: E402 +from .employee_employments_item import EmployeeEmploymentsItem # noqa: E402 +from .employee_manager import EmployeeManager # noqa: E402 +from .employment import Employment # noqa: E402 +from .employment_employee import EmploymentEmployee # noqa: E402 +from .team import Team # noqa: E402 +from .team_parent_team import TeamParentTeam # noqa: E402 diff --git a/src/merge/resources/hris/types/time_off_balance_employee.py b/src/merge/resources/hris/types/time_off_balance_employee.py index b13c18f9..8362d99a 100644 --- a/src/merge/resources/hris/types/time_off_balance_employee.py +++ b/src/merge/resources/hris/types/time_off_balance_employee.py @@ -1,7 +1,51 @@ # This file was auto-generated by Fern from our API Definition. +from __future__ import annotations + import typing -from .employee import Employee +from .company import Company +from .country_enum import CountryEnum +from .employee_company import EmployeeCompany +from .employee_employment_status import EmployeeEmploymentStatus +from .employee_ethnicity import EmployeeEthnicity +from .employee_gender import EmployeeGender +from .employee_groups_item import EmployeeGroupsItem +from .employee_home_location import EmployeeHomeLocation +from .employee_marital_status import EmployeeMaritalStatus +from .employee_pay_group import EmployeePayGroup +from .employee_team import EmployeeTeam +from .employee_work_location import EmployeeWorkLocation +from .employment_employment_type import EmploymentEmploymentType +from .employment_flsa_status import EmploymentFlsaStatus +from .employment_pay_currency import EmploymentPayCurrency +from .employment_pay_frequency import EmploymentPayFrequency +from .employment_pay_group import EmploymentPayGroup +from .employment_pay_period import EmploymentPayPeriod +from .employment_status_enum import EmploymentStatusEnum +from .employment_type_enum import EmploymentTypeEnum +from .ethnicity_enum import EthnicityEnum +from .flsa_status_enum import FlsaStatusEnum +from .gender_enum import GenderEnum +from .group import Group +from .group_type import GroupType +from .group_type_enum import GroupTypeEnum +from .location import Location +from .location_country import LocationCountry +from .location_location_type import LocationLocationType +from .location_type_enum import LocationTypeEnum +from .marital_status_enum import MaritalStatusEnum +from .pay_currency_enum import PayCurrencyEnum +from .pay_frequency_enum import PayFrequencyEnum +from .pay_group import PayGroup +from .pay_period_enum import PayPeriodEnum +from .remote_data import RemoteData -TimeOffBalanceEmployee = typing.Union[str, Employee] +TimeOffBalanceEmployee = typing.Union[str, "Employee"] +from .employee import Employee # noqa: E402 +from .employee_employments_item import EmployeeEmploymentsItem # noqa: E402 +from .employee_manager import EmployeeManager # noqa: E402 +from .employment import Employment # noqa: E402 +from .employment_employee import EmploymentEmployee # noqa: E402 +from .team import Team # noqa: E402 +from .team_parent_team import TeamParentTeam # noqa: E402 diff --git a/src/merge/resources/hris/types/time_off_employee.py b/src/merge/resources/hris/types/time_off_employee.py index 4ca2205f..8631d171 100644 --- a/src/merge/resources/hris/types/time_off_employee.py +++ b/src/merge/resources/hris/types/time_off_employee.py @@ -1,7 +1,51 @@ # This file was auto-generated by Fern from our API Definition. +from __future__ import annotations + import typing -from .employee import Employee +from .company import Company +from .country_enum import CountryEnum +from .employee_company import EmployeeCompany +from .employee_employment_status import EmployeeEmploymentStatus +from .employee_ethnicity import EmployeeEthnicity +from .employee_gender import EmployeeGender +from .employee_groups_item import EmployeeGroupsItem +from .employee_home_location import EmployeeHomeLocation +from .employee_marital_status import EmployeeMaritalStatus +from .employee_pay_group import EmployeePayGroup +from .employee_team import EmployeeTeam +from .employee_work_location import EmployeeWorkLocation +from .employment_employment_type import EmploymentEmploymentType +from .employment_flsa_status import EmploymentFlsaStatus +from .employment_pay_currency import EmploymentPayCurrency +from .employment_pay_frequency import EmploymentPayFrequency +from .employment_pay_group import EmploymentPayGroup +from .employment_pay_period import EmploymentPayPeriod +from .employment_status_enum import EmploymentStatusEnum +from .employment_type_enum import EmploymentTypeEnum +from .ethnicity_enum import EthnicityEnum +from .flsa_status_enum import FlsaStatusEnum +from .gender_enum import GenderEnum +from .group import Group +from .group_type import GroupType +from .group_type_enum import GroupTypeEnum +from .location import Location +from .location_country import LocationCountry +from .location_location_type import LocationLocationType +from .location_type_enum import LocationTypeEnum +from .marital_status_enum import MaritalStatusEnum +from .pay_currency_enum import PayCurrencyEnum +from .pay_frequency_enum import PayFrequencyEnum +from .pay_group import PayGroup +from .pay_period_enum import PayPeriodEnum +from .remote_data import RemoteData -TimeOffEmployee = typing.Union[str, Employee] +TimeOffEmployee = typing.Union[str, "Employee"] +from .employee import Employee # noqa: E402 +from .employee_employments_item import EmployeeEmploymentsItem # noqa: E402 +from .employee_manager import EmployeeManager # noqa: E402 +from .employment import Employment # noqa: E402 +from .employment_employee import EmploymentEmployee # noqa: E402 +from .team import Team # noqa: E402 +from .team_parent_team import TeamParentTeam # noqa: E402 diff --git a/src/merge/resources/hris/types/time_off_request_approver.py b/src/merge/resources/hris/types/time_off_request_approver.py index 726968a9..8d31f108 100644 --- a/src/merge/resources/hris/types/time_off_request_approver.py +++ b/src/merge/resources/hris/types/time_off_request_approver.py @@ -1,7 +1,51 @@ # This file was auto-generated by Fern from our API Definition. +from __future__ import annotations + import typing -from .employee import Employee +from .company import Company +from .country_enum import CountryEnum +from .employee_company import EmployeeCompany +from .employee_employment_status import EmployeeEmploymentStatus +from .employee_ethnicity import EmployeeEthnicity +from .employee_gender import EmployeeGender +from .employee_groups_item import EmployeeGroupsItem +from .employee_home_location import EmployeeHomeLocation +from .employee_marital_status import EmployeeMaritalStatus +from .employee_pay_group import EmployeePayGroup +from .employee_team import EmployeeTeam +from .employee_work_location import EmployeeWorkLocation +from .employment_employment_type import EmploymentEmploymentType +from .employment_flsa_status import EmploymentFlsaStatus +from .employment_pay_currency import EmploymentPayCurrency +from .employment_pay_frequency import EmploymentPayFrequency +from .employment_pay_group import EmploymentPayGroup +from .employment_pay_period import EmploymentPayPeriod +from .employment_status_enum import EmploymentStatusEnum +from .employment_type_enum import EmploymentTypeEnum +from .ethnicity_enum import EthnicityEnum +from .flsa_status_enum import FlsaStatusEnum +from .gender_enum import GenderEnum +from .group import Group +from .group_type import GroupType +from .group_type_enum import GroupTypeEnum +from .location import Location +from .location_country import LocationCountry +from .location_location_type import LocationLocationType +from .location_type_enum import LocationTypeEnum +from .marital_status_enum import MaritalStatusEnum +from .pay_currency_enum import PayCurrencyEnum +from .pay_frequency_enum import PayFrequencyEnum +from .pay_group import PayGroup +from .pay_period_enum import PayPeriodEnum +from .remote_data import RemoteData -TimeOffRequestApprover = typing.Union[str, Employee] +TimeOffRequestApprover = typing.Union[str, "Employee"] +from .employee import Employee # noqa: E402 +from .employee_employments_item import EmployeeEmploymentsItem # noqa: E402 +from .employee_manager import EmployeeManager # noqa: E402 +from .employment import Employment # noqa: E402 +from .employment_employee import EmploymentEmployee # noqa: E402 +from .team import Team # noqa: E402 +from .team_parent_team import TeamParentTeam # noqa: E402 diff --git a/src/merge/resources/hris/types/time_off_request_employee.py b/src/merge/resources/hris/types/time_off_request_employee.py index 5f74d51e..645ee430 100644 --- a/src/merge/resources/hris/types/time_off_request_employee.py +++ b/src/merge/resources/hris/types/time_off_request_employee.py @@ -1,7 +1,51 @@ # This file was auto-generated by Fern from our API Definition. +from __future__ import annotations + import typing -from .employee import Employee +from .company import Company +from .country_enum import CountryEnum +from .employee_company import EmployeeCompany +from .employee_employment_status import EmployeeEmploymentStatus +from .employee_ethnicity import EmployeeEthnicity +from .employee_gender import EmployeeGender +from .employee_groups_item import EmployeeGroupsItem +from .employee_home_location import EmployeeHomeLocation +from .employee_marital_status import EmployeeMaritalStatus +from .employee_pay_group import EmployeePayGroup +from .employee_team import EmployeeTeam +from .employee_work_location import EmployeeWorkLocation +from .employment_employment_type import EmploymentEmploymentType +from .employment_flsa_status import EmploymentFlsaStatus +from .employment_pay_currency import EmploymentPayCurrency +from .employment_pay_frequency import EmploymentPayFrequency +from .employment_pay_group import EmploymentPayGroup +from .employment_pay_period import EmploymentPayPeriod +from .employment_status_enum import EmploymentStatusEnum +from .employment_type_enum import EmploymentTypeEnum +from .ethnicity_enum import EthnicityEnum +from .flsa_status_enum import FlsaStatusEnum +from .gender_enum import GenderEnum +from .group import Group +from .group_type import GroupType +from .group_type_enum import GroupTypeEnum +from .location import Location +from .location_country import LocationCountry +from .location_location_type import LocationLocationType +from .location_type_enum import LocationTypeEnum +from .marital_status_enum import MaritalStatusEnum +from .pay_currency_enum import PayCurrencyEnum +from .pay_frequency_enum import PayFrequencyEnum +from .pay_group import PayGroup +from .pay_period_enum import PayPeriodEnum +from .remote_data import RemoteData -TimeOffRequestEmployee = typing.Union[str, Employee] +TimeOffRequestEmployee = typing.Union[str, "Employee"] +from .employee import Employee # noqa: E402 +from .employee_employments_item import EmployeeEmploymentsItem # noqa: E402 +from .employee_manager import EmployeeManager # noqa: E402 +from .employment import Employment # noqa: E402 +from .employment_employee import EmploymentEmployee # noqa: E402 +from .team import Team # noqa: E402 +from .team_parent_team import TeamParentTeam # noqa: E402 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 diff --git a/src/merge/resources/ticketing/types/attachment.py b/src/merge/resources/ticketing/types/attachment.py index d54ab47d..cb399a5f 100644 --- a/src/merge/resources/ticketing/types/attachment.py +++ b/src/merge/resources/ticketing/types/attachment.py @@ -32,7 +32,9 @@ class Attachment(pydantic.BaseModel): file_name: typing.Optional[str] = pydantic.Field( description="The attachment's name. It is required to include the file extension in the attachment's name." ) - ticket: typing.Optional[AttachmentTicket] = pydantic.Field(description="The ticket associated with the attachment.") + ticket: typing.Optional["AttachmentTicket"] = pydantic.Field( + description="The ticket associated with the attachment." + ) file_url: typing.Optional[str] = pydantic.Field( description="The attachment's url. It is required to include the file extension in the file's URL." ) @@ -64,5 +66,8 @@ class Config: from .attachment_ticket import AttachmentTicket # noqa: E402 +from .ticket import Ticket # noqa: E402 +from .ticket_attachments_item import TicketAttachmentsItem # noqa: E402 +from .ticket_parent_ticket import TicketParentTicket # noqa: E402 -Attachment.update_forward_refs() +Attachment.update_forward_refs(AttachmentTicket=AttachmentTicket) diff --git a/src/merge/resources/ticketing/types/attachment_request_ticket.py b/src/merge/resources/ticketing/types/attachment_request_ticket.py index 88236232..cba72664 100644 --- a/src/merge/resources/ticketing/types/attachment_request_ticket.py +++ b/src/merge/resources/ticketing/types/attachment_request_ticket.py @@ -1,7 +1,52 @@ # This file was auto-generated by Fern from our API Definition. +from __future__ import annotations + import typing -from .ticket import Ticket +from .access_level_enum import AccessLevelEnum +from .account import Account +from .collection_access_level import CollectionAccessLevel +from .collection_collection_type import CollectionCollectionType +from .collection_type_enum import CollectionTypeEnum +from .contact import Contact +from .contact_account import ContactAccount +from .field_format_enum import FieldFormatEnum +from .field_type_enum import FieldTypeEnum +from .item_format_enum import ItemFormatEnum +from .item_schema import ItemSchema +from .item_type_enum import ItemTypeEnum +from .priority_enum import PriorityEnum +from .remote_data import RemoteData +from .remote_field import RemoteField +from .remote_field_class import RemoteFieldClass +from .remote_field_class_field_choices_item import RemoteFieldClassFieldChoicesItem +from .remote_field_class_field_format import RemoteFieldClassFieldFormat +from .remote_field_class_field_type import RemoteFieldClassFieldType +from .remote_field_remote_field_class import RemoteFieldRemoteFieldClass +from .role import Role +from .role_ticket_access import RoleTicketAccess +from .role_ticket_actions_item import RoleTicketActionsItem +from .team import Team +from .ticket_access_enum import TicketAccessEnum +from .ticket_account import TicketAccount +from .ticket_actions_enum import TicketActionsEnum +from .ticket_assignees_item import TicketAssigneesItem +from .ticket_collections_item import TicketCollectionsItem +from .ticket_contact import TicketContact +from .ticket_creator import TicketCreator +from .ticket_priority import TicketPriority +from .ticket_status import TicketStatus +from .ticket_status_enum import TicketStatusEnum +from .user import User +from .user_roles_item import UserRolesItem +from .user_teams_item import UserTeamsItem -AttachmentRequestTicket = typing.Union[str, Ticket] +AttachmentRequestTicket = typing.Union[str, "Ticket"] +from .attachment import Attachment # noqa: E402 +from .attachment_ticket import AttachmentTicket # noqa: E402 +from .collection import Collection # noqa: E402 +from .collection_parent_collection import CollectionParentCollection # noqa: E402 +from .ticket import Ticket # noqa: E402 +from .ticket_attachments_item import TicketAttachmentsItem # noqa: E402 +from .ticket_parent_ticket import TicketParentTicket # noqa: E402 diff --git a/src/merge/resources/ticketing/types/attachment_ticket.py b/src/merge/resources/ticketing/types/attachment_ticket.py index 025dcf1f..8617d411 100644 --- a/src/merge/resources/ticketing/types/attachment_ticket.py +++ b/src/merge/resources/ticketing/types/attachment_ticket.py @@ -1,7 +1,51 @@ # This file was auto-generated by Fern from our API Definition. +from __future__ import annotations + import typing -from .ticket import Ticket +from .access_level_enum import AccessLevelEnum +from .account import Account +from .collection_access_level import CollectionAccessLevel +from .collection_collection_type import CollectionCollectionType +from .collection_type_enum import CollectionTypeEnum +from .contact import Contact +from .contact_account import ContactAccount +from .field_format_enum import FieldFormatEnum +from .field_type_enum import FieldTypeEnum +from .item_format_enum import ItemFormatEnum +from .item_schema import ItemSchema +from .item_type_enum import ItemTypeEnum +from .priority_enum import PriorityEnum +from .remote_data import RemoteData +from .remote_field import RemoteField +from .remote_field_class import RemoteFieldClass +from .remote_field_class_field_choices_item import RemoteFieldClassFieldChoicesItem +from .remote_field_class_field_format import RemoteFieldClassFieldFormat +from .remote_field_class_field_type import RemoteFieldClassFieldType +from .remote_field_remote_field_class import RemoteFieldRemoteFieldClass +from .role import Role +from .role_ticket_access import RoleTicketAccess +from .role_ticket_actions_item import RoleTicketActionsItem +from .team import Team +from .ticket_access_enum import TicketAccessEnum +from .ticket_account import TicketAccount +from .ticket_actions_enum import TicketActionsEnum +from .ticket_assignees_item import TicketAssigneesItem +from .ticket_collections_item import TicketCollectionsItem +from .ticket_contact import TicketContact +from .ticket_creator import TicketCreator +from .ticket_priority import TicketPriority +from .ticket_status import TicketStatus +from .ticket_status_enum import TicketStatusEnum +from .user import User +from .user_roles_item import UserRolesItem +from .user_teams_item import UserTeamsItem -AttachmentTicket = typing.Union[str, Ticket] +AttachmentTicket = typing.Union[str, "Ticket"] +from .attachment import Attachment # noqa: E402 +from .collection import Collection # noqa: E402 +from .collection_parent_collection import CollectionParentCollection # noqa: E402 +from .ticket import Ticket # noqa: E402 +from .ticket_attachments_item import TicketAttachmentsItem # noqa: E402 +from .ticket_parent_ticket import TicketParentTicket # noqa: E402 diff --git a/src/merge/resources/ticketing/types/collection.py b/src/merge/resources/ticketing/types/collection.py index a28a8454..48b72d81 100644 --- a/src/merge/resources/ticketing/types/collection.py +++ b/src/merge/resources/ticketing/types/collection.py @@ -37,7 +37,7 @@ class Collection(pydantic.BaseModel): collection_type: typing.Optional[CollectionCollectionType] = pydantic.Field( description=("The collection's type.\n" "\n" "- `LIST` - LIST\n" "- `PROJECT` - PROJECT\n") ) - parent_collection: typing.Optional[CollectionParentCollection] = pydantic.Field( + parent_collection: typing.Optional["CollectionParentCollection"] = pydantic.Field( description="The parent collection for this collection." ) remote_was_deleted: typing.Optional[bool] = pydantic.Field( @@ -75,4 +75,4 @@ class Config: from .collection_parent_collection import CollectionParentCollection # noqa: E402 -Collection.update_forward_refs() +Collection.update_forward_refs(CollectionParentCollection=CollectionParentCollection) diff --git a/src/merge/resources/ticketing/types/collection_parent_collection.py b/src/merge/resources/ticketing/types/collection_parent_collection.py index 33811973..1c5c6f42 100644 --- a/src/merge/resources/ticketing/types/collection_parent_collection.py +++ b/src/merge/resources/ticketing/types/collection_parent_collection.py @@ -1,7 +1,14 @@ # This file was auto-generated by Fern from our API Definition. +from __future__ import annotations + import typing -from .collection import Collection +from .access_level_enum import AccessLevelEnum +from .collection_access_level import CollectionAccessLevel +from .collection_collection_type import CollectionCollectionType +from .collection_type_enum import CollectionTypeEnum +from .remote_data import RemoteData -CollectionParentCollection = typing.Union[str, Collection] +CollectionParentCollection = typing.Union[str, "Collection"] +from .collection import Collection # noqa: E402 diff --git a/src/merge/resources/ticketing/types/comment_contact.py b/src/merge/resources/ticketing/types/comment_contact.py index 55fd4fa4..927904e1 100644 --- a/src/merge/resources/ticketing/types/comment_contact.py +++ b/src/merge/resources/ticketing/types/comment_contact.py @@ -2,6 +2,9 @@ import typing +from .account import Account from .contact import Contact +from .contact_account import ContactAccount +from .remote_data import RemoteData CommentContact = typing.Union[str, Contact] diff --git a/src/merge/resources/ticketing/types/comment_request_contact.py b/src/merge/resources/ticketing/types/comment_request_contact.py index 927ae877..626c3f0f 100644 --- a/src/merge/resources/ticketing/types/comment_request_contact.py +++ b/src/merge/resources/ticketing/types/comment_request_contact.py @@ -2,6 +2,9 @@ import typing +from .account import Account from .contact import Contact +from .contact_account import ContactAccount +from .remote_data import RemoteData CommentRequestContact = typing.Union[str, Contact] diff --git a/src/merge/resources/ticketing/types/comment_request_ticket.py b/src/merge/resources/ticketing/types/comment_request_ticket.py index 4edbf9d3..dc60df25 100644 --- a/src/merge/resources/ticketing/types/comment_request_ticket.py +++ b/src/merge/resources/ticketing/types/comment_request_ticket.py @@ -1,7 +1,52 @@ # This file was auto-generated by Fern from our API Definition. +from __future__ import annotations + import typing -from .ticket import Ticket +from .access_level_enum import AccessLevelEnum +from .account import Account +from .collection_access_level import CollectionAccessLevel +from .collection_collection_type import CollectionCollectionType +from .collection_type_enum import CollectionTypeEnum +from .contact import Contact +from .contact_account import ContactAccount +from .field_format_enum import FieldFormatEnum +from .field_type_enum import FieldTypeEnum +from .item_format_enum import ItemFormatEnum +from .item_schema import ItemSchema +from .item_type_enum import ItemTypeEnum +from .priority_enum import PriorityEnum +from .remote_data import RemoteData +from .remote_field import RemoteField +from .remote_field_class import RemoteFieldClass +from .remote_field_class_field_choices_item import RemoteFieldClassFieldChoicesItem +from .remote_field_class_field_format import RemoteFieldClassFieldFormat +from .remote_field_class_field_type import RemoteFieldClassFieldType +from .remote_field_remote_field_class import RemoteFieldRemoteFieldClass +from .role import Role +from .role_ticket_access import RoleTicketAccess +from .role_ticket_actions_item import RoleTicketActionsItem +from .team import Team +from .ticket_access_enum import TicketAccessEnum +from .ticket_account import TicketAccount +from .ticket_actions_enum import TicketActionsEnum +from .ticket_assignees_item import TicketAssigneesItem +from .ticket_collections_item import TicketCollectionsItem +from .ticket_contact import TicketContact +from .ticket_creator import TicketCreator +from .ticket_priority import TicketPriority +from .ticket_status import TicketStatus +from .ticket_status_enum import TicketStatusEnum +from .user import User +from .user_roles_item import UserRolesItem +from .user_teams_item import UserTeamsItem -CommentRequestTicket = typing.Union[str, Ticket] +CommentRequestTicket = typing.Union[str, "Ticket"] +from .attachment import Attachment # noqa: E402 +from .attachment_ticket import AttachmentTicket # noqa: E402 +from .collection import Collection # noqa: E402 +from .collection_parent_collection import CollectionParentCollection # noqa: E402 +from .ticket import Ticket # noqa: E402 +from .ticket_attachments_item import TicketAttachmentsItem # noqa: E402 +from .ticket_parent_ticket import TicketParentTicket # noqa: E402 diff --git a/src/merge/resources/ticketing/types/comment_request_user.py b/src/merge/resources/ticketing/types/comment_request_user.py index dde5ed32..0bf19e81 100644 --- a/src/merge/resources/ticketing/types/comment_request_user.py +++ b/src/merge/resources/ticketing/types/comment_request_user.py @@ -2,6 +2,15 @@ import typing +from .remote_data import RemoteData +from .role import Role +from .role_ticket_access import RoleTicketAccess +from .role_ticket_actions_item import RoleTicketActionsItem +from .team import Team +from .ticket_access_enum import TicketAccessEnum +from .ticket_actions_enum import TicketActionsEnum from .user import User +from .user_roles_item import UserRolesItem +from .user_teams_item import UserTeamsItem CommentRequestUser = typing.Union[str, User] diff --git a/src/merge/resources/ticketing/types/comment_ticket.py b/src/merge/resources/ticketing/types/comment_ticket.py index 5a8c6680..022b06d8 100644 --- a/src/merge/resources/ticketing/types/comment_ticket.py +++ b/src/merge/resources/ticketing/types/comment_ticket.py @@ -1,7 +1,52 @@ # This file was auto-generated by Fern from our API Definition. +from __future__ import annotations + import typing -from .ticket import Ticket +from .access_level_enum import AccessLevelEnum +from .account import Account +from .collection_access_level import CollectionAccessLevel +from .collection_collection_type import CollectionCollectionType +from .collection_type_enum import CollectionTypeEnum +from .contact import Contact +from .contact_account import ContactAccount +from .field_format_enum import FieldFormatEnum +from .field_type_enum import FieldTypeEnum +from .item_format_enum import ItemFormatEnum +from .item_schema import ItemSchema +from .item_type_enum import ItemTypeEnum +from .priority_enum import PriorityEnum +from .remote_data import RemoteData +from .remote_field import RemoteField +from .remote_field_class import RemoteFieldClass +from .remote_field_class_field_choices_item import RemoteFieldClassFieldChoicesItem +from .remote_field_class_field_format import RemoteFieldClassFieldFormat +from .remote_field_class_field_type import RemoteFieldClassFieldType +from .remote_field_remote_field_class import RemoteFieldRemoteFieldClass +from .role import Role +from .role_ticket_access import RoleTicketAccess +from .role_ticket_actions_item import RoleTicketActionsItem +from .team import Team +from .ticket_access_enum import TicketAccessEnum +from .ticket_account import TicketAccount +from .ticket_actions_enum import TicketActionsEnum +from .ticket_assignees_item import TicketAssigneesItem +from .ticket_collections_item import TicketCollectionsItem +from .ticket_contact import TicketContact +from .ticket_creator import TicketCreator +from .ticket_priority import TicketPriority +from .ticket_status import TicketStatus +from .ticket_status_enum import TicketStatusEnum +from .user import User +from .user_roles_item import UserRolesItem +from .user_teams_item import UserTeamsItem -CommentTicket = typing.Union[str, Ticket] +CommentTicket = typing.Union[str, "Ticket"] +from .attachment import Attachment # noqa: E402 +from .attachment_ticket import AttachmentTicket # noqa: E402 +from .collection import Collection # noqa: E402 +from .collection_parent_collection import CollectionParentCollection # noqa: E402 +from .ticket import Ticket # noqa: E402 +from .ticket_attachments_item import TicketAttachmentsItem # noqa: E402 +from .ticket_parent_ticket import TicketParentTicket # noqa: E402 diff --git a/src/merge/resources/ticketing/types/comment_user.py b/src/merge/resources/ticketing/types/comment_user.py index 73c7f4da..2c60c8f1 100644 --- a/src/merge/resources/ticketing/types/comment_user.py +++ b/src/merge/resources/ticketing/types/comment_user.py @@ -2,6 +2,15 @@ import typing +from .remote_data import RemoteData +from .role import Role +from .role_ticket_access import RoleTicketAccess +from .role_ticket_actions_item import RoleTicketActionsItem +from .team import Team +from .ticket_access_enum import TicketAccessEnum +from .ticket_actions_enum import TicketActionsEnum from .user import User +from .user_roles_item import UserRolesItem +from .user_teams_item import UserTeamsItem CommentUser = typing.Union[str, User] diff --git a/src/merge/resources/ticketing/types/contact_account.py b/src/merge/resources/ticketing/types/contact_account.py index f21ef820..a795fe7c 100644 --- a/src/merge/resources/ticketing/types/contact_account.py +++ b/src/merge/resources/ticketing/types/contact_account.py @@ -3,5 +3,6 @@ import typing from .account import Account +from .remote_data import RemoteData ContactAccount = typing.Union[str, Account] diff --git a/src/merge/resources/ticketing/types/remote_field_remote_field_class.py b/src/merge/resources/ticketing/types/remote_field_remote_field_class.py index b7ab0ef6..262f78d1 100644 --- a/src/merge/resources/ticketing/types/remote_field_remote_field_class.py +++ b/src/merge/resources/ticketing/types/remote_field_remote_field_class.py @@ -2,6 +2,14 @@ import typing +from .field_format_enum import FieldFormatEnum +from .field_type_enum import FieldTypeEnum +from .item_format_enum import ItemFormatEnum +from .item_schema import ItemSchema +from .item_type_enum import ItemTypeEnum from .remote_field_class import RemoteFieldClass +from .remote_field_class_field_choices_item import RemoteFieldClassFieldChoicesItem +from .remote_field_class_field_format import RemoteFieldClassFieldFormat +from .remote_field_class_field_type import RemoteFieldClassFieldType RemoteFieldRemoteFieldClass = typing.Union[str, RemoteFieldClass] diff --git a/src/merge/resources/ticketing/types/remote_field_request_remote_field_class.py b/src/merge/resources/ticketing/types/remote_field_request_remote_field_class.py index 08797e5e..7a6238f4 100644 --- a/src/merge/resources/ticketing/types/remote_field_request_remote_field_class.py +++ b/src/merge/resources/ticketing/types/remote_field_request_remote_field_class.py @@ -2,6 +2,14 @@ import typing +from .field_format_enum import FieldFormatEnum +from .field_type_enum import FieldTypeEnum +from .item_format_enum import ItemFormatEnum +from .item_schema import ItemSchema +from .item_type_enum import ItemTypeEnum from .remote_field_class import RemoteFieldClass +from .remote_field_class_field_choices_item import RemoteFieldClassFieldChoicesItem +from .remote_field_class_field_format import RemoteFieldClassFieldFormat +from .remote_field_class_field_type import RemoteFieldClassFieldType RemoteFieldRequestRemoteFieldClass = typing.Union[str, RemoteFieldClass] diff --git a/src/merge/resources/ticketing/types/ticket.py b/src/merge/resources/ticketing/types/ticket.py index 856dd29a..6150f04e 100644 --- a/src/merge/resources/ticketing/types/ticket.py +++ b/src/merge/resources/ticketing/types/ticket.py @@ -58,8 +58,8 @@ class Ticket(pydantic.BaseModel): ticket_type: typing.Optional[str] = pydantic.Field(description="The ticket's type.") account: typing.Optional[TicketAccount] = pydantic.Field(description="The account associated with the ticket.") contact: typing.Optional[TicketContact] = pydantic.Field(description="The contact associated with the ticket.") - parent_ticket: typing.Optional[TicketParentTicket] = pydantic.Field(description="The ticket's parent ticket.") - attachments: typing.Optional[typing.List[typing.Optional[TicketAttachmentsItem]]] + parent_ticket: typing.Optional["TicketParentTicket"] = pydantic.Field(description="The ticket's parent ticket.") + attachments: typing.Optional[typing.List[typing.Optional["TicketAttachmentsItem"]]] tags: typing.Optional[typing.List[typing.Optional[str]]] remote_created_at: typing.Optional[dt.datetime] = pydantic.Field( description="When the third party's ticket was created." @@ -102,7 +102,9 @@ class Config: json_encoders = {dt.datetime: serialize_datetime} +from .attachment import Attachment # noqa: E402 +from .attachment_ticket import AttachmentTicket # noqa: E402 from .ticket_attachments_item import TicketAttachmentsItem # noqa: E402 from .ticket_parent_ticket import TicketParentTicket # noqa: E402 -Ticket.update_forward_refs() +Ticket.update_forward_refs(TicketAttachmentsItem=TicketAttachmentsItem, TicketParentTicket=TicketParentTicket) diff --git a/src/merge/resources/ticketing/types/ticket_account.py b/src/merge/resources/ticketing/types/ticket_account.py index 735aff2e..6a9bc5b3 100644 --- a/src/merge/resources/ticketing/types/ticket_account.py +++ b/src/merge/resources/ticketing/types/ticket_account.py @@ -3,5 +3,6 @@ import typing from .account import Account +from .remote_data import RemoteData TicketAccount = typing.Union[str, Account] diff --git a/src/merge/resources/ticketing/types/ticket_assignees_item.py b/src/merge/resources/ticketing/types/ticket_assignees_item.py index 91bc713c..b586bab0 100644 --- a/src/merge/resources/ticketing/types/ticket_assignees_item.py +++ b/src/merge/resources/ticketing/types/ticket_assignees_item.py @@ -2,6 +2,15 @@ import typing +from .remote_data import RemoteData +from .role import Role +from .role_ticket_access import RoleTicketAccess +from .role_ticket_actions_item import RoleTicketActionsItem +from .team import Team +from .ticket_access_enum import TicketAccessEnum +from .ticket_actions_enum import TicketActionsEnum from .user import User +from .user_roles_item import UserRolesItem +from .user_teams_item import UserTeamsItem TicketAssigneesItem = typing.Union[str, User] diff --git a/src/merge/resources/ticketing/types/ticket_attachments_item.py b/src/merge/resources/ticketing/types/ticket_attachments_item.py index 80c2262f..fa7ba793 100644 --- a/src/merge/resources/ticketing/types/ticket_attachments_item.py +++ b/src/merge/resources/ticketing/types/ticket_attachments_item.py @@ -1,7 +1,51 @@ # This file was auto-generated by Fern from our API Definition. +from __future__ import annotations + import typing -from .attachment import Attachment +from .access_level_enum import AccessLevelEnum +from .account import Account +from .collection_access_level import CollectionAccessLevel +from .collection_collection_type import CollectionCollectionType +from .collection_type_enum import CollectionTypeEnum +from .contact import Contact +from .contact_account import ContactAccount +from .field_format_enum import FieldFormatEnum +from .field_type_enum import FieldTypeEnum +from .item_format_enum import ItemFormatEnum +from .item_schema import ItemSchema +from .item_type_enum import ItemTypeEnum +from .priority_enum import PriorityEnum +from .remote_data import RemoteData +from .remote_field import RemoteField +from .remote_field_class import RemoteFieldClass +from .remote_field_class_field_choices_item import RemoteFieldClassFieldChoicesItem +from .remote_field_class_field_format import RemoteFieldClassFieldFormat +from .remote_field_class_field_type import RemoteFieldClassFieldType +from .remote_field_remote_field_class import RemoteFieldRemoteFieldClass +from .role import Role +from .role_ticket_access import RoleTicketAccess +from .role_ticket_actions_item import RoleTicketActionsItem +from .team import Team +from .ticket_access_enum import TicketAccessEnum +from .ticket_account import TicketAccount +from .ticket_actions_enum import TicketActionsEnum +from .ticket_assignees_item import TicketAssigneesItem +from .ticket_collections_item import TicketCollectionsItem +from .ticket_contact import TicketContact +from .ticket_creator import TicketCreator +from .ticket_priority import TicketPriority +from .ticket_status import TicketStatus +from .ticket_status_enum import TicketStatusEnum +from .user import User +from .user_roles_item import UserRolesItem +from .user_teams_item import UserTeamsItem -TicketAttachmentsItem = typing.Union[str, Attachment] +TicketAttachmentsItem = typing.Union[str, "Attachment"] +from .attachment import Attachment # noqa: E402 +from .attachment_ticket import AttachmentTicket # noqa: E402 +from .collection import Collection # noqa: E402 +from .collection_parent_collection import CollectionParentCollection # noqa: E402 +from .ticket import Ticket # noqa: E402 +from .ticket_parent_ticket import TicketParentTicket # noqa: E402 diff --git a/src/merge/resources/ticketing/types/ticket_collections_item.py b/src/merge/resources/ticketing/types/ticket_collections_item.py index ce728b10..3b48eced 100644 --- a/src/merge/resources/ticketing/types/ticket_collections_item.py +++ b/src/merge/resources/ticketing/types/ticket_collections_item.py @@ -1,7 +1,15 @@ # This file was auto-generated by Fern from our API Definition. +from __future__ import annotations + import typing -from .collection import Collection +from .access_level_enum import AccessLevelEnum +from .collection_access_level import CollectionAccessLevel +from .collection_collection_type import CollectionCollectionType +from .collection_type_enum import CollectionTypeEnum +from .remote_data import RemoteData -TicketCollectionsItem = typing.Union[str, Collection] +TicketCollectionsItem = typing.Union[str, "Collection"] +from .collection import Collection # noqa: E402 +from .collection_parent_collection import CollectionParentCollection # noqa: E402 diff --git a/src/merge/resources/ticketing/types/ticket_contact.py b/src/merge/resources/ticketing/types/ticket_contact.py index 22375e74..899b9771 100644 --- a/src/merge/resources/ticketing/types/ticket_contact.py +++ b/src/merge/resources/ticketing/types/ticket_contact.py @@ -2,6 +2,9 @@ import typing +from .account import Account from .contact import Contact +from .contact_account import ContactAccount +from .remote_data import RemoteData TicketContact = typing.Union[str, Contact] diff --git a/src/merge/resources/ticketing/types/ticket_creator.py b/src/merge/resources/ticketing/types/ticket_creator.py index 461faf42..534fb25a 100644 --- a/src/merge/resources/ticketing/types/ticket_creator.py +++ b/src/merge/resources/ticketing/types/ticket_creator.py @@ -2,6 +2,15 @@ import typing +from .remote_data import RemoteData +from .role import Role +from .role_ticket_access import RoleTicketAccess +from .role_ticket_actions_item import RoleTicketActionsItem +from .team import Team +from .ticket_access_enum import TicketAccessEnum +from .ticket_actions_enum import TicketActionsEnum from .user import User +from .user_roles_item import UserRolesItem +from .user_teams_item import UserTeamsItem TicketCreator = typing.Union[str, User] diff --git a/src/merge/resources/ticketing/types/ticket_parent_ticket.py b/src/merge/resources/ticketing/types/ticket_parent_ticket.py index 798a1ff8..c484f833 100644 --- a/src/merge/resources/ticketing/types/ticket_parent_ticket.py +++ b/src/merge/resources/ticketing/types/ticket_parent_ticket.py @@ -1,7 +1,51 @@ # This file was auto-generated by Fern from our API Definition. +from __future__ import annotations + import typing -from .ticket import Ticket +from .access_level_enum import AccessLevelEnum +from .account import Account +from .collection_access_level import CollectionAccessLevel +from .collection_collection_type import CollectionCollectionType +from .collection_type_enum import CollectionTypeEnum +from .contact import Contact +from .contact_account import ContactAccount +from .field_format_enum import FieldFormatEnum +from .field_type_enum import FieldTypeEnum +from .item_format_enum import ItemFormatEnum +from .item_schema import ItemSchema +from .item_type_enum import ItemTypeEnum +from .priority_enum import PriorityEnum +from .remote_data import RemoteData +from .remote_field import RemoteField +from .remote_field_class import RemoteFieldClass +from .remote_field_class_field_choices_item import RemoteFieldClassFieldChoicesItem +from .remote_field_class_field_format import RemoteFieldClassFieldFormat +from .remote_field_class_field_type import RemoteFieldClassFieldType +from .remote_field_remote_field_class import RemoteFieldRemoteFieldClass +from .role import Role +from .role_ticket_access import RoleTicketAccess +from .role_ticket_actions_item import RoleTicketActionsItem +from .team import Team +from .ticket_access_enum import TicketAccessEnum +from .ticket_account import TicketAccount +from .ticket_actions_enum import TicketActionsEnum +from .ticket_assignees_item import TicketAssigneesItem +from .ticket_collections_item import TicketCollectionsItem +from .ticket_contact import TicketContact +from .ticket_creator import TicketCreator +from .ticket_priority import TicketPriority +from .ticket_status import TicketStatus +from .ticket_status_enum import TicketStatusEnum +from .user import User +from .user_roles_item import UserRolesItem +from .user_teams_item import UserTeamsItem -TicketParentTicket = typing.Union[str, Ticket] +TicketParentTicket = typing.Union[str, "Ticket"] +from .attachment import Attachment # noqa: E402 +from .attachment_ticket import AttachmentTicket # noqa: E402 +from .collection import Collection # noqa: E402 +from .collection_parent_collection import CollectionParentCollection # noqa: E402 +from .ticket import Ticket # noqa: E402 +from .ticket_attachments_item import TicketAttachmentsItem # noqa: E402 diff --git a/src/merge/resources/ticketing/types/ticket_request_account.py b/src/merge/resources/ticketing/types/ticket_request_account.py index 91596edc..c1aa126c 100644 --- a/src/merge/resources/ticketing/types/ticket_request_account.py +++ b/src/merge/resources/ticketing/types/ticket_request_account.py @@ -3,5 +3,6 @@ import typing from .account import Account +from .remote_data import RemoteData TicketRequestAccount = typing.Union[str, Account] diff --git a/src/merge/resources/ticketing/types/ticket_request_assignees_item.py b/src/merge/resources/ticketing/types/ticket_request_assignees_item.py index 3f14bdaa..5f805f9e 100644 --- a/src/merge/resources/ticketing/types/ticket_request_assignees_item.py +++ b/src/merge/resources/ticketing/types/ticket_request_assignees_item.py @@ -2,6 +2,15 @@ import typing +from .remote_data import RemoteData +from .role import Role +from .role_ticket_access import RoleTicketAccess +from .role_ticket_actions_item import RoleTicketActionsItem +from .team import Team +from .ticket_access_enum import TicketAccessEnum +from .ticket_actions_enum import TicketActionsEnum from .user import User +from .user_roles_item import UserRolesItem +from .user_teams_item import UserTeamsItem TicketRequestAssigneesItem = typing.Union[str, User] diff --git a/src/merge/resources/ticketing/types/ticket_request_attachments_item.py b/src/merge/resources/ticketing/types/ticket_request_attachments_item.py index 1e9bd3af..8d49567f 100644 --- a/src/merge/resources/ticketing/types/ticket_request_attachments_item.py +++ b/src/merge/resources/ticketing/types/ticket_request_attachments_item.py @@ -1,7 +1,52 @@ # This file was auto-generated by Fern from our API Definition. +from __future__ import annotations + import typing -from .attachment import Attachment +from .access_level_enum import AccessLevelEnum +from .account import Account +from .collection_access_level import CollectionAccessLevel +from .collection_collection_type import CollectionCollectionType +from .collection_type_enum import CollectionTypeEnum +from .contact import Contact +from .contact_account import ContactAccount +from .field_format_enum import FieldFormatEnum +from .field_type_enum import FieldTypeEnum +from .item_format_enum import ItemFormatEnum +from .item_schema import ItemSchema +from .item_type_enum import ItemTypeEnum +from .priority_enum import PriorityEnum +from .remote_data import RemoteData +from .remote_field import RemoteField +from .remote_field_class import RemoteFieldClass +from .remote_field_class_field_choices_item import RemoteFieldClassFieldChoicesItem +from .remote_field_class_field_format import RemoteFieldClassFieldFormat +from .remote_field_class_field_type import RemoteFieldClassFieldType +from .remote_field_remote_field_class import RemoteFieldRemoteFieldClass +from .role import Role +from .role_ticket_access import RoleTicketAccess +from .role_ticket_actions_item import RoleTicketActionsItem +from .team import Team +from .ticket_access_enum import TicketAccessEnum +from .ticket_account import TicketAccount +from .ticket_actions_enum import TicketActionsEnum +from .ticket_assignees_item import TicketAssigneesItem +from .ticket_collections_item import TicketCollectionsItem +from .ticket_contact import TicketContact +from .ticket_creator import TicketCreator +from .ticket_priority import TicketPriority +from .ticket_status import TicketStatus +from .ticket_status_enum import TicketStatusEnum +from .user import User +from .user_roles_item import UserRolesItem +from .user_teams_item import UserTeamsItem -TicketRequestAttachmentsItem = typing.Union[str, Attachment] +TicketRequestAttachmentsItem = typing.Union[str, "Attachment"] +from .attachment import Attachment # noqa: E402 +from .attachment_ticket import AttachmentTicket # noqa: E402 +from .collection import Collection # noqa: E402 +from .collection_parent_collection import CollectionParentCollection # noqa: E402 +from .ticket import Ticket # noqa: E402 +from .ticket_attachments_item import TicketAttachmentsItem # noqa: E402 +from .ticket_parent_ticket import TicketParentTicket # noqa: E402 diff --git a/src/merge/resources/ticketing/types/ticket_request_collections_item.py b/src/merge/resources/ticketing/types/ticket_request_collections_item.py index 9a87b09a..fa0abb65 100644 --- a/src/merge/resources/ticketing/types/ticket_request_collections_item.py +++ b/src/merge/resources/ticketing/types/ticket_request_collections_item.py @@ -1,7 +1,15 @@ # This file was auto-generated by Fern from our API Definition. +from __future__ import annotations + import typing -from .collection import Collection +from .access_level_enum import AccessLevelEnum +from .collection_access_level import CollectionAccessLevel +from .collection_collection_type import CollectionCollectionType +from .collection_type_enum import CollectionTypeEnum +from .remote_data import RemoteData -TicketRequestCollectionsItem = typing.Union[str, Collection] +TicketRequestCollectionsItem = typing.Union[str, "Collection"] +from .collection import Collection # noqa: E402 +from .collection_parent_collection import CollectionParentCollection # noqa: E402 diff --git a/src/merge/resources/ticketing/types/ticket_request_contact.py b/src/merge/resources/ticketing/types/ticket_request_contact.py index b1313c40..052df876 100644 --- a/src/merge/resources/ticketing/types/ticket_request_contact.py +++ b/src/merge/resources/ticketing/types/ticket_request_contact.py @@ -2,6 +2,9 @@ import typing +from .account import Account from .contact import Contact +from .contact_account import ContactAccount +from .remote_data import RemoteData TicketRequestContact = typing.Union[str, Contact] diff --git a/src/merge/resources/ticketing/types/ticket_request_creator.py b/src/merge/resources/ticketing/types/ticket_request_creator.py index a6cbf7b9..01d24568 100644 --- a/src/merge/resources/ticketing/types/ticket_request_creator.py +++ b/src/merge/resources/ticketing/types/ticket_request_creator.py @@ -2,6 +2,15 @@ import typing +from .remote_data import RemoteData +from .role import Role +from .role_ticket_access import RoleTicketAccess +from .role_ticket_actions_item import RoleTicketActionsItem +from .team import Team +from .ticket_access_enum import TicketAccessEnum +from .ticket_actions_enum import TicketActionsEnum from .user import User +from .user_roles_item import UserRolesItem +from .user_teams_item import UserTeamsItem TicketRequestCreator = typing.Union[str, User] diff --git a/src/merge/resources/ticketing/types/ticket_request_parent_ticket.py b/src/merge/resources/ticketing/types/ticket_request_parent_ticket.py index f6943945..afb17486 100644 --- a/src/merge/resources/ticketing/types/ticket_request_parent_ticket.py +++ b/src/merge/resources/ticketing/types/ticket_request_parent_ticket.py @@ -1,7 +1,52 @@ # This file was auto-generated by Fern from our API Definition. +from __future__ import annotations + import typing -from .ticket import Ticket +from .access_level_enum import AccessLevelEnum +from .account import Account +from .collection_access_level import CollectionAccessLevel +from .collection_collection_type import CollectionCollectionType +from .collection_type_enum import CollectionTypeEnum +from .contact import Contact +from .contact_account import ContactAccount +from .field_format_enum import FieldFormatEnum +from .field_type_enum import FieldTypeEnum +from .item_format_enum import ItemFormatEnum +from .item_schema import ItemSchema +from .item_type_enum import ItemTypeEnum +from .priority_enum import PriorityEnum +from .remote_data import RemoteData +from .remote_field import RemoteField +from .remote_field_class import RemoteFieldClass +from .remote_field_class_field_choices_item import RemoteFieldClassFieldChoicesItem +from .remote_field_class_field_format import RemoteFieldClassFieldFormat +from .remote_field_class_field_type import RemoteFieldClassFieldType +from .remote_field_remote_field_class import RemoteFieldRemoteFieldClass +from .role import Role +from .role_ticket_access import RoleTicketAccess +from .role_ticket_actions_item import RoleTicketActionsItem +from .team import Team +from .ticket_access_enum import TicketAccessEnum +from .ticket_account import TicketAccount +from .ticket_actions_enum import TicketActionsEnum +from .ticket_assignees_item import TicketAssigneesItem +from .ticket_collections_item import TicketCollectionsItem +from .ticket_contact import TicketContact +from .ticket_creator import TicketCreator +from .ticket_priority import TicketPriority +from .ticket_status import TicketStatus +from .ticket_status_enum import TicketStatusEnum +from .user import User +from .user_roles_item import UserRolesItem +from .user_teams_item import UserTeamsItem -TicketRequestParentTicket = typing.Union[str, Ticket] +TicketRequestParentTicket = typing.Union[str, "Ticket"] +from .attachment import Attachment # noqa: E402 +from .attachment_ticket import AttachmentTicket # noqa: E402 +from .collection import Collection # noqa: E402 +from .collection_parent_collection import CollectionParentCollection # noqa: E402 +from .ticket import Ticket # noqa: E402 +from .ticket_attachments_item import TicketAttachmentsItem # noqa: E402 +from .ticket_parent_ticket import TicketParentTicket # noqa: E402 diff --git a/src/merge/resources/ticketing/types/user_roles_item.py b/src/merge/resources/ticketing/types/user_roles_item.py index 8597ca2f..a4a49297 100644 --- a/src/merge/resources/ticketing/types/user_roles_item.py +++ b/src/merge/resources/ticketing/types/user_roles_item.py @@ -2,6 +2,11 @@ import typing +from .remote_data import RemoteData from .role import Role +from .role_ticket_access import RoleTicketAccess +from .role_ticket_actions_item import RoleTicketActionsItem +from .ticket_access_enum import TicketAccessEnum +from .ticket_actions_enum import TicketActionsEnum UserRolesItem = typing.Union[str, Role] diff --git a/src/merge/resources/ticketing/types/user_teams_item.py b/src/merge/resources/ticketing/types/user_teams_item.py index 55220039..6150a87a 100644 --- a/src/merge/resources/ticketing/types/user_teams_item.py +++ b/src/merge/resources/ticketing/types/user_teams_item.py @@ -2,6 +2,7 @@ import typing +from .remote_data import RemoteData from .team import Team UserTeamsItem = typing.Union[str, Team]