diff --git a/.fern/metadata.json b/.fern/metadata.json new file mode 100644 index 00000000..301cea97 --- /dev/null +++ b/.fern/metadata.json @@ -0,0 +1,16 @@ +{ + "cliVersion": "3.72.0", + "generatorName": "fernapi/fern-python-sdk", + "generatorVersion": "5.0.8", + "generatorConfig": { + "client_class_name": "Merge", + "inline_request_params": false, + "improved_imports": false, + "pydantic_config": { + "skip_validation": true, + "enum_type": "python_enums", + "use_pydantic_field_aliases": true + } + }, + "sdkVersion": "4.0.0" +} \ No newline at end of file diff --git a/.fern/replay.lock b/.fern/replay.lock index 7582ec98..30ee9c54 100644 --- a/.fern/replay.lock +++ b/.fern/replay.lock @@ -6,5 +6,248 @@ generations: timestamp: 2026-06-15T16:04:12.369Z cli_version: unknown generator_versions: {} -current_generation: d1b397945cde28063f302964d1e6ea46f27e8829 -patches: [] + - commit_sha: 3f73767305ee9dc15a905e160650c32b0cb83a27 + tree_hash: 2dc6d27eb108630d365720bb36a49ceea358eb31 + timestamp: 2026-07-14T13:12:00.851Z + cli_version: unknown + generator_versions: + fernapi/fern-python-sdk: 5.0.8 +current_generation: 3f73767305ee9dc15a905e160650c32b0cb83a27 +patches: + - id: patch-09841618 + content_hash: sha256:5da05043df04207e1c3dad25d3c390a26cfc9f23b67f46f105aa367c41393ba5 + original_commit: 09841618445eb42e604af20e004e184435c55914 + original_message: update version to 3.1.0 (#198) + original_author: niteshsandal-merge + base_generation: a2b68b2671dab90a88084e2970bef54addf2a6f0 + files: + - pyproject.toml + - src/merge/core/client_wrapper.py + patch_content: |+ + From 09841618445eb42e604af20e004e184435c55914 Mon Sep 17 00:00:00 2001 + From: niteshsandal-merge + Date: Mon, 22 Jun 2026 11:30:45 -0400 + Subject: [PATCH] update version to 3.1.0 (#198) + + Co-authored-by: Claude Opus 4.8 (1M context) + --- + pyproject.toml | 2 +- + src/merge/core/client_wrapper.py | 4 ++-- + 2 files changed, 3 insertions(+), 3 deletions(-) + + diff --git a/pyproject.toml b/pyproject.toml + index f7ed8747..fb4dc9ff 100644 + --- a/pyproject.toml + +++ b/pyproject.toml + @@ -3,7 +3,7 @@ name = "MergePythonClient" + + [tool.poetry] + name = "MergePythonClient" + -version = "3.1.0a3" + +version = "3.1.0" + description = "" + readme = "README.md" + authors = [] + diff --git a/src/merge/core/client_wrapper.py b/src/merge/core/client_wrapper.py + index 1e729a6e..fb141371 100644 + --- a/src/merge/core/client_wrapper.py + +++ b/src/merge/core/client_wrapper.py + @@ -24,10 +24,10 @@ class BaseClientWrapper: + + def get_headers(self) -> typing.Dict[str, str]: + headers: typing.Dict[str, str] = { + - "User-Agent": "MergePythonClient/3.1.0a3", + + "User-Agent": "MergePythonClient/3.1.0", + "X-Fern-Language": "Python", + "X-Fern-SDK-Name": "MergePythonClient", + - "X-Fern-SDK-Version": "3.1.0a3", + + "X-Fern-SDK-Version": "3.1.0", + **(self.get_custom_headers() or {}), + } + if self._account_token is not None: + -- + 2.52.0 + + theirs_snapshot: + pyproject.toml: | + [project] + name = "MergePythonClient" + + [tool.poetry] + name = "MergePythonClient" + version = "3.1.0" + description = "" + readme = "README.md" + authors = [] + keywords = [] + + classifiers = [ + "Intended Audience :: Developers", + "Programming Language :: Python", + "Programming Language :: Python :: 3", + "Programming Language :: Python :: 3.8", + "Programming Language :: Python :: 3.9", + "Programming Language :: Python :: 3.10", + "Programming Language :: Python :: 3.11", + "Programming Language :: Python :: 3.12", + "Operating System :: OS Independent", + "Operating System :: POSIX", + "Operating System :: MacOS", + "Operating System :: POSIX :: Linux", + "Operating System :: Microsoft :: Windows", + "Topic :: Software Development :: Libraries :: Python Modules", + "Typing :: Typed" + ] + packages = [ + { include = "merge", from = "src"} + ] + + [project.urls] + Repository = 'https://github.com/merge-api/merge-python-client' + + [tool.poetry.dependencies] + python = "^3.8" + httpx = ">=0.21.2" + pydantic = ">= 1.9.2" + pydantic-core = ">=2.18.2" + typing_extensions = ">= 4.0.0" + + [tool.poetry.group.dev.dependencies] + mypy = "==1.13.0" + pytest = "^7.4.0" + pytest-asyncio = "^0.23.5" + python-dateutil = "^2.9.0" + types-python-dateutil = "^2.9.0.20240316" + ruff = "==0.11.5" + + [tool.pytest.ini_options] + testpaths = [ "tests" ] + asyncio_mode = "auto" + + [tool.mypy] + plugins = ["pydantic.mypy"] + + [tool.ruff] + line-length = 120 + + [tool.ruff.lint] + select = [ + "E", # pycodestyle errors + "F", # pyflakes + "I", # isort + ] + ignore = [ + "E402", # Module level import not at top of file + "E501", # Line too long + "E711", # Comparison to `None` should be `cond is not None` + "E712", # Avoid equality comparisons to `True`; use `if ...:` checks + "E721", # Use `is` and `is not` for type comparisons, or `isinstance()` for insinstance checks + "E722", # Do not use bare `except` + "E731", # Do not assign a `lambda` expression, use a `def` + "F821", # Undefined name + "F841" # Local variable ... is assigned to but never used + ] + + [tool.ruff.lint.isort] + section-order = ["future", "standard-library", "third-party", "first-party"] + + [build-system] + requires = ["poetry-core"] + build-backend = "poetry.core.masonry.api" + src/merge/core/client_wrapper.py: | + # This file was auto-generated by Fern from our API Definition. + + import typing + + import httpx + from .http_client import AsyncHttpClient, HttpClient + + + class BaseClientWrapper: + def __init__( + self, + *, + account_token: typing.Optional[str] = None, + api_key: typing.Union[str, typing.Callable[[], str]], + headers: typing.Optional[typing.Dict[str, str]] = None, + base_url: str, + timeout: typing.Optional[float] = None, + ): + self._account_token = account_token + self._api_key = api_key + self._headers = headers + self._base_url = base_url + self._timeout = timeout + + def get_headers(self) -> typing.Dict[str, str]: + headers: typing.Dict[str, str] = { + "User-Agent": "MergePythonClient/3.1.0", + "X-Fern-Language": "Python", + "X-Fern-SDK-Name": "MergePythonClient", + "X-Fern-SDK-Version": "3.1.0", + **(self.get_custom_headers() or {}), + } + if self._account_token is not None: + headers["X-Account-Token"] = self._account_token + headers["Authorization"] = f"Bearer {self._get_api_key()}" + return headers + + def _get_api_key(self) -> str: + if isinstance(self._api_key, str): + return self._api_key + else: + return self._api_key() + + def get_custom_headers(self) -> typing.Optional[typing.Dict[str, str]]: + return self._headers + + def get_base_url(self) -> str: + return self._base_url + + def get_timeout(self) -> typing.Optional[float]: + return self._timeout + + + class SyncClientWrapper(BaseClientWrapper): + def __init__( + self, + *, + account_token: typing.Optional[str] = None, + api_key: typing.Union[str, typing.Callable[[], str]], + headers: typing.Optional[typing.Dict[str, str]] = None, + base_url: str, + timeout: typing.Optional[float] = None, + httpx_client: httpx.Client, + ): + super().__init__( + account_token=account_token, api_key=api_key, headers=headers, base_url=base_url, timeout=timeout + ) + self.httpx_client = HttpClient( + httpx_client=httpx_client, + base_headers=self.get_headers, + base_timeout=self.get_timeout, + base_url=self.get_base_url, + ) + + + class AsyncClientWrapper(BaseClientWrapper): + def __init__( + self, + *, + account_token: typing.Optional[str] = None, + api_key: typing.Union[str, typing.Callable[[], str]], + headers: typing.Optional[typing.Dict[str, str]] = None, + base_url: str, + timeout: typing.Optional[float] = None, + httpx_client: httpx.AsyncClient, + ): + super().__init__( + account_token=account_token, api_key=api_key, headers=headers, base_url=base_url, timeout=timeout + ) + self.httpx_client = AsyncHttpClient( + httpx_client=httpx_client, + base_headers=self.get_headers, + base_timeout=self.get_timeout, + base_url=self.get_base_url, + ) + status: unresolved diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index e06d69cf..a063e3f9 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -10,7 +10,7 @@ jobs: - name: Set up python uses: actions/setup-python@v4 with: - python-version: 3.8 + python-version: "3.10" - name: Bootstrap poetry run: | curl -sSL https://install.python-poetry.org | python - -y --version 1.5.1 @@ -26,7 +26,7 @@ jobs: - name: Set up python uses: actions/setup-python@v4 with: - python-version: 3.8 + python-version: "3.10" - name: Bootstrap poetry run: | curl -sSL https://install.python-poetry.org | python - -y --version 1.5.1 @@ -55,7 +55,7 @@ jobs: - name: Set up python uses: actions/setup-python@v4 with: - python-version: 3.8 + python-version: "3.10" - name: Bootstrap poetry run: | curl -sSL https://install.python-poetry.org | python - -y --version 1.5.1 diff --git a/README.md b/README.md index e7a4ad2b..af7c77d3 100644 --- a/README.md +++ b/README.md @@ -46,9 +46,9 @@ Instantiate and use the client with the following: from merge import Merge client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", ) + client.ats.account_token.regenerate_create() ``` @@ -77,7 +77,7 @@ client.hris. # APIs specific to the HRIS Category ## Async Client -The SDK also exports an `async` client so that you can make non-blocking calls to our API. +The SDK also exports an `async` client so that you can make non-blocking calls to our API. Note that if you are constructing an Async httpx client class to pass into this client, use `httpx.AsyncClient()` instead of `httpx.Client()` (e.g. for the `httpx_client` parameter of this client). ```python import asyncio @@ -85,8 +85,7 @@ import asyncio from merge import AsyncMerge client = AsyncMerge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", ) @@ -106,7 +105,7 @@ will be thrown. from merge.core.api_error import ApiError try: - client.ats.account_token.regenerate_create(...) + client.ats.account_token.regenerate_create() except ApiError as e: print(e.status_code) print(e.body) @@ -122,11 +121,10 @@ The `.with_raw_response` property returns a "raw" client that can be used to acc ```python from merge import Merge -client = Merge( - ..., -) -response = client.ats.account_token.with_raw_response.regenerate_create(...) +client = Merge(...) +response = client.ats.account_token.with_raw_response.regenerate_create() print(response.headers) # access the response headers +print(response.status_code) # access the response status code print(response.data) # access the underlying object ``` @@ -145,7 +143,7 @@ A request is deemed retryable when any of the following HTTP status codes is ret Use the `max_retries` request option to configure this behavior. ```python -client.ats.account_token.regenerate_create(..., request_options={ +client.ats.account_token.regenerate_create(request_options={ "max_retries": 1 }) ``` @@ -155,17 +153,12 @@ client.ats.account_token.regenerate_create(..., request_options={ The SDK defaults to a 60 second timeout. You can configure this with a timeout option at the client or request level. ```python - from merge import Merge -client = Merge( - ..., - timeout=20.0, -) - +client = Merge(..., timeout=20.0) # Override timeout for a specific method -client.ats.account_token.regenerate_create(..., request_options={ +client.ats.account_token.regenerate_create(request_options={ "timeout_in_seconds": 1 }) ``` @@ -258,5 +251,6 @@ while response.next is not None: + diff --git a/poetry.lock b/poetry.lock index 250aaae2..abdeb8ab 100644 --- a/poetry.lock +++ b/poetry.lock @@ -11,30 +11,35 @@ files = [ {file = "annotated_types-0.7.0.tar.gz", hash = "sha256:aff07c09a53a08bc8cfccb9c85b05f1aa9a2a6f23728d790723543408344ce89"}, ] -[package.dependencies] -typing-extensions = {version = ">=4.0.0", markers = "python_version < \"3.9\""} - [[package]] name = "anyio" -version = "4.5.2" -description = "High level compatibility layer for multiple asynchronous event loop implementations" +version = "4.14.2" +description = "High-level concurrency and networking framework on top of asyncio or Trio" optional = false -python-versions = ">=3.8" +python-versions = ">=3.10" files = [ - {file = "anyio-4.5.2-py3-none-any.whl", hash = "sha256:c011ee36bc1e8ba40e5a81cb9df91925c218fe9b778554e0b56a21e1b5d4716f"}, - {file = "anyio-4.5.2.tar.gz", hash = "sha256:23009af4ed04ce05991845451e11ef02fc7c5ed29179ac9a420e5ad0ac7ddc5b"}, + {file = "anyio-4.14.2-py3-none-any.whl", hash = "sha256:9f505dda5ac9f0c8309b5e8bd445a8c2bf7246f3ce950121e45ea15bc41d1494"}, + {file = "anyio-4.14.2.tar.gz", hash = "sha256:cfa139f3ed1a23ee8f88a145ddb5ac7605b8bbfd8592baacd7ce3d8bb4313c7f"}, ] [package.dependencies] exceptiongroup = {version = ">=1.0.2", markers = "python_version < \"3.11\""} idna = ">=2.8" -sniffio = ">=1.1" -typing-extensions = {version = ">=4.1", markers = "python_version < \"3.11\""} +typing_extensions = {version = ">=4.5", markers = "python_version < \"3.13\""} [package.extras] -doc = ["Sphinx (>=7.4,<8.0)", "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", "truststore (>=0.9.1)", "uvloop (>=0.21.0b1)"] -trio = ["trio (>=0.26.1)"] +trio = ["trio (>=0.32.0)"] + +[[package]] +name = "backports-asyncio-runner" +version = "1.2.0" +description = "Backport of asyncio.Runner, a context manager that controls event loop life cycle." +optional = false +python-versions = "<3.11,>=3.8" +files = [ + {file = "backports_asyncio_runner-1.2.0-py3-none-any.whl", hash = "sha256:0da0a936a8aeb554eccb426dc55af3ba63bcdc69fa1a600b5bb305413a4477b5"}, + {file = "backports_asyncio_runner-1.2.0.tar.gz", hash = "sha256:a5aa7b2b7d8f8bfcaa2b57313f70792df84e32a2a746f585213373f900b42162"}, +] [[package]] name = "certifi" @@ -75,6 +80,20 @@ typing-extensions = {version = ">=4.6.0", markers = "python_version < \"3.13\""} [package.extras] test = ["pytest (>=6)"] +[[package]] +name = "execnet" +version = "2.1.2" +description = "execnet: rapid multi-Python deployment" +optional = false +python-versions = ">=3.8" +files = [ + {file = "execnet-2.1.2-py3-none-any.whl", hash = "sha256:67fba928dd5a544b783f6056f449e5e3931a5c378b128bc18501f7ea79e296ec"}, + {file = "execnet-2.1.2.tar.gz", hash = "sha256:63d83bfdd9a23e35b9c6a3261412324f964c2ec8dcd8d3c6916ee9373e0befcd"}, +] + +[package.extras] +testing = ["hatch", "pre-commit", "pytest", "tox"] + [[package]] name = "h11" version = "0.16.0" @@ -133,13 +152,13 @@ zstd = ["zstandard (>=0.18.0)"] [[package]] name = "idna" -version = "3.15" +version = "3.18" description = "Internationalized Domain Names in Applications (IDNA)" optional = false -python-versions = ">=3.8" +python-versions = ">=3.9" files = [ - {file = "idna-3.15-py3-none-any.whl", hash = "sha256:048adeaf8c2d788c40fee287673ccaa74c24ffd8dcf09ffa555a2fbb59f10ac8"}, - {file = "idna-3.15.tar.gz", hash = "sha256:ca962446ea538f7092a95e057da437618e886f4d349216d2b1e294abfdb65fdc"}, + {file = "idna-3.18-py3-none-any.whl", hash = "sha256:7f952cbe720b688055e3f87de14f5c3e5fdaa8bc3928985c4077ca689de849a2"}, + {file = "idna-3.18.tar.gz", hash = "sha256:ffb385a7e039654cef1ab9ef32c6fafe283c0c0467bba1d9029738ce4a14a848"}, ] [package.extras] @@ -147,13 +166,13 @@ all = ["mypy (>=1.11.2)", "pytest (>=8.3.2)", "ruff (>=0.6.2)"] [[package]] name = "iniconfig" -version = "2.1.0" +version = "2.3.0" description = "brain-dead simple config-ini parsing" optional = false -python-versions = ">=3.8" +python-versions = ">=3.10" files = [ - {file = "iniconfig-2.1.0-py3-none-any.whl", hash = "sha256:9deba5723312380e77435581c6bf4935c94cbfab9b1ed33ef8d238ea168eb760"}, - {file = "iniconfig-2.1.0.tar.gz", hash = "sha256:3abbd2e30b36733fee78f9c7f7308f2d0050e88f0087fd25c2645f63c773e1c7"}, + {file = "iniconfig-2.3.0-py3-none-any.whl", hash = "sha256:f631c04d2c48c52b84d0d0549c99ff3859c98df65b3101406327ecc7d53fbf12"}, + {file = "iniconfig-2.3.0.tar.gz", hash = "sha256:c76315c77db068650d49c5b56314774a7804df16fee4402c1f19d6d15d8c4730"}, ] [[package]] @@ -233,34 +252,35 @@ files = [ [[package]] name = "pluggy" -version = "1.5.0" +version = "1.6.0" description = "plugin and hook calling mechanisms for python" optional = false -python-versions = ">=3.8" +python-versions = ">=3.9" files = [ - {file = "pluggy-1.5.0-py3-none-any.whl", hash = "sha256:44e1ad92c8ca002de6377e165f3e0f1be63266ab4d554740532335b9d75ea669"}, - {file = "pluggy-1.5.0.tar.gz", hash = "sha256:2cffa88e94fdc978c4c574f15f9e59b7f4201d439195c3715ca9e2486f1d0cf1"}, + {file = "pluggy-1.6.0-py3-none-any.whl", hash = "sha256:e920276dd6813095e9377c0bc5566d94c932c33b27a3e3945d8389c374dd4746"}, + {file = "pluggy-1.6.0.tar.gz", hash = "sha256:7dcc130b76258d33b90f61b658791dede3486c3e6bfb003ee5c9bfb396dd22f3"}, ] [package.extras] dev = ["pre-commit", "tox"] -testing = ["pytest", "pytest-benchmark"] +testing = ["coverage", "pytest", "pytest-benchmark"] [[package]] name = "pydantic" -version = "2.10.6" +version = "2.13.4" description = "Data validation using Python type hints" optional = false -python-versions = ">=3.8" +python-versions = ">=3.9" files = [ - {file = "pydantic-2.10.6-py3-none-any.whl", hash = "sha256:427d664bf0b8a2b34ff5dd0f5a18df00591adcee7198fbd71981054cef37b584"}, - {file = "pydantic-2.10.6.tar.gz", hash = "sha256:ca5daa827cce33de7a42be142548b0096bf05a7e7b365aebfa5f8eeec7128236"}, + {file = "pydantic-2.13.4-py3-none-any.whl", hash = "sha256:45a282cde31d808236fd7ea9d919b128653c8b38b393d1c4ab335c62924d9aba"}, + {file = "pydantic-2.13.4.tar.gz", hash = "sha256:c40756b57adaa8b1efeeced5c196f3f3b7c435f90e84ea7f443901bec8099ef6"}, ] [package.dependencies] annotated-types = ">=0.6.0" -pydantic-core = "2.27.2" -typing-extensions = ">=4.12.2" +pydantic-core = "2.46.4" +typing-extensions = ">=4.14.1" +typing-inspection = ">=0.4.2" [package.extras] email = ["email-validator (>=2.0.0)"] @@ -268,156 +288,213 @@ timezone = ["tzdata"] [[package]] name = "pydantic-core" -version = "2.27.2" +version = "2.46.4" description = "Core functionality for Pydantic validation and serialization" optional = false -python-versions = ">=3.8" +python-versions = ">=3.9" files = [ - {file = "pydantic_core-2.27.2-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:2d367ca20b2f14095a8f4fa1210f5a7b78b8a20009ecced6b12818f455b1e9fa"}, - {file = "pydantic_core-2.27.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:491a2b73db93fab69731eaee494f320faa4e093dbed776be1a829c2eb222c34c"}, - {file = "pydantic_core-2.27.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7969e133a6f183be60e9f6f56bfae753585680f3b7307a8e555a948d443cc05a"}, - {file = "pydantic_core-2.27.2-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:3de9961f2a346257caf0aa508a4da705467f53778e9ef6fe744c038119737ef5"}, - {file = "pydantic_core-2.27.2-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e2bb4d3e5873c37bb3dd58714d4cd0b0e6238cebc4177ac8fe878f8b3aa8e74c"}, - {file = "pydantic_core-2.27.2-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:280d219beebb0752699480fe8f1dc61ab6615c2046d76b7ab7ee38858de0a4e7"}, - {file = "pydantic_core-2.27.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:47956ae78b6422cbd46f772f1746799cbb862de838fd8d1fbd34a82e05b0983a"}, - {file = "pydantic_core-2.27.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:14d4a5c49d2f009d62a2a7140d3064f686d17a5d1a268bc641954ba181880236"}, - {file = "pydantic_core-2.27.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:337b443af21d488716f8d0b6164de833e788aa6bd7e3a39c005febc1284f4962"}, - {file = "pydantic_core-2.27.2-cp310-cp310-musllinux_1_1_armv7l.whl", hash = "sha256:03d0f86ea3184a12f41a2d23f7ccb79cdb5a18e06993f8a45baa8dfec746f0e9"}, - {file = "pydantic_core-2.27.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:7041c36f5680c6e0f08d922aed302e98b3745d97fe1589db0a3eebf6624523af"}, - {file = "pydantic_core-2.27.2-cp310-cp310-win32.whl", hash = "sha256:50a68f3e3819077be2c98110c1f9dcb3817e93f267ba80a2c05bb4f8799e2ff4"}, - {file = "pydantic_core-2.27.2-cp310-cp310-win_amd64.whl", hash = "sha256:e0fd26b16394ead34a424eecf8a31a1f5137094cabe84a1bcb10fa6ba39d3d31"}, - {file = "pydantic_core-2.27.2-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:8e10c99ef58cfdf2a66fc15d66b16c4a04f62bca39db589ae8cba08bc55331bc"}, - {file = "pydantic_core-2.27.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:26f32e0adf166a84d0cb63be85c562ca8a6fa8de28e5f0d92250c6b7e9e2aff7"}, - {file = "pydantic_core-2.27.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8c19d1ea0673cd13cc2f872f6c9ab42acc4e4f492a7ca9d3795ce2b112dd7e15"}, - {file = "pydantic_core-2.27.2-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:5e68c4446fe0810e959cdff46ab0a41ce2f2c86d227d96dc3847af0ba7def306"}, - {file = "pydantic_core-2.27.2-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d9640b0059ff4f14d1f37321b94061c6db164fbe49b334b31643e0528d100d99"}, - {file = "pydantic_core-2.27.2-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:40d02e7d45c9f8af700f3452f329ead92da4c5f4317ca9b896de7ce7199ea459"}, - {file = "pydantic_core-2.27.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1c1fd185014191700554795c99b347d64f2bb637966c4cfc16998a0ca700d048"}, - {file = "pydantic_core-2.27.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:d81d2068e1c1228a565af076598f9e7451712700b673de8f502f0334f281387d"}, - {file = "pydantic_core-2.27.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:1a4207639fb02ec2dbb76227d7c751a20b1a6b4bc52850568e52260cae64ca3b"}, - {file = "pydantic_core-2.27.2-cp311-cp311-musllinux_1_1_armv7l.whl", hash = "sha256:3de3ce3c9ddc8bbd88f6e0e304dea0e66d843ec9de1b0042b0911c1663ffd474"}, - {file = "pydantic_core-2.27.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:30c5f68ded0c36466acede341551106821043e9afaad516adfb6e8fa80a4e6a6"}, - {file = "pydantic_core-2.27.2-cp311-cp311-win32.whl", hash = "sha256:c70c26d2c99f78b125a3459f8afe1aed4d9687c24fd677c6a4436bc042e50d6c"}, - {file = "pydantic_core-2.27.2-cp311-cp311-win_amd64.whl", hash = "sha256:08e125dbdc505fa69ca7d9c499639ab6407cfa909214d500897d02afb816e7cc"}, - {file = "pydantic_core-2.27.2-cp311-cp311-win_arm64.whl", hash = "sha256:26f0d68d4b235a2bae0c3fc585c585b4ecc51382db0e3ba402a22cbc440915e4"}, - {file = "pydantic_core-2.27.2-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:9e0c8cfefa0ef83b4da9588448b6d8d2a2bf1a53c3f1ae5fca39eb3061e2f0b0"}, - {file = "pydantic_core-2.27.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:83097677b8e3bd7eaa6775720ec8e0405f1575015a463285a92bfdfe254529ef"}, - {file = "pydantic_core-2.27.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:172fce187655fece0c90d90a678424b013f8fbb0ca8b036ac266749c09438cb7"}, - {file = "pydantic_core-2.27.2-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:519f29f5213271eeeeb3093f662ba2fd512b91c5f188f3bb7b27bc5973816934"}, - {file = "pydantic_core-2.27.2-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:05e3a55d124407fffba0dd6b0c0cd056d10e983ceb4e5dbd10dda135c31071d6"}, - {file = "pydantic_core-2.27.2-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9c3ed807c7b91de05e63930188f19e921d1fe90de6b4f5cd43ee7fcc3525cb8c"}, - {file = "pydantic_core-2.27.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6fb4aadc0b9a0c063206846d603b92030eb6f03069151a625667f982887153e2"}, - {file = "pydantic_core-2.27.2-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:28ccb213807e037460326424ceb8b5245acb88f32f3d2777427476e1b32c48c4"}, - {file = "pydantic_core-2.27.2-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:de3cd1899e2c279b140adde9357c4495ed9d47131b4a4eaff9052f23398076b3"}, - {file = "pydantic_core-2.27.2-cp312-cp312-musllinux_1_1_armv7l.whl", hash = "sha256:220f892729375e2d736b97d0e51466252ad84c51857d4d15f5e9692f9ef12be4"}, - {file = "pydantic_core-2.27.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:a0fcd29cd6b4e74fe8ddd2c90330fd8edf2e30cb52acda47f06dd615ae72da57"}, - {file = "pydantic_core-2.27.2-cp312-cp312-win32.whl", hash = "sha256:1e2cb691ed9834cd6a8be61228471d0a503731abfb42f82458ff27be7b2186fc"}, - {file = "pydantic_core-2.27.2-cp312-cp312-win_amd64.whl", hash = "sha256:cc3f1a99a4f4f9dd1de4fe0312c114e740b5ddead65bb4102884b384c15d8bc9"}, - {file = "pydantic_core-2.27.2-cp312-cp312-win_arm64.whl", hash = "sha256:3911ac9284cd8a1792d3cb26a2da18f3ca26c6908cc434a18f730dc0db7bfa3b"}, - {file = "pydantic_core-2.27.2-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:7d14bd329640e63852364c306f4d23eb744e0f8193148d4044dd3dacdaacbd8b"}, - {file = "pydantic_core-2.27.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:82f91663004eb8ed30ff478d77c4d1179b3563df6cdb15c0817cd1cdaf34d154"}, - {file = "pydantic_core-2.27.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:71b24c7d61131bb83df10cc7e687433609963a944ccf45190cfc21e0887b08c9"}, - {file = "pydantic_core-2.27.2-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:fa8e459d4954f608fa26116118bb67f56b93b209c39b008277ace29937453dc9"}, - {file = "pydantic_core-2.27.2-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ce8918cbebc8da707ba805b7fd0b382816858728ae7fe19a942080c24e5b7cd1"}, - {file = "pydantic_core-2.27.2-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:eda3f5c2a021bbc5d976107bb302e0131351c2ba54343f8a496dc8783d3d3a6a"}, - {file = "pydantic_core-2.27.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bd8086fa684c4775c27f03f062cbb9eaa6e17f064307e86b21b9e0abc9c0f02e"}, - {file = "pydantic_core-2.27.2-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:8d9b3388db186ba0c099a6d20f0604a44eabdeef1777ddd94786cdae158729e4"}, - {file = "pydantic_core-2.27.2-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:7a66efda2387de898c8f38c0cf7f14fca0b51a8ef0b24bfea5849f1b3c95af27"}, - {file = "pydantic_core-2.27.2-cp313-cp313-musllinux_1_1_armv7l.whl", hash = "sha256:18a101c168e4e092ab40dbc2503bdc0f62010e95d292b27827871dc85450d7ee"}, - {file = "pydantic_core-2.27.2-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:ba5dd002f88b78a4215ed2f8ddbdf85e8513382820ba15ad5ad8955ce0ca19a1"}, - {file = "pydantic_core-2.27.2-cp313-cp313-win32.whl", hash = "sha256:1ebaf1d0481914d004a573394f4be3a7616334be70261007e47c2a6fe7e50130"}, - {file = "pydantic_core-2.27.2-cp313-cp313-win_amd64.whl", hash = "sha256:953101387ecf2f5652883208769a79e48db18c6df442568a0b5ccd8c2723abee"}, - {file = "pydantic_core-2.27.2-cp313-cp313-win_arm64.whl", hash = "sha256:ac4dbfd1691affb8f48c2c13241a2e3b60ff23247cbcf981759c768b6633cf8b"}, - {file = "pydantic_core-2.27.2-cp38-cp38-macosx_10_12_x86_64.whl", hash = "sha256:d3e8d504bdd3f10835468f29008d72fc8359d95c9c415ce6e767203db6127506"}, - {file = "pydantic_core-2.27.2-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:521eb9b7f036c9b6187f0b47318ab0d7ca14bd87f776240b90b21c1f4f149320"}, - {file = "pydantic_core-2.27.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:85210c4d99a0114f5a9481b44560d7d1e35e32cc5634c656bc48e590b669b145"}, - {file = "pydantic_core-2.27.2-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:d716e2e30c6f140d7560ef1538953a5cd1a87264c737643d481f2779fc247fe1"}, - {file = "pydantic_core-2.27.2-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f66d89ba397d92f840f8654756196d93804278457b5fbede59598a1f9f90b228"}, - {file = "pydantic_core-2.27.2-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:669e193c1c576a58f132e3158f9dfa9662969edb1a250c54d8fa52590045f046"}, - {file = "pydantic_core-2.27.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9fdbe7629b996647b99c01b37f11170a57ae675375b14b8c13b8518b8320ced5"}, - {file = "pydantic_core-2.27.2-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:d262606bf386a5ba0b0af3b97f37c83d7011439e3dc1a9298f21efb292e42f1a"}, - {file = "pydantic_core-2.27.2-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:cabb9bcb7e0d97f74df8646f34fc76fbf793b7f6dc2438517d7a9e50eee4f14d"}, - {file = "pydantic_core-2.27.2-cp38-cp38-musllinux_1_1_armv7l.whl", hash = "sha256:d2d63f1215638d28221f664596b1ccb3944f6e25dd18cd3b86b0a4c408d5ebb9"}, - {file = "pydantic_core-2.27.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:bca101c00bff0adb45a833f8451b9105d9df18accb8743b08107d7ada14bd7da"}, - {file = "pydantic_core-2.27.2-cp38-cp38-win32.whl", hash = "sha256:f6f8e111843bbb0dee4cb6594cdc73e79b3329b526037ec242a3e49012495b3b"}, - {file = "pydantic_core-2.27.2-cp38-cp38-win_amd64.whl", hash = "sha256:fd1aea04935a508f62e0d0ef1f5ae968774a32afc306fb8545e06f5ff5cdf3ad"}, - {file = "pydantic_core-2.27.2-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:c10eb4f1659290b523af58fa7cffb452a61ad6ae5613404519aee4bfbf1df993"}, - {file = "pydantic_core-2.27.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:ef592d4bad47296fb11f96cd7dc898b92e795032b4894dfb4076cfccd43a9308"}, - {file = "pydantic_core-2.27.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c61709a844acc6bf0b7dce7daae75195a10aac96a596ea1b776996414791ede4"}, - {file = "pydantic_core-2.27.2-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:42c5f762659e47fdb7b16956c71598292f60a03aa92f8b6351504359dbdba6cf"}, - {file = "pydantic_core-2.27.2-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4c9775e339e42e79ec99c441d9730fccf07414af63eac2f0e48e08fd38a64d76"}, - {file = "pydantic_core-2.27.2-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:57762139821c31847cfb2df63c12f725788bd9f04bc2fb392790959b8f70f118"}, - {file = "pydantic_core-2.27.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0d1e85068e818c73e048fe28cfc769040bb1f475524f4745a5dc621f75ac7630"}, - {file = "pydantic_core-2.27.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:097830ed52fd9e427942ff3b9bc17fab52913b2f50f2880dc4a5611446606a54"}, - {file = "pydantic_core-2.27.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:044a50963a614ecfae59bb1eaf7ea7efc4bc62f49ed594e18fa1e5d953c40e9f"}, - {file = "pydantic_core-2.27.2-cp39-cp39-musllinux_1_1_armv7l.whl", hash = "sha256:4e0b4220ba5b40d727c7f879eac379b822eee5d8fff418e9d3381ee45b3b0362"}, - {file = "pydantic_core-2.27.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:5e4f4bb20d75e9325cc9696c6802657b58bc1dbbe3022f32cc2b2b632c3fbb96"}, - {file = "pydantic_core-2.27.2-cp39-cp39-win32.whl", hash = "sha256:cca63613e90d001b9f2f9a9ceb276c308bfa2a43fafb75c8031c4f66039e8c6e"}, - {file = "pydantic_core-2.27.2-cp39-cp39-win_amd64.whl", hash = "sha256:77d1bca19b0f7021b3a982e6f903dcd5b2b06076def36a652e3907f596e29f67"}, - {file = "pydantic_core-2.27.2-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:2bf14caea37e91198329b828eae1618c068dfb8ef17bb33287a7ad4b61ac314e"}, - {file = "pydantic_core-2.27.2-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:b0cb791f5b45307caae8810c2023a184c74605ec3bcbb67d13846c28ff731ff8"}, - {file = "pydantic_core-2.27.2-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:688d3fd9fcb71f41c4c015c023d12a79d1c4c0732ec9eb35d96e3388a120dcf3"}, - {file = "pydantic_core-2.27.2-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3d591580c34f4d731592f0e9fe40f9cc1b430d297eecc70b962e93c5c668f15f"}, - {file = "pydantic_core-2.27.2-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:82f986faf4e644ffc189a7f1aafc86e46ef70372bb153e7001e8afccc6e54133"}, - {file = "pydantic_core-2.27.2-pp310-pypy310_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:bec317a27290e2537f922639cafd54990551725fc844249e64c523301d0822fc"}, - {file = "pydantic_core-2.27.2-pp310-pypy310_pp73-musllinux_1_1_armv7l.whl", hash = "sha256:0296abcb83a797db256b773f45773da397da75a08f5fcaef41f2044adec05f50"}, - {file = "pydantic_core-2.27.2-pp310-pypy310_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:0d75070718e369e452075a6017fbf187f788e17ed67a3abd47fa934d001863d9"}, - {file = "pydantic_core-2.27.2-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:7e17b560be3c98a8e3aa66ce828bdebb9e9ac6ad5466fba92eb74c4c95cb1151"}, - {file = "pydantic_core-2.27.2-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:c33939a82924da9ed65dab5a65d427205a73181d8098e79b6b426bdf8ad4e656"}, - {file = "pydantic_core-2.27.2-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:00bad2484fa6bda1e216e7345a798bd37c68fb2d97558edd584942aa41b7d278"}, - {file = "pydantic_core-2.27.2-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c817e2b40aba42bac6f457498dacabc568c3b7a986fc9ba7c8d9d260b71485fb"}, - {file = "pydantic_core-2.27.2-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:251136cdad0cb722e93732cb45ca5299fb56e1344a833640bf93b2803f8d1bfd"}, - {file = "pydantic_core-2.27.2-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:d2088237af596f0a524d3afc39ab3b036e8adb054ee57cbb1dcf8e09da5b29cc"}, - {file = "pydantic_core-2.27.2-pp39-pypy39_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:d4041c0b966a84b4ae7a09832eb691a35aec90910cd2dbe7a208de59be77965b"}, - {file = "pydantic_core-2.27.2-pp39-pypy39_pp73-musllinux_1_1_armv7l.whl", hash = "sha256:8083d4e875ebe0b864ffef72a4304827015cff328a1be6e22cc850753bfb122b"}, - {file = "pydantic_core-2.27.2-pp39-pypy39_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:f141ee28a0ad2123b6611b6ceff018039df17f32ada8b534e6aa039545a3efb2"}, - {file = "pydantic_core-2.27.2-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:7d0c8399fcc1848491f00e0314bd59fb34a9c008761bcb422a057670c3f65e35"}, - {file = "pydantic_core-2.27.2.tar.gz", hash = "sha256:eb026e5a4c1fee05726072337ff51d1efb6f59090b7da90d30ea58625b1ffb39"}, + {file = "pydantic_core-2.46.4-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:a396dcc17e5a0b164dbe026896245a4fa9ff402edca1dff0be3d53a517f74de4"}, + {file = "pydantic_core-2.46.4-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:da4b951fe36dc7c3a1ccb4e3cd1747c3542b8c9ceede8fc86cae054e764485f5"}, + {file = "pydantic_core-2.46.4-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bb63e0198ca18aad131c089b9204c23079c3afa95487e561f4c522d519e55aba"}, + {file = "pydantic_core-2.46.4-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:f47286a97f0bc9b8859519809077b91b2cefe4ae47fcbf5e466a009c1c5d742b"}, + {file = "pydantic_core-2.46.4-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:905a0ed8ea6f2d61c1738835f99b699348d7857379083e5fc497fa0c967a407c"}, + {file = "pydantic_core-2.46.4-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ea793e075b70290d89d8142074262885d3f7da19634845135751bd6344f73b50"}, + {file = "pydantic_core-2.46.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:395aebd9183f9d112f569aeb5b2214d1a10a33bec8456447f7fbdfa51d38d4cd"}, + {file = "pydantic_core-2.46.4-cp310-cp310-manylinux_2_31_riscv64.whl", hash = "sha256:b078afbc25f3a1436c7a1d2cd3e322497ee99615ba97c563566fdf46aff1ee01"}, + {file = "pydantic_core-2.46.4-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:f747929cf940cddb5b3668a390056ddd5ba2e5010615ea2dcf4f9c4f3ab8791d"}, + {file = "pydantic_core-2.46.4-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:daa27d92c36f24388fe3ad306b174781c747627f134452e4f128ea00ce1fe8c4"}, + {file = "pydantic_core-2.46.4-cp310-cp310-musllinux_1_1_armv7l.whl", hash = "sha256:19e51f073cd3df251856a8a4189fbdf1de4012c3ebacfb1884f94f1eb406079f"}, + {file = "pydantic_core-2.46.4-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:c1747f85cee84c26985853c6f3d9bd3e75da5212912443fa111c113b9c246f39"}, + {file = "pydantic_core-2.46.4-cp310-cp310-win32.whl", hash = "sha256:2f84c03c8607173d16b5a854ec68a2f9079ae03237a54fb506d13af47e1d018d"}, + {file = "pydantic_core-2.46.4-cp310-cp310-win_amd64.whl", hash = "sha256:8358a950c8909158e3df31538a7e4edc2d7265a7c54b47f0864d9e5bae9dcebf"}, + {file = "pydantic_core-2.46.4-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:0e96592440881c74a213e5ad528e2b24d3d4f940de2766bed9010ab1d9e51594"}, + {file = "pydantic_core-2.46.4-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:e0d65b8c354be7fb5f720c3caa8bc940bc2d20ce749c8e06135f07f8ed95dd7c"}, + {file = "pydantic_core-2.46.4-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7bfb192b3f4b9e8a89b6277b6ce787564f62cfd272055f6e685726b111dc7826"}, + {file = "pydantic_core-2.46.4-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:9037063db01f09b09e237c282b6792bd4da634b5402c4e7f0c61effed7701a04"}, + {file = "pydantic_core-2.46.4-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:fc010ab034c8c7452522748bf937df58020d256ccae0874463d1f4d01758af8e"}, + {file = "pydantic_core-2.46.4-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8c5dac79fa1614d1e06ca695109c6105923bd9c7d1d6c918d4e637b7e6b32fd3"}, + {file = "pydantic_core-2.46.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f9fa868638bf362d3d138ea55829cefb3d5f4b0d7f142234382a15e2485dbec4"}, + {file = "pydantic_core-2.46.4-cp311-cp311-manylinux_2_31_riscv64.whl", hash = "sha256:17299feefe090f2caa5b8e37222bb5f663e4935a8bfa6931d4102e5df1a9f398"}, + {file = "pydantic_core-2.46.4-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:4c63ebc82684aa89d9a3bcbd13d515b3be44250dc68dd3bd81526c1cb31286c3"}, + {file = "pydantic_core-2.46.4-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:aaa2a54443eff1950ba5ddc6b6ccda0d9c84a364276a62f969bdf2a390650848"}, + {file = "pydantic_core-2.46.4-cp311-cp311-musllinux_1_1_armv7l.whl", hash = "sha256:18e5ceec2ab67e6d5f1a9085e5a24c9c4e2ac4545730bfe668680bca05e555f3"}, + {file = "pydantic_core-2.46.4-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:a0f62d0a58f4e7da165457e995725421e0064f2255d8eccebc49f41bbc23b109"}, + {file = "pydantic_core-2.46.4-cp311-cp311-win32.whl", hash = "sha256:041bde0a48fd37cf71cab1c9d56d3e8625a3793fef1f7dd232b3ff37e978ecda"}, + {file = "pydantic_core-2.46.4-cp311-cp311-win_amd64.whl", hash = "sha256:6f2eeda33a839975441c86a4119e1383c50b47faf0cbb5176985565c6bb02c33"}, + {file = "pydantic_core-2.46.4-cp311-cp311-win_arm64.whl", hash = "sha256:14f4c5d6db102bd796a627bbb3a17b4cf4574b9ae861d8b7c9a9661c6dd3362d"}, + {file = "pydantic_core-2.46.4-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:3245406455a5d98187ec35530fd772b1d799b26667980872c8d4614991e2c4a2"}, + {file = "pydantic_core-2.46.4-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:962ccbab7b642487b1d8b7df90ef677e03134cf1fd8880bf698649b22a69371f"}, + {file = "pydantic_core-2.46.4-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8233f2947cf85404441fd7e0085f53b10c93e0ee78611099b5c7237e36aacbf7"}, + {file = "pydantic_core-2.46.4-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:3a233125ac121aa3ffba9a2b59edfc4a985a76092dc8279586ab4b71390875e7"}, + {file = "pydantic_core-2.46.4-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5b712b53160b79a5850310b912a5ef8e57e56947c8ad690c227f5c9d7e561712"}, + {file = "pydantic_core-2.46.4-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9401557acd873c3a7f3eb9383edef8ac4968f9510e340f4808d427e75667e7b4"}, + {file = "pydantic_core-2.46.4-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:926c9541b14b12b1681dca8a0b75feb510b06c6341b70a8e500c2fdcff837cce"}, + {file = "pydantic_core-2.46.4-cp312-cp312-manylinux_2_31_riscv64.whl", hash = "sha256:56cb4851bcaf3d117eddcef4fe66afd750a50274b0da8e22be256d10e5611987"}, + {file = "pydantic_core-2.46.4-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:c68fcd102d71ea85c5b2dfac3f4f8476eff42a9e078fd5faefff6d145063536b"}, + {file = "pydantic_core-2.46.4-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:b2f69dec1725e79a012d920df1707de5caf7ed5e08f3be4435e25803efc47458"}, + {file = "pydantic_core-2.46.4-cp312-cp312-musllinux_1_1_armv7l.whl", hash = "sha256:8d0820e8192167f80d88d64038e609c31452eeca865b4e1d9950a27a4609b00b"}, + {file = "pydantic_core-2.46.4-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:fbdb89b3e1c94a30cc5edfce477c6e6a5dc4d8f84665b455c27582f211a1c72c"}, + {file = "pydantic_core-2.46.4-cp312-cp312-win32.whl", hash = "sha256:9aa768456404a8bf48a4406685ac2bec8e72b62c69313734fa3b73cf33b3a894"}, + {file = "pydantic_core-2.46.4-cp312-cp312-win_amd64.whl", hash = "sha256:e9c26f834c65f5752f3f06cb08cb86a913ceb7274d0db6e267808a708b46bc89"}, + {file = "pydantic_core-2.46.4-cp312-cp312-win_arm64.whl", hash = "sha256:4fc73cb559bdb54b1134a706a2802a4cddd27a0633f5abb7e53056268751ac6a"}, + {file = "pydantic_core-2.46.4-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:5d5902252db0d3cedf8d4a1bc68f70eeb430f7e4c7104c8c476753519b423008"}, + {file = "pydantic_core-2.46.4-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:c94f0688e7b8d0a67abf40e57a7eaaecd17cc9586706a31b76c031f63df052b4"}, + {file = "pydantic_core-2.46.4-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f027324c56cd5406ca49c124b0db10e56c69064fec039acc571c29020cc87c76"}, + {file = "pydantic_core-2.46.4-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:e739fee756ba1010f8bcccb534252e85a35fe45ae92c295a06059ce58b74ccd3"}, + {file = "pydantic_core-2.46.4-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9d56801be94b86a9da183e5f3766e6310752b99ff647e38b09a9500d88e46e76"}, + {file = "pydantic_core-2.46.4-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2412e734dcb48da14d4e4006b82b46b74f2518b8a26ee7e58c6844a6cd6d03c4"}, + {file = "pydantic_core-2.46.4-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9551187363ffc0de2a00b2e47c25aeaeb1020b69b668762966df15fc5659dd5a"}, + {file = "pydantic_core-2.46.4-cp313-cp313-manylinux_2_31_riscv64.whl", hash = "sha256:0186750b482eefa11d7f435892b09c5c606193ef3375bcf94aa00ae6bfb66262"}, + {file = "pydantic_core-2.46.4-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:5855698a4856556d86e8e6cd8434bc3ac0314ee8e12089ae0e143f64c6256e4e"}, + {file = "pydantic_core-2.46.4-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:cbaf13819775b7f769bf4a1f066cb6df7a28d4480081a589828ef190226881cd"}, + {file = "pydantic_core-2.46.4-cp313-cp313-musllinux_1_1_armv7l.whl", hash = "sha256:633147d34cf4550417f12e2b1a0383973bdf5cdfde212cb09e9a581cf10820be"}, + {file = "pydantic_core-2.46.4-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:82cf5301172168103724d49a1444d3378cb20cdee30b116a1bd6031236298a5d"}, + {file = "pydantic_core-2.46.4-cp313-cp313-win32.whl", hash = "sha256:9fa8ae11da9e2b3126c6426f147e0fba88d96d65921799bb30c6abd1cb2c97fb"}, + {file = "pydantic_core-2.46.4-cp313-cp313-win_amd64.whl", hash = "sha256:6b3ace8194b0e5204818c92802dcdca7fc6d88aabbb799d7c795540d9cd6d292"}, + {file = "pydantic_core-2.46.4-cp313-cp313-win_arm64.whl", hash = "sha256:184c081504d17f1c1066e430e117142b2c77d9448a97f7b65c6ac9fd9aee238d"}, + {file = "pydantic_core-2.46.4-cp314-cp314-macosx_10_12_x86_64.whl", hash = "sha256:428e04521a40150c85216fc8b85e8d39fece235a9cf5e383761238c7fa9b96fb"}, + {file = "pydantic_core-2.46.4-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:23ace664830ee0bfe014a0c7bc248b1f7f25ed7ad103852c317624a1083af462"}, + {file = "pydantic_core-2.46.4-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ce5c1d2a8b27468f433ca974829c44060b8097eedc39933e3c206a90ee49c4a9"}, + {file = "pydantic_core-2.46.4-cp314-cp314-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:7283d57845ecf5a163403eb0702dfc220cc4fbdd18919cb5ccea4f95ee1cdab4"}, + {file = "pydantic_core-2.46.4-cp314-cp314-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8daafc69c93ee8a0204506a3b6b30f586ef54028f52aeeeb5c4cfc5184fd5914"}, + {file = "pydantic_core-2.46.4-cp314-cp314-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:cd2213145bcc2ba85884d0ac63d222fece9209678f77b9b4d76f054c561adb28"}, + {file = "pydantic_core-2.46.4-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7a5f930472650a82629163023e630d160863fce524c616f4e5186e5de9d9a49b"}, + {file = "pydantic_core-2.46.4-cp314-cp314-manylinux_2_31_riscv64.whl", hash = "sha256:c1b3f518abeca3aa13c712fd202306e145abf59a18b094a6bafb2d2bbf59192c"}, + {file = "pydantic_core-2.46.4-cp314-cp314-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:1a7dd0b3ee80d90150e3495a3a13ac34dbcbfd4f012996a6a1d8900e91b5c0fb"}, + {file = "pydantic_core-2.46.4-cp314-cp314-musllinux_1_1_aarch64.whl", hash = "sha256:3fb702cd90b0446a3a1c5e470bfa0dd23c0233b676a9099ddcc964fa6ca13898"}, + {file = "pydantic_core-2.46.4-cp314-cp314-musllinux_1_1_armv7l.whl", hash = "sha256:b8458003118a712e66286df6a707db01c52c0f52f7db8e4a38f0da1d3b94fc4e"}, + {file = "pydantic_core-2.46.4-cp314-cp314-musllinux_1_1_x86_64.whl", hash = "sha256:372429a130e469c9cd698925ce5fc50940b7a1336b0d82038e63d5bbc4edc519"}, + {file = "pydantic_core-2.46.4-cp314-cp314-win32.whl", hash = "sha256:85bb3611ff1802f3ee7fdd7dbff26b56f343fb432d57a4728fdd49b6ef35e2f4"}, + {file = "pydantic_core-2.46.4-cp314-cp314-win_amd64.whl", hash = "sha256:811ff8e9c313ab425368bcbb36e5c4ebd7108c2bbf4e4089cfbb0b01eff63fac"}, + {file = "pydantic_core-2.46.4-cp314-cp314-win_arm64.whl", hash = "sha256:bfec22eab3c8cc2ceec0248aec886624116dc079afa027ecc8ad4a7e62010f8a"}, + {file = "pydantic_core-2.46.4-cp314-cp314t-macosx_10_12_x86_64.whl", hash = "sha256:af8244b2bef6aaad6d92cda81372de7f8c8d36c9f0c3ea36e827c60e7d9467a0"}, + {file = "pydantic_core-2.46.4-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:5a4330cdbc57162e4b3aa303f588ba752257694c9c9be3e7ebb11b4aca659b5d"}, + {file = "pydantic_core-2.46.4-cp314-cp314t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:29c61fc04a3d840155ff08e475a04809278972fe6aef51e2720554e96367e34b"}, + {file = "pydantic_core-2.46.4-cp314-cp314t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:c50f2528cf200c5eed56faf3f4e22fcd5f38c157a8b78576e6ba3168ec35f000"}, + {file = "pydantic_core-2.46.4-cp314-cp314t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:0cbe8b01f948de4286c74cdd6c667aceb38f5c1e26f0693b3983d9d74887c65e"}, + {file = "pydantic_core-2.46.4-cp314-cp314t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:617d7e2ca7dcb8c5cf6bcb8c59b8832c94b36196bbf1cbd1bfb56ed341905edd"}, + {file = "pydantic_core-2.46.4-cp314-cp314t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7027560ee92211647d0d34e3f7cd6f50da56399d26a9c8ad0da286d3869a53f3"}, + {file = "pydantic_core-2.46.4-cp314-cp314t-manylinux_2_31_riscv64.whl", hash = "sha256:f99626688942fb746e545232e7726926f3be91b5975f8b55327665fafda991c7"}, + {file = "pydantic_core-2.46.4-cp314-cp314t-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:fc3e9034a63de20e15e8ade85358bc6efc614008cab72898b4b4952bea0509ff"}, + {file = "pydantic_core-2.46.4-cp314-cp314t-musllinux_1_1_aarch64.whl", hash = "sha256:97e7cf2be5c77b7d1a9713a05605d49460d02c6078d38d8bef3cbe323c548424"}, + {file = "pydantic_core-2.46.4-cp314-cp314t-musllinux_1_1_armv7l.whl", hash = "sha256:3bf92c5d0e00fefaab325a4d27828fe6b6e2a21848686b5b60d2d9eeb09d76c6"}, + {file = "pydantic_core-2.46.4-cp314-cp314t-musllinux_1_1_x86_64.whl", hash = "sha256:3ecbc122d18468d06ca279dc26a8c2e2d5acb10943bb35e36ae92096dc3b5565"}, + {file = "pydantic_core-2.46.4-cp314-cp314t-win32.whl", hash = "sha256:e846ae7835bf0703ae43f534ab79a867146dadd59dc9ca5c8b53d5c8f7c9ef02"}, + {file = "pydantic_core-2.46.4-cp314-cp314t-win_amd64.whl", hash = "sha256:2108ba5c1c1eca18030634489dc544844144ee36357f2f9f780b93e7ddbb44b5"}, + {file = "pydantic_core-2.46.4-cp314-cp314t-win_arm64.whl", hash = "sha256:4fcbe087dbc2068af7eda3aa87634eba216dbda64d1ae73c8684b621d33f6596"}, + {file = "pydantic_core-2.46.4-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:fd8b3d9fd264be37976686c7f65cd52a83f5e84f4bfd2adf9c1d469676bbb6ae"}, + {file = "pydantic_core-2.46.4-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:9f444c499b3eefd3a92e348059471ea0c3a6e303d9c1cec09fa748fd9f895201"}, + {file = "pydantic_core-2.46.4-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3447661d99f75a3683a4cf5c87da72f2161964611864dbbeac7fbb118bb4bfc0"}, + {file = "pydantic_core-2.46.4-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:8b9bab013d1c7a79d3501ff86d0bc9c31bf587db4551677b96bec07df78c6b15"}, + {file = "pydantic_core-2.46.4-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d995260fdf4e1db774581b4900e0f832abe3c7c84996726bbc161b19c8f29e76"}, + {file = "pydantic_core-2.46.4-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f13a646d65d09fbf1bc6b3a9635d30095c8e7e5cc419ff35ecc563c5fd04cd49"}, + {file = "pydantic_core-2.46.4-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:432c179df7874eeb73307aad2df0755e1ae0efa61ff0ea89b93e194411ae3928"}, + {file = "pydantic_core-2.46.4-cp39-cp39-manylinux_2_31_riscv64.whl", hash = "sha256:e68b7a074f65a2fd746c52a7ce6142ab7006074ac269ace0c25cd8ba171f8066"}, + {file = "pydantic_core-2.46.4-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:4a05d69cba51d852c5c3e92758653245a50c0b646ced0cf05bd793ed592839d6"}, + {file = "pydantic_core-2.46.4-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:228ee9bae8bef5b1e97ec58302f80357c37199e0d0a99174e138d28e6957b9d9"}, + {file = "pydantic_core-2.46.4-cp39-cp39-musllinux_1_1_armv7l.whl", hash = "sha256:10e17cbb10a330363733efc4d7c4d0dd827ac0909b8f6a6542298fed1ea62f29"}, + {file = "pydantic_core-2.46.4-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:91a06d2e259ecfbd8c901d70c3c507900458498142b3026a296b7de4d1322cc9"}, + {file = "pydantic_core-2.46.4-cp39-cp39-win32.whl", hash = "sha256:d80ee3d731373b24cebbc10d689ca4ee1875caf0d5703a245db18efd4dd37fc1"}, + {file = "pydantic_core-2.46.4-cp39-cp39-win_amd64.whl", hash = "sha256:3be77f45df024d789a672ae34f8b06fb346c4f9f46ea714956660ea4862e89ac"}, + {file = "pydantic_core-2.46.4-graalpy311-graalpy242_311_native-macosx_10_12_x86_64.whl", hash = "sha256:14d4edf427bdcf950a8a02d7cb44a08614388dd6e1bdcbf4f67504fa7887da9c"}, + {file = "pydantic_core-2.46.4-graalpy311-graalpy242_311_native-macosx_11_0_arm64.whl", hash = "sha256:0ce40cd7b21210e99342afafbd4d0f76d784eb5b1d60f3bdc566be4983c6c73b"}, + {file = "pydantic_core-2.46.4-graalpy311-graalpy242_311_native-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:90884113d8b48f760e9587002789ddd741e76ab9f89518cd1e43b1f1a52ec44b"}, + {file = "pydantic_core-2.46.4-graalpy311-graalpy242_311_native-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:66ce7632c22d837c95301830e111ad0128a32b8207533b60896a96c4915192ea"}, + {file = "pydantic_core-2.46.4-graalpy312-graalpy250_312_native-macosx_10_12_x86_64.whl", hash = "sha256:1d8ba486450b14f3b1d63bc521d410ec7565e52f887b9fb671791886436a42f7"}, + {file = "pydantic_core-2.46.4-graalpy312-graalpy250_312_native-macosx_11_0_arm64.whl", hash = "sha256:3009f12e4e90b7f88b4f9adb1b0c4a3d58fe7820f3238c190047209d148026df"}, + {file = "pydantic_core-2.46.4-graalpy312-graalpy250_312_native-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ad785e92e6dc634c21555edc8bd6b64957ab844541bcb96a1366c202951ae526"}, + {file = "pydantic_core-2.46.4-graalpy312-graalpy250_312_native-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:00c603d540afdd6b80eb39f078f33ebd46211f02f33e34a32d9f053bba711de0"}, + {file = "pydantic_core-2.46.4-pp311-pypy311_pp73-macosx_10_12_x86_64.whl", hash = "sha256:0c563b08bca408dc7f65f700633d8442fffb2421fc47b8101377e9fd65051ff0"}, + {file = "pydantic_core-2.46.4-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:db06ffe51636ffe9ca531fe9023dd64bdd794be8754cb5df57c5498ae5b518a7"}, + {file = "pydantic_core-2.46.4-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:133878133d271ade3d41d1bfb2a45ec38dbdbda40bc065921c6b04e4630127e2"}, + {file = "pydantic_core-2.46.4-pp311-pypy311_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:9bc519fbf2b7578398853d815009ae5e4d4603d12f4e3f91da8c06852d3da3e9"}, + {file = "pydantic_core-2.46.4-pp311-pypy311_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:c7a7bd4e39e8e4c12c39cd480356842b6a8a06e41b23a55a5e3e191718838ddf"}, + {file = "pydantic_core-2.46.4-pp311-pypy311_pp73-musllinux_1_1_armv7l.whl", hash = "sha256:d396ec2b979760aaf3218e76c24e65bd0aca24983298653b3a9d7a45f9e47b30"}, + {file = "pydantic_core-2.46.4-pp311-pypy311_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:86e1a4418c6cd97d60c95c71164158eaf7324fae7b0923264016baa993eba6fc"}, + {file = "pydantic_core-2.46.4-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:d51026d73fcfd93610abc7b27789c26b313920fcfb20e27462d74a7f8b06e983"}, + {file = "pydantic_core-2.46.4.tar.gz", hash = "sha256:62f875393d7f270851f20523dd2e29f082bcc82292d66db2b64ea71f64b6e1c1"}, ] [package.dependencies] -typing-extensions = ">=4.6.0,<4.7.0 || >4.7.0" +typing-extensions = ">=4.14.1" + +[[package]] +name = "pygments" +version = "2.20.0" +description = "Pygments is a syntax highlighting package written in Python." +optional = false +python-versions = ">=3.9" +files = [ + {file = "pygments-2.20.0-py3-none-any.whl", hash = "sha256:81a9e26dd42fd28a23a2d169d86d7ac03b46e2f8b59ed4698fb4785f946d0176"}, + {file = "pygments-2.20.0.tar.gz", hash = "sha256:6757cd03768053ff99f3039c1a36d6c0aa0b263438fcab17520b30a303a82b5f"}, +] + +[package.extras] +windows-terminal = ["colorama (>=0.4.6)"] [[package]] name = "pytest" -version = "7.4.4" +version = "8.4.2" description = "pytest: simple powerful testing with Python" optional = false -python-versions = ">=3.7" +python-versions = ">=3.9" files = [ - {file = "pytest-7.4.4-py3-none-any.whl", hash = "sha256:b090cdf5ed60bf4c45261be03239c2c1c22df034fbffe691abe93cd80cea01d8"}, - {file = "pytest-7.4.4.tar.gz", hash = "sha256:2cf0005922c6ace4a3e2ec8b4080eb0d9753fdc93107415332f50ce9e7994280"}, + {file = "pytest-8.4.2-py3-none-any.whl", hash = "sha256:872f880de3fc3a5bdc88a11b39c9710c3497a547cfa9320bc3c5e62fbf272e79"}, + {file = "pytest-8.4.2.tar.gz", hash = "sha256:86c0d0b93306b961d58d62a4db4879f27fe25513d4b969df351abdddb3c30e01"}, ] [package.dependencies] -colorama = {version = "*", markers = "sys_platform == \"win32\""} -exceptiongroup = {version = ">=1.0.0rc8", markers = "python_version < \"3.11\""} -iniconfig = "*" -packaging = "*" -pluggy = ">=0.12,<2.0" -tomli = {version = ">=1.0.0", markers = "python_version < \"3.11\""} +colorama = {version = ">=0.4", markers = "sys_platform == \"win32\""} +exceptiongroup = {version = ">=1", markers = "python_version < \"3.11\""} +iniconfig = ">=1" +packaging = ">=20" +pluggy = ">=1.5,<2" +pygments = ">=2.7.2" +tomli = {version = ">=1", markers = "python_version < \"3.11\""} [package.extras] -testing = ["argcomplete", "attrs (>=19.2.0)", "hypothesis (>=3.56)", "mock", "nose", "pygments (>=2.7.2)", "requests", "setuptools", "xmlschema"] +dev = ["argcomplete", "attrs (>=19.2)", "hypothesis (>=3.56)", "mock", "requests", "setuptools", "xmlschema"] [[package]] name = "pytest-asyncio" -version = "0.23.8" +version = "1.4.0" description = "Pytest support for asyncio" optional = false -python-versions = ">=3.8" +python-versions = ">=3.10" files = [ - {file = "pytest_asyncio-0.23.8-py3-none-any.whl", hash = "sha256:50265d892689a5faefb84df80819d1ecef566eb3549cf915dfb33569359d1ce2"}, - {file = "pytest_asyncio-0.23.8.tar.gz", hash = "sha256:759b10b33a6dc61cce40a8bd5205e302978bbbcc00e279a8b61d9a6a3c82e4d3"}, + {file = "pytest_asyncio-1.4.0-py3-none-any.whl", hash = "sha256:933ca923a23075a87fb7070c0ec272a6848489824d887c85c812670932835aa1"}, + {file = "pytest_asyncio-1.4.0.tar.gz", hash = "sha256:c6c0d2259945122819f171a32ecea2c349ead889ee28176caaf492143424be42"}, ] [package.dependencies] -pytest = ">=7.0.0,<9" +backports-asyncio-runner = {version = ">=1.1,<2", markers = "python_version < \"3.11\""} +pytest = ">=8.4,<10" +typing-extensions = {version = ">=4.12", markers = "python_version < \"3.13\""} [package.extras] -docs = ["sphinx (>=5.3)", "sphinx-rtd-theme (>=1.0)"] +docs = ["sphinx (>=5.3)", "sphinx-rtd-theme (>=1)", "sphinx-tabs (>=3.5)"] testing = ["coverage (>=6.2)", "hypothesis (>=5.7.1)"] +[[package]] +name = "pytest-xdist" +version = "3.8.0" +description = "pytest xdist plugin for distributed testing, most importantly across multiple CPUs" +optional = false +python-versions = ">=3.9" +files = [ + {file = "pytest_xdist-3.8.0-py3-none-any.whl", hash = "sha256:202ca578cfeb7370784a8c33d6d05bc6e13b4f25b5053c30a152269fd10f0b88"}, + {file = "pytest_xdist-3.8.0.tar.gz", hash = "sha256:7e578125ec9bc6050861aa93f2d59f1d8d085595d6551c2c90b6f4fad8d3a9f1"}, +] + +[package.dependencies] +execnet = ">=2.1" +pytest = ">=7.0.0" + +[package.extras] +psutil = ["psutil (>=3.0)"] +setproctitle = ["setproctitle"] +testing = ["filelock"] + [[package]] name = "python-dateutil" version = "2.9.0.post0" @@ -470,17 +547,6 @@ files = [ {file = "six-1.17.0.tar.gz", hash = "sha256:ff70335d468e7eb6ec65b95b99d3a2836546063f63acc5171de367e834932a81"}, ] -[[package]] -name = "sniffio" -version = "1.3.1" -description = "Sniff out which async library your code is running under" -optional = false -python-versions = ">=3.7" -files = [ - {file = "sniffio-1.3.1-py3-none-any.whl", hash = "sha256:2f6da418d1f1e0fddd844478f41680e794e6051915791a034ff65e5f100525a2"}, - {file = "sniffio-1.3.1.tar.gz", hash = "sha256:f4324edc670a0f49750a81b895f35c3adb843cca46f0530f79fc1babb23789dc"}, -] - [[package]] name = "tomli" version = "2.4.1" @@ -539,27 +605,41 @@ files = [ [[package]] name = "types-python-dateutil" -version = "2.9.0.20241206" +version = "2.9.0.20260518" description = "Typing stubs for python-dateutil" optional = false -python-versions = ">=3.8" +python-versions = ">=3.10" files = [ - {file = "types_python_dateutil-2.9.0.20241206-py3-none-any.whl", hash = "sha256:e248a4bc70a486d3e3ec84d0dc30eec3a5f979d6e7ee4123ae043eedbb987f53"}, - {file = "types_python_dateutil-2.9.0.20241206.tar.gz", hash = "sha256:18f493414c26ffba692a72369fea7a154c502646301ebfe3d56a04b3767284cb"}, + {file = "types_python_dateutil-2.9.0.20260518-py3-none-any.whl", hash = "sha256:d6a9c5bd0de61460c8fdef8ab2b400f956a1a1075cce08d4e2b4434e478c50b8"}, + {file = "types_python_dateutil-2.9.0.20260518.tar.gz", hash = "sha256:51f02dc03b61c7f6a07df45797d4dfe8a1aa47f0b7db9ad89f6fd3a1a70e1b51"}, ] [[package]] name = "typing-extensions" -version = "4.13.2" -description = "Backported and Experimental Type Hints for Python 3.8+" +version = "4.16.0" +description = "Backported and Experimental Type Hints for Python 3.9+" optional = false -python-versions = ">=3.8" +python-versions = ">=3.9" files = [ - {file = "typing_extensions-4.13.2-py3-none-any.whl", hash = "sha256:a439e7c04b49fec3e5d3e2beaa21755cadbbdc391694e28ccdd36ca4a1408f8c"}, - {file = "typing_extensions-4.13.2.tar.gz", hash = "sha256:e6c81219bd689f51865d9e372991c540bda33a0379d5573cddb9a3a23f7caaef"}, + {file = "typing_extensions-4.16.0-py3-none-any.whl", hash = "sha256:481caa481374e813c1b176ada14e97f1f67a4539ce9cfeb3f350d78d6370c2e8"}, + {file = "typing_extensions-4.16.0.tar.gz", hash = "sha256:dc983d19a509c94dba722ee6abd33940f7c05a89e243c47e907eb4db6f1a43e5"}, ] +[[package]] +name = "typing-inspection" +version = "0.4.2" +description = "Runtime typing introspection tools" +optional = false +python-versions = ">=3.9" +files = [ + {file = "typing_inspection-0.4.2-py3-none-any.whl", hash = "sha256:4ed1cacbdc298c220f1bd249ed5287caa16f34d44ef4e9c3d0cbad5b521545e7"}, + {file = "typing_inspection-0.4.2.tar.gz", hash = "sha256:ba561c48a67c5958007083d386c3295464928b01faa735ab8547c5692e87f464"}, +] + +[package.dependencies] +typing-extensions = ">=4.12.0" + [metadata] lock-version = "2.0" -python-versions = "^3.8" -content-hash = "8551b871abee465e23fb0966d51f2c155fd257b55bdcb0c02d095de19f92f358" +python-versions = "^3.10" +content-hash = "f0094f12d1388a07b9db738decb335885646d4c09345fddc263a0e5162d84d25" diff --git a/pyproject.toml b/pyproject.toml index fb4dc9ff..968ecbff 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,9 +1,10 @@ [project] name = "MergePythonClient" +dynamic = ["version"] [tool.poetry] name = "MergePythonClient" -version = "3.1.0" +version = "4.0.0" description = "" readme = "README.md" authors = [] @@ -13,11 +14,12 @@ classifiers = [ "Intended Audience :: Developers", "Programming Language :: Python", "Programming Language :: Python :: 3", - "Programming Language :: Python :: 3.8", - "Programming Language :: Python :: 3.9", "Programming Language :: Python :: 3.10", "Programming Language :: Python :: 3.11", "Programming Language :: Python :: 3.12", + "Programming Language :: Python :: 3.13", + "Programming Language :: Python :: 3.14", + "Programming Language :: Python :: 3.15", "Operating System :: OS Independent", "Operating System :: POSIX", "Operating System :: MacOS", @@ -30,11 +32,11 @@ packages = [ { include = "merge", from = "src"} ] -[project.urls] +[tool.poetry.urls] Repository = 'https://github.com/merge-api/merge-python-client' [tool.poetry.dependencies] -python = "^3.8" +python = "^3.10" httpx = ">=0.21.2" pydantic = ">= 1.9.2" pydantic-core = ">=2.18.2" @@ -42,8 +44,9 @@ typing_extensions = ">= 4.0.0" [tool.poetry.group.dev.dependencies] mypy = "==1.13.0" -pytest = "^7.4.0" -pytest-asyncio = "^0.23.5" +pytest = "^8.2.0" +pytest-asyncio = "^1.0.0" +pytest-xdist = "^3.6.1" python-dateutil = "^2.9.0" types-python-dateutil = "^2.9.0.20240316" ruff = "==0.11.5" diff --git a/reference.md b/reference.md index d2dec8ac..3f7127b0 100644 --- a/reference.md +++ b/reference.md @@ -1,6 +1,6 @@ # Reference ## Ats AccountDetails -
client.ats.account_details.retrieve() +
client.ats.account_details.retrieve() -> AccountDetails
@@ -28,11 +28,13 @@ Get details for a linked account. ```python from merge import Merge +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.ats.account_details.retrieve() ``` @@ -62,7 +64,7 @@ client.ats.account_details.retrieve()
## Ats AccountToken -
client.ats.account_token.retrieve(...) +
client.ats.account_token.retrieve(...) -> AccountToken
@@ -90,11 +92,13 @@ Returns the account token for the end user with the provided public token. ```python from merge import Merge +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.ats.account_token.retrieve( public_token="public_token", ) @@ -133,7 +137,7 @@ client.ats.account_token.retrieve(
-
client.ats.account_token.regenerate_create() +
client.ats.account_token.regenerate_create() -> RegenerateAccountToken
@@ -161,11 +165,13 @@ Exchange Linked Account account tokens. ```python from merge import Merge +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.ats.account_token.regenerate_create() ``` @@ -195,7 +201,7 @@ client.ats.account_token.regenerate_create()
## Ats Activities -
client.ats.activities.list(...) +
client.ats.activities.list(...) -> PaginatedActivityList
@@ -222,39 +228,28 @@ Returns a list of `Activity` objects.
```python -import datetime - from merge import Merge -from merge.resources.ats.resources.activities import ( - ActivitiesListRequestRemoteFields, - ActivitiesListRequestShowEnumOrigins, -) +from merge.environment import MergeEnvironment +import datetime client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.ats.activities.list( - created_after=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), - created_before=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), + created_after=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), + created_before=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), cursor="cD0yMDIxLTAxLTA2KzAzJTNBMjQlM0E1My40MzQzMjYlMkIwMCUzQTAw", include_deleted_data=True, include_remote_data=True, include_shell_data=True, - modified_after=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), - modified_before=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), + modified_after=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), + modified_before=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), page_size=1, - remote_fields=ActivitiesListRequestRemoteFields.ACTIVITY_TYPE, + remote_fields="activity_type", remote_id="remote_id", - show_enum_origins=ActivitiesListRequestShowEnumOrigins.ACTIVITY_TYPE, + show_enum_origins="activity_type", user_id="user_id", ) @@ -272,7 +267,7 @@ client.ats.activities.list(
-**created_after:** `typing.Optional[dt.datetime]` — If provided, will only return objects created after this datetime. +**created_after:** `typing.Optional[datetime.datetime]` — If provided, will only return objects created after this datetime.
@@ -280,7 +275,7 @@ client.ats.activities.list(
-**created_before:** `typing.Optional[dt.datetime]` — If provided, will only return objects created before this datetime. +**created_before:** `typing.Optional[datetime.datetime]` — If provided, will only return objects created before this datetime.
@@ -296,11 +291,7 @@ client.ats.activities.list(
-**expand:** `typing.Optional[ - typing.Union[ - typing.Literal["user"], typing.Sequence[typing.Literal["user"]] - ] -]` — Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces. +**expand:** `typing.Optional[typing.Union[typing.Literal, typing.Sequence[typing.Literal]]]` — Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces.
@@ -332,7 +323,7 @@ client.ats.activities.list(
-**modified_after:** `typing.Optional[dt.datetime]` — If provided, only objects synced by Merge after this date time will be returned. +**modified_after:** `typing.Optional[datetime.datetime]` — If provided, only objects synced by Merge after this date time will be returned.
@@ -340,7 +331,7 @@ client.ats.activities.list(
-**modified_before:** `typing.Optional[dt.datetime]` — If provided, only objects synced by Merge before this date time will be returned. +**modified_before:** `typing.Optional[datetime.datetime]` — If provided, only objects synced by Merge before this date time will be returned.
@@ -400,7 +391,7 @@ client.ats.activities.list(
-
client.ats.activities.create(...) +
client.ats.activities.create(...) -> ActivityResponse
@@ -428,12 +419,14 @@ Creates an `Activity` object with the given values. ```python from merge import Merge -from merge.resources.ats import ActivityRequest +from merge.environment import MergeEnvironment +from merge.ats import ActivityRequest client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.ats.activities.create( is_debug_mode=True, run_async=True, @@ -499,7 +492,7 @@ client.ats.activities.create(
-
client.ats.activities.retrieve(...) +
client.ats.activities.retrieve(...) -> Activity
@@ -527,21 +520,19 @@ Returns an `Activity` object with the given `id`. ```python from merge import Merge -from merge.resources.ats.resources.activities import ( - ActivitiesRetrieveRequestRemoteFields, - ActivitiesRetrieveRequestShowEnumOrigins, -) +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.ats.activities.retrieve( id="id", include_remote_data=True, include_shell_data=True, - remote_fields=ActivitiesRetrieveRequestRemoteFields.ACTIVITY_TYPE, - show_enum_origins=ActivitiesRetrieveRequestShowEnumOrigins.ACTIVITY_TYPE, + remote_fields="activity_type", + show_enum_origins="activity_type", ) ``` @@ -566,11 +557,7 @@ client.ats.activities.retrieve(
-**expand:** `typing.Optional[ - typing.Union[ - typing.Literal["user"], typing.Sequence[typing.Literal["user"]] - ] -]` — Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces. +**expand:** `typing.Optional[typing.Union[typing.Literal, typing.Sequence[typing.Literal]]]` — Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces.
@@ -622,7 +609,7 @@ client.ats.activities.retrieve(
-
client.ats.activities.meta_post_retrieve() +
client.ats.activities.meta_post_retrieve() -> MetaResponse
@@ -650,11 +637,13 @@ Returns metadata for `Activity` POSTs. ```python from merge import Merge +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.ats.activities.meta_post_retrieve() ``` @@ -684,7 +673,7 @@ client.ats.activities.meta_post_retrieve()
## Ats Applications -
client.ats.applications.list(...) +
client.ats.applications.list(...) -> PaginatedApplicationList
@@ -711,22 +700,19 @@ Returns a list of `Application` objects.
```python -import datetime - from merge import Merge +from merge.environment import MergeEnvironment +import datetime client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.ats.applications.list( candidate_id="candidate_id", - created_after=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), - created_before=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), + created_after=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), + created_before=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), credited_to_id="credited_to_id", current_stage_id="current_stage_id", cursor="cD0yMDIxLTAxLTA2KzAzJTNBMjQlM0E1My40MzQzMjYlMkIwMCUzQTAw", @@ -734,12 +720,8 @@ client.ats.applications.list( include_remote_data=True, include_shell_data=True, job_id="job_id", - modified_after=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), - modified_before=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), + modified_after=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), + modified_before=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), page_size=1, reject_reason_id="reject_reason_id", remote_id="remote_id", @@ -768,7 +750,7 @@ client.ats.applications.list(
-**created_after:** `typing.Optional[dt.datetime]` — If provided, will only return objects created after this datetime. +**created_after:** `typing.Optional[datetime.datetime]` — If provided, will only return objects created after this datetime.
@@ -776,7 +758,7 @@ client.ats.applications.list(
-**created_before:** `typing.Optional[dt.datetime]` — If provided, will only return objects created before this datetime. +**created_before:** `typing.Optional[datetime.datetime]` — If provided, will only return objects created before this datetime.
@@ -808,12 +790,7 @@ client.ats.applications.list(
-**expand:** `typing.Optional[ - typing.Union[ - ApplicationsListRequestExpandItem, - typing.Sequence[ApplicationsListRequestExpandItem], - ] -]` — Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces. +**expand:** `typing.Optional[typing.Union[ApplicationsListRequestExpandItem, typing.Sequence[ApplicationsListRequestExpandItem]]]` — Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces.
@@ -853,7 +830,7 @@ client.ats.applications.list(
-**modified_after:** `typing.Optional[dt.datetime]` — If provided, only objects synced by Merge after this date time will be returned. +**modified_after:** `typing.Optional[datetime.datetime]` — If provided, only objects synced by Merge after this date time will be returned.
@@ -861,7 +838,7 @@ client.ats.applications.list(
-**modified_before:** `typing.Optional[dt.datetime]` — If provided, only objects synced by Merge before this date time will be returned. +**modified_before:** `typing.Optional[datetime.datetime]` — If provided, only objects synced by Merge before this date time will be returned.
@@ -913,7 +890,7 @@ client.ats.applications.list(
-
client.ats.applications.create(...) +
client.ats.applications.create(...) -> ApplicationResponse
@@ -944,12 +921,14 @@ See our [Help Center article](https://help.merge.dev/en/articles/10012366-update ```python from merge import Merge -from merge.resources.ats import ApplicationRequest +from merge.environment import MergeEnvironment +from merge.ats import ApplicationRequest client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.ats.applications.create( is_debug_mode=True, run_async=True, @@ -1015,7 +994,7 @@ client.ats.applications.create(
-
client.ats.applications.retrieve(...) +
client.ats.applications.retrieve(...) -> Application
@@ -1043,11 +1022,13 @@ Returns an `Application` object with the given `id`. ```python from merge import Merge +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.ats.applications.retrieve( id="id", include_remote_data=True, @@ -1076,12 +1057,7 @@ client.ats.applications.retrieve(
-**expand:** `typing.Optional[ - typing.Union[ - ApplicationsRetrieveRequestExpandItem, - typing.Sequence[ApplicationsRetrieveRequestExpandItem], - ] -]` — Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces. +**expand:** `typing.Optional[typing.Union[ApplicationsRetrieveRequestExpandItem, typing.Sequence[ApplicationsRetrieveRequestExpandItem]]]` — Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces.
@@ -1117,7 +1093,7 @@ client.ats.applications.retrieve(
-
client.ats.applications.change_stage_create(...) +
client.ats.applications.change_stage_create(...) -> ApplicationResponse
@@ -1145,11 +1121,13 @@ Updates the `current_stage` field of an `Application` object ```python from merge import Merge +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.ats.applications.change_stage_create( id="id", is_debug_mode=True, @@ -1222,7 +1200,7 @@ client.ats.applications.change_stage_create(
-
client.ats.applications.meta_post_retrieve(...) +
client.ats.applications.meta_post_retrieve(...) -> MetaResponse
@@ -1250,11 +1228,13 @@ Returns metadata for `Application` POSTs. ```python from merge import Merge +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.ats.applications.meta_post_retrieve( application_remote_template_id="application_remote_template_id", ) @@ -1294,7 +1274,7 @@ client.ats.applications.meta_post_retrieve(
## Ats AsyncPassthrough -
client.ats.async_passthrough.create(...) +
client.ats.async_passthrough.create(...) -> AsyncPassthroughReciept
@@ -1322,15 +1302,17 @@ Asynchronously pull data from an endpoint not currently supported by Merge. ```python from merge import Merge -from merge.resources.ats import DataPassthroughRequest, MethodEnum +from merge.environment import MergeEnvironment +from merge.ats import DataPassthroughRequest client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.ats.async_passthrough.create( request=DataPassthroughRequest( - method=MethodEnum.GET, + method="GET", path="/scooters", ), ) @@ -1369,7 +1351,7 @@ client.ats.async_passthrough.create(
-
client.ats.async_passthrough.retrieve(...) +
client.ats.async_passthrough.retrieve(...) -> AsyncPassthroughRetrieveResponse
@@ -1397,11 +1379,13 @@ Retrieves data from earlier async-passthrough POST request ```python from merge import Merge +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.ats.async_passthrough.retrieve( async_passthrough_receipt_id="async_passthrough_receipt_id", ) @@ -1441,7 +1425,7 @@ client.ats.async_passthrough.retrieve(
## Ats Attachments -
client.ats.attachments.list(...) +
client.ats.attachments.list(...) -> PaginatedAttachmentList
@@ -1468,34 +1452,29 @@ Returns a list of `Attachment` objects.
```python -import datetime - from merge import Merge +from merge.environment import MergeEnvironment +import datetime client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.ats.attachments.list( candidate_id="candidate_id", - created_after=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), - created_before=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), + created_after=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), + created_before=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), cursor="cD0yMDIxLTAxLTA2KzAzJTNBMjQlM0E1My40MzQzMjYlMkIwMCUzQTAw", include_deleted_data=True, include_remote_data=True, include_shell_data=True, - modified_after=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), - modified_before=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), + modified_after=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), + modified_before=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), page_size=1, + remote_fields="attachment_type", remote_id="remote_id", + show_enum_origins="attachment_type", ) ``` @@ -1520,7 +1499,7 @@ client.ats.attachments.list(
-**created_after:** `typing.Optional[dt.datetime]` — If provided, will only return objects created after this datetime. +**created_after:** `typing.Optional[datetime.datetime]` — If provided, will only return objects created after this datetime.
@@ -1528,7 +1507,7 @@ client.ats.attachments.list(
-**created_before:** `typing.Optional[dt.datetime]` — If provided, will only return objects created before this datetime. +**created_before:** `typing.Optional[datetime.datetime]` — If provided, will only return objects created before this datetime.
@@ -1544,12 +1523,7 @@ client.ats.attachments.list(
-**expand:** `typing.Optional[ - typing.Union[ - typing.Literal["candidate"], - typing.Sequence[typing.Literal["candidate"]], - ] -]` — Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces. +**expand:** `typing.Optional[typing.Union[typing.Literal, typing.Sequence[typing.Literal]]]` — Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces.
@@ -1581,7 +1555,7 @@ client.ats.attachments.list(
-**modified_after:** `typing.Optional[dt.datetime]` — If provided, only objects synced by Merge after this date time will be returned. +**modified_after:** `typing.Optional[datetime.datetime]` — If provided, only objects synced by Merge after this date time will be returned.
@@ -1589,7 +1563,7 @@ client.ats.attachments.list(
-**modified_before:** `typing.Optional[dt.datetime]` — If provided, only objects synced by Merge before this date time will be returned. +**modified_before:** `typing.Optional[datetime.datetime]` — If provided, only objects synced by Merge before this date time will be returned.
@@ -1605,7 +1579,7 @@ client.ats.attachments.list(
-**remote_fields:** `typing.Optional[typing.Literal["attachment_type"]]` — Deprecated. Use show_enum_origins. +**remote_fields:** `typing.Optional[typing.Literal]` — Deprecated. Use show_enum_origins.
@@ -1621,7 +1595,7 @@ client.ats.attachments.list(
-**show_enum_origins:** `typing.Optional[typing.Literal["attachment_type"]]` — A comma separated list of enum field names for which you'd like the original values to be returned, instead of Merge's normalized enum values. [Learn more](https://help.merge.dev/en/articles/8950958-show_enum_origins-query-parameter) +**show_enum_origins:** `typing.Optional[typing.Literal]` — A comma separated list of enum field names for which you'd like the original values to be returned, instead of Merge's normalized enum values. [Learn more](https://help.merge.dev/en/articles/8950958-show_enum_origins-query-parameter)
@@ -1641,7 +1615,7 @@ client.ats.attachments.list(
-
client.ats.attachments.create(...) +
client.ats.attachments.create(...) -> AttachmentResponse
@@ -1669,12 +1643,14 @@ Creates an `Attachment` object with the given values. ```python from merge import Merge -from merge.resources.ats import AttachmentRequest +from merge.environment import MergeEnvironment +from merge.ats import AttachmentRequest client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.ats.attachments.create( is_debug_mode=True, run_async=True, @@ -1740,7 +1716,7 @@ client.ats.attachments.create(
-
client.ats.attachments.retrieve(...) +
client.ats.attachments.retrieve(...) -> Attachment
@@ -1768,15 +1744,19 @@ Returns an `Attachment` object with the given `id`. ```python from merge import Merge +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.ats.attachments.retrieve( id="id", include_remote_data=True, include_shell_data=True, + remote_fields="attachment_type", + show_enum_origins="attachment_type", ) ``` @@ -1801,12 +1781,7 @@ client.ats.attachments.retrieve(
-**expand:** `typing.Optional[ - typing.Union[ - typing.Literal["candidate"], - typing.Sequence[typing.Literal["candidate"]], - ] -]` — Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces. +**expand:** `typing.Optional[typing.Union[typing.Literal, typing.Sequence[typing.Literal]]]` — Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces.
@@ -1830,7 +1805,7 @@ client.ats.attachments.retrieve(
-**remote_fields:** `typing.Optional[typing.Literal["attachment_type"]]` — Deprecated. Use show_enum_origins. +**remote_fields:** `typing.Optional[typing.Literal]` — Deprecated. Use show_enum_origins.
@@ -1838,7 +1813,7 @@ client.ats.attachments.retrieve(
-**show_enum_origins:** `typing.Optional[typing.Literal["attachment_type"]]` — A comma separated list of enum field names for which you'd like the original values to be returned, instead of Merge's normalized enum values. [Learn more](https://help.merge.dev/en/articles/8950958-show_enum_origins-query-parameter) +**show_enum_origins:** `typing.Optional[typing.Literal]` — A comma separated list of enum field names for which you'd like the original values to be returned, instead of Merge's normalized enum values. [Learn more](https://help.merge.dev/en/articles/8950958-show_enum_origins-query-parameter)
@@ -1858,7 +1833,7 @@ client.ats.attachments.retrieve(
-
client.ats.attachments.meta_post_retrieve() +
client.ats.attachments.meta_post_retrieve() -> MetaResponse
@@ -1886,11 +1861,13 @@ Returns metadata for `Attachment` POSTs. ```python from merge import Merge +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.ats.attachments.meta_post_retrieve() ``` @@ -1920,7 +1897,7 @@ client.ats.attachments.meta_post_retrieve()
## Ats AuditTrail -
client.ats.audit_trail.list(...) +
client.ats.audit_trail.list(...) -> PaginatedAuditLogEventList
@@ -1948,11 +1925,13 @@ Gets a list of audit trail events. ```python from merge import Merge +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.ats.audit_trail.list( cursor="cD0yMDIxLTAxLTA2KzAzJTNBMjQlM0E1My40MzQzMjYlMkIwMCUzQTAw", end_date="end_date", @@ -2037,7 +2016,7 @@ client.ats.audit_trail.list(
## Ats AvailableActions -
client.ats.available_actions.retrieve() +
client.ats.available_actions.retrieve() -> AvailableActions
@@ -2065,11 +2044,13 @@ Returns a list of models and actions available for an account. ```python from merge import Merge +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.ats.available_actions.retrieve() ``` @@ -2099,7 +2080,7 @@ client.ats.available_actions.retrieve()
## Ats Candidates -
client.ats.candidates.list(...) +
client.ats.candidates.list(...) -> PaginatedCandidateList
@@ -2126,21 +2107,18 @@ Returns a list of `Candidate` objects.
```python -import datetime - from merge import Merge +from merge.environment import MergeEnvironment +import datetime client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.ats.candidates.list( - created_after=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), - created_before=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), + created_after=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), + created_before=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), cursor="cD0yMDIxLTAxLTA2KzAzJTNBMjQlM0E1My40MzQzMjYlMkIwMCUzQTAw", email_addresses="email_addresses", first_name="first_name", @@ -2148,12 +2126,8 @@ client.ats.candidates.list( include_remote_data=True, include_shell_data=True, last_name="last_name", - modified_after=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), - modified_before=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), + modified_after=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), + modified_before=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), page_size=1, remote_id="remote_id", tags="tags", @@ -2173,7 +2147,7 @@ client.ats.candidates.list(
-**created_after:** `typing.Optional[dt.datetime]` — If provided, will only return objects created after this datetime. +**created_after:** `typing.Optional[datetime.datetime]` — If provided, will only return objects created after this datetime.
@@ -2181,7 +2155,7 @@ client.ats.candidates.list(
-**created_before:** `typing.Optional[dt.datetime]` — If provided, will only return objects created before this datetime. +**created_before:** `typing.Optional[datetime.datetime]` — If provided, will only return objects created before this datetime.
@@ -2205,12 +2179,7 @@ client.ats.candidates.list(
-**expand:** `typing.Optional[ - typing.Union[ - CandidatesListRequestExpandItem, - typing.Sequence[CandidatesListRequestExpandItem], - ] -]` — Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces. +**expand:** `typing.Optional[typing.Union[CandidatesListRequestExpandItem, typing.Sequence[CandidatesListRequestExpandItem]]]` — Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces.
@@ -2258,7 +2227,7 @@ client.ats.candidates.list(
-**modified_after:** `typing.Optional[dt.datetime]` — If provided, only objects synced by Merge after this date time will be returned. +**modified_after:** `typing.Optional[datetime.datetime]` — If provided, only objects synced by Merge after this date time will be returned.
@@ -2266,7 +2235,7 @@ client.ats.candidates.list(
-**modified_before:** `typing.Optional[dt.datetime]` — If provided, only objects synced by Merge before this date time will be returned. +**modified_before:** `typing.Optional[datetime.datetime]` — If provided, only objects synced by Merge before this date time will be returned.
@@ -2310,7 +2279,7 @@ client.ats.candidates.list(
-
client.ats.candidates.create(...) +
client.ats.candidates.create(...) -> CandidateResponse
@@ -2338,12 +2307,14 @@ Creates a `Candidate` object with the given values. ```python from merge import Merge -from merge.resources.ats import CandidateRequest +from merge.environment import MergeEnvironment +from merge.ats import CandidateRequest client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.ats.candidates.create( is_debug_mode=True, run_async=True, @@ -2409,7 +2380,7 @@ client.ats.candidates.create(
-
client.ats.candidates.retrieve(...) +
client.ats.candidates.retrieve(...) -> Candidate
@@ -2437,11 +2408,13 @@ Returns a `Candidate` object with the given `id`. ```python from merge import Merge +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.ats.candidates.retrieve( id="id", include_remote_data=True, @@ -2470,12 +2443,7 @@ client.ats.candidates.retrieve(
-**expand:** `typing.Optional[ - typing.Union[ - CandidatesRetrieveRequestExpandItem, - typing.Sequence[CandidatesRetrieveRequestExpandItem], - ] -]` — Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces. +**expand:** `typing.Optional[typing.Union[CandidatesRetrieveRequestExpandItem, typing.Sequence[CandidatesRetrieveRequestExpandItem]]]` — Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces.
@@ -2511,7 +2479,7 @@ client.ats.candidates.retrieve(
-
client.ats.candidates.partial_update(...) +
client.ats.candidates.partial_update(...) -> CandidateResponse
@@ -2539,12 +2507,14 @@ Updates a `Candidate` object with the given `id`. ```python from merge import Merge -from merge.resources.ats import PatchedCandidateRequest +from merge.environment import MergeEnvironment +from merge.ats import PatchedCandidateRequest client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.ats.candidates.partial_update( id="id", is_debug_mode=True, @@ -2619,7 +2589,7 @@ client.ats.candidates.partial_update(
-
client.ats.candidates.ignore_create(...) +
client.ats.candidates.ignore_create(...)
@@ -2647,16 +2617,18 @@ Ignores a specific row based on the `model_id` in the url. These records will ha ```python from merge import Merge -from merge.resources.ats import IgnoreCommonModelRequest, ReasonEnum +from merge.environment import MergeEnvironment +from merge.ats import IgnoreCommonModelRequest client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.ats.candidates.ignore_create( model_id="model_id", request=IgnoreCommonModelRequest( - reason=ReasonEnum.GENERAL_CUSTOMER_REQUEST, + reason="GENERAL_CUSTOMER_REQUEST", ), ) @@ -2702,7 +2674,7 @@ client.ats.candidates.ignore_create(
-
client.ats.candidates.meta_patch_retrieve(...) +
client.ats.candidates.meta_patch_retrieve(...) -> MetaResponse
@@ -2730,11 +2702,13 @@ Returns metadata for `Candidate` PATCHs. ```python from merge import Merge +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.ats.candidates.meta_patch_retrieve( id="id", ) @@ -2773,7 +2747,7 @@ client.ats.candidates.meta_patch_retrieve(
-
client.ats.candidates.meta_post_retrieve() +
client.ats.candidates.meta_post_retrieve() -> MetaResponse
@@ -2801,11 +2775,13 @@ Returns metadata for `Candidate` POSTs. ```python from merge import Merge +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.ats.candidates.meta_post_retrieve() ``` @@ -2835,7 +2811,7 @@ client.ats.candidates.meta_post_retrieve()
## Ats Scopes -
client.ats.scopes.default_scopes_retrieve() +
client.ats.scopes.default_scopes_retrieve() -> CommonModelScopeApi
@@ -2863,11 +2839,13 @@ Get the default permissions for Merge Common Models and fields across all Linked ```python from merge import Merge +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.ats.scopes.default_scopes_retrieve() ``` @@ -2896,7 +2874,7 @@ client.ats.scopes.default_scopes_retrieve()
-
client.ats.scopes.linked_account_scopes_retrieve() +
client.ats.scopes.linked_account_scopes_retrieve() -> CommonModelScopeApi
@@ -2924,11 +2902,13 @@ Get all available permissions for Merge Common Models and fields for a single Li ```python from merge import Merge +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.ats.scopes.linked_account_scopes_retrieve() ``` @@ -2957,7 +2937,7 @@ client.ats.scopes.linked_account_scopes_retrieve()
-
client.ats.scopes.linked_account_scopes_create(...) +
client.ats.scopes.linked_account_scopes_create(...) -> CommonModelScopeApi
@@ -2985,16 +2965,14 @@ Update permissions for any Common Model or field for a single Linked Account. An ```python from merge import Merge -from merge.resources.ats import ( - FieldPermissionDeserializerRequest, - IndividualCommonModelScopeDeserializerRequest, - ModelPermissionDeserializerRequest, -) +from merge.environment import MergeEnvironment +from merge.ats import IndividualCommonModelScopeDeserializerRequest, ModelPermissionDeserializerRequest, FieldPermissionDeserializerRequest client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.ats.scopes.linked_account_scopes_create( common_models=[ IndividualCommonModelScopeDeserializerRequest( @@ -3005,11 +2983,16 @@ client.ats.scopes.linked_account_scopes_create( ), "WRITE": ModelPermissionDeserializerRequest( is_enabled=False, - ), + ) }, field_permissions=FieldPermissionDeserializerRequest( - enabled_fields=["avatar", "home_location"], - disabled_fields=["work_location"], + enabled_fields=[ + "avatar", + "home_location" + ], + disabled_fields=[ + "work_location" + ], ), ), IndividualCommonModelScopeDeserializerRequest( @@ -3019,7 +3002,7 @@ client.ats.scopes.linked_account_scopes_create( is_enabled=False, ) }, - ), + ) ], ) @@ -3037,7 +3020,7 @@ client.ats.scopes.linked_account_scopes_create(
-**common_models:** `typing.Sequence[IndividualCommonModelScopeDeserializerRequest]` — The common models you want to update the scopes for +**common_models:** `typing.List[IndividualCommonModelScopeDeserializerRequest]` — The common models you want to update the scopes for
@@ -3058,7 +3041,7 @@ client.ats.scopes.linked_account_scopes_create(
## Ats DeleteAccount -
client.ats.delete_account.delete() +
client.ats.delete_account.delete()
@@ -3086,11 +3069,13 @@ Delete a linked account. ```python from merge import Merge +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.ats.delete_account.delete() ``` @@ -3120,7 +3105,7 @@ client.ats.delete_account.delete()
## Ats Departments -
client.ats.departments.list(...) +
client.ats.departments.list(...) -> PaginatedDepartmentList
@@ -3147,31 +3132,24 @@ Returns a list of `Department` objects.
```python -import datetime - from merge import Merge +from merge.environment import MergeEnvironment +import datetime client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.ats.departments.list( - created_after=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), - created_before=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), + created_after=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), + created_before=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), cursor="cD0yMDIxLTAxLTA2KzAzJTNBMjQlM0E1My40MzQzMjYlMkIwMCUzQTAw", include_deleted_data=True, include_remote_data=True, include_shell_data=True, - modified_after=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), - modified_before=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), + modified_after=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), + modified_before=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), page_size=1, remote_id="remote_id", ) @@ -3190,7 +3168,7 @@ client.ats.departments.list(
-**created_after:** `typing.Optional[dt.datetime]` — If provided, will only return objects created after this datetime. +**created_after:** `typing.Optional[datetime.datetime]` — If provided, will only return objects created after this datetime.
@@ -3198,7 +3176,7 @@ client.ats.departments.list(
-**created_before:** `typing.Optional[dt.datetime]` — If provided, will only return objects created before this datetime. +**created_before:** `typing.Optional[datetime.datetime]` — If provided, will only return objects created before this datetime.
@@ -3238,7 +3216,7 @@ client.ats.departments.list(
-**modified_after:** `typing.Optional[dt.datetime]` — If provided, only objects synced by Merge after this date time will be returned. +**modified_after:** `typing.Optional[datetime.datetime]` — If provided, only objects synced by Merge after this date time will be returned.
@@ -3246,7 +3224,7 @@ client.ats.departments.list(
-**modified_before:** `typing.Optional[dt.datetime]` — If provided, only objects synced by Merge before this date time will be returned. +**modified_before:** `typing.Optional[datetime.datetime]` — If provided, only objects synced by Merge before this date time will be returned.
@@ -3282,7 +3260,7 @@ client.ats.departments.list(
-
client.ats.departments.retrieve(...) +
client.ats.departments.retrieve(...) -> Department
@@ -3310,11 +3288,13 @@ Returns a `Department` object with the given `id`. ```python from merge import Merge +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.ats.departments.retrieve( id="id", include_remote_data=True, @@ -3372,7 +3352,7 @@ client.ats.departments.retrieve(
## Ats Eeocs -
client.ats.eeocs.list(...) +
client.ats.eeocs.list(...) -> PaginatedEeocList
@@ -3399,40 +3379,29 @@ Returns a list of `EEOC` objects.
```python -import datetime - from merge import Merge -from merge.resources.ats.resources.eeocs import ( - EeocsListRequestRemoteFields, - EeocsListRequestShowEnumOrigins, -) +from merge.environment import MergeEnvironment +import datetime client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.ats.eeocs.list( candidate_id="candidate_id", - created_after=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), - created_before=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), + created_after=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), + created_before=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), cursor="cD0yMDIxLTAxLTA2KzAzJTNBMjQlM0E1My40MzQzMjYlMkIwMCUzQTAw", include_deleted_data=True, include_remote_data=True, include_shell_data=True, - modified_after=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), - modified_before=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), + modified_after=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), + modified_before=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), page_size=1, - remote_fields=EeocsListRequestRemoteFields.DISABILITY_STATUS, + remote_fields="disability_status", remote_id="remote_id", - show_enum_origins=EeocsListRequestShowEnumOrigins.DISABILITY_STATUS, + show_enum_origins="disability_status", ) ``` @@ -3457,7 +3426,7 @@ client.ats.eeocs.list(
-**created_after:** `typing.Optional[dt.datetime]` — If provided, will only return objects created after this datetime. +**created_after:** `typing.Optional[datetime.datetime]` — If provided, will only return objects created after this datetime.
@@ -3465,7 +3434,7 @@ client.ats.eeocs.list(
-**created_before:** `typing.Optional[dt.datetime]` — If provided, will only return objects created before this datetime. +**created_before:** `typing.Optional[datetime.datetime]` — If provided, will only return objects created before this datetime.
@@ -3481,12 +3450,7 @@ client.ats.eeocs.list(
-**expand:** `typing.Optional[ - typing.Union[ - typing.Literal["candidate"], - typing.Sequence[typing.Literal["candidate"]], - ] -]` — Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces. +**expand:** `typing.Optional[typing.Union[typing.Literal, typing.Sequence[typing.Literal]]]` — Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces.
@@ -3518,7 +3482,7 @@ client.ats.eeocs.list(
-**modified_after:** `typing.Optional[dt.datetime]` — If provided, only objects synced by Merge after this date time will be returned. +**modified_after:** `typing.Optional[datetime.datetime]` — If provided, only objects synced by Merge after this date time will be returned.
@@ -3526,7 +3490,7 @@ client.ats.eeocs.list(
-**modified_before:** `typing.Optional[dt.datetime]` — If provided, only objects synced by Merge before this date time will be returned. +**modified_before:** `typing.Optional[datetime.datetime]` — If provided, only objects synced by Merge before this date time will be returned.
@@ -3578,7 +3542,7 @@ client.ats.eeocs.list(
-
client.ats.eeocs.retrieve(...) +
client.ats.eeocs.retrieve(...) -> Eeoc
@@ -3606,21 +3570,19 @@ Returns an `EEOC` object with the given `id`. ```python from merge import Merge -from merge.resources.ats.resources.eeocs import ( - EeocsRetrieveRequestRemoteFields, - EeocsRetrieveRequestShowEnumOrigins, -) +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.ats.eeocs.retrieve( id="id", include_remote_data=True, include_shell_data=True, - remote_fields=EeocsRetrieveRequestRemoteFields.DISABILITY_STATUS, - show_enum_origins=EeocsRetrieveRequestShowEnumOrigins.DISABILITY_STATUS, + remote_fields="disability_status", + show_enum_origins="disability_status", ) ``` @@ -3645,12 +3607,7 @@ client.ats.eeocs.retrieve(
-**expand:** `typing.Optional[ - typing.Union[ - typing.Literal["candidate"], - typing.Sequence[typing.Literal["candidate"]], - ] -]` — Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces. +**expand:** `typing.Optional[typing.Union[typing.Literal, typing.Sequence[typing.Literal]]]` — Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces.
@@ -3703,7 +3660,7 @@ client.ats.eeocs.retrieve(
## Ats FieldMapping -
client.ats.field_mapping.field_mappings_retrieve(...) +
client.ats.field_mapping.field_mappings_retrieve(...) -> FieldMappingApiInstanceResponse
@@ -3731,11 +3688,13 @@ Get all Field Mappings for this Linked Account. Field Mappings are mappings betw ```python from merge import Merge +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.ats.field_mapping.field_mappings_retrieve( exclude_remote_field_metadata=True, ) @@ -3774,7 +3733,7 @@ client.ats.field_mapping.field_mappings_retrieve(
-
client.ats.field_mapping.field_mappings_create(...) +
client.ats.field_mapping.field_mappings_create(...) -> FieldMappingInstanceResponse
@@ -3802,16 +3761,20 @@ Create new Field Mappings that will be available after the next scheduled sync. ```python from merge import Merge +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.ats.field_mapping.field_mappings_create( exclude_remote_field_metadata=True, target_field_name="example_target_field_name", target_field_description="this is a example description of the target field", - remote_field_traversal_path=["example_remote_field"], + remote_field_traversal_path=[ + "example_remote_field" + ], remote_method="GET", remote_url_path="/example-url-path", common_model_name="ExampleCommonModel", @@ -3847,7 +3810,7 @@ client.ats.field_mapping.field_mappings_create(
-**remote_field_traversal_path:** `typing.Sequence[typing.Optional[typing.Any]]` — The field traversal path of the remote field listed when you hit the GET /remote-fields endpoint. +**remote_field_traversal_path:** `typing.List[typing.Any]` — The field traversal path of the remote field listed when you hit the GET /remote-fields endpoint.
@@ -3907,7 +3870,7 @@ client.ats.field_mapping.field_mappings_create(
-
client.ats.field_mapping.field_mappings_destroy(...) +
client.ats.field_mapping.field_mappings_destroy(...) -> FieldMappingInstanceResponse
@@ -3935,11 +3898,13 @@ Deletes Field Mappings for a Linked Account. All data related to this Field Mapp ```python from merge import Merge +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.ats.field_mapping.field_mappings_destroy( field_mapping_id="field_mapping_id", ) @@ -3978,7 +3943,7 @@ client.ats.field_mapping.field_mappings_destroy(
-
client.ats.field_mapping.field_mappings_partial_update(...) +
client.ats.field_mapping.field_mappings_partial_update(...) -> FieldMappingInstanceResponse
@@ -4006,11 +3971,13 @@ Create or update existing Field Mappings for a Linked Account. Changes will be r ```python from merge import Merge +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.ats.field_mapping.field_mappings_partial_update( field_mapping_id="field_mapping_id", remote_data_iteration_count=1, @@ -4046,7 +4013,7 @@ client.ats.field_mapping.field_mappings_partial_update(
-**remote_field_traversal_path:** `typing.Optional[typing.Sequence[typing.Optional[typing.Any]]]` — The field traversal path of the remote field listed when you hit the GET /remote-fields endpoint. +**remote_field_traversal_path:** `typing.Optional[typing.List[typing.Any]]` — The field traversal path of the remote field listed when you hit the GET /remote-fields endpoint.
@@ -4090,7 +4057,7 @@ client.ats.field_mapping.field_mappings_partial_update(
-
client.ats.field_mapping.remote_fields_retrieve(...) +
client.ats.field_mapping.remote_fields_retrieve(...) -> RemoteFieldApiResponse
@@ -4118,11 +4085,13 @@ Get all remote fields for a Linked Account. Remote fields are third-party fields ```python from merge import Merge +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.ats.field_mapping.remote_fields_retrieve( common_models="common_models", include_example_values="include_example_values", @@ -4170,7 +4139,7 @@ client.ats.field_mapping.remote_fields_retrieve(
-
client.ats.field_mapping.target_fields_retrieve() +
client.ats.field_mapping.target_fields_retrieve() -> ExternalTargetFieldApiResponse
@@ -4198,11 +4167,13 @@ Get all organization-wide Target Fields, this will not include any Linked Accoun ```python from merge import Merge +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.ats.field_mapping.target_fields_retrieve() ``` @@ -4232,7 +4203,7 @@ client.ats.field_mapping.target_fields_retrieve()
## Ats GenerateKey -
client.ats.generate_key.create(...) +
client.ats.generate_key.create(...) -> RemoteKey
@@ -4260,11 +4231,13 @@ Create a remote key. ```python from merge import Merge +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.ats.generate_key.create( name="Remote Deployment Key 1", ) @@ -4304,7 +4277,7 @@ client.ats.generate_key.create(
## Ats Interviews -
client.ats.interviews.list(...) +
client.ats.interviews.list(...) -> PaginatedScheduledInterviewList
@@ -4331,37 +4304,32 @@ Returns a list of `ScheduledInterview` objects.
```python -import datetime - from merge import Merge +from merge.environment import MergeEnvironment +import datetime client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.ats.interviews.list( application_id="application_id", - created_after=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), - created_before=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), + created_after=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), + created_before=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), cursor="cD0yMDIxLTAxLTA2KzAzJTNBMjQlM0E1My40MzQzMjYlMkIwMCUzQTAw", include_deleted_data=True, include_remote_data=True, include_shell_data=True, job_id="job_id", job_interview_stage_id="job_interview_stage_id", - modified_after=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), - modified_before=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), + modified_after=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), + modified_before=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), organizer_id="organizer_id", page_size=1, + remote_fields="status", remote_id="remote_id", + show_enum_origins="status", ) ``` @@ -4386,7 +4354,7 @@ client.ats.interviews.list(
-**created_after:** `typing.Optional[dt.datetime]` — If provided, will only return objects created after this datetime. +**created_after:** `typing.Optional[datetime.datetime]` — If provided, will only return objects created after this datetime.
@@ -4394,7 +4362,7 @@ client.ats.interviews.list(
-**created_before:** `typing.Optional[dt.datetime]` — If provided, will only return objects created before this datetime. +**created_before:** `typing.Optional[datetime.datetime]` — If provided, will only return objects created before this datetime.
@@ -4410,12 +4378,7 @@ client.ats.interviews.list(
-**expand:** `typing.Optional[ - typing.Union[ - InterviewsListRequestExpandItem, - typing.Sequence[InterviewsListRequestExpandItem], - ] -]` — Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces. +**expand:** `typing.Optional[typing.Union[InterviewsListRequestExpandItem, typing.Sequence[InterviewsListRequestExpandItem]]]` — Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces.
@@ -4463,7 +4426,7 @@ client.ats.interviews.list(
-**modified_after:** `typing.Optional[dt.datetime]` — If provided, only objects synced by Merge after this date time will be returned. +**modified_after:** `typing.Optional[datetime.datetime]` — If provided, only objects synced by Merge after this date time will be returned.
@@ -4471,7 +4434,7 @@ client.ats.interviews.list(
-**modified_before:** `typing.Optional[dt.datetime]` — If provided, only objects synced by Merge before this date time will be returned. +**modified_before:** `typing.Optional[datetime.datetime]` — If provided, only objects synced by Merge before this date time will be returned.
@@ -4495,7 +4458,7 @@ client.ats.interviews.list(
-**remote_fields:** `typing.Optional[typing.Literal["status"]]` — Deprecated. Use show_enum_origins. +**remote_fields:** `typing.Optional[typing.Literal]` — Deprecated. Use show_enum_origins.
@@ -4511,7 +4474,7 @@ client.ats.interviews.list(
-**show_enum_origins:** `typing.Optional[typing.Literal["status"]]` — A comma separated list of enum field names for which you'd like the original values to be returned, instead of Merge's normalized enum values. [Learn more](https://help.merge.dev/en/articles/8950958-show_enum_origins-query-parameter) +**show_enum_origins:** `typing.Optional[typing.Literal]` — A comma separated list of enum field names for which you'd like the original values to be returned, instead of Merge's normalized enum values. [Learn more](https://help.merge.dev/en/articles/8950958-show_enum_origins-query-parameter)
@@ -4531,7 +4494,7 @@ client.ats.interviews.list(
-
client.ats.interviews.create(...) +
client.ats.interviews.create(...) -> ScheduledInterviewResponse
@@ -4559,12 +4522,14 @@ Creates a `ScheduledInterview` object with the given values. ```python from merge import Merge -from merge.resources.ats import ScheduledInterviewRequest +from merge.environment import MergeEnvironment +from merge.ats import ScheduledInterviewRequest client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.ats.interviews.create( is_debug_mode=True, run_async=True, @@ -4630,7 +4595,7 @@ client.ats.interviews.create(
-
client.ats.interviews.retrieve(...) +
client.ats.interviews.retrieve(...) -> ScheduledInterview
@@ -4658,15 +4623,19 @@ Returns a `ScheduledInterview` object with the given `id`. ```python from merge import Merge +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.ats.interviews.retrieve( id="id", include_remote_data=True, include_shell_data=True, + remote_fields="status", + show_enum_origins="status", ) ``` @@ -4691,12 +4660,7 @@ client.ats.interviews.retrieve(
-**expand:** `typing.Optional[ - typing.Union[ - InterviewsRetrieveRequestExpandItem, - typing.Sequence[InterviewsRetrieveRequestExpandItem], - ] -]` — Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces. +**expand:** `typing.Optional[typing.Union[InterviewsRetrieveRequestExpandItem, typing.Sequence[InterviewsRetrieveRequestExpandItem]]]` — Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces.
@@ -4720,7 +4684,7 @@ client.ats.interviews.retrieve(
-**remote_fields:** `typing.Optional[typing.Literal["status"]]` — Deprecated. Use show_enum_origins. +**remote_fields:** `typing.Optional[typing.Literal]` — Deprecated. Use show_enum_origins.
@@ -4728,7 +4692,7 @@ client.ats.interviews.retrieve(
-**show_enum_origins:** `typing.Optional[typing.Literal["status"]]` — A comma separated list of enum field names for which you'd like the original values to be returned, instead of Merge's normalized enum values. [Learn more](https://help.merge.dev/en/articles/8950958-show_enum_origins-query-parameter) +**show_enum_origins:** `typing.Optional[typing.Literal]` — A comma separated list of enum field names for which you'd like the original values to be returned, instead of Merge's normalized enum values. [Learn more](https://help.merge.dev/en/articles/8950958-show_enum_origins-query-parameter)
@@ -4748,7 +4712,7 @@ client.ats.interviews.retrieve(
-
client.ats.interviews.meta_post_retrieve() +
client.ats.interviews.meta_post_retrieve() -> MetaResponse
@@ -4776,11 +4740,13 @@ Returns metadata for `ScheduledInterview` POSTs. ```python from merge import Merge +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.ats.interviews.meta_post_retrieve() ``` @@ -4810,7 +4776,7 @@ client.ats.interviews.meta_post_retrieve()
## Ats Issues -
client.ats.issues.list(...) +
client.ats.issues.list(...) -> PaginatedIssueList
@@ -4837,38 +4803,30 @@ Gets all issues for Organization.
```python -import datetime - from merge import Merge -from merge.resources.ats.resources.issues import IssuesListRequestStatus +from merge.environment import MergeEnvironment +import datetime client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.ats.issues.list( account_token="account_token", cursor="cD0yMDIxLTAxLTA2KzAzJTNBMjQlM0E1My40MzQzMjYlMkIwMCUzQTAw", end_date="end_date", end_user_organization_name="end_user_organization_name", - first_incident_time_after=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), - first_incident_time_before=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), + first_incident_time_after=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), + first_incident_time_before=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), include_muted="include_muted", integration_name="integration_name", - last_incident_time_after=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), - last_incident_time_before=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), + last_incident_time_after=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), + last_incident_time_before=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), linked_account_id="linked_account_id", page_size=1, start_date="start_date", - status=IssuesListRequestStatus.ONGOING, + status="ONGOING", ) ``` @@ -4917,7 +4875,7 @@ client.ats.issues.list(
-**first_incident_time_after:** `typing.Optional[dt.datetime]` — If provided, will only return issues whose first incident time was after this datetime. +**first_incident_time_after:** `typing.Optional[datetime.datetime]` — If provided, will only return issues whose first incident time was after this datetime.
@@ -4925,7 +4883,7 @@ client.ats.issues.list(
-**first_incident_time_before:** `typing.Optional[dt.datetime]` — If provided, will only return issues whose first incident time was before this datetime. +**first_incident_time_before:** `typing.Optional[datetime.datetime]` — If provided, will only return issues whose first incident time was before this datetime.
@@ -4949,7 +4907,7 @@ client.ats.issues.list(
-**last_incident_time_after:** `typing.Optional[dt.datetime]` — If provided, will only return issues whose last incident time was after this datetime. +**last_incident_time_after:** `typing.Optional[datetime.datetime]` — If provided, will only return issues whose last incident time was after this datetime.
@@ -4957,7 +4915,7 @@ client.ats.issues.list(
-**last_incident_time_before:** `typing.Optional[dt.datetime]` — If provided, will only return issues whose last incident time was before this datetime. +**last_incident_time_before:** `typing.Optional[datetime.datetime]` — If provided, will only return issues whose last incident time was before this datetime.
@@ -5014,7 +4972,7 @@ Status of the issue. Options: ('ONGOING', 'RESOLVED')
-
client.ats.issues.retrieve(...) +
client.ats.issues.retrieve(...) -> Issue
@@ -5042,11 +5000,13 @@ Get a specific issue. ```python from merge import Merge +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.ats.issues.retrieve( id="id", ) @@ -5086,7 +5046,7 @@ client.ats.issues.retrieve(
## Ats JobInterviewStages -
client.ats.job_interview_stages.list(...) +
client.ats.job_interview_stages.list(...) -> PaginatedJobInterviewStageList
@@ -5113,32 +5073,25 @@ Returns a list of `JobInterviewStage` objects.
```python -import datetime - from merge import Merge +from merge.environment import MergeEnvironment +import datetime client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.ats.job_interview_stages.list( - created_after=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), - created_before=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), + created_after=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), + created_before=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), cursor="cD0yMDIxLTAxLTA2KzAzJTNBMjQlM0E1My40MzQzMjYlMkIwMCUzQTAw", include_deleted_data=True, include_remote_data=True, include_shell_data=True, job_id="job_id", - modified_after=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), - modified_before=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), + modified_after=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), + modified_before=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), page_size=1, remote_id="remote_id", ) @@ -5157,7 +5110,7 @@ client.ats.job_interview_stages.list(
-**created_after:** `typing.Optional[dt.datetime]` — If provided, will only return objects created after this datetime. +**created_after:** `typing.Optional[datetime.datetime]` — If provided, will only return objects created after this datetime.
@@ -5165,7 +5118,7 @@ client.ats.job_interview_stages.list(
-**created_before:** `typing.Optional[dt.datetime]` — If provided, will only return objects created before this datetime. +**created_before:** `typing.Optional[datetime.datetime]` — If provided, will only return objects created before this datetime.
@@ -5181,9 +5134,7 @@ client.ats.job_interview_stages.list(
-**expand:** `typing.Optional[ - typing.Union[typing.Literal["job"], typing.Sequence[typing.Literal["job"]]] -]` — Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces. +**expand:** `typing.Optional[typing.Union[typing.Literal, typing.Sequence[typing.Literal]]]` — Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces.
@@ -5223,7 +5174,7 @@ client.ats.job_interview_stages.list(
-**modified_after:** `typing.Optional[dt.datetime]` — If provided, only objects synced by Merge after this date time will be returned. +**modified_after:** `typing.Optional[datetime.datetime]` — If provided, only objects synced by Merge after this date time will be returned.
@@ -5231,7 +5182,7 @@ client.ats.job_interview_stages.list(
-**modified_before:** `typing.Optional[dt.datetime]` — If provided, only objects synced by Merge before this date time will be returned. +**modified_before:** `typing.Optional[datetime.datetime]` — If provided, only objects synced by Merge before this date time will be returned.
@@ -5267,7 +5218,7 @@ client.ats.job_interview_stages.list(
-
client.ats.job_interview_stages.retrieve(...) +
client.ats.job_interview_stages.retrieve(...) -> JobInterviewStage
@@ -5295,11 +5246,13 @@ Returns a `JobInterviewStage` object with the given `id`. ```python from merge import Merge +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.ats.job_interview_stages.retrieve( id="id", include_remote_data=True, @@ -5328,9 +5281,7 @@ client.ats.job_interview_stages.retrieve(
-**expand:** `typing.Optional[ - typing.Union[typing.Literal["job"], typing.Sequence[typing.Literal["job"]]] -]` — Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces. +**expand:** `typing.Optional[typing.Union[typing.Literal, typing.Sequence[typing.Literal]]]` — Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces.
@@ -5367,7 +5318,7 @@ client.ats.job_interview_stages.retrieve(
## Ats JobPostings -
client.ats.job_postings.list(...) +
client.ats.job_postings.list(...) -> PaginatedJobPostingList
@@ -5394,37 +5345,27 @@ Returns a list of `JobPosting` objects.
```python -import datetime - from merge import Merge -from merge.resources.ats.resources.job_postings import ( - JobPostingsListRequestStatus, -) +from merge.environment import MergeEnvironment +import datetime client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.ats.job_postings.list( - created_after=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), - created_before=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), + created_after=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), + created_before=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), cursor="cD0yMDIxLTAxLTA2KzAzJTNBMjQlM0E1My40MzQzMjYlMkIwMCUzQTAw", include_deleted_data=True, include_remote_data=True, include_shell_data=True, - modified_after=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), - modified_before=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), + modified_after=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), + modified_before=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), page_size=1, remote_id="remote_id", - status=JobPostingsListRequestStatus.CLOSED, + status="CLOSED", ) ``` @@ -5441,7 +5382,7 @@ client.ats.job_postings.list(
-**created_after:** `typing.Optional[dt.datetime]` — If provided, will only return objects created after this datetime. +**created_after:** `typing.Optional[datetime.datetime]` — If provided, will only return objects created after this datetime.
@@ -5449,7 +5390,7 @@ client.ats.job_postings.list(
-**created_before:** `typing.Optional[dt.datetime]` — If provided, will only return objects created before this datetime. +**created_before:** `typing.Optional[datetime.datetime]` — If provided, will only return objects created before this datetime.
@@ -5465,9 +5406,7 @@ client.ats.job_postings.list(
-**expand:** `typing.Optional[ - typing.Union[typing.Literal["job"], typing.Sequence[typing.Literal["job"]]] -]` — Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces. +**expand:** `typing.Optional[typing.Union[typing.Literal, typing.Sequence[typing.Literal]]]` — Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces.
@@ -5499,7 +5438,7 @@ client.ats.job_postings.list(
-**modified_after:** `typing.Optional[dt.datetime]` — If provided, only objects synced by Merge after this date time will be returned. +**modified_after:** `typing.Optional[datetime.datetime]` — If provided, only objects synced by Merge after this date time will be returned.
@@ -5507,7 +5446,7 @@ client.ats.job_postings.list(
-**modified_before:** `typing.Optional[dt.datetime]` — If provided, only objects synced by Merge before this date time will be returned. +**modified_before:** `typing.Optional[datetime.datetime]` — If provided, only objects synced by Merge before this date time will be returned.
@@ -5559,7 +5498,7 @@ If provided, will only return Job Postings with this status. Options: ('PUBLISHE
-
client.ats.job_postings.retrieve(...) +
client.ats.job_postings.retrieve(...) -> JobPosting
@@ -5587,11 +5526,13 @@ Returns a `JobPosting` object with the given `id`. ```python from merge import Merge +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.ats.job_postings.retrieve( id="id", include_remote_data=True, @@ -5620,9 +5561,7 @@ client.ats.job_postings.retrieve(
-**expand:** `typing.Optional[ - typing.Union[typing.Literal["job"], typing.Sequence[typing.Literal["job"]]] -]` — Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces. +**expand:** `typing.Optional[typing.Union[typing.Literal, typing.Sequence[typing.Literal]]]` — Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces.
@@ -5659,7 +5598,7 @@ client.ats.job_postings.retrieve(
## Ats Jobs -
client.ats.jobs.list(...) +
client.ats.jobs.list(...) -> PaginatedJobList
@@ -5686,37 +5625,31 @@ Returns a list of `Job` objects.
```python -import datetime - from merge import Merge -from merge.resources.ats.resources.jobs import JobsListRequestStatus +from merge.environment import MergeEnvironment +import datetime client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.ats.jobs.list( code="code", - created_after=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), - created_before=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), + created_after=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), + created_before=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), cursor="cD0yMDIxLTAxLTA2KzAzJTNBMjQlM0E1My40MzQzMjYlMkIwMCUzQTAw", include_deleted_data=True, include_remote_data=True, include_shell_data=True, - modified_after=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), - modified_before=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), + modified_after=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), + modified_before=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), offices="offices", page_size=1, + remote_fields="status", remote_id="remote_id", - status=JobsListRequestStatus.ARCHIVED, + show_enum_origins="status", + status="ARCHIVED", ) ``` @@ -5741,7 +5674,7 @@ client.ats.jobs.list(
-**created_after:** `typing.Optional[dt.datetime]` — If provided, will only return objects created after this datetime. +**created_after:** `typing.Optional[datetime.datetime]` — If provided, will only return objects created after this datetime.
@@ -5749,7 +5682,7 @@ client.ats.jobs.list(
-**created_before:** `typing.Optional[dt.datetime]` — If provided, will only return objects created before this datetime. +**created_before:** `typing.Optional[datetime.datetime]` — If provided, will only return objects created before this datetime.
@@ -5765,11 +5698,7 @@ client.ats.jobs.list(
-**expand:** `typing.Optional[ - typing.Union[ - JobsListRequestExpandItem, typing.Sequence[JobsListRequestExpandItem] - ] -]` — Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces. +**expand:** `typing.Optional[typing.Union[JobsListRequestExpandItem, typing.Sequence[JobsListRequestExpandItem]]]` — Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces.
@@ -5801,7 +5730,7 @@ client.ats.jobs.list(
-**modified_after:** `typing.Optional[dt.datetime]` — If provided, only objects synced by Merge after this date time will be returned. +**modified_after:** `typing.Optional[datetime.datetime]` — If provided, only objects synced by Merge after this date time will be returned.
@@ -5809,7 +5738,7 @@ client.ats.jobs.list(
-**modified_before:** `typing.Optional[dt.datetime]` — If provided, only objects synced by Merge before this date time will be returned. +**modified_before:** `typing.Optional[datetime.datetime]` — If provided, only objects synced by Merge before this date time will be returned.
@@ -5833,7 +5762,7 @@ client.ats.jobs.list(
-**remote_fields:** `typing.Optional[typing.Literal["status"]]` — Deprecated. Use show_enum_origins. +**remote_fields:** `typing.Optional[typing.Literal]` — Deprecated. Use show_enum_origins.
@@ -5849,7 +5778,7 @@ client.ats.jobs.list(
-**show_enum_origins:** `typing.Optional[typing.Literal["status"]]` — A comma separated list of enum field names for which you'd like the original values to be returned, instead of Merge's normalized enum values. [Learn more](https://help.merge.dev/en/articles/8950958-show_enum_origins-query-parameter) +**show_enum_origins:** `typing.Optional[typing.Literal]` — A comma separated list of enum field names for which you'd like the original values to be returned, instead of Merge's normalized enum values. [Learn more](https://help.merge.dev/en/articles/8950958-show_enum_origins-query-parameter)
@@ -5885,7 +5814,7 @@ If provided, will only return jobs with this status. Options: ('OPEN', 'CLOSED',
-
client.ats.jobs.retrieve(...) +
client.ats.jobs.retrieve(...) -> Job
@@ -5913,15 +5842,19 @@ Returns a `Job` object with the given `id`. ```python from merge import Merge +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.ats.jobs.retrieve( id="id", include_remote_data=True, include_shell_data=True, + remote_fields="status", + show_enum_origins="status", ) ``` @@ -5946,12 +5879,7 @@ client.ats.jobs.retrieve(
-**expand:** `typing.Optional[ - typing.Union[ - JobsRetrieveRequestExpandItem, - typing.Sequence[JobsRetrieveRequestExpandItem], - ] -]` — Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces. +**expand:** `typing.Optional[typing.Union[JobsRetrieveRequestExpandItem, typing.Sequence[JobsRetrieveRequestExpandItem]]]` — Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces.
@@ -5975,7 +5903,7 @@ client.ats.jobs.retrieve(
-**remote_fields:** `typing.Optional[typing.Literal["status"]]` — Deprecated. Use show_enum_origins. +**remote_fields:** `typing.Optional[typing.Literal]` — Deprecated. Use show_enum_origins.
@@ -5983,7 +5911,7 @@ client.ats.jobs.retrieve(
-**show_enum_origins:** `typing.Optional[typing.Literal["status"]]` — A comma separated list of enum field names for which you'd like the original values to be returned, instead of Merge's normalized enum values. [Learn more](https://help.merge.dev/en/articles/8950958-show_enum_origins-query-parameter) +**show_enum_origins:** `typing.Optional[typing.Literal]` — A comma separated list of enum field names for which you'd like the original values to be returned, instead of Merge's normalized enum values. [Learn more](https://help.merge.dev/en/articles/8950958-show_enum_origins-query-parameter)
@@ -6003,7 +5931,7 @@ client.ats.jobs.retrieve(
-
client.ats.jobs.screening_questions_list(...) +
client.ats.jobs.screening_questions_list(...) -> PaginatedScreeningQuestionList
@@ -6031,11 +5959,13 @@ Returns a list of `ScreeningQuestion` objects. ```python from merge import Merge +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.ats.jobs.screening_questions_list( job_id="job_id", cursor="cD0yMDIxLTAxLTA2KzAzJTNBMjQlM0E1My40MzQzMjYlMkIwMCUzQTAw", @@ -6075,12 +6005,7 @@ client.ats.jobs.screening_questions_list(
-**expand:** `typing.Optional[ - typing.Union[ - JobsScreeningQuestionsListRequestExpandItem, - typing.Sequence[JobsScreeningQuestionsListRequestExpandItem], - ] -]` — Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces. +**expand:** `typing.Optional[typing.Union[JobsScreeningQuestionsListRequestExpandItem, typing.Sequence[JobsScreeningQuestionsListRequestExpandItem]]]` — Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces.
@@ -6133,7 +6058,7 @@ client.ats.jobs.screening_questions_list(
## Ats LinkToken -
client.ats.link_token.create(...) +
client.ats.link_token.create(...) -> LinkToken
@@ -6161,17 +6086,21 @@ Creates a link token to be used when linking a new end user. The link token expi ```python from merge import Merge -from merge.resources.ats import CategoriesEnum +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.ats.link_token.create( end_user_email_address="example@gmail.com", end_user_organization_name="Test Organization", end_user_origin_id="12345", - categories=[CategoriesEnum.HRIS, CategoriesEnum.ATS], + categories=[ + "hris", + "ats" + ], ) ``` @@ -6212,7 +6141,7 @@ client.ats.link_token.create(
-**categories:** `typing.Sequence[CategoriesEnum]` — The integration categories to show in Merge Link. +**categories:** `typing.List[CategoriesEnum]` — The integration categories to show in Merge Link.
@@ -6252,7 +6181,7 @@ client.ats.link_token.create(
-**common_models:** `typing.Optional[typing.Sequence[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. +**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.
@@ -6260,14 +6189,7 @@ client.ats.link_token.create(
-**category_common_model_scopes:** `typing.Optional[ - typing.Dict[ - str, - typing.Optional[ - typing.Sequence[IndividualCommonModelScopeDeserializerRequest] - ], - ] -]` — When creating a Link Token, you can set permissions for Common Models that will apply to the account that is going to be linked. Any model or field not specified in link token payload will default to existing settings. +**category_common_model_scopes:** `typing.Optional[typing.Dict[str, typing.Optional[typing.List[IndividualCommonModelScopeDeserializerRequest]]]]` — When creating a Link Token, you can set permissions for Common Models that will apply to the account that is going to be linked. Any model or field not specified in link token payload will default to existing settings.
@@ -6296,7 +6218,7 @@ The following subset of IETF language tags can be used to configure localization
-**integration_specific_config:** `typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]]` — A JSON object containing integration-specific configuration options. +**integration_specific_config:** `typing.Optional[typing.Dict[str, typing.Any]]` — A JSON object containing integration-specific configuration options.
@@ -6317,7 +6239,7 @@ The following subset of IETF language tags can be used to configure localization
## Ats LinkedAccounts -
client.ats.linked_accounts.list(...) +
client.ats.linked_accounts.list(...) -> PaginatedAccountDetailsAndActionsList
@@ -6345,16 +6267,15 @@ List linked accounts for your organization. ```python from merge import Merge -from merge.resources.ats.resources.linked_accounts import ( - LinkedAccountsListRequestCategory, -) +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.ats.linked_accounts.list( - category=LinkedAccountsListRequestCategory.ACCOUNTING, + category="accounting", cursor="cD0yMDIxLTAxLTA2KzAzJTNBMjQlM0E1My40MzQzMjYlMkIwMCUzQTAw", end_user_email_address="end_user_email_address", end_user_organization_name="end_user_organization_name", @@ -6510,7 +6431,7 @@ Options: `accounting`, `ats`, `crm`, `filestorage`, `hris`, `mktg`, `ticketing`
## Ats Offers -
client.ats.offers.list(...) +
client.ats.offers.list(...) -> PaginatedOfferList
@@ -6537,37 +6458,31 @@ Returns a list of `Offer` objects.
```python -import datetime - from merge import Merge -from merge.resources.ats.resources.offers import OffersListRequestStatus +from merge.environment import MergeEnvironment +import datetime client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.ats.offers.list( application_id="application_id", - created_after=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), - created_before=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), + created_after=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), + created_before=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), creator_id="creator_id", cursor="cD0yMDIxLTAxLTA2KzAzJTNBMjQlM0E1My40MzQzMjYlMkIwMCUzQTAw", include_deleted_data=True, include_remote_data=True, include_shell_data=True, - modified_after=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), - modified_before=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), + modified_after=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), + modified_before=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), page_size=1, + remote_fields="status", remote_id="remote_id", - status=OffersListRequestStatus.APPROVAL_SENT, + show_enum_origins="status", + status="APPROVAL-SENT", ) ``` @@ -6592,7 +6507,7 @@ client.ats.offers.list(
-**created_after:** `typing.Optional[dt.datetime]` — If provided, will only return objects created after this datetime. +**created_after:** `typing.Optional[datetime.datetime]` — If provided, will only return objects created after this datetime.
@@ -6600,7 +6515,7 @@ client.ats.offers.list(
-**created_before:** `typing.Optional[dt.datetime]` — If provided, will only return objects created before this datetime. +**created_before:** `typing.Optional[datetime.datetime]` — If provided, will only return objects created before this datetime.
@@ -6624,12 +6539,7 @@ client.ats.offers.list(
-**expand:** `typing.Optional[ - typing.Union[ - OffersListRequestExpandItem, - typing.Sequence[OffersListRequestExpandItem], - ] -]` — Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces. +**expand:** `typing.Optional[typing.Union[OffersListRequestExpandItem, typing.Sequence[OffersListRequestExpandItem]]]` — Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces.
@@ -6661,7 +6571,7 @@ client.ats.offers.list(
-**modified_after:** `typing.Optional[dt.datetime]` — If provided, only objects synced by Merge after this date time will be returned. +**modified_after:** `typing.Optional[datetime.datetime]` — If provided, only objects synced by Merge after this date time will be returned.
@@ -6669,7 +6579,7 @@ client.ats.offers.list(
-**modified_before:** `typing.Optional[dt.datetime]` — If provided, only objects synced by Merge before this date time will be returned. +**modified_before:** `typing.Optional[datetime.datetime]` — If provided, only objects synced by Merge before this date time will be returned.
@@ -6685,7 +6595,7 @@ client.ats.offers.list(
-**remote_fields:** `typing.Optional[typing.Literal["status"]]` — Deprecated. Use show_enum_origins. +**remote_fields:** `typing.Optional[typing.Literal]` — Deprecated. Use show_enum_origins.
@@ -6701,7 +6611,7 @@ client.ats.offers.list(
-**show_enum_origins:** `typing.Optional[typing.Literal["status"]]` — A comma separated list of enum field names for which you'd like the original values to be returned, instead of Merge's normalized enum values. [Learn more](https://help.merge.dev/en/articles/8950958-show_enum_origins-query-parameter) +**show_enum_origins:** `typing.Optional[typing.Literal]` — A comma separated list of enum field names for which you'd like the original values to be returned, instead of Merge's normalized enum values. [Learn more](https://help.merge.dev/en/articles/8950958-show_enum_origins-query-parameter)
@@ -6741,7 +6651,7 @@ If provided, will only return offers with this status. Options: ('DRAFT', 'APPRO
-
client.ats.offers.retrieve(...) +
client.ats.offers.retrieve(...) -> Offer
@@ -6769,15 +6679,19 @@ Returns an `Offer` object with the given `id`. ```python from merge import Merge +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.ats.offers.retrieve( id="id", include_remote_data=True, include_shell_data=True, + remote_fields="status", + show_enum_origins="status", ) ``` @@ -6802,12 +6716,7 @@ client.ats.offers.retrieve(
-**expand:** `typing.Optional[ - typing.Union[ - OffersRetrieveRequestExpandItem, - typing.Sequence[OffersRetrieveRequestExpandItem], - ] -]` — Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces. +**expand:** `typing.Optional[typing.Union[OffersRetrieveRequestExpandItem, typing.Sequence[OffersRetrieveRequestExpandItem]]]` — Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces.
@@ -6831,7 +6740,7 @@ client.ats.offers.retrieve(
-**remote_fields:** `typing.Optional[typing.Literal["status"]]` — Deprecated. Use show_enum_origins. +**remote_fields:** `typing.Optional[typing.Literal]` — Deprecated. Use show_enum_origins.
@@ -6839,7 +6748,7 @@ client.ats.offers.retrieve(
-**show_enum_origins:** `typing.Optional[typing.Literal["status"]]` — A comma separated list of enum field names for which you'd like the original values to be returned, instead of Merge's normalized enum values. [Learn more](https://help.merge.dev/en/articles/8950958-show_enum_origins-query-parameter) +**show_enum_origins:** `typing.Optional[typing.Literal]` — A comma separated list of enum field names for which you'd like the original values to be returned, instead of Merge's normalized enum values. [Learn more](https://help.merge.dev/en/articles/8950958-show_enum_origins-query-parameter)
@@ -6860,7 +6769,7 @@ client.ats.offers.retrieve(
## Ats Offices -
client.ats.offices.list(...) +
client.ats.offices.list(...) -> PaginatedOfficeList
@@ -6887,31 +6796,24 @@ Returns a list of `Office` objects.
```python -import datetime - from merge import Merge +from merge.environment import MergeEnvironment +import datetime client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.ats.offices.list( - created_after=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), - created_before=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), + created_after=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), + created_before=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), cursor="cD0yMDIxLTAxLTA2KzAzJTNBMjQlM0E1My40MzQzMjYlMkIwMCUzQTAw", include_deleted_data=True, include_remote_data=True, include_shell_data=True, - modified_after=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), - modified_before=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), + modified_after=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), + modified_before=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), page_size=1, remote_id="remote_id", ) @@ -6930,7 +6832,7 @@ client.ats.offices.list(
-**created_after:** `typing.Optional[dt.datetime]` — If provided, will only return objects created after this datetime. +**created_after:** `typing.Optional[datetime.datetime]` — If provided, will only return objects created after this datetime.
@@ -6938,7 +6840,7 @@ client.ats.offices.list(
-**created_before:** `typing.Optional[dt.datetime]` — If provided, will only return objects created before this datetime. +**created_before:** `typing.Optional[datetime.datetime]` — If provided, will only return objects created before this datetime.
@@ -6978,7 +6880,7 @@ client.ats.offices.list(
-**modified_after:** `typing.Optional[dt.datetime]` — If provided, only objects synced by Merge after this date time will be returned. +**modified_after:** `typing.Optional[datetime.datetime]` — If provided, only objects synced by Merge after this date time will be returned.
@@ -6986,7 +6888,7 @@ client.ats.offices.list(
-**modified_before:** `typing.Optional[dt.datetime]` — If provided, only objects synced by Merge before this date time will be returned. +**modified_before:** `typing.Optional[datetime.datetime]` — If provided, only objects synced by Merge before this date time will be returned.
@@ -7022,7 +6924,7 @@ client.ats.offices.list(
-
client.ats.offices.retrieve(...) +
client.ats.offices.retrieve(...) -> Office
@@ -7050,11 +6952,13 @@ Returns an `Office` object with the given `id`. ```python from merge import Merge +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.ats.offices.retrieve( id="id", include_remote_data=True, @@ -7112,7 +7016,7 @@ client.ats.offices.retrieve(
## Ats Passthrough -
client.ats.passthrough.create(...) +
client.ats.passthrough.create(...) -> RemoteResponse
@@ -7140,15 +7044,17 @@ Pull data from an endpoint not currently supported by Merge. ```python from merge import Merge -from merge.resources.ats import DataPassthroughRequest, MethodEnum +from merge.environment import MergeEnvironment +from merge.ats import DataPassthroughRequest client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.ats.passthrough.create( request=DataPassthroughRequest( - method=MethodEnum.GET, + method="GET", path="/scooters", ), ) @@ -7188,7 +7094,7 @@ client.ats.passthrough.create(
## Ats RegenerateKey -
client.ats.regenerate_key.create(...) +
client.ats.regenerate_key.create(...) -> RemoteKey
@@ -7216,11 +7122,13 @@ Exchange remote keys. ```python from merge import Merge +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.ats.regenerate_key.create( name="Remote Deployment Key 1", ) @@ -7260,7 +7168,7 @@ client.ats.regenerate_key.create(
## Ats RejectReasons -
client.ats.reject_reasons.list(...) +
client.ats.reject_reasons.list(...) -> PaginatedRejectReasonList
@@ -7287,31 +7195,24 @@ Returns a list of `RejectReason` objects.
```python -import datetime - from merge import Merge +from merge.environment import MergeEnvironment +import datetime client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.ats.reject_reasons.list( - created_after=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), - created_before=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), + created_after=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), + created_before=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), cursor="cD0yMDIxLTAxLTA2KzAzJTNBMjQlM0E1My40MzQzMjYlMkIwMCUzQTAw", include_deleted_data=True, include_remote_data=True, include_shell_data=True, - modified_after=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), - modified_before=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), + modified_after=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), + modified_before=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), page_size=1, remote_id="remote_id", ) @@ -7330,7 +7231,7 @@ client.ats.reject_reasons.list(
-**created_after:** `typing.Optional[dt.datetime]` — If provided, will only return objects created after this datetime. +**created_after:** `typing.Optional[datetime.datetime]` — If provided, will only return objects created after this datetime.
@@ -7338,7 +7239,7 @@ client.ats.reject_reasons.list(
-**created_before:** `typing.Optional[dt.datetime]` — If provided, will only return objects created before this datetime. +**created_before:** `typing.Optional[datetime.datetime]` — If provided, will only return objects created before this datetime.
@@ -7378,7 +7279,7 @@ client.ats.reject_reasons.list(
-**modified_after:** `typing.Optional[dt.datetime]` — If provided, only objects synced by Merge after this date time will be returned. +**modified_after:** `typing.Optional[datetime.datetime]` — If provided, only objects synced by Merge after this date time will be returned.
@@ -7386,7 +7287,7 @@ client.ats.reject_reasons.list(
-**modified_before:** `typing.Optional[dt.datetime]` — If provided, only objects synced by Merge before this date time will be returned. +**modified_before:** `typing.Optional[datetime.datetime]` — If provided, only objects synced by Merge before this date time will be returned.
@@ -7422,7 +7323,7 @@ client.ats.reject_reasons.list(
-
client.ats.reject_reasons.retrieve(...) +
client.ats.reject_reasons.retrieve(...) -> RejectReason
@@ -7450,11 +7351,13 @@ Returns a `RejectReason` object with the given `id`. ```python from merge import Merge +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.ats.reject_reasons.retrieve( id="id", include_remote_data=True, @@ -7512,7 +7415,7 @@ client.ats.reject_reasons.retrieve(
## Ats Scorecards -
client.ats.scorecards.list(...) +
client.ats.scorecards.list(...) -> PaginatedScorecardList
@@ -7539,36 +7442,31 @@ Returns a list of `Scorecard` objects.
```python -import datetime - from merge import Merge +from merge.environment import MergeEnvironment +import datetime client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.ats.scorecards.list( application_id="application_id", - created_after=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), - created_before=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), + created_after=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), + created_before=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), cursor="cD0yMDIxLTAxLTA2KzAzJTNBMjQlM0E1My40MzQzMjYlMkIwMCUzQTAw", include_deleted_data=True, include_remote_data=True, include_shell_data=True, interview_id="interview_id", interviewer_id="interviewer_id", - modified_after=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), - modified_before=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), + modified_after=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), + modified_before=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), page_size=1, + remote_fields="overall_recommendation", remote_id="remote_id", + show_enum_origins="overall_recommendation", ) ``` @@ -7593,7 +7491,7 @@ client.ats.scorecards.list(
-**created_after:** `typing.Optional[dt.datetime]` — If provided, will only return objects created after this datetime. +**created_after:** `typing.Optional[datetime.datetime]` — If provided, will only return objects created after this datetime.
@@ -7601,7 +7499,7 @@ client.ats.scorecards.list(
-**created_before:** `typing.Optional[dt.datetime]` — If provided, will only return objects created before this datetime. +**created_before:** `typing.Optional[datetime.datetime]` — If provided, will only return objects created before this datetime.
@@ -7617,12 +7515,7 @@ client.ats.scorecards.list(
-**expand:** `typing.Optional[ - typing.Union[ - ScorecardsListRequestExpandItem, - typing.Sequence[ScorecardsListRequestExpandItem], - ] -]` — Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces. +**expand:** `typing.Optional[typing.Union[ScorecardsListRequestExpandItem, typing.Sequence[ScorecardsListRequestExpandItem]]]` — Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces.
@@ -7670,7 +7563,7 @@ client.ats.scorecards.list(
-**modified_after:** `typing.Optional[dt.datetime]` — If provided, only objects synced by Merge after this date time will be returned. +**modified_after:** `typing.Optional[datetime.datetime]` — If provided, only objects synced by Merge after this date time will be returned.
@@ -7678,7 +7571,7 @@ client.ats.scorecards.list(
-**modified_before:** `typing.Optional[dt.datetime]` — If provided, only objects synced by Merge before this date time will be returned. +**modified_before:** `typing.Optional[datetime.datetime]` — If provided, only objects synced by Merge before this date time will be returned.
@@ -7694,7 +7587,7 @@ client.ats.scorecards.list(
-**remote_fields:** `typing.Optional[typing.Literal["overall_recommendation"]]` — Deprecated. Use show_enum_origins. +**remote_fields:** `typing.Optional[typing.Literal]` — Deprecated. Use show_enum_origins.
@@ -7710,7 +7603,7 @@ client.ats.scorecards.list(
-**show_enum_origins:** `typing.Optional[typing.Literal["overall_recommendation"]]` — A comma separated list of enum field names for which you'd like the original values to be returned, instead of Merge's normalized enum values. [Learn more](https://help.merge.dev/en/articles/8950958-show_enum_origins-query-parameter) +**show_enum_origins:** `typing.Optional[typing.Literal]` — A comma separated list of enum field names for which you'd like the original values to be returned, instead of Merge's normalized enum values. [Learn more](https://help.merge.dev/en/articles/8950958-show_enum_origins-query-parameter)
@@ -7730,7 +7623,7 @@ client.ats.scorecards.list(
-
client.ats.scorecards.retrieve(...) +
client.ats.scorecards.retrieve(...) -> Scorecard
@@ -7758,15 +7651,19 @@ Returns a `Scorecard` object with the given `id`. ```python from merge import Merge +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.ats.scorecards.retrieve( id="id", include_remote_data=True, include_shell_data=True, + remote_fields="overall_recommendation", + show_enum_origins="overall_recommendation", ) ``` @@ -7791,12 +7688,7 @@ client.ats.scorecards.retrieve(
-**expand:** `typing.Optional[ - typing.Union[ - ScorecardsRetrieveRequestExpandItem, - typing.Sequence[ScorecardsRetrieveRequestExpandItem], - ] -]` — Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces. +**expand:** `typing.Optional[typing.Union[ScorecardsRetrieveRequestExpandItem, typing.Sequence[ScorecardsRetrieveRequestExpandItem]]]` — Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces.
@@ -7820,7 +7712,7 @@ client.ats.scorecards.retrieve(
-**remote_fields:** `typing.Optional[typing.Literal["overall_recommendation"]]` — Deprecated. Use show_enum_origins. +**remote_fields:** `typing.Optional[typing.Literal]` — Deprecated. Use show_enum_origins.
@@ -7828,7 +7720,7 @@ client.ats.scorecards.retrieve(
-**show_enum_origins:** `typing.Optional[typing.Literal["overall_recommendation"]]` — A comma separated list of enum field names for which you'd like the original values to be returned, instead of Merge's normalized enum values. [Learn more](https://help.merge.dev/en/articles/8950958-show_enum_origins-query-parameter) +**show_enum_origins:** `typing.Optional[typing.Literal]` — A comma separated list of enum field names for which you'd like the original values to be returned, instead of Merge's normalized enum values. [Learn more](https://help.merge.dev/en/articles/8950958-show_enum_origins-query-parameter)
@@ -7849,7 +7741,7 @@ client.ats.scorecards.retrieve(
## Ats SyncStatus -
client.ats.sync_status.list(...) +
client.ats.sync_status.list(...) -> PaginatedSyncStatusList
@@ -7877,11 +7769,13 @@ Get sync status for the current sync and the most recently finished sync. `last_ ```python from merge import Merge +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.ats.sync_status.list( cursor="cD0yMDIxLTAxLTA2KzAzJTNBMjQlM0E1My40MzQzMjYlMkIwMCUzQTAw", page_size=1, @@ -7930,7 +7824,7 @@ client.ats.sync_status.list(
## Ats ForceResync -
client.ats.force_resync.sync_status_resync_create() +
client.ats.force_resync.sync_status_resync_create() -> typing.List[SyncStatus]
@@ -7958,11 +7852,13 @@ Force re-sync of all models. This endpoint is available for monthly, quarterly, ```python from merge import Merge +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.ats.force_resync.sync_status_resync_create() ``` @@ -7992,7 +7888,7 @@ client.ats.force_resync.sync_status_resync_create()
## Ats Tags -
client.ats.tags.list(...) +
client.ats.tags.list(...) -> PaginatedTagList
@@ -8019,31 +7915,24 @@ Returns a list of `Tag` objects.
```python -import datetime - from merge import Merge +from merge.environment import MergeEnvironment +import datetime client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.ats.tags.list( - created_after=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), - created_before=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), + created_after=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), + created_before=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), cursor="cD0yMDIxLTAxLTA2KzAzJTNBMjQlM0E1My40MzQzMjYlMkIwMCUzQTAw", include_deleted_data=True, include_remote_data=True, include_shell_data=True, - modified_after=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), - modified_before=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), + modified_after=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), + modified_before=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), page_size=1, remote_id="remote_id", ) @@ -8062,7 +7951,7 @@ client.ats.tags.list(
-**created_after:** `typing.Optional[dt.datetime]` — If provided, will only return objects created after this datetime. +**created_after:** `typing.Optional[datetime.datetime]` — If provided, will only return objects created after this datetime.
@@ -8070,7 +7959,7 @@ client.ats.tags.list(
-**created_before:** `typing.Optional[dt.datetime]` — If provided, will only return objects created before this datetime. +**created_before:** `typing.Optional[datetime.datetime]` — If provided, will only return objects created before this datetime.
@@ -8110,7 +7999,7 @@ client.ats.tags.list(
-**modified_after:** `typing.Optional[dt.datetime]` — If provided, only objects synced by Merge after this date time will be returned. +**modified_after:** `typing.Optional[datetime.datetime]` — If provided, only objects synced by Merge after this date time will be returned.
@@ -8118,7 +8007,7 @@ client.ats.tags.list(
-**modified_before:** `typing.Optional[dt.datetime]` — If provided, only objects synced by Merge before this date time will be returned. +**modified_before:** `typing.Optional[datetime.datetime]` — If provided, only objects synced by Merge before this date time will be returned.
@@ -8155,7 +8044,7 @@ client.ats.tags.list(
## Ats Users -
client.ats.users.list(...) +
client.ats.users.list(...) -> PaginatedRemoteUserList
@@ -8182,34 +8071,29 @@ Returns a list of `RemoteUser` objects.
```python -import datetime - from merge import Merge +from merge.environment import MergeEnvironment +import datetime client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.ats.users.list( - created_after=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), - created_before=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), + created_after=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), + created_before=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), cursor="cD0yMDIxLTAxLTA2KzAzJTNBMjQlM0E1My40MzQzMjYlMkIwMCUzQTAw", email="email", include_deleted_data=True, include_remote_data=True, include_shell_data=True, - modified_after=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), - modified_before=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), + modified_after=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), + modified_before=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), page_size=1, + remote_fields="access_role", remote_id="remote_id", + show_enum_origins="access_role", ) ``` @@ -8226,7 +8110,7 @@ client.ats.users.list(
-**created_after:** `typing.Optional[dt.datetime]` — If provided, will only return objects created after this datetime. +**created_after:** `typing.Optional[datetime.datetime]` — If provided, will only return objects created after this datetime.
@@ -8234,7 +8118,7 @@ client.ats.users.list(
-**created_before:** `typing.Optional[dt.datetime]` — If provided, will only return objects created before this datetime. +**created_before:** `typing.Optional[datetime.datetime]` — If provided, will only return objects created before this datetime.
@@ -8282,7 +8166,7 @@ client.ats.users.list(
-**modified_after:** `typing.Optional[dt.datetime]` — If provided, only objects synced by Merge after this date time will be returned. +**modified_after:** `typing.Optional[datetime.datetime]` — If provided, only objects synced by Merge after this date time will be returned.
@@ -8290,7 +8174,7 @@ client.ats.users.list(
-**modified_before:** `typing.Optional[dt.datetime]` — If provided, only objects synced by Merge before this date time will be returned. +**modified_before:** `typing.Optional[datetime.datetime]` — If provided, only objects synced by Merge before this date time will be returned.
@@ -8306,7 +8190,7 @@ client.ats.users.list(
-**remote_fields:** `typing.Optional[typing.Literal["access_role"]]` — Deprecated. Use show_enum_origins. +**remote_fields:** `typing.Optional[typing.Literal]` — Deprecated. Use show_enum_origins.
@@ -8322,7 +8206,7 @@ client.ats.users.list(
-**show_enum_origins:** `typing.Optional[typing.Literal["access_role"]]` — A comma separated list of enum field names for which you'd like the original values to be returned, instead of Merge's normalized enum values. [Learn more](https://help.merge.dev/en/articles/8950958-show_enum_origins-query-parameter) +**show_enum_origins:** `typing.Optional[typing.Literal]` — A comma separated list of enum field names for which you'd like the original values to be returned, instead of Merge's normalized enum values. [Learn more](https://help.merge.dev/en/articles/8950958-show_enum_origins-query-parameter)
@@ -8342,7 +8226,7 @@ client.ats.users.list(
-
client.ats.users.retrieve(...) +
client.ats.users.retrieve(...) -> RemoteUser
@@ -8370,15 +8254,19 @@ Returns a `RemoteUser` object with the given `id`. ```python from merge import Merge +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.ats.users.retrieve( id="id", include_remote_data=True, include_shell_data=True, + remote_fields="access_role", + show_enum_origins="access_role", ) ``` @@ -8419,7 +8307,7 @@ client.ats.users.retrieve(
-**remote_fields:** `typing.Optional[typing.Literal["access_role"]]` — Deprecated. Use show_enum_origins. +**remote_fields:** `typing.Optional[typing.Literal]` — Deprecated. Use show_enum_origins.
@@ -8427,7 +8315,7 @@ client.ats.users.retrieve(
-**show_enum_origins:** `typing.Optional[typing.Literal["access_role"]]` — A comma separated list of enum field names for which you'd like the original values to be returned, instead of Merge's normalized enum values. [Learn more](https://help.merge.dev/en/articles/8950958-show_enum_origins-query-parameter) +**show_enum_origins:** `typing.Optional[typing.Literal]` — A comma separated list of enum field names for which you'd like the original values to be returned, instead of Merge's normalized enum values. [Learn more](https://help.merge.dev/en/articles/8950958-show_enum_origins-query-parameter)
@@ -8448,7 +8336,7 @@ client.ats.users.retrieve(
## Ats WebhookReceivers -
client.ats.webhook_receivers.list() +
client.ats.webhook_receivers.list() -> typing.List[WebhookReceiver]
@@ -8476,11 +8364,13 @@ Returns a list of `WebhookReceiver` objects. ```python from merge import Merge +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.ats.webhook_receivers.list() ``` @@ -8509,7 +8399,7 @@ client.ats.webhook_receivers.list()
-
client.ats.webhook_receivers.create(...) +
client.ats.webhook_receivers.create(...) -> WebhookReceiver
@@ -8537,11 +8427,13 @@ Creates a `WebhookReceiver` object with the given values. ```python from merge import Merge +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.ats.webhook_receivers.create( event="event", is_active=True, @@ -8598,7 +8490,7 @@ client.ats.webhook_receivers.create(
## Accounting AccountDetails -
client.accounting.account_details.retrieve() +
client.accounting.account_details.retrieve() -> AccountDetails
@@ -8626,11 +8518,13 @@ Get details for a linked account. ```python from merge import Merge +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.accounting.account_details.retrieve() ``` @@ -8660,7 +8554,7 @@ client.accounting.account_details.retrieve()
## Accounting AccountToken -
client.accounting.account_token.retrieve(...) +
client.accounting.account_token.retrieve(...) -> AccountToken
@@ -8688,11 +8582,13 @@ Returns the account token for the end user with the provided public token. ```python from merge import Merge +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.accounting.account_token.retrieve( public_token="public_token", ) @@ -8731,7 +8627,7 @@ client.accounting.account_token.retrieve(
-
client.accounting.account_token.regenerate_create() +
client.accounting.account_token.regenerate_create() -> RegenerateAccountToken
@@ -8759,11 +8655,13 @@ Exchange Linked Account account tokens. ```python from merge import Merge +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.accounting.account_token.regenerate_create() ``` @@ -8793,7 +8691,7 @@ client.accounting.account_token.regenerate_create()
## Accounting AccountingPeriods -
client.accounting.accounting_periods.list(...) +
client.accounting.accounting_periods.list(...) -> PaginatedAccountingPeriodList
@@ -8821,11 +8719,13 @@ Returns a list of `AccountingPeriod` objects. ```python from merge import Merge +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.accounting.accounting_periods.list( cursor="cD0yMDIxLTAxLTA2KzAzJTNBMjQlM0E1My40MzQzMjYlMkIwMCUzQTAw", include_deleted_data=True, @@ -8900,7 +8800,7 @@ client.accounting.accounting_periods.list(
-
client.accounting.accounting_periods.retrieve(...) +
client.accounting.accounting_periods.retrieve(...) -> AccountingPeriod
@@ -8928,11 +8828,13 @@ Returns an `AccountingPeriod` object with the given `id`. ```python from merge import Merge +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.accounting.accounting_periods.retrieve( id="id", include_remote_data=True, @@ -8990,7 +8892,7 @@ client.accounting.accounting_periods.retrieve(
## Accounting Accounts -
client.accounting.accounts.list(...) +
client.accounting.accounts.list(...) -> PaginatedAccountList
@@ -9017,46 +8919,33 @@ Returns a list of `Account` objects.
```python -import datetime - from merge import Merge -from merge.resources.accounting.resources.accounts import ( - AccountsListRequestClassification, - AccountsListRequestRemoteFields, - AccountsListRequestShowEnumOrigins, - AccountsListRequestStatus, -) +from merge.environment import MergeEnvironment +import datetime client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.accounting.accounts.list( account_type="account_type", - classification=AccountsListRequestClassification.EMPTY, + classification="", company_id="company_id", - created_after=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), - created_before=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), + created_after=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), + created_before=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), cursor="cD0yMDIxLTAxLTA2KzAzJTNBMjQlM0E1My40MzQzMjYlMkIwMCUzQTAw", include_deleted_data=True, include_remote_data=True, include_shell_data=True, - modified_after=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), - modified_before=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), + modified_after=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), + modified_before=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), name="name", page_size=1, - remote_fields=AccountsListRequestRemoteFields.CLASSIFICATION, + remote_fields="classification", remote_id="remote_id", - show_enum_origins=AccountsListRequestShowEnumOrigins.CLASSIFICATION, - status=AccountsListRequestStatus.EMPTY, + show_enum_origins="classification", + status="", ) ``` @@ -9097,7 +8986,7 @@ client.accounting.accounts.list(
-**created_after:** `typing.Optional[dt.datetime]` — If provided, will only return objects created after this datetime. +**created_after:** `typing.Optional[datetime.datetime]` — If provided, will only return objects created after this datetime.
@@ -9105,7 +8994,7 @@ client.accounting.accounts.list(
-**created_before:** `typing.Optional[dt.datetime]` — If provided, will only return objects created before this datetime. +**created_before:** `typing.Optional[datetime.datetime]` — If provided, will only return objects created before this datetime.
@@ -9121,11 +9010,7 @@ client.accounting.accounts.list(
-**expand:** `typing.Optional[ - typing.Union[ - typing.Literal["company"], typing.Sequence[typing.Literal["company"]] - ] -]` — Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces. +**expand:** `typing.Optional[typing.Union[typing.Literal, typing.Sequence[typing.Literal]]]` — Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces.
@@ -9157,7 +9042,7 @@ client.accounting.accounts.list(
-**modified_after:** `typing.Optional[dt.datetime]` — If provided, only objects synced by Merge after this date time will be returned. +**modified_after:** `typing.Optional[datetime.datetime]` — If provided, only objects synced by Merge after this date time will be returned.
@@ -9165,7 +9050,7 @@ client.accounting.accounts.list(
-**modified_before:** `typing.Optional[dt.datetime]` — If provided, only objects synced by Merge before this date time will be returned. +**modified_before:** `typing.Optional[datetime.datetime]` — If provided, only objects synced by Merge before this date time will be returned.
@@ -9233,7 +9118,7 @@ client.accounting.accounts.list(
-
client.accounting.accounts.create(...) +
client.accounting.accounts.create(...) -> AccountResponse
@@ -9261,12 +9146,14 @@ Creates an `Account` object with the given values. ```python from merge import Merge -from merge.resources.accounting import AccountRequest +from merge.environment import MergeEnvironment +from merge.accounting import AccountRequest client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.accounting.accounts.create( is_debug_mode=True, run_async=True, @@ -9323,7 +9210,7 @@ client.accounting.accounts.create(
-
client.accounting.accounts.retrieve(...) +
client.accounting.accounts.retrieve(...) -> Account
@@ -9351,21 +9238,19 @@ Returns an `Account` object with the given `id`. ```python from merge import Merge -from merge.resources.accounting.resources.accounts import ( - AccountsRetrieveRequestRemoteFields, - AccountsRetrieveRequestShowEnumOrigins, -) +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.accounting.accounts.retrieve( id="id", include_remote_data=True, include_shell_data=True, - remote_fields=AccountsRetrieveRequestRemoteFields.CLASSIFICATION, - show_enum_origins=AccountsRetrieveRequestShowEnumOrigins.CLASSIFICATION, + remote_fields="classification", + show_enum_origins="classification", ) ``` @@ -9390,11 +9275,7 @@ client.accounting.accounts.retrieve(
-**expand:** `typing.Optional[ - typing.Union[ - typing.Literal["company"], typing.Sequence[typing.Literal["company"]] - ] -]` — Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces. +**expand:** `typing.Optional[typing.Union[typing.Literal, typing.Sequence[typing.Literal]]]` — Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces.
@@ -9446,7 +9327,7 @@ client.accounting.accounts.retrieve(
-
client.accounting.accounts.meta_post_retrieve() +
client.accounting.accounts.meta_post_retrieve() -> MetaResponse
@@ -9474,11 +9355,13 @@ Returns metadata for `Account` POSTs. ```python from merge import Merge +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.accounting.accounts.meta_post_retrieve() ``` @@ -9508,7 +9391,7 @@ client.accounting.accounts.meta_post_retrieve()
## Accounting Addresses -
client.accounting.addresses.retrieve(...) +
client.accounting.addresses.retrieve(...) -> Address
@@ -9536,15 +9419,19 @@ Returns an `Address` object with the given `id`. ```python from merge import Merge +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.accounting.addresses.retrieve( id="id", include_remote_data=True, include_shell_data=True, + remote_fields="type", + show_enum_origins="type", ) ``` @@ -9585,7 +9472,7 @@ client.accounting.addresses.retrieve(
-**remote_fields:** `typing.Optional[typing.Literal["type"]]` — Deprecated. Use show_enum_origins. +**remote_fields:** `typing.Optional[typing.Literal]` — Deprecated. Use show_enum_origins.
@@ -9593,7 +9480,7 @@ client.accounting.addresses.retrieve(
-**show_enum_origins:** `typing.Optional[typing.Literal["type"]]` — A comma separated list of enum field names for which you'd like the original values to be returned, instead of Merge's normalized enum values. [Learn more](https://help.merge.dev/en/articles/8950958-show_enum_origins-query-parameter) +**show_enum_origins:** `typing.Optional[typing.Literal]` — A comma separated list of enum field names for which you'd like the original values to be returned, instead of Merge's normalized enum values. [Learn more](https://help.merge.dev/en/articles/8950958-show_enum_origins-query-parameter)
@@ -9614,7 +9501,7 @@ client.accounting.addresses.retrieve(
## Accounting AsyncPassthrough -
client.accounting.async_passthrough.create(...) +
client.accounting.async_passthrough.create(...) -> AsyncPassthroughReciept
@@ -9642,15 +9529,17 @@ Asynchronously pull data from an endpoint not currently supported by Merge. ```python from merge import Merge -from merge.resources.accounting import DataPassthroughRequest, MethodEnum +from merge.environment import MergeEnvironment +from merge.accounting import DataPassthroughRequest client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.accounting.async_passthrough.create( request=DataPassthroughRequest( - method=MethodEnum.GET, + method="GET", path="/scooters", ), ) @@ -9689,7 +9578,7 @@ client.accounting.async_passthrough.create(
-
client.accounting.async_passthrough.retrieve(...) +
client.accounting.async_passthrough.retrieve(...) -> AsyncPassthroughRetrieveResponse
@@ -9717,11 +9606,13 @@ Retrieves data from earlier async-passthrough POST request ```python from merge import Merge +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.accounting.async_passthrough.retrieve( async_passthrough_receipt_id="async_passthrough_receipt_id", ) @@ -9761,7 +9652,7 @@ client.accounting.async_passthrough.retrieve(
## Accounting AsyncTasks -
client.accounting.async_tasks.retrieve(...) +
client.accounting.async_tasks.retrieve(...) -> AsyncPostTask
@@ -9789,11 +9680,13 @@ Returns an `AsyncPostTask` object with the given `id`. ```python from merge import Merge +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.accounting.async_tasks.retrieve( id="id", ) @@ -9833,7 +9726,7 @@ client.accounting.async_tasks.retrieve(
## Accounting Attachments -
client.accounting.attachments.list(...) +
client.accounting.attachments.list(...) -> PaginatedAccountingAttachmentList
@@ -9860,32 +9753,25 @@ Returns a list of `AccountingAttachment` objects.
```python -import datetime - from merge import Merge +from merge.environment import MergeEnvironment +import datetime client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.accounting.attachments.list( company_id="company_id", - created_after=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), - created_before=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), + created_after=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), + created_before=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), cursor="cD0yMDIxLTAxLTA2KzAzJTNBMjQlM0E1My40MzQzMjYlMkIwMCUzQTAw", include_deleted_data=True, include_remote_data=True, include_shell_data=True, - modified_after=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), - modified_before=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), + modified_after=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), + modified_before=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), page_size=1, remote_id="remote_id", ) @@ -9912,7 +9798,7 @@ client.accounting.attachments.list(
-**created_after:** `typing.Optional[dt.datetime]` — If provided, will only return objects created after this datetime. +**created_after:** `typing.Optional[datetime.datetime]` — If provided, will only return objects created after this datetime.
@@ -9920,7 +9806,7 @@ client.accounting.attachments.list(
-**created_before:** `typing.Optional[dt.datetime]` — If provided, will only return objects created before this datetime. +**created_before:** `typing.Optional[datetime.datetime]` — If provided, will only return objects created before this datetime.
@@ -9960,7 +9846,7 @@ client.accounting.attachments.list(
-**modified_after:** `typing.Optional[dt.datetime]` — If provided, only objects synced by Merge after this date time will be returned. +**modified_after:** `typing.Optional[datetime.datetime]` — If provided, only objects synced by Merge after this date time will be returned.
@@ -9968,7 +9854,7 @@ client.accounting.attachments.list(
-**modified_before:** `typing.Optional[dt.datetime]` — If provided, only objects synced by Merge before this date time will be returned. +**modified_before:** `typing.Optional[datetime.datetime]` — If provided, only objects synced by Merge before this date time will be returned.
@@ -10004,7 +9890,7 @@ client.accounting.attachments.list(
-
client.accounting.attachments.create(...) +
client.accounting.attachments.create(...) -> AccountingAttachmentResponse
@@ -10032,12 +9918,14 @@ Creates an `AccountingAttachment` object with the given values. ```python from merge import Merge -from merge.resources.accounting import AccountingAttachmentRequest +from merge.environment import MergeEnvironment +from merge.accounting import AccountingAttachmentRequest client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.accounting.attachments.create( is_debug_mode=True, run_async=True, @@ -10094,7 +9982,7 @@ client.accounting.attachments.create(
-
client.accounting.attachments.retrieve(...) +
client.accounting.attachments.retrieve(...) -> AccountingAttachment
@@ -10122,11 +10010,13 @@ Returns an `AccountingAttachment` object with the given `id`. ```python from merge import Merge +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.accounting.attachments.retrieve( id="id", include_remote_data=True, @@ -10183,7 +10073,7 @@ client.accounting.attachments.retrieve(
-
client.accounting.attachments.meta_post_retrieve() +
client.accounting.attachments.meta_post_retrieve() -> MetaResponse
@@ -10211,11 +10101,13 @@ Returns metadata for `AccountingAttachment` POSTs. ```python from merge import Merge +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.accounting.attachments.meta_post_retrieve() ``` @@ -10245,7 +10137,7 @@ client.accounting.attachments.meta_post_retrieve()
## Accounting AuditTrail -
client.accounting.audit_trail.list(...) +
client.accounting.audit_trail.list(...) -> PaginatedAuditLogEventList
@@ -10273,11 +10165,13 @@ Gets a list of audit trail events. ```python from merge import Merge +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.accounting.audit_trail.list( cursor="cD0yMDIxLTAxLTA2KzAzJTNBMjQlM0E1My40MzQzMjYlMkIwMCUzQTAw", end_date="end_date", @@ -10362,7 +10256,7 @@ client.accounting.audit_trail.list(
## Accounting AvailableActions -
client.accounting.available_actions.retrieve() +
client.accounting.available_actions.retrieve() -> AvailableActions
@@ -10390,11 +10284,13 @@ Returns a list of models and actions available for an account. ```python from merge import Merge +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.accounting.available_actions.retrieve() ``` @@ -10424,7 +10320,7 @@ client.accounting.available_actions.retrieve()
## Accounting BalanceSheets -
client.accounting.balance_sheets.list(...) +
client.accounting.balance_sheets.list(...) -> PaginatedBalanceSheetList
@@ -10451,32 +10347,25 @@ Returns a list of `BalanceSheet` objects.
```python -import datetime - from merge import Merge +from merge.environment import MergeEnvironment +import datetime client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.accounting.balance_sheets.list( company_id="company_id", - created_after=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), - created_before=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), + created_after=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), + created_before=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), cursor="cD0yMDIxLTAxLTA2KzAzJTNBMjQlM0E1My40MzQzMjYlMkIwMCUzQTAw", include_deleted_data=True, include_remote_data=True, include_shell_data=True, - modified_after=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), - modified_before=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), + modified_after=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), + modified_before=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), page_size=1, remote_id="remote_id", ) @@ -10503,7 +10392,7 @@ client.accounting.balance_sheets.list(
-**created_after:** `typing.Optional[dt.datetime]` — If provided, will only return objects created after this datetime. +**created_after:** `typing.Optional[datetime.datetime]` — If provided, will only return objects created after this datetime.
@@ -10511,7 +10400,7 @@ client.accounting.balance_sheets.list(
-**created_before:** `typing.Optional[dt.datetime]` — If provided, will only return objects created before this datetime. +**created_before:** `typing.Optional[datetime.datetime]` — If provided, will only return objects created before this datetime.
@@ -10527,11 +10416,7 @@ client.accounting.balance_sheets.list(
-**expand:** `typing.Optional[ - typing.Union[ - typing.Literal["company"], typing.Sequence[typing.Literal["company"]] - ] -]` — Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces. +**expand:** `typing.Optional[typing.Union[typing.Literal, typing.Sequence[typing.Literal]]]` — Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces.
@@ -10563,7 +10448,7 @@ client.accounting.balance_sheets.list(
-**modified_after:** `typing.Optional[dt.datetime]` — If provided, only objects synced by Merge after this date time will be returned. +**modified_after:** `typing.Optional[datetime.datetime]` — If provided, only objects synced by Merge after this date time will be returned.
@@ -10571,7 +10456,7 @@ client.accounting.balance_sheets.list(
-**modified_before:** `typing.Optional[dt.datetime]` — If provided, only objects synced by Merge before this date time will be returned. +**modified_before:** `typing.Optional[datetime.datetime]` — If provided, only objects synced by Merge before this date time will be returned.
@@ -10607,7 +10492,7 @@ client.accounting.balance_sheets.list(
-
client.accounting.balance_sheets.retrieve(...) +
client.accounting.balance_sheets.retrieve(...) -> BalanceSheet
@@ -10635,11 +10520,13 @@ Returns a `BalanceSheet` object with the given `id`. ```python from merge import Merge +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.accounting.balance_sheets.retrieve( id="id", include_remote_data=True, @@ -10668,11 +10555,7 @@ client.accounting.balance_sheets.retrieve(
-**expand:** `typing.Optional[ - typing.Union[ - typing.Literal["company"], typing.Sequence[typing.Literal["company"]] - ] -]` — Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces. +**expand:** `typing.Optional[typing.Union[typing.Literal, typing.Sequence[typing.Literal]]]` — Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces.
@@ -10709,7 +10592,7 @@ client.accounting.balance_sheets.retrieve(
## Accounting BankFeedAccounts -
client.accounting.bank_feed_accounts.list(...) +
client.accounting.bank_feed_accounts.list(...) -> PaginatedBankFeedAccountList
@@ -10737,11 +10620,13 @@ Returns a list of `BankFeedAccount` objects. ```python from merge import Merge +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.accounting.bank_feed_accounts.list( cursor="cD0yMDIxLTAxLTA2KzAzJTNBMjQlM0E1My40MzQzMjYlMkIwMCUzQTAw", include_deleted_data=True, @@ -10816,7 +10701,7 @@ client.accounting.bank_feed_accounts.list(
-
client.accounting.bank_feed_accounts.create(...) +
client.accounting.bank_feed_accounts.create(...) -> BankFeedAccountResponse
@@ -10844,12 +10729,14 @@ Creates a `BankFeedAccount` object with the given values. ```python from merge import Merge -from merge.resources.accounting import BankFeedAccountRequest +from merge.environment import MergeEnvironment +from merge.accounting import BankFeedAccountRequest client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.accounting.bank_feed_accounts.create( is_debug_mode=True, run_async=True, @@ -10906,7 +10793,7 @@ client.accounting.bank_feed_accounts.create(
-
client.accounting.bank_feed_accounts.retrieve(...) +
client.accounting.bank_feed_accounts.retrieve(...) -> BankFeedAccount
@@ -10934,11 +10821,13 @@ Returns a `BankFeedAccount` object with the given `id`. ```python from merge import Merge +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.accounting.bank_feed_accounts.retrieve( id="id", include_remote_data=True, @@ -10995,7 +10884,7 @@ client.accounting.bank_feed_accounts.retrieve(
-
client.accounting.bank_feed_accounts.meta_post_retrieve() +
client.accounting.bank_feed_accounts.meta_post_retrieve() -> MetaResponse
@@ -11023,11 +10912,13 @@ Returns metadata for `BankFeedAccount` POSTs. ```python from merge import Merge +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.accounting.bank_feed_accounts.meta_post_retrieve() ``` @@ -11057,7 +10948,7 @@ client.accounting.bank_feed_accounts.meta_post_retrieve()
## Accounting BankFeedTransactions -
client.accounting.bank_feed_transactions.list(...) +
client.accounting.bank_feed_transactions.list(...) -> PaginatedBankFeedTransactionList
@@ -11084,32 +10975,25 @@ Returns a list of `BankFeedTransaction` objects.
```python -import datetime - from merge import Merge +from merge.environment import MergeEnvironment +import datetime client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.accounting.bank_feed_transactions.list( - created_after=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), - created_before=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), + created_after=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), + created_before=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), cursor="cD0yMDIxLTAxLTA2KzAzJTNBMjQlM0E1My40MzQzMjYlMkIwMCUzQTAw", include_deleted_data=True, include_remote_data=True, include_shell_data=True, is_processed=True, - modified_after=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), - modified_before=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), + modified_after=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), + modified_before=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), page_size=1, remote_id="remote_id", ) @@ -11128,7 +11012,7 @@ client.accounting.bank_feed_transactions.list(
-**created_after:** `typing.Optional[dt.datetime]` — If provided, will only return objects created after this datetime. +**created_after:** `typing.Optional[datetime.datetime]` — If provided, will only return objects created after this datetime.
@@ -11136,7 +11020,7 @@ client.accounting.bank_feed_transactions.list(
-**created_before:** `typing.Optional[dt.datetime]` — If provided, will only return objects created before this datetime. +**created_before:** `typing.Optional[datetime.datetime]` — If provided, will only return objects created before this datetime.
@@ -11152,12 +11036,7 @@ client.accounting.bank_feed_transactions.list(
-**expand:** `typing.Optional[ - typing.Union[ - typing.Literal["bank_feed_account"], - typing.Sequence[typing.Literal["bank_feed_account"]], - ] -]` — Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces. +**expand:** `typing.Optional[typing.Union[typing.Literal, typing.Sequence[typing.Literal]]]` — Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces.
@@ -11197,7 +11076,7 @@ client.accounting.bank_feed_transactions.list(
-**modified_after:** `typing.Optional[dt.datetime]` — If provided, only objects synced by Merge after this date time will be returned. +**modified_after:** `typing.Optional[datetime.datetime]` — If provided, only objects synced by Merge after this date time will be returned.
@@ -11205,7 +11084,7 @@ client.accounting.bank_feed_transactions.list(
-**modified_before:** `typing.Optional[dt.datetime]` — If provided, only objects synced by Merge before this date time will be returned. +**modified_before:** `typing.Optional[datetime.datetime]` — If provided, only objects synced by Merge before this date time will be returned.
@@ -11241,7 +11120,7 @@ client.accounting.bank_feed_transactions.list(
-
client.accounting.bank_feed_transactions.create(...) +
client.accounting.bank_feed_transactions.create(...) -> BankFeedTransactionResponse
@@ -11269,12 +11148,14 @@ Creates a `BankFeedTransaction` object with the given values. ```python from merge import Merge -from merge.resources.accounting import BankFeedTransactionRequestRequest +from merge.environment import MergeEnvironment +from merge.accounting import BankFeedTransactionRequestRequest client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.accounting.bank_feed_transactions.create( is_debug_mode=True, run_async=True, @@ -11331,7 +11212,7 @@ client.accounting.bank_feed_transactions.create(
-
client.accounting.bank_feed_transactions.retrieve(...) +
client.accounting.bank_feed_transactions.retrieve(...) -> BankFeedTransaction
@@ -11359,11 +11240,13 @@ Returns a `BankFeedTransaction` object with the given `id`. ```python from merge import Merge +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.accounting.bank_feed_transactions.retrieve( id="id", include_remote_data=True, @@ -11392,12 +11275,7 @@ client.accounting.bank_feed_transactions.retrieve(
-**expand:** `typing.Optional[ - typing.Union[ - typing.Literal["bank_feed_account"], - typing.Sequence[typing.Literal["bank_feed_account"]], - ] -]` — Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces. +**expand:** `typing.Optional[typing.Union[typing.Literal, typing.Sequence[typing.Literal]]]` — Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces.
@@ -11433,7 +11311,7 @@ client.accounting.bank_feed_transactions.retrieve(
-
client.accounting.bank_feed_transactions.meta_post_retrieve() +
client.accounting.bank_feed_transactions.meta_post_retrieve() -> MetaResponse
@@ -11461,11 +11339,13 @@ Returns metadata for `BankFeedTransaction` POSTs. ```python from merge import Merge +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.accounting.bank_feed_transactions.meta_post_retrieve() ``` @@ -11495,7 +11375,7 @@ client.accounting.bank_feed_transactions.meta_post_retrieve()
## Accounting CashFlowStatements -
client.accounting.cash_flow_statements.list(...) +
client.accounting.cash_flow_statements.list(...) -> PaginatedCashFlowStatementList
@@ -11522,32 +11402,25 @@ Returns a list of `CashFlowStatement` objects.
```python -import datetime - from merge import Merge +from merge.environment import MergeEnvironment +import datetime client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.accounting.cash_flow_statements.list( company_id="company_id", - created_after=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), - created_before=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), + created_after=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), + created_before=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), cursor="cD0yMDIxLTAxLTA2KzAzJTNBMjQlM0E1My40MzQzMjYlMkIwMCUzQTAw", include_deleted_data=True, include_remote_data=True, include_shell_data=True, - modified_after=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), - modified_before=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), + modified_after=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), + modified_before=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), page_size=1, remote_id="remote_id", ) @@ -11574,7 +11447,7 @@ client.accounting.cash_flow_statements.list(
-**created_after:** `typing.Optional[dt.datetime]` — If provided, will only return objects created after this datetime. +**created_after:** `typing.Optional[datetime.datetime]` — If provided, will only return objects created after this datetime.
@@ -11582,7 +11455,7 @@ client.accounting.cash_flow_statements.list(
-**created_before:** `typing.Optional[dt.datetime]` — If provided, will only return objects created before this datetime. +**created_before:** `typing.Optional[datetime.datetime]` — If provided, will only return objects created before this datetime.
@@ -11598,11 +11471,7 @@ client.accounting.cash_flow_statements.list(
-**expand:** `typing.Optional[ - typing.Union[ - typing.Literal["company"], typing.Sequence[typing.Literal["company"]] - ] -]` — Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces. +**expand:** `typing.Optional[typing.Union[typing.Literal, typing.Sequence[typing.Literal]]]` — Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces.
@@ -11634,7 +11503,7 @@ client.accounting.cash_flow_statements.list(
-**modified_after:** `typing.Optional[dt.datetime]` — If provided, only objects synced by Merge after this date time will be returned. +**modified_after:** `typing.Optional[datetime.datetime]` — If provided, only objects synced by Merge after this date time will be returned.
@@ -11642,7 +11511,7 @@ client.accounting.cash_flow_statements.list(
-**modified_before:** `typing.Optional[dt.datetime]` — If provided, only objects synced by Merge before this date time will be returned. +**modified_before:** `typing.Optional[datetime.datetime]` — If provided, only objects synced by Merge before this date time will be returned.
@@ -11678,7 +11547,7 @@ client.accounting.cash_flow_statements.list(
-
client.accounting.cash_flow_statements.retrieve(...) +
client.accounting.cash_flow_statements.retrieve(...) -> CashFlowStatement
@@ -11706,11 +11575,13 @@ Returns a `CashFlowStatement` object with the given `id`. ```python from merge import Merge +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.accounting.cash_flow_statements.retrieve( id="id", include_remote_data=True, @@ -11739,11 +11610,7 @@ client.accounting.cash_flow_statements.retrieve(
-**expand:** `typing.Optional[ - typing.Union[ - typing.Literal["company"], typing.Sequence[typing.Literal["company"]] - ] -]` — Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces. +**expand:** `typing.Optional[typing.Union[typing.Literal, typing.Sequence[typing.Literal]]]` — Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces.
@@ -11780,7 +11647,7 @@ client.accounting.cash_flow_statements.retrieve(
## Accounting CompanyInfo -
client.accounting.company_info.list(...) +
client.accounting.company_info.list(...) -> PaginatedCompanyInfoList
@@ -11807,31 +11674,24 @@ Returns a list of `CompanyInfo` objects.
```python -import datetime - from merge import Merge +from merge.environment import MergeEnvironment +import datetime client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.accounting.company_info.list( - created_after=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), - created_before=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), + created_after=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), + created_before=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), cursor="cD0yMDIxLTAxLTA2KzAzJTNBMjQlM0E1My40MzQzMjYlMkIwMCUzQTAw", include_deleted_data=True, include_remote_data=True, include_shell_data=True, - modified_after=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), - modified_before=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), + modified_after=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), + modified_before=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), name="name", page_size=1, remote_id="remote_id", @@ -11851,7 +11711,7 @@ client.accounting.company_info.list(
-**created_after:** `typing.Optional[dt.datetime]` — If provided, will only return objects created after this datetime. +**created_after:** `typing.Optional[datetime.datetime]` — If provided, will only return objects created after this datetime.
@@ -11859,7 +11719,7 @@ client.accounting.company_info.list(
-**created_before:** `typing.Optional[dt.datetime]` — If provided, will only return objects created before this datetime. +**created_before:** `typing.Optional[datetime.datetime]` — If provided, will only return objects created before this datetime.
@@ -11875,12 +11735,7 @@ client.accounting.company_info.list(
-**expand:** `typing.Optional[ - typing.Union[ - CompanyInfoListRequestExpandItem, - typing.Sequence[CompanyInfoListRequestExpandItem], - ] -]` — Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces. +**expand:** `typing.Optional[typing.Union[CompanyInfoListRequestExpandItem, typing.Sequence[CompanyInfoListRequestExpandItem]]]` — Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces.
@@ -11912,7 +11767,7 @@ client.accounting.company_info.list(
-**modified_after:** `typing.Optional[dt.datetime]` — If provided, only objects synced by Merge after this date time will be returned. +**modified_after:** `typing.Optional[datetime.datetime]` — If provided, only objects synced by Merge after this date time will be returned.
@@ -11920,7 +11775,7 @@ client.accounting.company_info.list(
-**modified_before:** `typing.Optional[dt.datetime]` — If provided, only objects synced by Merge before this date time will be returned. +**modified_before:** `typing.Optional[datetime.datetime]` — If provided, only objects synced by Merge before this date time will be returned.
@@ -11964,7 +11819,7 @@ client.accounting.company_info.list(
-
client.accounting.company_info.retrieve(...) +
client.accounting.company_info.retrieve(...) -> CompanyInfo
@@ -11992,11 +11847,13 @@ Returns a `CompanyInfo` object with the given `id`. ```python from merge import Merge +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.accounting.company_info.retrieve( id="id", include_remote_data=True, @@ -12025,12 +11882,7 @@ client.accounting.company_info.retrieve(
-**expand:** `typing.Optional[ - typing.Union[ - CompanyInfoRetrieveRequestExpandItem, - typing.Sequence[CompanyInfoRetrieveRequestExpandItem], - ] -]` — Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces. +**expand:** `typing.Optional[typing.Union[CompanyInfoRetrieveRequestExpandItem, typing.Sequence[CompanyInfoRetrieveRequestExpandItem]]]` — Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces.
@@ -12067,7 +11919,7 @@ client.accounting.company_info.retrieve(
## Accounting Contacts -
client.accounting.contacts.list(...) +
client.accounting.contacts.list(...) -> PaginatedContactList
@@ -12094,25 +11946,19 @@ Returns a list of `Contact` objects.
```python -import datetime - from merge import Merge -from merge.resources.accounting.resources.contacts import ( - ContactsListRequestStatus, -) +from merge.environment import MergeEnvironment +import datetime client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.accounting.contacts.list( company_id="company_id", - created_after=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), - created_before=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), + created_after=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), + created_before=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), cursor="cD0yMDIxLTAxLTA2KzAzJTNBMjQlM0E1My40MzQzMjYlMkIwMCUzQTAw", email_address="email_address", include_deleted_data=True, @@ -12121,16 +11967,14 @@ client.accounting.contacts.list( include_shell_data=True, is_customer="is_customer", is_supplier="is_supplier", - modified_after=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), - modified_before=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), + modified_after=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), + modified_before=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), name="name", page_size=1, + remote_fields="status", remote_id="remote_id", - status=ContactsListRequestStatus.EMPTY, + show_enum_origins="status", + status="", ) ``` @@ -12155,7 +11999,7 @@ client.accounting.contacts.list(
-**created_after:** `typing.Optional[dt.datetime]` — If provided, will only return objects created after this datetime. +**created_after:** `typing.Optional[datetime.datetime]` — If provided, will only return objects created after this datetime.
@@ -12163,7 +12007,7 @@ client.accounting.contacts.list(
-**created_before:** `typing.Optional[dt.datetime]` — If provided, will only return objects created before this datetime. +**created_before:** `typing.Optional[datetime.datetime]` — If provided, will only return objects created before this datetime.
@@ -12187,12 +12031,7 @@ client.accounting.contacts.list(
-**expand:** `typing.Optional[ - typing.Union[ - ContactsListRequestExpandItem, - typing.Sequence[ContactsListRequestExpandItem], - ] -]` — Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces. +**expand:** `typing.Optional[typing.Union[ContactsListRequestExpandItem, typing.Sequence[ContactsListRequestExpandItem]]]` — Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces.
@@ -12248,7 +12087,7 @@ client.accounting.contacts.list(
-**modified_after:** `typing.Optional[dt.datetime]` — If provided, only objects synced by Merge after this date time will be returned. +**modified_after:** `typing.Optional[datetime.datetime]` — If provided, only objects synced by Merge after this date time will be returned.
@@ -12256,7 +12095,7 @@ client.accounting.contacts.list(
-**modified_before:** `typing.Optional[dt.datetime]` — If provided, only objects synced by Merge before this date time will be returned. +**modified_before:** `typing.Optional[datetime.datetime]` — If provided, only objects synced by Merge before this date time will be returned.
@@ -12280,7 +12119,7 @@ client.accounting.contacts.list(
-**remote_fields:** `typing.Optional[typing.Literal["status"]]` — Deprecated. Use show_enum_origins. +**remote_fields:** `typing.Optional[typing.Literal]` — Deprecated. Use show_enum_origins.
@@ -12296,7 +12135,7 @@ client.accounting.contacts.list(
-**show_enum_origins:** `typing.Optional[typing.Literal["status"]]` — A comma separated list of enum field names for which you'd like the original values to be returned, instead of Merge's normalized enum values. [Learn more](https://help.merge.dev/en/articles/8950958-show_enum_origins-query-parameter) +**show_enum_origins:** `typing.Optional[typing.Literal]` — A comma separated list of enum field names for which you'd like the original values to be returned, instead of Merge's normalized enum values. [Learn more](https://help.merge.dev/en/articles/8950958-show_enum_origins-query-parameter)
@@ -12324,7 +12163,7 @@ client.accounting.contacts.list(
-
client.accounting.contacts.create(...) +
client.accounting.contacts.create(...) -> ContactResponse
@@ -12352,12 +12191,14 @@ Creates a `Contact` object with the given values. ```python from merge import Merge -from merge.resources.accounting import ContactRequest +from merge.environment import MergeEnvironment +from merge.accounting import ContactRequest client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.accounting.contacts.create( is_debug_mode=True, run_async=True, @@ -12414,7 +12255,7 @@ client.accounting.contacts.create(
-
client.accounting.contacts.retrieve(...) +
client.accounting.contacts.retrieve(...) -> Contact
@@ -12442,16 +12283,20 @@ Returns a `Contact` object with the given `id`. ```python from merge import Merge +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.accounting.contacts.retrieve( id="id", include_remote_data=True, include_remote_fields=True, include_shell_data=True, + remote_fields="status", + show_enum_origins="status", ) ``` @@ -12476,12 +12321,7 @@ client.accounting.contacts.retrieve(
-**expand:** `typing.Optional[ - typing.Union[ - ContactsRetrieveRequestExpandItem, - typing.Sequence[ContactsRetrieveRequestExpandItem], - ] -]` — Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces. +**expand:** `typing.Optional[typing.Union[ContactsRetrieveRequestExpandItem, typing.Sequence[ContactsRetrieveRequestExpandItem]]]` — Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces.
@@ -12513,7 +12353,7 @@ client.accounting.contacts.retrieve(
-**remote_fields:** `typing.Optional[typing.Literal["status"]]` — Deprecated. Use show_enum_origins. +**remote_fields:** `typing.Optional[typing.Literal]` — Deprecated. Use show_enum_origins.
@@ -12521,7 +12361,7 @@ client.accounting.contacts.retrieve(
-**show_enum_origins:** `typing.Optional[typing.Literal["status"]]` — A comma separated list of enum field names for which you'd like the original values to be returned, instead of Merge's normalized enum values. [Learn more](https://help.merge.dev/en/articles/8950958-show_enum_origins-query-parameter) +**show_enum_origins:** `typing.Optional[typing.Literal]` — A comma separated list of enum field names for which you'd like the original values to be returned, instead of Merge's normalized enum values. [Learn more](https://help.merge.dev/en/articles/8950958-show_enum_origins-query-parameter)
@@ -12541,7 +12381,7 @@ client.accounting.contacts.retrieve(
-
client.accounting.contacts.partial_update(...) +
client.accounting.contacts.partial_update(...) -> ContactResponse
@@ -12569,12 +12409,14 @@ Updates a `Contact` object with the given `id`. ```python from merge import Merge -from merge.resources.accounting import PatchedContactRequest +from merge.environment import MergeEnvironment +from merge.accounting import PatchedContactRequest client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.accounting.contacts.partial_update( id="id", is_debug_mode=True, @@ -12640,7 +12482,7 @@ client.accounting.contacts.partial_update(
-
client.accounting.contacts.meta_patch_retrieve(...) +
client.accounting.contacts.meta_patch_retrieve(...) -> MetaResponse
@@ -12668,11 +12510,13 @@ Returns metadata for `Contact` PATCHs. ```python from merge import Merge +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.accounting.contacts.meta_patch_retrieve( id="id", ) @@ -12711,7 +12555,7 @@ client.accounting.contacts.meta_patch_retrieve(
-
client.accounting.contacts.meta_post_retrieve() +
client.accounting.contacts.meta_post_retrieve() -> MetaResponse
@@ -12739,11 +12583,13 @@ Returns metadata for `Contact` POSTs. ```python from merge import Merge +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.accounting.contacts.meta_post_retrieve() ``` @@ -12772,7 +12618,7 @@ client.accounting.contacts.meta_post_retrieve()
-
client.accounting.contacts.remote_field_classes_list(...) +
client.accounting.contacts.remote_field_classes_list(...) -> PaginatedRemoteFieldClassList
@@ -12800,11 +12646,13 @@ Returns a list of `RemoteFieldClass` objects. ```python from merge import Merge +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.accounting.contacts.remote_field_classes_list( cursor="cD0yMDIxLTAxLTA2KzAzJTNBMjQlM0E1My40MzQzMjYlMkIwMCUzQTAw", include_deleted_data=True, @@ -12898,7 +12746,7 @@ client.accounting.contacts.remote_field_classes_list(
## Accounting CreditNotes -
client.accounting.credit_notes.list(...) +
client.accounting.credit_notes.list(...) -> PaginatedCreditNoteList
@@ -12925,46 +12773,31 @@ Returns a list of `CreditNote` objects.
```python -import datetime - from merge import Merge -from merge.resources.accounting.resources.credit_notes import ( - CreditNotesListRequestRemoteFields, - CreditNotesListRequestShowEnumOrigins, -) +from merge.environment import MergeEnvironment +import datetime client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.accounting.credit_notes.list( company_id="company_id", - created_after=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), - created_before=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), + created_after=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), + created_before=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), cursor="cD0yMDIxLTAxLTA2KzAzJTNBMjQlM0E1My40MzQzMjYlMkIwMCUzQTAw", include_deleted_data=True, include_remote_data=True, include_shell_data=True, - modified_after=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), - modified_before=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), + modified_after=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), + modified_before=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), page_size=1, - remote_fields=CreditNotesListRequestRemoteFields.STATUS, + remote_fields="status", remote_id="remote_id", - show_enum_origins=CreditNotesListRequestShowEnumOrigins.STATUS, - transaction_date_after=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), - transaction_date_before=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), + show_enum_origins="status", + transaction_date_after=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), + transaction_date_before=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), ) ``` @@ -12989,7 +12822,7 @@ client.accounting.credit_notes.list(
-**created_after:** `typing.Optional[dt.datetime]` — If provided, will only return objects created after this datetime. +**created_after:** `typing.Optional[datetime.datetime]` — If provided, will only return objects created after this datetime.
@@ -12997,7 +12830,7 @@ client.accounting.credit_notes.list(
-**created_before:** `typing.Optional[dt.datetime]` — If provided, will only return objects created before this datetime. +**created_before:** `typing.Optional[datetime.datetime]` — If provided, will only return objects created before this datetime.
@@ -13013,12 +12846,7 @@ client.accounting.credit_notes.list(
-**expand:** `typing.Optional[ - typing.Union[ - CreditNotesListRequestExpandItem, - typing.Sequence[CreditNotesListRequestExpandItem], - ] -]` — Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces. +**expand:** `typing.Optional[typing.Union[CreditNotesListRequestExpandItem, typing.Sequence[CreditNotesListRequestExpandItem]]]` — Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces.
@@ -13050,7 +12878,7 @@ client.accounting.credit_notes.list(
-**modified_after:** `typing.Optional[dt.datetime]` — If provided, only objects synced by Merge after this date time will be returned. +**modified_after:** `typing.Optional[datetime.datetime]` — If provided, only objects synced by Merge after this date time will be returned.
@@ -13058,7 +12886,7 @@ client.accounting.credit_notes.list(
-**modified_before:** `typing.Optional[dt.datetime]` — If provided, only objects synced by Merge before this date time will be returned. +**modified_before:** `typing.Optional[datetime.datetime]` — If provided, only objects synced by Merge before this date time will be returned.
@@ -13098,7 +12926,7 @@ client.accounting.credit_notes.list(
-**transaction_date_after:** `typing.Optional[dt.datetime]` — If provided, will only return objects created after this datetime. +**transaction_date_after:** `typing.Optional[datetime.datetime]` — If provided, will only return objects created after this datetime.
@@ -13106,7 +12934,7 @@ client.accounting.credit_notes.list(
-**transaction_date_before:** `typing.Optional[dt.datetime]` — If provided, will only return objects created before this datetime. +**transaction_date_before:** `typing.Optional[datetime.datetime]` — If provided, will only return objects created before this datetime.
@@ -13126,7 +12954,7 @@ client.accounting.credit_notes.list(
-
client.accounting.credit_notes.create(...) +
client.accounting.credit_notes.create(...) -> CreditNoteResponse
@@ -13154,12 +12982,14 @@ Creates a `CreditNote` object with the given values. ```python from merge import Merge -from merge.resources.accounting import CreditNoteRequest +from merge.environment import MergeEnvironment +from merge.accounting import CreditNoteRequest client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.accounting.credit_notes.create( is_debug_mode=True, run_async=True, @@ -13216,7 +13046,7 @@ client.accounting.credit_notes.create(
-
client.accounting.credit_notes.retrieve(...) +
client.accounting.credit_notes.retrieve(...) -> CreditNote
@@ -13244,21 +13074,19 @@ Returns a `CreditNote` object with the given `id`. ```python from merge import Merge -from merge.resources.accounting.resources.credit_notes import ( - CreditNotesRetrieveRequestRemoteFields, - CreditNotesRetrieveRequestShowEnumOrigins, -) +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.accounting.credit_notes.retrieve( id="id", include_remote_data=True, include_shell_data=True, - remote_fields=CreditNotesRetrieveRequestRemoteFields.STATUS, - show_enum_origins=CreditNotesRetrieveRequestShowEnumOrigins.STATUS, + remote_fields="status", + show_enum_origins="status", ) ``` @@ -13283,12 +13111,7 @@ client.accounting.credit_notes.retrieve(
-**expand:** `typing.Optional[ - typing.Union[ - CreditNotesRetrieveRequestExpandItem, - typing.Sequence[CreditNotesRetrieveRequestExpandItem], - ] -]` — Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces. +**expand:** `typing.Optional[typing.Union[CreditNotesRetrieveRequestExpandItem, typing.Sequence[CreditNotesRetrieveRequestExpandItem]]]` — Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces.
@@ -13340,7 +13163,7 @@ client.accounting.credit_notes.retrieve(
-
client.accounting.credit_notes.partial_update(...) +
client.accounting.credit_notes.partial_update(...) -> CreditNoteResponse
@@ -13368,12 +13191,14 @@ Updates a `CreditNote` object with the given `id`. ```python from merge import Merge -from merge.resources.accounting import CreditNoteRequest +from merge.environment import MergeEnvironment +from merge.accounting import CreditNoteRequest client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.accounting.credit_notes.partial_update( id="id", is_debug_mode=True, @@ -13439,7 +13264,7 @@ client.accounting.credit_notes.partial_update(
-
client.accounting.credit_notes.application_create(...) +
client.accounting.credit_notes.application_create(...) -> CreditNoteResponse
@@ -13466,21 +13291,20 @@ Creates a new CreditNoteApplyLine to apply a credit note to an invoice
```python -import datetime - from merge import Merge +from merge.environment import MergeEnvironment +import datetime client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.accounting.credit_notes.application_create( id="id", is_debug_mode=True, run_async=True, - applied_date=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), + applied_date=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), applied_amount="applied_amount", ) @@ -13506,7 +13330,7 @@ client.accounting.credit_notes.application_create(
-**applied_date:** `dt.datetime` — Date that the credit note is applied to the invoice. +**applied_date:** `datetime.datetime` — Date that the credit note is applied to the invoice.
@@ -13558,7 +13382,7 @@ client.accounting.credit_notes.application_create(
-
client.accounting.credit_notes.meta_patch_retrieve(...) +
client.accounting.credit_notes.meta_patch_retrieve(...) -> MetaResponse
@@ -13586,11 +13410,13 @@ Returns metadata for `CreditNote` PATCHs. ```python from merge import Merge +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.accounting.credit_notes.meta_patch_retrieve( id="id", ) @@ -13629,7 +13455,7 @@ client.accounting.credit_notes.meta_patch_retrieve(
-
client.accounting.credit_notes.meta_post_retrieve() +
client.accounting.credit_notes.meta_post_retrieve() -> MetaResponse
@@ -13657,11 +13483,13 @@ Returns metadata for `CreditNote` POSTs. ```python from merge import Merge +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.accounting.credit_notes.meta_post_retrieve() ``` @@ -13691,7 +13519,7 @@ client.accounting.credit_notes.meta_post_retrieve()
## Accounting Scopes -
client.accounting.scopes.default_scopes_retrieve() +
client.accounting.scopes.default_scopes_retrieve() -> CommonModelScopeApi
@@ -13719,11 +13547,13 @@ Get the default permissions for Merge Common Models and fields across all Linked ```python from merge import Merge +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.accounting.scopes.default_scopes_retrieve() ``` @@ -13752,7 +13582,7 @@ client.accounting.scopes.default_scopes_retrieve()
-
client.accounting.scopes.linked_account_scopes_retrieve() +
client.accounting.scopes.linked_account_scopes_retrieve() -> CommonModelScopeApi
@@ -13780,11 +13610,13 @@ Get all available permissions for Merge Common Models and fields for a single Li ```python from merge import Merge +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.accounting.scopes.linked_account_scopes_retrieve() ``` @@ -13813,7 +13645,7 @@ client.accounting.scopes.linked_account_scopes_retrieve()
-
client.accounting.scopes.linked_account_scopes_create(...) +
client.accounting.scopes.linked_account_scopes_create(...) -> CommonModelScopeApi
@@ -13841,16 +13673,14 @@ Update permissions for any Common Model or field for a single Linked Account. An ```python from merge import Merge -from merge.resources.accounting import ( - FieldPermissionDeserializerRequest, - IndividualCommonModelScopeDeserializerRequest, - ModelPermissionDeserializerRequest, -) +from merge.environment import MergeEnvironment +from merge.accounting import IndividualCommonModelScopeDeserializerRequest, ModelPermissionDeserializerRequest, FieldPermissionDeserializerRequest client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.accounting.scopes.linked_account_scopes_create( common_models=[ IndividualCommonModelScopeDeserializerRequest( @@ -13861,11 +13691,16 @@ client.accounting.scopes.linked_account_scopes_create( ), "WRITE": ModelPermissionDeserializerRequest( is_enabled=False, - ), + ) }, field_permissions=FieldPermissionDeserializerRequest( - enabled_fields=["avatar", "home_location"], - disabled_fields=["work_location"], + enabled_fields=[ + "avatar", + "home_location" + ], + disabled_fields=[ + "work_location" + ], ), ), IndividualCommonModelScopeDeserializerRequest( @@ -13875,7 +13710,7 @@ client.accounting.scopes.linked_account_scopes_create( is_enabled=False, ) }, - ), + ) ], ) @@ -13893,7 +13728,7 @@ client.accounting.scopes.linked_account_scopes_create(
-**common_models:** `typing.Sequence[IndividualCommonModelScopeDeserializerRequest]` — The common models you want to update the scopes for +**common_models:** `typing.List[IndividualCommonModelScopeDeserializerRequest]` — The common models you want to update the scopes for
@@ -13914,7 +13749,7 @@ client.accounting.scopes.linked_account_scopes_create(
## Accounting DeleteAccount -
client.accounting.delete_account.delete() +
client.accounting.delete_account.delete()
@@ -13942,11 +13777,13 @@ Delete a linked account. ```python from merge import Merge +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.accounting.delete_account.delete() ``` @@ -13976,7 +13813,7 @@ client.accounting.delete_account.delete()
## Accounting Employees -
client.accounting.employees.list(...) +
client.accounting.employees.list(...) -> PaginatedEmployeeList
@@ -14003,32 +13840,25 @@ Returns a list of `Employee` objects.
```python -import datetime - from merge import Merge +from merge.environment import MergeEnvironment +import datetime client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.accounting.employees.list( company_id="company_id", - created_after=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), - created_before=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), + created_after=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), + created_before=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), cursor="cD0yMDIxLTAxLTA2KzAzJTNBMjQlM0E1My40MzQzMjYlMkIwMCUzQTAw", include_deleted_data=True, include_remote_data=True, include_shell_data=True, - modified_after=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), - modified_before=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), + modified_after=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), + modified_before=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), page_size=1, remote_id="remote_id", ) @@ -14055,7 +13885,7 @@ client.accounting.employees.list(
-**created_after:** `typing.Optional[dt.datetime]` — If provided, will only return objects created after this datetime. +**created_after:** `typing.Optional[datetime.datetime]` — If provided, will only return objects created after this datetime.
@@ -14063,7 +13893,7 @@ client.accounting.employees.list(
-**created_before:** `typing.Optional[dt.datetime]` — If provided, will only return objects created before this datetime. +**created_before:** `typing.Optional[datetime.datetime]` — If provided, will only return objects created before this datetime.
@@ -14079,11 +13909,7 @@ client.accounting.employees.list(
-**expand:** `typing.Optional[ - typing.Union[ - typing.Literal["company"], typing.Sequence[typing.Literal["company"]] - ] -]` — Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces. +**expand:** `typing.Optional[typing.Union[typing.Literal, typing.Sequence[typing.Literal]]]` — Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces.
@@ -14115,7 +13941,7 @@ client.accounting.employees.list(
-**modified_after:** `typing.Optional[dt.datetime]` — If provided, only objects synced by Merge after this date time will be returned. +**modified_after:** `typing.Optional[datetime.datetime]` — If provided, only objects synced by Merge after this date time will be returned.
@@ -14123,7 +13949,7 @@ client.accounting.employees.list(
-**modified_before:** `typing.Optional[dt.datetime]` — If provided, only objects synced by Merge before this date time will be returned. +**modified_before:** `typing.Optional[datetime.datetime]` — If provided, only objects synced by Merge before this date time will be returned.
@@ -14159,7 +13985,7 @@ client.accounting.employees.list(
-
client.accounting.employees.retrieve(...) +
client.accounting.employees.retrieve(...) -> Employee
@@ -14187,11 +14013,13 @@ Returns an `Employee` object with the given `id`. ```python from merge import Merge +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.accounting.employees.retrieve( id="id", include_remote_data=True, @@ -14220,11 +14048,7 @@ client.accounting.employees.retrieve(
-**expand:** `typing.Optional[ - typing.Union[ - typing.Literal["company"], typing.Sequence[typing.Literal["company"]] - ] -]` — Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces. +**expand:** `typing.Optional[typing.Union[typing.Literal, typing.Sequence[typing.Literal]]]` — Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces.
@@ -14261,7 +14085,7 @@ client.accounting.employees.retrieve(
## Accounting ExpenseReports -
client.accounting.expense_reports.list(...) +
client.accounting.expense_reports.list(...) -> PaginatedExpenseReportList
@@ -14288,33 +14112,26 @@ Returns a list of `ExpenseReport` objects.
```python -import datetime - from merge import Merge +from merge.environment import MergeEnvironment +import datetime client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.accounting.expense_reports.list( company_id="company_id", - created_after=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), - created_before=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), + created_after=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), + created_before=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), cursor="cD0yMDIxLTAxLTA2KzAzJTNBMjQlM0E1My40MzQzMjYlMkIwMCUzQTAw", include_deleted_data=True, include_remote_data=True, include_remote_fields=True, include_shell_data=True, - modified_after=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), - modified_before=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), + modified_after=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), + modified_before=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), page_size=1, remote_id="remote_id", ) @@ -14341,7 +14158,7 @@ client.accounting.expense_reports.list(
-**created_after:** `typing.Optional[dt.datetime]` — If provided, will only return objects created after this datetime. +**created_after:** `typing.Optional[datetime.datetime]` — If provided, will only return objects created after this datetime.
@@ -14349,7 +14166,7 @@ client.accounting.expense_reports.list(
-**created_before:** `typing.Optional[dt.datetime]` — If provided, will only return objects created before this datetime. +**created_before:** `typing.Optional[datetime.datetime]` — If provided, will only return objects created before this datetime.
@@ -14365,12 +14182,7 @@ client.accounting.expense_reports.list(
-**expand:** `typing.Optional[ - typing.Union[ - ExpenseReportsListRequestExpandItem, - typing.Sequence[ExpenseReportsListRequestExpandItem], - ] -]` — Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces. +**expand:** `typing.Optional[typing.Union[ExpenseReportsListRequestExpandItem, typing.Sequence[ExpenseReportsListRequestExpandItem]]]` — Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces.
@@ -14410,7 +14222,7 @@ client.accounting.expense_reports.list(
-**modified_after:** `typing.Optional[dt.datetime]` — If provided, only objects synced by Merge after this date time will be returned. +**modified_after:** `typing.Optional[datetime.datetime]` — If provided, only objects synced by Merge after this date time will be returned.
@@ -14418,7 +14230,7 @@ client.accounting.expense_reports.list(
-**modified_before:** `typing.Optional[dt.datetime]` — If provided, only objects synced by Merge before this date time will be returned. +**modified_before:** `typing.Optional[datetime.datetime]` — If provided, only objects synced by Merge before this date time will be returned.
@@ -14454,7 +14266,7 @@ client.accounting.expense_reports.list(
-
client.accounting.expense_reports.create(...) +
client.accounting.expense_reports.create(...) -> ExpenseReportResponse
@@ -14482,19 +14294,21 @@ Creates an `ExpenseReport` object with the given values. ```python from merge import Merge -from merge.resources.accounting import ExpenseReportRequest +from merge.environment import MergeEnvironment +from merge.accounting import ExpenseReportRequest client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.accounting.expense_reports.create( is_debug_mode=True, run_async=True, model=ExpenseReportRequest( tracking_categories=[ "a1b2c3d4-e5f6-4a5b-9c3d-2e1f0a9b8c7d", - "d4c3b2a1-9e8f-7g6h-5i4j-3k2l1m0n9o8p", + "d4c3b2a1-9e8f-7g6h-5i4j-3k2l1m0n9o8p" ], ), ) @@ -14549,7 +14363,7 @@ client.accounting.expense_reports.create(
-
client.accounting.expense_reports.lines_list(...) +
client.accounting.expense_reports.lines_list(...) -> PaginatedExpenseReportLineList
@@ -14577,11 +14391,13 @@ Returns a list of `ExpenseReportLine` objects that point to a `ExpenseReport` wi ```python from merge import Merge +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.accounting.expense_reports.lines_list( expense_report_id="expense_report_id", cursor="cD0yMDIxLTAxLTA2KzAzJTNBMjQlM0E1My40MzQzMjYlMkIwMCUzQTAw", @@ -14622,12 +14438,7 @@ client.accounting.expense_reports.lines_list(
-**expand:** `typing.Optional[ - typing.Union[ - ExpenseReportsLinesListRequestExpandItem, - typing.Sequence[ExpenseReportsLinesListRequestExpandItem], - ] -]` — Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces. +**expand:** `typing.Optional[typing.Union[ExpenseReportsLinesListRequestExpandItem, typing.Sequence[ExpenseReportsLinesListRequestExpandItem]]]` — Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces.
@@ -14687,7 +14498,7 @@ client.accounting.expense_reports.lines_list(
-
client.accounting.expense_reports.retrieve(...) +
client.accounting.expense_reports.retrieve(...) -> ExpenseReport
@@ -14715,11 +14526,13 @@ Returns an `ExpenseReport` object with the given `id`. ```python from merge import Merge +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.accounting.expense_reports.retrieve( id="id", include_remote_data=True, @@ -14749,12 +14562,7 @@ client.accounting.expense_reports.retrieve(
-**expand:** `typing.Optional[ - typing.Union[ - ExpenseReportsRetrieveRequestExpandItem, - typing.Sequence[ExpenseReportsRetrieveRequestExpandItem], - ] -]` — Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces. +**expand:** `typing.Optional[typing.Union[ExpenseReportsRetrieveRequestExpandItem, typing.Sequence[ExpenseReportsRetrieveRequestExpandItem]]]` — Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces.
@@ -14798,7 +14606,7 @@ client.accounting.expense_reports.retrieve(
-
client.accounting.expense_reports.lines_remote_field_classes_list(...) +
client.accounting.expense_reports.lines_remote_field_classes_list(...) -> PaginatedRemoteFieldClassList
@@ -14826,11 +14634,13 @@ Returns a list of `RemoteFieldClass` objects. ```python from merge import Merge +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.accounting.expense_reports.lines_remote_field_classes_list( cursor="cD0yMDIxLTAxLTA2KzAzJTNBMjQlM0E1My40MzQzMjYlMkIwMCUzQTAw", include_deleted_data=True, @@ -14923,7 +14733,7 @@ client.accounting.expense_reports.lines_remote_field_classes_list(
-
client.accounting.expense_reports.meta_post_retrieve() +
client.accounting.expense_reports.meta_post_retrieve() -> MetaResponse
@@ -14951,11 +14761,13 @@ Returns metadata for `ExpenseReport` POSTs. ```python from merge import Merge +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.accounting.expense_reports.meta_post_retrieve() ``` @@ -14984,7 +14796,7 @@ client.accounting.expense_reports.meta_post_retrieve()
-
client.accounting.expense_reports.remote_field_classes_list(...) +
client.accounting.expense_reports.remote_field_classes_list(...) -> PaginatedRemoteFieldClassList
@@ -15012,11 +14824,13 @@ Returns a list of `RemoteFieldClass` objects. ```python from merge import Merge +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.accounting.expense_reports.remote_field_classes_list( cursor="cD0yMDIxLTAxLTA2KzAzJTNBMjQlM0E1My40MzQzMjYlMkIwMCUzQTAw", include_deleted_data=True, @@ -15110,7 +14924,7 @@ client.accounting.expense_reports.remote_field_classes_list(
## Accounting Expenses -
client.accounting.expenses.list(...) +
client.accounting.expenses.list(...) -> PaginatedExpenseList
@@ -15137,41 +14951,30 @@ Returns a list of `Expense` objects.
```python -import datetime - from merge import Merge +from merge.environment import MergeEnvironment +import datetime client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.accounting.expenses.list( company_id="company_id", - created_after=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), - created_before=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), + created_after=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), + created_before=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), cursor="cD0yMDIxLTAxLTA2KzAzJTNBMjQlM0E1My40MzQzMjYlMkIwMCUzQTAw", include_deleted_data=True, include_remote_data=True, include_remote_fields=True, include_shell_data=True, - modified_after=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), - modified_before=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), + modified_after=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), + modified_before=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), page_size=1, remote_id="remote_id", - transaction_date_after=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), - transaction_date_before=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), + transaction_date_after=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), + transaction_date_before=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), ) ``` @@ -15196,7 +14999,7 @@ client.accounting.expenses.list(
-**created_after:** `typing.Optional[dt.datetime]` — If provided, will only return objects created after this datetime. +**created_after:** `typing.Optional[datetime.datetime]` — If provided, will only return objects created after this datetime.
@@ -15204,7 +15007,7 @@ client.accounting.expenses.list(
-**created_before:** `typing.Optional[dt.datetime]` — If provided, will only return objects created before this datetime. +**created_before:** `typing.Optional[datetime.datetime]` — If provided, will only return objects created before this datetime.
@@ -15220,12 +15023,7 @@ client.accounting.expenses.list(
-**expand:** `typing.Optional[ - typing.Union[ - ExpensesListRequestExpandItem, - typing.Sequence[ExpensesListRequestExpandItem], - ] -]` — Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces. +**expand:** `typing.Optional[typing.Union[ExpensesListRequestExpandItem, typing.Sequence[ExpensesListRequestExpandItem]]]` — Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces.
@@ -15265,7 +15063,7 @@ client.accounting.expenses.list(
-**modified_after:** `typing.Optional[dt.datetime]` — If provided, only objects synced by Merge after this date time will be returned. +**modified_after:** `typing.Optional[datetime.datetime]` — If provided, only objects synced by Merge after this date time will be returned.
@@ -15273,7 +15071,7 @@ client.accounting.expenses.list(
-**modified_before:** `typing.Optional[dt.datetime]` — If provided, only objects synced by Merge before this date time will be returned. +**modified_before:** `typing.Optional[datetime.datetime]` — If provided, only objects synced by Merge before this date time will be returned.
@@ -15297,7 +15095,7 @@ client.accounting.expenses.list(
-**transaction_date_after:** `typing.Optional[dt.datetime]` — If provided, will only return objects created after this datetime. +**transaction_date_after:** `typing.Optional[datetime.datetime]` — If provided, will only return objects created after this datetime.
@@ -15305,7 +15103,7 @@ client.accounting.expenses.list(
-**transaction_date_before:** `typing.Optional[dt.datetime]` — If provided, will only return objects created before this datetime. +**transaction_date_before:** `typing.Optional[datetime.datetime]` — If provided, will only return objects created before this datetime.
@@ -15325,7 +15123,7 @@ client.accounting.expenses.list(
-
client.accounting.expenses.create(...) +
client.accounting.expenses.create(...) -> ExpenseResponse
@@ -15353,12 +15151,14 @@ Creates an `Expense` object with the given values. ```python from merge import Merge -from merge.resources.accounting import ExpenseRequest +from merge.environment import MergeEnvironment +from merge.accounting import ExpenseRequest client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.accounting.expenses.create( is_debug_mode=True, run_async=True, @@ -15415,7 +15215,7 @@ client.accounting.expenses.create(
-
client.accounting.expenses.retrieve(...) +
client.accounting.expenses.retrieve(...) -> Expense
@@ -15443,11 +15243,13 @@ Returns an `Expense` object with the given `id`. ```python from merge import Merge +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.accounting.expenses.retrieve( id="id", include_remote_data=True, @@ -15477,12 +15279,7 @@ client.accounting.expenses.retrieve(
-**expand:** `typing.Optional[ - typing.Union[ - ExpensesRetrieveRequestExpandItem, - typing.Sequence[ExpensesRetrieveRequestExpandItem], - ] -]` — Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces. +**expand:** `typing.Optional[typing.Union[ExpensesRetrieveRequestExpandItem, typing.Sequence[ExpensesRetrieveRequestExpandItem]]]` — Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces.
@@ -15526,7 +15323,7 @@ client.accounting.expenses.retrieve(
-
client.accounting.expenses.bulk_create(...) +
client.accounting.expenses.bulk_create(...) -> AsyncBulkCreateResponse
@@ -15554,12 +15351,14 @@ Creates multiple `Expense` objects with the given values. ```python from merge import Merge -from merge.resources.accounting import ExpenseBatchItemRequest, ExpenseRequest +from merge.environment import MergeEnvironment +from merge.accounting import ExpenseBatchItemRequest, ExpenseRequest client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.accounting.expenses.bulk_create( batch_items=[ ExpenseBatchItemRequest( @@ -15583,7 +15382,7 @@ client.accounting.expenses.bulk_create(
-**batch_items:** `typing.Sequence[ExpenseBatchItemRequest]` +**batch_items:** `typing.List[ExpenseBatchItemRequest]`
@@ -15603,7 +15402,7 @@ client.accounting.expenses.bulk_create(
-
client.accounting.expenses.bulk_retrieve(...) +
client.accounting.expenses.bulk_retrieve(...) -> BatchObjectsResponse
@@ -15631,11 +15430,13 @@ Returns the status and results of an `Expense` bulk create batch. ```python from merge import Merge +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.accounting.expenses.bulk_retrieve( batch_id="batch_id", ) @@ -15674,7 +15475,7 @@ client.accounting.expenses.bulk_retrieve(
-
client.accounting.expenses.lines_remote_field_classes_list(...) +
client.accounting.expenses.lines_remote_field_classes_list(...) -> PaginatedRemoteFieldClassList
@@ -15702,11 +15503,13 @@ Returns a list of `RemoteFieldClass` objects. ```python from merge import Merge +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.accounting.expenses.lines_remote_field_classes_list( cursor="cD0yMDIxLTAxLTA2KzAzJTNBMjQlM0E1My40MzQzMjYlMkIwMCUzQTAw", include_deleted_data=True, @@ -15799,7 +15602,7 @@ client.accounting.expenses.lines_remote_field_classes_list(
-
client.accounting.expenses.meta_post_retrieve() +
client.accounting.expenses.meta_post_retrieve() -> MetaResponse
@@ -15827,11 +15630,13 @@ Returns metadata for `Expense` POSTs. ```python from merge import Merge +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.accounting.expenses.meta_post_retrieve() ``` @@ -15860,7 +15665,7 @@ client.accounting.expenses.meta_post_retrieve()
-
client.accounting.expenses.remote_field_classes_list(...) +
client.accounting.expenses.remote_field_classes_list(...) -> PaginatedRemoteFieldClassList
@@ -15888,11 +15693,13 @@ Returns a list of `RemoteFieldClass` objects. ```python from merge import Merge +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.accounting.expenses.remote_field_classes_list( cursor="cD0yMDIxLTAxLTA2KzAzJTNBMjQlM0E1My40MzQzMjYlMkIwMCUzQTAw", include_deleted_data=True, @@ -15986,7 +15793,7 @@ client.accounting.expenses.remote_field_classes_list(
## Accounting FieldMapping -
client.accounting.field_mapping.field_mappings_retrieve(...) +
client.accounting.field_mapping.field_mappings_retrieve(...) -> FieldMappingApiInstanceResponse
@@ -16014,11 +15821,13 @@ Get all Field Mappings for this Linked Account. Field Mappings are mappings betw ```python from merge import Merge +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.accounting.field_mapping.field_mappings_retrieve( exclude_remote_field_metadata=True, ) @@ -16057,7 +15866,7 @@ client.accounting.field_mapping.field_mappings_retrieve(
-
client.accounting.field_mapping.field_mappings_create(...) +
client.accounting.field_mapping.field_mappings_create(...) -> FieldMappingInstanceResponse
@@ -16085,17 +15894,21 @@ Create new Field Mappings that will be available after the next scheduled sync. ```python from merge import Merge +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.accounting.field_mapping.field_mappings_create( exclude_remote_field_metadata=True, remote_data_iteration_count=1, target_field_name="example_target_field_name", target_field_description="this is a example description of the target field", - remote_field_traversal_path=["example_remote_field"], + remote_field_traversal_path=[ + "example_remote_field" + ], remote_method="GET", remote_url_path="/example-url-path", common_model_name="ExampleCommonModel", @@ -16131,7 +15944,7 @@ client.accounting.field_mapping.field_mappings_create(
-**remote_field_traversal_path:** `typing.Sequence[typing.Optional[typing.Any]]` — The field traversal path of the remote field listed when you hit the GET /remote-fields endpoint. +**remote_field_traversal_path:** `typing.List[typing.Any]` — The field traversal path of the remote field listed when you hit the GET /remote-fields endpoint.
@@ -16207,7 +16020,7 @@ client.accounting.field_mapping.field_mappings_create(
-
client.accounting.field_mapping.field_mappings_destroy(...) +
client.accounting.field_mapping.field_mappings_destroy(...) -> FieldMappingInstanceResponse
@@ -16235,11 +16048,13 @@ Deletes Field Mappings for a Linked Account. All data related to this Field Mapp ```python from merge import Merge +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.accounting.field_mapping.field_mappings_destroy( field_mapping_id="field_mapping_id", ) @@ -16278,7 +16093,7 @@ client.accounting.field_mapping.field_mappings_destroy(
-
client.accounting.field_mapping.field_mappings_partial_update(...) +
client.accounting.field_mapping.field_mappings_partial_update(...) -> FieldMappingInstanceResponse
@@ -16306,11 +16121,13 @@ Create or update existing Field Mappings for a Linked Account. Changes will be r ```python from merge import Merge +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.accounting.field_mapping.field_mappings_partial_update( field_mapping_id="field_mapping_id", remote_data_iteration_count=1, @@ -16346,7 +16163,7 @@ client.accounting.field_mapping.field_mappings_partial_update(
-**remote_field_traversal_path:** `typing.Optional[typing.Sequence[typing.Optional[typing.Any]]]` — The field traversal path of the remote field listed when you hit the GET /remote-fields endpoint. +**remote_field_traversal_path:** `typing.Optional[typing.List[typing.Any]]` — The field traversal path of the remote field listed when you hit the GET /remote-fields endpoint.
@@ -16398,7 +16215,7 @@ client.accounting.field_mapping.field_mappings_partial_update(
-
client.accounting.field_mapping.remote_fields_retrieve(...) +
client.accounting.field_mapping.remote_fields_retrieve(...) -> RemoteFieldApiResponse
@@ -16426,11 +16243,13 @@ Get all remote fields for a Linked Account. Remote fields are third-party fields ```python from merge import Merge +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.accounting.field_mapping.remote_fields_retrieve( common_models="common_models", include_example_values="include_example_values", @@ -16478,7 +16297,7 @@ client.accounting.field_mapping.remote_fields_retrieve(
-
client.accounting.field_mapping.target_fields_retrieve() +
client.accounting.field_mapping.target_fields_retrieve() -> ExternalTargetFieldApiResponse
@@ -16506,11 +16325,13 @@ Get all organization-wide Target Fields, this will not include any Linked Accoun ```python from merge import Merge +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.accounting.field_mapping.target_fields_retrieve() ``` @@ -16540,7 +16361,7 @@ client.accounting.field_mapping.target_fields_retrieve()
## Accounting GeneralLedgerTransactions -
client.accounting.general_ledger_transactions.list(...) +
client.accounting.general_ledger_transactions.list(...) -> PaginatedGeneralLedgerTransactionList
@@ -16567,39 +16388,28 @@ Returns a list of `GeneralLedgerTransaction` objects.
```python -import datetime - from merge import Merge +from merge.environment import MergeEnvironment +import datetime client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.accounting.general_ledger_transactions.list( company_id="company_id", - created_after=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), - created_before=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), + created_after=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), + created_before=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), cursor="cD0yMDIxLTAxLTA2KzAzJTNBMjQlM0E1My40MzQzMjYlMkIwMCUzQTAw", include_deleted_data=True, include_remote_data=True, include_shell_data=True, - modified_after=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), - modified_before=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), + modified_after=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), + modified_before=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), page_size=1, - posted_date_after=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), - posted_date_before=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), + posted_date_after=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), + posted_date_before=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), remote_id="remote_id", ) @@ -16625,7 +16435,7 @@ client.accounting.general_ledger_transactions.list(
-**created_after:** `typing.Optional[dt.datetime]` — If provided, will only return objects created after this datetime. +**created_after:** `typing.Optional[datetime.datetime]` — If provided, will only return objects created after this datetime.
@@ -16633,7 +16443,7 @@ client.accounting.general_ledger_transactions.list(
-**created_before:** `typing.Optional[dt.datetime]` — If provided, will only return objects created before this datetime. +**created_before:** `typing.Optional[datetime.datetime]` — If provided, will only return objects created before this datetime.
@@ -16649,12 +16459,7 @@ client.accounting.general_ledger_transactions.list(
-**expand:** `typing.Optional[ - typing.Union[ - GeneralLedgerTransactionsListRequestExpandItem, - typing.Sequence[GeneralLedgerTransactionsListRequestExpandItem], - ] -]` — Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces. +**expand:** `typing.Optional[typing.Union[GeneralLedgerTransactionsListRequestExpandItem, typing.Sequence[GeneralLedgerTransactionsListRequestExpandItem]]]` — Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces.
@@ -16686,7 +16491,7 @@ client.accounting.general_ledger_transactions.list(
-**modified_after:** `typing.Optional[dt.datetime]` — If provided, only objects synced by Merge after this date time will be returned. +**modified_after:** `typing.Optional[datetime.datetime]` — If provided, only objects synced by Merge after this date time will be returned.
@@ -16694,7 +16499,7 @@ client.accounting.general_ledger_transactions.list(
-**modified_before:** `typing.Optional[dt.datetime]` — If provided, only objects synced by Merge before this date time will be returned. +**modified_before:** `typing.Optional[datetime.datetime]` — If provided, only objects synced by Merge before this date time will be returned.
@@ -16710,7 +16515,7 @@ client.accounting.general_ledger_transactions.list(
-**posted_date_after:** `typing.Optional[dt.datetime]` — If provided, will only return objects posted after this datetime. +**posted_date_after:** `typing.Optional[datetime.datetime]` — If provided, will only return objects posted after this datetime.
@@ -16718,7 +16523,7 @@ client.accounting.general_ledger_transactions.list(
-**posted_date_before:** `typing.Optional[dt.datetime]` — If provided, will only return objects posted before this datetime. +**posted_date_before:** `typing.Optional[datetime.datetime]` — If provided, will only return objects posted before this datetime.
@@ -16746,7 +16551,7 @@ client.accounting.general_ledger_transactions.list(
-
client.accounting.general_ledger_transactions.retrieve(...) +
client.accounting.general_ledger_transactions.retrieve(...) -> GeneralLedgerTransaction
@@ -16774,11 +16579,13 @@ Returns a `GeneralLedgerTransaction` object with the given `id`. ```python from merge import Merge +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.accounting.general_ledger_transactions.retrieve( id="id", include_remote_data=True, @@ -16807,12 +16614,7 @@ client.accounting.general_ledger_transactions.retrieve(
-**expand:** `typing.Optional[ - typing.Union[ - GeneralLedgerTransactionsRetrieveRequestExpandItem, - typing.Sequence[GeneralLedgerTransactionsRetrieveRequestExpandItem], - ] -]` — Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces. +**expand:** `typing.Optional[typing.Union[GeneralLedgerTransactionsRetrieveRequestExpandItem, typing.Sequence[GeneralLedgerTransactionsRetrieveRequestExpandItem]]]` — Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces.
@@ -16849,7 +16651,7 @@ client.accounting.general_ledger_transactions.retrieve(
## Accounting GenerateKey -
client.accounting.generate_key.create(...) +
client.accounting.generate_key.create(...) -> RemoteKey
@@ -16877,11 +16679,13 @@ Create a remote key. ```python from merge import Merge +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.accounting.generate_key.create( name="Remote Deployment Key 1", ) @@ -16921,7 +16725,7 @@ client.accounting.generate_key.create(
## Accounting IncomeStatements -
client.accounting.income_statements.list(...) +
client.accounting.income_statements.list(...) -> PaginatedIncomeStatementList
@@ -16948,32 +16752,25 @@ Returns a list of `IncomeStatement` objects.
```python -import datetime - from merge import Merge +from merge.environment import MergeEnvironment +import datetime client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.accounting.income_statements.list( company_id="company_id", - created_after=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), - created_before=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), + created_after=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), + created_before=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), cursor="cD0yMDIxLTAxLTA2KzAzJTNBMjQlM0E1My40MzQzMjYlMkIwMCUzQTAw", include_deleted_data=True, include_remote_data=True, include_shell_data=True, - modified_after=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), - modified_before=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), + modified_after=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), + modified_before=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), page_size=1, remote_id="remote_id", ) @@ -17000,7 +16797,7 @@ client.accounting.income_statements.list(
-**created_after:** `typing.Optional[dt.datetime]` — If provided, will only return objects created after this datetime. +**created_after:** `typing.Optional[datetime.datetime]` — If provided, will only return objects created after this datetime.
@@ -17008,7 +16805,7 @@ client.accounting.income_statements.list(
-**created_before:** `typing.Optional[dt.datetime]` — If provided, will only return objects created before this datetime. +**created_before:** `typing.Optional[datetime.datetime]` — If provided, will only return objects created before this datetime.
@@ -17024,11 +16821,7 @@ client.accounting.income_statements.list(
-**expand:** `typing.Optional[ - typing.Union[ - typing.Literal["company"], typing.Sequence[typing.Literal["company"]] - ] -]` — Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces. +**expand:** `typing.Optional[typing.Union[typing.Literal, typing.Sequence[typing.Literal]]]` — Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces.
@@ -17060,7 +16853,7 @@ client.accounting.income_statements.list(
-**modified_after:** `typing.Optional[dt.datetime]` — If provided, only objects synced by Merge after this date time will be returned. +**modified_after:** `typing.Optional[datetime.datetime]` — If provided, only objects synced by Merge after this date time will be returned.
@@ -17068,7 +16861,7 @@ client.accounting.income_statements.list(
-**modified_before:** `typing.Optional[dt.datetime]` — If provided, only objects synced by Merge before this date time will be returned. +**modified_before:** `typing.Optional[datetime.datetime]` — If provided, only objects synced by Merge before this date time will be returned.
@@ -17104,7 +16897,7 @@ client.accounting.income_statements.list(
-
client.accounting.income_statements.retrieve(...) +
client.accounting.income_statements.retrieve(...) -> IncomeStatement
@@ -17132,11 +16925,13 @@ Returns an `IncomeStatement` object with the given `id`. ```python from merge import Merge +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.accounting.income_statements.retrieve( id="id", include_remote_data=True, @@ -17165,11 +16960,7 @@ client.accounting.income_statements.retrieve(
-**expand:** `typing.Optional[ - typing.Union[ - typing.Literal["company"], typing.Sequence[typing.Literal["company"]] - ] -]` — Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces. +**expand:** `typing.Optional[typing.Union[typing.Literal, typing.Sequence[typing.Literal]]]` — Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces.
@@ -17206,7 +16997,7 @@ client.accounting.income_statements.retrieve(
## Accounting Invoices -
client.accounting.invoices.list(...) +
client.accounting.invoices.list(...) -> PaginatedInvoiceList
@@ -17233,49 +17024,36 @@ Returns a list of `Invoice` objects.
```python -import datetime - from merge import Merge -from merge.resources.accounting.resources.invoices import ( - InvoicesListRequestStatus, - InvoicesListRequestType, -) +from merge.environment import MergeEnvironment +import datetime client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.accounting.invoices.list( company_id="company_id", contact_id="contact_id", - created_after=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), - created_before=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), + created_after=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), + created_before=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), cursor="cD0yMDIxLTAxLTA2KzAzJTNBMjQlM0E1My40MzQzMjYlMkIwMCUzQTAw", include_deleted_data=True, include_remote_data=True, include_remote_fields=True, include_shell_data=True, - issue_date_after=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), - issue_date_before=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), - modified_after=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), - modified_before=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), + issue_date_after=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), + issue_date_before=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), + modified_after=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), + modified_before=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), number="number", page_size=1, + remote_fields="type", remote_id="remote_id", - status=InvoicesListRequestStatus.DRAFT, - type=InvoicesListRequestType.ACCOUNTS_PAYABLE, + show_enum_origins="type", + status="DRAFT", + type="ACCOUNTS_PAYABLE", ) ``` @@ -17308,7 +17086,7 @@ client.accounting.invoices.list(
-**created_after:** `typing.Optional[dt.datetime]` — If provided, will only return objects created after this datetime. +**created_after:** `typing.Optional[datetime.datetime]` — If provided, will only return objects created after this datetime.
@@ -17316,7 +17094,7 @@ client.accounting.invoices.list(
-**created_before:** `typing.Optional[dt.datetime]` — If provided, will only return objects created before this datetime. +**created_before:** `typing.Optional[datetime.datetime]` — If provided, will only return objects created before this datetime.
@@ -17332,12 +17110,7 @@ client.accounting.invoices.list(
-**expand:** `typing.Optional[ - typing.Union[ - InvoicesListRequestExpandItem, - typing.Sequence[InvoicesListRequestExpandItem], - ] -]` — Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces. +**expand:** `typing.Optional[typing.Union[InvoicesListRequestExpandItem, typing.Sequence[InvoicesListRequestExpandItem]]]` — Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces.
@@ -17377,7 +17150,7 @@ client.accounting.invoices.list(
-**issue_date_after:** `typing.Optional[dt.datetime]` — If provided, will only return objects created after this datetime. +**issue_date_after:** `typing.Optional[datetime.datetime]` — If provided, will only return objects created after this datetime.
@@ -17385,7 +17158,7 @@ client.accounting.invoices.list(
-**issue_date_before:** `typing.Optional[dt.datetime]` — If provided, will only return objects created before this datetime. +**issue_date_before:** `typing.Optional[datetime.datetime]` — If provided, will only return objects created before this datetime.
@@ -17393,7 +17166,7 @@ client.accounting.invoices.list(
-**modified_after:** `typing.Optional[dt.datetime]` — If provided, only objects synced by Merge after this date time will be returned. +**modified_after:** `typing.Optional[datetime.datetime]` — If provided, only objects synced by Merge after this date time will be returned.
@@ -17401,7 +17174,7 @@ client.accounting.invoices.list(
-**modified_before:** `typing.Optional[dt.datetime]` — If provided, only objects synced by Merge before this date time will be returned. +**modified_before:** `typing.Optional[datetime.datetime]` — If provided, only objects synced by Merge before this date time will be returned.
@@ -17425,7 +17198,7 @@ client.accounting.invoices.list(
-**remote_fields:** `typing.Optional[typing.Literal["type"]]` — Deprecated. Use show_enum_origins. +**remote_fields:** `typing.Optional[typing.Literal]` — Deprecated. Use show_enum_origins.
@@ -17441,7 +17214,7 @@ client.accounting.invoices.list(
-**show_enum_origins:** `typing.Optional[typing.Literal["type"]]` — A comma separated list of enum field names for which you'd like the original values to be returned, instead of Merge's normalized enum values. [Learn more](https://help.merge.dev/en/articles/8950958-show_enum_origins-query-parameter) +**show_enum_origins:** `typing.Optional[typing.Literal]` — A comma separated list of enum field names for which you'd like the original values to be returned, instead of Merge's normalized enum values. [Learn more](https://help.merge.dev/en/articles/8950958-show_enum_origins-query-parameter)
@@ -17491,7 +17264,7 @@ If provided, will only return Invoices with this type.
-
client.accounting.invoices.create(...) +
client.accounting.invoices.create(...) -> InvoiceResponse
@@ -17521,12 +17294,14 @@ Creates an `Invoice` object with the given values. ```python from merge import Merge -from merge.resources.accounting import InvoiceRequest +from merge.environment import MergeEnvironment +from merge.accounting import InvoiceRequest client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.accounting.invoices.create( is_debug_mode=True, run_async=True, @@ -17583,7 +17358,7 @@ client.accounting.invoices.create(
-
client.accounting.invoices.retrieve(...) +
client.accounting.invoices.retrieve(...) -> Invoice
@@ -17611,16 +17386,20 @@ Returns an `Invoice` object with the given `id`. ```python from merge import Merge +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.accounting.invoices.retrieve( id="id", include_remote_data=True, include_remote_fields=True, include_shell_data=True, + remote_fields="type", + show_enum_origins="type", ) ``` @@ -17645,12 +17424,7 @@ client.accounting.invoices.retrieve(
-**expand:** `typing.Optional[ - typing.Union[ - InvoicesRetrieveRequestExpandItem, - typing.Sequence[InvoicesRetrieveRequestExpandItem], - ] -]` — Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces. +**expand:** `typing.Optional[typing.Union[InvoicesRetrieveRequestExpandItem, typing.Sequence[InvoicesRetrieveRequestExpandItem]]]` — Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces.
@@ -17682,7 +17456,7 @@ client.accounting.invoices.retrieve(
-**remote_fields:** `typing.Optional[typing.Literal["type"]]` — Deprecated. Use show_enum_origins. +**remote_fields:** `typing.Optional[typing.Literal]` — Deprecated. Use show_enum_origins.
@@ -17690,7 +17464,7 @@ client.accounting.invoices.retrieve(
-**show_enum_origins:** `typing.Optional[typing.Literal["type"]]` — A comma separated list of enum field names for which you'd like the original values to be returned, instead of Merge's normalized enum values. [Learn more](https://help.merge.dev/en/articles/8950958-show_enum_origins-query-parameter) +**show_enum_origins:** `typing.Optional[typing.Literal]` — A comma separated list of enum field names for which you'd like the original values to be returned, instead of Merge's normalized enum values. [Learn more](https://help.merge.dev/en/articles/8950958-show_enum_origins-query-parameter)
@@ -17710,7 +17484,7 @@ client.accounting.invoices.retrieve(
-
client.accounting.invoices.partial_update(...) +
client.accounting.invoices.partial_update(...) -> InvoiceResponse
@@ -17738,12 +17512,14 @@ Updates an `Invoice` object with the given `id`. ```python from merge import Merge -from merge.resources.accounting import InvoiceRequest +from merge.environment import MergeEnvironment +from merge.accounting import InvoiceRequest client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.accounting.invoices.partial_update( id="id", is_debug_mode=True, @@ -17809,7 +17585,7 @@ client.accounting.invoices.partial_update(
-
client.accounting.invoices.bulk_create(...) +
client.accounting.invoices.bulk_create(...) -> AsyncBulkCreateResponse
@@ -17837,12 +17613,14 @@ Creates multiple `Invoice` objects with the given values. ```python from merge import Merge -from merge.resources.accounting import InvoiceBatchItemRequest, InvoiceRequest +from merge.environment import MergeEnvironment +from merge.accounting import InvoiceBatchItemRequest, InvoiceRequest client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.accounting.invoices.bulk_create( batch_items=[ InvoiceBatchItemRequest( @@ -17866,7 +17644,7 @@ client.accounting.invoices.bulk_create(
-**batch_items:** `typing.Sequence[InvoiceBatchItemRequest]` +**batch_items:** `typing.List[InvoiceBatchItemRequest]`
@@ -17886,7 +17664,7 @@ client.accounting.invoices.bulk_create(
-
client.accounting.invoices.bulk_retrieve(...) +
client.accounting.invoices.bulk_retrieve(...) -> BatchObjectsResponse
@@ -17914,11 +17692,13 @@ Returns the status and results of an `Invoice` bulk create batch. ```python from merge import Merge +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.accounting.invoices.bulk_retrieve( batch_id="batch_id", ) @@ -17957,7 +17737,7 @@ client.accounting.invoices.bulk_retrieve(
-
client.accounting.invoices.line_items_remote_field_classes_list(...) +
client.accounting.invoices.line_items_remote_field_classes_list(...) -> PaginatedRemoteFieldClassList
@@ -17985,11 +17765,13 @@ Returns a list of `RemoteFieldClass` objects. ```python from merge import Merge +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.accounting.invoices.line_items_remote_field_classes_list( cursor="cD0yMDIxLTAxLTA2KzAzJTNBMjQlM0E1My40MzQzMjYlMkIwMCUzQTAw", include_deleted_data=True, @@ -18082,7 +17864,7 @@ client.accounting.invoices.line_items_remote_field_classes_list(
-
client.accounting.invoices.meta_patch_retrieve(...) +
client.accounting.invoices.meta_patch_retrieve(...) -> MetaResponse
@@ -18110,11 +17892,13 @@ Returns metadata for `Invoice` PATCHs. ```python from merge import Merge +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.accounting.invoices.meta_patch_retrieve( id="id", ) @@ -18153,7 +17937,7 @@ client.accounting.invoices.meta_patch_retrieve(
-
client.accounting.invoices.meta_post_retrieve() +
client.accounting.invoices.meta_post_retrieve() -> MetaResponse
@@ -18181,11 +17965,13 @@ Returns metadata for `Invoice` POSTs. ```python from merge import Merge +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.accounting.invoices.meta_post_retrieve() ``` @@ -18214,7 +18000,7 @@ client.accounting.invoices.meta_post_retrieve()
-
client.accounting.invoices.remote_field_classes_list(...) +
client.accounting.invoices.remote_field_classes_list(...) -> PaginatedRemoteFieldClassList
@@ -18242,11 +18028,13 @@ Returns a list of `RemoteFieldClass` objects. ```python from merge import Merge +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.accounting.invoices.remote_field_classes_list( cursor="cD0yMDIxLTAxLTA2KzAzJTNBMjQlM0E1My40MzQzMjYlMkIwMCUzQTAw", include_deleted_data=True, @@ -18340,7 +18128,7 @@ client.accounting.invoices.remote_field_classes_list(
## Accounting Issues -
client.accounting.issues.list(...) +
client.accounting.issues.list(...) -> PaginatedIssueList
@@ -18367,38 +18155,30 @@ Gets all issues for Organization.
```python -import datetime - from merge import Merge -from merge.resources.accounting.resources.issues import IssuesListRequestStatus +from merge.environment import MergeEnvironment +import datetime client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.accounting.issues.list( account_token="account_token", cursor="cD0yMDIxLTAxLTA2KzAzJTNBMjQlM0E1My40MzQzMjYlMkIwMCUzQTAw", end_date="end_date", end_user_organization_name="end_user_organization_name", - first_incident_time_after=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), - first_incident_time_before=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), + first_incident_time_after=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), + first_incident_time_before=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), include_muted="include_muted", integration_name="integration_name", - last_incident_time_after=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), - last_incident_time_before=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), + last_incident_time_after=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), + last_incident_time_before=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), linked_account_id="linked_account_id", page_size=1, start_date="start_date", - status=IssuesListRequestStatus.ONGOING, + status="ONGOING", ) ``` @@ -18447,7 +18227,7 @@ client.accounting.issues.list(
-**first_incident_time_after:** `typing.Optional[dt.datetime]` — If provided, will only return issues whose first incident time was after this datetime. +**first_incident_time_after:** `typing.Optional[datetime.datetime]` — If provided, will only return issues whose first incident time was after this datetime.
@@ -18455,7 +18235,7 @@ client.accounting.issues.list(
-**first_incident_time_before:** `typing.Optional[dt.datetime]` — If provided, will only return issues whose first incident time was before this datetime. +**first_incident_time_before:** `typing.Optional[datetime.datetime]` — If provided, will only return issues whose first incident time was before this datetime.
@@ -18479,7 +18259,7 @@ client.accounting.issues.list(
-**last_incident_time_after:** `typing.Optional[dt.datetime]` — If provided, will only return issues whose last incident time was after this datetime. +**last_incident_time_after:** `typing.Optional[datetime.datetime]` — If provided, will only return issues whose last incident time was after this datetime.
@@ -18487,7 +18267,7 @@ client.accounting.issues.list(
-**last_incident_time_before:** `typing.Optional[dt.datetime]` — If provided, will only return issues whose last incident time was before this datetime. +**last_incident_time_before:** `typing.Optional[datetime.datetime]` — If provided, will only return issues whose last incident time was before this datetime.
@@ -18544,7 +18324,7 @@ Status of the issue. Options: ('ONGOING', 'RESOLVED')
-
client.accounting.issues.retrieve(...) +
client.accounting.issues.retrieve(...) -> Issue
@@ -18572,11 +18352,13 @@ Get a specific issue. ```python from merge import Merge +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.accounting.issues.retrieve( id="id", ) @@ -18616,7 +18398,7 @@ client.accounting.issues.retrieve(
## Accounting ItemFulfillments -
client.accounting.item_fulfillments.list(...) +
client.accounting.item_fulfillments.list(...) -> PaginatedItemFulfillmentList
@@ -18644,11 +18426,13 @@ Returns a list of `ItemFulfillment` objects. ```python from merge import Merge +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.accounting.item_fulfillments.list( cursor="cD0yMDIxLTAxLTA2KzAzJTNBMjQlM0E1My40MzQzMjYlMkIwMCUzQTAw", include_deleted_data=True, @@ -18656,6 +18440,8 @@ client.accounting.item_fulfillments.list( include_remote_fields=True, include_shell_data=True, page_size=1, + remote_fields="status", + show_enum_origins="status", ) ``` @@ -18680,12 +18466,7 @@ client.accounting.item_fulfillments.list(
-**expand:** `typing.Optional[ - typing.Union[ - ItemFulfillmentsListRequestExpandItem, - typing.Sequence[ItemFulfillmentsListRequestExpandItem], - ] -]` — Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces. +**expand:** `typing.Optional[typing.Union[ItemFulfillmentsListRequestExpandItem, typing.Sequence[ItemFulfillmentsListRequestExpandItem]]]` — Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces.
@@ -18733,7 +18514,7 @@ client.accounting.item_fulfillments.list(
-**remote_fields:** `typing.Optional[typing.Literal["status"]]` — Deprecated. Use show_enum_origins. +**remote_fields:** `typing.Optional[typing.Literal]` — Deprecated. Use show_enum_origins.
@@ -18741,7 +18522,7 @@ client.accounting.item_fulfillments.list(
-**show_enum_origins:** `typing.Optional[typing.Literal["status"]]` — A comma separated list of enum field names for which you'd like the original values to be returned, instead of Merge's normalized enum values. [Learn more](https://help.merge.dev/en/articles/8950958-show_enum_origins-query-parameter) +**show_enum_origins:** `typing.Optional[typing.Literal]` — A comma separated list of enum field names for which you'd like the original values to be returned, instead of Merge's normalized enum values. [Learn more](https://help.merge.dev/en/articles/8950958-show_enum_origins-query-parameter)
@@ -18761,7 +18542,7 @@ client.accounting.item_fulfillments.list(
-
client.accounting.item_fulfillments.create(...) +
client.accounting.item_fulfillments.create(...) -> ItemFulfillmentResponse
@@ -18789,12 +18570,14 @@ Creates an `ItemFulfillment` object with the given values. ```python from merge import Merge -from merge.resources.accounting import ItemFulfillmentRequestRequest +from merge.environment import MergeEnvironment +from merge.accounting import ItemFulfillmentRequestRequest client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.accounting.item_fulfillments.create( is_debug_mode=True, run_async=True, @@ -18851,7 +18634,7 @@ client.accounting.item_fulfillments.create(
-
client.accounting.item_fulfillments.retrieve(...) +
client.accounting.item_fulfillments.retrieve(...) -> ItemFulfillment
@@ -18879,16 +18662,20 @@ Returns an `ItemFulfillment` object with the given `id`. ```python from merge import Merge +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.accounting.item_fulfillments.retrieve( id="id", include_remote_data=True, include_remote_fields=True, include_shell_data=True, + remote_fields="status", + show_enum_origins="status", ) ``` @@ -18913,12 +18700,7 @@ client.accounting.item_fulfillments.retrieve(
-**expand:** `typing.Optional[ - typing.Union[ - ItemFulfillmentsRetrieveRequestExpandItem, - typing.Sequence[ItemFulfillmentsRetrieveRequestExpandItem], - ] -]` — Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces. +**expand:** `typing.Optional[typing.Union[ItemFulfillmentsRetrieveRequestExpandItem, typing.Sequence[ItemFulfillmentsRetrieveRequestExpandItem]]]` — Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces.
@@ -18950,7 +18732,7 @@ client.accounting.item_fulfillments.retrieve(
-**remote_fields:** `typing.Optional[typing.Literal["status"]]` — Deprecated. Use show_enum_origins. +**remote_fields:** `typing.Optional[typing.Literal]` — Deprecated. Use show_enum_origins.
@@ -18958,7 +18740,7 @@ client.accounting.item_fulfillments.retrieve(
-**show_enum_origins:** `typing.Optional[typing.Literal["status"]]` — A comma separated list of enum field names for which you'd like the original values to be returned, instead of Merge's normalized enum values. [Learn more](https://help.merge.dev/en/articles/8950958-show_enum_origins-query-parameter) +**show_enum_origins:** `typing.Optional[typing.Literal]` — A comma separated list of enum field names for which you'd like the original values to be returned, instead of Merge's normalized enum values. [Learn more](https://help.merge.dev/en/articles/8950958-show_enum_origins-query-parameter)
@@ -18978,7 +18760,7 @@ client.accounting.item_fulfillments.retrieve(
-
client.accounting.item_fulfillments.bulk_create(...) +
client.accounting.item_fulfillments.bulk_create(...) -> AsyncBulkCreateResponse
@@ -19006,15 +18788,14 @@ Creates multiple `ItemFulfillment` objects with the given values. ```python from merge import Merge -from merge.resources.accounting import ( - ItemFulfillmentBatchItemRequest, - ItemFulfillmentRequestRequest, -) +from merge.environment import MergeEnvironment +from merge.accounting import ItemFulfillmentBatchItemRequest, ItemFulfillmentRequestRequest client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.accounting.item_fulfillments.bulk_create( batch_items=[ ItemFulfillmentBatchItemRequest( @@ -19038,7 +18819,7 @@ client.accounting.item_fulfillments.bulk_create(
-**batch_items:** `typing.Sequence[ItemFulfillmentBatchItemRequest]` +**batch_items:** `typing.List[ItemFulfillmentBatchItemRequest]`
@@ -19058,7 +18839,7 @@ client.accounting.item_fulfillments.bulk_create(
-
client.accounting.item_fulfillments.bulk_retrieve(...) +
client.accounting.item_fulfillments.bulk_retrieve(...) -> BatchObjectsResponse
@@ -19086,11 +18867,13 @@ Returns the status and results of an `ItemFulfillment` bulk create batch. ```python from merge import Merge +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.accounting.item_fulfillments.bulk_retrieve( batch_id="batch_id", ) @@ -19129,7 +18912,7 @@ client.accounting.item_fulfillments.bulk_retrieve(
-
client.accounting.item_fulfillments.lines_remote_field_classes_list(...) +
client.accounting.item_fulfillments.lines_remote_field_classes_list(...) -> PaginatedRemoteFieldClassList
@@ -19157,11 +18940,13 @@ Returns a list of `RemoteFieldClass` objects. ```python from merge import Merge +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.accounting.item_fulfillments.lines_remote_field_classes_list( cursor="cD0yMDIxLTAxLTA2KzAzJTNBMjQlM0E1My40MzQzMjYlMkIwMCUzQTAw", include_deleted_data=True, @@ -19254,7 +19039,7 @@ client.accounting.item_fulfillments.lines_remote_field_classes_list(
-
client.accounting.item_fulfillments.meta_post_retrieve() +
client.accounting.item_fulfillments.meta_post_retrieve() -> MetaResponse
@@ -19282,11 +19067,13 @@ Returns metadata for `ItemFulfillment` POSTs. ```python from merge import Merge +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.accounting.item_fulfillments.meta_post_retrieve() ``` @@ -19315,7 +19102,7 @@ client.accounting.item_fulfillments.meta_post_retrieve()
-
client.accounting.item_fulfillments.remote_field_classes_list(...) +
client.accounting.item_fulfillments.remote_field_classes_list(...) -> PaginatedRemoteFieldClassList
@@ -19343,11 +19130,13 @@ Returns a list of `RemoteFieldClass` objects. ```python from merge import Merge +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.accounting.item_fulfillments.remote_field_classes_list( cursor="cD0yMDIxLTAxLTA2KzAzJTNBMjQlM0E1My40MzQzMjYlMkIwMCUzQTAw", include_deleted_data=True, @@ -19441,7 +19230,7 @@ client.accounting.item_fulfillments.remote_field_classes_list(
## Accounting Items -
client.accounting.items.list(...) +
client.accounting.items.list(...) -> PaginatedItemList
@@ -19468,35 +19257,30 @@ Returns a list of `Item` objects.
```python -import datetime - from merge import Merge +from merge.environment import MergeEnvironment +import datetime client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.accounting.items.list( company_id="company_id", - created_after=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), - created_before=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), + created_after=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), + created_before=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), cursor="cD0yMDIxLTAxLTA2KzAzJTNBMjQlM0E1My40MzQzMjYlMkIwMCUzQTAw", include_deleted_data=True, include_remote_data=True, include_shell_data=True, - modified_after=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), - modified_before=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), + modified_after=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), + modified_before=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), name="name", page_size=1, + remote_fields="status", remote_id="remote_id", + show_enum_origins="status", ) ``` @@ -19521,7 +19305,7 @@ client.accounting.items.list(
-**created_after:** `typing.Optional[dt.datetime]` — If provided, will only return objects created after this datetime. +**created_after:** `typing.Optional[datetime.datetime]` — If provided, will only return objects created after this datetime.
@@ -19529,7 +19313,7 @@ client.accounting.items.list(
-**created_before:** `typing.Optional[dt.datetime]` — If provided, will only return objects created before this datetime. +**created_before:** `typing.Optional[datetime.datetime]` — If provided, will only return objects created before this datetime.
@@ -19545,11 +19329,7 @@ client.accounting.items.list(
-**expand:** `typing.Optional[ - typing.Union[ - ItemsListRequestExpandItem, typing.Sequence[ItemsListRequestExpandItem] - ] -]` — Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces. +**expand:** `typing.Optional[typing.Union[ItemsListRequestExpandItem, typing.Sequence[ItemsListRequestExpandItem]]]` — Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces.
@@ -19581,7 +19361,7 @@ client.accounting.items.list(
-**modified_after:** `typing.Optional[dt.datetime]` — If provided, only objects synced by Merge after this date time will be returned. +**modified_after:** `typing.Optional[datetime.datetime]` — If provided, only objects synced by Merge after this date time will be returned.
@@ -19589,7 +19369,7 @@ client.accounting.items.list(
-**modified_before:** `typing.Optional[dt.datetime]` — If provided, only objects synced by Merge before this date time will be returned. +**modified_before:** `typing.Optional[datetime.datetime]` — If provided, only objects synced by Merge before this date time will be returned.
@@ -19613,7 +19393,7 @@ client.accounting.items.list(
-**remote_fields:** `typing.Optional[typing.Literal["status"]]` — Deprecated. Use show_enum_origins. +**remote_fields:** `typing.Optional[typing.Literal]` — Deprecated. Use show_enum_origins.
@@ -19629,7 +19409,7 @@ client.accounting.items.list(
-**show_enum_origins:** `typing.Optional[typing.Literal["status"]]` — A comma separated list of enum field names for which you'd like the original values to be returned, instead of Merge's normalized enum values. [Learn more](https://help.merge.dev/en/articles/8950958-show_enum_origins-query-parameter) +**show_enum_origins:** `typing.Optional[typing.Literal]` — A comma separated list of enum field names for which you'd like the original values to be returned, instead of Merge's normalized enum values. [Learn more](https://help.merge.dev/en/articles/8950958-show_enum_origins-query-parameter)
@@ -19649,7 +19429,7 @@ client.accounting.items.list(
-
client.accounting.items.create(...) +
client.accounting.items.create(...) -> ItemResponse
@@ -19677,12 +19457,14 @@ Creates an `Item` object with the given values. ```python from merge import Merge -from merge.resources.accounting import ItemRequestRequest +from merge.environment import MergeEnvironment +from merge.accounting import ItemRequestRequest client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.accounting.items.create( is_debug_mode=True, run_async=True, @@ -19739,7 +19521,7 @@ client.accounting.items.create(
-
client.accounting.items.retrieve(...) +
client.accounting.items.retrieve(...) -> Item
@@ -19767,15 +19549,19 @@ Returns an `Item` object with the given `id`. ```python from merge import Merge +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.accounting.items.retrieve( id="id", include_remote_data=True, include_shell_data=True, + remote_fields="status", + show_enum_origins="status", ) ``` @@ -19800,12 +19586,7 @@ client.accounting.items.retrieve(
-**expand:** `typing.Optional[ - typing.Union[ - ItemsRetrieveRequestExpandItem, - typing.Sequence[ItemsRetrieveRequestExpandItem], - ] -]` — Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces. +**expand:** `typing.Optional[typing.Union[ItemsRetrieveRequestExpandItem, typing.Sequence[ItemsRetrieveRequestExpandItem]]]` — Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces.
@@ -19829,7 +19610,7 @@ client.accounting.items.retrieve(
-**remote_fields:** `typing.Optional[typing.Literal["status"]]` — Deprecated. Use show_enum_origins. +**remote_fields:** `typing.Optional[typing.Literal]` — Deprecated. Use show_enum_origins.
@@ -19837,7 +19618,7 @@ client.accounting.items.retrieve(
-**show_enum_origins:** `typing.Optional[typing.Literal["status"]]` — A comma separated list of enum field names for which you'd like the original values to be returned, instead of Merge's normalized enum values. [Learn more](https://help.merge.dev/en/articles/8950958-show_enum_origins-query-parameter) +**show_enum_origins:** `typing.Optional[typing.Literal]` — A comma separated list of enum field names for which you'd like the original values to be returned, instead of Merge's normalized enum values. [Learn more](https://help.merge.dev/en/articles/8950958-show_enum_origins-query-parameter)
@@ -19857,7 +19638,7 @@ client.accounting.items.retrieve(
-
client.accounting.items.partial_update(...) +
client.accounting.items.partial_update(...) -> ItemResponse
@@ -19885,12 +19666,14 @@ Updates an `Item` object with the given `id`. ```python from merge import Merge -from merge.resources.accounting import PatchedItemRequestRequest +from merge.environment import MergeEnvironment +from merge.accounting import PatchedItemRequestRequest client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.accounting.items.partial_update( id="id", is_debug_mode=True, @@ -19956,7 +19739,7 @@ client.accounting.items.partial_update(
-
client.accounting.items.meta_patch_retrieve(...) +
client.accounting.items.meta_patch_retrieve(...) -> MetaResponse
@@ -19984,11 +19767,13 @@ Returns metadata for `Item` PATCHs. ```python from merge import Merge +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.accounting.items.meta_patch_retrieve( id="id", ) @@ -20027,7 +19812,7 @@ client.accounting.items.meta_patch_retrieve(
-
client.accounting.items.meta_post_retrieve() +
client.accounting.items.meta_post_retrieve() -> MetaResponse
@@ -20055,11 +19840,13 @@ Returns metadata for `Item` POSTs. ```python from merge import Merge +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.accounting.items.meta_post_retrieve() ``` @@ -20089,7 +19876,7 @@ client.accounting.items.meta_post_retrieve()
## Accounting JournalEntries -
client.accounting.journal_entries.list(...) +
client.accounting.journal_entries.list(...) -> PaginatedJournalEntryList
@@ -20116,41 +19903,30 @@ Returns a list of `JournalEntry` objects.
```python -import datetime - from merge import Merge +from merge.environment import MergeEnvironment +import datetime client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.accounting.journal_entries.list( company_id="company_id", - created_after=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), - created_before=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), + created_after=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), + created_before=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), cursor="cD0yMDIxLTAxLTA2KzAzJTNBMjQlM0E1My40MzQzMjYlMkIwMCUzQTAw", include_deleted_data=True, include_remote_data=True, include_remote_fields=True, include_shell_data=True, - modified_after=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), - modified_before=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), + modified_after=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), + modified_before=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), page_size=1, remote_id="remote_id", - transaction_date_after=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), - transaction_date_before=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), + transaction_date_after=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), + transaction_date_before=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), ) ``` @@ -20175,7 +19951,7 @@ client.accounting.journal_entries.list(
-**created_after:** `typing.Optional[dt.datetime]` — If provided, will only return objects created after this datetime. +**created_after:** `typing.Optional[datetime.datetime]` — If provided, will only return objects created after this datetime.
@@ -20183,7 +19959,7 @@ client.accounting.journal_entries.list(
-**created_before:** `typing.Optional[dt.datetime]` — If provided, will only return objects created before this datetime. +**created_before:** `typing.Optional[datetime.datetime]` — If provided, will only return objects created before this datetime.
@@ -20199,12 +19975,7 @@ client.accounting.journal_entries.list(
-**expand:** `typing.Optional[ - typing.Union[ - JournalEntriesListRequestExpandItem, - typing.Sequence[JournalEntriesListRequestExpandItem], - ] -]` — Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces. +**expand:** `typing.Optional[typing.Union[JournalEntriesListRequestExpandItem, typing.Sequence[JournalEntriesListRequestExpandItem]]]` — Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces.
@@ -20244,7 +20015,7 @@ client.accounting.journal_entries.list(
-**modified_after:** `typing.Optional[dt.datetime]` — If provided, only objects synced by Merge after this date time will be returned. +**modified_after:** `typing.Optional[datetime.datetime]` — If provided, only objects synced by Merge after this date time will be returned.
@@ -20252,7 +20023,7 @@ client.accounting.journal_entries.list(
-**modified_before:** `typing.Optional[dt.datetime]` — If provided, only objects synced by Merge before this date time will be returned. +**modified_before:** `typing.Optional[datetime.datetime]` — If provided, only objects synced by Merge before this date time will be returned.
@@ -20276,7 +20047,7 @@ client.accounting.journal_entries.list(
-**transaction_date_after:** `typing.Optional[dt.datetime]` — If provided, will only return objects created after this datetime. +**transaction_date_after:** `typing.Optional[datetime.datetime]` — If provided, will only return objects created after this datetime.
@@ -20284,7 +20055,7 @@ client.accounting.journal_entries.list(
-**transaction_date_before:** `typing.Optional[dt.datetime]` — If provided, will only return objects created before this datetime. +**transaction_date_before:** `typing.Optional[datetime.datetime]` — If provided, will only return objects created before this datetime.
@@ -20304,7 +20075,7 @@ client.accounting.journal_entries.list(
-
client.accounting.journal_entries.create(...) +
client.accounting.journal_entries.create(...) -> JournalEntryResponse
@@ -20332,12 +20103,14 @@ Creates a `JournalEntry` object with the given values. ```python from merge import Merge -from merge.resources.accounting import JournalEntryRequest +from merge.environment import MergeEnvironment +from merge.accounting import JournalEntryRequest client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.accounting.journal_entries.create( is_debug_mode=True, run_async=True, @@ -20394,7 +20167,7 @@ client.accounting.journal_entries.create(
-
client.accounting.journal_entries.retrieve(...) +
client.accounting.journal_entries.retrieve(...) -> JournalEntry
@@ -20422,11 +20195,13 @@ Returns a `JournalEntry` object with the given `id`. ```python from merge import Merge +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.accounting.journal_entries.retrieve( id="id", include_remote_data=True, @@ -20456,12 +20231,7 @@ client.accounting.journal_entries.retrieve(
-**expand:** `typing.Optional[ - typing.Union[ - JournalEntriesRetrieveRequestExpandItem, - typing.Sequence[JournalEntriesRetrieveRequestExpandItem], - ] -]` — Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces. +**expand:** `typing.Optional[typing.Union[JournalEntriesRetrieveRequestExpandItem, typing.Sequence[JournalEntriesRetrieveRequestExpandItem]]]` — Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces.
@@ -20505,7 +20275,7 @@ client.accounting.journal_entries.retrieve(
-
client.accounting.journal_entries.lines_remote_field_classes_list(...) +
client.accounting.journal_entries.lines_remote_field_classes_list(...) -> PaginatedRemoteFieldClassList
@@ -20533,11 +20303,13 @@ Returns a list of `RemoteFieldClass` objects. ```python from merge import Merge +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.accounting.journal_entries.lines_remote_field_classes_list( cursor="cD0yMDIxLTAxLTA2KzAzJTNBMjQlM0E1My40MzQzMjYlMkIwMCUzQTAw", include_deleted_data=True, @@ -20630,7 +20402,7 @@ client.accounting.journal_entries.lines_remote_field_classes_list(
-
client.accounting.journal_entries.meta_post_retrieve() +
client.accounting.journal_entries.meta_post_retrieve() -> MetaResponse
@@ -20658,11 +20430,13 @@ Returns metadata for `JournalEntry` POSTs. ```python from merge import Merge +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.accounting.journal_entries.meta_post_retrieve() ``` @@ -20691,7 +20465,7 @@ client.accounting.journal_entries.meta_post_retrieve()
-
client.accounting.journal_entries.remote_field_classes_list(...) +
client.accounting.journal_entries.remote_field_classes_list(...) -> PaginatedRemoteFieldClassList
@@ -20719,11 +20493,13 @@ Returns a list of `RemoteFieldClass` objects. ```python from merge import Merge +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.accounting.journal_entries.remote_field_classes_list( cursor="cD0yMDIxLTAxLTA2KzAzJTNBMjQlM0E1My40MzQzMjYlMkIwMCUzQTAw", include_deleted_data=True, @@ -20817,7 +20593,7 @@ client.accounting.journal_entries.remote_field_classes_list(
## Accounting LinkToken -
client.accounting.link_token.create(...) +
client.accounting.link_token.create(...) -> LinkToken
@@ -20845,17 +20621,21 @@ Creates a link token to be used when linking a new end user. The link token expi ```python from merge import Merge -from merge.resources.accounting import CategoriesEnum +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.accounting.link_token.create( end_user_email_address="example@gmail.com", end_user_organization_name="Test Organization", end_user_origin_id="12345", - categories=[CategoriesEnum.HRIS, CategoriesEnum.ATS], + categories=[ + "hris", + "ats" + ], ) ``` @@ -20896,7 +20676,7 @@ client.accounting.link_token.create(
-**categories:** `typing.Sequence[CategoriesEnum]` — The integration categories to show in Merge Link. +**categories:** `typing.List[CategoriesEnum]` — The integration categories to show in Merge Link.
@@ -20936,7 +20716,7 @@ client.accounting.link_token.create(
-**common_models:** `typing.Optional[typing.Sequence[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. +**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.
@@ -20944,14 +20724,7 @@ client.accounting.link_token.create(
-**category_common_model_scopes:** `typing.Optional[ - typing.Dict[ - str, - typing.Optional[ - typing.Sequence[IndividualCommonModelScopeDeserializerRequest] - ], - ] -]` — When creating a Link Token, you can set permissions for Common Models that will apply to the account that is going to be linked. Any model or field not specified in link token payload will default to existing settings. +**category_common_model_scopes:** `typing.Optional[typing.Dict[str, typing.Optional[typing.List[IndividualCommonModelScopeDeserializerRequest]]]]` — When creating a Link Token, you can set permissions for Common Models that will apply to the account that is going to be linked. Any model or field not specified in link token payload will default to existing settings.
@@ -20980,7 +20753,7 @@ The following subset of IETF language tags can be used to configure localization
-**integration_specific_config:** `typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]]` — A JSON object containing integration-specific configuration options. +**integration_specific_config:** `typing.Optional[typing.Dict[str, typing.Any]]` — A JSON object containing integration-specific configuration options.
@@ -21029,7 +20802,7 @@ When creating a Link token, you can specifiy the initial screen of Linking Flow
## Accounting LinkedAccounts -
client.accounting.linked_accounts.list(...) +
client.accounting.linked_accounts.list(...) -> PaginatedAccountDetailsAndActionsList
@@ -21057,16 +20830,15 @@ List linked accounts for your organization. ```python from merge import Merge -from merge.resources.accounting.resources.linked_accounts import ( - LinkedAccountsListRequestCategory, -) +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.accounting.linked_accounts.list( - category=LinkedAccountsListRequestCategory.ACCOUNTING, + category="accounting", cursor="cD0yMDIxLTAxLTA2KzAzJTNBMjQlM0E1My40MzQzMjYlMkIwMCUzQTAw", end_user_email_address="end_user_email_address", end_user_organization_name="end_user_organization_name", @@ -21226,7 +20998,7 @@ Options: `accounting`, `ats`, `crm`, `filestorage`, `hris`, `knowledgebase`, `mk
## Accounting Passthrough -
client.accounting.passthrough.create(...) +
client.accounting.passthrough.create(...) -> RemoteResponse
@@ -21254,15 +21026,17 @@ Pull data from an endpoint not currently supported by Merge. ```python from merge import Merge -from merge.resources.accounting import DataPassthroughRequest, MethodEnum +from merge.environment import MergeEnvironment +from merge.accounting import DataPassthroughRequest client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.accounting.passthrough.create( request=DataPassthroughRequest( - method=MethodEnum.GET, + method="GET", path="/scooters", ), ) @@ -21302,7 +21076,7 @@ client.accounting.passthrough.create(
## Accounting PaymentMethods -
client.accounting.payment_methods.list(...) +
client.accounting.payment_methods.list(...) -> PaginatedPaymentMethodList
@@ -21330,11 +21104,13 @@ Returns a list of `PaymentMethod` objects. ```python from merge import Merge +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.accounting.payment_methods.list( cursor="cD0yMDIxLTAxLTA2KzAzJTNBMjQlM0E1My40MzQzMjYlMkIwMCUzQTAw", include_deleted_data=True, @@ -21409,7 +21185,7 @@ client.accounting.payment_methods.list(
-
client.accounting.payment_methods.retrieve(...) +
client.accounting.payment_methods.retrieve(...) -> PaymentMethod
@@ -21437,11 +21213,13 @@ Returns a `PaymentMethod` object with the given `id`. ```python from merge import Merge +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.accounting.payment_methods.retrieve( id="id", include_remote_data=True, @@ -21499,7 +21277,7 @@ client.accounting.payment_methods.retrieve(
## Accounting PaymentTerms -
client.accounting.payment_terms.list(...) +
client.accounting.payment_terms.list(...) -> PaginatedPaymentTermList
@@ -21527,11 +21305,13 @@ Returns a list of `PaymentTerm` objects. ```python from merge import Merge +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.accounting.payment_terms.list( cursor="cD0yMDIxLTAxLTA2KzAzJTNBMjQlM0E1My40MzQzMjYlMkIwMCUzQTAw", include_deleted_data=True, @@ -21562,11 +21342,7 @@ client.accounting.payment_terms.list(
-**expand:** `typing.Optional[ - typing.Union[ - typing.Literal["company"], typing.Sequence[typing.Literal["company"]] - ] -]` — Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces. +**expand:** `typing.Optional[typing.Union[typing.Literal, typing.Sequence[typing.Literal]]]` — Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces.
@@ -21618,7 +21394,7 @@ client.accounting.payment_terms.list(
-
client.accounting.payment_terms.retrieve(...) +
client.accounting.payment_terms.retrieve(...) -> PaymentTerm
@@ -21646,11 +21422,13 @@ Returns a `PaymentTerm` object with the given `id`. ```python from merge import Merge +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.accounting.payment_terms.retrieve( id="id", include_remote_data=True, @@ -21679,11 +21457,7 @@ client.accounting.payment_terms.retrieve(
-**expand:** `typing.Optional[ - typing.Union[ - typing.Literal["company"], typing.Sequence[typing.Literal["company"]] - ] -]` — Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces. +**expand:** `typing.Optional[typing.Union[typing.Literal, typing.Sequence[typing.Literal]]]` — Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces.
@@ -21720,7 +21494,7 @@ client.accounting.payment_terms.retrieve(
## Accounting Payments -
client.accounting.payments.list(...) +
client.accounting.payments.list(...) -> PaginatedPaymentList
@@ -21747,43 +21521,32 @@ Returns a list of `Payment` objects.
```python -import datetime - from merge import Merge +from merge.environment import MergeEnvironment +import datetime client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.accounting.payments.list( account_id="account_id", company_id="company_id", contact_id="contact_id", - created_after=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), - created_before=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), + created_after=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), + created_before=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), cursor="cD0yMDIxLTAxLTA2KzAzJTNBMjQlM0E1My40MzQzMjYlMkIwMCUzQTAw", include_deleted_data=True, include_remote_data=True, include_remote_fields=True, include_shell_data=True, - modified_after=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), - modified_before=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), + modified_after=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), + modified_before=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), page_size=1, remote_id="remote_id", - transaction_date_after=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), - transaction_date_before=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), + transaction_date_after=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), + transaction_date_before=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), ) ``` @@ -21824,7 +21587,7 @@ client.accounting.payments.list(
-**created_after:** `typing.Optional[dt.datetime]` — If provided, will only return objects created after this datetime. +**created_after:** `typing.Optional[datetime.datetime]` — If provided, will only return objects created after this datetime.
@@ -21832,7 +21595,7 @@ client.accounting.payments.list(
-**created_before:** `typing.Optional[dt.datetime]` — If provided, will only return objects created before this datetime. +**created_before:** `typing.Optional[datetime.datetime]` — If provided, will only return objects created before this datetime.
@@ -21848,12 +21611,7 @@ client.accounting.payments.list(
-**expand:** `typing.Optional[ - typing.Union[ - PaymentsListRequestExpandItem, - typing.Sequence[PaymentsListRequestExpandItem], - ] -]` — Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces. +**expand:** `typing.Optional[typing.Union[PaymentsListRequestExpandItem, typing.Sequence[PaymentsListRequestExpandItem]]]` — Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces.
@@ -21893,7 +21651,7 @@ client.accounting.payments.list(
-**modified_after:** `typing.Optional[dt.datetime]` — If provided, only objects synced by Merge after this date time will be returned. +**modified_after:** `typing.Optional[datetime.datetime]` — If provided, only objects synced by Merge after this date time will be returned.
@@ -21901,7 +21659,7 @@ client.accounting.payments.list(
-**modified_before:** `typing.Optional[dt.datetime]` — If provided, only objects synced by Merge before this date time will be returned. +**modified_before:** `typing.Optional[datetime.datetime]` — If provided, only objects synced by Merge before this date time will be returned.
@@ -21925,7 +21683,7 @@ client.accounting.payments.list(
-**transaction_date_after:** `typing.Optional[dt.datetime]` — If provided, will only return objects created after this datetime. +**transaction_date_after:** `typing.Optional[datetime.datetime]` — If provided, will only return objects created after this datetime.
@@ -21933,7 +21691,7 @@ client.accounting.payments.list(
-**transaction_date_before:** `typing.Optional[dt.datetime]` — If provided, will only return objects created before this datetime. +**transaction_date_before:** `typing.Optional[datetime.datetime]` — If provided, will only return objects created before this datetime.
@@ -21953,7 +21711,7 @@ client.accounting.payments.list(
-
client.accounting.payments.create(...) +
client.accounting.payments.create(...) -> PaymentResponse
@@ -21981,12 +21739,14 @@ Creates a `Payment` object with the given values. ```python from merge import Merge -from merge.resources.accounting import PaymentRequest +from merge.environment import MergeEnvironment +from merge.accounting import PaymentRequest client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.accounting.payments.create( is_debug_mode=True, run_async=True, @@ -22043,7 +21803,7 @@ client.accounting.payments.create(
-
client.accounting.payments.retrieve(...) +
client.accounting.payments.retrieve(...) -> Payment
@@ -22071,11 +21831,13 @@ Returns a `Payment` object with the given `id`. ```python from merge import Merge +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.accounting.payments.retrieve( id="id", include_remote_data=True, @@ -22105,12 +21867,7 @@ client.accounting.payments.retrieve(
-**expand:** `typing.Optional[ - typing.Union[ - PaymentsRetrieveRequestExpandItem, - typing.Sequence[PaymentsRetrieveRequestExpandItem], - ] -]` — Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces. +**expand:** `typing.Optional[typing.Union[PaymentsRetrieveRequestExpandItem, typing.Sequence[PaymentsRetrieveRequestExpandItem]]]` — Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces.
@@ -22154,7 +21911,7 @@ client.accounting.payments.retrieve(
-
client.accounting.payments.partial_update(...) +
client.accounting.payments.partial_update(...) -> PaymentResponse
@@ -22182,12 +21939,14 @@ Updates a `Payment` object with the given `id`. ```python from merge import Merge -from merge.resources.accounting import PatchedPaymentRequest +from merge.environment import MergeEnvironment +from merge.accounting import PatchedPaymentRequest client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.accounting.payments.partial_update( id="id", is_debug_mode=True, @@ -22253,7 +22012,7 @@ client.accounting.payments.partial_update(
-
client.accounting.payments.line_items_remote_field_classes_list(...) +
client.accounting.payments.line_items_remote_field_classes_list(...) -> PaginatedRemoteFieldClassList
@@ -22281,11 +22040,13 @@ Returns a list of `RemoteFieldClass` objects. ```python from merge import Merge +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.accounting.payments.line_items_remote_field_classes_list( cursor="cD0yMDIxLTAxLTA2KzAzJTNBMjQlM0E1My40MzQzMjYlMkIwMCUzQTAw", include_deleted_data=True, @@ -22378,7 +22139,7 @@ client.accounting.payments.line_items_remote_field_classes_list(
-
client.accounting.payments.meta_patch_retrieve(...) +
client.accounting.payments.meta_patch_retrieve(...) -> MetaResponse
@@ -22406,11 +22167,13 @@ Returns metadata for `Payment` PATCHs. ```python from merge import Merge +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.accounting.payments.meta_patch_retrieve( id="id", ) @@ -22449,7 +22212,7 @@ client.accounting.payments.meta_patch_retrieve(
-
client.accounting.payments.meta_post_retrieve() +
client.accounting.payments.meta_post_retrieve() -> MetaResponse
@@ -22477,11 +22240,13 @@ Returns metadata for `Payment` POSTs. ```python from merge import Merge +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.accounting.payments.meta_post_retrieve() ``` @@ -22510,7 +22275,7 @@ client.accounting.payments.meta_post_retrieve()
-
client.accounting.payments.remote_field_classes_list(...) +
client.accounting.payments.remote_field_classes_list(...) -> PaginatedRemoteFieldClassList
@@ -22538,11 +22303,13 @@ Returns a list of `RemoteFieldClass` objects. ```python from merge import Merge +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.accounting.payments.remote_field_classes_list( cursor="cD0yMDIxLTAxLTA2KzAzJTNBMjQlM0E1My40MzQzMjYlMkIwMCUzQTAw", include_deleted_data=True, @@ -22636,7 +22403,7 @@ client.accounting.payments.remote_field_classes_list(
## Accounting PhoneNumbers -
client.accounting.phone_numbers.retrieve(...) +
client.accounting.phone_numbers.retrieve(...) -> AccountingPhoneNumber
@@ -22664,11 +22431,13 @@ Returns an `AccountingPhoneNumber` object with the given `id`. ```python from merge import Merge +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.accounting.phone_numbers.retrieve( id="id", include_remote_data=True, @@ -22726,7 +22495,7 @@ client.accounting.phone_numbers.retrieve(
## Accounting Projects -
client.accounting.projects.list(...) +
client.accounting.projects.list(...) -> PaginatedProjectList
@@ -22753,33 +22522,26 @@ Returns a list of `Project` objects.
```python -import datetime - from merge import Merge +from merge.environment import MergeEnvironment +import datetime client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.accounting.projects.list( company_id="company_id", - created_after=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), - created_before=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), + created_after=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), + created_before=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), cursor="cD0yMDIxLTAxLTA2KzAzJTNBMjQlM0E1My40MzQzMjYlMkIwMCUzQTAw", include_deleted_data=True, include_remote_data=True, include_shell_data=True, is_active="is_active", - modified_after=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), - modified_before=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), + modified_after=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), + modified_before=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), page_size=1, remote_id="remote_id", ) @@ -22806,7 +22568,7 @@ client.accounting.projects.list(
-**created_after:** `typing.Optional[dt.datetime]` — If provided, will only return objects created after this datetime. +**created_after:** `typing.Optional[datetime.datetime]` — If provided, will only return objects created after this datetime.
@@ -22814,7 +22576,7 @@ client.accounting.projects.list(
-**created_before:** `typing.Optional[dt.datetime]` — If provided, will only return objects created before this datetime. +**created_before:** `typing.Optional[datetime.datetime]` — If provided, will only return objects created before this datetime.
@@ -22830,12 +22592,7 @@ client.accounting.projects.list(
-**expand:** `typing.Optional[ - typing.Union[ - ProjectsListRequestExpandItem, - typing.Sequence[ProjectsListRequestExpandItem], - ] -]` — Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces. +**expand:** `typing.Optional[typing.Union[ProjectsListRequestExpandItem, typing.Sequence[ProjectsListRequestExpandItem]]]` — Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces.
@@ -22875,7 +22632,7 @@ client.accounting.projects.list(
-**modified_after:** `typing.Optional[dt.datetime]` — If provided, only objects synced by Merge after this date time will be returned. +**modified_after:** `typing.Optional[datetime.datetime]` — If provided, only objects synced by Merge after this date time will be returned.
@@ -22883,7 +22640,7 @@ client.accounting.projects.list(
-**modified_before:** `typing.Optional[dt.datetime]` — If provided, only objects synced by Merge before this date time will be returned. +**modified_before:** `typing.Optional[datetime.datetime]` — If provided, only objects synced by Merge before this date time will be returned.
@@ -22919,7 +22676,7 @@ client.accounting.projects.list(
-
client.accounting.projects.retrieve(...) +
client.accounting.projects.retrieve(...) -> Project
@@ -22947,11 +22704,13 @@ Returns a `Project` object with the given `id`. ```python from merge import Merge +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.accounting.projects.retrieve( id="id", include_remote_data=True, @@ -22980,12 +22739,7 @@ client.accounting.projects.retrieve(
-**expand:** `typing.Optional[ - typing.Union[ - ProjectsRetrieveRequestExpandItem, - typing.Sequence[ProjectsRetrieveRequestExpandItem], - ] -]` — Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces. +**expand:** `typing.Optional[typing.Union[ProjectsRetrieveRequestExpandItem, typing.Sequence[ProjectsRetrieveRequestExpandItem]]]` — Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces.
@@ -23022,7 +22776,7 @@ client.accounting.projects.retrieve(
## Accounting PurchaseOrders -
client.accounting.purchase_orders.list(...) +
client.accounting.purchase_orders.list(...) -> PaginatedPurchaseOrderList
@@ -23049,41 +22803,32 @@ Returns a list of `PurchaseOrder` objects.
```python -import datetime - from merge import Merge +from merge.environment import MergeEnvironment +import datetime client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.accounting.purchase_orders.list( company_id="company_id", - created_after=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), - created_before=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), + created_after=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), + created_before=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), cursor="cD0yMDIxLTAxLTA2KzAzJTNBMjQlM0E1My40MzQzMjYlMkIwMCUzQTAw", include_deleted_data=True, include_remote_data=True, include_remote_fields=True, include_shell_data=True, - issue_date_after=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), - issue_date_before=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), - modified_after=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), - modified_before=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), + issue_date_after=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), + issue_date_before=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), + modified_after=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), + modified_before=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), page_size=1, + remote_fields="status", remote_id="remote_id", + show_enum_origins="status", ) ``` @@ -23108,7 +22853,7 @@ client.accounting.purchase_orders.list(
-**created_after:** `typing.Optional[dt.datetime]` — If provided, will only return objects created after this datetime. +**created_after:** `typing.Optional[datetime.datetime]` — If provided, will only return objects created after this datetime.
@@ -23116,7 +22861,7 @@ client.accounting.purchase_orders.list(
-**created_before:** `typing.Optional[dt.datetime]` — If provided, will only return objects created before this datetime. +**created_before:** `typing.Optional[datetime.datetime]` — If provided, will only return objects created before this datetime.
@@ -23132,12 +22877,7 @@ client.accounting.purchase_orders.list(
-**expand:** `typing.Optional[ - typing.Union[ - PurchaseOrdersListRequestExpandItem, - typing.Sequence[PurchaseOrdersListRequestExpandItem], - ] -]` — Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces. +**expand:** `typing.Optional[typing.Union[PurchaseOrdersListRequestExpandItem, typing.Sequence[PurchaseOrdersListRequestExpandItem]]]` — Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces.
@@ -23177,7 +22917,7 @@ client.accounting.purchase_orders.list(
-**issue_date_after:** `typing.Optional[dt.datetime]` — If provided, will only return objects created after this datetime. +**issue_date_after:** `typing.Optional[datetime.datetime]` — If provided, will only return objects created after this datetime.
@@ -23185,7 +22925,7 @@ client.accounting.purchase_orders.list(
-**issue_date_before:** `typing.Optional[dt.datetime]` — If provided, will only return objects created before this datetime. +**issue_date_before:** `typing.Optional[datetime.datetime]` — If provided, will only return objects created before this datetime.
@@ -23193,7 +22933,7 @@ client.accounting.purchase_orders.list(
-**modified_after:** `typing.Optional[dt.datetime]` — If provided, only objects synced by Merge after this date time will be returned. +**modified_after:** `typing.Optional[datetime.datetime]` — If provided, only objects synced by Merge after this date time will be returned.
@@ -23201,7 +22941,7 @@ client.accounting.purchase_orders.list(
-**modified_before:** `typing.Optional[dt.datetime]` — If provided, only objects synced by Merge before this date time will be returned. +**modified_before:** `typing.Optional[datetime.datetime]` — If provided, only objects synced by Merge before this date time will be returned.
@@ -23217,7 +22957,7 @@ client.accounting.purchase_orders.list(
-**remote_fields:** `typing.Optional[typing.Literal["status"]]` — Deprecated. Use show_enum_origins. +**remote_fields:** `typing.Optional[typing.Literal]` — Deprecated. Use show_enum_origins.
@@ -23233,7 +22973,7 @@ client.accounting.purchase_orders.list(
-**show_enum_origins:** `typing.Optional[typing.Literal["status"]]` — A comma separated list of enum field names for which you'd like the original values to be returned, instead of Merge's normalized enum values. [Learn more](https://help.merge.dev/en/articles/8950958-show_enum_origins-query-parameter) +**show_enum_origins:** `typing.Optional[typing.Literal]` — A comma separated list of enum field names for which you'd like the original values to be returned, instead of Merge's normalized enum values. [Learn more](https://help.merge.dev/en/articles/8950958-show_enum_origins-query-parameter)
@@ -23253,7 +22993,7 @@ client.accounting.purchase_orders.list(
-
client.accounting.purchase_orders.create(...) +
client.accounting.purchase_orders.create(...) -> PurchaseOrderResponse
@@ -23281,12 +23021,14 @@ Creates a `PurchaseOrder` object with the given values. ```python from merge import Merge -from merge.resources.accounting import PurchaseOrderRequest +from merge.environment import MergeEnvironment +from merge.accounting import PurchaseOrderRequest client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.accounting.purchase_orders.create( is_debug_mode=True, run_async=True, @@ -23343,7 +23085,7 @@ client.accounting.purchase_orders.create(
-
client.accounting.purchase_orders.retrieve(...) +
client.accounting.purchase_orders.retrieve(...) -> PurchaseOrder
@@ -23371,16 +23113,20 @@ Returns a `PurchaseOrder` object with the given `id`. ```python from merge import Merge +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.accounting.purchase_orders.retrieve( id="id", include_remote_data=True, include_remote_fields=True, include_shell_data=True, + remote_fields="status", + show_enum_origins="status", ) ``` @@ -23405,12 +23151,7 @@ client.accounting.purchase_orders.retrieve(
-**expand:** `typing.Optional[ - typing.Union[ - PurchaseOrdersRetrieveRequestExpandItem, - typing.Sequence[PurchaseOrdersRetrieveRequestExpandItem], - ] -]` — Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces. +**expand:** `typing.Optional[typing.Union[PurchaseOrdersRetrieveRequestExpandItem, typing.Sequence[PurchaseOrdersRetrieveRequestExpandItem]]]` — Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces.
@@ -23442,7 +23183,7 @@ client.accounting.purchase_orders.retrieve(
-**remote_fields:** `typing.Optional[typing.Literal["status"]]` — Deprecated. Use show_enum_origins. +**remote_fields:** `typing.Optional[typing.Literal]` — Deprecated. Use show_enum_origins.
@@ -23450,7 +23191,7 @@ client.accounting.purchase_orders.retrieve(
-**show_enum_origins:** `typing.Optional[typing.Literal["status"]]` — A comma separated list of enum field names for which you'd like the original values to be returned, instead of Merge's normalized enum values. [Learn more](https://help.merge.dev/en/articles/8950958-show_enum_origins-query-parameter) +**show_enum_origins:** `typing.Optional[typing.Literal]` — A comma separated list of enum field names for which you'd like the original values to be returned, instead of Merge's normalized enum values. [Learn more](https://help.merge.dev/en/articles/8950958-show_enum_origins-query-parameter)
@@ -23470,7 +23211,7 @@ client.accounting.purchase_orders.retrieve(
-
client.accounting.purchase_orders.line_items_remote_field_classes_list(...) +
client.accounting.purchase_orders.line_items_remote_field_classes_list(...) -> PaginatedRemoteFieldClassList
@@ -23498,11 +23239,13 @@ Returns a list of `RemoteFieldClass` objects. ```python from merge import Merge +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.accounting.purchase_orders.line_items_remote_field_classes_list( cursor="cD0yMDIxLTAxLTA2KzAzJTNBMjQlM0E1My40MzQzMjYlMkIwMCUzQTAw", include_deleted_data=True, @@ -23595,7 +23338,7 @@ client.accounting.purchase_orders.line_items_remote_field_classes_list(
-
client.accounting.purchase_orders.meta_post_retrieve() +
client.accounting.purchase_orders.meta_post_retrieve() -> MetaResponse
@@ -23623,11 +23366,13 @@ Returns metadata for `PurchaseOrder` POSTs. ```python from merge import Merge +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.accounting.purchase_orders.meta_post_retrieve() ``` @@ -23656,7 +23401,7 @@ client.accounting.purchase_orders.meta_post_retrieve()
-
client.accounting.purchase_orders.remote_field_classes_list(...) +
client.accounting.purchase_orders.remote_field_classes_list(...) -> PaginatedRemoteFieldClassList
@@ -23684,11 +23429,13 @@ Returns a list of `RemoteFieldClass` objects. ```python from merge import Merge +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.accounting.purchase_orders.remote_field_classes_list( cursor="cD0yMDIxLTAxLTA2KzAzJTNBMjQlM0E1My40MzQzMjYlMkIwMCUzQTAw", include_deleted_data=True, @@ -23782,7 +23529,7 @@ client.accounting.purchase_orders.remote_field_classes_list(
## Accounting RegenerateKey -
client.accounting.regenerate_key.create(...) +
client.accounting.regenerate_key.create(...) -> RemoteKey
@@ -23810,11 +23557,13 @@ Exchange remote keys. ```python from merge import Merge +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.accounting.regenerate_key.create( name="Remote Deployment Key 1", ) @@ -23854,7 +23603,7 @@ client.accounting.regenerate_key.create(
## Accounting SalesOrders -
client.accounting.sales_orders.list(...) +
client.accounting.sales_orders.list(...) -> PaginatedSalesOrderList
@@ -23881,41 +23630,32 @@ Returns a list of `SalesOrder` objects.
```python -import datetime - from merge import Merge +from merge.environment import MergeEnvironment +import datetime client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.accounting.sales_orders.list( company_id="company_id", - created_after=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), - created_before=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), + created_after=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), + created_before=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), cursor="cD0yMDIxLTAxLTA2KzAzJTNBMjQlM0E1My40MzQzMjYlMkIwMCUzQTAw", include_deleted_data=True, include_remote_data=True, include_remote_fields=True, include_shell_data=True, - issue_date_after=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), - issue_date_before=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), - modified_after=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), - modified_before=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), + issue_date_after=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), + issue_date_before=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), + modified_after=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), + modified_before=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), page_size=1, + remote_fields="status", remote_id="remote_id", + show_enum_origins="status", ) ``` @@ -23940,7 +23680,7 @@ client.accounting.sales_orders.list(
-**created_after:** `typing.Optional[dt.datetime]` — If provided, will only return objects created after this datetime. +**created_after:** `typing.Optional[datetime.datetime]` — If provided, will only return objects created after this datetime.
@@ -23948,7 +23688,7 @@ client.accounting.sales_orders.list(
-**created_before:** `typing.Optional[dt.datetime]` — If provided, will only return objects created before this datetime. +**created_before:** `typing.Optional[datetime.datetime]` — If provided, will only return objects created before this datetime.
@@ -23964,12 +23704,7 @@ client.accounting.sales_orders.list(
-**expand:** `typing.Optional[ - typing.Union[ - SalesOrdersListRequestExpandItem, - typing.Sequence[SalesOrdersListRequestExpandItem], - ] -]` — Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces. +**expand:** `typing.Optional[typing.Union[SalesOrdersListRequestExpandItem, typing.Sequence[SalesOrdersListRequestExpandItem]]]` — Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces.
@@ -24009,7 +23744,7 @@ client.accounting.sales_orders.list(
-**issue_date_after:** `typing.Optional[dt.datetime]` — If provided, will only return objects created after this datetime. +**issue_date_after:** `typing.Optional[datetime.datetime]` — If provided, will only return objects created after this datetime.
@@ -24017,7 +23752,7 @@ client.accounting.sales_orders.list(
-**issue_date_before:** `typing.Optional[dt.datetime]` — If provided, will only return objects created before this datetime. +**issue_date_before:** `typing.Optional[datetime.datetime]` — If provided, will only return objects created before this datetime.
@@ -24025,7 +23760,7 @@ client.accounting.sales_orders.list(
-**modified_after:** `typing.Optional[dt.datetime]` — If provided, only objects synced by Merge after this date time will be returned. +**modified_after:** `typing.Optional[datetime.datetime]` — If provided, only objects synced by Merge after this date time will be returned.
@@ -24033,7 +23768,7 @@ client.accounting.sales_orders.list(
-**modified_before:** `typing.Optional[dt.datetime]` — If provided, only objects synced by Merge before this date time will be returned. +**modified_before:** `typing.Optional[datetime.datetime]` — If provided, only objects synced by Merge before this date time will be returned.
@@ -24049,7 +23784,7 @@ client.accounting.sales_orders.list(
-**remote_fields:** `typing.Optional[typing.Literal["status"]]` — Deprecated. Use show_enum_origins. +**remote_fields:** `typing.Optional[typing.Literal]` — Deprecated. Use show_enum_origins.
@@ -24065,7 +23800,7 @@ client.accounting.sales_orders.list(
-**show_enum_origins:** `typing.Optional[typing.Literal["status"]]` — A comma separated list of enum field names for which you'd like the original values to be returned, instead of Merge's normalized enum values. [Learn more](https://help.merge.dev/en/articles/8950958-show_enum_origins-query-parameter) +**show_enum_origins:** `typing.Optional[typing.Literal]` — A comma separated list of enum field names for which you'd like the original values to be returned, instead of Merge's normalized enum values. [Learn more](https://help.merge.dev/en/articles/8950958-show_enum_origins-query-parameter)
@@ -24085,7 +23820,7 @@ client.accounting.sales_orders.list(
-
client.accounting.sales_orders.create(...) +
client.accounting.sales_orders.create(...) -> SalesOrderResponse
@@ -24113,12 +23848,14 @@ Creates a `SalesOrder` object with the given values. ```python from merge import Merge -from merge.resources.accounting import SalesOrderRequestRequest +from merge.environment import MergeEnvironment +from merge.accounting import SalesOrderRequestRequest client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.accounting.sales_orders.create( is_debug_mode=True, run_async=True, @@ -24175,7 +23912,7 @@ client.accounting.sales_orders.create(
-
client.accounting.sales_orders.retrieve(...) +
client.accounting.sales_orders.retrieve(...) -> SalesOrder
@@ -24203,16 +23940,20 @@ Returns a `SalesOrder` object with the given `id`. ```python from merge import Merge +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.accounting.sales_orders.retrieve( id="id", include_remote_data=True, include_remote_fields=True, include_shell_data=True, + remote_fields="status", + show_enum_origins="status", ) ``` @@ -24237,12 +23978,7 @@ client.accounting.sales_orders.retrieve(
-**expand:** `typing.Optional[ - typing.Union[ - SalesOrdersRetrieveRequestExpandItem, - typing.Sequence[SalesOrdersRetrieveRequestExpandItem], - ] -]` — Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces. +**expand:** `typing.Optional[typing.Union[SalesOrdersRetrieveRequestExpandItem, typing.Sequence[SalesOrdersRetrieveRequestExpandItem]]]` — Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces.
@@ -24274,7 +24010,7 @@ client.accounting.sales_orders.retrieve(
-**remote_fields:** `typing.Optional[typing.Literal["status"]]` — Deprecated. Use show_enum_origins. +**remote_fields:** `typing.Optional[typing.Literal]` — Deprecated. Use show_enum_origins.
@@ -24282,7 +24018,7 @@ client.accounting.sales_orders.retrieve(
-**show_enum_origins:** `typing.Optional[typing.Literal["status"]]` — A comma separated list of enum field names for which you'd like the original values to be returned, instead of Merge's normalized enum values. [Learn more](https://help.merge.dev/en/articles/8950958-show_enum_origins-query-parameter) +**show_enum_origins:** `typing.Optional[typing.Literal]` — A comma separated list of enum field names for which you'd like the original values to be returned, instead of Merge's normalized enum values. [Learn more](https://help.merge.dev/en/articles/8950958-show_enum_origins-query-parameter)
@@ -24302,7 +24038,7 @@ client.accounting.sales_orders.retrieve(
-
client.accounting.sales_orders.bulk_create(...) +
client.accounting.sales_orders.bulk_create(...) -> AsyncBulkCreateResponse
@@ -24330,15 +24066,14 @@ Creates multiple `SalesOrder` objects with the given values. ```python from merge import Merge -from merge.resources.accounting import ( - SalesOrderBatchItemRequest, - SalesOrderRequestRequest, -) +from merge.environment import MergeEnvironment +from merge.accounting import SalesOrderBatchItemRequest, SalesOrderRequestRequest client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.accounting.sales_orders.bulk_create( batch_items=[ SalesOrderBatchItemRequest( @@ -24362,7 +24097,7 @@ client.accounting.sales_orders.bulk_create(
-**batch_items:** `typing.Sequence[SalesOrderBatchItemRequest]` +**batch_items:** `typing.List[SalesOrderBatchItemRequest]`
@@ -24382,7 +24117,7 @@ client.accounting.sales_orders.bulk_create(
-
client.accounting.sales_orders.bulk_retrieve(...) +
client.accounting.sales_orders.bulk_retrieve(...) -> BatchObjectsResponse
@@ -24410,11 +24145,13 @@ Returns the status and results of a `SalesOrder` bulk create batch. ```python from merge import Merge +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.accounting.sales_orders.bulk_retrieve( batch_id="batch_id", ) @@ -24453,7 +24190,7 @@ client.accounting.sales_orders.bulk_retrieve(
-
client.accounting.sales_orders.lines_remote_field_classes_list(...) +
client.accounting.sales_orders.lines_remote_field_classes_list(...) -> PaginatedRemoteFieldClassList
@@ -24481,11 +24218,13 @@ Returns a list of `RemoteFieldClass` objects. ```python from merge import Merge +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.accounting.sales_orders.lines_remote_field_classes_list( cursor="cD0yMDIxLTAxLTA2KzAzJTNBMjQlM0E1My40MzQzMjYlMkIwMCUzQTAw", include_deleted_data=True, @@ -24578,7 +24317,7 @@ client.accounting.sales_orders.lines_remote_field_classes_list(
-
client.accounting.sales_orders.meta_post_retrieve() +
client.accounting.sales_orders.meta_post_retrieve() -> MetaResponse
@@ -24606,11 +24345,13 @@ Returns metadata for `SalesOrder` POSTs. ```python from merge import Merge +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.accounting.sales_orders.meta_post_retrieve() ``` @@ -24639,7 +24380,7 @@ client.accounting.sales_orders.meta_post_retrieve()
-
client.accounting.sales_orders.remote_field_classes_list(...) +
client.accounting.sales_orders.remote_field_classes_list(...) -> PaginatedRemoteFieldClassList
@@ -24667,11 +24408,13 @@ Returns a list of `RemoteFieldClass` objects. ```python from merge import Merge +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.accounting.sales_orders.remote_field_classes_list( cursor="cD0yMDIxLTAxLTA2KzAzJTNBMjQlM0E1My40MzQzMjYlMkIwMCUzQTAw", include_deleted_data=True, @@ -24765,7 +24508,7 @@ client.accounting.sales_orders.remote_field_classes_list(
## Accounting SyncStatus -
client.accounting.sync_status.list(...) +
client.accounting.sync_status.list(...) -> PaginatedSyncStatusList
@@ -24793,11 +24536,13 @@ Get sync status for the current sync and the most recently finished sync. `last_ ```python from merge import Merge +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.accounting.sync_status.list( cursor="cD0yMDIxLTAxLTA2KzAzJTNBMjQlM0E1My40MzQzMjYlMkIwMCUzQTAw", page_size=1, @@ -24846,7 +24591,7 @@ client.accounting.sync_status.list(
## Accounting ForceResync -
client.accounting.force_resync.sync_status_resync_create() +
client.accounting.force_resync.sync_status_resync_create() -> typing.List[SyncStatus]
@@ -24874,11 +24619,13 @@ Force re-sync of all models. This endpoint is available for monthly, quarterly, ```python from merge import Merge +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.accounting.force_resync.sync_status_resync_create() ``` @@ -24908,7 +24655,7 @@ client.accounting.force_resync.sync_status_resync_create()
## Accounting TaxRates -
client.accounting.tax_rates.list(...) +
client.accounting.tax_rates.list(...) -> PaginatedTaxRateList
@@ -24935,32 +24682,25 @@ Returns a list of `TaxRate` objects.
```python -import datetime - from merge import Merge +from merge.environment import MergeEnvironment +import datetime client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.accounting.tax_rates.list( company_id="company_id", - created_after=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), - created_before=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), + created_after=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), + created_before=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), cursor="cD0yMDIxLTAxLTA2KzAzJTNBMjQlM0E1My40MzQzMjYlMkIwMCUzQTAw", include_deleted_data=True, include_remote_data=True, include_shell_data=True, - modified_after=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), - modified_before=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), + modified_after=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), + modified_before=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), name="name", page_size=1, remote_id="remote_id", @@ -24988,7 +24728,7 @@ client.accounting.tax_rates.list(
-**created_after:** `typing.Optional[dt.datetime]` — If provided, will only return objects created after this datetime. +**created_after:** `typing.Optional[datetime.datetime]` — If provided, will only return objects created after this datetime.
@@ -24996,7 +24736,7 @@ client.accounting.tax_rates.list(
-**created_before:** `typing.Optional[dt.datetime]` — If provided, will only return objects created before this datetime. +**created_before:** `typing.Optional[datetime.datetime]` — If provided, will only return objects created before this datetime.
@@ -25012,11 +24752,7 @@ client.accounting.tax_rates.list(
-**expand:** `typing.Optional[ - typing.Union[ - typing.Literal["company"], typing.Sequence[typing.Literal["company"]] - ] -]` — Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces. +**expand:** `typing.Optional[typing.Union[typing.Literal, typing.Sequence[typing.Literal]]]` — Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces.
@@ -25048,7 +24784,7 @@ client.accounting.tax_rates.list(
-**modified_after:** `typing.Optional[dt.datetime]` — If provided, only objects synced by Merge after this date time will be returned. +**modified_after:** `typing.Optional[datetime.datetime]` — If provided, only objects synced by Merge after this date time will be returned.
@@ -25056,7 +24792,7 @@ client.accounting.tax_rates.list(
-**modified_before:** `typing.Optional[dt.datetime]` — If provided, only objects synced by Merge before this date time will be returned. +**modified_before:** `typing.Optional[datetime.datetime]` — If provided, only objects synced by Merge before this date time will be returned.
@@ -25100,7 +24836,7 @@ client.accounting.tax_rates.list(
-
client.accounting.tax_rates.retrieve(...) +
client.accounting.tax_rates.retrieve(...) -> TaxRate
@@ -25128,11 +24864,13 @@ Returns a `TaxRate` object with the given `id`. ```python from merge import Merge +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.accounting.tax_rates.retrieve( id="id", include_remote_data=True, @@ -25161,11 +24899,7 @@ client.accounting.tax_rates.retrieve(
-**expand:** `typing.Optional[ - typing.Union[ - typing.Literal["company"], typing.Sequence[typing.Literal["company"]] - ] -]` — Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces. +**expand:** `typing.Optional[typing.Union[typing.Literal, typing.Sequence[typing.Literal]]]` — Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces.
@@ -25202,7 +24936,7 @@ client.accounting.tax_rates.retrieve(
## Accounting TrackingCategories -
client.accounting.tracking_categories.list(...) +
client.accounting.tracking_categories.list(...) -> PaginatedTrackingCategoryList
@@ -25229,41 +24963,32 @@ Returns a list of `TrackingCategory` objects.
```python -import datetime - from merge import Merge -from merge.resources.accounting.resources.tracking_categories import ( - TrackingCategoriesListRequestCategoryType, - TrackingCategoriesListRequestStatus, -) +from merge.environment import MergeEnvironment +import datetime client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.accounting.tracking_categories.list( - category_type=TrackingCategoriesListRequestCategoryType.EMPTY, + category_type="", company_id="company_id", - created_after=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), - created_before=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), + created_after=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), + created_before=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), cursor="cD0yMDIxLTAxLTA2KzAzJTNBMjQlM0E1My40MzQzMjYlMkIwMCUzQTAw", include_deleted_data=True, include_remote_data=True, include_shell_data=True, - modified_after=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), - modified_before=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), + modified_after=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), + modified_before=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), name="name", page_size=1, + remote_fields="status", remote_id="remote_id", - status=TrackingCategoriesListRequestStatus.EMPTY, + show_enum_origins="status", + status="", ) ``` @@ -25296,7 +25021,7 @@ client.accounting.tracking_categories.list(
-**created_after:** `typing.Optional[dt.datetime]` — If provided, will only return objects created after this datetime. +**created_after:** `typing.Optional[datetime.datetime]` — If provided, will only return objects created after this datetime.
@@ -25304,7 +25029,7 @@ client.accounting.tracking_categories.list(
-**created_before:** `typing.Optional[dt.datetime]` — If provided, will only return objects created before this datetime. +**created_before:** `typing.Optional[datetime.datetime]` — If provided, will only return objects created before this datetime.
@@ -25320,11 +25045,7 @@ client.accounting.tracking_categories.list(
-**expand:** `typing.Optional[ - typing.Union[ - typing.Literal["company"], typing.Sequence[typing.Literal["company"]] - ] -]` — Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces. +**expand:** `typing.Optional[typing.Union[typing.Literal, typing.Sequence[typing.Literal]]]` — Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces.
@@ -25356,7 +25077,7 @@ client.accounting.tracking_categories.list(
-**modified_after:** `typing.Optional[dt.datetime]` — If provided, only objects synced by Merge after this date time will be returned. +**modified_after:** `typing.Optional[datetime.datetime]` — If provided, only objects synced by Merge after this date time will be returned.
@@ -25364,7 +25085,7 @@ client.accounting.tracking_categories.list(
-**modified_before:** `typing.Optional[dt.datetime]` — If provided, only objects synced by Merge before this date time will be returned. +**modified_before:** `typing.Optional[datetime.datetime]` — If provided, only objects synced by Merge before this date time will be returned.
@@ -25388,7 +25109,7 @@ client.accounting.tracking_categories.list(
-**remote_fields:** `typing.Optional[typing.Literal["status"]]` — Deprecated. Use show_enum_origins. +**remote_fields:** `typing.Optional[typing.Literal]` — Deprecated. Use show_enum_origins.
@@ -25404,7 +25125,7 @@ client.accounting.tracking_categories.list(
-**show_enum_origins:** `typing.Optional[typing.Literal["status"]]` — A comma separated list of enum field names for which you'd like the original values to be returned, instead of Merge's normalized enum values. [Learn more](https://help.merge.dev/en/articles/8950958-show_enum_origins-query-parameter) +**show_enum_origins:** `typing.Optional[typing.Literal]` — A comma separated list of enum field names for which you'd like the original values to be returned, instead of Merge's normalized enum values. [Learn more](https://help.merge.dev/en/articles/8950958-show_enum_origins-query-parameter)
@@ -25432,7 +25153,7 @@ client.accounting.tracking_categories.list(
-
client.accounting.tracking_categories.retrieve(...) +
client.accounting.tracking_categories.retrieve(...) -> TrackingCategory
@@ -25460,15 +25181,19 @@ Returns a `TrackingCategory` object with the given `id`. ```python from merge import Merge +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.accounting.tracking_categories.retrieve( id="id", include_remote_data=True, include_shell_data=True, + remote_fields="status", + show_enum_origins="status", ) ``` @@ -25493,11 +25218,7 @@ client.accounting.tracking_categories.retrieve(
-**expand:** `typing.Optional[ - typing.Union[ - typing.Literal["company"], typing.Sequence[typing.Literal["company"]] - ] -]` — Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces. +**expand:** `typing.Optional[typing.Union[typing.Literal, typing.Sequence[typing.Literal]]]` — Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces.
@@ -25521,7 +25242,7 @@ client.accounting.tracking_categories.retrieve(
-**remote_fields:** `typing.Optional[typing.Literal["status"]]` — Deprecated. Use show_enum_origins. +**remote_fields:** `typing.Optional[typing.Literal]` — Deprecated. Use show_enum_origins.
@@ -25529,7 +25250,7 @@ client.accounting.tracking_categories.retrieve(
-**show_enum_origins:** `typing.Optional[typing.Literal["status"]]` — A comma separated list of enum field names for which you'd like the original values to be returned, instead of Merge's normalized enum values. [Learn more](https://help.merge.dev/en/articles/8950958-show_enum_origins-query-parameter) +**show_enum_origins:** `typing.Optional[typing.Literal]` — A comma separated list of enum field names for which you'd like the original values to be returned, instead of Merge's normalized enum values. [Learn more](https://help.merge.dev/en/articles/8950958-show_enum_origins-query-parameter)
@@ -25550,7 +25271,7 @@ client.accounting.tracking_categories.retrieve(
## Accounting Transactions -
client.accounting.transactions.list(...) +
client.accounting.transactions.list(...) -> PaginatedTransactionList
@@ -25577,40 +25298,29 @@ Returns a list of `Transaction` objects.
```python -import datetime - from merge import Merge +from merge.environment import MergeEnvironment +import datetime client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.accounting.transactions.list( company_id="company_id", - created_after=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), - created_before=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), + created_after=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), + created_before=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), cursor="cD0yMDIxLTAxLTA2KzAzJTNBMjQlM0E1My40MzQzMjYlMkIwMCUzQTAw", include_deleted_data=True, include_remote_data=True, include_shell_data=True, - modified_after=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), - modified_before=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), + modified_after=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), + modified_before=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), page_size=1, remote_id="remote_id", - transaction_date_after=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), - transaction_date_before=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), + transaction_date_after=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), + transaction_date_before=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), ) ``` @@ -25635,7 +25345,7 @@ client.accounting.transactions.list(
-**created_after:** `typing.Optional[dt.datetime]` — If provided, will only return objects created after this datetime. +**created_after:** `typing.Optional[datetime.datetime]` — If provided, will only return objects created after this datetime.
@@ -25643,7 +25353,7 @@ client.accounting.transactions.list(
-**created_before:** `typing.Optional[dt.datetime]` — If provided, will only return objects created before this datetime. +**created_before:** `typing.Optional[datetime.datetime]` — If provided, will only return objects created before this datetime.
@@ -25659,12 +25369,7 @@ client.accounting.transactions.list(
-**expand:** `typing.Optional[ - typing.Union[ - TransactionsListRequestExpandItem, - typing.Sequence[TransactionsListRequestExpandItem], - ] -]` — Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces. +**expand:** `typing.Optional[typing.Union[TransactionsListRequestExpandItem, typing.Sequence[TransactionsListRequestExpandItem]]]` — Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces.
@@ -25696,7 +25401,7 @@ client.accounting.transactions.list(
-**modified_after:** `typing.Optional[dt.datetime]` — If provided, only objects synced by Merge after this date time will be returned. +**modified_after:** `typing.Optional[datetime.datetime]` — If provided, only objects synced by Merge after this date time will be returned.
@@ -25704,7 +25409,7 @@ client.accounting.transactions.list(
-**modified_before:** `typing.Optional[dt.datetime]` — If provided, only objects synced by Merge before this date time will be returned. +**modified_before:** `typing.Optional[datetime.datetime]` — If provided, only objects synced by Merge before this date time will be returned.
@@ -25728,7 +25433,7 @@ client.accounting.transactions.list(
-**transaction_date_after:** `typing.Optional[dt.datetime]` — If provided, will only return objects created after this datetime. +**transaction_date_after:** `typing.Optional[datetime.datetime]` — If provided, will only return objects created after this datetime.
@@ -25736,7 +25441,7 @@ client.accounting.transactions.list(
-**transaction_date_before:** `typing.Optional[dt.datetime]` — If provided, will only return objects created before this datetime. +**transaction_date_before:** `typing.Optional[datetime.datetime]` — If provided, will only return objects created before this datetime.
@@ -25756,7 +25461,7 @@ client.accounting.transactions.list(
-
client.accounting.transactions.retrieve(...) +
client.accounting.transactions.retrieve(...) -> Transaction
@@ -25784,11 +25489,13 @@ Returns a `Transaction` object with the given `id`. ```python from merge import Merge +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.accounting.transactions.retrieve( id="id", include_remote_data=True, @@ -25817,12 +25524,7 @@ client.accounting.transactions.retrieve(
-**expand:** `typing.Optional[ - typing.Union[ - TransactionsRetrieveRequestExpandItem, - typing.Sequence[TransactionsRetrieveRequestExpandItem], - ] -]` — Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces. +**expand:** `typing.Optional[typing.Union[TransactionsRetrieveRequestExpandItem, typing.Sequence[TransactionsRetrieveRequestExpandItem]]]` — Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces.
@@ -25859,7 +25561,7 @@ client.accounting.transactions.retrieve(
## Accounting VendorCredits -
client.accounting.vendor_credits.list(...) +
client.accounting.vendor_credits.list(...) -> PaginatedVendorCreditList
@@ -25886,40 +25588,29 @@ Returns a list of `VendorCredit` objects.
```python -import datetime - from merge import Merge +from merge.environment import MergeEnvironment +import datetime client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.accounting.vendor_credits.list( company_id="company_id", - created_after=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), - created_before=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), + created_after=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), + created_before=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), cursor="cD0yMDIxLTAxLTA2KzAzJTNBMjQlM0E1My40MzQzMjYlMkIwMCUzQTAw", include_deleted_data=True, include_remote_data=True, include_shell_data=True, - modified_after=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), - modified_before=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), + modified_after=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), + modified_before=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), page_size=1, remote_id="remote_id", - transaction_date_after=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), - transaction_date_before=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), + transaction_date_after=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), + transaction_date_before=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), ) ``` @@ -25944,7 +25635,7 @@ client.accounting.vendor_credits.list(
-**created_after:** `typing.Optional[dt.datetime]` — If provided, will only return objects created after this datetime. +**created_after:** `typing.Optional[datetime.datetime]` — If provided, will only return objects created after this datetime.
@@ -25952,7 +25643,7 @@ client.accounting.vendor_credits.list(
-**created_before:** `typing.Optional[dt.datetime]` — If provided, will only return objects created before this datetime. +**created_before:** `typing.Optional[datetime.datetime]` — If provided, will only return objects created before this datetime.
@@ -25968,12 +25659,7 @@ client.accounting.vendor_credits.list(
-**expand:** `typing.Optional[ - typing.Union[ - VendorCreditsListRequestExpandItem, - typing.Sequence[VendorCreditsListRequestExpandItem], - ] -]` — Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces. +**expand:** `typing.Optional[typing.Union[VendorCreditsListRequestExpandItem, typing.Sequence[VendorCreditsListRequestExpandItem]]]` — Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces.
@@ -26005,7 +25691,7 @@ client.accounting.vendor_credits.list(
-**modified_after:** `typing.Optional[dt.datetime]` — If provided, only objects synced by Merge after this date time will be returned. +**modified_after:** `typing.Optional[datetime.datetime]` — If provided, only objects synced by Merge after this date time will be returned.
@@ -26013,7 +25699,7 @@ client.accounting.vendor_credits.list(
-**modified_before:** `typing.Optional[dt.datetime]` — If provided, only objects synced by Merge before this date time will be returned. +**modified_before:** `typing.Optional[datetime.datetime]` — If provided, only objects synced by Merge before this date time will be returned.
@@ -26037,7 +25723,7 @@ client.accounting.vendor_credits.list(
-**transaction_date_after:** `typing.Optional[dt.datetime]` — If provided, will only return objects created after this datetime. +**transaction_date_after:** `typing.Optional[datetime.datetime]` — If provided, will only return objects created after this datetime.
@@ -26045,7 +25731,7 @@ client.accounting.vendor_credits.list(
-**transaction_date_before:** `typing.Optional[dt.datetime]` — If provided, will only return objects created before this datetime. +**transaction_date_before:** `typing.Optional[datetime.datetime]` — If provided, will only return objects created before this datetime.
@@ -26065,7 +25751,7 @@ client.accounting.vendor_credits.list(
-
client.accounting.vendor_credits.create(...) +
client.accounting.vendor_credits.create(...) -> VendorCreditResponse
@@ -26093,12 +25779,14 @@ Creates a `VendorCredit` object with the given values. ```python from merge import Merge -from merge.resources.accounting import VendorCreditRequest +from merge.environment import MergeEnvironment +from merge.accounting import VendorCreditRequest client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.accounting.vendor_credits.create( is_debug_mode=True, run_async=True, @@ -26155,7 +25843,7 @@ client.accounting.vendor_credits.create(
-
client.accounting.vendor_credits.retrieve(...) +
client.accounting.vendor_credits.retrieve(...) -> VendorCredit
@@ -26183,11 +25871,13 @@ Returns a `VendorCredit` object with the given `id`. ```python from merge import Merge +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.accounting.vendor_credits.retrieve( id="id", include_remote_data=True, @@ -26216,12 +25906,7 @@ client.accounting.vendor_credits.retrieve(
-**expand:** `typing.Optional[ - typing.Union[ - VendorCreditsRetrieveRequestExpandItem, - typing.Sequence[VendorCreditsRetrieveRequestExpandItem], - ] -]` — Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces. +**expand:** `typing.Optional[typing.Union[VendorCreditsRetrieveRequestExpandItem, typing.Sequence[VendorCreditsRetrieveRequestExpandItem]]]` — Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces.
@@ -26257,7 +25942,7 @@ client.accounting.vendor_credits.retrieve(
-
client.accounting.vendor_credits.partial_update(...) +
client.accounting.vendor_credits.partial_update(...) -> VendorCreditResponse
@@ -26285,12 +25970,14 @@ Updates a `VendorCredit` object with the given `id`. ```python from merge import Merge -from merge.resources.accounting import PatchedVendorCreditRequest +from merge.environment import MergeEnvironment +from merge.accounting import PatchedVendorCreditRequest client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.accounting.vendor_credits.partial_update( id="id", is_debug_mode=True, @@ -26356,7 +26043,7 @@ client.accounting.vendor_credits.partial_update(
-
client.accounting.vendor_credits.application_create(...) +
client.accounting.vendor_credits.application_create(...) -> VendorCreditResponse
@@ -26383,21 +26070,20 @@ Creates a new VendorCreditApplyLine to apply a vendor credit to an invoice
```python -import datetime - from merge import Merge +from merge.environment import MergeEnvironment +import datetime client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.accounting.vendor_credits.application_create( id="id", is_debug_mode=True, run_async=True, - applied_date=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), + applied_date=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), applied_amount="applied_amount", ) @@ -26423,7 +26109,7 @@ client.accounting.vendor_credits.application_create(
-**applied_date:** `dt.datetime` — Date that the vendor credit is applied to the invoice. +**applied_date:** `datetime.datetime` — Date that the vendor credit is applied to the invoice.
@@ -26475,7 +26161,7 @@ client.accounting.vendor_credits.application_create(
-
client.accounting.vendor_credits.meta_patch_retrieve(...) +
client.accounting.vendor_credits.meta_patch_retrieve(...) -> MetaResponse
@@ -26503,11 +26189,13 @@ Returns metadata for `VendorCredit` PATCHs. ```python from merge import Merge +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.accounting.vendor_credits.meta_patch_retrieve( id="id", ) @@ -26546,7 +26234,7 @@ client.accounting.vendor_credits.meta_patch_retrieve(
-
client.accounting.vendor_credits.meta_post_retrieve() +
client.accounting.vendor_credits.meta_post_retrieve() -> MetaResponse
@@ -26574,11 +26262,13 @@ Returns metadata for `VendorCredit` POSTs. ```python from merge import Merge +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.accounting.vendor_credits.meta_post_retrieve() ``` @@ -26608,7 +26298,7 @@ client.accounting.vendor_credits.meta_post_retrieve()
## Accounting WebhookReceivers -
client.accounting.webhook_receivers.list() +
client.accounting.webhook_receivers.list() -> typing.List[WebhookReceiver]
@@ -26636,11 +26326,13 @@ Returns a list of `WebhookReceiver` objects. ```python from merge import Merge +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.accounting.webhook_receivers.list() ``` @@ -26669,7 +26361,7 @@ client.accounting.webhook_receivers.list()
-
client.accounting.webhook_receivers.create(...) +
client.accounting.webhook_receivers.create(...) -> WebhookReceiver
@@ -26697,11 +26389,13 @@ Creates a `WebhookReceiver` object with the given values. ```python from merge import Merge +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.accounting.webhook_receivers.create( event="event", is_active=True, @@ -26758,7 +26452,7 @@ client.accounting.webhook_receivers.create(
## Crm AccountDetails -
client.crm.account_details.retrieve() +
client.crm.account_details.retrieve() -> AccountDetails
@@ -26786,11 +26480,13 @@ Get details for a linked account. ```python from merge import Merge +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.crm.account_details.retrieve() ``` @@ -26820,7 +26516,7 @@ client.crm.account_details.retrieve()
## Crm AccountToken -
client.crm.account_token.retrieve(...) +
client.crm.account_token.retrieve(...) -> AccountToken
@@ -26848,11 +26544,13 @@ Returns the account token for the end user with the provided public token. ```python from merge import Merge +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.crm.account_token.retrieve( public_token="public_token", ) @@ -26891,7 +26589,7 @@ client.crm.account_token.retrieve(
-
client.crm.account_token.regenerate_create() +
client.crm.account_token.regenerate_create() -> RegenerateAccountToken
@@ -26919,11 +26617,13 @@ Exchange Linked Account account tokens. ```python from merge import Merge +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.crm.account_token.regenerate_create() ``` @@ -26953,7 +26653,7 @@ client.crm.account_token.regenerate_create()
## Crm Accounts -
client.crm.accounts.list(...) +
client.crm.accounts.list(...) -> PaginatedAccountList
@@ -26980,32 +26680,25 @@ Returns a list of `Account` objects.
```python -import datetime - from merge import Merge +from merge.environment import MergeEnvironment +import datetime client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.crm.accounts.list( - created_after=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), - created_before=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), + created_after=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), + created_before=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), cursor="cD0yMDIxLTAxLTA2KzAzJTNBMjQlM0E1My40MzQzMjYlMkIwMCUzQTAw", include_deleted_data=True, include_remote_data=True, include_remote_fields=True, include_shell_data=True, - modified_after=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), - modified_before=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), + modified_after=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), + modified_before=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), name="name", owner_id="owner_id", page_size=1, @@ -27026,7 +26719,7 @@ client.crm.accounts.list(
-**created_after:** `typing.Optional[dt.datetime]` — If provided, will only return objects created after this datetime. +**created_after:** `typing.Optional[datetime.datetime]` — If provided, will only return objects created after this datetime.
@@ -27034,7 +26727,7 @@ client.crm.accounts.list(
-**created_before:** `typing.Optional[dt.datetime]` — If provided, will only return objects created before this datetime. +**created_before:** `typing.Optional[datetime.datetime]` — If provided, will only return objects created before this datetime.
@@ -27050,11 +26743,7 @@ client.crm.accounts.list(
-**expand:** `typing.Optional[ - typing.Union[ - typing.Literal["owner"], typing.Sequence[typing.Literal["owner"]] - ] -]` — Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces. +**expand:** `typing.Optional[typing.Union[typing.Literal, typing.Sequence[typing.Literal]]]` — Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces.
@@ -27094,7 +26783,7 @@ client.crm.accounts.list(
-**modified_after:** `typing.Optional[dt.datetime]` — If provided, only objects synced by Merge after this date time will be returned. +**modified_after:** `typing.Optional[datetime.datetime]` — If provided, only objects synced by Merge after this date time will be returned.
@@ -27102,7 +26791,7 @@ client.crm.accounts.list(
-**modified_before:** `typing.Optional[dt.datetime]` — If provided, only objects synced by Merge before this date time will be returned. +**modified_before:** `typing.Optional[datetime.datetime]` — If provided, only objects synced by Merge before this date time will be returned.
@@ -27154,7 +26843,7 @@ client.crm.accounts.list(
-
client.crm.accounts.create(...) +
client.crm.accounts.create(...) -> CrmAccountResponse
@@ -27182,12 +26871,14 @@ Creates an `Account` object with the given values. ```python from merge import Merge -from merge.resources.crm import AccountRequest +from merge.environment import MergeEnvironment +from merge.crm import AccountRequest client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.crm.accounts.create( is_debug_mode=True, run_async=True, @@ -27244,7 +26935,7 @@ client.crm.accounts.create(
-
client.crm.accounts.retrieve(...) +
client.crm.accounts.retrieve(...) -> Account
@@ -27272,11 +26963,13 @@ Returns an `Account` object with the given `id`. ```python from merge import Merge +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.crm.accounts.retrieve( id="id", include_remote_data=True, @@ -27306,11 +26999,7 @@ client.crm.accounts.retrieve(
-**expand:** `typing.Optional[ - typing.Union[ - typing.Literal["owner"], typing.Sequence[typing.Literal["owner"]] - ] -]` — Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces. +**expand:** `typing.Optional[typing.Union[typing.Literal, typing.Sequence[typing.Literal]]]` — Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces.
@@ -27354,7 +27043,7 @@ client.crm.accounts.retrieve(
-
client.crm.accounts.partial_update(...) +
client.crm.accounts.partial_update(...) -> CrmAccountResponse
@@ -27382,12 +27071,14 @@ Updates an `Account` object with the given `id`. ```python from merge import Merge -from merge.resources.crm import PatchedAccountRequest +from merge.environment import MergeEnvironment +from merge.crm import PatchedAccountRequest client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.crm.accounts.partial_update( id="id", is_debug_mode=True, @@ -27453,7 +27144,7 @@ client.crm.accounts.partial_update(
-
client.crm.accounts.meta_patch_retrieve(...) +
client.crm.accounts.meta_patch_retrieve(...) -> MetaResponse
@@ -27481,11 +27172,13 @@ Returns metadata for `CRMAccount` PATCHs. ```python from merge import Merge +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.crm.accounts.meta_patch_retrieve( id="id", ) @@ -27524,7 +27217,7 @@ client.crm.accounts.meta_patch_retrieve(
-
client.crm.accounts.meta_post_retrieve() +
client.crm.accounts.meta_post_retrieve() -> MetaResponse
@@ -27552,11 +27245,13 @@ Returns metadata for `CRMAccount` POSTs. ```python from merge import Merge +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.crm.accounts.meta_post_retrieve() ``` @@ -27585,7 +27280,7 @@ client.crm.accounts.meta_post_retrieve()
-
client.crm.accounts.remote_field_classes_list(...) +
client.crm.accounts.remote_field_classes_list(...) -> PaginatedRemoteFieldClassList
@@ -27613,11 +27308,13 @@ Returns a list of `RemoteFieldClass` objects. ```python from merge import Merge +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.crm.accounts.remote_field_classes_list( cursor="cD0yMDIxLTAxLTA2KzAzJTNBMjQlM0E1My40MzQzMjYlMkIwMCUzQTAw", include_deleted_data=True, @@ -27720,7 +27417,7 @@ client.crm.accounts.remote_field_classes_list(
## Crm AsyncPassthrough -
client.crm.async_passthrough.create(...) +
client.crm.async_passthrough.create(...) -> AsyncPassthroughReciept
@@ -27748,15 +27445,17 @@ Asynchronously pull data from an endpoint not currently supported by Merge. ```python from merge import Merge -from merge.resources.crm import DataPassthroughRequest, MethodEnum +from merge.environment import MergeEnvironment +from merge.crm import DataPassthroughRequest client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.crm.async_passthrough.create( request=DataPassthroughRequest( - method=MethodEnum.GET, + method="GET", path="/scooters", ), ) @@ -27795,7 +27494,7 @@ client.crm.async_passthrough.create(
-
client.crm.async_passthrough.retrieve(...) +
client.crm.async_passthrough.retrieve(...) -> AsyncPassthroughRetrieveResponse
@@ -27823,11 +27522,13 @@ Retrieves data from earlier async-passthrough POST request ```python from merge import Merge +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.crm.async_passthrough.retrieve( async_passthrough_receipt_id="async_passthrough_receipt_id", ) @@ -27867,7 +27568,7 @@ client.crm.async_passthrough.retrieve(
## Crm AuditTrail -
client.crm.audit_trail.list(...) +
client.crm.audit_trail.list(...) -> PaginatedAuditLogEventList
@@ -27895,11 +27596,13 @@ Gets a list of audit trail events. ```python from merge import Merge +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.crm.audit_trail.list( cursor="cD0yMDIxLTAxLTA2KzAzJTNBMjQlM0E1My40MzQzMjYlMkIwMCUzQTAw", end_date="end_date", @@ -27984,7 +27687,7 @@ client.crm.audit_trail.list(
## Crm AvailableActions -
client.crm.available_actions.retrieve() +
client.crm.available_actions.retrieve() -> AvailableActions
@@ -28012,11 +27715,13 @@ Returns a list of models and actions available for an account. ```python from merge import Merge +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.crm.available_actions.retrieve() ``` @@ -28046,7 +27751,7 @@ client.crm.available_actions.retrieve()
## Crm Contacts -
client.crm.contacts.list(...) +
client.crm.contacts.list(...) -> PaginatedContactList
@@ -28073,34 +27778,27 @@ Returns a list of `Contact` objects.
```python -import datetime - from merge import Merge +from merge.environment import MergeEnvironment +import datetime client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.crm.contacts.list( account_id="account_id", - created_after=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), - created_before=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), + created_after=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), + created_before=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), cursor="cD0yMDIxLTAxLTA2KzAzJTNBMjQlM0E1My40MzQzMjYlMkIwMCUzQTAw", email_addresses="email_addresses", include_deleted_data=True, include_remote_data=True, include_remote_fields=True, include_shell_data=True, - modified_after=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), - modified_before=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), + modified_after=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), + modified_before=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), page_size=1, phone_numbers="phone_numbers", remote_id="remote_id", @@ -28128,7 +27826,7 @@ client.crm.contacts.list(
-**created_after:** `typing.Optional[dt.datetime]` — If provided, will only return objects created after this datetime. +**created_after:** `typing.Optional[datetime.datetime]` — If provided, will only return objects created after this datetime.
@@ -28136,7 +27834,7 @@ client.crm.contacts.list(
-**created_before:** `typing.Optional[dt.datetime]` — If provided, will only return objects created before this datetime. +**created_before:** `typing.Optional[datetime.datetime]` — If provided, will only return objects created before this datetime.
@@ -28160,12 +27858,7 @@ client.crm.contacts.list(
-**expand:** `typing.Optional[ - typing.Union[ - ContactsListRequestExpandItem, - typing.Sequence[ContactsListRequestExpandItem], - ] -]` — Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces. +**expand:** `typing.Optional[typing.Union[ContactsListRequestExpandItem, typing.Sequence[ContactsListRequestExpandItem]]]` — Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces.
@@ -28205,7 +27898,7 @@ client.crm.contacts.list(
-**modified_after:** `typing.Optional[dt.datetime]` — If provided, only objects synced by Merge after this date time will be returned. +**modified_after:** `typing.Optional[datetime.datetime]` — If provided, only objects synced by Merge after this date time will be returned.
@@ -28213,7 +27906,7 @@ client.crm.contacts.list(
-**modified_before:** `typing.Optional[dt.datetime]` — If provided, only objects synced by Merge before this date time will be returned. +**modified_before:** `typing.Optional[datetime.datetime]` — If provided, only objects synced by Merge before this date time will be returned.
@@ -28257,7 +27950,7 @@ client.crm.contacts.list(
-
client.crm.contacts.create(...) +
client.crm.contacts.create(...) -> CrmContactResponse
@@ -28285,12 +27978,14 @@ Creates a `Contact` object with the given values. ```python from merge import Merge -from merge.resources.crm import ContactRequest +from merge.environment import MergeEnvironment +from merge.crm import ContactRequest client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.crm.contacts.create( is_debug_mode=True, run_async=True, @@ -28347,7 +28042,7 @@ client.crm.contacts.create(
-
client.crm.contacts.retrieve(...) +
client.crm.contacts.retrieve(...) -> Contact
@@ -28375,11 +28070,13 @@ Returns a `Contact` object with the given `id`. ```python from merge import Merge +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.crm.contacts.retrieve( id="id", include_remote_data=True, @@ -28409,12 +28106,7 @@ client.crm.contacts.retrieve(
-**expand:** `typing.Optional[ - typing.Union[ - ContactsRetrieveRequestExpandItem, - typing.Sequence[ContactsRetrieveRequestExpandItem], - ] -]` — Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces. +**expand:** `typing.Optional[typing.Union[ContactsRetrieveRequestExpandItem, typing.Sequence[ContactsRetrieveRequestExpandItem]]]` — Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces.
@@ -28458,7 +28150,7 @@ client.crm.contacts.retrieve(
-
client.crm.contacts.partial_update(...) +
client.crm.contacts.partial_update(...) -> CrmContactResponse
@@ -28486,12 +28178,14 @@ Updates a `Contact` object with the given `id`. ```python from merge import Merge -from merge.resources.crm import PatchedContactRequest +from merge.environment import MergeEnvironment +from merge.crm import PatchedContactRequest client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.crm.contacts.partial_update( id="id", is_debug_mode=True, @@ -28557,7 +28251,7 @@ client.crm.contacts.partial_update(
-
client.crm.contacts.ignore_create(...) +
client.crm.contacts.ignore_create(...)
@@ -28585,16 +28279,18 @@ Ignores a specific row based on the `model_id` in the url. These records will ha ```python from merge import Merge -from merge.resources.crm import IgnoreCommonModelRequest, ReasonEnum +from merge.environment import MergeEnvironment +from merge.crm import IgnoreCommonModelRequest client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.crm.contacts.ignore_create( model_id="model_id", request=IgnoreCommonModelRequest( - reason=ReasonEnum.GENERAL_CUSTOMER_REQUEST, + reason="GENERAL_CUSTOMER_REQUEST", ), ) @@ -28640,7 +28336,7 @@ client.crm.contacts.ignore_create(
-
client.crm.contacts.meta_patch_retrieve(...) +
client.crm.contacts.meta_patch_retrieve(...) -> MetaResponse
@@ -28668,11 +28364,13 @@ Returns metadata for `CRMContact` PATCHs. ```python from merge import Merge +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.crm.contacts.meta_patch_retrieve( id="id", ) @@ -28711,7 +28409,7 @@ client.crm.contacts.meta_patch_retrieve(
-
client.crm.contacts.meta_post_retrieve() +
client.crm.contacts.meta_post_retrieve() -> MetaResponse
@@ -28739,11 +28437,13 @@ Returns metadata for `CRMContact` POSTs. ```python from merge import Merge +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.crm.contacts.meta_post_retrieve() ``` @@ -28772,7 +28472,7 @@ client.crm.contacts.meta_post_retrieve()
-
client.crm.contacts.remote_field_classes_list(...) +
client.crm.contacts.remote_field_classes_list(...) -> PaginatedRemoteFieldClassList
@@ -28800,11 +28500,13 @@ Returns a list of `RemoteFieldClass` objects. ```python from merge import Merge +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.crm.contacts.remote_field_classes_list( cursor="cD0yMDIxLTAxLTA2KzAzJTNBMjQlM0E1My40MzQzMjYlMkIwMCUzQTAw", include_deleted_data=True, @@ -28907,7 +28609,7 @@ client.crm.contacts.remote_field_classes_list(
## Crm CustomObjectClasses -
client.crm.custom_object_classes.list(...) +
client.crm.custom_object_classes.list(...) -> PaginatedCustomObjectClassList
@@ -28934,31 +28636,24 @@ Returns a list of `CustomObjectClass` objects.
```python -import datetime - from merge import Merge +from merge.environment import MergeEnvironment +import datetime client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.crm.custom_object_classes.list( - created_after=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), - created_before=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), + created_after=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), + created_before=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), cursor="cD0yMDIxLTAxLTA2KzAzJTNBMjQlM0E1My40MzQzMjYlMkIwMCUzQTAw", include_deleted_data=True, include_remote_data=True, include_shell_data=True, - modified_after=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), - modified_before=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), + modified_after=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), + modified_before=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), page_size=1, remote_id="remote_id", ) @@ -28977,7 +28672,7 @@ client.crm.custom_object_classes.list(
-**created_after:** `typing.Optional[dt.datetime]` — If provided, will only return objects created after this datetime. +**created_after:** `typing.Optional[datetime.datetime]` — If provided, will only return objects created after this datetime.
@@ -28985,7 +28680,7 @@ client.crm.custom_object_classes.list(
-**created_before:** `typing.Optional[dt.datetime]` — If provided, will only return objects created before this datetime. +**created_before:** `typing.Optional[datetime.datetime]` — If provided, will only return objects created before this datetime.
@@ -29001,11 +28696,7 @@ client.crm.custom_object_classes.list(
-**expand:** `typing.Optional[ - typing.Union[ - typing.Literal["fields"], typing.Sequence[typing.Literal["fields"]] - ] -]` — Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces. +**expand:** `typing.Optional[typing.Union[typing.Literal, typing.Sequence[typing.Literal]]]` — Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces.
@@ -29037,7 +28728,7 @@ client.crm.custom_object_classes.list(
-**modified_after:** `typing.Optional[dt.datetime]` — If provided, only objects synced by Merge after this date time will be returned. +**modified_after:** `typing.Optional[datetime.datetime]` — If provided, only objects synced by Merge after this date time will be returned.
@@ -29045,7 +28736,7 @@ client.crm.custom_object_classes.list(
-**modified_before:** `typing.Optional[dt.datetime]` — If provided, only objects synced by Merge before this date time will be returned. +**modified_before:** `typing.Optional[datetime.datetime]` — If provided, only objects synced by Merge before this date time will be returned.
@@ -29081,7 +28772,7 @@ client.crm.custom_object_classes.list(
-
client.crm.custom_object_classes.retrieve(...) +
client.crm.custom_object_classes.retrieve(...) -> CustomObjectClass
@@ -29109,11 +28800,13 @@ Returns a `CustomObjectClass` object with the given `id`. ```python from merge import Merge +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.crm.custom_object_classes.retrieve( id="id", include_remote_data=True, @@ -29142,11 +28835,7 @@ client.crm.custom_object_classes.retrieve(
-**expand:** `typing.Optional[ - typing.Union[ - typing.Literal["fields"], typing.Sequence[typing.Literal["fields"]] - ] -]` — Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces. +**expand:** `typing.Optional[typing.Union[typing.Literal, typing.Sequence[typing.Literal]]]` — Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces.
@@ -29183,7 +28872,7 @@ client.crm.custom_object_classes.retrieve(
## Crm AssociationTypes -
client.crm.association_types.custom_object_classes_association_types_list(...) +
client.crm.association_types.custom_object_classes_association_types_list(...) -> PaginatedAssociationTypeList
@@ -29210,32 +28899,25 @@ Returns a list of `AssociationType` objects.
```python -import datetime - from merge import Merge +from merge.environment import MergeEnvironment +import datetime client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.crm.association_types.custom_object_classes_association_types_list( custom_object_class_id="custom_object_class_id", - created_after=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), - created_before=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), + created_after=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), + created_before=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), cursor="cD0yMDIxLTAxLTA2KzAzJTNBMjQlM0E1My40MzQzMjYlMkIwMCUzQTAw", include_deleted_data=True, include_remote_data=True, include_shell_data=True, - modified_after=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), - modified_before=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), + modified_after=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), + modified_before=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), page_size=1, remote_id="remote_id", ) @@ -29262,7 +28944,7 @@ client.crm.association_types.custom_object_classes_association_types_list(
-**created_after:** `typing.Optional[dt.datetime]` — If provided, will only return objects created after this datetime. +**created_after:** `typing.Optional[datetime.datetime]` — If provided, will only return objects created after this datetime.
@@ -29270,7 +28952,7 @@ client.crm.association_types.custom_object_classes_association_types_list(
-**created_before:** `typing.Optional[dt.datetime]` — If provided, will only return objects created before this datetime. +**created_before:** `typing.Optional[datetime.datetime]` — If provided, will only return objects created before this datetime.
@@ -29286,12 +28968,7 @@ client.crm.association_types.custom_object_classes_association_types_list(
-**expand:** `typing.Optional[ - typing.Union[ - typing.Literal["target_object_classes"], - typing.Sequence[typing.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.Union[typing.Literal, typing.Sequence[typing.Literal]]]` — Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces.
@@ -29323,7 +29000,7 @@ client.crm.association_types.custom_object_classes_association_types_list(
-**modified_after:** `typing.Optional[dt.datetime]` — If provided, only objects synced by Merge after this date time will be returned. +**modified_after:** `typing.Optional[datetime.datetime]` — If provided, only objects synced by Merge after this date time will be returned.
@@ -29331,7 +29008,7 @@ client.crm.association_types.custom_object_classes_association_types_list(
-**modified_before:** `typing.Optional[dt.datetime]` — If provided, only objects synced by Merge before this date time will be returned. +**modified_before:** `typing.Optional[datetime.datetime]` — If provided, only objects synced by Merge before this date time will be returned.
@@ -29367,7 +29044,7 @@ client.crm.association_types.custom_object_classes_association_types_list(
-
client.crm.association_types.custom_object_classes_association_types_create(...) +
client.crm.association_types.custom_object_classes_association_types_create(...) -> CrmAssociationTypeResponse
@@ -29395,16 +29072,14 @@ Creates an `AssociationType` object with the given values. ```python from merge import Merge -from merge.resources.crm import ( - AssociationTypeRequestRequest, - ObjectClassDescriptionRequest, - OriginTypeEnum, -) +from merge.environment import MergeEnvironment +from merge.crm import AssociationTypeRequestRequest, ObjectClassDescriptionRequest client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.crm.association_types.custom_object_classes_association_types_create( custom_object_class_id="custom_object_class_id", is_debug_mode=True, @@ -29412,9 +29087,11 @@ client.crm.association_types.custom_object_classes_association_types_create( model=AssociationTypeRequestRequest( source_object_class=ObjectClassDescriptionRequest( id="id", - origin_type=OriginTypeEnum.CUSTOM_OBJECT, + origin_type="CUSTOM_OBJECT", ), - target_object_classes=["target_object_classes"], + target_object_classes=[ + "target_object_classes" + ], remote_key_name="remote_key_name", ), ) @@ -29477,7 +29154,7 @@ client.crm.association_types.custom_object_classes_association_types_create(
-
client.crm.association_types.custom_object_classes_association_types_retrieve(...) +
client.crm.association_types.custom_object_classes_association_types_retrieve(...) -> AssociationType
@@ -29505,11 +29182,13 @@ Returns an `AssociationType` object with the given `id`. ```python from merge import Merge +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.crm.association_types.custom_object_classes_association_types_retrieve( custom_object_class_id="custom_object_class_id", id="id", @@ -29547,12 +29226,7 @@ client.crm.association_types.custom_object_classes_association_types_retrieve(
-**expand:** `typing.Optional[ - typing.Union[ - typing.Literal["target_object_classes"], - typing.Sequence[typing.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.Union[typing.Literal, typing.Sequence[typing.Literal]]]` — Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces.
@@ -29588,7 +29262,7 @@ client.crm.association_types.custom_object_classes_association_types_retrieve(
-
client.crm.association_types.custom_object_classes_association_types_meta_post_retrieve(...) +
client.crm.association_types.custom_object_classes_association_types_meta_post_retrieve(...) -> MetaResponse
@@ -29616,11 +29290,13 @@ Returns metadata for `CRMAssociationType` POSTs. ```python from merge import Merge +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.crm.association_types.custom_object_classes_association_types_meta_post_retrieve( custom_object_class_id="custom_object_class_id", ) @@ -29660,7 +29336,7 @@ client.crm.association_types.custom_object_classes_association_types_meta_post_r
## Crm CustomObjects -
client.crm.custom_objects.custom_object_classes_custom_objects_list(...) +
client.crm.custom_objects.custom_object_classes_custom_objects_list(...) -> PaginatedCustomObjectList
@@ -29687,33 +29363,26 @@ Returns a list of `CustomObject` objects.
```python -import datetime - from merge import Merge +from merge.environment import MergeEnvironment +import datetime client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.crm.custom_objects.custom_object_classes_custom_objects_list( custom_object_class_id="custom_object_class_id", - created_after=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), - created_before=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), + created_after=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), + created_before=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), cursor="cD0yMDIxLTAxLTA2KzAzJTNBMjQlM0E1My40MzQzMjYlMkIwMCUzQTAw", include_deleted_data=True, include_remote_data=True, include_remote_fields=True, include_shell_data=True, - modified_after=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), - modified_before=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), + modified_after=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), + modified_before=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), page_size=1, remote_id="remote_id", ) @@ -29740,7 +29409,7 @@ client.crm.custom_objects.custom_object_classes_custom_objects_list(
-**created_after:** `typing.Optional[dt.datetime]` — If provided, will only return objects created after this datetime. +**created_after:** `typing.Optional[datetime.datetime]` — If provided, will only return objects created after this datetime.
@@ -29748,7 +29417,7 @@ client.crm.custom_objects.custom_object_classes_custom_objects_list(
-**created_before:** `typing.Optional[dt.datetime]` — If provided, will only return objects created before this datetime. +**created_before:** `typing.Optional[datetime.datetime]` — If provided, will only return objects created before this datetime.
@@ -29796,7 +29465,7 @@ client.crm.custom_objects.custom_object_classes_custom_objects_list(
-**modified_after:** `typing.Optional[dt.datetime]` — If provided, only objects synced by Merge after this date time will be returned. +**modified_after:** `typing.Optional[datetime.datetime]` — If provided, only objects synced by Merge after this date time will be returned.
@@ -29804,7 +29473,7 @@ client.crm.custom_objects.custom_object_classes_custom_objects_list(
-**modified_before:** `typing.Optional[dt.datetime]` — If provided, only objects synced by Merge before this date time will be returned. +**modified_before:** `typing.Optional[datetime.datetime]` — If provided, only objects synced by Merge before this date time will be returned.
@@ -29840,7 +29509,7 @@ client.crm.custom_objects.custom_object_classes_custom_objects_list(
-
client.crm.custom_objects.custom_object_classes_custom_objects_create(...) +
client.crm.custom_objects.custom_object_classes_custom_objects_create(...) -> CrmCustomObjectResponse
@@ -29868,18 +29537,22 @@ Creates a `CustomObject` object with the given values. ```python from merge import Merge -from merge.resources.crm import CustomObjectRequest +from merge.environment import MergeEnvironment +from merge.crm import CustomObjectRequest client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.crm.custom_objects.custom_object_classes_custom_objects_create( custom_object_class_id="custom_object_class_id", is_debug_mode=True, run_async=True, model=CustomObjectRequest( - fields={"test_field": "hello"}, + fields={ + "test_field": "hello" + }, ), ) @@ -29941,7 +29614,7 @@ client.crm.custom_objects.custom_object_classes_custom_objects_create(
-
client.crm.custom_objects.custom_object_classes_custom_objects_retrieve(...) +
client.crm.custom_objects.custom_object_classes_custom_objects_retrieve(...) -> CustomObject
@@ -29969,11 +29642,13 @@ Returns a `CustomObject` object with the given `id`. ```python from merge import Merge +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.crm.custom_objects.custom_object_classes_custom_objects_retrieve( custom_object_class_id="custom_object_class_id", id="id", @@ -30048,7 +29723,7 @@ client.crm.custom_objects.custom_object_classes_custom_objects_retrieve(
-
client.crm.custom_objects.custom_object_classes_custom_objects_meta_post_retrieve(...) +
client.crm.custom_objects.custom_object_classes_custom_objects_meta_post_retrieve(...) -> MetaResponse
@@ -30076,11 +29751,13 @@ Returns metadata for `CRMCustomObject` POSTs. ```python from merge import Merge +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.crm.custom_objects.custom_object_classes_custom_objects_meta_post_retrieve( custom_object_class_id="custom_object_class_id", ) @@ -30119,7 +29796,7 @@ client.crm.custom_objects.custom_object_classes_custom_objects_meta_post_retriev
-
client.crm.custom_objects.custom_object_classes_custom_objects_remote_field_classes_list(...) +
client.crm.custom_objects.custom_object_classes_custom_objects_remote_field_classes_list(...) -> PaginatedRemoteFieldClassList
@@ -30147,11 +29824,13 @@ Returns a list of `RemoteFieldClass` objects. ```python from merge import Merge +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.crm.custom_objects.custom_object_classes_custom_objects_remote_field_classes_list( cursor="cD0yMDIxLTAxLTA2KzAzJTNBMjQlM0E1My40MzQzMjYlMkIwMCUzQTAw", include_deleted_data=True, @@ -30254,7 +29933,7 @@ client.crm.custom_objects.custom_object_classes_custom_objects_remote_field_clas
## Crm Associations -
client.crm.associations.custom_object_classes_custom_objects_associations_list(...) +
client.crm.associations.custom_object_classes_custom_objects_associations_list(...) -> PaginatedAssociationList
@@ -30281,34 +29960,27 @@ Returns a list of `Association` objects.
```python -import datetime - from merge import Merge +from merge.environment import MergeEnvironment +import datetime client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.crm.associations.custom_object_classes_custom_objects_associations_list( custom_object_class_id="custom_object_class_id", object_id="object_id", association_type_id="association_type_id", - created_after=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), - created_before=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), + created_after=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), + created_before=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), cursor="cD0yMDIxLTAxLTA2KzAzJTNBMjQlM0E1My40MzQzMjYlMkIwMCUzQTAw", include_deleted_data=True, include_remote_data=True, include_shell_data=True, - modified_after=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), - modified_before=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), + modified_after=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), + modified_before=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), page_size=1, remote_id="remote_id", ) @@ -30351,7 +30023,7 @@ client.crm.associations.custom_object_classes_custom_objects_associations_list(
-**created_after:** `typing.Optional[dt.datetime]` — If provided, will only return objects created after this datetime. +**created_after:** `typing.Optional[datetime.datetime]` — If provided, will only return objects created after this datetime.
@@ -30359,7 +30031,7 @@ client.crm.associations.custom_object_classes_custom_objects_associations_list(
-**created_before:** `typing.Optional[dt.datetime]` — If provided, will only return objects created before this datetime. +**created_before:** `typing.Optional[datetime.datetime]` — If provided, will only return objects created before this datetime.
@@ -30375,12 +30047,7 @@ client.crm.associations.custom_object_classes_custom_objects_associations_list(
-**expand:** `typing.Optional[ - typing.Union[ - typing.Literal["association_type"], - typing.Sequence[typing.Literal["association_type"]], - ] -]` — Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces. +**expand:** `typing.Optional[typing.Union[typing.Literal, typing.Sequence[typing.Literal]]]` — Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces.
@@ -30412,7 +30079,7 @@ client.crm.associations.custom_object_classes_custom_objects_associations_list(
-**modified_after:** `typing.Optional[dt.datetime]` — If provided, only objects synced by Merge after this date time will be returned. +**modified_after:** `typing.Optional[datetime.datetime]` — If provided, only objects synced by Merge after this date time will be returned.
@@ -30420,7 +30087,7 @@ client.crm.associations.custom_object_classes_custom_objects_associations_list(
-**modified_before:** `typing.Optional[dt.datetime]` — If provided, only objects synced by Merge before this date time will be returned. +**modified_before:** `typing.Optional[datetime.datetime]` — If provided, only objects synced by Merge before this date time will be returned.
@@ -30456,7 +30123,7 @@ client.crm.associations.custom_object_classes_custom_objects_associations_list(
-
client.crm.associations.custom_object_classes_custom_objects_associations_update(...) +
client.crm.associations.custom_object_classes_custom_objects_associations_update(...) -> Association
@@ -30484,11 +30151,13 @@ Creates an Association between `source_object_id` and `target_object_id` of type ```python from merge import Merge +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.crm.associations.custom_object_classes_custom_objects_associations_update( source_class_id="source_class_id", source_object_id="source_object_id", @@ -30582,7 +30251,7 @@ client.crm.associations.custom_object_classes_custom_objects_associations_update
## Crm Scopes -
client.crm.scopes.default_scopes_retrieve() +
client.crm.scopes.default_scopes_retrieve() -> CommonModelScopeApi
@@ -30610,11 +30279,13 @@ Get the default permissions for Merge Common Models and fields across all Linked ```python from merge import Merge +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.crm.scopes.default_scopes_retrieve() ``` @@ -30643,7 +30314,7 @@ client.crm.scopes.default_scopes_retrieve()
-
client.crm.scopes.linked_account_scopes_retrieve() +
client.crm.scopes.linked_account_scopes_retrieve() -> CommonModelScopeApi
@@ -30671,11 +30342,13 @@ Get all available permissions for Merge Common Models and fields for a single Li ```python from merge import Merge +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.crm.scopes.linked_account_scopes_retrieve() ``` @@ -30704,7 +30377,7 @@ client.crm.scopes.linked_account_scopes_retrieve()
-
client.crm.scopes.linked_account_scopes_create(...) +
client.crm.scopes.linked_account_scopes_create(...) -> CommonModelScopeApi
@@ -30732,16 +30405,14 @@ Update permissions for any Common Model or field for a single Linked Account. An ```python from merge import Merge -from merge.resources.crm import ( - FieldPermissionDeserializerRequest, - IndividualCommonModelScopeDeserializerRequest, - ModelPermissionDeserializerRequest, -) +from merge.environment import MergeEnvironment +from merge.crm import IndividualCommonModelScopeDeserializerRequest, ModelPermissionDeserializerRequest, FieldPermissionDeserializerRequest client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.crm.scopes.linked_account_scopes_create( common_models=[ IndividualCommonModelScopeDeserializerRequest( @@ -30752,11 +30423,16 @@ client.crm.scopes.linked_account_scopes_create( ), "WRITE": ModelPermissionDeserializerRequest( is_enabled=False, - ), + ) }, field_permissions=FieldPermissionDeserializerRequest( - enabled_fields=["avatar", "home_location"], - disabled_fields=["work_location"], + enabled_fields=[ + "avatar", + "home_location" + ], + disabled_fields=[ + "work_location" + ], ), ), IndividualCommonModelScopeDeserializerRequest( @@ -30766,7 +30442,7 @@ client.crm.scopes.linked_account_scopes_create( is_enabled=False, ) }, - ), + ) ], ) @@ -30784,7 +30460,7 @@ client.crm.scopes.linked_account_scopes_create(
-**common_models:** `typing.Sequence[IndividualCommonModelScopeDeserializerRequest]` — The common models you want to update the scopes for +**common_models:** `typing.List[IndividualCommonModelScopeDeserializerRequest]` — The common models you want to update the scopes for
@@ -30805,7 +30481,7 @@ client.crm.scopes.linked_account_scopes_create(
## Crm DeleteAccount -
client.crm.delete_account.delete() +
client.crm.delete_account.delete()
@@ -30833,11 +30509,13 @@ Delete a linked account. ```python from merge import Merge +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.crm.delete_account.delete() ``` @@ -30867,7 +30545,7 @@ client.crm.delete_account.delete()
## Crm EngagementTypes -
client.crm.engagement_types.list(...) +
client.crm.engagement_types.list(...) -> PaginatedEngagementTypeList
@@ -30894,32 +30572,25 @@ Returns a list of `EngagementType` objects.
```python -import datetime - from merge import Merge +from merge.environment import MergeEnvironment +import datetime client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.crm.engagement_types.list( - created_after=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), - created_before=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), + created_after=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), + created_before=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), cursor="cD0yMDIxLTAxLTA2KzAzJTNBMjQlM0E1My40MzQzMjYlMkIwMCUzQTAw", include_deleted_data=True, include_remote_data=True, include_remote_fields=True, include_shell_data=True, - modified_after=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), - modified_before=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), + modified_after=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), + modified_before=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), page_size=1, remote_id="remote_id", ) @@ -30938,7 +30609,7 @@ client.crm.engagement_types.list(
-**created_after:** `typing.Optional[dt.datetime]` — If provided, will only return objects created after this datetime. +**created_after:** `typing.Optional[datetime.datetime]` — If provided, will only return objects created after this datetime.
@@ -30946,7 +30617,7 @@ client.crm.engagement_types.list(
-**created_before:** `typing.Optional[dt.datetime]` — If provided, will only return objects created before this datetime. +**created_before:** `typing.Optional[datetime.datetime]` — If provided, will only return objects created before this datetime.
@@ -30994,7 +30665,7 @@ client.crm.engagement_types.list(
-**modified_after:** `typing.Optional[dt.datetime]` — If provided, only objects synced by Merge after this date time will be returned. +**modified_after:** `typing.Optional[datetime.datetime]` — If provided, only objects synced by Merge after this date time will be returned.
@@ -31002,7 +30673,7 @@ client.crm.engagement_types.list(
-**modified_before:** `typing.Optional[dt.datetime]` — If provided, only objects synced by Merge before this date time will be returned. +**modified_before:** `typing.Optional[datetime.datetime]` — If provided, only objects synced by Merge before this date time will be returned.
@@ -31038,7 +30709,7 @@ client.crm.engagement_types.list(
-
client.crm.engagement_types.retrieve(...) +
client.crm.engagement_types.retrieve(...) -> EngagementType
@@ -31066,11 +30737,13 @@ Returns an `EngagementType` object with the given `id`. ```python from merge import Merge +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.crm.engagement_types.retrieve( id="id", include_remote_data=True, @@ -31136,7 +30809,7 @@ client.crm.engagement_types.retrieve(
-
client.crm.engagement_types.remote_field_classes_list(...) +
client.crm.engagement_types.remote_field_classes_list(...) -> PaginatedRemoteFieldClassList
@@ -31164,11 +30837,13 @@ Returns a list of `RemoteFieldClass` objects. ```python from merge import Merge +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.crm.engagement_types.remote_field_classes_list( cursor="cD0yMDIxLTAxLTA2KzAzJTNBMjQlM0E1My40MzQzMjYlMkIwMCUzQTAw", include_deleted_data=True, @@ -31271,7 +30946,7 @@ client.crm.engagement_types.remote_field_classes_list(
## Crm Engagements -
client.crm.engagements.list(...) +
client.crm.engagements.list(...) -> PaginatedEngagementList
@@ -31298,40 +30973,29 @@ Returns a list of `Engagement` objects.
```python -import datetime - from merge import Merge +from merge.environment import MergeEnvironment +import datetime client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.crm.engagements.list( - created_after=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), - created_before=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), + created_after=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), + created_before=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), cursor="cD0yMDIxLTAxLTA2KzAzJTNBMjQlM0E1My40MzQzMjYlMkIwMCUzQTAw", include_deleted_data=True, include_remote_data=True, include_remote_fields=True, include_shell_data=True, - modified_after=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), - modified_before=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), + modified_after=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), + modified_before=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), page_size=1, remote_id="remote_id", - started_after=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), - started_before=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), + started_after=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), + started_before=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), ) ``` @@ -31348,7 +31012,7 @@ client.crm.engagements.list(
-**created_after:** `typing.Optional[dt.datetime]` — If provided, will only return objects created after this datetime. +**created_after:** `typing.Optional[datetime.datetime]` — If provided, will only return objects created after this datetime.
@@ -31356,7 +31020,7 @@ client.crm.engagements.list(
-**created_before:** `typing.Optional[dt.datetime]` — If provided, will only return objects created before this datetime. +**created_before:** `typing.Optional[datetime.datetime]` — If provided, will only return objects created before this datetime.
@@ -31372,12 +31036,7 @@ client.crm.engagements.list(
-**expand:** `typing.Optional[ - typing.Union[ - EngagementsListRequestExpandItem, - typing.Sequence[EngagementsListRequestExpandItem], - ] -]` — Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces. +**expand:** `typing.Optional[typing.Union[EngagementsListRequestExpandItem, typing.Sequence[EngagementsListRequestExpandItem]]]` — Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces.
@@ -31417,7 +31076,7 @@ client.crm.engagements.list(
-**modified_after:** `typing.Optional[dt.datetime]` — If provided, only objects synced by Merge after this date time will be returned. +**modified_after:** `typing.Optional[datetime.datetime]` — If provided, only objects synced by Merge after this date time will be returned.
@@ -31425,7 +31084,7 @@ client.crm.engagements.list(
-**modified_before:** `typing.Optional[dt.datetime]` — If provided, only objects synced by Merge before this date time will be returned. +**modified_before:** `typing.Optional[datetime.datetime]` — If provided, only objects synced by Merge before this date time will be returned.
@@ -31449,7 +31108,7 @@ client.crm.engagements.list(
-**started_after:** `typing.Optional[dt.datetime]` — If provided, will only return engagements started after this datetime. +**started_after:** `typing.Optional[datetime.datetime]` — If provided, will only return engagements started after this datetime.
@@ -31457,7 +31116,7 @@ client.crm.engagements.list(
-**started_before:** `typing.Optional[dt.datetime]` — If provided, will only return engagements started before this datetime. +**started_before:** `typing.Optional[datetime.datetime]` — If provided, will only return engagements started before this datetime.
@@ -31477,7 +31136,7 @@ client.crm.engagements.list(
-
client.crm.engagements.create(...) +
client.crm.engagements.create(...) -> EngagementResponse
@@ -31505,12 +31164,14 @@ Creates an `Engagement` object with the given values. ```python from merge import Merge -from merge.resources.crm import EngagementRequest +from merge.environment import MergeEnvironment +from merge.crm import EngagementRequest client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.crm.engagements.create( is_debug_mode=True, run_async=True, @@ -31567,7 +31228,7 @@ client.crm.engagements.create(
-
client.crm.engagements.retrieve(...) +
client.crm.engagements.retrieve(...) -> Engagement
@@ -31595,11 +31256,13 @@ Returns an `Engagement` object with the given `id`. ```python from merge import Merge +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.crm.engagements.retrieve( id="id", include_remote_data=True, @@ -31629,12 +31292,7 @@ client.crm.engagements.retrieve(
-**expand:** `typing.Optional[ - typing.Union[ - EngagementsRetrieveRequestExpandItem, - typing.Sequence[EngagementsRetrieveRequestExpandItem], - ] -]` — Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces. +**expand:** `typing.Optional[typing.Union[EngagementsRetrieveRequestExpandItem, typing.Sequence[EngagementsRetrieveRequestExpandItem]]]` — Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces.
@@ -31678,7 +31336,7 @@ client.crm.engagements.retrieve(
-
client.crm.engagements.partial_update(...) +
client.crm.engagements.partial_update(...) -> EngagementResponse
@@ -31706,12 +31364,14 @@ Updates an `Engagement` object with the given `id`. ```python from merge import Merge -from merge.resources.crm import PatchedEngagementRequest +from merge.environment import MergeEnvironment +from merge.crm import PatchedEngagementRequest client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.crm.engagements.partial_update( id="id", is_debug_mode=True, @@ -31777,7 +31437,7 @@ client.crm.engagements.partial_update(
-
client.crm.engagements.meta_patch_retrieve(...) +
client.crm.engagements.meta_patch_retrieve(...) -> MetaResponse
@@ -31805,11 +31465,13 @@ Returns metadata for `Engagement` PATCHs. ```python from merge import Merge +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.crm.engagements.meta_patch_retrieve( id="id", ) @@ -31848,7 +31510,7 @@ client.crm.engagements.meta_patch_retrieve(
-
client.crm.engagements.meta_post_retrieve() +
client.crm.engagements.meta_post_retrieve() -> MetaResponse
@@ -31876,11 +31538,13 @@ Returns metadata for `Engagement` POSTs. ```python from merge import Merge +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.crm.engagements.meta_post_retrieve() ``` @@ -31909,7 +31573,7 @@ client.crm.engagements.meta_post_retrieve()
-
client.crm.engagements.remote_field_classes_list(...) +
client.crm.engagements.remote_field_classes_list(...) -> PaginatedRemoteFieldClassList
@@ -31937,11 +31601,13 @@ Returns a list of `RemoteFieldClass` objects. ```python from merge import Merge +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.crm.engagements.remote_field_classes_list( cursor="cD0yMDIxLTAxLTA2KzAzJTNBMjQlM0E1My40MzQzMjYlMkIwMCUzQTAw", include_deleted_data=True, @@ -32044,7 +31710,7 @@ client.crm.engagements.remote_field_classes_list(
## Crm FieldMapping -
client.crm.field_mapping.field_mappings_retrieve(...) +
client.crm.field_mapping.field_mappings_retrieve(...) -> FieldMappingApiInstanceResponse
@@ -32072,11 +31738,13 @@ Get all Field Mappings for this Linked Account. Field Mappings are mappings betw ```python from merge import Merge +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.crm.field_mapping.field_mappings_retrieve( exclude_remote_field_metadata=True, ) @@ -32115,7 +31783,7 @@ client.crm.field_mapping.field_mappings_retrieve(
-
client.crm.field_mapping.field_mappings_create(...) +
client.crm.field_mapping.field_mappings_create(...) -> FieldMappingInstanceResponse
@@ -32143,17 +31811,21 @@ Create new Field Mappings that will be available after the next scheduled sync. ```python from merge import Merge +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.crm.field_mapping.field_mappings_create( exclude_remote_field_metadata=True, remote_data_iteration_count=1, target_field_name="example_target_field_name", target_field_description="this is a example description of the target field", - remote_field_traversal_path=["example_remote_field"], + remote_field_traversal_path=[ + "example_remote_field" + ], remote_method="GET", remote_url_path="/example-url-path", common_model_name="ExampleCommonModel", @@ -32189,7 +31861,7 @@ client.crm.field_mapping.field_mappings_create(
-**remote_field_traversal_path:** `typing.Sequence[typing.Optional[typing.Any]]` — The field traversal path of the remote field listed when you hit the GET /remote-fields endpoint. +**remote_field_traversal_path:** `typing.List[typing.Any]` — The field traversal path of the remote field listed when you hit the GET /remote-fields endpoint.
@@ -32257,7 +31929,7 @@ client.crm.field_mapping.field_mappings_create(
-
client.crm.field_mapping.field_mappings_destroy(...) +
client.crm.field_mapping.field_mappings_destroy(...) -> FieldMappingInstanceResponse
@@ -32285,11 +31957,13 @@ Deletes Field Mappings for a Linked Account. All data related to this Field Mapp ```python from merge import Merge +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.crm.field_mapping.field_mappings_destroy( field_mapping_id="field_mapping_id", ) @@ -32328,7 +32002,7 @@ client.crm.field_mapping.field_mappings_destroy(
-
client.crm.field_mapping.field_mappings_partial_update(...) +
client.crm.field_mapping.field_mappings_partial_update(...) -> FieldMappingInstanceResponse
@@ -32356,11 +32030,13 @@ Create or update existing Field Mappings for a Linked Account. Changes will be r ```python from merge import Merge +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.crm.field_mapping.field_mappings_partial_update( field_mapping_id="field_mapping_id", remote_data_iteration_count=1, @@ -32396,7 +32072,7 @@ client.crm.field_mapping.field_mappings_partial_update(
-**remote_field_traversal_path:** `typing.Optional[typing.Sequence[typing.Optional[typing.Any]]]` — The field traversal path of the remote field listed when you hit the GET /remote-fields endpoint. +**remote_field_traversal_path:** `typing.Optional[typing.List[typing.Any]]` — The field traversal path of the remote field listed when you hit the GET /remote-fields endpoint.
@@ -32440,7 +32116,7 @@ client.crm.field_mapping.field_mappings_partial_update(
-
client.crm.field_mapping.remote_fields_retrieve(...) +
client.crm.field_mapping.remote_fields_retrieve(...) -> RemoteFieldApiResponse
@@ -32468,11 +32144,13 @@ Get all remote fields for a Linked Account. Remote fields are third-party fields ```python from merge import Merge +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.crm.field_mapping.remote_fields_retrieve( common_models="common_models", include_example_values="include_example_values", @@ -32520,7 +32198,7 @@ client.crm.field_mapping.remote_fields_retrieve(
-
client.crm.field_mapping.target_fields_retrieve() +
client.crm.field_mapping.target_fields_retrieve() -> ExternalTargetFieldApiResponse
@@ -32548,11 +32226,13 @@ Get all organization-wide Target Fields, this will not include any Linked Accoun ```python from merge import Merge +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.crm.field_mapping.target_fields_retrieve() ``` @@ -32582,7 +32262,7 @@ client.crm.field_mapping.target_fields_retrieve()
## Crm GenerateKey -
client.crm.generate_key.create(...) +
client.crm.generate_key.create(...) -> RemoteKey
@@ -32610,11 +32290,13 @@ Create a remote key. ```python from merge import Merge +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.crm.generate_key.create( name="Remote Deployment Key 1", ) @@ -32654,7 +32336,7 @@ client.crm.generate_key.create(
## Crm Issues -
client.crm.issues.list(...) +
client.crm.issues.list(...) -> PaginatedIssueList
@@ -32681,38 +32363,30 @@ Gets all issues for Organization.
```python -import datetime - from merge import Merge -from merge.resources.crm.resources.issues import IssuesListRequestStatus +from merge.environment import MergeEnvironment +import datetime client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.crm.issues.list( account_token="account_token", cursor="cD0yMDIxLTAxLTA2KzAzJTNBMjQlM0E1My40MzQzMjYlMkIwMCUzQTAw", end_date="end_date", end_user_organization_name="end_user_organization_name", - first_incident_time_after=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), - first_incident_time_before=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), + first_incident_time_after=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), + first_incident_time_before=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), include_muted="include_muted", integration_name="integration_name", - last_incident_time_after=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), - last_incident_time_before=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), + last_incident_time_after=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), + last_incident_time_before=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), linked_account_id="linked_account_id", page_size=1, start_date="start_date", - status=IssuesListRequestStatus.ONGOING, + status="ONGOING", ) ``` @@ -32761,7 +32435,7 @@ client.crm.issues.list(
-**first_incident_time_after:** `typing.Optional[dt.datetime]` — If provided, will only return issues whose first incident time was after this datetime. +**first_incident_time_after:** `typing.Optional[datetime.datetime]` — If provided, will only return issues whose first incident time was after this datetime.
@@ -32769,7 +32443,7 @@ client.crm.issues.list(
-**first_incident_time_before:** `typing.Optional[dt.datetime]` — If provided, will only return issues whose first incident time was before this datetime. +**first_incident_time_before:** `typing.Optional[datetime.datetime]` — If provided, will only return issues whose first incident time was before this datetime.
@@ -32793,7 +32467,7 @@ client.crm.issues.list(
-**last_incident_time_after:** `typing.Optional[dt.datetime]` — If provided, will only return issues whose last incident time was after this datetime. +**last_incident_time_after:** `typing.Optional[datetime.datetime]` — If provided, will only return issues whose last incident time was after this datetime.
@@ -32801,7 +32475,7 @@ client.crm.issues.list(
-**last_incident_time_before:** `typing.Optional[dt.datetime]` — If provided, will only return issues whose last incident time was before this datetime. +**last_incident_time_before:** `typing.Optional[datetime.datetime]` — If provided, will only return issues whose last incident time was before this datetime.
@@ -32858,7 +32532,7 @@ Status of the issue. Options: ('ONGOING', 'RESOLVED')
-
client.crm.issues.retrieve(...) +
client.crm.issues.retrieve(...) -> Issue
@@ -32886,11 +32560,13 @@ Get a specific issue. ```python from merge import Merge +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.crm.issues.retrieve( id="id", ) @@ -32930,7 +32606,7 @@ client.crm.issues.retrieve(
## Crm Leads -
client.crm.leads.list(...) +
client.crm.leads.list(...) -> PaginatedLeadList
@@ -32957,35 +32633,28 @@ Returns a list of `Lead` objects.
```python -import datetime - from merge import Merge +from merge.environment import MergeEnvironment +import datetime client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.crm.leads.list( converted_account_id="converted_account_id", converted_contact_id="converted_contact_id", - created_after=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), - created_before=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), + created_after=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), + created_before=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), cursor="cD0yMDIxLTAxLTA2KzAzJTNBMjQlM0E1My40MzQzMjYlMkIwMCUzQTAw", email_addresses="email_addresses", include_deleted_data=True, include_remote_data=True, include_remote_fields=True, include_shell_data=True, - modified_after=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), - modified_before=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), + modified_after=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), + modified_before=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), owner_id="owner_id", page_size=1, phone_numbers="phone_numbers", @@ -33022,7 +32691,7 @@ client.crm.leads.list(
-**created_after:** `typing.Optional[dt.datetime]` — If provided, will only return objects created after this datetime. +**created_after:** `typing.Optional[datetime.datetime]` — If provided, will only return objects created after this datetime.
@@ -33030,7 +32699,7 @@ client.crm.leads.list(
-**created_before:** `typing.Optional[dt.datetime]` — If provided, will only return objects created before this datetime. +**created_before:** `typing.Optional[datetime.datetime]` — If provided, will only return objects created before this datetime.
@@ -33054,11 +32723,7 @@ client.crm.leads.list(
-**expand:** `typing.Optional[ - typing.Union[ - LeadsListRequestExpandItem, typing.Sequence[LeadsListRequestExpandItem] - ] -]` — Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces. +**expand:** `typing.Optional[typing.Union[LeadsListRequestExpandItem, typing.Sequence[LeadsListRequestExpandItem]]]` — Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces.
@@ -33098,7 +32763,7 @@ client.crm.leads.list(
-**modified_after:** `typing.Optional[dt.datetime]` — If provided, only objects synced by Merge after this date time will be returned. +**modified_after:** `typing.Optional[datetime.datetime]` — If provided, only objects synced by Merge after this date time will be returned.
@@ -33106,7 +32771,7 @@ client.crm.leads.list(
-**modified_before:** `typing.Optional[dt.datetime]` — If provided, only objects synced by Merge before this date time will be returned. +**modified_before:** `typing.Optional[datetime.datetime]` — If provided, only objects synced by Merge before this date time will be returned.
@@ -33158,7 +32823,7 @@ client.crm.leads.list(
-
client.crm.leads.create(...) +
client.crm.leads.create(...) -> LeadResponse
@@ -33186,12 +32851,14 @@ Creates a `Lead` object with the given values. ```python from merge import Merge -from merge.resources.crm import LeadRequest +from merge.environment import MergeEnvironment +from merge.crm import LeadRequest client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.crm.leads.create( is_debug_mode=True, run_async=True, @@ -33248,7 +32915,7 @@ client.crm.leads.create(
-
client.crm.leads.retrieve(...) +
client.crm.leads.retrieve(...) -> Lead
@@ -33276,11 +32943,13 @@ Returns a `Lead` object with the given `id`. ```python from merge import Merge +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.crm.leads.retrieve( id="id", include_remote_data=True, @@ -33310,12 +32979,7 @@ client.crm.leads.retrieve(
-**expand:** `typing.Optional[ - typing.Union[ - LeadsRetrieveRequestExpandItem, - typing.Sequence[LeadsRetrieveRequestExpandItem], - ] -]` — Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces. +**expand:** `typing.Optional[typing.Union[LeadsRetrieveRequestExpandItem, typing.Sequence[LeadsRetrieveRequestExpandItem]]]` — Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces.
@@ -33359,7 +33023,7 @@ client.crm.leads.retrieve(
-
client.crm.leads.meta_post_retrieve() +
client.crm.leads.meta_post_retrieve() -> MetaResponse
@@ -33387,11 +33051,13 @@ Returns metadata for `Lead` POSTs. ```python from merge import Merge +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.crm.leads.meta_post_retrieve() ``` @@ -33420,7 +33086,7 @@ client.crm.leads.meta_post_retrieve()
-
client.crm.leads.remote_field_classes_list(...) +
client.crm.leads.remote_field_classes_list(...) -> PaginatedRemoteFieldClassList
@@ -33448,11 +33114,13 @@ Returns a list of `RemoteFieldClass` objects. ```python from merge import Merge +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.crm.leads.remote_field_classes_list( cursor="cD0yMDIxLTAxLTA2KzAzJTNBMjQlM0E1My40MzQzMjYlMkIwMCUzQTAw", include_deleted_data=True, @@ -33555,7 +33223,7 @@ client.crm.leads.remote_field_classes_list(
## Crm LinkToken -
client.crm.link_token.create(...) +
client.crm.link_token.create(...) -> LinkToken
@@ -33583,17 +33251,21 @@ Creates a link token to be used when linking a new end user. The link token expi ```python from merge import Merge -from merge.resources.crm import CategoriesEnum +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.crm.link_token.create( end_user_email_address="example@gmail.com", end_user_organization_name="Test Organization", end_user_origin_id="12345", - categories=[CategoriesEnum.HRIS, CategoriesEnum.ATS], + categories=[ + "hris", + "ats" + ], ) ``` @@ -33634,7 +33306,7 @@ client.crm.link_token.create(
-**categories:** `typing.Sequence[CategoriesEnum]` — The integration categories to show in Merge Link. +**categories:** `typing.List[CategoriesEnum]` — The integration categories to show in Merge Link.
@@ -33674,7 +33346,7 @@ client.crm.link_token.create(
-**common_models:** `typing.Optional[typing.Sequence[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. +**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.
@@ -33682,14 +33354,7 @@ client.crm.link_token.create(
-**category_common_model_scopes:** `typing.Optional[ - typing.Dict[ - str, - typing.Optional[ - typing.Sequence[IndividualCommonModelScopeDeserializerRequest] - ], - ] -]` — When creating a Link Token, you can set permissions for Common Models that will apply to the account that is going to be linked. Any model or field not specified in link token payload will default to existing settings. +**category_common_model_scopes:** `typing.Optional[typing.Dict[str, typing.Optional[typing.List[IndividualCommonModelScopeDeserializerRequest]]]]` — When creating a Link Token, you can set permissions for Common Models that will apply to the account that is going to be linked. Any model or field not specified in link token payload will default to existing settings.
@@ -33718,7 +33383,7 @@ The following subset of IETF language tags can be used to configure localization
-**integration_specific_config:** `typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]]` — A JSON object containing integration-specific configuration options. +**integration_specific_config:** `typing.Optional[typing.Dict[str, typing.Any]]` — A JSON object containing integration-specific configuration options.
@@ -33739,7 +33404,7 @@ The following subset of IETF language tags can be used to configure localization
## Crm LinkedAccounts -
client.crm.linked_accounts.list(...) +
client.crm.linked_accounts.list(...) -> PaginatedAccountDetailsAndActionsList
@@ -33767,16 +33432,15 @@ List linked accounts for your organization. ```python from merge import Merge -from merge.resources.crm.resources.linked_accounts import ( - LinkedAccountsListRequestCategory, -) +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.crm.linked_accounts.list( - category=LinkedAccountsListRequestCategory.ACCOUNTING, + category="accounting", cursor="cD0yMDIxLTAxLTA2KzAzJTNBMjQlM0E1My40MzQzMjYlMkIwMCUzQTAw", end_user_email_address="end_user_email_address", end_user_organization_name="end_user_organization_name", @@ -33932,7 +33596,7 @@ Options: `accounting`, `ats`, `crm`, `filestorage`, `hris`, `mktg`, `ticketing`
## Crm Notes -
client.crm.notes.list(...) +
client.crm.notes.list(...) -> PaginatedNoteList
@@ -33959,34 +33623,27 @@ Returns a list of `Note` objects.
```python -import datetime - from merge import Merge +from merge.environment import MergeEnvironment +import datetime client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.crm.notes.list( account_id="account_id", contact_id="contact_id", - created_after=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), - created_before=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), + created_after=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), + created_before=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), cursor="cD0yMDIxLTAxLTA2KzAzJTNBMjQlM0E1My40MzQzMjYlMkIwMCUzQTAw", include_deleted_data=True, include_remote_data=True, include_remote_fields=True, include_shell_data=True, - modified_after=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), - modified_before=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), + modified_after=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), + modified_before=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), opportunity_id="opportunity_id", owner_id="owner_id", page_size=1, @@ -34023,7 +33680,7 @@ client.crm.notes.list(
-**created_after:** `typing.Optional[dt.datetime]` — If provided, will only return objects created after this datetime. +**created_after:** `typing.Optional[datetime.datetime]` — If provided, will only return objects created after this datetime.
@@ -34031,7 +33688,7 @@ client.crm.notes.list(
-**created_before:** `typing.Optional[dt.datetime]` — If provided, will only return objects created before this datetime. +**created_before:** `typing.Optional[datetime.datetime]` — If provided, will only return objects created before this datetime.
@@ -34047,11 +33704,7 @@ client.crm.notes.list(
-**expand:** `typing.Optional[ - typing.Union[ - NotesListRequestExpandItem, typing.Sequence[NotesListRequestExpandItem] - ] -]` — Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces. +**expand:** `typing.Optional[typing.Union[NotesListRequestExpandItem, typing.Sequence[NotesListRequestExpandItem]]]` — Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces.
@@ -34091,7 +33744,7 @@ client.crm.notes.list(
-**modified_after:** `typing.Optional[dt.datetime]` — If provided, only objects synced by Merge after this date time will be returned. +**modified_after:** `typing.Optional[datetime.datetime]` — If provided, only objects synced by Merge after this date time will be returned.
@@ -34099,7 +33752,7 @@ client.crm.notes.list(
-**modified_before:** `typing.Optional[dt.datetime]` — If provided, only objects synced by Merge before this date time will be returned. +**modified_before:** `typing.Optional[datetime.datetime]` — If provided, only objects synced by Merge before this date time will be returned.
@@ -34151,7 +33804,7 @@ client.crm.notes.list(
-
client.crm.notes.create(...) +
client.crm.notes.create(...) -> NoteResponse
@@ -34179,12 +33832,14 @@ Creates a `Note` object with the given values. ```python from merge import Merge -from merge.resources.crm import NoteRequest +from merge.environment import MergeEnvironment +from merge.crm import NoteRequest client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.crm.notes.create( is_debug_mode=True, run_async=True, @@ -34241,7 +33896,7 @@ client.crm.notes.create(
-
client.crm.notes.retrieve(...) +
client.crm.notes.retrieve(...) -> Note
@@ -34269,11 +33924,13 @@ Returns a `Note` object with the given `id`. ```python from merge import Merge +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.crm.notes.retrieve( id="id", include_remote_data=True, @@ -34303,12 +33960,7 @@ client.crm.notes.retrieve(
-**expand:** `typing.Optional[ - typing.Union[ - NotesRetrieveRequestExpandItem, - typing.Sequence[NotesRetrieveRequestExpandItem], - ] -]` — Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces. +**expand:** `typing.Optional[typing.Union[NotesRetrieveRequestExpandItem, typing.Sequence[NotesRetrieveRequestExpandItem]]]` — Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces.
@@ -34352,7 +34004,7 @@ client.crm.notes.retrieve(
-
client.crm.notes.meta_post_retrieve() +
client.crm.notes.meta_post_retrieve() -> MetaResponse
@@ -34380,11 +34032,13 @@ Returns metadata for `Note` POSTs. ```python from merge import Merge +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.crm.notes.meta_post_retrieve() ``` @@ -34413,7 +34067,7 @@ client.crm.notes.meta_post_retrieve()
-
client.crm.notes.remote_field_classes_list(...) +
client.crm.notes.remote_field_classes_list(...) -> PaginatedRemoteFieldClassList
@@ -34441,11 +34095,13 @@ Returns a list of `RemoteFieldClass` objects. ```python from merge import Merge +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.crm.notes.remote_field_classes_list( cursor="cD0yMDIxLTAxLTA2KzAzJTNBMjQlM0E1My40MzQzMjYlMkIwMCUzQTAw", include_deleted_data=True, @@ -34548,7 +34204,7 @@ client.crm.notes.remote_field_classes_list(
## Crm Opportunities -
client.crm.opportunities.list(...) +
client.crm.opportunities.list(...) -> PaginatedOpportunityList
@@ -34575,44 +34231,34 @@ Returns a list of `Opportunity` objects.
```python -import datetime - from merge import Merge -from merge.resources.crm.resources.opportunities import ( - OpportunitiesListRequestStatus, -) +from merge.environment import MergeEnvironment +import datetime client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.crm.opportunities.list( account_id="account_id", - created_after=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), - created_before=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), + created_after=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), + created_before=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), cursor="cD0yMDIxLTAxLTA2KzAzJTNBMjQlM0E1My40MzQzMjYlMkIwMCUzQTAw", include_deleted_data=True, include_remote_data=True, include_remote_fields=True, include_shell_data=True, - modified_after=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), - modified_before=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), + modified_after=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), + modified_before=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), owner_id="owner_id", page_size=1, - remote_created_after=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), + remote_created_after=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), + remote_fields="status", remote_id="remote_id", + show_enum_origins="status", stage_id="stage_id", - status=OpportunitiesListRequestStatus.LOST, + status="LOST", ) ``` @@ -34637,7 +34283,7 @@ client.crm.opportunities.list(
-**created_after:** `typing.Optional[dt.datetime]` — If provided, will only return objects created after this datetime. +**created_after:** `typing.Optional[datetime.datetime]` — If provided, will only return objects created after this datetime.
@@ -34645,7 +34291,7 @@ client.crm.opportunities.list(
-**created_before:** `typing.Optional[dt.datetime]` — If provided, will only return objects created before this datetime. +**created_before:** `typing.Optional[datetime.datetime]` — If provided, will only return objects created before this datetime.
@@ -34661,12 +34307,7 @@ client.crm.opportunities.list(
-**expand:** `typing.Optional[ - typing.Union[ - OpportunitiesListRequestExpandItem, - typing.Sequence[OpportunitiesListRequestExpandItem], - ] -]` — Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces. +**expand:** `typing.Optional[typing.Union[OpportunitiesListRequestExpandItem, typing.Sequence[OpportunitiesListRequestExpandItem]]]` — Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces.
@@ -34706,7 +34347,7 @@ client.crm.opportunities.list(
-**modified_after:** `typing.Optional[dt.datetime]` — If provided, only objects synced by Merge after this date time will be returned. +**modified_after:** `typing.Optional[datetime.datetime]` — If provided, only objects synced by Merge after this date time will be returned.
@@ -34714,7 +34355,7 @@ client.crm.opportunities.list(
-**modified_before:** `typing.Optional[dt.datetime]` — If provided, only objects synced by Merge before this date time will be returned. +**modified_before:** `typing.Optional[datetime.datetime]` — If provided, only objects synced by Merge before this date time will be returned.
@@ -34738,7 +34379,7 @@ client.crm.opportunities.list(
-**remote_created_after:** `typing.Optional[dt.datetime]` — If provided, will only return opportunities created in the third party platform after this datetime. +**remote_created_after:** `typing.Optional[datetime.datetime]` — If provided, will only return opportunities created in the third party platform after this datetime.
@@ -34746,7 +34387,7 @@ client.crm.opportunities.list(
-**remote_fields:** `typing.Optional[typing.Literal["status"]]` — Deprecated. Use show_enum_origins. +**remote_fields:** `typing.Optional[typing.Literal]` — Deprecated. Use show_enum_origins.
@@ -34762,7 +34403,7 @@ client.crm.opportunities.list(
-**show_enum_origins:** `typing.Optional[typing.Literal["status"]]` — A comma separated list of enum field names for which you'd like the original values to be returned, instead of Merge's normalized enum values. [Learn more](https://help.merge.dev/en/articles/8950958-show_enum_origins-query-parameter) +**show_enum_origins:** `typing.Optional[typing.Literal]` — A comma separated list of enum field names for which you'd like the original values to be returned, instead of Merge's normalized enum values. [Learn more](https://help.merge.dev/en/articles/8950958-show_enum_origins-query-parameter)
@@ -34804,7 +34445,7 @@ If provided, will only return opportunities with this status. Options: ('OPEN',
-
client.crm.opportunities.create(...) +
client.crm.opportunities.create(...) -> OpportunityResponse
@@ -34832,12 +34473,14 @@ Creates an `Opportunity` object with the given values. ```python from merge import Merge -from merge.resources.crm import OpportunityRequest +from merge.environment import MergeEnvironment +from merge.crm import OpportunityRequest client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.crm.opportunities.create( is_debug_mode=True, run_async=True, @@ -34894,7 +34537,7 @@ client.crm.opportunities.create(
-
client.crm.opportunities.retrieve(...) +
client.crm.opportunities.retrieve(...) -> Opportunity
@@ -34922,16 +34565,20 @@ Returns an `Opportunity` object with the given `id`. ```python from merge import Merge +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.crm.opportunities.retrieve( id="id", include_remote_data=True, include_remote_fields=True, include_shell_data=True, + remote_fields="status", + show_enum_origins="status", ) ``` @@ -34956,12 +34603,7 @@ client.crm.opportunities.retrieve(
-**expand:** `typing.Optional[ - typing.Union[ - OpportunitiesRetrieveRequestExpandItem, - typing.Sequence[OpportunitiesRetrieveRequestExpandItem], - ] -]` — Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces. +**expand:** `typing.Optional[typing.Union[OpportunitiesRetrieveRequestExpandItem, typing.Sequence[OpportunitiesRetrieveRequestExpandItem]]]` — Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces.
@@ -34993,7 +34635,7 @@ client.crm.opportunities.retrieve(
-**remote_fields:** `typing.Optional[typing.Literal["status"]]` — Deprecated. Use show_enum_origins. +**remote_fields:** `typing.Optional[typing.Literal]` — Deprecated. Use show_enum_origins.
@@ -35001,7 +34643,7 @@ client.crm.opportunities.retrieve(
-**show_enum_origins:** `typing.Optional[typing.Literal["status"]]` — A comma separated list of enum field names for which you'd like the original values to be returned, instead of Merge's normalized enum values. [Learn more](https://help.merge.dev/en/articles/8950958-show_enum_origins-query-parameter) +**show_enum_origins:** `typing.Optional[typing.Literal]` — A comma separated list of enum field names for which you'd like the original values to be returned, instead of Merge's normalized enum values. [Learn more](https://help.merge.dev/en/articles/8950958-show_enum_origins-query-parameter)
@@ -35021,7 +34663,7 @@ client.crm.opportunities.retrieve(
-
client.crm.opportunities.partial_update(...) +
client.crm.opportunities.partial_update(...) -> OpportunityResponse
@@ -35049,12 +34691,14 @@ Updates an `Opportunity` object with the given `id`. ```python from merge import Merge -from merge.resources.crm import PatchedOpportunityRequest +from merge.environment import MergeEnvironment +from merge.crm import PatchedOpportunityRequest client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.crm.opportunities.partial_update( id="id", is_debug_mode=True, @@ -35120,7 +34764,7 @@ client.crm.opportunities.partial_update(
-
client.crm.opportunities.meta_patch_retrieve(...) +
client.crm.opportunities.meta_patch_retrieve(...) -> MetaResponse
@@ -35148,11 +34792,13 @@ Returns metadata for `Opportunity` PATCHs. ```python from merge import Merge +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.crm.opportunities.meta_patch_retrieve( id="id", ) @@ -35191,7 +34837,7 @@ client.crm.opportunities.meta_patch_retrieve(
-
client.crm.opportunities.meta_post_retrieve() +
client.crm.opportunities.meta_post_retrieve() -> MetaResponse
@@ -35219,11 +34865,13 @@ Returns metadata for `Opportunity` POSTs. ```python from merge import Merge +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.crm.opportunities.meta_post_retrieve() ``` @@ -35252,7 +34900,7 @@ client.crm.opportunities.meta_post_retrieve()
-
client.crm.opportunities.remote_field_classes_list(...) +
client.crm.opportunities.remote_field_classes_list(...) -> PaginatedRemoteFieldClassList
@@ -35280,11 +34928,13 @@ Returns a list of `RemoteFieldClass` objects. ```python from merge import Merge +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.crm.opportunities.remote_field_classes_list( cursor="cD0yMDIxLTAxLTA2KzAzJTNBMjQlM0E1My40MzQzMjYlMkIwMCUzQTAw", include_deleted_data=True, @@ -35387,7 +35037,7 @@ client.crm.opportunities.remote_field_classes_list(
## Crm Passthrough -
client.crm.passthrough.create(...) +
client.crm.passthrough.create(...) -> RemoteResponse
@@ -35415,15 +35065,17 @@ Pull data from an endpoint not currently supported by Merge. ```python from merge import Merge -from merge.resources.crm import DataPassthroughRequest, MethodEnum +from merge.environment import MergeEnvironment +from merge.crm import DataPassthroughRequest client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.crm.passthrough.create( request=DataPassthroughRequest( - method=MethodEnum.GET, + method="GET", path="/scooters", ), ) @@ -35463,7 +35115,7 @@ client.crm.passthrough.create(
## Crm RegenerateKey -
client.crm.regenerate_key.create(...) +
client.crm.regenerate_key.create(...) -> RemoteKey
@@ -35491,11 +35143,13 @@ Exchange remote keys. ```python from merge import Merge +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.crm.regenerate_key.create( name="Remote Deployment Key 1", ) @@ -35535,7 +35189,7 @@ client.crm.regenerate_key.create(
## Crm Stages -
client.crm.stages.list(...) +
client.crm.stages.list(...) -> PaginatedStageList
@@ -35562,32 +35216,25 @@ Returns a list of `Stage` objects.
```python -import datetime - from merge import Merge +from merge.environment import MergeEnvironment +import datetime client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.crm.stages.list( - created_after=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), - created_before=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), + created_after=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), + created_before=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), cursor="cD0yMDIxLTAxLTA2KzAzJTNBMjQlM0E1My40MzQzMjYlMkIwMCUzQTAw", include_deleted_data=True, include_remote_data=True, include_remote_fields=True, include_shell_data=True, - modified_after=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), - modified_before=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), + modified_after=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), + modified_before=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), page_size=1, remote_id="remote_id", ) @@ -35606,7 +35253,7 @@ client.crm.stages.list(
-**created_after:** `typing.Optional[dt.datetime]` — If provided, will only return objects created after this datetime. +**created_after:** `typing.Optional[datetime.datetime]` — If provided, will only return objects created after this datetime.
@@ -35614,7 +35261,7 @@ client.crm.stages.list(
-**created_before:** `typing.Optional[dt.datetime]` — If provided, will only return objects created before this datetime. +**created_before:** `typing.Optional[datetime.datetime]` — If provided, will only return objects created before this datetime.
@@ -35662,7 +35309,7 @@ client.crm.stages.list(
-**modified_after:** `typing.Optional[dt.datetime]` — If provided, only objects synced by Merge after this date time will be returned. +**modified_after:** `typing.Optional[datetime.datetime]` — If provided, only objects synced by Merge after this date time will be returned.
@@ -35670,7 +35317,7 @@ client.crm.stages.list(
-**modified_before:** `typing.Optional[dt.datetime]` — If provided, only objects synced by Merge before this date time will be returned. +**modified_before:** `typing.Optional[datetime.datetime]` — If provided, only objects synced by Merge before this date time will be returned.
@@ -35706,7 +35353,7 @@ client.crm.stages.list(
-
client.crm.stages.retrieve(...) +
client.crm.stages.retrieve(...) -> Stage
@@ -35734,11 +35381,13 @@ Returns a `Stage` object with the given `id`. ```python from merge import Merge +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.crm.stages.retrieve( id="id", include_remote_data=True, @@ -35804,7 +35453,7 @@ client.crm.stages.retrieve(
-
client.crm.stages.remote_field_classes_list(...) +
client.crm.stages.remote_field_classes_list(...) -> PaginatedRemoteFieldClassList
@@ -35832,11 +35481,13 @@ Returns a list of `RemoteFieldClass` objects. ```python from merge import Merge +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.crm.stages.remote_field_classes_list( cursor="cD0yMDIxLTAxLTA2KzAzJTNBMjQlM0E1My40MzQzMjYlMkIwMCUzQTAw", include_deleted_data=True, @@ -35939,7 +35590,7 @@ client.crm.stages.remote_field_classes_list(
## Crm SyncStatus -
client.crm.sync_status.list(...) +
client.crm.sync_status.list(...) -> PaginatedSyncStatusList
@@ -35967,11 +35618,13 @@ Get sync status for the current sync and the most recently finished sync. `last_ ```python from merge import Merge +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.crm.sync_status.list( cursor="cD0yMDIxLTAxLTA2KzAzJTNBMjQlM0E1My40MzQzMjYlMkIwMCUzQTAw", page_size=1, @@ -36020,7 +35673,7 @@ client.crm.sync_status.list(
## Crm ForceResync -
client.crm.force_resync.sync_status_resync_create() +
client.crm.force_resync.sync_status_resync_create() -> typing.List[SyncStatus]
@@ -36048,11 +35701,13 @@ Force re-sync of all models. This endpoint is available for monthly, quarterly, ```python from merge import Merge +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.crm.force_resync.sync_status_resync_create() ``` @@ -36082,7 +35737,7 @@ client.crm.force_resync.sync_status_resync_create()
## Crm Tasks -
client.crm.tasks.list(...) +
client.crm.tasks.list(...) -> PaginatedTaskList
@@ -36109,32 +35764,25 @@ Returns a list of `Task` objects.
```python -import datetime - from merge import Merge +from merge.environment import MergeEnvironment +import datetime client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.crm.tasks.list( - created_after=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), - created_before=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), + created_after=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), + created_before=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), cursor="cD0yMDIxLTAxLTA2KzAzJTNBMjQlM0E1My40MzQzMjYlMkIwMCUzQTAw", include_deleted_data=True, include_remote_data=True, include_remote_fields=True, include_shell_data=True, - modified_after=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), - modified_before=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), + modified_after=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), + modified_before=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), page_size=1, remote_id="remote_id", ) @@ -36153,7 +35801,7 @@ client.crm.tasks.list(
-**created_after:** `typing.Optional[dt.datetime]` — If provided, will only return objects created after this datetime. +**created_after:** `typing.Optional[datetime.datetime]` — If provided, will only return objects created after this datetime.
@@ -36161,7 +35809,7 @@ client.crm.tasks.list(
-**created_before:** `typing.Optional[dt.datetime]` — If provided, will only return objects created before this datetime. +**created_before:** `typing.Optional[datetime.datetime]` — If provided, will only return objects created before this datetime.
@@ -36177,11 +35825,7 @@ client.crm.tasks.list(
-**expand:** `typing.Optional[ - typing.Union[ - TasksListRequestExpandItem, typing.Sequence[TasksListRequestExpandItem] - ] -]` — Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces. +**expand:** `typing.Optional[typing.Union[TasksListRequestExpandItem, typing.Sequence[TasksListRequestExpandItem]]]` — Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces.
@@ -36221,7 +35865,7 @@ client.crm.tasks.list(
-**modified_after:** `typing.Optional[dt.datetime]` — If provided, only objects synced by Merge after this date time will be returned. +**modified_after:** `typing.Optional[datetime.datetime]` — If provided, only objects synced by Merge after this date time will be returned.
@@ -36229,7 +35873,7 @@ client.crm.tasks.list(
-**modified_before:** `typing.Optional[dt.datetime]` — If provided, only objects synced by Merge before this date time will be returned. +**modified_before:** `typing.Optional[datetime.datetime]` — If provided, only objects synced by Merge before this date time will be returned.
@@ -36265,7 +35909,7 @@ client.crm.tasks.list(
-
client.crm.tasks.create(...) +
client.crm.tasks.create(...) -> TaskResponse
@@ -36293,12 +35937,14 @@ Creates a `Task` object with the given values. ```python from merge import Merge -from merge.resources.crm import TaskRequest +from merge.environment import MergeEnvironment +from merge.crm import TaskRequest client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.crm.tasks.create( is_debug_mode=True, run_async=True, @@ -36355,7 +36001,7 @@ client.crm.tasks.create(
-
client.crm.tasks.retrieve(...) +
client.crm.tasks.retrieve(...) -> Task
@@ -36383,11 +36029,13 @@ Returns a `Task` object with the given `id`. ```python from merge import Merge +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.crm.tasks.retrieve( id="id", include_remote_data=True, @@ -36417,12 +36065,7 @@ client.crm.tasks.retrieve(
-**expand:** `typing.Optional[ - typing.Union[ - TasksRetrieveRequestExpandItem, - typing.Sequence[TasksRetrieveRequestExpandItem], - ] -]` — Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces. +**expand:** `typing.Optional[typing.Union[TasksRetrieveRequestExpandItem, typing.Sequence[TasksRetrieveRequestExpandItem]]]` — Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces.
@@ -36466,7 +36109,7 @@ client.crm.tasks.retrieve(
-
client.crm.tasks.partial_update(...) +
client.crm.tasks.partial_update(...) -> TaskResponse
@@ -36494,12 +36137,14 @@ Updates a `Task` object with the given `id`. ```python from merge import Merge -from merge.resources.crm import PatchedTaskRequest +from merge.environment import MergeEnvironment +from merge.crm import PatchedTaskRequest client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.crm.tasks.partial_update( id="id", is_debug_mode=True, @@ -36565,7 +36210,7 @@ client.crm.tasks.partial_update(
-
client.crm.tasks.meta_patch_retrieve(...) +
client.crm.tasks.meta_patch_retrieve(...) -> MetaResponse
@@ -36593,11 +36238,13 @@ Returns metadata for `Task` PATCHs. ```python from merge import Merge +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.crm.tasks.meta_patch_retrieve( id="id", ) @@ -36636,7 +36283,7 @@ client.crm.tasks.meta_patch_retrieve(
-
client.crm.tasks.meta_post_retrieve() +
client.crm.tasks.meta_post_retrieve() -> MetaResponse
@@ -36664,11 +36311,13 @@ Returns metadata for `Task` POSTs. ```python from merge import Merge +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.crm.tasks.meta_post_retrieve() ``` @@ -36697,7 +36346,7 @@ client.crm.tasks.meta_post_retrieve()
-
client.crm.tasks.remote_field_classes_list(...) +
client.crm.tasks.remote_field_classes_list(...) -> PaginatedRemoteFieldClassList
@@ -36725,11 +36374,13 @@ Returns a list of `RemoteFieldClass` objects. ```python from merge import Merge +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.crm.tasks.remote_field_classes_list( cursor="cD0yMDIxLTAxLTA2KzAzJTNBMjQlM0E1My40MzQzMjYlMkIwMCUzQTAw", include_deleted_data=True, @@ -36832,7 +36483,7 @@ client.crm.tasks.remote_field_classes_list(
## Crm Users -
client.crm.users.list(...) +
client.crm.users.list(...) -> PaginatedUserList
@@ -36859,33 +36510,26 @@ Returns a list of `User` objects.
```python -import datetime - from merge import Merge +from merge.environment import MergeEnvironment +import datetime client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.crm.users.list( - created_after=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), - created_before=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), + created_after=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), + created_before=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), cursor="cD0yMDIxLTAxLTA2KzAzJTNBMjQlM0E1My40MzQzMjYlMkIwMCUzQTAw", email="email", include_deleted_data=True, include_remote_data=True, include_remote_fields=True, include_shell_data=True, - modified_after=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), - modified_before=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), + modified_after=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), + modified_before=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), page_size=1, remote_id="remote_id", ) @@ -36904,7 +36548,7 @@ client.crm.users.list(
-**created_after:** `typing.Optional[dt.datetime]` — If provided, will only return objects created after this datetime. +**created_after:** `typing.Optional[datetime.datetime]` — If provided, will only return objects created after this datetime.
@@ -36912,7 +36556,7 @@ client.crm.users.list(
-**created_before:** `typing.Optional[dt.datetime]` — If provided, will only return objects created before this datetime. +**created_before:** `typing.Optional[datetime.datetime]` — If provided, will only return objects created before this datetime.
@@ -36968,7 +36612,7 @@ client.crm.users.list(
-**modified_after:** `typing.Optional[dt.datetime]` — If provided, only objects synced by Merge after this date time will be returned. +**modified_after:** `typing.Optional[datetime.datetime]` — If provided, only objects synced by Merge after this date time will be returned.
@@ -36976,7 +36620,7 @@ client.crm.users.list(
-**modified_before:** `typing.Optional[dt.datetime]` — If provided, only objects synced by Merge before this date time will be returned. +**modified_before:** `typing.Optional[datetime.datetime]` — If provided, only objects synced by Merge before this date time will be returned.
@@ -37012,7 +36656,7 @@ client.crm.users.list(
-
client.crm.users.retrieve(...) +
client.crm.users.retrieve(...) -> User
@@ -37040,11 +36684,13 @@ Returns a `User` object with the given `id`. ```python from merge import Merge +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.crm.users.retrieve( id="id", include_remote_data=True, @@ -37110,7 +36756,7 @@ client.crm.users.retrieve(
-
client.crm.users.ignore_create(...) +
client.crm.users.ignore_create(...)
@@ -37138,16 +36784,18 @@ Ignores a specific row based on the `model_id` in the url. These records will ha ```python from merge import Merge -from merge.resources.crm import IgnoreCommonModelRequest, ReasonEnum +from merge.environment import MergeEnvironment +from merge.crm import IgnoreCommonModelRequest client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.crm.users.ignore_create( model_id="model_id", request=IgnoreCommonModelRequest( - reason=ReasonEnum.GENERAL_CUSTOMER_REQUEST, + reason="GENERAL_CUSTOMER_REQUEST", ), ) @@ -37193,7 +36841,7 @@ client.crm.users.ignore_create(
-
client.crm.users.remote_field_classes_list(...) +
client.crm.users.remote_field_classes_list(...) -> PaginatedRemoteFieldClassList
@@ -37221,11 +36869,13 @@ Returns a list of `RemoteFieldClass` objects. ```python from merge import Merge +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.crm.users.remote_field_classes_list( cursor="cD0yMDIxLTAxLTA2KzAzJTNBMjQlM0E1My40MzQzMjYlMkIwMCUzQTAw", include_deleted_data=True, @@ -37328,7 +36978,7 @@ client.crm.users.remote_field_classes_list(
## Crm WebhookReceivers -
client.crm.webhook_receivers.list() +
client.crm.webhook_receivers.list() -> typing.List[WebhookReceiver]
@@ -37356,11 +37006,13 @@ Returns a list of `WebhookReceiver` objects. ```python from merge import Merge +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.crm.webhook_receivers.list() ``` @@ -37389,7 +37041,7 @@ client.crm.webhook_receivers.list()
-
client.crm.webhook_receivers.create(...) +
client.crm.webhook_receivers.create(...) -> WebhookReceiver
@@ -37417,11 +37069,13 @@ Creates a `WebhookReceiver` object with the given values. ```python from merge import Merge +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.crm.webhook_receivers.create( event="event", is_active=True, @@ -37478,7 +37132,7 @@ client.crm.webhook_receivers.create(
## Hris AccountDetails -
client.hris.account_details.retrieve() +
client.hris.account_details.retrieve() -> AccountDetails
@@ -37506,11 +37160,13 @@ Get details for a linked account. ```python from merge import Merge +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.hris.account_details.retrieve() ``` @@ -37540,7 +37196,7 @@ client.hris.account_details.retrieve()
## Hris AccountToken -
client.hris.account_token.retrieve(...) +
client.hris.account_token.retrieve(...) -> AccountToken
@@ -37568,11 +37224,13 @@ Returns the account token for the end user with the provided public token. ```python from merge import Merge +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.hris.account_token.retrieve( public_token="public_token", ) @@ -37611,7 +37269,7 @@ client.hris.account_token.retrieve(
-
client.hris.account_token.regenerate_create() +
client.hris.account_token.regenerate_create() -> RegenerateAccountToken
@@ -37639,11 +37297,13 @@ Exchange Linked Account account tokens. ```python from merge import Merge +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.hris.account_token.regenerate_create() ``` @@ -37673,7 +37333,7 @@ client.hris.account_token.regenerate_create()
## Hris AsyncPassthrough -
client.hris.async_passthrough.create(...) +
client.hris.async_passthrough.create(...) -> AsyncPassthroughReciept
@@ -37701,15 +37361,17 @@ Asynchronously pull data from an endpoint not currently supported by Merge. ```python from merge import Merge -from merge.resources.hris import DataPassthroughRequest, MethodEnum +from merge.environment import MergeEnvironment +from merge.hris import DataPassthroughRequest client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.hris.async_passthrough.create( request=DataPassthroughRequest( - method=MethodEnum.GET, + method="GET", path="/scooters", ), ) @@ -37748,7 +37410,7 @@ client.hris.async_passthrough.create(
-
client.hris.async_passthrough.retrieve(...) +
client.hris.async_passthrough.retrieve(...) -> AsyncPassthroughRetrieveResponse
@@ -37776,11 +37438,13 @@ Retrieves data from earlier async-passthrough POST request ```python from merge import Merge +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.hris.async_passthrough.retrieve( async_passthrough_receipt_id="async_passthrough_receipt_id", ) @@ -37820,7 +37484,7 @@ client.hris.async_passthrough.retrieve(
## Hris AuditTrail -
client.hris.audit_trail.list(...) +
client.hris.audit_trail.list(...) -> PaginatedAuditLogEventList
@@ -37848,11 +37512,13 @@ Gets a list of audit trail events. ```python from merge import Merge +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.hris.audit_trail.list( cursor="cD0yMDIxLTAxLTA2KzAzJTNBMjQlM0E1My40MzQzMjYlMkIwMCUzQTAw", end_date="end_date", @@ -37937,7 +37603,7 @@ client.hris.audit_trail.list(
## Hris AvailableActions -
client.hris.available_actions.retrieve() +
client.hris.available_actions.retrieve() -> AvailableActions
@@ -37965,11 +37631,13 @@ Returns a list of models and actions available for an account. ```python from merge import Merge +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.hris.available_actions.retrieve() ``` @@ -37999,7 +37667,7 @@ client.hris.available_actions.retrieve()
## Hris BankInfo -
client.hris.bank_info.list(...) +
client.hris.bank_info.list(...) -> PaginatedBankInfoList
@@ -38026,41 +37694,32 @@ Returns a list of `BankInfo` objects.
```python -import datetime - from merge import Merge -from merge.resources.hris.resources.bank_info import ( - BankInfoListRequestAccountType, - BankInfoListRequestOrderBy, -) +from merge.environment import MergeEnvironment +import datetime client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.hris.bank_info.list( - account_type=BankInfoListRequestAccountType.CHECKING, + account_type="CHECKING", bank_name="bank_name", - created_after=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), - created_before=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), + created_after=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), + created_before=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), cursor="cD0yMDIxLTAxLTA2KzAzJTNBMjQlM0E1My40MzQzMjYlMkIwMCUzQTAw", employee_id="employee_id", include_deleted_data=True, include_remote_data=True, include_shell_data=True, - modified_after=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), - modified_before=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), - order_by=BankInfoListRequestOrderBy.REMOTE_CREATED_AT_DESCENDING, + modified_after=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), + modified_before=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), + order_by="-remote_created_at", page_size=1, + remote_fields="account_type", remote_id="remote_id", + show_enum_origins="account_type", ) ``` @@ -38098,7 +37757,7 @@ If provided, will only return BankInfo's with this account type. Options: ('SAVI
-**created_after:** `typing.Optional[dt.datetime]` — If provided, will only return objects created after this datetime. +**created_after:** `typing.Optional[datetime.datetime]` — If provided, will only return objects created after this datetime.
@@ -38106,7 +37765,7 @@ If provided, will only return BankInfo's with this account type. Options: ('SAVI
-**created_before:** `typing.Optional[dt.datetime]` — If provided, will only return objects created before this datetime. +**created_before:** `typing.Optional[datetime.datetime]` — If provided, will only return objects created before this datetime.
@@ -38130,11 +37789,7 @@ If provided, will only return BankInfo's with this account type. Options: ('SAVI
-**expand:** `typing.Optional[ - typing.Union[ - typing.Literal["employee"], typing.Sequence[typing.Literal["employee"]] - ] -]` — Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces. +**expand:** `typing.Optional[typing.Union[typing.Literal, typing.Sequence[typing.Literal]]]` — Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces.
@@ -38166,7 +37821,7 @@ If provided, will only return BankInfo's with this account type. Options: ('SAVI
-**modified_after:** `typing.Optional[dt.datetime]` — If provided, only objects synced by Merge after this date time will be returned. +**modified_after:** `typing.Optional[datetime.datetime]` — If provided, only objects synced by Merge after this date time will be returned.
@@ -38174,7 +37829,7 @@ If provided, will only return BankInfo's with this account type. Options: ('SAVI
-**modified_before:** `typing.Optional[dt.datetime]` — If provided, only objects synced by Merge before this date time will be returned. +**modified_before:** `typing.Optional[datetime.datetime]` — If provided, only objects synced by Merge before this date time will be returned.
@@ -38198,7 +37853,7 @@ If provided, will only return BankInfo's with this account type. Options: ('SAVI
-**remote_fields:** `typing.Optional[typing.Literal["account_type"]]` — Deprecated. Use show_enum_origins. +**remote_fields:** `typing.Optional[typing.Literal]` — Deprecated. Use show_enum_origins.
@@ -38214,7 +37869,7 @@ If provided, will only return BankInfo's with this account type. Options: ('SAVI
-**show_enum_origins:** `typing.Optional[typing.Literal["account_type"]]` — A comma separated list of enum field names for which you'd like the original values to be returned, instead of Merge's normalized enum values. [Learn more](https://help.merge.dev/en/articles/8950958-show_enum_origins-query-parameter) +**show_enum_origins:** `typing.Optional[typing.Literal]` — A comma separated list of enum field names for which you'd like the original values to be returned, instead of Merge's normalized enum values. [Learn more](https://help.merge.dev/en/articles/8950958-show_enum_origins-query-parameter)
@@ -38234,7 +37889,7 @@ If provided, will only return BankInfo's with this account type. Options: ('SAVI
-
client.hris.bank_info.retrieve(...) +
client.hris.bank_info.retrieve(...) -> BankInfo
@@ -38262,15 +37917,19 @@ Returns a `BankInfo` object with the given `id`. ```python from merge import Merge +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.hris.bank_info.retrieve( id="id", include_remote_data=True, include_shell_data=True, + remote_fields="account_type", + show_enum_origins="account_type", ) ``` @@ -38295,11 +37954,7 @@ client.hris.bank_info.retrieve(
-**expand:** `typing.Optional[ - typing.Union[ - typing.Literal["employee"], typing.Sequence[typing.Literal["employee"]] - ] -]` — Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces. +**expand:** `typing.Optional[typing.Union[typing.Literal, typing.Sequence[typing.Literal]]]` — Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces.
@@ -38323,7 +37978,7 @@ client.hris.bank_info.retrieve(
-**remote_fields:** `typing.Optional[typing.Literal["account_type"]]` — Deprecated. Use show_enum_origins. +**remote_fields:** `typing.Optional[typing.Literal]` — Deprecated. Use show_enum_origins.
@@ -38331,7 +37986,7 @@ client.hris.bank_info.retrieve(
-**show_enum_origins:** `typing.Optional[typing.Literal["account_type"]]` — A comma separated list of enum field names for which you'd like the original values to be returned, instead of Merge's normalized enum values. [Learn more](https://help.merge.dev/en/articles/8950958-show_enum_origins-query-parameter) +**show_enum_origins:** `typing.Optional[typing.Literal]` — A comma separated list of enum field names for which you'd like the original values to be returned, instead of Merge's normalized enum values. [Learn more](https://help.merge.dev/en/articles/8950958-show_enum_origins-query-parameter)
@@ -38352,7 +38007,7 @@ client.hris.bank_info.retrieve(
## Hris Benefits -
client.hris.benefits.list(...) +
client.hris.benefits.list(...) -> PaginatedBenefitList
@@ -38379,32 +38034,25 @@ Returns a list of `Benefit` objects.
```python -import datetime - from merge import Merge +from merge.environment import MergeEnvironment +import datetime client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.hris.benefits.list( - created_after=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), - created_before=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), + created_after=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), + created_before=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), cursor="cD0yMDIxLTAxLTA2KzAzJTNBMjQlM0E1My40MzQzMjYlMkIwMCUzQTAw", employee_id="employee_id", include_deleted_data=True, include_remote_data=True, include_shell_data=True, - modified_after=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), - modified_before=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), + modified_after=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), + modified_before=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), page_size=1, remote_id="remote_id", ) @@ -38423,7 +38071,7 @@ client.hris.benefits.list(
-**created_after:** `typing.Optional[dt.datetime]` — If provided, will only return objects created after this datetime. +**created_after:** `typing.Optional[datetime.datetime]` — If provided, will only return objects created after this datetime.
@@ -38431,7 +38079,7 @@ client.hris.benefits.list(
-**created_before:** `typing.Optional[dt.datetime]` — If provided, will only return objects created before this datetime. +**created_before:** `typing.Optional[datetime.datetime]` — If provided, will only return objects created before this datetime.
@@ -38455,11 +38103,7 @@ client.hris.benefits.list(
-**expand:** `typing.Optional[ - typing.Union[ - typing.Literal["employee"], typing.Sequence[typing.Literal["employee"]] - ] -]` — Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces. +**expand:** `typing.Optional[typing.Union[typing.Literal, typing.Sequence[typing.Literal]]]` — Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces.
@@ -38491,7 +38135,7 @@ client.hris.benefits.list(
-**modified_after:** `typing.Optional[dt.datetime]` — If provided, only objects synced by Merge after this date time will be returned. +**modified_after:** `typing.Optional[datetime.datetime]` — If provided, only objects synced by Merge after this date time will be returned.
@@ -38499,7 +38143,7 @@ client.hris.benefits.list(
-**modified_before:** `typing.Optional[dt.datetime]` — If provided, only objects synced by Merge before this date time will be returned. +**modified_before:** `typing.Optional[datetime.datetime]` — If provided, only objects synced by Merge before this date time will be returned.
@@ -38535,7 +38179,7 @@ client.hris.benefits.list(
-
client.hris.benefits.retrieve(...) +
client.hris.benefits.retrieve(...) -> Benefit
@@ -38563,11 +38207,13 @@ Returns a `Benefit` object with the given `id`. ```python from merge import Merge +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.hris.benefits.retrieve( id="id", include_remote_data=True, @@ -38596,11 +38242,7 @@ client.hris.benefits.retrieve(
-**expand:** `typing.Optional[ - typing.Union[ - typing.Literal["employee"], typing.Sequence[typing.Literal["employee"]] - ] -]` — Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces. +**expand:** `typing.Optional[typing.Union[typing.Literal, typing.Sequence[typing.Literal]]]` — Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces.
@@ -38637,7 +38279,7 @@ client.hris.benefits.retrieve(
## Hris Companies -
client.hris.companies.list(...) +
client.hris.companies.list(...) -> PaginatedCompanyList
@@ -38664,31 +38306,24 @@ Returns a list of `Company` objects.
```python -import datetime - from merge import Merge +from merge.environment import MergeEnvironment +import datetime client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.hris.companies.list( - created_after=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), - created_before=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), + created_after=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), + created_before=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), cursor="cD0yMDIxLTAxLTA2KzAzJTNBMjQlM0E1My40MzQzMjYlMkIwMCUzQTAw", include_deleted_data=True, include_remote_data=True, include_shell_data=True, - modified_after=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), - modified_before=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), + modified_after=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), + modified_before=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), page_size=1, remote_id="remote_id", ) @@ -38707,7 +38342,7 @@ client.hris.companies.list(
-**created_after:** `typing.Optional[dt.datetime]` — If provided, will only return objects created after this datetime. +**created_after:** `typing.Optional[datetime.datetime]` — If provided, will only return objects created after this datetime.
@@ -38715,7 +38350,7 @@ client.hris.companies.list(
-**created_before:** `typing.Optional[dt.datetime]` — If provided, will only return objects created before this datetime. +**created_before:** `typing.Optional[datetime.datetime]` — If provided, will only return objects created before this datetime.
@@ -38755,7 +38390,7 @@ client.hris.companies.list(
-**modified_after:** `typing.Optional[dt.datetime]` — If provided, only objects synced by Merge after this date time will be returned. +**modified_after:** `typing.Optional[datetime.datetime]` — If provided, only objects synced by Merge after this date time will be returned.
@@ -38763,7 +38398,7 @@ client.hris.companies.list(
-**modified_before:** `typing.Optional[dt.datetime]` — If provided, only objects synced by Merge before this date time will be returned. +**modified_before:** `typing.Optional[datetime.datetime]` — If provided, only objects synced by Merge before this date time will be returned.
@@ -38799,7 +38434,7 @@ client.hris.companies.list(
-
client.hris.companies.retrieve(...) +
client.hris.companies.retrieve(...) -> Company
@@ -38827,11 +38462,13 @@ Returns a `Company` object with the given `id`. ```python from merge import Merge +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.hris.companies.retrieve( id="id", include_remote_data=True, @@ -38889,7 +38526,7 @@ client.hris.companies.retrieve(
## Hris Scopes -
client.hris.scopes.default_scopes_retrieve() +
client.hris.scopes.default_scopes_retrieve() -> CommonModelScopeApi
@@ -38917,11 +38554,13 @@ Get the default permissions for Merge Common Models and fields across all Linked ```python from merge import Merge +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.hris.scopes.default_scopes_retrieve() ``` @@ -38950,7 +38589,7 @@ client.hris.scopes.default_scopes_retrieve()
-
client.hris.scopes.linked_account_scopes_retrieve() +
client.hris.scopes.linked_account_scopes_retrieve() -> CommonModelScopeApi
@@ -38978,11 +38617,13 @@ Get all available permissions for Merge Common Models and fields for a single Li ```python from merge import Merge +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.hris.scopes.linked_account_scopes_retrieve() ``` @@ -39011,7 +38652,7 @@ client.hris.scopes.linked_account_scopes_retrieve()
-
client.hris.scopes.linked_account_scopes_create(...) +
client.hris.scopes.linked_account_scopes_create(...) -> CommonModelScopeApi
@@ -39039,16 +38680,14 @@ Update permissions for any Common Model or field for a single Linked Account. An ```python from merge import Merge -from merge.resources.hris import ( - FieldPermissionDeserializerRequest, - IndividualCommonModelScopeDeserializerRequest, - ModelPermissionDeserializerRequest, -) +from merge.environment import MergeEnvironment +from merge.hris import IndividualCommonModelScopeDeserializerRequest, ModelPermissionDeserializerRequest, FieldPermissionDeserializerRequest client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.hris.scopes.linked_account_scopes_create( common_models=[ IndividualCommonModelScopeDeserializerRequest( @@ -39059,11 +38698,16 @@ client.hris.scopes.linked_account_scopes_create( ), "WRITE": ModelPermissionDeserializerRequest( is_enabled=False, - ), + ) }, field_permissions=FieldPermissionDeserializerRequest( - enabled_fields=["avatar", "home_location"], - disabled_fields=["work_location"], + enabled_fields=[ + "avatar", + "home_location" + ], + disabled_fields=[ + "work_location" + ], ), ), IndividualCommonModelScopeDeserializerRequest( @@ -39073,7 +38717,7 @@ client.hris.scopes.linked_account_scopes_create( is_enabled=False, ) }, - ), + ) ], ) @@ -39091,7 +38735,7 @@ client.hris.scopes.linked_account_scopes_create(
-**common_models:** `typing.Sequence[IndividualCommonModelScopeDeserializerRequest]` — The common models you want to update the scopes for +**common_models:** `typing.List[IndividualCommonModelScopeDeserializerRequest]` — The common models you want to update the scopes for
@@ -39112,7 +38756,7 @@ client.hris.scopes.linked_account_scopes_create(
## Hris DeleteAccount -
client.hris.delete_account.delete() +
client.hris.delete_account.delete()
@@ -39140,11 +38784,13 @@ Delete a linked account. ```python from merge import Merge +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.hris.delete_account.delete() ``` @@ -39174,7 +38820,7 @@ client.hris.delete_account.delete()
## Hris Dependents -
client.hris.dependents.list(...) +
client.hris.dependents.list(...) -> PaginatedDependentList
@@ -39201,33 +38847,26 @@ Returns a list of `Dependent` objects.
```python -import datetime - from merge import Merge +from merge.environment import MergeEnvironment +import datetime client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.hris.dependents.list( - created_after=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), - created_before=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), + created_after=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), + created_before=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), cursor="cD0yMDIxLTAxLTA2KzAzJTNBMjQlM0E1My40MzQzMjYlMkIwMCUzQTAw", employee_id="employee_id", include_deleted_data=True, include_remote_data=True, include_sensitive_fields=True, include_shell_data=True, - modified_after=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), - modified_before=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), + modified_after=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), + modified_before=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), page_size=1, remote_id="remote_id", ) @@ -39246,7 +38885,7 @@ client.hris.dependents.list(
-**created_after:** `typing.Optional[dt.datetime]` — If provided, will only return objects created after this datetime. +**created_after:** `typing.Optional[datetime.datetime]` — If provided, will only return objects created after this datetime.
@@ -39254,7 +38893,7 @@ client.hris.dependents.list(
-**created_before:** `typing.Optional[dt.datetime]` — If provided, will only return objects created before this datetime. +**created_before:** `typing.Optional[datetime.datetime]` — If provided, will only return objects created before this datetime.
@@ -39310,7 +38949,7 @@ client.hris.dependents.list(
-**modified_after:** `typing.Optional[dt.datetime]` — If provided, only objects synced by Merge after this date time will be returned. +**modified_after:** `typing.Optional[datetime.datetime]` — If provided, only objects synced by Merge after this date time will be returned.
@@ -39318,7 +38957,7 @@ client.hris.dependents.list(
-**modified_before:** `typing.Optional[dt.datetime]` — If provided, only objects synced by Merge before this date time will be returned. +**modified_before:** `typing.Optional[datetime.datetime]` — If provided, only objects synced by Merge before this date time will be returned.
@@ -39354,7 +38993,7 @@ client.hris.dependents.list(
-
client.hris.dependents.retrieve(...) +
client.hris.dependents.retrieve(...) -> Dependent
@@ -39382,11 +39021,13 @@ Returns a `Dependent` object with the given `id`. ```python from merge import Merge +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.hris.dependents.retrieve( id="id", include_remote_data=True, @@ -39453,7 +39094,7 @@ client.hris.dependents.retrieve(
## Hris EmployeePayrollRuns -
client.hris.employee_payroll_runs.list(...) +
client.hris.employee_payroll_runs.list(...) -> PaginatedEmployeePayrollRunList
@@ -39480,47 +39121,32 @@ Returns a list of `EmployeePayrollRun` objects.
```python -import datetime - from merge import Merge +from merge.environment import MergeEnvironment +import datetime client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.hris.employee_payroll_runs.list( - created_after=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), - created_before=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), + created_after=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), + created_before=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), cursor="cD0yMDIxLTAxLTA2KzAzJTNBMjQlM0E1My40MzQzMjYlMkIwMCUzQTAw", employee_id="employee_id", - ended_after=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), - ended_before=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), + ended_after=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), + ended_before=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), include_deleted_data=True, include_remote_data=True, include_shell_data=True, - modified_after=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), - modified_before=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), + modified_after=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), + modified_before=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), page_size=1, payroll_run_id="payroll_run_id", remote_id="remote_id", - started_after=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), - started_before=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), + started_after=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), + started_before=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), ) ``` @@ -39537,7 +39163,7 @@ client.hris.employee_payroll_runs.list(
-**created_after:** `typing.Optional[dt.datetime]` — If provided, will only return objects created after this datetime. +**created_after:** `typing.Optional[datetime.datetime]` — If provided, will only return objects created after this datetime.
@@ -39545,7 +39171,7 @@ client.hris.employee_payroll_runs.list(
-**created_before:** `typing.Optional[dt.datetime]` — If provided, will only return objects created before this datetime. +**created_before:** `typing.Optional[datetime.datetime]` — If provided, will only return objects created before this datetime.
@@ -39569,7 +39195,7 @@ client.hris.employee_payroll_runs.list(
-**ended_after:** `typing.Optional[dt.datetime]` — If provided, will only return employee payroll runs ended after this datetime. +**ended_after:** `typing.Optional[datetime.datetime]` — If provided, will only return employee payroll runs ended after this datetime.
@@ -39577,7 +39203,7 @@ client.hris.employee_payroll_runs.list(
-**ended_before:** `typing.Optional[dt.datetime]` — If provided, will only return employee payroll runs ended before this datetime. +**ended_before:** `typing.Optional[datetime.datetime]` — If provided, will only return employee payroll runs ended before this datetime.
@@ -39585,12 +39211,7 @@ client.hris.employee_payroll_runs.list(
-**expand:** `typing.Optional[ - typing.Union[ - EmployeePayrollRunsListRequestExpandItem, - typing.Sequence[EmployeePayrollRunsListRequestExpandItem], - ] -]` — Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces. +**expand:** `typing.Optional[typing.Union[EmployeePayrollRunsListRequestExpandItem, typing.Sequence[EmployeePayrollRunsListRequestExpandItem]]]` — Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces.
@@ -39622,7 +39243,7 @@ client.hris.employee_payroll_runs.list(
-**modified_after:** `typing.Optional[dt.datetime]` — If provided, only objects synced by Merge after this date time will be returned. +**modified_after:** `typing.Optional[datetime.datetime]` — If provided, only objects synced by Merge after this date time will be returned.
@@ -39630,7 +39251,7 @@ client.hris.employee_payroll_runs.list(
-**modified_before:** `typing.Optional[dt.datetime]` — If provided, only objects synced by Merge before this date time will be returned. +**modified_before:** `typing.Optional[datetime.datetime]` — If provided, only objects synced by Merge before this date time will be returned.
@@ -39662,7 +39283,7 @@ client.hris.employee_payroll_runs.list(
-**started_after:** `typing.Optional[dt.datetime]` — If provided, will only return employee payroll runs started after this datetime. +**started_after:** `typing.Optional[datetime.datetime]` — If provided, will only return employee payroll runs started after this datetime.
@@ -39670,7 +39291,7 @@ client.hris.employee_payroll_runs.list(
-**started_before:** `typing.Optional[dt.datetime]` — If provided, will only return employee payroll runs started before this datetime. +**started_before:** `typing.Optional[datetime.datetime]` — If provided, will only return employee payroll runs started before this datetime.
@@ -39690,7 +39311,7 @@ client.hris.employee_payroll_runs.list(
-
client.hris.employee_payroll_runs.retrieve(...) +
client.hris.employee_payroll_runs.retrieve(...) -> EmployeePayrollRun
@@ -39718,11 +39339,13 @@ Returns an `EmployeePayrollRun` object with the given `id`. ```python from merge import Merge +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.hris.employee_payroll_runs.retrieve( id="id", include_remote_data=True, @@ -39751,12 +39374,7 @@ client.hris.employee_payroll_runs.retrieve(
-**expand:** `typing.Optional[ - typing.Union[ - EmployeePayrollRunsRetrieveRequestExpandItem, - typing.Sequence[EmployeePayrollRunsRetrieveRequestExpandItem], - ] -]` — Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces. +**expand:** `typing.Optional[typing.Union[EmployeePayrollRunsRetrieveRequestExpandItem, typing.Sequence[EmployeePayrollRunsRetrieveRequestExpandItem]]]` — Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces.
@@ -39793,7 +39411,7 @@ client.hris.employee_payroll_runs.retrieve(
## Hris Employees -
client.hris.employees.list(...) +
client.hris.employees.list(...) -> PaginatedEmployeeList
@@ -39820,31 +39438,23 @@ Returns a list of `Employee` objects.
```python -import datetime - from merge import Merge -from merge.resources.hris.resources.employees import ( - EmployeesListRequestEmploymentStatus, - EmployeesListRequestRemoteFields, - EmployeesListRequestShowEnumOrigins, -) +from merge.environment import MergeEnvironment +import datetime client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.hris.employees.list( company_id="company_id", - created_after=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), - created_before=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), + created_after=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), + created_before=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), cursor="cD0yMDIxLTAxLTA2KzAzJTNBMjQlM0E1My40MzQzMjYlMkIwMCUzQTAw", display_full_name="display_full_name", employee_number="employee_number", - employment_status=EmployeesListRequestEmploymentStatus.ACTIVE, + employment_status="ACTIVE", employment_type="employment_type", first_name="first_name", groups="groups", @@ -39856,31 +39466,19 @@ client.hris.employees.list( job_title="job_title", last_name="last_name", manager_id="manager_id", - modified_after=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), - modified_before=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), + modified_after=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), + modified_before=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), page_size=1, pay_group_id="pay_group_id", personal_email="personal_email", - remote_fields=EmployeesListRequestRemoteFields.EMPLOYMENT_STATUS, + remote_fields="employment_status", remote_id="remote_id", - show_enum_origins=EmployeesListRequestShowEnumOrigins.EMPLOYMENT_STATUS, - started_after=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), - started_before=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), + show_enum_origins="employment_status", + started_after=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), + started_before=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), team_id="team_id", - terminated_after=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), - terminated_before=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), + terminated_after=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), + terminated_before=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), work_email="work_email", work_location_id="work_location_id", ) @@ -39907,7 +39505,7 @@ client.hris.employees.list(
-**created_after:** `typing.Optional[dt.datetime]` — If provided, will only return objects created after this datetime. +**created_after:** `typing.Optional[datetime.datetime]` — If provided, will only return objects created after this datetime.
@@ -39915,7 +39513,7 @@ client.hris.employees.list(
-**created_before:** `typing.Optional[dt.datetime]` — If provided, will only return objects created before this datetime. +**created_before:** `typing.Optional[datetime.datetime]` — If provided, will only return objects created before this datetime.
@@ -39969,12 +39567,7 @@ If provided, will only return employees with this employment status.
-**expand:** `typing.Optional[ - typing.Union[ - EmployeesListRequestExpandItem, - typing.Sequence[EmployeesListRequestExpandItem], - ] -]` — Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces. +**expand:** `typing.Optional[typing.Union[EmployeesListRequestExpandItem, typing.Sequence[EmployeesListRequestExpandItem]]]` — Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces.
@@ -40062,7 +39655,7 @@ If provided, will only return employees with this employment status.
-**modified_after:** `typing.Optional[dt.datetime]` — If provided, only objects synced by Merge after this date time will be returned. +**modified_after:** `typing.Optional[datetime.datetime]` — If provided, only objects synced by Merge after this date time will be returned.
@@ -40070,7 +39663,7 @@ If provided, will only return employees with this employment status.
-**modified_before:** `typing.Optional[dt.datetime]` — If provided, only objects synced by Merge before this date time will be returned. +**modified_before:** `typing.Optional[datetime.datetime]` — If provided, only objects synced by Merge before this date time will be returned.
@@ -40126,7 +39719,7 @@ If provided, will only return employees with this employment status.
-**started_after:** `typing.Optional[dt.datetime]` — If provided, will only return employees that started after this datetime. +**started_after:** `typing.Optional[datetime.datetime]` — If provided, will only return employees that started after this datetime.
@@ -40134,7 +39727,7 @@ If provided, will only return employees with this employment status.
-**started_before:** `typing.Optional[dt.datetime]` — If provided, will only return employees that started before this datetime. +**started_before:** `typing.Optional[datetime.datetime]` — If provided, will only return employees that started before this datetime.
@@ -40150,7 +39743,7 @@ If provided, will only return employees with this employment status.
-**terminated_after:** `typing.Optional[dt.datetime]` — If provided, will only return employees that were terminated after this datetime. +**terminated_after:** `typing.Optional[datetime.datetime]` — If provided, will only return employees that were terminated after this datetime.
@@ -40158,7 +39751,7 @@ If provided, will only return employees with this employment status.
-**terminated_before:** `typing.Optional[dt.datetime]` — If provided, will only return employees that were terminated before this datetime. +**terminated_before:** `typing.Optional[datetime.datetime]` — If provided, will only return employees that were terminated before this datetime.
@@ -40194,7 +39787,7 @@ If provided, will only return employees with this employment status.
-
client.hris.employees.create(...) +
client.hris.employees.create(...) -> EmployeeResponse
@@ -40222,12 +39815,14 @@ Creates an `Employee` object with the given values. ```python from merge import Merge -from merge.resources.hris import EmployeeRequest +from merge.environment import MergeEnvironment +from merge.hris import EmployeeRequest client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.hris.employees.create( is_debug_mode=True, run_async=True, @@ -40284,7 +39879,7 @@ client.hris.employees.create(
-
client.hris.employees.retrieve(...) +
client.hris.employees.retrieve(...) -> Employee
@@ -40312,22 +39907,20 @@ Returns an `Employee` object with the given `id`. ```python from merge import Merge -from merge.resources.hris.resources.employees import ( - EmployeesRetrieveRequestRemoteFields, - EmployeesRetrieveRequestShowEnumOrigins, -) +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.hris.employees.retrieve( id="id", include_remote_data=True, include_sensitive_fields=True, include_shell_data=True, - remote_fields=EmployeesRetrieveRequestRemoteFields.EMPLOYMENT_STATUS, - show_enum_origins=EmployeesRetrieveRequestShowEnumOrigins.EMPLOYMENT_STATUS, + remote_fields="employment_status", + show_enum_origins="employment_status", ) ``` @@ -40352,12 +39945,7 @@ client.hris.employees.retrieve(
-**expand:** `typing.Optional[ - typing.Union[ - EmployeesRetrieveRequestExpandItem, - typing.Sequence[EmployeesRetrieveRequestExpandItem], - ] -]` — Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces. +**expand:** `typing.Optional[typing.Union[EmployeesRetrieveRequestExpandItem, typing.Sequence[EmployeesRetrieveRequestExpandItem]]]` — Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces.
@@ -40417,7 +40005,7 @@ client.hris.employees.retrieve(
-
client.hris.employees.ignore_create(...) +
client.hris.employees.ignore_create(...)
@@ -40445,16 +40033,18 @@ Ignores a specific row based on the `model_id` in the url. These records will ha ```python from merge import Merge -from merge.resources.hris import IgnoreCommonModelRequest, ReasonEnum +from merge.environment import MergeEnvironment +from merge.hris import IgnoreCommonModelRequest client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.hris.employees.ignore_create( model_id="model_id", request=IgnoreCommonModelRequest( - reason=ReasonEnum.GENERAL_CUSTOMER_REQUEST, + reason="GENERAL_CUSTOMER_REQUEST", ), ) @@ -40500,7 +40090,7 @@ client.hris.employees.ignore_create(
-
client.hris.employees.meta_post_retrieve() +
client.hris.employees.meta_post_retrieve() -> MetaResponse
@@ -40528,11 +40118,13 @@ Returns metadata for `Employee` POSTs. ```python from merge import Merge +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.hris.employees.meta_post_retrieve() ``` @@ -40562,7 +40154,7 @@ client.hris.employees.meta_post_retrieve()
## Hris EmployerBenefits -
client.hris.employer_benefits.list(...) +
client.hris.employer_benefits.list(...) -> PaginatedEmployerBenefitList
@@ -40589,31 +40181,24 @@ Returns a list of `EmployerBenefit` objects.
```python -import datetime - from merge import Merge +from merge.environment import MergeEnvironment +import datetime client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.hris.employer_benefits.list( - created_after=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), - created_before=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), + created_after=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), + created_before=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), cursor="cD0yMDIxLTAxLTA2KzAzJTNBMjQlM0E1My40MzQzMjYlMkIwMCUzQTAw", include_deleted_data=True, include_remote_data=True, include_shell_data=True, - modified_after=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), - modified_before=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), + modified_after=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), + modified_before=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), page_size=1, remote_id="remote_id", ) @@ -40632,7 +40217,7 @@ client.hris.employer_benefits.list(
-**created_after:** `typing.Optional[dt.datetime]` — If provided, will only return objects created after this datetime. +**created_after:** `typing.Optional[datetime.datetime]` — If provided, will only return objects created after this datetime.
@@ -40640,7 +40225,7 @@ client.hris.employer_benefits.list(
-**created_before:** `typing.Optional[dt.datetime]` — If provided, will only return objects created before this datetime. +**created_before:** `typing.Optional[datetime.datetime]` — If provided, will only return objects created before this datetime.
@@ -40680,7 +40265,7 @@ client.hris.employer_benefits.list(
-**modified_after:** `typing.Optional[dt.datetime]` — If provided, only objects synced by Merge after this date time will be returned. +**modified_after:** `typing.Optional[datetime.datetime]` — If provided, only objects synced by Merge after this date time will be returned.
@@ -40688,7 +40273,7 @@ client.hris.employer_benefits.list(
-**modified_before:** `typing.Optional[dt.datetime]` — If provided, only objects synced by Merge before this date time will be returned. +**modified_before:** `typing.Optional[datetime.datetime]` — If provided, only objects synced by Merge before this date time will be returned.
@@ -40724,7 +40309,7 @@ client.hris.employer_benefits.list(
-
client.hris.employer_benefits.retrieve(...) +
client.hris.employer_benefits.retrieve(...) -> EmployerBenefit
@@ -40752,11 +40337,13 @@ Returns an `EmployerBenefit` object with the given `id`. ```python from merge import Merge +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.hris.employer_benefits.retrieve( id="id", include_remote_data=True, @@ -40814,7 +40401,7 @@ client.hris.employer_benefits.retrieve(
## Hris Employments -
client.hris.employments.list(...) +
client.hris.employments.list(...) -> PaginatedEmploymentList
@@ -40841,42 +40428,30 @@ Returns a list of `Employment` objects.
```python -import datetime - from merge import Merge -from merge.resources.hris.resources.employments import ( - EmploymentsListRequestOrderBy, - EmploymentsListRequestRemoteFields, - EmploymentsListRequestShowEnumOrigins, -) +from merge.environment import MergeEnvironment +import datetime client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.hris.employments.list( - created_after=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), - created_before=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), + created_after=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), + created_before=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), cursor="cD0yMDIxLTAxLTA2KzAzJTNBMjQlM0E1My40MzQzMjYlMkIwMCUzQTAw", employee_id="employee_id", include_deleted_data=True, include_remote_data=True, include_shell_data=True, - modified_after=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), - modified_before=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), - order_by=EmploymentsListRequestOrderBy.EFFECTIVE_DATE_DESCENDING, + modified_after=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), + modified_before=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), + order_by="-effective_date", page_size=1, - remote_fields=EmploymentsListRequestRemoteFields.EMPLOYMENT_TYPE, + remote_fields="employment_type", remote_id="remote_id", - show_enum_origins=EmploymentsListRequestShowEnumOrigins.EMPLOYMENT_TYPE, + show_enum_origins="employment_type", ) ``` @@ -40893,7 +40468,7 @@ client.hris.employments.list(
-**created_after:** `typing.Optional[dt.datetime]` — If provided, will only return objects created after this datetime. +**created_after:** `typing.Optional[datetime.datetime]` — If provided, will only return objects created after this datetime.
@@ -40901,7 +40476,7 @@ client.hris.employments.list(
-**created_before:** `typing.Optional[dt.datetime]` — If provided, will only return objects created before this datetime. +**created_before:** `typing.Optional[datetime.datetime]` — If provided, will only return objects created before this datetime.
@@ -40925,12 +40500,7 @@ client.hris.employments.list(
-**expand:** `typing.Optional[ - typing.Union[ - EmploymentsListRequestExpandItem, - typing.Sequence[EmploymentsListRequestExpandItem], - ] -]` — Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces. +**expand:** `typing.Optional[typing.Union[EmploymentsListRequestExpandItem, typing.Sequence[EmploymentsListRequestExpandItem]]]` — Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces.
@@ -40962,7 +40532,7 @@ client.hris.employments.list(
-**modified_after:** `typing.Optional[dt.datetime]` — If provided, only objects synced by Merge after this date time will be returned. +**modified_after:** `typing.Optional[datetime.datetime]` — If provided, only objects synced by Merge after this date time will be returned.
@@ -40970,7 +40540,7 @@ client.hris.employments.list(
-**modified_before:** `typing.Optional[dt.datetime]` — If provided, only objects synced by Merge before this date time will be returned. +**modified_before:** `typing.Optional[datetime.datetime]` — If provided, only objects synced by Merge before this date time will be returned.
@@ -41030,7 +40600,7 @@ client.hris.employments.list(
-
client.hris.employments.retrieve(...) +
client.hris.employments.retrieve(...) -> Employment
@@ -41058,21 +40628,19 @@ Returns an `Employment` object with the given `id`. ```python from merge import Merge -from merge.resources.hris.resources.employments import ( - EmploymentsRetrieveRequestRemoteFields, - EmploymentsRetrieveRequestShowEnumOrigins, -) +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.hris.employments.retrieve( id="id", include_remote_data=True, include_shell_data=True, - remote_fields=EmploymentsRetrieveRequestRemoteFields.EMPLOYMENT_TYPE, - show_enum_origins=EmploymentsRetrieveRequestShowEnumOrigins.EMPLOYMENT_TYPE, + remote_fields="employment_type", + show_enum_origins="employment_type", ) ``` @@ -41097,12 +40665,7 @@ client.hris.employments.retrieve(
-**expand:** `typing.Optional[ - typing.Union[ - EmploymentsRetrieveRequestExpandItem, - typing.Sequence[EmploymentsRetrieveRequestExpandItem], - ] -]` — Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces. +**expand:** `typing.Optional[typing.Union[EmploymentsRetrieveRequestExpandItem, typing.Sequence[EmploymentsRetrieveRequestExpandItem]]]` — Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces.
@@ -41155,7 +40718,7 @@ client.hris.employments.retrieve(
## Hris FieldMapping -
client.hris.field_mapping.field_mappings_retrieve(...) +
client.hris.field_mapping.field_mappings_retrieve(...) -> FieldMappingApiInstanceResponse
@@ -41183,11 +40746,13 @@ Get all Field Mappings for this Linked Account. Field Mappings are mappings betw ```python from merge import Merge +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.hris.field_mapping.field_mappings_retrieve( exclude_remote_field_metadata=True, ) @@ -41226,7 +40791,7 @@ client.hris.field_mapping.field_mappings_retrieve(
-
client.hris.field_mapping.field_mappings_create(...) +
client.hris.field_mapping.field_mappings_create(...) -> FieldMappingInstanceResponse
@@ -41254,16 +40819,20 @@ Create new Field Mappings that will be available after the next scheduled sync. ```python from merge import Merge +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.hris.field_mapping.field_mappings_create( exclude_remote_field_metadata=True, target_field_name="example_target_field_name", target_field_description="this is a example description of the target field", - remote_field_traversal_path=["example_remote_field"], + remote_field_traversal_path=[ + "example_remote_field" + ], remote_method="GET", remote_url_path="/example-url-path", common_model_name="ExampleCommonModel", @@ -41299,7 +40868,7 @@ client.hris.field_mapping.field_mappings_create(
-**remote_field_traversal_path:** `typing.Sequence[typing.Optional[typing.Any]]` — The field traversal path of the remote field listed when you hit the GET /remote-fields endpoint. +**remote_field_traversal_path:** `typing.List[typing.Any]` — The field traversal path of the remote field listed when you hit the GET /remote-fields endpoint.
@@ -41359,7 +40928,7 @@ client.hris.field_mapping.field_mappings_create(
-
client.hris.field_mapping.field_mappings_destroy(...) +
client.hris.field_mapping.field_mappings_destroy(...) -> FieldMappingInstanceResponse
@@ -41387,11 +40956,13 @@ Deletes Field Mappings for a Linked Account. All data related to this Field Mapp ```python from merge import Merge +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.hris.field_mapping.field_mappings_destroy( field_mapping_id="field_mapping_id", ) @@ -41430,7 +41001,7 @@ client.hris.field_mapping.field_mappings_destroy(
-
client.hris.field_mapping.field_mappings_partial_update(...) +
client.hris.field_mapping.field_mappings_partial_update(...) -> FieldMappingInstanceResponse
@@ -41458,11 +41029,13 @@ Create or update existing Field Mappings for a Linked Account. Changes will be r ```python from merge import Merge +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.hris.field_mapping.field_mappings_partial_update( field_mapping_id="field_mapping_id", remote_data_iteration_count=1, @@ -41498,7 +41071,7 @@ client.hris.field_mapping.field_mappings_partial_update(
-**remote_field_traversal_path:** `typing.Optional[typing.Sequence[typing.Optional[typing.Any]]]` — The field traversal path of the remote field listed when you hit the GET /remote-fields endpoint. +**remote_field_traversal_path:** `typing.Optional[typing.List[typing.Any]]` — The field traversal path of the remote field listed when you hit the GET /remote-fields endpoint.
@@ -41542,7 +41115,7 @@ client.hris.field_mapping.field_mappings_partial_update(
-
client.hris.field_mapping.remote_fields_retrieve(...) +
client.hris.field_mapping.remote_fields_retrieve(...) -> RemoteFieldApiResponse
@@ -41570,11 +41143,13 @@ Get all remote fields for a Linked Account. Remote fields are third-party fields ```python from merge import Merge +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.hris.field_mapping.remote_fields_retrieve( common_models="common_models", include_example_values="include_example_values", @@ -41622,7 +41197,7 @@ client.hris.field_mapping.remote_fields_retrieve(
-
client.hris.field_mapping.target_fields_retrieve() +
client.hris.field_mapping.target_fields_retrieve() -> ExternalTargetFieldApiResponse
@@ -41650,11 +41225,13 @@ Get all organization-wide Target Fields, this will not include any Linked Accoun ```python from merge import Merge +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.hris.field_mapping.target_fields_retrieve() ``` @@ -41684,7 +41261,7 @@ client.hris.field_mapping.target_fields_retrieve()
## Hris GenerateKey -
client.hris.generate_key.create(...) +
client.hris.generate_key.create(...) -> RemoteKey
@@ -41712,11 +41289,13 @@ Create a remote key. ```python from merge import Merge +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.hris.generate_key.create( name="Remote Deployment Key 1", ) @@ -41756,7 +41335,7 @@ client.hris.generate_key.create(
## Hris Groups -
client.hris.groups.list(...) +
client.hris.groups.list(...) -> PaginatedGroupList
@@ -41783,35 +41362,30 @@ Returns a list of `Group` objects.
```python -import datetime - from merge import Merge +from merge.environment import MergeEnvironment +import datetime client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.hris.groups.list( - created_after=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), - created_before=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), + created_after=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), + created_before=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), cursor="cD0yMDIxLTAxLTA2KzAzJTNBMjQlM0E1My40MzQzMjYlMkIwMCUzQTAw", include_deleted_data=True, include_remote_data=True, include_shell_data=True, is_commonly_used_as_team="is_commonly_used_as_team", - modified_after=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), - modified_before=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), + modified_after=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), + modified_before=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), names="names", page_size=1, + remote_fields="type", remote_id="remote_id", + show_enum_origins="type", types="types", ) @@ -41829,7 +41403,7 @@ client.hris.groups.list(
-**created_after:** `typing.Optional[dt.datetime]` — If provided, will only return objects created after this datetime. +**created_after:** `typing.Optional[datetime.datetime]` — If provided, will only return objects created after this datetime.
@@ -41837,7 +41411,7 @@ client.hris.groups.list(
-**created_before:** `typing.Optional[dt.datetime]` — If provided, will only return objects created before this datetime. +**created_before:** `typing.Optional[datetime.datetime]` — If provided, will only return objects created before this datetime.
@@ -41885,7 +41459,7 @@ client.hris.groups.list(
-**modified_after:** `typing.Optional[dt.datetime]` — If provided, only objects synced by Merge after this date time will be returned. +**modified_after:** `typing.Optional[datetime.datetime]` — If provided, only objects synced by Merge after this date time will be returned.
@@ -41893,7 +41467,7 @@ client.hris.groups.list(
-**modified_before:** `typing.Optional[dt.datetime]` — If provided, only objects synced by Merge before this date time will be returned. +**modified_before:** `typing.Optional[datetime.datetime]` — If provided, only objects synced by Merge before this date time will be returned.
@@ -41917,7 +41491,7 @@ client.hris.groups.list(
-**remote_fields:** `typing.Optional[typing.Literal["type"]]` — Deprecated. Use show_enum_origins. +**remote_fields:** `typing.Optional[typing.Literal]` — Deprecated. Use show_enum_origins.
@@ -41933,7 +41507,7 @@ client.hris.groups.list(
-**show_enum_origins:** `typing.Optional[typing.Literal["type"]]` — A comma separated list of enum field names for which you'd like the original values to be returned, instead of Merge's normalized enum values. [Learn more](https://help.merge.dev/en/articles/8950958-show_enum_origins-query-parameter) +**show_enum_origins:** `typing.Optional[typing.Literal]` — A comma separated list of enum field names for which you'd like the original values to be returned, instead of Merge's normalized enum values. [Learn more](https://help.merge.dev/en/articles/8950958-show_enum_origins-query-parameter)
@@ -41961,7 +41535,7 @@ client.hris.groups.list(
-
client.hris.groups.retrieve(...) +
client.hris.groups.retrieve(...) -> Group
@@ -41989,15 +41563,19 @@ Returns a `Group` object with the given `id`. ```python from merge import Merge +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.hris.groups.retrieve( id="id", include_remote_data=True, include_shell_data=True, + remote_fields="type", + show_enum_origins="type", ) ``` @@ -42038,7 +41616,7 @@ client.hris.groups.retrieve(
-**remote_fields:** `typing.Optional[typing.Literal["type"]]` — Deprecated. Use show_enum_origins. +**remote_fields:** `typing.Optional[typing.Literal]` — Deprecated. Use show_enum_origins.
@@ -42046,7 +41624,7 @@ client.hris.groups.retrieve(
-**show_enum_origins:** `typing.Optional[typing.Literal["type"]]` — A comma separated list of enum field names for which you'd like the original values to be returned, instead of Merge's normalized enum values. [Learn more](https://help.merge.dev/en/articles/8950958-show_enum_origins-query-parameter) +**show_enum_origins:** `typing.Optional[typing.Literal]` — A comma separated list of enum field names for which you'd like the original values to be returned, instead of Merge's normalized enum values. [Learn more](https://help.merge.dev/en/articles/8950958-show_enum_origins-query-parameter)
@@ -42066,7 +41644,7 @@ client.hris.groups.retrieve(
-
client.hris.groups.types_list(...) +
client.hris.groups.types_list(...) -> GroupsTypesListResponse
@@ -42094,11 +41672,13 @@ Returns a list of distinct group type values from the Groups common model. ```python from merge import Merge +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.hris.groups.types_list( include_deleted_data=True, show_enum_origins="show_enum_origins", @@ -42147,7 +41727,7 @@ client.hris.groups.types_list(
## Hris Issues -
client.hris.issues.list(...) +
client.hris.issues.list(...) -> PaginatedIssueList
@@ -42174,38 +41754,30 @@ Gets all issues for Organization.
```python -import datetime - from merge import Merge -from merge.resources.hris.resources.issues import IssuesListRequestStatus +from merge.environment import MergeEnvironment +import datetime client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.hris.issues.list( account_token="account_token", cursor="cD0yMDIxLTAxLTA2KzAzJTNBMjQlM0E1My40MzQzMjYlMkIwMCUzQTAw", end_date="end_date", end_user_organization_name="end_user_organization_name", - first_incident_time_after=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), - first_incident_time_before=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), + first_incident_time_after=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), + first_incident_time_before=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), include_muted="include_muted", integration_name="integration_name", - last_incident_time_after=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), - last_incident_time_before=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), + last_incident_time_after=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), + last_incident_time_before=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), linked_account_id="linked_account_id", page_size=1, start_date="start_date", - status=IssuesListRequestStatus.ONGOING, + status="ONGOING", ) ``` @@ -42254,7 +41826,7 @@ client.hris.issues.list(
-**first_incident_time_after:** `typing.Optional[dt.datetime]` — If provided, will only return issues whose first incident time was after this datetime. +**first_incident_time_after:** `typing.Optional[datetime.datetime]` — If provided, will only return issues whose first incident time was after this datetime.
@@ -42262,7 +41834,7 @@ client.hris.issues.list(
-**first_incident_time_before:** `typing.Optional[dt.datetime]` — If provided, will only return issues whose first incident time was before this datetime. +**first_incident_time_before:** `typing.Optional[datetime.datetime]` — If provided, will only return issues whose first incident time was before this datetime.
@@ -42286,7 +41858,7 @@ client.hris.issues.list(
-**last_incident_time_after:** `typing.Optional[dt.datetime]` — If provided, will only return issues whose last incident time was after this datetime. +**last_incident_time_after:** `typing.Optional[datetime.datetime]` — If provided, will only return issues whose last incident time was after this datetime.
@@ -42294,7 +41866,7 @@ client.hris.issues.list(
-**last_incident_time_before:** `typing.Optional[dt.datetime]` — If provided, will only return issues whose last incident time was before this datetime. +**last_incident_time_before:** `typing.Optional[datetime.datetime]` — If provided, will only return issues whose last incident time was before this datetime.
@@ -42351,7 +41923,7 @@ Status of the issue. Options: ('ONGOING', 'RESOLVED')
-
client.hris.issues.retrieve(...) +
client.hris.issues.retrieve(...) -> Issue
@@ -42379,11 +41951,13 @@ Get a specific issue. ```python from merge import Merge +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.hris.issues.retrieve( id="id", ) @@ -42423,7 +41997,7 @@ client.hris.issues.retrieve(
## Hris LinkToken -
client.hris.link_token.create(...) +
client.hris.link_token.create(...) -> LinkToken
@@ -42451,17 +42025,21 @@ Creates a link token to be used when linking a new end user. The link token expi ```python from merge import Merge -from merge.resources.hris import CategoriesEnum +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.hris.link_token.create( end_user_email_address="example@gmail.com", end_user_organization_name="Test Organization", end_user_origin_id="12345", - categories=[CategoriesEnum.HRIS, CategoriesEnum.ATS], + categories=[ + "hris", + "ats" + ], ) ``` @@ -42502,7 +42080,7 @@ client.hris.link_token.create(
-**categories:** `typing.Sequence[CategoriesEnum]` — The integration categories to show in Merge Link. +**categories:** `typing.List[CategoriesEnum]` — The integration categories to show in Merge Link.
@@ -42542,7 +42120,7 @@ client.hris.link_token.create(
-**common_models:** `typing.Optional[typing.Sequence[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. +**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.
@@ -42550,14 +42128,7 @@ client.hris.link_token.create(
-**category_common_model_scopes:** `typing.Optional[ - typing.Dict[ - str, - typing.Optional[ - typing.Sequence[IndividualCommonModelScopeDeserializerRequest] - ], - ] -]` — When creating a Link Token, you can set permissions for Common Models that will apply to the account that is going to be linked. Any model or field not specified in link token payload will default to existing settings. +**category_common_model_scopes:** `typing.Optional[typing.Dict[str, typing.Optional[typing.List[IndividualCommonModelScopeDeserializerRequest]]]]` — When creating a Link Token, you can set permissions for Common Models that will apply to the account that is going to be linked. Any model or field not specified in link token payload will default to existing settings.
@@ -42586,7 +42157,7 @@ The following subset of IETF language tags can be used to configure localization
-**integration_specific_config:** `typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]]` — A JSON object containing integration-specific configuration options. +**integration_specific_config:** `typing.Optional[typing.Dict[str, typing.Any]]` — A JSON object containing integration-specific configuration options.
@@ -42615,7 +42186,7 @@ The following subset of IETF language tags can be used to configure localization
## Hris LinkedAccounts -
client.hris.linked_accounts.list(...) +
client.hris.linked_accounts.list(...) -> PaginatedAccountDetailsAndActionsList
@@ -42643,16 +42214,15 @@ List linked accounts for your organization. ```python from merge import Merge -from merge.resources.hris.resources.linked_accounts import ( - LinkedAccountsListRequestCategory, -) +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.hris.linked_accounts.list( - category=LinkedAccountsListRequestCategory.ACCOUNTING, + category="accounting", cursor="cD0yMDIxLTAxLTA2KzAzJTNBMjQlM0E1My40MzQzMjYlMkIwMCUzQTAw", end_user_email_address="end_user_email_address", end_user_organization_name="end_user_organization_name", @@ -42808,7 +42378,7 @@ Options: `accounting`, `ats`, `crm`, `filestorage`, `hris`, `mktg`, `ticketing`
## Hris Locations -
client.hris.locations.list(...) +
client.hris.locations.list(...) -> PaginatedLocationList
@@ -42835,41 +42405,29 @@ Returns a list of `Location` objects.
```python -import datetime - from merge import Merge -from merge.resources.hris.resources.locations import ( - LocationsListRequestLocationType, - LocationsListRequestRemoteFields, - LocationsListRequestShowEnumOrigins, -) +from merge.environment import MergeEnvironment +import datetime client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.hris.locations.list( - created_after=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), - created_before=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), + created_after=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), + created_before=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), cursor="cD0yMDIxLTAxLTA2KzAzJTNBMjQlM0E1My40MzQzMjYlMkIwMCUzQTAw", include_deleted_data=True, include_remote_data=True, include_shell_data=True, - location_type=LocationsListRequestLocationType.HOME, - modified_after=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), - modified_before=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), + location_type="HOME", + modified_after=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), + modified_before=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), page_size=1, - remote_fields=LocationsListRequestRemoteFields.COUNTRY, + remote_fields="country", remote_id="remote_id", - show_enum_origins=LocationsListRequestShowEnumOrigins.COUNTRY, + show_enum_origins="country", ) ``` @@ -42886,7 +42444,7 @@ client.hris.locations.list(
-**created_after:** `typing.Optional[dt.datetime]` — If provided, will only return objects created after this datetime. +**created_after:** `typing.Optional[datetime.datetime]` — If provided, will only return objects created after this datetime.
@@ -42894,7 +42452,7 @@ client.hris.locations.list(
-**created_before:** `typing.Optional[dt.datetime]` — If provided, will only return objects created before this datetime. +**created_before:** `typing.Optional[datetime.datetime]` — If provided, will only return objects created before this datetime.
@@ -42947,7 +42505,7 @@ If provided, will only return locations with this location type
-**modified_after:** `typing.Optional[dt.datetime]` — If provided, only objects synced by Merge after this date time will be returned. +**modified_after:** `typing.Optional[datetime.datetime]` — If provided, only objects synced by Merge after this date time will be returned.
@@ -42955,7 +42513,7 @@ If provided, will only return locations with this location type
-**modified_before:** `typing.Optional[dt.datetime]` — If provided, only objects synced by Merge before this date time will be returned. +**modified_before:** `typing.Optional[datetime.datetime]` — If provided, only objects synced by Merge before this date time will be returned.
@@ -43007,7 +42565,7 @@ If provided, will only return locations with this location type
-
client.hris.locations.retrieve(...) +
client.hris.locations.retrieve(...) -> Location
@@ -43035,21 +42593,19 @@ Returns a `Location` object with the given `id`. ```python from merge import Merge -from merge.resources.hris.resources.locations import ( - LocationsRetrieveRequestRemoteFields, - LocationsRetrieveRequestShowEnumOrigins, -) +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.hris.locations.retrieve( id="id", include_remote_data=True, include_shell_data=True, - remote_fields=LocationsRetrieveRequestRemoteFields.COUNTRY, - show_enum_origins=LocationsRetrieveRequestShowEnumOrigins.COUNTRY, + remote_fields="country", + show_enum_origins="country", ) ``` @@ -43119,7 +42675,7 @@ client.hris.locations.retrieve(
## Hris Passthrough -
client.hris.passthrough.create(...) +
client.hris.passthrough.create(...) -> RemoteResponse
@@ -43147,15 +42703,17 @@ Pull data from an endpoint not currently supported by Merge. ```python from merge import Merge -from merge.resources.hris import DataPassthroughRequest, MethodEnum +from merge.environment import MergeEnvironment +from merge.hris import DataPassthroughRequest client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.hris.passthrough.create( request=DataPassthroughRequest( - method=MethodEnum.GET, + method="GET", path="/scooters", ), ) @@ -43195,7 +42753,7 @@ client.hris.passthrough.create(
## Hris PayGroups -
client.hris.pay_groups.list(...) +
client.hris.pay_groups.list(...) -> PaginatedPayGroupList
@@ -43222,31 +42780,24 @@ Returns a list of `PayGroup` objects.
```python -import datetime - from merge import Merge +from merge.environment import MergeEnvironment +import datetime client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.hris.pay_groups.list( - created_after=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), - created_before=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), + created_after=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), + created_before=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), cursor="cD0yMDIxLTAxLTA2KzAzJTNBMjQlM0E1My40MzQzMjYlMkIwMCUzQTAw", include_deleted_data=True, include_remote_data=True, include_shell_data=True, - modified_after=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), - modified_before=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), + modified_after=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), + modified_before=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), page_size=1, remote_id="remote_id", ) @@ -43265,7 +42816,7 @@ client.hris.pay_groups.list(
-**created_after:** `typing.Optional[dt.datetime]` — If provided, will only return objects created after this datetime. +**created_after:** `typing.Optional[datetime.datetime]` — If provided, will only return objects created after this datetime.
@@ -43273,7 +42824,7 @@ client.hris.pay_groups.list(
-**created_before:** `typing.Optional[dt.datetime]` — If provided, will only return objects created before this datetime. +**created_before:** `typing.Optional[datetime.datetime]` — If provided, will only return objects created before this datetime.
@@ -43313,7 +42864,7 @@ client.hris.pay_groups.list(
-**modified_after:** `typing.Optional[dt.datetime]` — If provided, only objects synced by Merge after this date time will be returned. +**modified_after:** `typing.Optional[datetime.datetime]` — If provided, only objects synced by Merge after this date time will be returned.
@@ -43321,7 +42872,7 @@ client.hris.pay_groups.list(
-**modified_before:** `typing.Optional[dt.datetime]` — If provided, only objects synced by Merge before this date time will be returned. +**modified_before:** `typing.Optional[datetime.datetime]` — If provided, only objects synced by Merge before this date time will be returned.
@@ -43357,7 +42908,7 @@ client.hris.pay_groups.list(
-
client.hris.pay_groups.retrieve(...) +
client.hris.pay_groups.retrieve(...) -> PayGroup
@@ -43385,11 +42936,13 @@ Returns a `PayGroup` object with the given `id`. ```python from merge import Merge +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.hris.pay_groups.retrieve( id="id", include_remote_data=True, @@ -43447,7 +43000,7 @@ client.hris.pay_groups.retrieve(
## Hris PayrollRuns -
client.hris.payroll_runs.list(...) +
client.hris.payroll_runs.list(...) -> PaginatedPayrollRunList
@@ -43474,53 +43027,33 @@ Returns a list of `PayrollRun` objects.
```python -import datetime - from merge import Merge -from merge.resources.hris.resources.payroll_runs import ( - PayrollRunsListRequestRemoteFields, - PayrollRunsListRequestRunType, - PayrollRunsListRequestShowEnumOrigins, -) +from merge.environment import MergeEnvironment +import datetime client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.hris.payroll_runs.list( - created_after=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), - created_before=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), + created_after=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), + created_before=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), cursor="cD0yMDIxLTAxLTA2KzAzJTNBMjQlM0E1My40MzQzMjYlMkIwMCUzQTAw", - ended_after=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), - ended_before=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), + ended_after=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), + ended_before=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), include_deleted_data=True, include_remote_data=True, include_shell_data=True, - modified_after=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), - modified_before=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), + modified_after=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), + modified_before=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), page_size=1, - remote_fields=PayrollRunsListRequestRemoteFields.RUN_STATE, + remote_fields="run_state", remote_id="remote_id", - run_type=PayrollRunsListRequestRunType.CORRECTION, - show_enum_origins=PayrollRunsListRequestShowEnumOrigins.RUN_STATE, - started_after=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), - started_before=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), + run_type="CORRECTION", + show_enum_origins="run_state", + started_after=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), + started_before=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), ) ``` @@ -43537,7 +43070,7 @@ client.hris.payroll_runs.list(
-**created_after:** `typing.Optional[dt.datetime]` — If provided, will only return objects created after this datetime. +**created_after:** `typing.Optional[datetime.datetime]` — If provided, will only return objects created after this datetime.
@@ -43545,7 +43078,7 @@ client.hris.payroll_runs.list(
-**created_before:** `typing.Optional[dt.datetime]` — If provided, will only return objects created before this datetime. +**created_before:** `typing.Optional[datetime.datetime]` — If provided, will only return objects created before this datetime.
@@ -43561,7 +43094,7 @@ client.hris.payroll_runs.list(
-**ended_after:** `typing.Optional[dt.datetime]` — If provided, will only return payroll runs ended after this datetime. +**ended_after:** `typing.Optional[datetime.datetime]` — If provided, will only return payroll runs ended after this datetime.
@@ -43569,7 +43102,7 @@ client.hris.payroll_runs.list(
-**ended_before:** `typing.Optional[dt.datetime]` — If provided, will only return payroll runs ended before this datetime. +**ended_before:** `typing.Optional[datetime.datetime]` — If provided, will only return payroll runs ended before this datetime.
@@ -43601,7 +43134,7 @@ client.hris.payroll_runs.list(
-**modified_after:** `typing.Optional[dt.datetime]` — If provided, only objects synced by Merge after this date time will be returned. +**modified_after:** `typing.Optional[datetime.datetime]` — If provided, only objects synced by Merge after this date time will be returned.
@@ -43609,7 +43142,7 @@ client.hris.payroll_runs.list(
-**modified_before:** `typing.Optional[dt.datetime]` — If provided, only objects synced by Merge before this date time will be returned. +**modified_before:** `typing.Optional[datetime.datetime]` — If provided, only objects synced by Merge before this date time will be returned.
@@ -43665,7 +43198,7 @@ If provided, will only return PayrollRun's with this status. Options: ('REGULAR'
-**started_after:** `typing.Optional[dt.datetime]` — If provided, will only return payroll runs started after this datetime. +**started_after:** `typing.Optional[datetime.datetime]` — If provided, will only return payroll runs started after this datetime.
@@ -43673,7 +43206,7 @@ If provided, will only return PayrollRun's with this status. Options: ('REGULAR'
-**started_before:** `typing.Optional[dt.datetime]` — If provided, will only return payroll runs started before this datetime. +**started_before:** `typing.Optional[datetime.datetime]` — If provided, will only return payroll runs started before this datetime.
@@ -43693,7 +43226,7 @@ If provided, will only return PayrollRun's with this status. Options: ('REGULAR'
-
client.hris.payroll_runs.retrieve(...) +
client.hris.payroll_runs.retrieve(...) -> PayrollRun
@@ -43721,21 +43254,19 @@ Returns a `PayrollRun` object with the given `id`. ```python from merge import Merge -from merge.resources.hris.resources.payroll_runs import ( - PayrollRunsRetrieveRequestRemoteFields, - PayrollRunsRetrieveRequestShowEnumOrigins, -) +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.hris.payroll_runs.retrieve( id="id", include_remote_data=True, include_shell_data=True, - remote_fields=PayrollRunsRetrieveRequestRemoteFields.RUN_STATE, - show_enum_origins=PayrollRunsRetrieveRequestShowEnumOrigins.RUN_STATE, + remote_fields="run_state", + show_enum_origins="run_state", ) ``` @@ -43805,7 +43336,7 @@ client.hris.payroll_runs.retrieve(
## Hris RegenerateKey -
client.hris.regenerate_key.create(...) +
client.hris.regenerate_key.create(...) -> RemoteKey
@@ -43833,11 +43364,13 @@ Exchange remote keys. ```python from merge import Merge +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.hris.regenerate_key.create( name="Remote Deployment Key 1", ) @@ -43877,7 +43410,7 @@ client.hris.regenerate_key.create(
## Hris SyncStatus -
client.hris.sync_status.list(...) +
client.hris.sync_status.list(...) -> PaginatedSyncStatusList
@@ -43905,11 +43438,13 @@ Get sync status for the current sync and the most recently finished sync. `last_ ```python from merge import Merge +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.hris.sync_status.list( cursor="cD0yMDIxLTAxLTA2KzAzJTNBMjQlM0E1My40MzQzMjYlMkIwMCUzQTAw", page_size=1, @@ -43958,7 +43493,7 @@ client.hris.sync_status.list(
## Hris ForceResync -
client.hris.force_resync.sync_status_resync_create() +
client.hris.force_resync.sync_status_resync_create() -> typing.List[SyncStatus]
@@ -43986,11 +43521,13 @@ Force re-sync of all models. This endpoint is available for monthly, quarterly, ```python from merge import Merge +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.hris.force_resync.sync_status_resync_create() ``` @@ -44020,7 +43557,7 @@ client.hris.force_resync.sync_status_resync_create()
## Hris Teams -
client.hris.teams.list(...) +
client.hris.teams.list(...) -> PaginatedTeamList
@@ -44047,31 +43584,24 @@ Returns a list of `Team` objects.
```python -import datetime - from merge import Merge +from merge.environment import MergeEnvironment +import datetime client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.hris.teams.list( - created_after=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), - created_before=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), + created_after=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), + created_before=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), cursor="cD0yMDIxLTAxLTA2KzAzJTNBMjQlM0E1My40MzQzMjYlMkIwMCUzQTAw", include_deleted_data=True, include_remote_data=True, include_shell_data=True, - modified_after=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), - modified_before=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), + modified_after=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), + modified_before=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), page_size=1, parent_team_id="parent_team_id", remote_id="remote_id", @@ -44091,7 +43621,7 @@ client.hris.teams.list(
-**created_after:** `typing.Optional[dt.datetime]` — If provided, will only return objects created after this datetime. +**created_after:** `typing.Optional[datetime.datetime]` — If provided, will only return objects created after this datetime.
@@ -44099,7 +43629,7 @@ client.hris.teams.list(
-**created_before:** `typing.Optional[dt.datetime]` — If provided, will only return objects created before this datetime. +**created_before:** `typing.Optional[datetime.datetime]` — If provided, will only return objects created before this datetime.
@@ -44115,12 +43645,7 @@ client.hris.teams.list(
-**expand:** `typing.Optional[ - typing.Union[ - typing.Literal["parent_team"], - typing.Sequence[typing.Literal["parent_team"]], - ] -]` — Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces. +**expand:** `typing.Optional[typing.Union[typing.Literal, typing.Sequence[typing.Literal]]]` — Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces.
@@ -44152,7 +43677,7 @@ client.hris.teams.list(
-**modified_after:** `typing.Optional[dt.datetime]` — If provided, only objects synced by Merge after this date time will be returned. +**modified_after:** `typing.Optional[datetime.datetime]` — If provided, only objects synced by Merge after this date time will be returned.
@@ -44160,7 +43685,7 @@ client.hris.teams.list(
-**modified_before:** `typing.Optional[dt.datetime]` — If provided, only objects synced by Merge before this date time will be returned. +**modified_before:** `typing.Optional[datetime.datetime]` — If provided, only objects synced by Merge before this date time will be returned.
@@ -44204,7 +43729,7 @@ client.hris.teams.list(
-
client.hris.teams.retrieve(...) +
client.hris.teams.retrieve(...) -> Team
@@ -44232,11 +43757,13 @@ Returns a `Team` object with the given `id`. ```python from merge import Merge +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.hris.teams.retrieve( id="id", include_remote_data=True, @@ -44265,12 +43792,7 @@ client.hris.teams.retrieve(
-**expand:** `typing.Optional[ - typing.Union[ - typing.Literal["parent_team"], - typing.Sequence[typing.Literal["parent_team"]], - ] -]` — Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces. +**expand:** `typing.Optional[typing.Union[typing.Literal, typing.Sequence[typing.Literal]]]` — Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces.
@@ -44307,7 +43829,7 @@ client.hris.teams.retrieve(
## Hris TimeOff -
client.hris.time_off.list(...) +
client.hris.time_off.list(...) -> PaginatedTimeOffList
@@ -44334,57 +43856,36 @@ Returns a list of `TimeOff` objects.
```python -import datetime - from merge import Merge -from merge.resources.hris.resources.time_off import ( - TimeOffListRequestRemoteFields, - TimeOffListRequestRequestType, - TimeOffListRequestShowEnumOrigins, - TimeOffListRequestStatus, -) +from merge.environment import MergeEnvironment +import datetime client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.hris.time_off.list( approver_id="approver_id", - created_after=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), - created_before=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), + created_after=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), + created_before=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), cursor="cD0yMDIxLTAxLTA2KzAzJTNBMjQlM0E1My40MzQzMjYlMkIwMCUzQTAw", employee_id="employee_id", - ended_after=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), - ended_before=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), + ended_after=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), + ended_before=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), include_deleted_data=True, include_remote_data=True, include_shell_data=True, - modified_after=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), - modified_before=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), + modified_after=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), + modified_before=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), page_size=1, - remote_fields=TimeOffListRequestRemoteFields.REQUEST_TYPE, + remote_fields="request_type", remote_id="remote_id", - request_type=TimeOffListRequestRequestType.BEREAVEMENT, - show_enum_origins=TimeOffListRequestShowEnumOrigins.REQUEST_TYPE, - started_after=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), - started_before=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), - status=TimeOffListRequestStatus.APPROVED, + request_type="BEREAVEMENT", + show_enum_origins="request_type", + started_after=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), + started_before=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), + status="APPROVED", ) ``` @@ -44409,7 +43910,7 @@ client.hris.time_off.list(
-**created_after:** `typing.Optional[dt.datetime]` — If provided, will only return objects created after this datetime. +**created_after:** `typing.Optional[datetime.datetime]` — If provided, will only return objects created after this datetime.
@@ -44417,7 +43918,7 @@ client.hris.time_off.list(
-**created_before:** `typing.Optional[dt.datetime]` — If provided, will only return objects created before this datetime. +**created_before:** `typing.Optional[datetime.datetime]` — If provided, will only return objects created before this datetime.
@@ -44441,7 +43942,7 @@ client.hris.time_off.list(
-**ended_after:** `typing.Optional[dt.datetime]` — If provided, will only return employees that ended after this datetime. +**ended_after:** `typing.Optional[datetime.datetime]` — If provided, will only return employees that ended after this datetime.
@@ -44449,7 +43950,7 @@ client.hris.time_off.list(
-**ended_before:** `typing.Optional[dt.datetime]` — If provided, will only return time-offs that ended before this datetime. +**ended_before:** `typing.Optional[datetime.datetime]` — If provided, will only return time-offs that ended before this datetime.
@@ -44457,12 +43958,7 @@ client.hris.time_off.list(
-**expand:** `typing.Optional[ - typing.Union[ - TimeOffListRequestExpandItem, - typing.Sequence[TimeOffListRequestExpandItem], - ] -]` — Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces. +**expand:** `typing.Optional[typing.Union[TimeOffListRequestExpandItem, typing.Sequence[TimeOffListRequestExpandItem]]]` — Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces.
@@ -44494,7 +43990,7 @@ client.hris.time_off.list(
-**modified_after:** `typing.Optional[dt.datetime]` — If provided, only objects synced by Merge after this date time will be returned. +**modified_after:** `typing.Optional[datetime.datetime]` — If provided, only objects synced by Merge after this date time will be returned.
@@ -44502,7 +43998,7 @@ client.hris.time_off.list(
-**modified_before:** `typing.Optional[dt.datetime]` — If provided, only objects synced by Merge before this date time will be returned. +**modified_before:** `typing.Optional[datetime.datetime]` — If provided, only objects synced by Merge before this date time will be returned.
@@ -44559,7 +44055,7 @@ If provided, will only return TimeOff with this request type. Options: ('VACATIO
-**started_after:** `typing.Optional[dt.datetime]` — If provided, will only return time-offs that started after this datetime. +**started_after:** `typing.Optional[datetime.datetime]` — If provided, will only return time-offs that started after this datetime.
@@ -44567,7 +44063,7 @@ If provided, will only return TimeOff with this request type. Options: ('VACATIO
-**started_before:** `typing.Optional[dt.datetime]` — If provided, will only return time-offs that started before this datetime. +**started_before:** `typing.Optional[datetime.datetime]` — If provided, will only return time-offs that started before this datetime.
@@ -44603,7 +44099,7 @@ If provided, will only return TimeOff with this status. Options: ('REQUESTED', '
-
client.hris.time_off.create(...) +
client.hris.time_off.create(...) -> TimeOffResponse
@@ -44631,12 +44127,14 @@ Creates a `TimeOff` object with the given values. ```python from merge import Merge -from merge.resources.hris import TimeOffRequest +from merge.environment import MergeEnvironment +from merge.hris import TimeOffRequest client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.hris.time_off.create( is_debug_mode=True, run_async=True, @@ -44693,7 +44191,7 @@ client.hris.time_off.create(
-
client.hris.time_off.retrieve(...) +
client.hris.time_off.retrieve(...) -> TimeOff
@@ -44721,21 +44219,19 @@ Returns a `TimeOff` object with the given `id`. ```python from merge import Merge -from merge.resources.hris.resources.time_off import ( - TimeOffRetrieveRequestRemoteFields, - TimeOffRetrieveRequestShowEnumOrigins, -) +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.hris.time_off.retrieve( id="id", include_remote_data=True, include_shell_data=True, - remote_fields=TimeOffRetrieveRequestRemoteFields.REQUEST_TYPE, - show_enum_origins=TimeOffRetrieveRequestShowEnumOrigins.REQUEST_TYPE, + remote_fields="request_type", + show_enum_origins="request_type", ) ``` @@ -44760,12 +44256,7 @@ client.hris.time_off.retrieve(
-**expand:** `typing.Optional[ - typing.Union[ - TimeOffRetrieveRequestExpandItem, - typing.Sequence[TimeOffRetrieveRequestExpandItem], - ] -]` — Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces. +**expand:** `typing.Optional[typing.Union[TimeOffRetrieveRequestExpandItem, typing.Sequence[TimeOffRetrieveRequestExpandItem]]]` — Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces.
@@ -44817,7 +44308,7 @@ client.hris.time_off.retrieve(
-
client.hris.time_off.meta_post_retrieve() +
client.hris.time_off.meta_post_retrieve() -> MetaResponse
@@ -44845,11 +44336,13 @@ Returns metadata for `TimeOff` POSTs. ```python from merge import Merge +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.hris.time_off.meta_post_retrieve() ``` @@ -44879,7 +44372,7 @@ client.hris.time_off.meta_post_retrieve()
## Hris TimeOffBalances -
client.hris.time_off_balances.list(...) +
client.hris.time_off_balances.list(...) -> PaginatedTimeOffBalanceList
@@ -44906,38 +44399,30 @@ Returns a list of `TimeOffBalance` objects.
```python -import datetime - from merge import Merge -from merge.resources.hris.resources.time_off_balances import ( - TimeOffBalancesListRequestPolicyType, -) +from merge.environment import MergeEnvironment +import datetime client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.hris.time_off_balances.list( - created_after=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), - created_before=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), + created_after=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), + created_before=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), cursor="cD0yMDIxLTAxLTA2KzAzJTNBMjQlM0E1My40MzQzMjYlMkIwMCUzQTAw", employee_id="employee_id", include_deleted_data=True, include_remote_data=True, include_shell_data=True, - modified_after=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), - modified_before=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), + modified_after=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), + modified_before=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), page_size=1, - policy_type=TimeOffBalancesListRequestPolicyType.BEREAVEMENT, + policy_type="BEREAVEMENT", + remote_fields="policy_type", remote_id="remote_id", + show_enum_origins="policy_type", ) ``` @@ -44954,7 +44439,7 @@ client.hris.time_off_balances.list(
-**created_after:** `typing.Optional[dt.datetime]` — If provided, will only return objects created after this datetime. +**created_after:** `typing.Optional[datetime.datetime]` — If provided, will only return objects created after this datetime.
@@ -44962,7 +44447,7 @@ client.hris.time_off_balances.list(
-**created_before:** `typing.Optional[dt.datetime]` — If provided, will only return objects created before this datetime. +**created_before:** `typing.Optional[datetime.datetime]` — If provided, will only return objects created before this datetime.
@@ -44986,11 +44471,7 @@ client.hris.time_off_balances.list(
-**expand:** `typing.Optional[ - typing.Union[ - typing.Literal["employee"], typing.Sequence[typing.Literal["employee"]] - ] -]` — Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces. +**expand:** `typing.Optional[typing.Union[typing.Literal, typing.Sequence[typing.Literal]]]` — Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces.
@@ -45022,7 +44503,7 @@ client.hris.time_off_balances.list(
-**modified_after:** `typing.Optional[dt.datetime]` — If provided, only objects synced by Merge after this date time will be returned. +**modified_after:** `typing.Optional[datetime.datetime]` — If provided, only objects synced by Merge after this date time will be returned.
@@ -45030,7 +44511,7 @@ client.hris.time_off_balances.list(
-**modified_before:** `typing.Optional[dt.datetime]` — If provided, only objects synced by Merge before this date time will be returned. +**modified_before:** `typing.Optional[datetime.datetime]` — If provided, only objects synced by Merge before this date time will be returned.
@@ -45063,7 +44544,7 @@ If provided, will only return TimeOffBalance with this policy type. Options: ('V
-**remote_fields:** `typing.Optional[typing.Literal["policy_type"]]` — Deprecated. Use show_enum_origins. +**remote_fields:** `typing.Optional[typing.Literal]` — Deprecated. Use show_enum_origins.
@@ -45079,7 +44560,7 @@ If provided, will only return TimeOffBalance with this policy type. Options: ('V
-**show_enum_origins:** `typing.Optional[typing.Literal["policy_type"]]` — A comma separated list of enum field names for which you'd like the original values to be returned, instead of Merge's normalized enum values. [Learn more](https://help.merge.dev/en/articles/8950958-show_enum_origins-query-parameter) +**show_enum_origins:** `typing.Optional[typing.Literal]` — A comma separated list of enum field names for which you'd like the original values to be returned, instead of Merge's normalized enum values. [Learn more](https://help.merge.dev/en/articles/8950958-show_enum_origins-query-parameter)
@@ -45099,7 +44580,7 @@ If provided, will only return TimeOffBalance with this policy type. Options: ('V
-
client.hris.time_off_balances.retrieve(...) +
client.hris.time_off_balances.retrieve(...) -> TimeOffBalance
@@ -45127,15 +44608,19 @@ Returns a `TimeOffBalance` object with the given `id`. ```python from merge import Merge +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.hris.time_off_balances.retrieve( id="id", include_remote_data=True, include_shell_data=True, + remote_fields="policy_type", + show_enum_origins="policy_type", ) ``` @@ -45160,11 +44645,7 @@ client.hris.time_off_balances.retrieve(
-**expand:** `typing.Optional[ - typing.Union[ - typing.Literal["employee"], typing.Sequence[typing.Literal["employee"]] - ] -]` — Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces. +**expand:** `typing.Optional[typing.Union[typing.Literal, typing.Sequence[typing.Literal]]]` — Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces.
@@ -45188,7 +44669,7 @@ client.hris.time_off_balances.retrieve(
-**remote_fields:** `typing.Optional[typing.Literal["policy_type"]]` — Deprecated. Use show_enum_origins. +**remote_fields:** `typing.Optional[typing.Literal]` — Deprecated. Use show_enum_origins.
@@ -45196,7 +44677,7 @@ client.hris.time_off_balances.retrieve(
-**show_enum_origins:** `typing.Optional[typing.Literal["policy_type"]]` — A comma separated list of enum field names for which you'd like the original values to be returned, instead of Merge's normalized enum values. [Learn more](https://help.merge.dev/en/articles/8950958-show_enum_origins-query-parameter) +**show_enum_origins:** `typing.Optional[typing.Literal]` — A comma separated list of enum field names for which you'd like the original values to be returned, instead of Merge's normalized enum values. [Learn more](https://help.merge.dev/en/articles/8950958-show_enum_origins-query-parameter)
@@ -45217,7 +44698,7 @@ client.hris.time_off_balances.retrieve(
## Hris TimesheetEntries -
client.hris.timesheet_entries.list(...) +
client.hris.timesheet_entries.list(...) -> PaginatedTimesheetEntryList
@@ -45244,50 +44725,32 @@ Returns a list of `TimesheetEntry` objects.
```python -import datetime - from merge import Merge -from merge.resources.hris.resources.timesheet_entries import ( - TimesheetEntriesListRequestOrderBy, -) +from merge.environment import MergeEnvironment +import datetime client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.hris.timesheet_entries.list( - created_after=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), - created_before=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), + created_after=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), + created_before=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), cursor="cD0yMDIxLTAxLTA2KzAzJTNBMjQlM0E1My40MzQzMjYlMkIwMCUzQTAw", employee_id="employee_id", - ended_after=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), - ended_before=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), + ended_after=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), + ended_before=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), include_deleted_data=True, include_remote_data=True, include_shell_data=True, - modified_after=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), - modified_before=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), - order_by=TimesheetEntriesListRequestOrderBy.START_TIME_DESCENDING, + modified_after=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), + modified_before=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), + order_by="-start_time", page_size=1, remote_id="remote_id", - started_after=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), - started_before=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), + started_after=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), + started_before=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), ) ``` @@ -45304,7 +44767,7 @@ client.hris.timesheet_entries.list(
-**created_after:** `typing.Optional[dt.datetime]` — If provided, will only return objects created after this datetime. +**created_after:** `typing.Optional[datetime.datetime]` — If provided, will only return objects created after this datetime.
@@ -45312,7 +44775,7 @@ client.hris.timesheet_entries.list(
-**created_before:** `typing.Optional[dt.datetime]` — If provided, will only return objects created before this datetime. +**created_before:** `typing.Optional[datetime.datetime]` — If provided, will only return objects created before this datetime.
@@ -45336,7 +44799,7 @@ client.hris.timesheet_entries.list(
-**ended_after:** `typing.Optional[dt.datetime]` — If provided, will only return timesheet entries ended after this datetime. +**ended_after:** `typing.Optional[datetime.datetime]` — If provided, will only return timesheet entries ended after this datetime.
@@ -45344,7 +44807,7 @@ client.hris.timesheet_entries.list(
-**ended_before:** `typing.Optional[dt.datetime]` — If provided, will only return timesheet entries ended before this datetime. +**ended_before:** `typing.Optional[datetime.datetime]` — If provided, will only return timesheet entries ended before this datetime.
@@ -45352,11 +44815,7 @@ client.hris.timesheet_entries.list(
-**expand:** `typing.Optional[ - typing.Union[ - typing.Literal["employee"], typing.Sequence[typing.Literal["employee"]] - ] -]` — Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces. +**expand:** `typing.Optional[typing.Union[typing.Literal, typing.Sequence[typing.Literal]]]` — Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces.
@@ -45388,7 +44847,7 @@ client.hris.timesheet_entries.list(
-**modified_after:** `typing.Optional[dt.datetime]` — If provided, only objects synced by Merge after this date time will be returned. +**modified_after:** `typing.Optional[datetime.datetime]` — If provided, only objects synced by Merge after this date time will be returned.
@@ -45396,7 +44855,7 @@ client.hris.timesheet_entries.list(
-**modified_before:** `typing.Optional[dt.datetime]` — If provided, only objects synced by Merge before this date time will be returned. +**modified_before:** `typing.Optional[datetime.datetime]` — If provided, only objects synced by Merge before this date time will be returned.
@@ -45428,7 +44887,7 @@ client.hris.timesheet_entries.list(
-**started_after:** `typing.Optional[dt.datetime]` — If provided, will only return timesheet entries started after this datetime. +**started_after:** `typing.Optional[datetime.datetime]` — If provided, will only return timesheet entries started after this datetime.
@@ -45436,7 +44895,7 @@ client.hris.timesheet_entries.list(
-**started_before:** `typing.Optional[dt.datetime]` — If provided, will only return timesheet entries started before this datetime. +**started_before:** `typing.Optional[datetime.datetime]` — If provided, will only return timesheet entries started before this datetime.
@@ -45456,7 +44915,7 @@ client.hris.timesheet_entries.list(
-
client.hris.timesheet_entries.create(...) +
client.hris.timesheet_entries.create(...) -> TimesheetEntryResponse
@@ -45484,12 +44943,14 @@ Creates a `TimesheetEntry` object with the given values. ```python from merge import Merge -from merge.resources.hris import TimesheetEntryRequest +from merge.environment import MergeEnvironment +from merge.hris import TimesheetEntryRequest client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.hris.timesheet_entries.create( is_debug_mode=True, run_async=True, @@ -45546,7 +45007,7 @@ client.hris.timesheet_entries.create(
-
client.hris.timesheet_entries.retrieve(...) +
client.hris.timesheet_entries.retrieve(...) -> TimesheetEntry
@@ -45574,11 +45035,13 @@ Returns a `TimesheetEntry` object with the given `id`. ```python from merge import Merge +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.hris.timesheet_entries.retrieve( id="id", include_remote_data=True, @@ -45607,11 +45070,7 @@ client.hris.timesheet_entries.retrieve(
-**expand:** `typing.Optional[ - typing.Union[ - typing.Literal["employee"], typing.Sequence[typing.Literal["employee"]] - ] -]` — Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces. +**expand:** `typing.Optional[typing.Union[typing.Literal, typing.Sequence[typing.Literal]]]` — Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces.
@@ -45647,7 +45106,7 @@ client.hris.timesheet_entries.retrieve(
-
client.hris.timesheet_entries.meta_post_retrieve() +
client.hris.timesheet_entries.meta_post_retrieve() -> MetaResponse
@@ -45675,11 +45134,13 @@ Returns metadata for `TimesheetEntry` POSTs. ```python from merge import Merge +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.hris.timesheet_entries.meta_post_retrieve() ``` @@ -45709,7 +45170,7 @@ client.hris.timesheet_entries.meta_post_retrieve()
## Hris WebhookReceivers -
client.hris.webhook_receivers.list() +
client.hris.webhook_receivers.list() -> typing.List[WebhookReceiver]
@@ -45737,11 +45198,13 @@ Returns a list of `WebhookReceiver` objects. ```python from merge import Merge +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.hris.webhook_receivers.list() ``` @@ -45770,7 +45233,7 @@ client.hris.webhook_receivers.list()
-
client.hris.webhook_receivers.create(...) +
client.hris.webhook_receivers.create(...) -> WebhookReceiver
@@ -45798,11 +45261,13 @@ Creates a `WebhookReceiver` object with the given values. ```python from merge import Merge +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.hris.webhook_receivers.create( event="event", is_active=True, @@ -45859,7 +45324,7 @@ client.hris.webhook_receivers.create(
## Ticketing AccountDetails -
client.ticketing.account_details.retrieve() +
client.ticketing.account_details.retrieve() -> AccountDetails
@@ -45887,11 +45352,13 @@ Get details for a linked account. ```python from merge import Merge +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.ticketing.account_details.retrieve() ``` @@ -45921,7 +45388,7 @@ client.ticketing.account_details.retrieve()
## Ticketing AccountToken -
client.ticketing.account_token.retrieve(...) +
client.ticketing.account_token.retrieve(...) -> AccountToken
@@ -45949,11 +45416,13 @@ Returns the account token for the end user with the provided public token. ```python from merge import Merge +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.ticketing.account_token.retrieve( public_token="public_token", ) @@ -45992,7 +45461,7 @@ client.ticketing.account_token.retrieve(
-
client.ticketing.account_token.regenerate_create() +
client.ticketing.account_token.regenerate_create() -> RegenerateAccountToken
@@ -46020,11 +45489,13 @@ Exchange Linked Account account tokens. ```python from merge import Merge +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.ticketing.account_token.regenerate_create() ``` @@ -46054,7 +45525,7 @@ client.ticketing.account_token.regenerate_create()
## Ticketing Accounts -
client.ticketing.accounts.list(...) +
client.ticketing.accounts.list(...) -> PaginatedAccountList
@@ -46081,31 +45552,24 @@ Returns a list of `Account` objects.
```python -import datetime - from merge import Merge +from merge.environment import MergeEnvironment +import datetime client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.ticketing.accounts.list( - created_after=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), - created_before=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), + created_after=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), + created_before=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), cursor="cD0yMDIxLTAxLTA2KzAzJTNBMjQlM0E1My40MzQzMjYlMkIwMCUzQTAw", include_deleted_data=True, include_remote_data=True, include_shell_data=True, - modified_after=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), - modified_before=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), + modified_after=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), + modified_before=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), page_size=1, remote_id="remote_id", ) @@ -46124,7 +45588,7 @@ client.ticketing.accounts.list(
-**created_after:** `typing.Optional[dt.datetime]` — If provided, will only return objects created after this datetime. +**created_after:** `typing.Optional[datetime.datetime]` — If provided, will only return objects created after this datetime.
@@ -46132,7 +45596,7 @@ client.ticketing.accounts.list(
-**created_before:** `typing.Optional[dt.datetime]` — If provided, will only return objects created before this datetime. +**created_before:** `typing.Optional[datetime.datetime]` — If provided, will only return objects created before this datetime.
@@ -46172,7 +45636,7 @@ client.ticketing.accounts.list(
-**modified_after:** `typing.Optional[dt.datetime]` — If provided, only objects synced by Merge after this date time will be returned. +**modified_after:** `typing.Optional[datetime.datetime]` — If provided, only objects synced by Merge after this date time will be returned.
@@ -46180,7 +45644,7 @@ client.ticketing.accounts.list(
-**modified_before:** `typing.Optional[dt.datetime]` — If provided, only objects synced by Merge before this date time will be returned. +**modified_before:** `typing.Optional[datetime.datetime]` — If provided, only objects synced by Merge before this date time will be returned.
@@ -46216,7 +45680,7 @@ client.ticketing.accounts.list(
-
client.ticketing.accounts.retrieve(...) +
client.ticketing.accounts.retrieve(...) -> Account
@@ -46244,11 +45708,13 @@ Returns an `Account` object with the given `id`. ```python from merge import Merge +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.ticketing.accounts.retrieve( id="id", include_remote_data=True, @@ -46306,7 +45772,7 @@ client.ticketing.accounts.retrieve(
## Ticketing AsyncPassthrough -
client.ticketing.async_passthrough.create(...) +
client.ticketing.async_passthrough.create(...) -> AsyncPassthroughReciept
@@ -46334,15 +45800,17 @@ Asynchronously pull data from an endpoint not currently supported by Merge. ```python from merge import Merge -from merge.resources.ticketing import DataPassthroughRequest, MethodEnum +from merge.environment import MergeEnvironment +from merge.ticketing import DataPassthroughRequest client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.ticketing.async_passthrough.create( request=DataPassthroughRequest( - method=MethodEnum.GET, + method="GET", path="/scooters", ), ) @@ -46381,7 +45849,7 @@ client.ticketing.async_passthrough.create(
-
client.ticketing.async_passthrough.retrieve(...) +
client.ticketing.async_passthrough.retrieve(...) -> AsyncPassthroughRetrieveResponse
@@ -46409,11 +45877,13 @@ Retrieves data from earlier async-passthrough POST request ```python from merge import Merge +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.ticketing.async_passthrough.retrieve( async_passthrough_receipt_id="async_passthrough_receipt_id", ) @@ -46453,7 +45923,7 @@ client.ticketing.async_passthrough.retrieve(
## Ticketing Attachments -
client.ticketing.attachments.list(...) +
client.ticketing.attachments.list(...) -> PaginatedAttachmentList
@@ -46480,35 +45950,26 @@ Returns a list of `Attachment` objects.
```python -import datetime - from merge import Merge +from merge.environment import MergeEnvironment +import datetime client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.ticketing.attachments.list( - created_after=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), - created_before=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), + created_after=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), + created_before=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), cursor="cD0yMDIxLTAxLTA2KzAzJTNBMjQlM0E1My40MzQzMjYlMkIwMCUzQTAw", include_deleted_data=True, include_remote_data=True, include_shell_data=True, - modified_after=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), - modified_before=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), + modified_after=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), + modified_before=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), page_size=1, - remote_created_after=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), + remote_created_after=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), remote_id="remote_id", ticket_id="ticket_id", ) @@ -46527,7 +45988,7 @@ client.ticketing.attachments.list(
-**created_after:** `typing.Optional[dt.datetime]` — If provided, will only return objects created after this datetime. +**created_after:** `typing.Optional[datetime.datetime]` — If provided, will only return objects created after this datetime.
@@ -46535,7 +45996,7 @@ client.ticketing.attachments.list(
-**created_before:** `typing.Optional[dt.datetime]` — If provided, will only return objects created before this datetime. +**created_before:** `typing.Optional[datetime.datetime]` — If provided, will only return objects created before this datetime.
@@ -46551,11 +46012,7 @@ client.ticketing.attachments.list(
-**expand:** `typing.Optional[ - typing.Union[ - typing.Literal["ticket"], typing.Sequence[typing.Literal["ticket"]] - ] -]` — Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces. +**expand:** `typing.Optional[typing.Union[typing.Literal, typing.Sequence[typing.Literal]]]` — Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces.
@@ -46587,7 +46044,7 @@ client.ticketing.attachments.list(
-**modified_after:** `typing.Optional[dt.datetime]` — If provided, only objects synced by Merge after this date time will be returned. +**modified_after:** `typing.Optional[datetime.datetime]` — If provided, only objects synced by Merge after this date time will be returned.
@@ -46595,7 +46052,7 @@ client.ticketing.attachments.list(
-**modified_before:** `typing.Optional[dt.datetime]` — If provided, only objects synced by Merge before this date time will be returned. +**modified_before:** `typing.Optional[datetime.datetime]` — If provided, only objects synced by Merge before this date time will be returned.
@@ -46611,7 +46068,7 @@ client.ticketing.attachments.list(
-**remote_created_after:** `typing.Optional[dt.datetime]` — If provided, will only return attachments created in the third party platform after this datetime. +**remote_created_after:** `typing.Optional[datetime.datetime]` — If provided, will only return attachments created in the third party platform after this datetime.
@@ -46647,7 +46104,7 @@ client.ticketing.attachments.list(
-
client.ticketing.attachments.create(...) +
client.ticketing.attachments.create(...) -> TicketingAttachmentResponse
@@ -46675,12 +46132,14 @@ Creates an `Attachment` object with the given values. ```python from merge import Merge -from merge.resources.ticketing import AttachmentRequest +from merge.environment import MergeEnvironment +from merge.ticketing import AttachmentRequest client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.ticketing.attachments.create( is_debug_mode=True, run_async=True, @@ -46737,7 +46196,7 @@ client.ticketing.attachments.create(
-
client.ticketing.attachments.retrieve(...) +
client.ticketing.attachments.retrieve(...) -> Attachment
@@ -46765,11 +46224,13 @@ Returns an `Attachment` object with the given `id`. ```python from merge import Merge +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.ticketing.attachments.retrieve( id="id", include_remote_data=True, @@ -46798,11 +46259,7 @@ client.ticketing.attachments.retrieve(
-**expand:** `typing.Optional[ - typing.Union[ - typing.Literal["ticket"], typing.Sequence[typing.Literal["ticket"]] - ] -]` — Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces. +**expand:** `typing.Optional[typing.Union[typing.Literal, typing.Sequence[typing.Literal]]]` — Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces.
@@ -46838,7 +46295,85 @@ client.ticketing.attachments.retrieve(
-
client.ticketing.attachments.meta_post_retrieve() +
client.ticketing.attachments.download_retrieve(...) -> typing.Iterator[bytes] +
+
+ +#### 📝 Description + +
+
+ +
+
+ +Returns the `File` content with the given `id` as a stream of bytes. +
+
+
+
+ +#### 🔌 Usage + +
+
+ +
+
+ +```python +client.ticketing.attachments.download_retrieve(...) +``` +
+
+
+
+ +#### ⚙️ Parameters + +
+
+ +
+
+ +**id:** `str` + +
+
+ +
+
+ +**include_shell_data:** `typing.Optional[bool]` — Whether to include shell records. Shell records are empty records (they may contain some metadata but all other fields are null). + +
+
+ +
+
+ +**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. + +
+
+
+
+ + +
+
+
+ +
client.ticketing.attachments.meta_post_retrieve() -> MetaResponse
@@ -46866,11 +46401,13 @@ Returns metadata for `TicketingAttachment` POSTs. ```python from merge import Merge +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.ticketing.attachments.meta_post_retrieve() ``` @@ -46900,7 +46437,7 @@ client.ticketing.attachments.meta_post_retrieve()
## Ticketing AuditTrail -
client.ticketing.audit_trail.list(...) +
client.ticketing.audit_trail.list(...) -> PaginatedAuditLogEventList
@@ -46928,11 +46465,13 @@ Gets a list of audit trail events. ```python from merge import Merge +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.ticketing.audit_trail.list( cursor="cD0yMDIxLTAxLTA2KzAzJTNBMjQlM0E1My40MzQzMjYlMkIwMCUzQTAw", end_date="end_date", @@ -47017,7 +46556,7 @@ client.ticketing.audit_trail.list(
## Ticketing AvailableActions -
client.ticketing.available_actions.retrieve() +
client.ticketing.available_actions.retrieve() -> AvailableActions
@@ -47045,11 +46584,13 @@ Returns a list of models and actions available for an account. ```python from merge import Merge +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.ticketing.available_actions.retrieve() ``` @@ -47079,7 +46620,7 @@ client.ticketing.available_actions.retrieve()
## Ticketing Collections -
client.ticketing.collections.list(...) +
client.ticketing.collections.list(...) -> PaginatedCollectionList
@@ -47106,39 +46647,31 @@ Returns a list of `Collection` objects.
```python -import datetime - from merge import Merge -from merge.resources.ticketing.resources.collections import ( - CollectionsListRequestCollectionType, -) +from merge.environment import MergeEnvironment +import datetime client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.ticketing.collections.list( - collection_type=CollectionsListRequestCollectionType.EMPTY, - created_after=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), - created_before=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), + collection_type="", + created_after=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), + created_before=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), cursor="cD0yMDIxLTAxLTA2KzAzJTNBMjQlM0E1My40MzQzMjYlMkIwMCUzQTAw", include_deleted_data=True, include_remote_data=True, include_shell_data=True, - modified_after=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), - modified_before=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), + modified_after=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), + modified_before=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), name="name", page_size=1, parent_collection_id="parent_collection_id", + remote_fields="collection_type", remote_id="remote_id", + show_enum_origins="collection_type", ) ``` @@ -47163,7 +46696,7 @@ client.ticketing.collections.list(
-**created_after:** `typing.Optional[dt.datetime]` — If provided, will only return objects created after this datetime. +**created_after:** `typing.Optional[datetime.datetime]` — If provided, will only return objects created after this datetime.
@@ -47171,7 +46704,7 @@ client.ticketing.collections.list(
-**created_before:** `typing.Optional[dt.datetime]` — If provided, will only return objects created before this datetime. +**created_before:** `typing.Optional[datetime.datetime]` — If provided, will only return objects created before this datetime.
@@ -47187,12 +46720,7 @@ client.ticketing.collections.list(
-**expand:** `typing.Optional[ - typing.Union[ - CollectionsListRequestExpandItem, - typing.Sequence[CollectionsListRequestExpandItem], - ] -]` — Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces. +**expand:** `typing.Optional[typing.Union[CollectionsListRequestExpandItem, typing.Sequence[CollectionsListRequestExpandItem]]]` — Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces.
@@ -47224,7 +46752,7 @@ client.ticketing.collections.list(
-**modified_after:** `typing.Optional[dt.datetime]` — If provided, only objects synced by Merge after this date time will be returned. +**modified_after:** `typing.Optional[datetime.datetime]` — If provided, only objects synced by Merge after this date time will be returned.
@@ -47232,7 +46760,7 @@ client.ticketing.collections.list(
-**modified_before:** `typing.Optional[dt.datetime]` — If provided, only objects synced by Merge before this date time will be returned. +**modified_before:** `typing.Optional[datetime.datetime]` — If provided, only objects synced by Merge before this date time will be returned.
@@ -47264,7 +46792,7 @@ client.ticketing.collections.list(
-**remote_fields:** `typing.Optional[typing.Literal["collection_type"]]` — Deprecated. Use show_enum_origins. +**remote_fields:** `typing.Optional[typing.Literal]` — Deprecated. Use show_enum_origins.
@@ -47280,7 +46808,7 @@ client.ticketing.collections.list(
-**show_enum_origins:** `typing.Optional[typing.Literal["collection_type"]]` — A comma separated list of enum field names for which you'd like the original values to be returned, instead of Merge's normalized enum values. [Learn more](https://help.merge.dev/en/articles/8950958-show_enum_origins-query-parameter) +**show_enum_origins:** `typing.Optional[typing.Literal]` — A comma separated list of enum field names for which you'd like the original values to be returned, instead of Merge's normalized enum values. [Learn more](https://help.merge.dev/en/articles/8950958-show_enum_origins-query-parameter)
@@ -47300,7 +46828,7 @@ client.ticketing.collections.list(
-
client.ticketing.collections.viewers_list(...) +
client.ticketing.collections.viewers_list(...) -> PaginatedViewerList
@@ -47328,11 +46856,13 @@ Returns a list of `Viewer` objects that point to a User id or Team id that is ei ```python from merge import Merge +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.ticketing.collections.viewers_list( collection_id="collection_id", cursor="cD0yMDIxLTAxLTA2KzAzJTNBMjQlM0E1My40MzQzMjYlMkIwMCUzQTAw", @@ -47372,12 +46902,7 @@ client.ticketing.collections.viewers_list(
-**expand:** `typing.Optional[ - typing.Union[ - CollectionsViewersListRequestExpandItem, - typing.Sequence[CollectionsViewersListRequestExpandItem], - ] -]` — Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces. +**expand:** `typing.Optional[typing.Union[CollectionsViewersListRequestExpandItem, typing.Sequence[CollectionsViewersListRequestExpandItem]]]` — Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces.
@@ -47429,7 +46954,7 @@ client.ticketing.collections.viewers_list(
-
client.ticketing.collections.retrieve(...) +
client.ticketing.collections.retrieve(...) -> Collection
@@ -47457,15 +46982,19 @@ Returns a `Collection` object with the given `id`. ```python from merge import Merge +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.ticketing.collections.retrieve( id="id", include_remote_data=True, include_shell_data=True, + remote_fields="collection_type", + show_enum_origins="collection_type", ) ``` @@ -47490,12 +47019,7 @@ client.ticketing.collections.retrieve(
-**expand:** `typing.Optional[ - typing.Union[ - CollectionsRetrieveRequestExpandItem, - typing.Sequence[CollectionsRetrieveRequestExpandItem], - ] -]` — Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces. +**expand:** `typing.Optional[typing.Union[CollectionsRetrieveRequestExpandItem, typing.Sequence[CollectionsRetrieveRequestExpandItem]]]` — Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces.
@@ -47519,7 +47043,7 @@ client.ticketing.collections.retrieve(
-**remote_fields:** `typing.Optional[typing.Literal["collection_type"]]` — Deprecated. Use show_enum_origins. +**remote_fields:** `typing.Optional[typing.Literal]` — Deprecated. Use show_enum_origins.
@@ -47527,7 +47051,7 @@ client.ticketing.collections.retrieve(
-**show_enum_origins:** `typing.Optional[typing.Literal["collection_type"]]` — A comma separated list of enum field names for which you'd like the original values to be returned, instead of Merge's normalized enum values. [Learn more](https://help.merge.dev/en/articles/8950958-show_enum_origins-query-parameter) +**show_enum_origins:** `typing.Optional[typing.Literal]` — A comma separated list of enum field names for which you'd like the original values to be returned, instead of Merge's normalized enum values. [Learn more](https://help.merge.dev/en/articles/8950958-show_enum_origins-query-parameter)
@@ -47548,7 +47072,7 @@ client.ticketing.collections.retrieve(
## Ticketing Comments -
client.ticketing.comments.list(...) +
client.ticketing.comments.list(...) -> PaginatedCommentList
@@ -47575,35 +47099,26 @@ Returns a list of `Comment` objects.
```python -import datetime - from merge import Merge +from merge.environment import MergeEnvironment +import datetime client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.ticketing.comments.list( - created_after=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), - created_before=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), + created_after=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), + created_before=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), cursor="cD0yMDIxLTAxLTA2KzAzJTNBMjQlM0E1My40MzQzMjYlMkIwMCUzQTAw", include_deleted_data=True, include_remote_data=True, include_shell_data=True, - modified_after=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), - modified_before=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), + modified_after=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), + modified_before=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), page_size=1, - remote_created_after=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), + remote_created_after=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), remote_id="remote_id", ticket_id="ticket_id", ) @@ -47622,7 +47137,7 @@ client.ticketing.comments.list(
-**created_after:** `typing.Optional[dt.datetime]` — If provided, will only return objects created after this datetime. +**created_after:** `typing.Optional[datetime.datetime]` — If provided, will only return objects created after this datetime.
@@ -47630,7 +47145,7 @@ client.ticketing.comments.list(
-**created_before:** `typing.Optional[dt.datetime]` — If provided, will only return objects created before this datetime. +**created_before:** `typing.Optional[datetime.datetime]` — If provided, will only return objects created before this datetime.
@@ -47646,12 +47161,7 @@ client.ticketing.comments.list(
-**expand:** `typing.Optional[ - typing.Union[ - CommentsListRequestExpandItem, - typing.Sequence[CommentsListRequestExpandItem], - ] -]` — Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces. +**expand:** `typing.Optional[typing.Union[CommentsListRequestExpandItem, typing.Sequence[CommentsListRequestExpandItem]]]` — Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces.
@@ -47683,7 +47193,7 @@ client.ticketing.comments.list(
-**modified_after:** `typing.Optional[dt.datetime]` — If provided, only objects synced by Merge after this date time will be returned. +**modified_after:** `typing.Optional[datetime.datetime]` — If provided, only objects synced by Merge after this date time will be returned.
@@ -47691,7 +47201,7 @@ client.ticketing.comments.list(
-**modified_before:** `typing.Optional[dt.datetime]` — If provided, only objects synced by Merge before this date time will be returned. +**modified_before:** `typing.Optional[datetime.datetime]` — If provided, only objects synced by Merge before this date time will be returned.
@@ -47707,7 +47217,7 @@ client.ticketing.comments.list(
-**remote_created_after:** `typing.Optional[dt.datetime]` — If provided, will only return Comments created in the third party platform after this datetime. +**remote_created_after:** `typing.Optional[datetime.datetime]` — If provided, will only return Comments created in the third party platform after this datetime.
@@ -47743,7 +47253,7 @@ client.ticketing.comments.list(
-
client.ticketing.comments.create(...) +
client.ticketing.comments.create(...) -> CommentResponse
@@ -47771,12 +47281,14 @@ Creates a `Comment` object with the given values. ```python from merge import Merge -from merge.resources.ticketing import CommentRequest +from merge.environment import MergeEnvironment +from merge.ticketing import CommentRequest client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.ticketing.comments.create( is_debug_mode=True, run_async=True, @@ -47833,7 +47345,7 @@ client.ticketing.comments.create(
-
client.ticketing.comments.retrieve(...) +
client.ticketing.comments.retrieve(...) -> Comment
@@ -47861,11 +47373,13 @@ Returns a `Comment` object with the given `id`. ```python from merge import Merge +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.ticketing.comments.retrieve( id="id", include_remote_data=True, @@ -47894,12 +47408,7 @@ client.ticketing.comments.retrieve(
-**expand:** `typing.Optional[ - typing.Union[ - CommentsRetrieveRequestExpandItem, - typing.Sequence[CommentsRetrieveRequestExpandItem], - ] -]` — Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces. +**expand:** `typing.Optional[typing.Union[CommentsRetrieveRequestExpandItem, typing.Sequence[CommentsRetrieveRequestExpandItem]]]` — Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces.
@@ -47935,7 +47444,7 @@ client.ticketing.comments.retrieve(
-
client.ticketing.comments.meta_post_retrieve() +
client.ticketing.comments.meta_post_retrieve() -> MetaResponse
@@ -47963,11 +47472,13 @@ Returns metadata for `Comment` POSTs. ```python from merge import Merge +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.ticketing.comments.meta_post_retrieve() ``` @@ -47997,7 +47508,7 @@ client.ticketing.comments.meta_post_retrieve()
## Ticketing Contacts -
client.ticketing.contacts.list(...) +
client.ticketing.contacts.list(...) -> PaginatedContactList
@@ -48024,32 +47535,25 @@ Returns a list of `Contact` objects.
```python -import datetime - from merge import Merge +from merge.environment import MergeEnvironment +import datetime client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.ticketing.contacts.list( - created_after=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), - created_before=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), + created_after=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), + created_before=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), cursor="cD0yMDIxLTAxLTA2KzAzJTNBMjQlM0E1My40MzQzMjYlMkIwMCUzQTAw", email_address="email_address", include_deleted_data=True, include_remote_data=True, include_shell_data=True, - modified_after=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), - modified_before=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), + modified_after=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), + modified_before=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), page_size=1, remote_id="remote_id", ) @@ -48068,7 +47572,7 @@ client.ticketing.contacts.list(
-**created_after:** `typing.Optional[dt.datetime]` — If provided, will only return objects created after this datetime. +**created_after:** `typing.Optional[datetime.datetime]` — If provided, will only return objects created after this datetime.
@@ -48076,7 +47580,7 @@ client.ticketing.contacts.list(
-**created_before:** `typing.Optional[dt.datetime]` — If provided, will only return objects created before this datetime. +**created_before:** `typing.Optional[datetime.datetime]` — If provided, will only return objects created before this datetime.
@@ -48100,11 +47604,7 @@ client.ticketing.contacts.list(
-**expand:** `typing.Optional[ - typing.Union[ - typing.Literal["account"], typing.Sequence[typing.Literal["account"]] - ] -]` — Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces. +**expand:** `typing.Optional[typing.Union[typing.Literal, typing.Sequence[typing.Literal]]]` — Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces.
@@ -48136,7 +47636,7 @@ client.ticketing.contacts.list(
-**modified_after:** `typing.Optional[dt.datetime]` — If provided, only objects synced by Merge after this date time will be returned. +**modified_after:** `typing.Optional[datetime.datetime]` — If provided, only objects synced by Merge after this date time will be returned.
@@ -48144,7 +47644,7 @@ client.ticketing.contacts.list(
-**modified_before:** `typing.Optional[dt.datetime]` — If provided, only objects synced by Merge before this date time will be returned. +**modified_before:** `typing.Optional[datetime.datetime]` — If provided, only objects synced by Merge before this date time will be returned.
@@ -48180,7 +47680,7 @@ client.ticketing.contacts.list(
-
client.ticketing.contacts.create(...) +
client.ticketing.contacts.create(...) -> TicketingContactResponse
@@ -48208,12 +47708,14 @@ Creates a `Contact` object with the given values. ```python from merge import Merge -from merge.resources.ticketing import ContactRequest +from merge.environment import MergeEnvironment +from merge.ticketing import ContactRequest client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.ticketing.contacts.create( is_debug_mode=True, run_async=True, @@ -48270,7 +47772,7 @@ client.ticketing.contacts.create(
-
client.ticketing.contacts.retrieve(...) +
client.ticketing.contacts.retrieve(...) -> Contact
@@ -48298,11 +47800,13 @@ Returns a `Contact` object with the given `id`. ```python from merge import Merge +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.ticketing.contacts.retrieve( id="id", include_remote_data=True, @@ -48331,11 +47835,7 @@ client.ticketing.contacts.retrieve(
-**expand:** `typing.Optional[ - typing.Union[ - typing.Literal["account"], typing.Sequence[typing.Literal["account"]] - ] -]` — Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces. +**expand:** `typing.Optional[typing.Union[typing.Literal, typing.Sequence[typing.Literal]]]` — Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces.
@@ -48371,7 +47871,7 @@ client.ticketing.contacts.retrieve(
-
client.ticketing.contacts.meta_post_retrieve() +
client.ticketing.contacts.meta_post_retrieve() -> MetaResponse
@@ -48399,11 +47899,13 @@ Returns metadata for `TicketingContact` POSTs. ```python from merge import Merge +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.ticketing.contacts.meta_post_retrieve() ``` @@ -48433,7 +47935,7 @@ client.ticketing.contacts.meta_post_retrieve()
## Ticketing Scopes -
client.ticketing.scopes.default_scopes_retrieve() +
client.ticketing.scopes.default_scopes_retrieve() -> CommonModelScopeApi
@@ -48461,11 +47963,13 @@ Get the default permissions for Merge Common Models and fields across all Linked ```python from merge import Merge +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.ticketing.scopes.default_scopes_retrieve() ``` @@ -48494,7 +47998,7 @@ client.ticketing.scopes.default_scopes_retrieve()
-
client.ticketing.scopes.linked_account_scopes_retrieve() +
client.ticketing.scopes.linked_account_scopes_retrieve() -> CommonModelScopeApi
@@ -48522,11 +48026,13 @@ Get all available permissions for Merge Common Models and fields for a single Li ```python from merge import Merge +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.ticketing.scopes.linked_account_scopes_retrieve() ``` @@ -48555,7 +48061,7 @@ client.ticketing.scopes.linked_account_scopes_retrieve()
-
client.ticketing.scopes.linked_account_scopes_create(...) +
client.ticketing.scopes.linked_account_scopes_create(...) -> CommonModelScopeApi
@@ -48583,16 +48089,14 @@ Update permissions for any Common Model or field for a single Linked Account. An ```python from merge import Merge -from merge.resources.ticketing import ( - FieldPermissionDeserializerRequest, - IndividualCommonModelScopeDeserializerRequest, - ModelPermissionDeserializerRequest, -) +from merge.environment import MergeEnvironment +from merge.ticketing import IndividualCommonModelScopeDeserializerRequest, ModelPermissionDeserializerRequest, FieldPermissionDeserializerRequest client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.ticketing.scopes.linked_account_scopes_create( common_models=[ IndividualCommonModelScopeDeserializerRequest( @@ -48603,11 +48107,16 @@ client.ticketing.scopes.linked_account_scopes_create( ), "WRITE": ModelPermissionDeserializerRequest( is_enabled=False, - ), + ) }, field_permissions=FieldPermissionDeserializerRequest( - enabled_fields=["avatar", "home_location"], - disabled_fields=["work_location"], + enabled_fields=[ + "avatar", + "home_location" + ], + disabled_fields=[ + "work_location" + ], ), ), IndividualCommonModelScopeDeserializerRequest( @@ -48617,7 +48126,7 @@ client.ticketing.scopes.linked_account_scopes_create( is_enabled=False, ) }, - ), + ) ], ) @@ -48635,7 +48144,7 @@ client.ticketing.scopes.linked_account_scopes_create(
-**common_models:** `typing.Sequence[IndividualCommonModelScopeDeserializerRequest]` — The common models you want to update the scopes for +**common_models:** `typing.List[IndividualCommonModelScopeDeserializerRequest]` — The common models you want to update the scopes for
@@ -48656,7 +48165,7 @@ client.ticketing.scopes.linked_account_scopes_create(
## Ticketing DeleteAccount -
client.ticketing.delete_account.delete() +
client.ticketing.delete_account.delete()
@@ -48684,11 +48193,13 @@ Delete a linked account. ```python from merge import Merge +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.ticketing.delete_account.delete() ``` @@ -48718,7 +48229,7 @@ client.ticketing.delete_account.delete()
## Ticketing FieldMapping -
client.ticketing.field_mapping.field_mappings_retrieve(...) +
client.ticketing.field_mapping.field_mappings_retrieve(...) -> FieldMappingApiInstanceResponse
@@ -48746,11 +48257,13 @@ Get all Field Mappings for this Linked Account. Field Mappings are mappings betw ```python from merge import Merge +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.ticketing.field_mapping.field_mappings_retrieve( exclude_remote_field_metadata=True, ) @@ -48789,7 +48302,7 @@ client.ticketing.field_mapping.field_mappings_retrieve(
-
client.ticketing.field_mapping.field_mappings_create(...) +
client.ticketing.field_mapping.field_mappings_create(...) -> FieldMappingInstanceResponse
@@ -48817,17 +48330,21 @@ Create new Field Mappings that will be available after the next scheduled sync. ```python from merge import Merge +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.ticketing.field_mapping.field_mappings_create( exclude_remote_field_metadata=True, remote_data_iteration_count=1, target_field_name="example_target_field_name", target_field_description="this is a example description of the target field", - remote_field_traversal_path=["example_remote_field"], + remote_field_traversal_path=[ + "example_remote_field" + ], remote_method="GET", remote_url_path="/example-url-path", common_model_name="ExampleCommonModel", @@ -48863,7 +48380,7 @@ client.ticketing.field_mapping.field_mappings_create(
-**remote_field_traversal_path:** `typing.Sequence[typing.Optional[typing.Any]]` — The field traversal path of the remote field listed when you hit the GET /remote-fields endpoint. +**remote_field_traversal_path:** `typing.List[typing.Any]` — The field traversal path of the remote field listed when you hit the GET /remote-fields endpoint.
@@ -48931,7 +48448,7 @@ client.ticketing.field_mapping.field_mappings_create(
-
client.ticketing.field_mapping.field_mappings_destroy(...) +
client.ticketing.field_mapping.field_mappings_destroy(...) -> FieldMappingInstanceResponse
@@ -48959,11 +48476,13 @@ Deletes Field Mappings for a Linked Account. All data related to this Field Mapp ```python from merge import Merge +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.ticketing.field_mapping.field_mappings_destroy( field_mapping_id="field_mapping_id", ) @@ -49002,7 +48521,7 @@ client.ticketing.field_mapping.field_mappings_destroy(
-
client.ticketing.field_mapping.field_mappings_partial_update(...) +
client.ticketing.field_mapping.field_mappings_partial_update(...) -> FieldMappingInstanceResponse
@@ -49030,11 +48549,13 @@ Create or update existing Field Mappings for a Linked Account. Changes will be r ```python from merge import Merge +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.ticketing.field_mapping.field_mappings_partial_update( field_mapping_id="field_mapping_id", remote_data_iteration_count=1, @@ -49070,7 +48591,7 @@ client.ticketing.field_mapping.field_mappings_partial_update(
-**remote_field_traversal_path:** `typing.Optional[typing.Sequence[typing.Optional[typing.Any]]]` — The field traversal path of the remote field listed when you hit the GET /remote-fields endpoint. +**remote_field_traversal_path:** `typing.Optional[typing.List[typing.Any]]` — The field traversal path of the remote field listed when you hit the GET /remote-fields endpoint.
@@ -49114,7 +48635,7 @@ client.ticketing.field_mapping.field_mappings_partial_update(
-
client.ticketing.field_mapping.remote_fields_retrieve(...) +
client.ticketing.field_mapping.remote_fields_retrieve(...) -> RemoteFieldApiResponse
@@ -49142,11 +48663,13 @@ Get all remote fields for a Linked Account. Remote fields are third-party fields ```python from merge import Merge +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.ticketing.field_mapping.remote_fields_retrieve( common_models="common_models", include_example_values="include_example_values", @@ -49194,7 +48717,7 @@ client.ticketing.field_mapping.remote_fields_retrieve(
-
client.ticketing.field_mapping.target_fields_retrieve() +
client.ticketing.field_mapping.target_fields_retrieve() -> ExternalTargetFieldApiResponse
@@ -49222,11 +48745,13 @@ Get all organization-wide Target Fields, this will not include any Linked Accoun ```python from merge import Merge +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.ticketing.field_mapping.target_fields_retrieve() ``` @@ -49256,7 +48781,7 @@ client.ticketing.field_mapping.target_fields_retrieve()
## Ticketing GenerateKey -
client.ticketing.generate_key.create(...) +
client.ticketing.generate_key.create(...) -> RemoteKey
@@ -49284,11 +48809,13 @@ Create a remote key. ```python from merge import Merge +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.ticketing.generate_key.create( name="Remote Deployment Key 1", ) @@ -49328,7 +48855,7 @@ client.ticketing.generate_key.create(
## Ticketing Issues -
client.ticketing.issues.list(...) +
client.ticketing.issues.list(...) -> PaginatedIssueList
@@ -49355,38 +48882,30 @@ Gets all issues for Organization.
```python -import datetime - from merge import Merge -from merge.resources.ticketing.resources.issues import IssuesListRequestStatus +from merge.environment import MergeEnvironment +import datetime client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.ticketing.issues.list( account_token="account_token", cursor="cD0yMDIxLTAxLTA2KzAzJTNBMjQlM0E1My40MzQzMjYlMkIwMCUzQTAw", end_date="end_date", end_user_organization_name="end_user_organization_name", - first_incident_time_after=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), - first_incident_time_before=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), + first_incident_time_after=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), + first_incident_time_before=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), include_muted="include_muted", integration_name="integration_name", - last_incident_time_after=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), - last_incident_time_before=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), + last_incident_time_after=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), + last_incident_time_before=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), linked_account_id="linked_account_id", page_size=1, start_date="start_date", - status=IssuesListRequestStatus.ONGOING, + status="ONGOING", ) ``` @@ -49435,7 +48954,7 @@ client.ticketing.issues.list(
-**first_incident_time_after:** `typing.Optional[dt.datetime]` — If provided, will only return issues whose first incident time was after this datetime. +**first_incident_time_after:** `typing.Optional[datetime.datetime]` — If provided, will only return issues whose first incident time was after this datetime.
@@ -49443,7 +48962,7 @@ client.ticketing.issues.list(
-**first_incident_time_before:** `typing.Optional[dt.datetime]` — If provided, will only return issues whose first incident time was before this datetime. +**first_incident_time_before:** `typing.Optional[datetime.datetime]` — If provided, will only return issues whose first incident time was before this datetime.
@@ -49467,7 +48986,7 @@ client.ticketing.issues.list(
-**last_incident_time_after:** `typing.Optional[dt.datetime]` — If provided, will only return issues whose last incident time was after this datetime. +**last_incident_time_after:** `typing.Optional[datetime.datetime]` — If provided, will only return issues whose last incident time was after this datetime.
@@ -49475,7 +48994,7 @@ client.ticketing.issues.list(
-**last_incident_time_before:** `typing.Optional[dt.datetime]` — If provided, will only return issues whose last incident time was before this datetime. +**last_incident_time_before:** `typing.Optional[datetime.datetime]` — If provided, will only return issues whose last incident time was before this datetime.
@@ -49532,7 +49051,7 @@ Status of the issue. Options: ('ONGOING', 'RESOLVED')
-
client.ticketing.issues.retrieve(...) +
client.ticketing.issues.retrieve(...) -> Issue
@@ -49560,11 +49079,13 @@ Get a specific issue. ```python from merge import Merge +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.ticketing.issues.retrieve( id="id", ) @@ -49604,7 +49125,7 @@ client.ticketing.issues.retrieve(
## Ticketing LinkToken -
client.ticketing.link_token.create(...) +
client.ticketing.link_token.create(...) -> LinkToken
@@ -49632,17 +49153,21 @@ Creates a link token to be used when linking a new end user. The link token expi ```python from merge import Merge -from merge.resources.ticketing import CategoriesEnum +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.ticketing.link_token.create( end_user_email_address="example@gmail.com", end_user_organization_name="Test Organization", end_user_origin_id="12345", - categories=[CategoriesEnum.HRIS, CategoriesEnum.ATS], + categories=[ + "hris", + "ats" + ], ) ``` @@ -49683,7 +49208,7 @@ client.ticketing.link_token.create(
-**categories:** `typing.Sequence[CategoriesEnum]` — The integration categories to show in Merge Link. +**categories:** `typing.List[CategoriesEnum]` — The integration categories to show in Merge Link.
@@ -49723,7 +49248,7 @@ client.ticketing.link_token.create(
-**common_models:** `typing.Optional[typing.Sequence[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. +**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.
@@ -49731,14 +49256,7 @@ client.ticketing.link_token.create(
-**category_common_model_scopes:** `typing.Optional[ - typing.Dict[ - str, - typing.Optional[ - typing.Sequence[IndividualCommonModelScopeDeserializerRequest] - ], - ] -]` — When creating a Link Token, you can set permissions for Common Models that will apply to the account that is going to be linked. Any model or field not specified in link token payload will default to existing settings. +**category_common_model_scopes:** `typing.Optional[typing.Dict[str, typing.Optional[typing.List[IndividualCommonModelScopeDeserializerRequest]]]]` — When creating a Link Token, you can set permissions for Common Models that will apply to the account that is going to be linked. Any model or field not specified in link token payload will default to existing settings.
@@ -49767,7 +49285,7 @@ The following subset of IETF language tags can be used to configure localization
-**integration_specific_config:** `typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]]` — A JSON object containing integration-specific configuration options. +**integration_specific_config:** `typing.Optional[typing.Dict[str, typing.Any]]` — A JSON object containing integration-specific configuration options.
@@ -49788,7 +49306,7 @@ The following subset of IETF language tags can be used to configure localization
## Ticketing LinkedAccounts -
client.ticketing.linked_accounts.list(...) +
client.ticketing.linked_accounts.list(...) -> PaginatedAccountDetailsAndActionsList
@@ -49816,16 +49334,15 @@ List linked accounts for your organization. ```python from merge import Merge -from merge.resources.ticketing.resources.linked_accounts import ( - LinkedAccountsListRequestCategory, -) +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.ticketing.linked_accounts.list( - category=LinkedAccountsListRequestCategory.ACCOUNTING, + category="accounting", cursor="cD0yMDIxLTAxLTA2KzAzJTNBMjQlM0E1My40MzQzMjYlMkIwMCUzQTAw", end_user_email_address="end_user_email_address", end_user_organization_name="end_user_organization_name", @@ -49981,7 +49498,7 @@ Options: `accounting`, `ats`, `crm`, `filestorage`, `hris`, `mktg`, `ticketing`
## Ticketing Passthrough -
client.ticketing.passthrough.create(...) +
client.ticketing.passthrough.create(...) -> RemoteResponse
@@ -50009,15 +49526,17 @@ Pull data from an endpoint not currently supported by Merge. ```python from merge import Merge -from merge.resources.ticketing import DataPassthroughRequest, MethodEnum +from merge.environment import MergeEnvironment +from merge.ticketing import DataPassthroughRequest client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.ticketing.passthrough.create( request=DataPassthroughRequest( - method=MethodEnum.GET, + method="GET", path="/scooters", ), ) @@ -50057,7 +49576,7 @@ client.ticketing.passthrough.create(
## Ticketing Projects -
client.ticketing.projects.list(...) +
client.ticketing.projects.list(...) -> PaginatedProjectList
@@ -50084,31 +49603,24 @@ Returns a list of `Project` objects.
```python -import datetime - from merge import Merge +from merge.environment import MergeEnvironment +import datetime client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.ticketing.projects.list( - created_after=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), - created_before=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), + created_after=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), + created_before=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), cursor="cD0yMDIxLTAxLTA2KzAzJTNBMjQlM0E1My40MzQzMjYlMkIwMCUzQTAw", include_deleted_data=True, include_remote_data=True, include_shell_data=True, - modified_after=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), - modified_before=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), + modified_after=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), + modified_before=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), page_size=1, remote_id="remote_id", ) @@ -50127,7 +49639,7 @@ client.ticketing.projects.list(
-**created_after:** `typing.Optional[dt.datetime]` — If provided, will only return objects created after this datetime. +**created_after:** `typing.Optional[datetime.datetime]` — If provided, will only return objects created after this datetime.
@@ -50135,7 +49647,7 @@ client.ticketing.projects.list(
-**created_before:** `typing.Optional[dt.datetime]` — If provided, will only return objects created before this datetime. +**created_before:** `typing.Optional[datetime.datetime]` — If provided, will only return objects created before this datetime.
@@ -50175,7 +49687,7 @@ client.ticketing.projects.list(
-**modified_after:** `typing.Optional[dt.datetime]` — If provided, only objects synced by Merge after this date time will be returned. +**modified_after:** `typing.Optional[datetime.datetime]` — If provided, only objects synced by Merge after this date time will be returned.
@@ -50183,7 +49695,7 @@ client.ticketing.projects.list(
-**modified_before:** `typing.Optional[dt.datetime]` — If provided, only objects synced by Merge before this date time will be returned. +**modified_before:** `typing.Optional[datetime.datetime]` — If provided, only objects synced by Merge before this date time will be returned.
@@ -50219,7 +49731,7 @@ client.ticketing.projects.list(
-
client.ticketing.projects.retrieve(...) +
client.ticketing.projects.retrieve(...) -> Project
@@ -50247,11 +49759,13 @@ Returns a `Project` object with the given `id`. ```python from merge import Merge +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.ticketing.projects.retrieve( id="id", include_remote_data=True, @@ -50308,7 +49822,7 @@ client.ticketing.projects.retrieve(
-
client.ticketing.projects.users_list(...) +
client.ticketing.projects.users_list(...) -> PaginatedUserList
@@ -50336,11 +49850,13 @@ Returns a list of `User` objects. ```python from merge import Merge +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.ticketing.projects.users_list( parent_id="parent_id", cursor="cD0yMDIxLTAxLTA2KzAzJTNBMjQlM0E1My40MzQzMjYlMkIwMCUzQTAw", @@ -50380,12 +49896,7 @@ client.ticketing.projects.users_list(
-**expand:** `typing.Optional[ - typing.Union[ - ProjectsUsersListRequestExpandItem, - typing.Sequence[ProjectsUsersListRequestExpandItem], - ] -]` — Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces. +**expand:** `typing.Optional[typing.Union[ProjectsUsersListRequestExpandItem, typing.Sequence[ProjectsUsersListRequestExpandItem]]]` — Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces.
@@ -50438,7 +49949,7 @@ client.ticketing.projects.users_list(
## Ticketing RegenerateKey -
client.ticketing.regenerate_key.create(...) +
client.ticketing.regenerate_key.create(...) -> RemoteKey
@@ -50466,11 +49977,13 @@ Exchange remote keys. ```python from merge import Merge +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.ticketing.regenerate_key.create( name="Remote Deployment Key 1", ) @@ -50510,7 +50023,7 @@ client.ticketing.regenerate_key.create(
## Ticketing Roles -
client.ticketing.roles.list(...) +
client.ticketing.roles.list(...) -> PaginatedRoleList
@@ -50537,31 +50050,24 @@ Returns a list of `Role` objects.
```python -import datetime - from merge import Merge +from merge.environment import MergeEnvironment +import datetime client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.ticketing.roles.list( - created_after=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), - created_before=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), + created_after=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), + created_before=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), cursor="cD0yMDIxLTAxLTA2KzAzJTNBMjQlM0E1My40MzQzMjYlMkIwMCUzQTAw", include_deleted_data=True, include_remote_data=True, include_shell_data=True, - modified_after=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), - modified_before=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), + modified_after=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), + modified_before=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), page_size=1, remote_id="remote_id", ) @@ -50580,7 +50086,7 @@ client.ticketing.roles.list(
-**created_after:** `typing.Optional[dt.datetime]` — If provided, will only return objects created after this datetime. +**created_after:** `typing.Optional[datetime.datetime]` — If provided, will only return objects created after this datetime.
@@ -50588,7 +50094,7 @@ client.ticketing.roles.list(
-**created_before:** `typing.Optional[dt.datetime]` — If provided, will only return objects created before this datetime. +**created_before:** `typing.Optional[datetime.datetime]` — If provided, will only return objects created before this datetime.
@@ -50628,7 +50134,7 @@ client.ticketing.roles.list(
-**modified_after:** `typing.Optional[dt.datetime]` — If provided, only objects synced by Merge after this date time will be returned. +**modified_after:** `typing.Optional[datetime.datetime]` — If provided, only objects synced by Merge after this date time will be returned.
@@ -50636,7 +50142,7 @@ client.ticketing.roles.list(
-**modified_before:** `typing.Optional[dt.datetime]` — If provided, only objects synced by Merge before this date time will be returned. +**modified_before:** `typing.Optional[datetime.datetime]` — If provided, only objects synced by Merge before this date time will be returned.
@@ -50672,7 +50178,7 @@ client.ticketing.roles.list(
-
client.ticketing.roles.retrieve(...) +
client.ticketing.roles.retrieve(...) -> Role
@@ -50700,11 +50206,13 @@ Returns a `Role` object with the given `id`. ```python from merge import Merge +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.ticketing.roles.retrieve( id="id", include_remote_data=True, @@ -50762,7 +50270,7 @@ client.ticketing.roles.retrieve(
## Ticketing SyncStatus -
client.ticketing.sync_status.list(...) +
client.ticketing.sync_status.list(...) -> PaginatedSyncStatusList
@@ -50790,11 +50298,13 @@ Get sync status for the current sync and the most recently finished sync. `last_ ```python from merge import Merge +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.ticketing.sync_status.list( cursor="cD0yMDIxLTAxLTA2KzAzJTNBMjQlM0E1My40MzQzMjYlMkIwMCUzQTAw", page_size=1, @@ -50843,7 +50353,7 @@ client.ticketing.sync_status.list(
## Ticketing ForceResync -
client.ticketing.force_resync.sync_status_resync_create() +
client.ticketing.force_resync.sync_status_resync_create() -> typing.List[SyncStatus]
@@ -50871,11 +50381,13 @@ Force re-sync of all models. This endpoint is available for monthly, quarterly, ```python from merge import Merge +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.ticketing.force_resync.sync_status_resync_create() ``` @@ -50905,7 +50417,7 @@ client.ticketing.force_resync.sync_status_resync_create()
## Ticketing Tags -
client.ticketing.tags.list(...) +
client.ticketing.tags.list(...) -> PaginatedTagList
@@ -50932,31 +50444,24 @@ Returns a list of `Tag` objects.
```python -import datetime - from merge import Merge +from merge.environment import MergeEnvironment +import datetime client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.ticketing.tags.list( - created_after=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), - created_before=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), + created_after=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), + created_before=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), cursor="cD0yMDIxLTAxLTA2KzAzJTNBMjQlM0E1My40MzQzMjYlMkIwMCUzQTAw", include_deleted_data=True, include_remote_data=True, include_shell_data=True, - modified_after=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), - modified_before=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), + modified_after=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), + modified_before=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), page_size=1, remote_id="remote_id", ) @@ -50975,7 +50480,7 @@ client.ticketing.tags.list(
-**created_after:** `typing.Optional[dt.datetime]` — If provided, will only return objects created after this datetime. +**created_after:** `typing.Optional[datetime.datetime]` — If provided, will only return objects created after this datetime.
@@ -50983,7 +50488,7 @@ client.ticketing.tags.list(
-**created_before:** `typing.Optional[dt.datetime]` — If provided, will only return objects created before this datetime. +**created_before:** `typing.Optional[datetime.datetime]` — If provided, will only return objects created before this datetime.
@@ -51023,7 +50528,7 @@ client.ticketing.tags.list(
-**modified_after:** `typing.Optional[dt.datetime]` — If provided, only objects synced by Merge after this date time will be returned. +**modified_after:** `typing.Optional[datetime.datetime]` — If provided, only objects synced by Merge after this date time will be returned.
@@ -51031,7 +50536,7 @@ client.ticketing.tags.list(
-**modified_before:** `typing.Optional[dt.datetime]` — If provided, only objects synced by Merge before this date time will be returned. +**modified_before:** `typing.Optional[datetime.datetime]` — If provided, only objects synced by Merge before this date time will be returned.
@@ -51067,7 +50572,7 @@ client.ticketing.tags.list(
-
client.ticketing.tags.retrieve(...) +
client.ticketing.tags.retrieve(...) -> Tag
@@ -51095,11 +50600,13 @@ Returns a `Tag` object with the given `id`. ```python from merge import Merge +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.ticketing.tags.retrieve( id="id", include_remote_data=True, @@ -51157,7 +50664,7 @@ client.ticketing.tags.retrieve(
## Ticketing Teams -
client.ticketing.teams.list(...) +
client.ticketing.teams.list(...) -> PaginatedTeamList
@@ -51184,31 +50691,24 @@ Returns a list of `Team` objects.
```python -import datetime - from merge import Merge +from merge.environment import MergeEnvironment +import datetime client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.ticketing.teams.list( - created_after=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), - created_before=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), + created_after=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), + created_before=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), cursor="cD0yMDIxLTAxLTA2KzAzJTNBMjQlM0E1My40MzQzMjYlMkIwMCUzQTAw", include_deleted_data=True, include_remote_data=True, include_shell_data=True, - modified_after=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), - modified_before=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), + modified_after=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), + modified_before=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), page_size=1, remote_id="remote_id", ) @@ -51227,7 +50727,7 @@ client.ticketing.teams.list(
-**created_after:** `typing.Optional[dt.datetime]` — If provided, will only return objects created after this datetime. +**created_after:** `typing.Optional[datetime.datetime]` — If provided, will only return objects created after this datetime.
@@ -51235,7 +50735,7 @@ client.ticketing.teams.list(
-**created_before:** `typing.Optional[dt.datetime]` — If provided, will only return objects created before this datetime. +**created_before:** `typing.Optional[datetime.datetime]` — If provided, will only return objects created before this datetime.
@@ -51275,7 +50775,7 @@ client.ticketing.teams.list(
-**modified_after:** `typing.Optional[dt.datetime]` — If provided, only objects synced by Merge after this date time will be returned. +**modified_after:** `typing.Optional[datetime.datetime]` — If provided, only objects synced by Merge after this date time will be returned.
@@ -51283,7 +50783,7 @@ client.ticketing.teams.list(
-**modified_before:** `typing.Optional[dt.datetime]` — If provided, only objects synced by Merge before this date time will be returned. +**modified_before:** `typing.Optional[datetime.datetime]` — If provided, only objects synced by Merge before this date time will be returned.
@@ -51319,7 +50819,7 @@ client.ticketing.teams.list(
-
client.ticketing.teams.retrieve(...) +
client.ticketing.teams.retrieve(...) -> Team
@@ -51347,11 +50847,13 @@ Returns a `Team` object with the given `id`. ```python from merge import Merge +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.ticketing.teams.retrieve( id="id", include_remote_data=True, @@ -51409,7 +50911,7 @@ client.ticketing.teams.retrieve(
## Ticketing Tickets -
client.ticketing.tickets.list(...) +
client.ticketing.tickets.list(...) -> PaginatedTicketList
@@ -51436,77 +50938,48 @@ Returns a list of `Ticket` objects.
```python -import datetime - from merge import Merge -from merge.resources.ticketing.resources.tickets import ( - TicketsListRequestPriority, - TicketsListRequestRemoteFields, - TicketsListRequestShowEnumOrigins, - TicketsListRequestStatus, -) +from merge.environment import MergeEnvironment +import datetime client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.ticketing.tickets.list( account_id="account_id", assignee_ids="assignee_ids", collection_ids="collection_ids", - completed_after=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), - completed_before=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), + completed_after=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), + completed_before=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), contact_id="contact_id", - created_after=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), - created_before=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), + created_after=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), + created_before=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), creator_id="creator_id", creator_ids="creator_ids", cursor="cD0yMDIxLTAxLTA2KzAzJTNBMjQlM0E1My40MzQzMjYlMkIwMCUzQTAw", - due_after=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), - due_before=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), + due_after=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), + due_before=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), include_deleted_data=True, include_remote_data=True, include_remote_fields=True, include_shell_data=True, - modified_after=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), - modified_before=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), + modified_after=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), + modified_before=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), name="name", page_size=1, parent_ticket_id="parent_ticket_id", - priority=TicketsListRequestPriority.HIGH, - remote_created_after=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), - remote_created_before=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), - remote_fields=TicketsListRequestRemoteFields.PRIORITY, + priority="HIGH", + remote_created_after=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), + remote_created_before=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), + remote_fields="priority", remote_id="remote_id", remote_ids="remote_ids", - remote_updated_after=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), - remote_updated_before=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), - show_enum_origins=TicketsListRequestShowEnumOrigins.PRIORITY, - status=TicketsListRequestStatus.EMPTY, + remote_updated_after=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), + remote_updated_before=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), + show_enum_origins="priority", + status="", tags="tags", ticket_type="ticket_type", ticket_url="ticket_url", @@ -51550,7 +51023,7 @@ client.ticketing.tickets.list(
-**completed_after:** `typing.Optional[dt.datetime]` — If provided, will only return tickets completed after this datetime. +**completed_after:** `typing.Optional[datetime.datetime]` — If provided, will only return tickets completed after this datetime.
@@ -51558,7 +51031,7 @@ client.ticketing.tickets.list(
-**completed_before:** `typing.Optional[dt.datetime]` — If provided, will only return tickets completed before this datetime. +**completed_before:** `typing.Optional[datetime.datetime]` — If provided, will only return tickets completed before this datetime.
@@ -51574,7 +51047,7 @@ client.ticketing.tickets.list(
-**created_after:** `typing.Optional[dt.datetime]` — If provided, will only return objects created after this datetime. +**created_after:** `typing.Optional[datetime.datetime]` — If provided, will only return objects created after this datetime.
@@ -51582,7 +51055,7 @@ client.ticketing.tickets.list(
-**created_before:** `typing.Optional[dt.datetime]` — If provided, will only return objects created before this datetime. +**created_before:** `typing.Optional[datetime.datetime]` — If provided, will only return objects created before this datetime.
@@ -51614,7 +51087,7 @@ client.ticketing.tickets.list(
-**due_after:** `typing.Optional[dt.datetime]` — If provided, will only return tickets due after this datetime. +**due_after:** `typing.Optional[datetime.datetime]` — If provided, will only return tickets due after this datetime.
@@ -51622,7 +51095,7 @@ client.ticketing.tickets.list(
-**due_before:** `typing.Optional[dt.datetime]` — If provided, will only return tickets due before this datetime. +**due_before:** `typing.Optional[datetime.datetime]` — If provided, will only return tickets due before this datetime.
@@ -51630,12 +51103,7 @@ client.ticketing.tickets.list(
-**expand:** `typing.Optional[ - typing.Union[ - TicketsListRequestExpandItem, - typing.Sequence[TicketsListRequestExpandItem], - ] -]` — Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces. +**expand:** `typing.Optional[typing.Union[TicketsListRequestExpandItem, typing.Sequence[TicketsListRequestExpandItem]]]` — Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces.
@@ -51675,7 +51143,7 @@ client.ticketing.tickets.list(
-**modified_after:** `typing.Optional[dt.datetime]` — If provided, only objects synced by Merge after this date time will be returned. +**modified_after:** `typing.Optional[datetime.datetime]` — If provided, only objects synced by Merge after this date time will be returned.
@@ -51683,7 +51151,7 @@ client.ticketing.tickets.list(
-**modified_before:** `typing.Optional[dt.datetime]` — If provided, only objects synced by Merge before this date time will be returned. +**modified_before:** `typing.Optional[datetime.datetime]` — If provided, only objects synced by Merge before this date time will be returned.
@@ -51730,7 +51198,7 @@ If provided, will only return tickets of this priority.
-**remote_created_after:** `typing.Optional[dt.datetime]` — If provided, will only return tickets created in the third party platform after this datetime. +**remote_created_after:** `typing.Optional[datetime.datetime]` — If provided, will only return tickets created in the third party platform after this datetime.
@@ -51738,7 +51206,7 @@ If provided, will only return tickets of this priority.
-**remote_created_before:** `typing.Optional[dt.datetime]` — If provided, will only return tickets created in the third party platform before this datetime. +**remote_created_before:** `typing.Optional[datetime.datetime]` — If provided, will only return tickets created in the third party platform before this datetime.
@@ -51770,7 +51238,7 @@ If provided, will only return tickets of this priority.
-**remote_updated_after:** `typing.Optional[dt.datetime]` — If provided, will only return tickets updated in the third party platform after this datetime. +**remote_updated_after:** `typing.Optional[datetime.datetime]` — If provided, will only return tickets updated in the third party platform after this datetime.
@@ -51778,7 +51246,7 @@ If provided, will only return tickets of this priority.
-**remote_updated_before:** `typing.Optional[dt.datetime]` — If provided, will only return tickets updated in the third party platform before this datetime. +**remote_updated_before:** `typing.Optional[datetime.datetime]` — If provided, will only return tickets updated in the third party platform before this datetime.
@@ -51838,7 +51306,7 @@ If provided, will only return tickets of this priority.
-
client.ticketing.tickets.create(...) +
client.ticketing.tickets.create(...) -> TicketResponse
@@ -51866,12 +51334,14 @@ Creates a `Ticket` object with the given values. ```python from merge import Merge -from merge.resources.ticketing import TicketRequest +from merge.environment import MergeEnvironment +from merge.ticketing import TicketRequest client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.ticketing.tickets.create( is_debug_mode=True, run_async=True, @@ -51928,7 +51398,7 @@ client.ticketing.tickets.create(
-
client.ticketing.tickets.retrieve(...) +
client.ticketing.tickets.retrieve(...) -> Ticket
@@ -51956,22 +51426,20 @@ Returns a `Ticket` object with the given `id`. ```python from merge import Merge -from merge.resources.ticketing.resources.tickets import ( - TicketsRetrieveRequestRemoteFields, - TicketsRetrieveRequestShowEnumOrigins, -) +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.ticketing.tickets.retrieve( id="id", include_remote_data=True, include_remote_fields=True, include_shell_data=True, - remote_fields=TicketsRetrieveRequestRemoteFields.PRIORITY, - show_enum_origins=TicketsRetrieveRequestShowEnumOrigins.PRIORITY, + remote_fields="priority", + show_enum_origins="priority", ) ``` @@ -51996,12 +51464,7 @@ client.ticketing.tickets.retrieve(
-**expand:** `typing.Optional[ - typing.Union[ - TicketsRetrieveRequestExpandItem, - typing.Sequence[TicketsRetrieveRequestExpandItem], - ] -]` — Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces. +**expand:** `typing.Optional[typing.Union[TicketsRetrieveRequestExpandItem, typing.Sequence[TicketsRetrieveRequestExpandItem]]]` — Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces.
@@ -52061,7 +51524,7 @@ client.ticketing.tickets.retrieve(
-
client.ticketing.tickets.partial_update(...) +
client.ticketing.tickets.partial_update(...) -> TicketResponse
@@ -52089,12 +51552,14 @@ Updates a `Ticket` object with the given `id`. ```python from merge import Merge -from merge.resources.ticketing import PatchedTicketRequest +from merge.environment import MergeEnvironment +from merge.ticketing import PatchedTicketRequest client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.ticketing.tickets.partial_update( id="id", is_debug_mode=True, @@ -52160,7 +51625,7 @@ client.ticketing.tickets.partial_update(
-
client.ticketing.tickets.viewers_list(...) +
client.ticketing.tickets.viewers_list(...) -> PaginatedViewerList
@@ -52188,11 +51653,13 @@ Returns a list of `Viewer` objects that point to a User id or Team id that is ei ```python from merge import Merge +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.ticketing.tickets.viewers_list( ticket_id="ticket_id", cursor="cD0yMDIxLTAxLTA2KzAzJTNBMjQlM0E1My40MzQzMjYlMkIwMCUzQTAw", @@ -52232,12 +51699,7 @@ client.ticketing.tickets.viewers_list(
-**expand:** `typing.Optional[ - typing.Union[ - TicketsViewersListRequestExpandItem, - typing.Sequence[TicketsViewersListRequestExpandItem], - ] -]` — Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces. +**expand:** `typing.Optional[typing.Union[TicketsViewersListRequestExpandItem, typing.Sequence[TicketsViewersListRequestExpandItem]]]` — Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces.
@@ -52289,7 +51751,165 @@ client.ticketing.tickets.viewers_list(
-
client.ticketing.tickets.meta_patch_retrieve(...) +
client.ticketing.tickets.live_search_retrieve(...) -> typing.Iterator[bytes] +
+
+ +#### 📝 Description + +
+
+ +
+
+ +Returns a list of `Ticket` objects. +
+
+
+
+ +#### 🔌 Usage + +
+
+ +
+
+ +```python +client.ticketing.tickets.live_search_retrieve(...) +``` +
+
+
+
+ +#### ⚙️ Parameters + +
+
+ +
+
+ +**assignee_ids:** `typing.Optional[str]` — Filter tickets by assignee IDs (comma-separated) + +
+
+ +
+
+ +**assignees:** `typing.Optional[str]` — Filter tickets by assignee names (comma-separated) + +
+
+ +
+
+ +**collection_ids:** `typing.Optional[str]` — Filter tickets by collection IDs (comma-separated) + +
+
+ +
+
+ +**collections:** `typing.Optional[str]` — Filter tickets by collection names (comma-separated) + +
+
+ +
+
+ +**include_deleted_data:** `typing.Optional[bool]` — Indicates whether or not this object has been deleted in the third party platform. Full coverage deletion detection is a premium add-on. Native deletion detection is offered for free with limited coverage. [Learn more](https://docs.merge.dev/integrations/hris/supported-features/). + +
+
+ +
+
+ +**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. + +
+
+ +
+
+ +**include_shell_data:** `typing.Optional[bool]` — Whether to include shell records. Shell records are empty records (they may contain some metadata but all other fields are null). + +
+
+ +
+
+ +**name:** `typing.Optional[str]` — Filter tickets by name/title + +
+
+ +
+
+ +**remote_cursor:** `typing.Optional[str]` — Pagination cursor for remote data + +
+
+ +
+
+ +**remote_fields:** `typing.Optional[TicketsLiveSearchRetrieveRequestRemoteFields]` — Deprecated. Use show_enum_origins. + +
+
+ +
+
+ +**show_enum_origins:** `typing.Optional[TicketsLiveSearchRetrieveRequestShowEnumOrigins]` — A comma separated list of enum field names for which you'd like the original values to be returned, instead of Merge's normalized enum values. [Learn more](https://help.merge.dev/en/articles/8950958-show_enum_origins-query-parameter) + +
+
+ +
+
+ +**status:** `typing.Optional[str]` — Filter tickets by status + +
+
+ +
+
+ +**ticket_url:** `typing.Optional[str]` — Filter tickets by URL + +
+
+ +
+
+ +**request_options:** `typing.Optional[RequestOptions]` — Request-specific configuration. + +
+
+
+
+ + +
+
+
+ +
client.ticketing.tickets.meta_patch_retrieve(...) -> MetaResponse
@@ -52317,11 +51937,13 @@ Returns metadata for `Ticket` PATCHs. ```python from merge import Merge +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.ticketing.tickets.meta_patch_retrieve( id="id", ) @@ -52360,7 +51982,7 @@ client.ticketing.tickets.meta_patch_retrieve(
-
client.ticketing.tickets.meta_post_retrieve(...) +
client.ticketing.tickets.meta_post_retrieve(...) -> MetaResponse
@@ -52388,11 +52010,13 @@ Returns metadata for `Ticket` POSTs. ```python from merge import Merge +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.ticketing.tickets.meta_post_retrieve( collection_id="collection_id", ticket_type="ticket_type", @@ -52440,7 +52064,7 @@ client.ticketing.tickets.meta_post_retrieve(
-
client.ticketing.tickets.remote_field_classes_list(...) +
client.ticketing.tickets.remote_field_classes_list(...) -> PaginatedRemoteFieldClassList
@@ -52468,11 +52092,13 @@ Returns a list of `RemoteFieldClass` objects. ```python from merge import Merge +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.ticketing.tickets.remote_field_classes_list( cursor="cD0yMDIxLTAxLTA2KzAzJTNBMjQlM0E1My40MzQzMjYlMkIwMCUzQTAw", ids="ids", @@ -52575,7 +52201,7 @@ client.ticketing.tickets.remote_field_classes_list(
## Ticketing Users -
client.ticketing.users.list(...) +
client.ticketing.users.list(...) -> PaginatedUserList
@@ -52602,33 +52228,26 @@ Returns a list of `User` objects.
```python -import datetime - from merge import Merge +from merge.environment import MergeEnvironment +import datetime client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.ticketing.users.list( collections="collections", - created_after=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), - created_before=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), + created_after=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), + created_before=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), cursor="cD0yMDIxLTAxLTA2KzAzJTNBMjQlM0E1My40MzQzMjYlMkIwMCUzQTAw", email_address="email_address", include_deleted_data=True, include_remote_data=True, include_shell_data=True, - modified_after=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), - modified_before=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), + modified_after=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), + modified_before=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), page_size=1, remote_id="remote_id", roles="roles", @@ -52658,7 +52277,7 @@ client.ticketing.users.list(
-**created_after:** `typing.Optional[dt.datetime]` — If provided, will only return objects created after this datetime. +**created_after:** `typing.Optional[datetime.datetime]` — If provided, will only return objects created after this datetime.
@@ -52666,7 +52285,7 @@ client.ticketing.users.list(
-**created_before:** `typing.Optional[dt.datetime]` — If provided, will only return objects created before this datetime. +**created_before:** `typing.Optional[datetime.datetime]` — If provided, will only return objects created before this datetime.
@@ -52690,11 +52309,7 @@ client.ticketing.users.list(
-**expand:** `typing.Optional[ - typing.Union[ - UsersListRequestExpandItem, typing.Sequence[UsersListRequestExpandItem] - ] -]` — Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces. +**expand:** `typing.Optional[typing.Union[UsersListRequestExpandItem, typing.Sequence[UsersListRequestExpandItem]]]` — Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces.
@@ -52726,7 +52341,7 @@ client.ticketing.users.list(
-**modified_after:** `typing.Optional[dt.datetime]` — If provided, only objects synced by Merge after this date time will be returned. +**modified_after:** `typing.Optional[datetime.datetime]` — If provided, only objects synced by Merge after this date time will be returned.
@@ -52734,7 +52349,7 @@ client.ticketing.users.list(
-**modified_before:** `typing.Optional[dt.datetime]` — If provided, only objects synced by Merge before this date time will be returned. +**modified_before:** `typing.Optional[datetime.datetime]` — If provided, only objects synced by Merge before this date time will be returned.
@@ -52794,7 +52409,7 @@ client.ticketing.users.list(
-
client.ticketing.users.retrieve(...) +
client.ticketing.users.retrieve(...) -> User
@@ -52822,11 +52437,13 @@ Returns a `User` object with the given `id`. ```python from merge import Merge +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.ticketing.users.retrieve( id="id", include_remote_data=True, @@ -52855,12 +52472,7 @@ client.ticketing.users.retrieve(
-**expand:** `typing.Optional[ - typing.Union[ - UsersRetrieveRequestExpandItem, - typing.Sequence[UsersRetrieveRequestExpandItem], - ] -]` — Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces. +**expand:** `typing.Optional[typing.Union[UsersRetrieveRequestExpandItem, typing.Sequence[UsersRetrieveRequestExpandItem]]]` — Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces.
@@ -52897,7 +52509,7 @@ client.ticketing.users.retrieve(
## Ticketing WebhookReceivers -
client.ticketing.webhook_receivers.list() +
client.ticketing.webhook_receivers.list() -> typing.List[WebhookReceiver]
@@ -52925,11 +52537,13 @@ Returns a list of `WebhookReceiver` objects. ```python from merge import Merge +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.ticketing.webhook_receivers.list() ``` @@ -52958,7 +52572,7 @@ client.ticketing.webhook_receivers.list()
-
client.ticketing.webhook_receivers.create(...) +
client.ticketing.webhook_receivers.create(...) -> WebhookReceiver
@@ -52986,11 +52600,13 @@ Creates a `WebhookReceiver` object with the given values. ```python from merge import Merge +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.ticketing.webhook_receivers.create( event="event", is_active=True, @@ -53047,7 +52663,7 @@ client.ticketing.webhook_receivers.create(
## Calendar AccountDetails -
client.calendar.account_details.retrieve() +
client.calendar.account_details.retrieve() -> AccountDetails
@@ -53075,11 +52691,13 @@ Get details for a linked account. ```python from merge import Merge +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.calendar.account_details.retrieve() ``` @@ -53109,7 +52727,7 @@ client.calendar.account_details.retrieve()
## Calendar AccountToken -
client.calendar.account_token.retrieve(...) +
client.calendar.account_token.retrieve(...) -> AccountToken
@@ -53137,11 +52755,13 @@ Returns the account token for the end user with the provided public token. ```python from merge import Merge +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.calendar.account_token.retrieve( public_token="public_token", ) @@ -53180,7 +52800,7 @@ client.calendar.account_token.retrieve(
-
client.calendar.account_token.regenerate_create() +
client.calendar.account_token.regenerate_create() -> RegenerateAccountToken
@@ -53208,11 +52828,13 @@ Exchange Linked Account account tokens. ```python from merge import Merge +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.calendar.account_token.regenerate_create() ``` @@ -53242,7 +52864,7 @@ client.calendar.account_token.regenerate_create()
## Calendar AsyncPassthrough -
client.calendar.async_passthrough.create(...) +
client.calendar.async_passthrough.create(...) -> AsyncPassthroughReciept
@@ -53270,15 +52892,17 @@ Asynchronously pull data from an endpoint not currently supported by Merge. ```python from merge import Merge -from merge.resources.calendar import DataPassthroughRequest, MethodEnum +from merge.environment import MergeEnvironment +from merge.calendar import DataPassthroughRequest client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.calendar.async_passthrough.create( request=DataPassthroughRequest( - method=MethodEnum.GET, + method="GET", path="/scooters", ), ) @@ -53317,7 +52941,7 @@ client.calendar.async_passthrough.create(
-
client.calendar.async_passthrough.retrieve(...) +
client.calendar.async_passthrough.retrieve(...) -> AsyncPassthroughRetrieveResponse
@@ -53345,11 +52969,13 @@ Retrieves data from earlier async-passthrough POST request ```python from merge import Merge +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.calendar.async_passthrough.retrieve( async_passthrough_receipt_id="async_passthrough_receipt_id", ) @@ -53389,7 +53015,7 @@ client.calendar.async_passthrough.retrieve(
## Calendar AuditTrail -
client.calendar.audit_trail.list(...) +
client.calendar.audit_trail.list(...) -> PaginatedAuditLogEventList
@@ -53417,11 +53043,13 @@ Gets a list of audit trail events. ```python from merge import Merge +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.calendar.audit_trail.list( cursor="cD0yMDIxLTAxLTA2KzAzJTNBMjQlM0E1My40MzQzMjYlMkIwMCUzQTAw", end_date="end_date", @@ -53506,7 +53134,7 @@ client.calendar.audit_trail.list(
## Calendar AvailableActions -
client.calendar.available_actions.retrieve() +
client.calendar.available_actions.retrieve() -> AvailableActions
@@ -53534,11 +53162,13 @@ Returns a list of models and actions available for an account. ```python from merge import Merge +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.calendar.available_actions.retrieve() ``` @@ -53568,7 +53198,7 @@ client.calendar.available_actions.retrieve()
## Calendar Calendars -
client.calendar.calendars.list(...) +
client.calendar.calendars.list(...) -> PaginatedCalendarList
@@ -53595,39 +53225,29 @@ Returns a list of `Calendar` objects.
```python -import datetime - from merge import Merge -from merge.resources.calendar.resources.calendars import ( - CalendarsListRequestType, -) +from merge.environment import MergeEnvironment +import datetime client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.calendar.calendars.list( - created_after=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), - created_before=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), + created_after=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), + created_before=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), cursor="cD0yMDIxLTAxLTA2KzAzJTNBMjQlM0E1My40MzQzMjYlMkIwMCUzQTAw", include_deleted_data=True, include_remote_data=True, include_shell_data=True, - modified_after=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), - modified_before=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), + modified_after=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), + modified_before=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), name="name", owner_email_address="owner_email_address", page_size=1, remote_id="remote_id", - type=CalendarsListRequestType.EMPTY, + type="", ) ``` @@ -53644,7 +53264,7 @@ client.calendar.calendars.list(
-**created_after:** `typing.Optional[dt.datetime]` — If provided, will only return objects created after this datetime. +**created_after:** `typing.Optional[datetime.datetime]` — If provided, will only return objects created after this datetime.
@@ -53652,7 +53272,7 @@ client.calendar.calendars.list(
-**created_before:** `typing.Optional[dt.datetime]` — If provided, will only return objects created before this datetime. +**created_before:** `typing.Optional[datetime.datetime]` — If provided, will only return objects created before this datetime.
@@ -53668,12 +53288,7 @@ client.calendar.calendars.list(
-**expand:** `typing.Optional[ - typing.Union[ - typing.Literal["permissions"], - typing.Sequence[typing.Literal["permissions"]], - ] -]` — Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces. +**expand:** `typing.Optional[typing.Union[typing.Literal, typing.Sequence[typing.Literal]]]` — Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces.
@@ -53705,7 +53320,7 @@ client.calendar.calendars.list(
-**modified_after:** `typing.Optional[dt.datetime]` — If provided, only objects synced by Merge after this date time will be returned. +**modified_after:** `typing.Optional[datetime.datetime]` — If provided, only objects synced by Merge after this date time will be returned.
@@ -53713,7 +53328,7 @@ client.calendar.calendars.list(
-**modified_before:** `typing.Optional[dt.datetime]` — If provided, only objects synced by Merge before this date time will be returned. +**modified_before:** `typing.Optional[datetime.datetime]` — If provided, only objects synced by Merge before this date time will be returned.
@@ -53773,7 +53388,7 @@ client.calendar.calendars.list(
-
client.calendar.calendars.retrieve(...) +
client.calendar.calendars.retrieve(...) -> Calendar
@@ -53801,11 +53416,13 @@ Returns a `Calendar` object with the given `id`. ```python from merge import Merge +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.calendar.calendars.retrieve( id="id", include_remote_data=True, @@ -53834,12 +53451,7 @@ client.calendar.calendars.retrieve(
-**expand:** `typing.Optional[ - typing.Union[ - typing.Literal["permissions"], - typing.Sequence[typing.Literal["permissions"]], - ] -]` — Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces. +**expand:** `typing.Optional[typing.Union[typing.Literal, typing.Sequence[typing.Literal]]]` — Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces.
@@ -53876,7 +53488,7 @@ client.calendar.calendars.retrieve(
## Calendar Scopes -
client.calendar.scopes.default_scopes_retrieve() +
client.calendar.scopes.default_scopes_retrieve() -> CommonModelScopeApi
@@ -53904,11 +53516,13 @@ Get the default permissions for Merge Common Models and fields across all Linked ```python from merge import Merge +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.calendar.scopes.default_scopes_retrieve() ``` @@ -53937,7 +53551,7 @@ client.calendar.scopes.default_scopes_retrieve()
-
client.calendar.scopes.linked_account_scopes_retrieve() +
client.calendar.scopes.linked_account_scopes_retrieve() -> CommonModelScopeApi
@@ -53965,11 +53579,13 @@ Get all available permissions for Merge Common Models and fields for a single Li ```python from merge import Merge +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.calendar.scopes.linked_account_scopes_retrieve() ``` @@ -53998,7 +53614,7 @@ client.calendar.scopes.linked_account_scopes_retrieve()
-
client.calendar.scopes.linked_account_scopes_create(...) +
client.calendar.scopes.linked_account_scopes_create(...) -> CommonModelScopeApi
@@ -54026,16 +53642,14 @@ Update permissions for any Common Model or field for a single Linked Account. An ```python from merge import Merge -from merge.resources.calendar import ( - FieldPermissionDeserializerRequest, - IndividualCommonModelScopeDeserializerRequest, - ModelPermissionDeserializerRequest, -) +from merge.environment import MergeEnvironment +from merge.calendar import IndividualCommonModelScopeDeserializerRequest, ModelPermissionDeserializerRequest, FieldPermissionDeserializerRequest client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.calendar.scopes.linked_account_scopes_create( common_models=[ IndividualCommonModelScopeDeserializerRequest( @@ -54046,11 +53660,16 @@ client.calendar.scopes.linked_account_scopes_create( ), "WRITE": ModelPermissionDeserializerRequest( is_enabled=False, - ), + ) }, field_permissions=FieldPermissionDeserializerRequest( - enabled_fields=["avatar", "home_location"], - disabled_fields=["work_location"], + enabled_fields=[ + "avatar", + "home_location" + ], + disabled_fields=[ + "work_location" + ], ), ), IndividualCommonModelScopeDeserializerRequest( @@ -54060,7 +53679,7 @@ client.calendar.scopes.linked_account_scopes_create( is_enabled=False, ) }, - ), + ) ], ) @@ -54078,7 +53697,7 @@ client.calendar.scopes.linked_account_scopes_create(
-**common_models:** `typing.Sequence[IndividualCommonModelScopeDeserializerRequest]` — The common models you want to update the scopes for +**common_models:** `typing.List[IndividualCommonModelScopeDeserializerRequest]` — The common models you want to update the scopes for
@@ -54099,7 +53718,7 @@ client.calendar.scopes.linked_account_scopes_create(
## Calendar DeleteAccount -
client.calendar.delete_account.delete() +
client.calendar.delete_account.delete()
@@ -54127,11 +53746,13 @@ Delete a linked account. ```python from merge import Merge +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.calendar.delete_account.delete() ``` @@ -54161,7 +53782,7 @@ client.calendar.delete_account.delete()
## Calendar Events -
client.calendar.events.list(...) +
client.calendar.events.list(...) -> PaginatedEventList
@@ -54188,22 +53809,19 @@ Returns a list of `Event` objects.
```python -import datetime - from merge import Merge +from merge.environment import MergeEnvironment +import datetime client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.calendar.events.list( calendar_id="calendar_id", - created_after=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), - created_before=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), + created_after=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), + created_before=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), cursor="cD0yMDIxLTAxLTA2KzAzJTNBMjQlM0E1My40MzQzMjYlMkIwMCUzQTAw", include_cancelled="include_cancelled", include_deleted_data=True, @@ -54211,22 +53829,14 @@ client.calendar.events.list( include_shell_data=True, invitee_id="invitee_id", is_private="is_private", - modified_after=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), - modified_before=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), + modified_after=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), + modified_before=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), name="name", page_size=1, remote_id="remote_id", series_id="series_id", - starts_after=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), - starts_before=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), + starts_after=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), + starts_before=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), ) ``` @@ -54251,7 +53861,7 @@ client.calendar.events.list(
-**created_after:** `typing.Optional[dt.datetime]` — If provided, will only return objects created after this datetime. +**created_after:** `typing.Optional[datetime.datetime]` — If provided, will only return objects created after this datetime.
@@ -54259,7 +53869,7 @@ client.calendar.events.list(
-**created_before:** `typing.Optional[dt.datetime]` — If provided, will only return objects created before this datetime. +**created_before:** `typing.Optional[datetime.datetime]` — If provided, will only return objects created before this datetime.
@@ -54275,12 +53885,7 @@ client.calendar.events.list(
-**expand:** `typing.Optional[ - typing.Union[ - EventsListRequestExpandItem, - typing.Sequence[EventsListRequestExpandItem], - ] -]` — Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces. +**expand:** `typing.Optional[typing.Union[EventsListRequestExpandItem, typing.Sequence[EventsListRequestExpandItem]]]` — Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces.
@@ -54336,7 +53941,7 @@ client.calendar.events.list(
-**modified_after:** `typing.Optional[dt.datetime]` — If provided, only objects synced by Merge after this date time will be returned. +**modified_after:** `typing.Optional[datetime.datetime]` — If provided, only objects synced by Merge after this date time will be returned.
@@ -54344,7 +53949,7 @@ client.calendar.events.list(
-**modified_before:** `typing.Optional[dt.datetime]` — If provided, only objects synced by Merge before this date time will be returned. +**modified_before:** `typing.Optional[datetime.datetime]` — If provided, only objects synced by Merge before this date time will be returned.
@@ -54384,7 +53989,7 @@ client.calendar.events.list(
-**starts_after:** `typing.Optional[dt.datetime]` — If provided, will only return Events with a start date after this datetime. +**starts_after:** `typing.Optional[datetime.datetime]` — If provided, will only return Events with a start date after this datetime.
@@ -54392,7 +53997,7 @@ client.calendar.events.list(
-**starts_before:** `typing.Optional[dt.datetime]` — If provided, will only return Events with a start date before this datetime. +**starts_before:** `typing.Optional[datetime.datetime]` — If provided, will only return Events with a start date before this datetime.
@@ -54412,7 +54017,7 @@ client.calendar.events.list(
-
client.calendar.events.invitees_list(...) +
client.calendar.events.invitees_list(...) -> PaginatedInviteeList
@@ -54440,11 +54045,13 @@ Returns a list of `Invitee` objects. ```python from merge import Merge +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.calendar.events.invitees_list( event_id="event_id", cursor="cD0yMDIxLTAxLTA2KzAzJTNBMjQlM0E1My40MzQzMjYlMkIwMCUzQTAw", @@ -54484,12 +54091,7 @@ client.calendar.events.invitees_list(
-**expand:** `typing.Optional[ - typing.Union[ - EventsInviteesListRequestExpandItem, - typing.Sequence[EventsInviteesListRequestExpandItem], - ] -]` — Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces. +**expand:** `typing.Optional[typing.Union[EventsInviteesListRequestExpandItem, typing.Sequence[EventsInviteesListRequestExpandItem]]]` — Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces.
@@ -54541,7 +54143,7 @@ client.calendar.events.invitees_list(
-
client.calendar.events.locations_list(...) +
client.calendar.events.locations_list(...) -> PaginatedLocationList
@@ -54569,11 +54171,13 @@ Returns a list of `Location` objects. ```python from merge import Merge +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.calendar.events.locations_list( event_id="event_id", cursor="cD0yMDIxLTAxLTA2KzAzJTNBMjQlM0E1My40MzQzMjYlMkIwMCUzQTAw", @@ -54613,11 +54217,7 @@ client.calendar.events.locations_list(
-**expand:** `typing.Optional[ - typing.Union[ - typing.Literal["event"], typing.Sequence[typing.Literal["event"]] - ] -]` — Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces. +**expand:** `typing.Optional[typing.Union[typing.Literal, typing.Sequence[typing.Literal]]]` — Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces.
@@ -54669,7 +54269,7 @@ client.calendar.events.locations_list(
-
client.calendar.events.retrieve(...) +
client.calendar.events.retrieve(...) -> Event
@@ -54697,11 +54297,13 @@ Returns an `Event` object with the given `id`. ```python from merge import Merge +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.calendar.events.retrieve( id="id", include_remote_data=True, @@ -54730,12 +54332,7 @@ client.calendar.events.retrieve(
-**expand:** `typing.Optional[ - typing.Union[ - EventsRetrieveRequestExpandItem, - typing.Sequence[EventsRetrieveRequestExpandItem], - ] -]` — Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces. +**expand:** `typing.Optional[typing.Union[EventsRetrieveRequestExpandItem, typing.Sequence[EventsRetrieveRequestExpandItem]]]` — Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces.
@@ -54772,7 +54369,7 @@ client.calendar.events.retrieve(
## Calendar FieldMapping -
client.calendar.field_mapping.field_mappings_retrieve(...) +
client.calendar.field_mapping.field_mappings_retrieve(...) -> FieldMappingApiInstanceResponse
@@ -54800,11 +54397,13 @@ Get all Field Mappings for this Linked Account. Field Mappings are mappings betw ```python from merge import Merge +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.calendar.field_mapping.field_mappings_retrieve( exclude_remote_field_metadata=True, ) @@ -54843,7 +54442,7 @@ client.calendar.field_mapping.field_mappings_retrieve(
-
client.calendar.field_mapping.field_mappings_create(...) +
client.calendar.field_mapping.field_mappings_create(...) -> FieldMappingInstanceResponse
@@ -54871,15 +54470,19 @@ Create new Field Mappings that will be available after the next scheduled sync. ```python from merge import Merge +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.calendar.field_mapping.field_mappings_create( exclude_remote_field_metadata=True, remote_data_iteration_count=1, - remote_field_traversal_path=["example_remote_field"], + remote_field_traversal_path=[ + "example_remote_field" + ], remote_method="GET", remote_url_path="/example-url-path", common_model_name="ExampleCommonModel", @@ -54899,7 +54502,7 @@ client.calendar.field_mapping.field_mappings_create(
-**remote_field_traversal_path:** `typing.Sequence[typing.Optional[typing.Any]]` — The field traversal path of the remote field listed when you hit the GET /remote-fields endpoint. +**remote_field_traversal_path:** `typing.List[typing.Any]` — The field traversal path of the remote field listed when you hit the GET /remote-fields endpoint.
@@ -55007,7 +54610,7 @@ client.calendar.field_mapping.field_mappings_create(
-
client.calendar.field_mapping.field_mappings_destroy(...) +
client.calendar.field_mapping.field_mappings_destroy(...) -> FieldMappingInstanceResponse
@@ -55035,11 +54638,13 @@ Deletes Field Mappings for a Linked Account. All data related to this Field Mapp ```python from merge import Merge +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.calendar.field_mapping.field_mappings_destroy( field_mapping_id="field_mapping_id", ) @@ -55078,7 +54683,7 @@ client.calendar.field_mapping.field_mappings_destroy(
-
client.calendar.field_mapping.field_mappings_partial_update(...) +
client.calendar.field_mapping.field_mappings_partial_update(...) -> FieldMappingInstanceResponse
@@ -55106,11 +54711,13 @@ Create or update existing Field Mappings for a Linked Account. Changes will be r ```python from merge import Merge +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.calendar.field_mapping.field_mappings_partial_update( field_mapping_id="field_mapping_id", remote_data_iteration_count=1, @@ -55146,7 +54753,7 @@ client.calendar.field_mapping.field_mappings_partial_update(
-**remote_field_traversal_path:** `typing.Optional[typing.Sequence[typing.Optional[typing.Any]]]` — The field traversal path of the remote field listed when you hit the GET /remote-fields endpoint. +**remote_field_traversal_path:** `typing.Optional[typing.List[typing.Any]]` — The field traversal path of the remote field listed when you hit the GET /remote-fields endpoint.
@@ -55198,7 +54805,7 @@ client.calendar.field_mapping.field_mappings_partial_update(
-
client.calendar.field_mapping.remote_fields_retrieve(...) +
client.calendar.field_mapping.remote_fields_retrieve(...) -> RemoteFieldApiResponse
@@ -55226,11 +54833,13 @@ Get all remote fields for a Linked Account. Remote fields are third-party fields ```python from merge import Merge +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.calendar.field_mapping.remote_fields_retrieve( common_models="common_models", include_example_values="include_example_values", @@ -55278,7 +54887,7 @@ client.calendar.field_mapping.remote_fields_retrieve(
-
client.calendar.field_mapping.target_fields_retrieve() +
client.calendar.field_mapping.target_fields_retrieve() -> ExternalTargetFieldApiResponse
@@ -55306,11 +54915,13 @@ Get all organization-wide Target Fields, this will not include any Linked Accoun ```python from merge import Merge +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.calendar.field_mapping.target_fields_retrieve() ``` @@ -55339,7 +54950,7 @@ client.calendar.field_mapping.target_fields_retrieve()
-
client.calendar.field_mapping.target_fields_create(...) +
client.calendar.field_mapping.target_fields_create(...) -> ExternalTargetFieldApiResponse
@@ -55367,11 +54978,13 @@ Create a new organization-wide Target Field. Target Fields are custom fields tha ```python from merge import Merge +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.calendar.field_mapping.target_fields_create( name="employee_favorite_team", common_model="Employee", @@ -55428,7 +55041,7 @@ client.calendar.field_mapping.target_fields_create(
## Calendar GenerateKey -
client.calendar.generate_key.create(...) +
client.calendar.generate_key.create(...) -> RemoteKey
@@ -55456,11 +55069,13 @@ Create a remote key. ```python from merge import Merge +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.calendar.generate_key.create( name="Remote Deployment Key 1", ) @@ -55500,7 +55115,7 @@ client.calendar.generate_key.create(
## Calendar Groups -
client.calendar.groups.list(...) +
client.calendar.groups.list(...) -> PaginatedGroupList
@@ -55527,33 +55142,26 @@ Returns a list of `Group` objects.
```python -import datetime - from merge import Merge +from merge.environment import MergeEnvironment +import datetime client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.calendar.groups.list( child_group_id="child_group_id", - created_after=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), - created_before=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), + created_after=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), + created_before=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), cursor="cD0yMDIxLTAxLTA2KzAzJTNBMjQlM0E1My40MzQzMjYlMkIwMCUzQTAw", email_address="email_address", include_deleted_data=True, include_remote_data=True, include_shell_data=True, - modified_after=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), - modified_before=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), + modified_after=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), + modified_before=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), name="name", page_size=1, remote_id="remote_id", @@ -55582,7 +55190,7 @@ client.calendar.groups.list(
-**created_after:** `typing.Optional[dt.datetime]` — If provided, will only return objects created after this datetime. +**created_after:** `typing.Optional[datetime.datetime]` — If provided, will only return objects created after this datetime.
@@ -55590,7 +55198,7 @@ client.calendar.groups.list(
-**created_before:** `typing.Optional[dt.datetime]` — If provided, will only return objects created before this datetime. +**created_before:** `typing.Optional[datetime.datetime]` — If provided, will only return objects created before this datetime.
@@ -55614,12 +55222,7 @@ client.calendar.groups.list(
-**expand:** `typing.Optional[ - typing.Union[ - GroupsListRequestExpandItem, - typing.Sequence[GroupsListRequestExpandItem], - ] -]` — Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces. +**expand:** `typing.Optional[typing.Union[GroupsListRequestExpandItem, typing.Sequence[GroupsListRequestExpandItem]]]` — Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces.
@@ -55651,7 +55254,7 @@ client.calendar.groups.list(
-**modified_after:** `typing.Optional[dt.datetime]` — If provided, only objects synced by Merge after this date time will be returned. +**modified_after:** `typing.Optional[datetime.datetime]` — If provided, only objects synced by Merge after this date time will be returned.
@@ -55659,7 +55262,7 @@ client.calendar.groups.list(
-**modified_before:** `typing.Optional[dt.datetime]` — If provided, only objects synced by Merge before this date time will be returned. +**modified_before:** `typing.Optional[datetime.datetime]` — If provided, only objects synced by Merge before this date time will be returned.
@@ -55711,7 +55314,7 @@ client.calendar.groups.list(
-
client.calendar.groups.retrieve(...) +
client.calendar.groups.retrieve(...) -> Group
@@ -55739,11 +55342,13 @@ Returns a `Group` object with the given `id`. ```python from merge import Merge +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.calendar.groups.retrieve( id="id", include_remote_data=True, @@ -55772,12 +55377,7 @@ client.calendar.groups.retrieve(
-**expand:** `typing.Optional[ - typing.Union[ - GroupsRetrieveRequestExpandItem, - typing.Sequence[GroupsRetrieveRequestExpandItem], - ] -]` — Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces. +**expand:** `typing.Optional[typing.Union[GroupsRetrieveRequestExpandItem, typing.Sequence[GroupsRetrieveRequestExpandItem]]]` — Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces.
@@ -55814,7 +55414,7 @@ client.calendar.groups.retrieve(
## Calendar Issues -
client.calendar.issues.list(...) +
client.calendar.issues.list(...) -> PaginatedIssueList
@@ -55841,38 +55441,30 @@ Gets all issues for Organization.
```python -import datetime - from merge import Merge -from merge.resources.calendar.resources.issues import IssuesListRequestStatus +from merge.environment import MergeEnvironment +import datetime client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.calendar.issues.list( account_token="account_token", cursor="cD0yMDIxLTAxLTA2KzAzJTNBMjQlM0E1My40MzQzMjYlMkIwMCUzQTAw", end_date="end_date", end_user_organization_name="end_user_organization_name", - first_incident_time_after=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), - first_incident_time_before=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), + first_incident_time_after=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), + first_incident_time_before=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), include_muted="include_muted", integration_name="integration_name", - last_incident_time_after=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), - last_incident_time_before=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), + last_incident_time_after=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), + last_incident_time_before=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), linked_account_id="linked_account_id", page_size=1, start_date="start_date", - status=IssuesListRequestStatus.ONGOING, + status="ONGOING", ) ``` @@ -55921,7 +55513,7 @@ client.calendar.issues.list(
-**first_incident_time_after:** `typing.Optional[dt.datetime]` — If provided, will only return issues whose first incident time was after this datetime. +**first_incident_time_after:** `typing.Optional[datetime.datetime]` — If provided, will only return issues whose first incident time was after this datetime.
@@ -55929,7 +55521,7 @@ client.calendar.issues.list(
-**first_incident_time_before:** `typing.Optional[dt.datetime]` — If provided, will only return issues whose first incident time was before this datetime. +**first_incident_time_before:** `typing.Optional[datetime.datetime]` — If provided, will only return issues whose first incident time was before this datetime.
@@ -55953,7 +55545,7 @@ client.calendar.issues.list(
-**last_incident_time_after:** `typing.Optional[dt.datetime]` — If provided, will only return issues whose last incident time was after this datetime. +**last_incident_time_after:** `typing.Optional[datetime.datetime]` — If provided, will only return issues whose last incident time was after this datetime.
@@ -55961,7 +55553,7 @@ client.calendar.issues.list(
-**last_incident_time_before:** `typing.Optional[dt.datetime]` — If provided, will only return issues whose last incident time was before this datetime. +**last_incident_time_before:** `typing.Optional[datetime.datetime]` — If provided, will only return issues whose last incident time was before this datetime.
@@ -56013,7 +55605,7 @@ client.calendar.issues.list(
-
client.calendar.issues.retrieve(...) +
client.calendar.issues.retrieve(...) -> Issue
@@ -56041,11 +55633,13 @@ Get a specific issue. ```python from merge import Merge +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.calendar.issues.retrieve( id="id", ) @@ -56085,7 +55679,7 @@ client.calendar.issues.retrieve(
## Calendar LinkToken -
client.calendar.link_token.create(...) +
client.calendar.link_token.create(...) -> LinkToken
@@ -56113,17 +55707,21 @@ Creates a link token to be used when linking a new end user. The link token expi ```python from merge import Merge -from merge.resources.calendar import CategoriesEnum +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.calendar.link_token.create( end_user_email_address="example@gmail.com", end_user_organization_name="Test Organization", end_user_origin_id="12345", - categories=[CategoriesEnum.HRIS, CategoriesEnum.ATS], + categories=[ + "hris", + "ats" + ], ) ``` @@ -56164,7 +55762,7 @@ client.calendar.link_token.create(
-**categories:** `typing.Sequence[CategoriesEnum]` — The integration categories to show in Merge Link. +**categories:** `typing.List[CategoriesEnum]` — The integration categories to show in Merge Link.
@@ -56204,7 +55802,7 @@ client.calendar.link_token.create(
-**common_models:** `typing.Optional[typing.Sequence[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. +**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.
@@ -56212,14 +55810,7 @@ client.calendar.link_token.create(
-**category_common_model_scopes:** `typing.Optional[ - typing.Dict[ - str, - typing.Optional[ - typing.Sequence[IndividualCommonModelScopeDeserializerRequest] - ], - ] -]` — When creating a Link Token, you can set permissions for Common Models that will apply to the account that is going to be linked. Any model or field not specified in link token payload will default to existing settings. +**category_common_model_scopes:** `typing.Optional[typing.Dict[str, typing.Optional[typing.List[IndividualCommonModelScopeDeserializerRequest]]]]` — When creating a Link Token, you can set permissions for Common Models that will apply to the account that is going to be linked. Any model or field not specified in link token payload will default to existing settings.
@@ -56243,7 +55834,7 @@ client.calendar.link_token.create(
-**integration_specific_config:** `typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]]` — A JSON object containing integration-specific configuration options. +**integration_specific_config:** `typing.Optional[typing.Dict[str, typing.Any]]` — A JSON object containing integration-specific configuration options.
@@ -56296,7 +55887,7 @@ client.calendar.link_token.create(
## Calendar LinkedAccounts -
client.calendar.linked_accounts.list(...) +
client.calendar.linked_accounts.list(...) -> PaginatedAccountDetailsAndActionsList
@@ -56324,16 +55915,15 @@ List linked accounts for your organization. ```python from merge import Merge -from merge.resources.calendar.resources.linked_accounts import ( - LinkedAccountsListRequestCategory, -) +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.calendar.linked_accounts.list( - category=LinkedAccountsListRequestCategory.ACCOUNTING, + category="accounting", cursor="cD0yMDIxLTAxLTA2KzAzJTNBMjQlM0E1My40MzQzMjYlMkIwMCUzQTAw", end_user_email_address="end_user_email_address", end_user_organization_name="end_user_organization_name", @@ -56478,7 +56068,7 @@ client.calendar.linked_accounts.list(
-
client.calendar.linked_accounts.partial_update(...) +
client.calendar.linked_accounts.partial_update(...) -> LinkedAccountPatchResponse
@@ -56506,11 +56096,13 @@ Update a linked account. ```python from merge import Merge +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.calendar.linked_accounts.partial_update( linked_account_id="linked_account_id", ) @@ -56558,7 +56150,7 @@ client.calendar.linked_accounts.partial_update(
## Calendar Passthrough -
client.calendar.passthrough.create(...) +
client.calendar.passthrough.create(...) -> RemoteResponse
@@ -56586,15 +56178,17 @@ Pull data from an endpoint not currently supported by Merge. ```python from merge import Merge -from merge.resources.calendar import DataPassthroughRequest, MethodEnum +from merge.environment import MergeEnvironment +from merge.calendar import DataPassthroughRequest client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.calendar.passthrough.create( request=DataPassthroughRequest( - method=MethodEnum.GET, + method="GET", path="/scooters", ), ) @@ -56634,7 +56228,7 @@ client.calendar.passthrough.create(
## Calendar RegenerateKey -
client.calendar.regenerate_key.create(...) +
client.calendar.regenerate_key.create(...) -> RemoteKey
@@ -56662,11 +56256,13 @@ Exchange remote keys. ```python from merge import Merge +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.calendar.regenerate_key.create( name="Remote Deployment Key 1", ) @@ -56706,7 +56302,7 @@ client.calendar.regenerate_key.create(
## Calendar Series -
client.calendar.series.list(...) +
client.calendar.series.list(...) -> PaginatedSeriesList
@@ -56733,41 +56329,30 @@ Returns a list of `Series` objects.
```python -import datetime - from merge import Merge +from merge.environment import MergeEnvironment +import datetime client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.calendar.series.list( calendar_id="calendar_id", - created_after=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), - created_before=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), + created_after=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), + created_before=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), cursor="cD0yMDIxLTAxLTA2KzAzJTNBMjQlM0E1My40MzQzMjYlMkIwMCUzQTAw", include_deleted_data=True, include_remote_data=True, include_shell_data=True, - modified_after=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), - modified_before=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), + modified_after=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), + modified_before=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), organizer_email_address="organizer_email_address", page_size=1, remote_id="remote_id", - starts_after=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), - starts_before=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), + starts_after=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), + starts_before=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), ) ``` @@ -56792,7 +56377,7 @@ client.calendar.series.list(
-**created_after:** `typing.Optional[dt.datetime]` — If provided, will only return objects created after this datetime. +**created_after:** `typing.Optional[datetime.datetime]` — If provided, will only return objects created after this datetime.
@@ -56800,7 +56385,7 @@ client.calendar.series.list(
-**created_before:** `typing.Optional[dt.datetime]` — If provided, will only return objects created before this datetime. +**created_before:** `typing.Optional[datetime.datetime]` — If provided, will only return objects created before this datetime.
@@ -56816,11 +56401,7 @@ client.calendar.series.list(
-**expand:** `typing.Optional[ - typing.Union[ - typing.Literal["calendar"], typing.Sequence[typing.Literal["calendar"]] - ] -]` — Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces. +**expand:** `typing.Optional[typing.Union[typing.Literal, typing.Sequence[typing.Literal]]]` — Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces.
@@ -56852,7 +56433,7 @@ client.calendar.series.list(
-**modified_after:** `typing.Optional[dt.datetime]` — If provided, only objects synced by Merge after this date time will be returned. +**modified_after:** `typing.Optional[datetime.datetime]` — If provided, only objects synced by Merge after this date time will be returned.
@@ -56860,7 +56441,7 @@ client.calendar.series.list(
-**modified_before:** `typing.Optional[dt.datetime]` — If provided, only objects synced by Merge before this date time will be returned. +**modified_before:** `typing.Optional[datetime.datetime]` — If provided, only objects synced by Merge before this date time will be returned.
@@ -56892,7 +56473,7 @@ client.calendar.series.list(
-**starts_after:** `typing.Optional[dt.datetime]` — If provided, will only return Series with a start date after this datetime. +**starts_after:** `typing.Optional[datetime.datetime]` — If provided, will only return Series with a start date after this datetime.
@@ -56900,7 +56481,7 @@ client.calendar.series.list(
-**starts_before:** `typing.Optional[dt.datetime]` — If provided, will only return Series with a start date before this datetime. +**starts_before:** `typing.Optional[datetime.datetime]` — If provided, will only return Series with a start date before this datetime.
@@ -56920,7 +56501,7 @@ client.calendar.series.list(
-
client.calendar.series.retrieve(...) +
client.calendar.series.retrieve(...) -> Series
@@ -56948,11 +56529,13 @@ Returns a `Series` object with the given `id`. ```python from merge import Merge +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.calendar.series.retrieve( id="id", include_remote_data=True, @@ -56981,11 +56564,7 @@ client.calendar.series.retrieve(
-**expand:** `typing.Optional[ - typing.Union[ - typing.Literal["calendar"], typing.Sequence[typing.Literal["calendar"]] - ] -]` — Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces. +**expand:** `typing.Optional[typing.Union[typing.Literal, typing.Sequence[typing.Literal]]]` — Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces.
@@ -57022,7 +56601,7 @@ client.calendar.series.retrieve(
## Calendar SyncStatus -
client.calendar.sync_status.list(...) +
client.calendar.sync_status.list(...) -> PaginatedSyncStatusList
@@ -57050,11 +56629,13 @@ Get sync status for the current sync and the most recently finished sync. `last_ ```python from merge import Merge +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.calendar.sync_status.list( cursor="cD0yMDIxLTAxLTA2KzAzJTNBMjQlM0E1My40MzQzMjYlMkIwMCUzQTAw", page_size=1, @@ -57103,7 +56684,7 @@ client.calendar.sync_status.list(
## Calendar ForceResync -
client.calendar.force_resync.sync_status_resync_create() +
client.calendar.force_resync.sync_status_resync_create() -> typing.List[SyncStatus]
@@ -57131,11 +56712,13 @@ Force re-sync of all models. This endpoint is available for monthly, quarterly, ```python from merge import Merge +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.calendar.force_resync.sync_status_resync_create() ``` @@ -57165,7 +56748,7 @@ client.calendar.force_resync.sync_status_resync_create()
## Calendar Users -
client.calendar.users.list(...) +
client.calendar.users.list(...) -> PaginatedUserList
@@ -57192,32 +56775,25 @@ Returns a list of `User` objects.
```python -import datetime - from merge import Merge +from merge.environment import MergeEnvironment +import datetime client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.calendar.users.list( - created_after=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), - created_before=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), + created_after=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), + created_before=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), cursor="cD0yMDIxLTAxLTA2KzAzJTNBMjQlM0E1My40MzQzMjYlMkIwMCUzQTAw", email_address="email_address", include_deleted_data=True, include_remote_data=True, include_shell_data=True, - modified_after=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), - modified_before=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), + modified_after=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), + modified_before=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), name="name", page_size=1, remote_id="remote_id", @@ -57237,7 +56813,7 @@ client.calendar.users.list(
-**created_after:** `typing.Optional[dt.datetime]` — If provided, will only return objects created after this datetime. +**created_after:** `typing.Optional[datetime.datetime]` — If provided, will only return objects created after this datetime.
@@ -57245,7 +56821,7 @@ client.calendar.users.list(
-**created_before:** `typing.Optional[dt.datetime]` — If provided, will only return objects created before this datetime. +**created_before:** `typing.Optional[datetime.datetime]` — If provided, will only return objects created before this datetime.
@@ -57269,11 +56845,7 @@ client.calendar.users.list(
-**expand:** `typing.Optional[ - typing.Union[ - typing.Literal["groups"], typing.Sequence[typing.Literal["groups"]] - ] -]` — Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces. +**expand:** `typing.Optional[typing.Union[typing.Literal, typing.Sequence[typing.Literal]]]` — Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces.
@@ -57305,7 +56877,7 @@ client.calendar.users.list(
-**modified_after:** `typing.Optional[dt.datetime]` — If provided, only objects synced by Merge after this date time will be returned. +**modified_after:** `typing.Optional[datetime.datetime]` — If provided, only objects synced by Merge after this date time will be returned.
@@ -57313,7 +56885,7 @@ client.calendar.users.list(
-**modified_before:** `typing.Optional[dt.datetime]` — If provided, only objects synced by Merge before this date time will be returned. +**modified_before:** `typing.Optional[datetime.datetime]` — If provided, only objects synced by Merge before this date time will be returned.
@@ -57357,7 +56929,7 @@ client.calendar.users.list(
-
client.calendar.users.retrieve(...) +
client.calendar.users.retrieve(...) -> User
@@ -57385,11 +56957,13 @@ Returns a `User` object with the given `id`. ```python from merge import Merge +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.calendar.users.retrieve( id="id", include_remote_data=True, @@ -57418,11 +56992,7 @@ client.calendar.users.retrieve(
-**expand:** `typing.Optional[ - typing.Union[ - typing.Literal["groups"], typing.Sequence[typing.Literal["groups"]] - ] -]` — Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces. +**expand:** `typing.Optional[typing.Union[typing.Literal, typing.Sequence[typing.Literal]]]` — Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces.
@@ -57459,7 +57029,7 @@ client.calendar.users.retrieve(
## Calendar WebhookReceivers -
client.calendar.webhook_receivers.list() +
client.calendar.webhook_receivers.list() -> typing.List[WebhookReceiver]
@@ -57487,11 +57057,13 @@ Returns a list of `WebhookReceiver` objects. ```python from merge import Merge +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.calendar.webhook_receivers.list() ``` @@ -57520,7 +57092,7 @@ client.calendar.webhook_receivers.list()
-
client.calendar.webhook_receivers.create(...) +
client.calendar.webhook_receivers.create(...) -> WebhookReceiver
@@ -57548,11 +57120,13 @@ Creates a `WebhookReceiver` object with the given values. ```python from merge import Merge +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.calendar.webhook_receivers.create( event="event", is_active=True, @@ -57609,7 +57183,7 @@ client.calendar.webhook_receivers.create(
## Chat AccountDetails -
client.chat.account_details.retrieve() +
client.chat.account_details.retrieve() -> AccountDetails
@@ -57637,11 +57211,13 @@ Get details for a linked account. ```python from merge import Merge +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.chat.account_details.retrieve() ``` @@ -57671,7 +57247,7 @@ client.chat.account_details.retrieve()
## Chat AccountToken -
client.chat.account_token.retrieve(...) +
client.chat.account_token.retrieve(...) -> AccountToken
@@ -57699,11 +57275,13 @@ Returns the account token for the end user with the provided public token. ```python from merge import Merge +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.chat.account_token.retrieve( public_token="public_token", ) @@ -57742,7 +57320,7 @@ client.chat.account_token.retrieve(
-
client.chat.account_token.regenerate_create() +
client.chat.account_token.regenerate_create() -> RegenerateAccountToken
@@ -57770,11 +57348,13 @@ Exchange Linked Account account tokens. ```python from merge import Merge +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.chat.account_token.regenerate_create() ``` @@ -57804,7 +57384,7 @@ client.chat.account_token.regenerate_create()
## Chat AsyncPassthrough -
client.chat.async_passthrough.create(...) +
client.chat.async_passthrough.create(...) -> AsyncPassthroughReciept
@@ -57832,15 +57412,17 @@ Asynchronously pull data from an endpoint not currently supported by Merge. ```python from merge import Merge -from merge.resources.chat import DataPassthroughRequest, MethodEnum +from merge.environment import MergeEnvironment +from merge.chat import DataPassthroughRequest client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.chat.async_passthrough.create( request=DataPassthroughRequest( - method=MethodEnum.GET, + method="GET", path="/scooters", ), ) @@ -57879,7 +57461,7 @@ client.chat.async_passthrough.create(
-
client.chat.async_passthrough.retrieve(...) +
client.chat.async_passthrough.retrieve(...) -> AsyncPassthroughRetrieveResponse
@@ -57907,11 +57489,13 @@ Retrieves data from earlier async-passthrough POST request ```python from merge import Merge +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.chat.async_passthrough.retrieve( async_passthrough_receipt_id="async_passthrough_receipt_id", ) @@ -57951,7 +57535,7 @@ client.chat.async_passthrough.retrieve(
## Chat AuditTrail -
client.chat.audit_trail.list(...) +
client.chat.audit_trail.list(...) -> PaginatedAuditLogEventList
@@ -57979,11 +57563,13 @@ Gets a list of audit trail events. ```python from merge import Merge +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.chat.audit_trail.list( cursor="cD0yMDIxLTAxLTA2KzAzJTNBMjQlM0E1My40MzQzMjYlMkIwMCUzQTAw", end_date="end_date", @@ -58068,7 +57654,7 @@ client.chat.audit_trail.list(
## Chat AvailableActions -
client.chat.available_actions.retrieve() +
client.chat.available_actions.retrieve() -> AvailableActions
@@ -58096,11 +57682,13 @@ Returns a list of models and actions available for an account. ```python from merge import Merge +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.chat.available_actions.retrieve() ``` @@ -58130,7 +57718,7 @@ client.chat.available_actions.retrieve()
## Chat Conversations -
client.chat.conversations.list(...) +
client.chat.conversations.list(...) -> PaginatedConversationList
@@ -58157,31 +57745,24 @@ Returns a list of `Conversation` objects.
```python -import datetime - from merge import Merge +from merge.environment import MergeEnvironment +import datetime client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.chat.conversations.list( - created_after=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), - created_before=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), + created_after=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), + created_before=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), cursor="cD0yMDIxLTAxLTA2KzAzJTNBMjQlM0E1My40MzQzMjYlMkIwMCUzQTAw", include_deleted_data=True, include_remote_data=True, include_shell_data=True, - modified_after=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), - modified_before=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), + modified_after=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), + modified_before=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), page_size=1, remote_id="remote_id", ) @@ -58200,7 +57781,7 @@ client.chat.conversations.list(
-**created_after:** `typing.Optional[dt.datetime]` — If provided, will only return objects created after this datetime. +**created_after:** `typing.Optional[datetime.datetime]` — If provided, will only return objects created after this datetime.
@@ -58208,7 +57789,7 @@ client.chat.conversations.list(
-**created_before:** `typing.Optional[dt.datetime]` — If provided, will only return objects created before this datetime. +**created_before:** `typing.Optional[datetime.datetime]` — If provided, will only return objects created before this datetime.
@@ -58224,11 +57805,7 @@ client.chat.conversations.list(
-**expand:** `typing.Optional[ - typing.Union[ - typing.Literal["members"], typing.Sequence[typing.Literal["members"]] - ] -]` — Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces. +**expand:** `typing.Optional[typing.Union[typing.Literal, typing.Sequence[typing.Literal]]]` — Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces.
@@ -58260,7 +57837,7 @@ client.chat.conversations.list(
-**modified_after:** `typing.Optional[dt.datetime]` — If provided, only objects synced by Merge after this date time will be returned. +**modified_after:** `typing.Optional[datetime.datetime]` — If provided, only objects synced by Merge after this date time will be returned.
@@ -58268,7 +57845,7 @@ client.chat.conversations.list(
-**modified_before:** `typing.Optional[dt.datetime]` — If provided, only objects synced by Merge before this date time will be returned. +**modified_before:** `typing.Optional[datetime.datetime]` — If provided, only objects synced by Merge before this date time will be returned.
@@ -58304,7 +57881,7 @@ client.chat.conversations.list(
-
client.chat.conversations.members_list(...) +
client.chat.conversations.members_list(...) -> PaginatedMemberList
@@ -58332,11 +57909,13 @@ Returns a list of `Member` objects. ```python from merge import Merge +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.chat.conversations.members_list( conversation_id="conversation_id", cursor="cD0yMDIxLTAxLTA2KzAzJTNBMjQlM0E1My40MzQzMjYlMkIwMCUzQTAw", @@ -58376,12 +57955,7 @@ client.chat.conversations.members_list(
-**expand:** `typing.Optional[ - typing.Union[ - ConversationsMembersListRequestExpandItem, - typing.Sequence[ConversationsMembersListRequestExpandItem], - ] -]` — Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces. +**expand:** `typing.Optional[typing.Union[ConversationsMembersListRequestExpandItem, typing.Sequence[ConversationsMembersListRequestExpandItem]]]` — Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces.
@@ -58433,7 +58007,7 @@ client.chat.conversations.members_list(
-
client.chat.conversations.retrieve(...) +
client.chat.conversations.retrieve(...) -> Conversation
@@ -58461,11 +58035,13 @@ Returns a `Conversation` object with the given `id`. ```python from merge import Merge +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.chat.conversations.retrieve( id="id", include_remote_data=True, @@ -58494,11 +58070,7 @@ client.chat.conversations.retrieve(
-**expand:** `typing.Optional[ - typing.Union[ - typing.Literal["members"], typing.Sequence[typing.Literal["members"]] - ] -]` — Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces. +**expand:** `typing.Optional[typing.Union[typing.Literal, typing.Sequence[typing.Literal]]]` — Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces.
@@ -58535,7 +58107,7 @@ client.chat.conversations.retrieve(
## Chat Scopes -
client.chat.scopes.default_scopes_retrieve() +
client.chat.scopes.default_scopes_retrieve() -> CommonModelScopeApi
@@ -58563,11 +58135,13 @@ Get the default permissions for Merge Common Models and fields across all Linked ```python from merge import Merge +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.chat.scopes.default_scopes_retrieve() ``` @@ -58596,7 +58170,7 @@ client.chat.scopes.default_scopes_retrieve()
-
client.chat.scopes.linked_account_scopes_retrieve() +
client.chat.scopes.linked_account_scopes_retrieve() -> CommonModelScopeApi
@@ -58624,11 +58198,13 @@ Get all available permissions for Merge Common Models and fields for a single Li ```python from merge import Merge +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.chat.scopes.linked_account_scopes_retrieve() ``` @@ -58657,7 +58233,7 @@ client.chat.scopes.linked_account_scopes_retrieve()
-
client.chat.scopes.linked_account_scopes_create(...) +
client.chat.scopes.linked_account_scopes_create(...) -> CommonModelScopeApi
@@ -58685,16 +58261,14 @@ Update permissions for any Common Model or field for a single Linked Account. An ```python from merge import Merge -from merge.resources.chat import ( - FieldPermissionDeserializerRequest, - IndividualCommonModelScopeDeserializerRequest, - ModelPermissionDeserializerRequest, -) +from merge.environment import MergeEnvironment +from merge.chat import IndividualCommonModelScopeDeserializerRequest, ModelPermissionDeserializerRequest, FieldPermissionDeserializerRequest client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.chat.scopes.linked_account_scopes_create( common_models=[ IndividualCommonModelScopeDeserializerRequest( @@ -58705,11 +58279,16 @@ client.chat.scopes.linked_account_scopes_create( ), "WRITE": ModelPermissionDeserializerRequest( is_enabled=False, - ), + ) }, field_permissions=FieldPermissionDeserializerRequest( - enabled_fields=["avatar", "home_location"], - disabled_fields=["work_location"], + enabled_fields=[ + "avatar", + "home_location" + ], + disabled_fields=[ + "work_location" + ], ), ), IndividualCommonModelScopeDeserializerRequest( @@ -58719,7 +58298,7 @@ client.chat.scopes.linked_account_scopes_create( is_enabled=False, ) }, - ), + ) ], ) @@ -58737,7 +58316,7 @@ client.chat.scopes.linked_account_scopes_create(
-**common_models:** `typing.Sequence[IndividualCommonModelScopeDeserializerRequest]` — The common models you want to update the scopes for +**common_models:** `typing.List[IndividualCommonModelScopeDeserializerRequest]` — The common models you want to update the scopes for
@@ -58758,7 +58337,7 @@ client.chat.scopes.linked_account_scopes_create(
## Chat DeleteAccount -
client.chat.delete_account.delete() +
client.chat.delete_account.delete()
@@ -58786,11 +58365,13 @@ Delete a linked account. ```python from merge import Merge +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.chat.delete_account.delete() ``` @@ -58820,7 +58401,7 @@ client.chat.delete_account.delete()
## Chat FieldMapping -
client.chat.field_mapping.field_mappings_retrieve(...) +
client.chat.field_mapping.field_mappings_retrieve(...) -> FieldMappingApiInstanceResponse
@@ -58848,11 +58429,13 @@ Get all Field Mappings for this Linked Account. Field Mappings are mappings betw ```python from merge import Merge +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.chat.field_mapping.field_mappings_retrieve( exclude_remote_field_metadata=True, ) @@ -58891,7 +58474,7 @@ client.chat.field_mapping.field_mappings_retrieve(
-
client.chat.field_mapping.field_mappings_create(...) +
client.chat.field_mapping.field_mappings_create(...) -> FieldMappingInstanceResponse
@@ -58919,15 +58502,19 @@ Create new Field Mappings that will be available after the next scheduled sync. ```python from merge import Merge +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.chat.field_mapping.field_mappings_create( exclude_remote_field_metadata=True, remote_data_iteration_count=1, - remote_field_traversal_path=["example_remote_field"], + remote_field_traversal_path=[ + "example_remote_field" + ], remote_method="GET", remote_url_path="/example-url-path", common_model_name="ExampleCommonModel", @@ -58947,7 +58534,7 @@ client.chat.field_mapping.field_mappings_create(
-**remote_field_traversal_path:** `typing.Sequence[typing.Optional[typing.Any]]` — The field traversal path of the remote field listed when you hit the GET /remote-fields endpoint. +**remote_field_traversal_path:** `typing.List[typing.Any]` — The field traversal path of the remote field listed when you hit the GET /remote-fields endpoint.
@@ -59055,7 +58642,7 @@ client.chat.field_mapping.field_mappings_create(
-
client.chat.field_mapping.field_mappings_destroy(...) +
client.chat.field_mapping.field_mappings_destroy(...) -> FieldMappingInstanceResponse
@@ -59083,11 +58670,13 @@ Deletes Field Mappings for a Linked Account. All data related to this Field Mapp ```python from merge import Merge +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.chat.field_mapping.field_mappings_destroy( field_mapping_id="field_mapping_id", ) @@ -59126,7 +58715,7 @@ client.chat.field_mapping.field_mappings_destroy(
-
client.chat.field_mapping.field_mappings_partial_update(...) +
client.chat.field_mapping.field_mappings_partial_update(...) -> FieldMappingInstanceResponse
@@ -59154,11 +58743,13 @@ Create or update existing Field Mappings for a Linked Account. Changes will be r ```python from merge import Merge +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.chat.field_mapping.field_mappings_partial_update( field_mapping_id="field_mapping_id", remote_data_iteration_count=1, @@ -59194,7 +58785,7 @@ client.chat.field_mapping.field_mappings_partial_update(
-**remote_field_traversal_path:** `typing.Optional[typing.Sequence[typing.Optional[typing.Any]]]` — The field traversal path of the remote field listed when you hit the GET /remote-fields endpoint. +**remote_field_traversal_path:** `typing.Optional[typing.List[typing.Any]]` — The field traversal path of the remote field listed when you hit the GET /remote-fields endpoint.
@@ -59246,7 +58837,7 @@ client.chat.field_mapping.field_mappings_partial_update(
-
client.chat.field_mapping.remote_fields_retrieve(...) +
client.chat.field_mapping.remote_fields_retrieve(...) -> RemoteFieldApiResponse
@@ -59274,11 +58865,13 @@ Get all remote fields for a Linked Account. Remote fields are third-party fields ```python from merge import Merge +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.chat.field_mapping.remote_fields_retrieve( common_models="common_models", include_example_values="include_example_values", @@ -59326,7 +58919,7 @@ client.chat.field_mapping.remote_fields_retrieve(
-
client.chat.field_mapping.target_fields_retrieve() +
client.chat.field_mapping.target_fields_retrieve() -> ExternalTargetFieldApiResponse
@@ -59354,11 +58947,13 @@ Get all organization-wide Target Fields, this will not include any Linked Accoun ```python from merge import Merge +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.chat.field_mapping.target_fields_retrieve() ``` @@ -59387,7 +58982,7 @@ client.chat.field_mapping.target_fields_retrieve()
-
client.chat.field_mapping.target_fields_create(...) +
client.chat.field_mapping.target_fields_create(...) -> ExternalTargetFieldApiResponse
@@ -59415,11 +59010,13 @@ Create a new organization-wide Target Field. Target Fields are custom fields tha ```python from merge import Merge +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.chat.field_mapping.target_fields_create( name="employee_favorite_team", common_model="Employee", @@ -59476,7 +59073,7 @@ client.chat.field_mapping.target_fields_create(
## Chat GenerateKey -
client.chat.generate_key.create(...) +
client.chat.generate_key.create(...) -> RemoteKey
@@ -59504,11 +59101,13 @@ Create a remote key. ```python from merge import Merge +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.chat.generate_key.create( name="Remote Deployment Key 1", ) @@ -59548,7 +59147,7 @@ client.chat.generate_key.create(
## Chat Groups -
client.chat.groups.list(...) +
client.chat.groups.list(...) -> PaginatedGroupList
@@ -59575,31 +59174,24 @@ Returns a list of `Group` objects.
```python -import datetime - from merge import Merge +from merge.environment import MergeEnvironment +import datetime client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.chat.groups.list( - created_after=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), - created_before=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), + created_after=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), + created_before=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), cursor="cD0yMDIxLTAxLTA2KzAzJTNBMjQlM0E1My40MzQzMjYlMkIwMCUzQTAw", include_deleted_data=True, include_remote_data=True, include_shell_data=True, - modified_after=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), - modified_before=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), + modified_after=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), + modified_before=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), page_size=1, remote_id="remote_id", ) @@ -59618,7 +59210,7 @@ client.chat.groups.list(
-**created_after:** `typing.Optional[dt.datetime]` — If provided, will only return objects created after this datetime. +**created_after:** `typing.Optional[datetime.datetime]` — If provided, will only return objects created after this datetime.
@@ -59626,7 +59218,7 @@ client.chat.groups.list(
-**created_before:** `typing.Optional[dt.datetime]` — If provided, will only return objects created before this datetime. +**created_before:** `typing.Optional[datetime.datetime]` — If provided, will only return objects created before this datetime.
@@ -59642,11 +59234,7 @@ client.chat.groups.list(
-**expand:** `typing.Optional[ - typing.Union[ - typing.Literal["users"], typing.Sequence[typing.Literal["users"]] - ] -]` — Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces. +**expand:** `typing.Optional[typing.Union[typing.Literal, typing.Sequence[typing.Literal]]]` — Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces.
@@ -59678,7 +59266,7 @@ client.chat.groups.list(
-**modified_after:** `typing.Optional[dt.datetime]` — If provided, only objects synced by Merge after this date time will be returned. +**modified_after:** `typing.Optional[datetime.datetime]` — If provided, only objects synced by Merge after this date time will be returned.
@@ -59686,7 +59274,7 @@ client.chat.groups.list(
-**modified_before:** `typing.Optional[dt.datetime]` — If provided, only objects synced by Merge before this date time will be returned. +**modified_before:** `typing.Optional[datetime.datetime]` — If provided, only objects synced by Merge before this date time will be returned.
@@ -59722,7 +59310,7 @@ client.chat.groups.list(
-
client.chat.groups.retrieve(...) +
client.chat.groups.retrieve(...) -> Group
@@ -59750,11 +59338,13 @@ Returns a `Group` object with the given `id`. ```python from merge import Merge +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.chat.groups.retrieve( id="id", include_remote_data=True, @@ -59783,11 +59373,7 @@ client.chat.groups.retrieve(
-**expand:** `typing.Optional[ - typing.Union[ - typing.Literal["users"], typing.Sequence[typing.Literal["users"]] - ] -]` — Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces. +**expand:** `typing.Optional[typing.Union[typing.Literal, typing.Sequence[typing.Literal]]]` — Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces.
@@ -59824,7 +59410,7 @@ client.chat.groups.retrieve(
## Chat Issues -
client.chat.issues.list(...) +
client.chat.issues.list(...) -> PaginatedIssueList
@@ -59851,38 +59437,30 @@ Gets all issues for Organization.
```python -import datetime - from merge import Merge -from merge.resources.chat.resources.issues import IssuesListRequestStatus +from merge.environment import MergeEnvironment +import datetime client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.chat.issues.list( account_token="account_token", cursor="cD0yMDIxLTAxLTA2KzAzJTNBMjQlM0E1My40MzQzMjYlMkIwMCUzQTAw", end_date="end_date", end_user_organization_name="end_user_organization_name", - first_incident_time_after=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), - first_incident_time_before=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), + first_incident_time_after=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), + first_incident_time_before=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), include_muted="include_muted", integration_name="integration_name", - last_incident_time_after=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), - last_incident_time_before=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), + last_incident_time_after=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), + last_incident_time_before=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), linked_account_id="linked_account_id", page_size=1, start_date="start_date", - status=IssuesListRequestStatus.ONGOING, + status="ONGOING", ) ``` @@ -59931,7 +59509,7 @@ client.chat.issues.list(
-**first_incident_time_after:** `typing.Optional[dt.datetime]` — If provided, will only return issues whose first incident time was after this datetime. +**first_incident_time_after:** `typing.Optional[datetime.datetime]` — If provided, will only return issues whose first incident time was after this datetime.
@@ -59939,7 +59517,7 @@ client.chat.issues.list(
-**first_incident_time_before:** `typing.Optional[dt.datetime]` — If provided, will only return issues whose first incident time was before this datetime. +**first_incident_time_before:** `typing.Optional[datetime.datetime]` — If provided, will only return issues whose first incident time was before this datetime.
@@ -59963,7 +59541,7 @@ client.chat.issues.list(
-**last_incident_time_after:** `typing.Optional[dt.datetime]` — If provided, will only return issues whose last incident time was after this datetime. +**last_incident_time_after:** `typing.Optional[datetime.datetime]` — If provided, will only return issues whose last incident time was after this datetime.
@@ -59971,7 +59549,7 @@ client.chat.issues.list(
-**last_incident_time_before:** `typing.Optional[dt.datetime]` — If provided, will only return issues whose last incident time was before this datetime. +**last_incident_time_before:** `typing.Optional[datetime.datetime]` — If provided, will only return issues whose last incident time was before this datetime.
@@ -60023,7 +59601,7 @@ client.chat.issues.list(
-
client.chat.issues.retrieve(...) +
client.chat.issues.retrieve(...) -> Issue
@@ -60051,11 +59629,13 @@ Get a specific issue. ```python from merge import Merge +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.chat.issues.retrieve( id="id", ) @@ -60095,7 +59675,7 @@ client.chat.issues.retrieve(
## Chat LinkToken -
client.chat.link_token.create(...) +
client.chat.link_token.create(...) -> LinkToken
@@ -60123,17 +59703,21 @@ Creates a link token to be used when linking a new end user. The link token expi ```python from merge import Merge -from merge.resources.chat import CategoriesEnum +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.chat.link_token.create( end_user_email_address="example@gmail.com", end_user_organization_name="Test Organization", end_user_origin_id="12345", - categories=[CategoriesEnum.HRIS, CategoriesEnum.ATS], + categories=[ + "hris", + "ats" + ], ) ``` @@ -60174,7 +59758,7 @@ client.chat.link_token.create(
-**categories:** `typing.Sequence[CategoriesEnum]` — The integration categories to show in Merge Link. +**categories:** `typing.List[CategoriesEnum]` — The integration categories to show in Merge Link.
@@ -60214,7 +59798,7 @@ client.chat.link_token.create(
-**common_models:** `typing.Optional[typing.Sequence[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. +**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.
@@ -60222,14 +59806,7 @@ client.chat.link_token.create(
-**category_common_model_scopes:** `typing.Optional[ - typing.Dict[ - str, - typing.Optional[ - typing.Sequence[IndividualCommonModelScopeDeserializerRequest] - ], - ] -]` — When creating a Link Token, you can set permissions for Common Models that will apply to the account that is going to be linked. Any model or field not specified in link token payload will default to existing settings. +**category_common_model_scopes:** `typing.Optional[typing.Dict[str, typing.Optional[typing.List[IndividualCommonModelScopeDeserializerRequest]]]]` — When creating a Link Token, you can set permissions for Common Models that will apply to the account that is going to be linked. Any model or field not specified in link token payload will default to existing settings.
@@ -60253,7 +59830,7 @@ client.chat.link_token.create(
-**integration_specific_config:** `typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]]` — A JSON object containing integration-specific configuration options. +**integration_specific_config:** `typing.Optional[typing.Dict[str, typing.Any]]` — A JSON object containing integration-specific configuration options.
@@ -60298,7 +59875,7 @@ client.chat.link_token.create(
## Chat LinkedAccounts -
client.chat.linked_accounts.list(...) +
client.chat.linked_accounts.list(...) -> PaginatedAccountDetailsAndActionsList
@@ -60326,16 +59903,15 @@ List linked accounts for your organization. ```python from merge import Merge -from merge.resources.chat.resources.linked_accounts import ( - LinkedAccountsListRequestCategory, -) +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.chat.linked_accounts.list( - category=LinkedAccountsListRequestCategory.ACCOUNTING, + category="accounting", cursor="cD0yMDIxLTAxLTA2KzAzJTNBMjQlM0E1My40MzQzMjYlMkIwMCUzQTAw", end_user_email_address="end_user_email_address", end_user_organization_name="end_user_organization_name", @@ -60481,7 +60057,7 @@ client.chat.linked_accounts.list(
## Chat Messages -
client.chat.messages.list(...) +
client.chat.messages.list(...) -> PaginatedMessageList
@@ -60508,34 +60084,26 @@ Returns a list of `Message` objects.
```python -import datetime - from merge import Merge -from merge.resources.chat.resources.messages import MessagesListRequestOrderBy +from merge.environment import MergeEnvironment +import datetime client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.chat.messages.list( conversation_id="conversation_id", - created_after=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), - created_before=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), + created_after=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), + created_before=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), cursor="cD0yMDIxLTAxLTA2KzAzJTNBMjQlM0E1My40MzQzMjYlMkIwMCUzQTAw", include_deleted_data=True, include_remote_data=True, include_shell_data=True, - modified_after=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), - modified_before=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), - order_by=MessagesListRequestOrderBy.REMOTE_CREATED_AT_DESCENDING, + modified_after=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), + modified_before=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), + order_by="-remote_created_at", page_size=1, remote_id="remote_id", root_message="root_message", @@ -60563,7 +60131,7 @@ client.chat.messages.list(
-**created_after:** `typing.Optional[dt.datetime]` — If provided, will only return objects created after this datetime. +**created_after:** `typing.Optional[datetime.datetime]` — If provided, will only return objects created after this datetime.
@@ -60571,7 +60139,7 @@ client.chat.messages.list(
-**created_before:** `typing.Optional[dt.datetime]` — If provided, will only return objects created before this datetime. +**created_before:** `typing.Optional[datetime.datetime]` — If provided, will only return objects created before this datetime.
@@ -60611,7 +60179,7 @@ client.chat.messages.list(
-**modified_after:** `typing.Optional[dt.datetime]` — If provided, only objects synced by Merge after this date time will be returned. +**modified_after:** `typing.Optional[datetime.datetime]` — If provided, only objects synced by Merge after this date time will be returned.
@@ -60619,7 +60187,7 @@ client.chat.messages.list(
-**modified_before:** `typing.Optional[dt.datetime]` — If provided, only objects synced by Merge before this date time will be returned. +**modified_before:** `typing.Optional[datetime.datetime]` — If provided, only objects synced by Merge before this date time will be returned.
@@ -60671,7 +60239,7 @@ client.chat.messages.list(
-
client.chat.messages.retrieve(...) +
client.chat.messages.retrieve(...) -> Message
@@ -60699,11 +60267,13 @@ Returns a `Message` object with the given `id`. ```python from merge import Merge +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.chat.messages.retrieve( id="id", include_remote_data=True, @@ -60760,7 +60330,7 @@ client.chat.messages.retrieve(
-
client.chat.messages.replies_list(...) +
client.chat.messages.replies_list(...) -> PaginatedMessageList
@@ -60788,21 +60358,20 @@ Returns a list of `Message` objects. ```python from merge import Merge -from merge.resources.chat.resources.messages import ( - MessagesRepliesListRequestOrderBy, -) +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.chat.messages.replies_list( message_id="message_id", cursor="cD0yMDIxLTAxLTA2KzAzJTNBMjQlM0E1My40MzQzMjYlMkIwMCUzQTAw", include_deleted_data=True, include_remote_data=True, include_shell_data=True, - order_by=MessagesRepliesListRequestOrderBy.REMOTE_CREATED_AT_DESCENDING, + order_by="-remote_created_at", page_size=1, ) @@ -60889,7 +60458,7 @@ client.chat.messages.replies_list(
## Chat Passthrough -
client.chat.passthrough.create(...) +
client.chat.passthrough.create(...) -> RemoteResponse
@@ -60917,15 +60486,17 @@ Pull data from an endpoint not currently supported by Merge. ```python from merge import Merge -from merge.resources.chat import DataPassthroughRequest, MethodEnum +from merge.environment import MergeEnvironment +from merge.chat import DataPassthroughRequest client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.chat.passthrough.create( request=DataPassthroughRequest( - method=MethodEnum.GET, + method="GET", path="/scooters", ), ) @@ -60965,7 +60536,7 @@ client.chat.passthrough.create(
## Chat RegenerateKey -
client.chat.regenerate_key.create(...) +
client.chat.regenerate_key.create(...) -> RemoteKey
@@ -60993,11 +60564,13 @@ Exchange remote keys. ```python from merge import Merge +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.chat.regenerate_key.create( name="Remote Deployment Key 1", ) @@ -61037,7 +60610,7 @@ client.chat.regenerate_key.create(
## Chat SyncStatus -
client.chat.sync_status.list(...) +
client.chat.sync_status.list(...) -> PaginatedSyncStatusList
@@ -61065,11 +60638,13 @@ Get sync status for the current sync and the most recently finished sync. `last_ ```python from merge import Merge +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.chat.sync_status.list( cursor="cD0yMDIxLTAxLTA2KzAzJTNBMjQlM0E1My40MzQzMjYlMkIwMCUzQTAw", page_size=1, @@ -61118,7 +60693,7 @@ client.chat.sync_status.list(
## Chat ForceResync -
client.chat.force_resync.sync_status_resync_create() +
client.chat.force_resync.sync_status_resync_create() -> typing.List[SyncStatus]
@@ -61146,11 +60721,13 @@ Force re-sync of all models. This endpoint is available for monthly, quarterly, ```python from merge import Merge +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.chat.force_resync.sync_status_resync_create() ``` @@ -61180,7 +60757,7 @@ client.chat.force_resync.sync_status_resync_create()
## Chat Users -
client.chat.users.list(...) +
client.chat.users.list(...) -> PaginatedUserList
@@ -61207,31 +60784,24 @@ Returns a list of `User` objects.
```python -import datetime - from merge import Merge +from merge.environment import MergeEnvironment +import datetime client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.chat.users.list( - created_after=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), - created_before=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), + created_after=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), + created_before=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), cursor="cD0yMDIxLTAxLTA2KzAzJTNBMjQlM0E1My40MzQzMjYlMkIwMCUzQTAw", include_deleted_data=True, include_remote_data=True, include_shell_data=True, - modified_after=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), - modified_before=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), + modified_after=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), + modified_before=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), page_size=1, remote_id="remote_id", ) @@ -61250,7 +60820,7 @@ client.chat.users.list(
-**created_after:** `typing.Optional[dt.datetime]` — If provided, will only return objects created after this datetime. +**created_after:** `typing.Optional[datetime.datetime]` — If provided, will only return objects created after this datetime.
@@ -61258,7 +60828,7 @@ client.chat.users.list(
-**created_before:** `typing.Optional[dt.datetime]` — If provided, will only return objects created before this datetime. +**created_before:** `typing.Optional[datetime.datetime]` — If provided, will only return objects created before this datetime.
@@ -61274,11 +60844,7 @@ client.chat.users.list(
-**expand:** `typing.Optional[ - typing.Union[ - typing.Literal["groups"], typing.Sequence[typing.Literal["groups"]] - ] -]` — Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces. +**expand:** `typing.Optional[typing.Union[typing.Literal, typing.Sequence[typing.Literal]]]` — Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces.
@@ -61310,7 +60876,7 @@ client.chat.users.list(
-**modified_after:** `typing.Optional[dt.datetime]` — If provided, only objects synced by Merge after this date time will be returned. +**modified_after:** `typing.Optional[datetime.datetime]` — If provided, only objects synced by Merge after this date time will be returned.
@@ -61318,7 +60884,7 @@ client.chat.users.list(
-**modified_before:** `typing.Optional[dt.datetime]` — If provided, only objects synced by Merge before this date time will be returned. +**modified_before:** `typing.Optional[datetime.datetime]` — If provided, only objects synced by Merge before this date time will be returned.
@@ -61354,7 +60920,7 @@ client.chat.users.list(
-
client.chat.users.retrieve(...) +
client.chat.users.retrieve(...) -> User
@@ -61382,11 +60948,13 @@ Returns a `User` object with the given `id`. ```python from merge import Merge +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.chat.users.retrieve( id="id", include_remote_data=True, @@ -61415,11 +60983,7 @@ client.chat.users.retrieve(
-**expand:** `typing.Optional[ - typing.Union[ - typing.Literal["groups"], typing.Sequence[typing.Literal["groups"]] - ] -]` — Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces. +**expand:** `typing.Optional[typing.Union[typing.Literal, typing.Sequence[typing.Literal]]]` — Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces.
@@ -61456,7 +61020,7 @@ client.chat.users.retrieve(
## Chat WebhookReceivers -
client.chat.webhook_receivers.list() +
client.chat.webhook_receivers.list() -> typing.List[WebhookReceiver]
@@ -61484,11 +61048,13 @@ Returns a list of `WebhookReceiver` objects. ```python from merge import Merge +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.chat.webhook_receivers.list() ``` @@ -61517,7 +61083,7 @@ client.chat.webhook_receivers.list()
-
client.chat.webhook_receivers.create(...) +
client.chat.webhook_receivers.create(...) -> WebhookReceiver
@@ -61545,11 +61111,13 @@ Creates a `WebhookReceiver` object with the given values. ```python from merge import Merge +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.chat.webhook_receivers.create( event="event", is_active=True, @@ -61606,7 +61174,7 @@ client.chat.webhook_receivers.create(
## Email AccountDetails -
client.email.account_details.retrieve() +
client.email.account_details.retrieve() -> AccountDetails
@@ -61634,11 +61202,13 @@ Get details for a linked account. ```python from merge import Merge +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.email.account_details.retrieve() ``` @@ -61668,7 +61238,7 @@ client.email.account_details.retrieve()
## Email AccountToken -
client.email.account_token.retrieve(...) +
client.email.account_token.retrieve(...) -> AccountToken
@@ -61696,11 +61266,13 @@ Returns the account token for the end user with the provided public token. ```python from merge import Merge +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.email.account_token.retrieve( public_token="public_token", ) @@ -61739,7 +61311,7 @@ client.email.account_token.retrieve(
-
client.email.account_token.regenerate_create() +
client.email.account_token.regenerate_create() -> RegenerateAccountToken
@@ -61767,11 +61339,13 @@ Exchange Linked Account account tokens. ```python from merge import Merge +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.email.account_token.regenerate_create() ``` @@ -61801,7 +61375,7 @@ client.email.account_token.regenerate_create()
## Email AsyncPassthrough -
client.email.async_passthrough.create(...) +
client.email.async_passthrough.create(...) -> AsyncPassthroughReciept
@@ -61829,15 +61403,17 @@ Asynchronously pull data from an endpoint not currently supported by Merge. ```python from merge import Merge -from merge.resources.email import DataPassthroughRequest, MethodEnum +from merge.environment import MergeEnvironment +from merge.email import DataPassthroughRequest client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.email.async_passthrough.create( request=DataPassthroughRequest( - method=MethodEnum.GET, + method="GET", path="/scooters", ), ) @@ -61876,7 +61452,7 @@ client.email.async_passthrough.create(
-
client.email.async_passthrough.retrieve(...) +
client.email.async_passthrough.retrieve(...) -> AsyncPassthroughRetrieveResponse
@@ -61904,11 +61480,13 @@ Retrieves data from earlier async-passthrough POST request ```python from merge import Merge +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.email.async_passthrough.retrieve( async_passthrough_receipt_id="async_passthrough_receipt_id", ) @@ -61948,7 +61526,7 @@ client.email.async_passthrough.retrieve(
## Email AuditTrail -
client.email.audit_trail.list(...) +
client.email.audit_trail.list(...) -> PaginatedAuditLogEventList
@@ -61976,11 +61554,13 @@ Gets a list of audit trail events. ```python from merge import Merge +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.email.audit_trail.list( cursor="cD0yMDIxLTAxLTA2KzAzJTNBMjQlM0E1My40MzQzMjYlMkIwMCUzQTAw", end_date="end_date", @@ -62065,7 +61645,7 @@ client.email.audit_trail.list(
## Email AvailableActions -
client.email.available_actions.retrieve() +
client.email.available_actions.retrieve() -> AvailableActions
@@ -62093,11 +61673,13 @@ Returns a list of models and actions available for an account. ```python from merge import Merge +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.email.available_actions.retrieve() ``` @@ -62127,7 +61709,7 @@ client.email.available_actions.retrieve()
## Email Scopes -
client.email.scopes.default_scopes_retrieve() +
client.email.scopes.default_scopes_retrieve() -> CommonModelScopeApi
@@ -62155,11 +61737,13 @@ Get the default permissions for Merge Common Models and fields across all Linked ```python from merge import Merge +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.email.scopes.default_scopes_retrieve() ``` @@ -62188,7 +61772,7 @@ client.email.scopes.default_scopes_retrieve()
-
client.email.scopes.linked_account_scopes_retrieve() +
client.email.scopes.linked_account_scopes_retrieve() -> CommonModelScopeApi
@@ -62216,11 +61800,13 @@ Get all available permissions for Merge Common Models and fields for a single Li ```python from merge import Merge +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.email.scopes.linked_account_scopes_retrieve() ``` @@ -62249,7 +61835,7 @@ client.email.scopes.linked_account_scopes_retrieve()
-
client.email.scopes.linked_account_scopes_create(...) +
client.email.scopes.linked_account_scopes_create(...) -> CommonModelScopeApi
@@ -62277,16 +61863,14 @@ Update permissions for any Common Model or field for a single Linked Account. An ```python from merge import Merge -from merge.resources.email import ( - FieldPermissionDeserializerRequest, - IndividualCommonModelScopeDeserializerRequest, - ModelPermissionDeserializerRequest, -) +from merge.environment import MergeEnvironment +from merge.email import IndividualCommonModelScopeDeserializerRequest, ModelPermissionDeserializerRequest, FieldPermissionDeserializerRequest client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.email.scopes.linked_account_scopes_create( common_models=[ IndividualCommonModelScopeDeserializerRequest( @@ -62297,11 +61881,16 @@ client.email.scopes.linked_account_scopes_create( ), "WRITE": ModelPermissionDeserializerRequest( is_enabled=False, - ), + ) }, field_permissions=FieldPermissionDeserializerRequest( - enabled_fields=["avatar", "home_location"], - disabled_fields=["work_location"], + enabled_fields=[ + "avatar", + "home_location" + ], + disabled_fields=[ + "work_location" + ], ), ), IndividualCommonModelScopeDeserializerRequest( @@ -62311,7 +61900,7 @@ client.email.scopes.linked_account_scopes_create( is_enabled=False, ) }, - ), + ) ], ) @@ -62329,7 +61918,7 @@ client.email.scopes.linked_account_scopes_create(
-**common_models:** `typing.Sequence[IndividualCommonModelScopeDeserializerRequest]` — The common models you want to update the scopes for +**common_models:** `typing.List[IndividualCommonModelScopeDeserializerRequest]` — The common models you want to update the scopes for
@@ -62350,7 +61939,7 @@ client.email.scopes.linked_account_scopes_create(
## Email DeleteAccount -
client.email.delete_account.delete() +
client.email.delete_account.delete()
@@ -62378,11 +61967,13 @@ Delete a linked account. ```python from merge import Merge +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.email.delete_account.delete() ``` @@ -62412,7 +62003,7 @@ client.email.delete_account.delete()
## Email EmailAddresses -
client.email.email_addresses.list(...) +
client.email.email_addresses.list(...) -> PaginatedEmailAddressList
@@ -62439,32 +62030,25 @@ Returns a list of `EmailAddress` objects.
```python -import datetime - from merge import Merge +from merge.environment import MergeEnvironment +import datetime client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.email.email_addresses.list( - created_after=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), - created_before=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), + created_after=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), + created_before=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), cursor="cD0yMDIxLTAxLTA2KzAzJTNBMjQlM0E1My40MzQzMjYlMkIwMCUzQTAw", email_address="email_address", include_deleted_data=True, include_remote_data=True, include_shell_data=True, - modified_after=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), - modified_before=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), + modified_after=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), + modified_before=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), page_size=1, remote_id="remote_id", ) @@ -62483,7 +62067,7 @@ client.email.email_addresses.list(
-**created_after:** `typing.Optional[dt.datetime]` — If provided, will only return objects created after this datetime. +**created_after:** `typing.Optional[datetime.datetime]` — If provided, will only return objects created after this datetime.
@@ -62491,7 +62075,7 @@ client.email.email_addresses.list(
-**created_before:** `typing.Optional[dt.datetime]` — If provided, will only return objects created before this datetime. +**created_before:** `typing.Optional[datetime.datetime]` — If provided, will only return objects created before this datetime.
@@ -62515,12 +62099,7 @@ client.email.email_addresses.list(
-**expand:** `typing.Optional[ - typing.Union[ - EmailAddressesListRequestExpandItem, - typing.Sequence[EmailAddressesListRequestExpandItem], - ] -]` — Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces. +**expand:** `typing.Optional[typing.Union[EmailAddressesListRequestExpandItem, typing.Sequence[EmailAddressesListRequestExpandItem]]]` — Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces.
@@ -62552,7 +62131,7 @@ client.email.email_addresses.list(
-**modified_after:** `typing.Optional[dt.datetime]` — If provided, only objects synced by Merge after this date time will be returned. +**modified_after:** `typing.Optional[datetime.datetime]` — If provided, only objects synced by Merge after this date time will be returned.
@@ -62560,7 +62139,7 @@ client.email.email_addresses.list(
-**modified_before:** `typing.Optional[dt.datetime]` — If provided, only objects synced by Merge before this date time will be returned. +**modified_before:** `typing.Optional[datetime.datetime]` — If provided, only objects synced by Merge before this date time will be returned.
@@ -62596,7 +62175,7 @@ client.email.email_addresses.list(
-
client.email.email_addresses.retrieve(...) +
client.email.email_addresses.retrieve(...) -> EmailAddress
@@ -62624,11 +62203,13 @@ Returns an `EmailAddress` object with the given `id`. ```python from merge import Merge +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.email.email_addresses.retrieve( id="id", include_remote_data=True, @@ -62657,12 +62238,7 @@ client.email.email_addresses.retrieve(
-**expand:** `typing.Optional[ - typing.Union[ - EmailAddressesRetrieveRequestExpandItem, - typing.Sequence[EmailAddressesRetrieveRequestExpandItem], - ] -]` — Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces. +**expand:** `typing.Optional[typing.Union[EmailAddressesRetrieveRequestExpandItem, typing.Sequence[EmailAddressesRetrieveRequestExpandItem]]]` — Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces.
@@ -62699,7 +62275,7 @@ client.email.email_addresses.retrieve(
## Email FieldMapping -
client.email.field_mapping.field_mappings_retrieve(...) +
client.email.field_mapping.field_mappings_retrieve(...) -> FieldMappingApiInstanceResponse
@@ -62727,11 +62303,13 @@ Get all Field Mappings for this Linked Account. Field Mappings are mappings betw ```python from merge import Merge +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.email.field_mapping.field_mappings_retrieve( exclude_remote_field_metadata=True, ) @@ -62770,7 +62348,7 @@ client.email.field_mapping.field_mappings_retrieve(
-
client.email.field_mapping.field_mappings_create(...) +
client.email.field_mapping.field_mappings_create(...) -> FieldMappingInstanceResponse
@@ -62798,15 +62376,19 @@ Create new Field Mappings that will be available after the next scheduled sync. ```python from merge import Merge +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.email.field_mapping.field_mappings_create( exclude_remote_field_metadata=True, remote_data_iteration_count=1, - remote_field_traversal_path=["example_remote_field"], + remote_field_traversal_path=[ + "example_remote_field" + ], remote_method="GET", remote_url_path="/example-url-path", common_model_name="ExampleCommonModel", @@ -62826,7 +62408,7 @@ client.email.field_mapping.field_mappings_create(
-**remote_field_traversal_path:** `typing.Sequence[typing.Optional[typing.Any]]` — The field traversal path of the remote field listed when you hit the GET /remote-fields endpoint. +**remote_field_traversal_path:** `typing.List[typing.Any]` — The field traversal path of the remote field listed when you hit the GET /remote-fields endpoint.
@@ -62934,7 +62516,7 @@ client.email.field_mapping.field_mappings_create(
-
client.email.field_mapping.field_mappings_destroy(...) +
client.email.field_mapping.field_mappings_destroy(...) -> FieldMappingInstanceResponse
@@ -62962,11 +62544,13 @@ Deletes Field Mappings for a Linked Account. All data related to this Field Mapp ```python from merge import Merge +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.email.field_mapping.field_mappings_destroy( field_mapping_id="field_mapping_id", ) @@ -63005,7 +62589,7 @@ client.email.field_mapping.field_mappings_destroy(
-
client.email.field_mapping.field_mappings_partial_update(...) +
client.email.field_mapping.field_mappings_partial_update(...) -> FieldMappingInstanceResponse
@@ -63033,11 +62617,13 @@ Create or update existing Field Mappings for a Linked Account. Changes will be r ```python from merge import Merge +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.email.field_mapping.field_mappings_partial_update( field_mapping_id="field_mapping_id", remote_data_iteration_count=1, @@ -63073,7 +62659,7 @@ client.email.field_mapping.field_mappings_partial_update(
-**remote_field_traversal_path:** `typing.Optional[typing.Sequence[typing.Optional[typing.Any]]]` — The field traversal path of the remote field listed when you hit the GET /remote-fields endpoint. +**remote_field_traversal_path:** `typing.Optional[typing.List[typing.Any]]` — The field traversal path of the remote field listed when you hit the GET /remote-fields endpoint.
@@ -63125,7 +62711,7 @@ client.email.field_mapping.field_mappings_partial_update(
-
client.email.field_mapping.remote_fields_retrieve(...) +
client.email.field_mapping.remote_fields_retrieve(...) -> RemoteFieldApiResponse
@@ -63153,11 +62739,13 @@ Get all remote fields for a Linked Account. Remote fields are third-party fields ```python from merge import Merge +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.email.field_mapping.remote_fields_retrieve( common_models="common_models", include_example_values="include_example_values", @@ -63205,7 +62793,7 @@ client.email.field_mapping.remote_fields_retrieve(
-
client.email.field_mapping.target_fields_retrieve() +
client.email.field_mapping.target_fields_retrieve() -> ExternalTargetFieldApiResponse
@@ -63233,11 +62821,13 @@ Get all organization-wide Target Fields, this will not include any Linked Accoun ```python from merge import Merge +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.email.field_mapping.target_fields_retrieve() ``` @@ -63266,7 +62856,7 @@ client.email.field_mapping.target_fields_retrieve()
-
client.email.field_mapping.target_fields_create(...) +
client.email.field_mapping.target_fields_create(...) -> ExternalTargetFieldApiResponse
@@ -63294,11 +62884,13 @@ Create a new organization-wide Target Field. Target Fields are custom fields tha ```python from merge import Merge +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.email.field_mapping.target_fields_create( name="employee_favorite_team", common_model="Employee", @@ -63355,7 +62947,7 @@ client.email.field_mapping.target_fields_create(
## Email Folders -
client.email.folders.list(...) +
client.email.folders.list(...) -> PaginatedFolderList
@@ -63382,31 +62974,24 @@ Returns a list of `Folder` objects.
```python -import datetime - from merge import Merge +from merge.environment import MergeEnvironment +import datetime client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.email.folders.list( - created_after=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), - created_before=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), + created_after=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), + created_before=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), cursor="cD0yMDIxLTAxLTA2KzAzJTNBMjQlM0E1My40MzQzMjYlMkIwMCUzQTAw", include_deleted_data=True, include_remote_data=True, include_shell_data=True, - modified_after=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), - modified_before=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), + modified_after=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), + modified_before=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), name="name", page_size=1, remote_id="remote_id", @@ -63426,7 +63011,7 @@ client.email.folders.list(
-**created_after:** `typing.Optional[dt.datetime]` — If provided, will only return objects created after this datetime. +**created_after:** `typing.Optional[datetime.datetime]` — If provided, will only return objects created after this datetime.
@@ -63434,7 +63019,7 @@ client.email.folders.list(
-**created_before:** `typing.Optional[dt.datetime]` — If provided, will only return objects created before this datetime. +**created_before:** `typing.Optional[datetime.datetime]` — If provided, will only return objects created before this datetime.
@@ -63450,12 +63035,7 @@ client.email.folders.list(
-**expand:** `typing.Optional[ - typing.Union[ - FoldersListRequestExpandItem, - typing.Sequence[FoldersListRequestExpandItem], - ] -]` — Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces. +**expand:** `typing.Optional[typing.Union[FoldersListRequestExpandItem, typing.Sequence[FoldersListRequestExpandItem]]]` — Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces.
@@ -63487,7 +63067,7 @@ client.email.folders.list(
-**modified_after:** `typing.Optional[dt.datetime]` — If provided, only objects synced by Merge after this date time will be returned. +**modified_after:** `typing.Optional[datetime.datetime]` — If provided, only objects synced by Merge after this date time will be returned.
@@ -63495,7 +63075,7 @@ client.email.folders.list(
-**modified_before:** `typing.Optional[dt.datetime]` — If provided, only objects synced by Merge before this date time will be returned. +**modified_before:** `typing.Optional[datetime.datetime]` — If provided, only objects synced by Merge before this date time will be returned.
@@ -63539,7 +63119,7 @@ client.email.folders.list(
-
client.email.folders.retrieve(...) +
client.email.folders.retrieve(...) -> Folder
@@ -63567,11 +63147,13 @@ Returns a `Folder` object with the given `id`. ```python from merge import Merge +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.email.folders.retrieve( id="id", include_remote_data=True, @@ -63600,12 +63182,7 @@ client.email.folders.retrieve(
-**expand:** `typing.Optional[ - typing.Union[ - FoldersRetrieveRequestExpandItem, - typing.Sequence[FoldersRetrieveRequestExpandItem], - ] -]` — Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces. +**expand:** `typing.Optional[typing.Union[FoldersRetrieveRequestExpandItem, typing.Sequence[FoldersRetrieveRequestExpandItem]]]` — Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces.
@@ -63642,7 +63219,7 @@ client.email.folders.retrieve(
## Email GenerateKey -
client.email.generate_key.create(...) +
client.email.generate_key.create(...) -> RemoteKey
@@ -63670,11 +63247,13 @@ Create a remote key. ```python from merge import Merge +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.email.generate_key.create( name="Remote Deployment Key 1", ) @@ -63714,7 +63293,7 @@ client.email.generate_key.create(
## Email Groups -
client.email.groups.list(...) +
client.email.groups.list(...) -> PaginatedGroupList
@@ -63741,31 +63320,24 @@ Returns a list of `Group` objects.
```python -import datetime - from merge import Merge +from merge.environment import MergeEnvironment +import datetime client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.email.groups.list( - created_after=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), - created_before=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), + created_after=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), + created_before=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), cursor="cD0yMDIxLTAxLTA2KzAzJTNBMjQlM0E1My40MzQzMjYlMkIwMCUzQTAw", include_deleted_data=True, include_remote_data=True, include_shell_data=True, - modified_after=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), - modified_before=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), + modified_after=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), + modified_before=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), page_size=1, remote_id="remote_id", user_id="user_id", @@ -63785,7 +63357,7 @@ client.email.groups.list(
-**created_after:** `typing.Optional[dt.datetime]` — If provided, will only return objects created after this datetime. +**created_after:** `typing.Optional[datetime.datetime]` — If provided, will only return objects created after this datetime.
@@ -63793,7 +63365,7 @@ client.email.groups.list(
-**created_before:** `typing.Optional[dt.datetime]` — If provided, will only return objects created before this datetime. +**created_before:** `typing.Optional[datetime.datetime]` — If provided, will only return objects created before this datetime.
@@ -63809,12 +63381,7 @@ client.email.groups.list(
-**expand:** `typing.Optional[ - typing.Union[ - GroupsListRequestExpandItem, - typing.Sequence[GroupsListRequestExpandItem], - ] -]` — Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces. +**expand:** `typing.Optional[typing.Union[GroupsListRequestExpandItem, typing.Sequence[GroupsListRequestExpandItem]]]` — Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces.
@@ -63846,7 +63413,7 @@ client.email.groups.list(
-**modified_after:** `typing.Optional[dt.datetime]` — If provided, only objects synced by Merge after this date time will be returned. +**modified_after:** `typing.Optional[datetime.datetime]` — If provided, only objects synced by Merge after this date time will be returned.
@@ -63854,7 +63421,7 @@ client.email.groups.list(
-**modified_before:** `typing.Optional[dt.datetime]` — If provided, only objects synced by Merge before this date time will be returned. +**modified_before:** `typing.Optional[datetime.datetime]` — If provided, only objects synced by Merge before this date time will be returned.
@@ -63898,7 +63465,7 @@ client.email.groups.list(
-
client.email.groups.retrieve(...) +
client.email.groups.retrieve(...) -> Group
@@ -63926,11 +63493,13 @@ Returns a `Group` object with the given `id`. ```python from merge import Merge +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.email.groups.retrieve( id="id", include_remote_data=True, @@ -63959,12 +63528,7 @@ client.email.groups.retrieve(
-**expand:** `typing.Optional[ - typing.Union[ - GroupsRetrieveRequestExpandItem, - typing.Sequence[GroupsRetrieveRequestExpandItem], - ] -]` — Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces. +**expand:** `typing.Optional[typing.Union[GroupsRetrieveRequestExpandItem, typing.Sequence[GroupsRetrieveRequestExpandItem]]]` — Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces.
@@ -64001,7 +63565,7 @@ client.email.groups.retrieve(
## Email Issues -
client.email.issues.list(...) +
client.email.issues.list(...) -> PaginatedIssueList
@@ -64028,38 +63592,30 @@ Gets all issues for Organization.
```python -import datetime - from merge import Merge -from merge.resources.email.resources.issues import IssuesListRequestStatus +from merge.environment import MergeEnvironment +import datetime client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.email.issues.list( account_token="account_token", cursor="cD0yMDIxLTAxLTA2KzAzJTNBMjQlM0E1My40MzQzMjYlMkIwMCUzQTAw", end_date="end_date", end_user_organization_name="end_user_organization_name", - first_incident_time_after=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), - first_incident_time_before=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), + first_incident_time_after=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), + first_incident_time_before=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), include_muted="include_muted", integration_name="integration_name", - last_incident_time_after=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), - last_incident_time_before=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), + last_incident_time_after=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), + last_incident_time_before=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), linked_account_id="linked_account_id", page_size=1, start_date="start_date", - status=IssuesListRequestStatus.ONGOING, + status="ONGOING", ) ``` @@ -64108,7 +63664,7 @@ client.email.issues.list(
-**first_incident_time_after:** `typing.Optional[dt.datetime]` — If provided, will only return issues whose first incident time was after this datetime. +**first_incident_time_after:** `typing.Optional[datetime.datetime]` — If provided, will only return issues whose first incident time was after this datetime.
@@ -64116,7 +63672,7 @@ client.email.issues.list(
-**first_incident_time_before:** `typing.Optional[dt.datetime]` — If provided, will only return issues whose first incident time was before this datetime. +**first_incident_time_before:** `typing.Optional[datetime.datetime]` — If provided, will only return issues whose first incident time was before this datetime.
@@ -64140,7 +63696,7 @@ client.email.issues.list(
-**last_incident_time_after:** `typing.Optional[dt.datetime]` — If provided, will only return issues whose last incident time was after this datetime. +**last_incident_time_after:** `typing.Optional[datetime.datetime]` — If provided, will only return issues whose last incident time was after this datetime.
@@ -64148,7 +63704,7 @@ client.email.issues.list(
-**last_incident_time_before:** `typing.Optional[dt.datetime]` — If provided, will only return issues whose last incident time was before this datetime. +**last_incident_time_before:** `typing.Optional[datetime.datetime]` — If provided, will only return issues whose last incident time was before this datetime.
@@ -64200,7 +63756,7 @@ client.email.issues.list(
-
client.email.issues.retrieve(...) +
client.email.issues.retrieve(...) -> Issue
@@ -64228,11 +63784,13 @@ Get a specific issue. ```python from merge import Merge +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.email.issues.retrieve( id="id", ) @@ -64272,7 +63830,7 @@ client.email.issues.retrieve(
## Email LinkToken -
client.email.link_token.create(...) +
client.email.link_token.create(...) -> LinkToken
@@ -64300,17 +63858,21 @@ Creates a link token to be used when linking a new end user. The link token expi ```python from merge import Merge -from merge.resources.email import CategoriesEnum +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.email.link_token.create( end_user_email_address="example@gmail.com", end_user_organization_name="Test Organization", end_user_origin_id="12345", - categories=[CategoriesEnum.HRIS, CategoriesEnum.ATS], + categories=[ + "hris", + "ats" + ], ) ``` @@ -64351,7 +63913,7 @@ client.email.link_token.create(
-**categories:** `typing.Sequence[CategoriesEnum]` — The integration categories to show in Merge Link. +**categories:** `typing.List[CategoriesEnum]` — The integration categories to show in Merge Link.
@@ -64391,7 +63953,7 @@ client.email.link_token.create(
-**common_models:** `typing.Optional[typing.Sequence[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. +**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.
@@ -64399,14 +63961,7 @@ client.email.link_token.create(
-**category_common_model_scopes:** `typing.Optional[ - typing.Dict[ - str, - typing.Optional[ - typing.Sequence[IndividualCommonModelScopeDeserializerRequest] - ], - ] -]` — When creating a Link Token, you can set permissions for Common Models that will apply to the account that is going to be linked. Any model or field not specified in link token payload will default to existing settings. +**category_common_model_scopes:** `typing.Optional[typing.Dict[str, typing.Optional[typing.List[IndividualCommonModelScopeDeserializerRequest]]]]` — When creating a Link Token, you can set permissions for Common Models that will apply to the account that is going to be linked. Any model or field not specified in link token payload will default to existing settings.
@@ -64430,7 +63985,7 @@ client.email.link_token.create(
-**integration_specific_config:** `typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]]` — A JSON object containing integration-specific configuration options. +**integration_specific_config:** `typing.Optional[typing.Dict[str, typing.Any]]` — A JSON object containing integration-specific configuration options.
@@ -64475,7 +64030,7 @@ client.email.link_token.create(
## Email LinkedAccounts -
client.email.linked_accounts.list(...) +
client.email.linked_accounts.list(...) -> PaginatedAccountDetailsAndActionsList
@@ -64503,16 +64058,15 @@ List linked accounts for your organization. ```python from merge import Merge -from merge.resources.email.resources.linked_accounts import ( - LinkedAccountsListRequestCategory, -) +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.email.linked_accounts.list( - category=LinkedAccountsListRequestCategory.ACCOUNTING, + category="accounting", cursor="cD0yMDIxLTAxLTA2KzAzJTNBMjQlM0E1My40MzQzMjYlMkIwMCUzQTAw", end_user_email_address="end_user_email_address", end_user_organization_name="end_user_organization_name", @@ -64658,7 +64212,7 @@ client.email.linked_accounts.list(
## Email Mailboxes -
client.email.mailboxes.list(...) +
client.email.mailboxes.list(...) -> PaginatedMailboxList
@@ -64685,34 +64239,29 @@ Returns a list of `Mailbox` objects.
```python -import datetime - from merge import Merge +from merge.environment import MergeEnvironment +import datetime client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.email.mailboxes.list( - created_after=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), - created_before=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), + created_after=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), + created_before=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), cursor="cD0yMDIxLTAxLTA2KzAzJTNBMjQlM0E1My40MzQzMjYlMkIwMCUzQTAw", include_deleted_data=True, include_remote_data=True, include_shell_data=True, - modified_after=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), - modified_before=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), + modified_after=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), + modified_before=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), page_size=1, primary_email_address_id="primary_email_address_id", + remote_fields="type", remote_id="remote_id", + show_enum_origins="type", user_id="user_id", ) @@ -64730,7 +64279,7 @@ client.email.mailboxes.list(
-**created_after:** `typing.Optional[dt.datetime]` — If provided, will only return objects created after this datetime. +**created_after:** `typing.Optional[datetime.datetime]` — If provided, will only return objects created after this datetime.
@@ -64738,7 +64287,7 @@ client.email.mailboxes.list(
-**created_before:** `typing.Optional[dt.datetime]` — If provided, will only return objects created before this datetime. +**created_before:** `typing.Optional[datetime.datetime]` — If provided, will only return objects created before this datetime.
@@ -64754,12 +64303,7 @@ client.email.mailboxes.list(
-**expand:** `typing.Optional[ - typing.Union[ - MailboxesListRequestExpandItem, - typing.Sequence[MailboxesListRequestExpandItem], - ] -]` — Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces. +**expand:** `typing.Optional[typing.Union[MailboxesListRequestExpandItem, typing.Sequence[MailboxesListRequestExpandItem]]]` — Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces.
@@ -64791,7 +64335,7 @@ client.email.mailboxes.list(
-**modified_after:** `typing.Optional[dt.datetime]` — If provided, only objects synced by Merge after this date time will be returned. +**modified_after:** `typing.Optional[datetime.datetime]` — If provided, only objects synced by Merge after this date time will be returned.
@@ -64799,7 +64343,7 @@ client.email.mailboxes.list(
-**modified_before:** `typing.Optional[dt.datetime]` — If provided, only objects synced by Merge before this date time will be returned. +**modified_before:** `typing.Optional[datetime.datetime]` — If provided, only objects synced by Merge before this date time will be returned.
@@ -64823,7 +64367,7 @@ client.email.mailboxes.list(
-**remote_fields:** `typing.Optional[typing.Literal["type"]]` — Deprecated. Use show_enum_origins. +**remote_fields:** `typing.Optional[typing.Literal]` — Deprecated. Use show_enum_origins.
@@ -64839,7 +64383,7 @@ client.email.mailboxes.list(
-**show_enum_origins:** `typing.Optional[typing.Literal["type"]]` — A comma separated list of enum field names for which you'd like the original values to be returned, instead of Merge's normalized enum values. [Learn more](https://help.merge.dev/en/articles/8950958-show_enum_origins-query-parameter) +**show_enum_origins:** `typing.Optional[typing.Literal]` — A comma separated list of enum field names for which you'd like the original values to be returned, instead of Merge's normalized enum values. [Learn more](https://help.merge.dev/en/articles/8950958-show_enum_origins-query-parameter)
@@ -64867,7 +64411,7 @@ client.email.mailboxes.list(
-
client.email.mailboxes.retrieve(...) +
client.email.mailboxes.retrieve(...) -> Mailbox
@@ -64895,15 +64439,19 @@ Returns a `Mailbox` object with the given `id`. ```python from merge import Merge +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.email.mailboxes.retrieve( id="id", include_remote_data=True, include_shell_data=True, + remote_fields="type", + show_enum_origins="type", ) ``` @@ -64928,12 +64476,7 @@ client.email.mailboxes.retrieve(
-**expand:** `typing.Optional[ - typing.Union[ - MailboxesRetrieveRequestExpandItem, - typing.Sequence[MailboxesRetrieveRequestExpandItem], - ] -]` — Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces. +**expand:** `typing.Optional[typing.Union[MailboxesRetrieveRequestExpandItem, typing.Sequence[MailboxesRetrieveRequestExpandItem]]]` — Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces.
@@ -64957,7 +64500,7 @@ client.email.mailboxes.retrieve(
-**remote_fields:** `typing.Optional[typing.Literal["type"]]` — Deprecated. Use show_enum_origins. +**remote_fields:** `typing.Optional[typing.Literal]` — Deprecated. Use show_enum_origins.
@@ -64965,7 +64508,7 @@ client.email.mailboxes.retrieve(
-**show_enum_origins:** `typing.Optional[typing.Literal["type"]]` — A comma separated list of enum field names for which you'd like the original values to be returned, instead of Merge's normalized enum values. [Learn more](https://help.merge.dev/en/articles/8950958-show_enum_origins-query-parameter) +**show_enum_origins:** `typing.Optional[typing.Literal]` — A comma separated list of enum field names for which you'd like the original values to be returned, instead of Merge's normalized enum values. [Learn more](https://help.merge.dev/en/articles/8950958-show_enum_origins-query-parameter)
@@ -64986,7 +64529,7 @@ client.email.mailboxes.retrieve(
## Email Messages -
client.email.messages.list(...) +
client.email.messages.list(...) -> PaginatedMessageList
@@ -65013,35 +64556,28 @@ Returns a list of `Message` objects.
```python -import datetime - from merge import Merge +from merge.environment import MergeEnvironment +import datetime client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.email.messages.list( bcc_address_id="bcc_address_id", cc_address_id="cc_address_id", - created_after=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), - created_before=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), + created_after=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), + created_before=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), cursor="cD0yMDIxLTAxLTA2KzAzJTNBMjQlM0E1My40MzQzMjYlMkIwMCUzQTAw", from_address_id="from_address_id", include_deleted_data=True, include_remote_data=True, include_shell_data=True, mailbox_id="mailbox_id", - modified_after=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), - modified_before=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), + modified_after=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), + modified_before=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), page_size=1, remote_id="remote_id", thread_id="thread_id", @@ -65078,7 +64614,7 @@ client.email.messages.list(
-**created_after:** `typing.Optional[dt.datetime]` — If provided, will only return objects created after this datetime. +**created_after:** `typing.Optional[datetime.datetime]` — If provided, will only return objects created after this datetime.
@@ -65086,7 +64622,7 @@ client.email.messages.list(
-**created_before:** `typing.Optional[dt.datetime]` — If provided, will only return objects created before this datetime. +**created_before:** `typing.Optional[datetime.datetime]` — If provided, will only return objects created before this datetime.
@@ -65102,12 +64638,7 @@ client.email.messages.list(
-**expand:** `typing.Optional[ - typing.Union[ - MessagesListRequestExpandItem, - typing.Sequence[MessagesListRequestExpandItem], - ] -]` — Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces. +**expand:** `typing.Optional[typing.Union[MessagesListRequestExpandItem, typing.Sequence[MessagesListRequestExpandItem]]]` — Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces.
@@ -65155,7 +64686,7 @@ client.email.messages.list(
-**modified_after:** `typing.Optional[dt.datetime]` — If provided, only objects synced by Merge after this date time will be returned. +**modified_after:** `typing.Optional[datetime.datetime]` — If provided, only objects synced by Merge after this date time will be returned.
@@ -65163,7 +64694,7 @@ client.email.messages.list(
-**modified_before:** `typing.Optional[dt.datetime]` — If provided, only objects synced by Merge before this date time will be returned. +**modified_before:** `typing.Optional[datetime.datetime]` — If provided, only objects synced by Merge before this date time will be returned.
@@ -65215,7 +64746,7 @@ client.email.messages.list(
-
client.email.messages.retrieve(...) +
client.email.messages.retrieve(...) -> Message
@@ -65243,11 +64774,13 @@ Returns a `Message` object with the given `id`. ```python from merge import Merge +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.email.messages.retrieve( id="id", include_remote_data=True, @@ -65276,12 +64809,7 @@ client.email.messages.retrieve(
-**expand:** `typing.Optional[ - typing.Union[ - MessagesRetrieveRequestExpandItem, - typing.Sequence[MessagesRetrieveRequestExpandItem], - ] -]` — Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces. +**expand:** `typing.Optional[typing.Union[MessagesRetrieveRequestExpandItem, typing.Sequence[MessagesRetrieveRequestExpandItem]]]` — Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces.
@@ -65318,7 +64846,7 @@ client.email.messages.retrieve(
## Email Passthrough -
client.email.passthrough.create(...) +
client.email.passthrough.create(...) -> RemoteResponse
@@ -65346,15 +64874,17 @@ Pull data from an endpoint not currently supported by Merge. ```python from merge import Merge -from merge.resources.email import DataPassthroughRequest, MethodEnum +from merge.environment import MergeEnvironment +from merge.email import DataPassthroughRequest client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.email.passthrough.create( request=DataPassthroughRequest( - method=MethodEnum.GET, + method="GET", path="/scooters", ), ) @@ -65394,7 +64924,7 @@ client.email.passthrough.create(
## Email RegenerateKey -
client.email.regenerate_key.create(...) +
client.email.regenerate_key.create(...) -> RemoteKey
@@ -65422,11 +64952,13 @@ Exchange remote keys. ```python from merge import Merge +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.email.regenerate_key.create( name="Remote Deployment Key 1", ) @@ -65466,7 +64998,7 @@ client.email.regenerate_key.create(
## Email SyncStatus -
client.email.sync_status.list(...) +
client.email.sync_status.list(...) -> PaginatedSyncStatusList
@@ -65494,11 +65026,13 @@ Get sync status for the current sync and the most recently finished sync. `last_ ```python from merge import Merge +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.email.sync_status.list( cursor="cD0yMDIxLTAxLTA2KzAzJTNBMjQlM0E1My40MzQzMjYlMkIwMCUzQTAw", page_size=1, @@ -65547,7 +65081,7 @@ client.email.sync_status.list(
## Email ForceResync -
client.email.force_resync.sync_status_resync_create() +
client.email.force_resync.sync_status_resync_create() -> typing.List[SyncStatus]
@@ -65575,11 +65109,13 @@ Force re-sync of all models. This endpoint is available for monthly, quarterly, ```python from merge import Merge +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.email.force_resync.sync_status_resync_create() ``` @@ -65609,7 +65145,7 @@ client.email.force_resync.sync_status_resync_create()
## Email Users -
client.email.users.list(...) +
client.email.users.list(...) -> PaginatedUserList
@@ -65636,21 +65172,18 @@ Returns a list of `User` objects.
```python -import datetime - from merge import Merge +from merge.environment import MergeEnvironment +import datetime client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.email.users.list( - created_after=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), - created_before=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), + created_after=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), + created_before=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), cursor="cD0yMDIxLTAxLTA2KzAzJTNBMjQlM0E1My40MzQzMjYlMkIwMCUzQTAw", email_address_id="email_address_id", group_id="group_id", @@ -65658,14 +65191,12 @@ client.email.users.list( include_remote_data=True, include_shell_data=True, mailbox_id="mailbox_id", - modified_after=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), - modified_before=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), + modified_after=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), + modified_before=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), page_size=1, + remote_fields="type", remote_id="remote_id", + show_enum_origins="type", ) ``` @@ -65682,7 +65213,7 @@ client.email.users.list(
-**created_after:** `typing.Optional[dt.datetime]` — If provided, will only return objects created after this datetime. +**created_after:** `typing.Optional[datetime.datetime]` — If provided, will only return objects created after this datetime.
@@ -65690,7 +65221,7 @@ client.email.users.list(
-**created_before:** `typing.Optional[dt.datetime]` — If provided, will only return objects created before this datetime. +**created_before:** `typing.Optional[datetime.datetime]` — If provided, will only return objects created before this datetime.
@@ -65714,11 +65245,7 @@ client.email.users.list(
-**expand:** `typing.Optional[ - typing.Union[ - UsersListRequestExpandItem, typing.Sequence[UsersListRequestExpandItem] - ] -]` — Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces. +**expand:** `typing.Optional[typing.Union[UsersListRequestExpandItem, typing.Sequence[UsersListRequestExpandItem]]]` — Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces.
@@ -65766,7 +65293,7 @@ client.email.users.list(
-**modified_after:** `typing.Optional[dt.datetime]` — If provided, only objects synced by Merge after this date time will be returned. +**modified_after:** `typing.Optional[datetime.datetime]` — If provided, only objects synced by Merge after this date time will be returned.
@@ -65774,7 +65301,7 @@ client.email.users.list(
-**modified_before:** `typing.Optional[dt.datetime]` — If provided, only objects synced by Merge before this date time will be returned. +**modified_before:** `typing.Optional[datetime.datetime]` — If provided, only objects synced by Merge before this date time will be returned.
@@ -65790,7 +65317,7 @@ client.email.users.list(
-**remote_fields:** `typing.Optional[typing.Literal["type"]]` — Deprecated. Use show_enum_origins. +**remote_fields:** `typing.Optional[typing.Literal]` — Deprecated. Use show_enum_origins.
@@ -65806,7 +65333,7 @@ client.email.users.list(
-**show_enum_origins:** `typing.Optional[typing.Literal["type"]]` — A comma separated list of enum field names for which you'd like the original values to be returned, instead of Merge's normalized enum values. [Learn more](https://help.merge.dev/en/articles/8950958-show_enum_origins-query-parameter) +**show_enum_origins:** `typing.Optional[typing.Literal]` — A comma separated list of enum field names for which you'd like the original values to be returned, instead of Merge's normalized enum values. [Learn more](https://help.merge.dev/en/articles/8950958-show_enum_origins-query-parameter)
@@ -65826,7 +65353,7 @@ client.email.users.list(
-
client.email.users.retrieve(...) +
client.email.users.retrieve(...) -> User
@@ -65854,15 +65381,19 @@ Returns a `User` object with the given `id`. ```python from merge import Merge +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.email.users.retrieve( id="id", include_remote_data=True, include_shell_data=True, + remote_fields="type", + show_enum_origins="type", ) ``` @@ -65887,12 +65418,7 @@ client.email.users.retrieve(
-**expand:** `typing.Optional[ - typing.Union[ - UsersRetrieveRequestExpandItem, - typing.Sequence[UsersRetrieveRequestExpandItem], - ] -]` — Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces. +**expand:** `typing.Optional[typing.Union[UsersRetrieveRequestExpandItem, typing.Sequence[UsersRetrieveRequestExpandItem]]]` — Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces.
@@ -65916,7 +65442,7 @@ client.email.users.retrieve(
-**remote_fields:** `typing.Optional[typing.Literal["type"]]` — Deprecated. Use show_enum_origins. +**remote_fields:** `typing.Optional[typing.Literal]` — Deprecated. Use show_enum_origins.
@@ -65924,7 +65450,7 @@ client.email.users.retrieve(
-**show_enum_origins:** `typing.Optional[typing.Literal["type"]]` — A comma separated list of enum field names for which you'd like the original values to be returned, instead of Merge's normalized enum values. [Learn more](https://help.merge.dev/en/articles/8950958-show_enum_origins-query-parameter) +**show_enum_origins:** `typing.Optional[typing.Literal]` — A comma separated list of enum field names for which you'd like the original values to be returned, instead of Merge's normalized enum values. [Learn more](https://help.merge.dev/en/articles/8950958-show_enum_origins-query-parameter)
@@ -65945,7 +65471,7 @@ client.email.users.retrieve(
## Email WebhookReceivers -
client.email.webhook_receivers.list() +
client.email.webhook_receivers.list() -> typing.List[WebhookReceiver]
@@ -65973,11 +65499,13 @@ Returns a list of `WebhookReceiver` objects. ```python from merge import Merge +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.email.webhook_receivers.list() ``` @@ -66006,7 +65534,7 @@ client.email.webhook_receivers.list()
-
client.email.webhook_receivers.create(...) +
client.email.webhook_receivers.create(...) -> WebhookReceiver
@@ -66034,11 +65562,13 @@ Creates a `WebhookReceiver` object with the given values. ```python from merge import Merge +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.email.webhook_receivers.create( event="event", is_active=True, @@ -66095,7 +65625,7 @@ client.email.webhook_receivers.create(
## Filestorage AccountDetails -
client.filestorage.account_details.retrieve() +
client.filestorage.account_details.retrieve() -> AccountDetails
@@ -66123,11 +65653,13 @@ Get details for a linked account. ```python from merge import Merge +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.filestorage.account_details.retrieve() ``` @@ -66157,7 +65689,7 @@ client.filestorage.account_details.retrieve()
## Filestorage AccountToken -
client.filestorage.account_token.retrieve(...) +
client.filestorage.account_token.retrieve(...) -> AccountToken
@@ -66185,11 +65717,13 @@ Returns the account token for the end user with the provided public token. ```python from merge import Merge +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.filestorage.account_token.retrieve( public_token="public_token", ) @@ -66228,7 +65762,7 @@ client.filestorage.account_token.retrieve(
-
client.filestorage.account_token.regenerate_create() +
client.filestorage.account_token.regenerate_create() -> RegenerateAccountToken
@@ -66256,11 +65790,13 @@ Exchange Linked Account account tokens. ```python from merge import Merge +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.filestorage.account_token.regenerate_create() ``` @@ -66290,7 +65826,7 @@ client.filestorage.account_token.regenerate_create()
## Filestorage AsyncPassthrough -
client.filestorage.async_passthrough.create(...) +
client.filestorage.async_passthrough.create(...) -> AsyncPassthroughReciept
@@ -66318,15 +65854,17 @@ Asynchronously pull data from an endpoint not currently supported by Merge. ```python from merge import Merge -from merge.resources.filestorage import DataPassthroughRequest, MethodEnum +from merge.environment import MergeEnvironment +from merge.filestorage import DataPassthroughRequest client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.filestorage.async_passthrough.create( request=DataPassthroughRequest( - method=MethodEnum.GET, + method="GET", path="/scooters", ), ) @@ -66365,7 +65903,7 @@ client.filestorage.async_passthrough.create(
-
client.filestorage.async_passthrough.retrieve(...) +
client.filestorage.async_passthrough.retrieve(...) -> AsyncPassthroughRetrieveResponse
@@ -66393,11 +65931,13 @@ Retrieves data from earlier async-passthrough POST request ```python from merge import Merge +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.filestorage.async_passthrough.retrieve( async_passthrough_receipt_id="async_passthrough_receipt_id", ) @@ -66437,7 +65977,7 @@ client.filestorage.async_passthrough.retrieve(
## Filestorage AuditTrail -
client.filestorage.audit_trail.list(...) +
client.filestorage.audit_trail.list(...) -> PaginatedAuditLogEventList
@@ -66465,11 +66005,13 @@ Gets a list of audit trail events. ```python from merge import Merge +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.filestorage.audit_trail.list( cursor="cD0yMDIxLTAxLTA2KzAzJTNBMjQlM0E1My40MzQzMjYlMkIwMCUzQTAw", end_date="end_date", @@ -66554,7 +66096,7 @@ client.filestorage.audit_trail.list(
## Filestorage AvailableActions -
client.filestorage.available_actions.retrieve() +
client.filestorage.available_actions.retrieve() -> AvailableActions
@@ -66582,11 +66124,13 @@ Returns a list of models and actions available for an account. ```python from merge import Merge +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.filestorage.available_actions.retrieve() ``` @@ -66616,7 +66160,7 @@ client.filestorage.available_actions.retrieve()
## Filestorage Scopes -
client.filestorage.scopes.default_scopes_retrieve() +
client.filestorage.scopes.default_scopes_retrieve() -> CommonModelScopeApi
@@ -66644,11 +66188,13 @@ Get the default permissions for Merge Common Models and fields across all Linked ```python from merge import Merge +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.filestorage.scopes.default_scopes_retrieve() ``` @@ -66677,7 +66223,7 @@ client.filestorage.scopes.default_scopes_retrieve()
-
client.filestorage.scopes.linked_account_scopes_retrieve() +
client.filestorage.scopes.linked_account_scopes_retrieve() -> CommonModelScopeApi
@@ -66705,11 +66251,13 @@ Get all available permissions for Merge Common Models and fields for a single Li ```python from merge import Merge +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.filestorage.scopes.linked_account_scopes_retrieve() ``` @@ -66738,7 +66286,7 @@ client.filestorage.scopes.linked_account_scopes_retrieve()
-
client.filestorage.scopes.linked_account_scopes_create(...) +
client.filestorage.scopes.linked_account_scopes_create(...) -> CommonModelScopeApi
@@ -66766,16 +66314,14 @@ Update permissions for any Common Model or field for a single Linked Account. An ```python from merge import Merge -from merge.resources.filestorage import ( - FieldPermissionDeserializerRequest, - IndividualCommonModelScopeDeserializerRequest, - ModelPermissionDeserializerRequest, -) +from merge.environment import MergeEnvironment +from merge.filestorage import IndividualCommonModelScopeDeserializerRequest, ModelPermissionDeserializerRequest, FieldPermissionDeserializerRequest client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.filestorage.scopes.linked_account_scopes_create( common_models=[ IndividualCommonModelScopeDeserializerRequest( @@ -66786,11 +66332,16 @@ client.filestorage.scopes.linked_account_scopes_create( ), "WRITE": ModelPermissionDeserializerRequest( is_enabled=False, - ), + ) }, field_permissions=FieldPermissionDeserializerRequest( - enabled_fields=["avatar", "home_location"], - disabled_fields=["work_location"], + enabled_fields=[ + "avatar", + "home_location" + ], + disabled_fields=[ + "work_location" + ], ), ), IndividualCommonModelScopeDeserializerRequest( @@ -66800,7 +66351,7 @@ client.filestorage.scopes.linked_account_scopes_create( is_enabled=False, ) }, - ), + ) ], ) @@ -66818,7 +66369,7 @@ client.filestorage.scopes.linked_account_scopes_create(
-**common_models:** `typing.Sequence[IndividualCommonModelScopeDeserializerRequest]` — The common models you want to update the scopes for +**common_models:** `typing.List[IndividualCommonModelScopeDeserializerRequest]` — The common models you want to update the scopes for
@@ -66839,7 +66390,7 @@ client.filestorage.scopes.linked_account_scopes_create(
## Filestorage DeleteAccount -
client.filestorage.delete_account.delete() +
client.filestorage.delete_account.delete()
@@ -66867,11 +66418,13 @@ Delete a linked account. ```python from merge import Merge +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.filestorage.delete_account.delete() ``` @@ -66901,7 +66454,7 @@ client.filestorage.delete_account.delete()
## Filestorage Drives -
client.filestorage.drives.list(...) +
client.filestorage.drives.list(...) -> PaginatedDriveList
@@ -66928,31 +66481,24 @@ Returns a list of `Drive` objects.
```python -import datetime - from merge import Merge +from merge.environment import MergeEnvironment +import datetime client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.filestorage.drives.list( - created_after=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), - created_before=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), + created_after=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), + created_before=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), cursor="cD0yMDIxLTAxLTA2KzAzJTNBMjQlM0E1My40MzQzMjYlMkIwMCUzQTAw", include_deleted_data=True, include_remote_data=True, include_shell_data=True, - modified_after=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), - modified_before=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), + modified_after=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), + modified_before=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), name="name", page_size=1, remote_id="remote_id", @@ -66972,7 +66518,7 @@ client.filestorage.drives.list(
-**created_after:** `typing.Optional[dt.datetime]` — If provided, will only return objects created after this datetime. +**created_after:** `typing.Optional[datetime.datetime]` — If provided, will only return objects created after this datetime.
@@ -66980,7 +66526,7 @@ client.filestorage.drives.list(
-**created_before:** `typing.Optional[dt.datetime]` — If provided, will only return objects created before this datetime. +**created_before:** `typing.Optional[datetime.datetime]` — If provided, will only return objects created before this datetime.
@@ -67020,7 +66566,7 @@ client.filestorage.drives.list(
-**modified_after:** `typing.Optional[dt.datetime]` — If provided, only objects synced by Merge after this date time will be returned. +**modified_after:** `typing.Optional[datetime.datetime]` — If provided, only objects synced by Merge after this date time will be returned.
@@ -67028,7 +66574,7 @@ client.filestorage.drives.list(
-**modified_before:** `typing.Optional[dt.datetime]` — If provided, only objects synced by Merge before this date time will be returned. +**modified_before:** `typing.Optional[datetime.datetime]` — If provided, only objects synced by Merge before this date time will be returned.
@@ -67072,7 +66618,7 @@ client.filestorage.drives.list(
-
client.filestorage.drives.retrieve(...) +
client.filestorage.drives.retrieve(...) -> Drive
@@ -67100,11 +66646,13 @@ Returns a `Drive` object with the given `id`. ```python from merge import Merge +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.filestorage.drives.retrieve( id="id", include_remote_data=True, @@ -67162,7 +66710,7 @@ client.filestorage.drives.retrieve(
## Filestorage FieldMapping -
client.filestorage.field_mapping.field_mappings_retrieve(...) +
client.filestorage.field_mapping.field_mappings_retrieve(...) -> FieldMappingApiInstanceResponse
@@ -67190,11 +66738,13 @@ Get all Field Mappings for this Linked Account. Field Mappings are mappings betw ```python from merge import Merge +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.filestorage.field_mapping.field_mappings_retrieve( exclude_remote_field_metadata=True, ) @@ -67233,7 +66783,7 @@ client.filestorage.field_mapping.field_mappings_retrieve(
-
client.filestorage.field_mapping.field_mappings_create(...) +
client.filestorage.field_mapping.field_mappings_create(...) -> FieldMappingInstanceResponse
@@ -67261,17 +66811,21 @@ Create new Field Mappings that will be available after the next scheduled sync. ```python from merge import Merge +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.filestorage.field_mapping.field_mappings_create( exclude_remote_field_metadata=True, remote_data_iteration_count=1, target_field_name="example_target_field_name", target_field_description="this is a example description of the target field", - remote_field_traversal_path=["example_remote_field"], + remote_field_traversal_path=[ + "example_remote_field" + ], remote_method="GET", remote_url_path="/example-url-path", common_model_name="ExampleCommonModel", @@ -67307,7 +66861,7 @@ client.filestorage.field_mapping.field_mappings_create(
-**remote_field_traversal_path:** `typing.Sequence[typing.Optional[typing.Any]]` — The field traversal path of the remote field listed when you hit the GET /remote-fields endpoint. +**remote_field_traversal_path:** `typing.List[typing.Any]` — The field traversal path of the remote field listed when you hit the GET /remote-fields endpoint.
@@ -67375,7 +66929,7 @@ client.filestorage.field_mapping.field_mappings_create(
-
client.filestorage.field_mapping.field_mappings_destroy(...) +
client.filestorage.field_mapping.field_mappings_destroy(...) -> FieldMappingInstanceResponse
@@ -67403,11 +66957,13 @@ Deletes Field Mappings for a Linked Account. All data related to this Field Mapp ```python from merge import Merge +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.filestorage.field_mapping.field_mappings_destroy( field_mapping_id="field_mapping_id", ) @@ -67446,7 +67002,7 @@ client.filestorage.field_mapping.field_mappings_destroy(
-
client.filestorage.field_mapping.field_mappings_partial_update(...) +
client.filestorage.field_mapping.field_mappings_partial_update(...) -> FieldMappingInstanceResponse
@@ -67474,11 +67030,13 @@ Create or update existing Field Mappings for a Linked Account. Changes will be r ```python from merge import Merge +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.filestorage.field_mapping.field_mappings_partial_update( field_mapping_id="field_mapping_id", remote_data_iteration_count=1, @@ -67514,7 +67072,7 @@ client.filestorage.field_mapping.field_mappings_partial_update(
-**remote_field_traversal_path:** `typing.Optional[typing.Sequence[typing.Optional[typing.Any]]]` — The field traversal path of the remote field listed when you hit the GET /remote-fields endpoint. +**remote_field_traversal_path:** `typing.Optional[typing.List[typing.Any]]` — The field traversal path of the remote field listed when you hit the GET /remote-fields endpoint.
@@ -67558,7 +67116,7 @@ client.filestorage.field_mapping.field_mappings_partial_update(
-
client.filestorage.field_mapping.remote_fields_retrieve(...) +
client.filestorage.field_mapping.remote_fields_retrieve(...) -> RemoteFieldApiResponse
@@ -67586,11 +67144,13 @@ Get all remote fields for a Linked Account. Remote fields are third-party fields ```python from merge import Merge +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.filestorage.field_mapping.remote_fields_retrieve( common_models="common_models", include_example_values="include_example_values", @@ -67638,7 +67198,7 @@ client.filestorage.field_mapping.remote_fields_retrieve(
-
client.filestorage.field_mapping.target_fields_retrieve() +
client.filestorage.field_mapping.target_fields_retrieve() -> ExternalTargetFieldApiResponse
@@ -67666,11 +67226,13 @@ Get all organization-wide Target Fields, this will not include any Linked Accoun ```python from merge import Merge +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.filestorage.field_mapping.target_fields_retrieve() ``` @@ -67700,7 +67262,7 @@ client.filestorage.field_mapping.target_fields_retrieve()
## Filestorage Files -
client.filestorage.files.list(...) +
client.filestorage.files.list(...) -> PaginatedFileList
@@ -67727,22 +67289,18 @@ Returns a list of `File` objects.
```python -import datetime - from merge import Merge -from merge.resources.filestorage.resources.files import FilesListRequestOrderBy +from merge.environment import MergeEnvironment +import datetime client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.filestorage.files.list( - created_after=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), - created_before=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), + created_after=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), + created_before=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), cursor="cD0yMDIxLTAxLTA2KzAzJTNBMjQlM0E1My40MzQzMjYlMkIwMCUzQTAw", drive_id="drive_id", folder_id="folder_id", @@ -67750,21 +67308,13 @@ client.filestorage.files.list( include_remote_data=True, include_shell_data=True, mime_type="mime_type", - modified_after=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), - modified_before=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), + modified_after=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), + modified_before=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), name="name", - order_by=FilesListRequestOrderBy.CREATED_AT_DESCENDING, + order_by="-created_at", page_size=1, - remote_created_after=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), - remote_created_before=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), + remote_created_after=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), + remote_created_before=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), remote_id="remote_id", ) @@ -67782,7 +67332,7 @@ client.filestorage.files.list(
-**created_after:** `typing.Optional[dt.datetime]` — If provided, will only return objects created after this datetime. +**created_after:** `typing.Optional[datetime.datetime]` — If provided, will only return objects created after this datetime.
@@ -67790,7 +67340,7 @@ client.filestorage.files.list(
-**created_before:** `typing.Optional[dt.datetime]` — If provided, will only return objects created before this datetime. +**created_before:** `typing.Optional[datetime.datetime]` — If provided, will only return objects created before this datetime.
@@ -67814,11 +67364,7 @@ client.filestorage.files.list(
-**expand:** `typing.Optional[ - typing.Union[ - FilesListRequestExpandItem, typing.Sequence[FilesListRequestExpandItem] - ] -]` — Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces. +**expand:** `typing.Optional[typing.Union[FilesListRequestExpandItem, typing.Sequence[FilesListRequestExpandItem]]]` — Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces.
@@ -67866,7 +67412,7 @@ client.filestorage.files.list(
-**modified_after:** `typing.Optional[dt.datetime]` — If provided, only objects synced by Merge after this date time will be returned. +**modified_after:** `typing.Optional[datetime.datetime]` — If provided, only objects synced by Merge after this date time will be returned.
@@ -67874,7 +67420,7 @@ client.filestorage.files.list(
-**modified_before:** `typing.Optional[dt.datetime]` — If provided, only objects synced by Merge before this date time will be returned. +**modified_before:** `typing.Optional[datetime.datetime]` — If provided, only objects synced by Merge before this date time will be returned.
@@ -67906,7 +67452,7 @@ client.filestorage.files.list(
-**remote_created_after:** `typing.Optional[dt.datetime]` — If provided, will only return files created in the third party platform after this datetime. +**remote_created_after:** `typing.Optional[datetime.datetime]` — If provided, will only return files created in the third party platform after this datetime.
@@ -67914,7 +67460,7 @@ client.filestorage.files.list(
-**remote_created_before:** `typing.Optional[dt.datetime]` — If provided, will only return files created in the third party platform before this datetime. +**remote_created_before:** `typing.Optional[datetime.datetime]` — If provided, will only return files created in the third party platform before this datetime.
@@ -67942,7 +67488,7 @@ client.filestorage.files.list(
-
client.filestorage.files.create(...) +
client.filestorage.files.create(...) -> FileStorageFileResponse
@@ -67970,12 +67516,14 @@ Creates a `File` object with the given values. ```python from merge import Merge -from merge.resources.filestorage import FileRequest +from merge.environment import MergeEnvironment +from merge.filestorage import FileRequest client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.filestorage.files.create( is_debug_mode=True, run_async=True, @@ -68032,7 +67580,7 @@ client.filestorage.files.create(
-
client.filestorage.files.retrieve(...) +
client.filestorage.files.retrieve(...) -> File
@@ -68060,11 +67608,13 @@ Returns a `File` object with the given `id`. ```python from merge import Merge +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.filestorage.files.retrieve( id="id", include_remote_data=True, @@ -68093,12 +67643,7 @@ client.filestorage.files.retrieve(
-**expand:** `typing.Optional[ - typing.Union[ - FilesRetrieveRequestExpandItem, - typing.Sequence[FilesRetrieveRequestExpandItem], - ] -]` — Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces. +**expand:** `typing.Optional[typing.Union[FilesRetrieveRequestExpandItem, typing.Sequence[FilesRetrieveRequestExpandItem]]]` — Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces.
@@ -68134,7 +67679,85 @@ client.filestorage.files.retrieve(
-
client.filestorage.files.download_request_meta_retrieve(...) +
client.filestorage.files.download_retrieve(...) -> typing.Iterator[bytes] +
+
+ +#### 📝 Description + +
+
+ +
+
+ +Returns the `File` content with the given `id` as a stream of bytes. +
+
+
+
+ +#### 🔌 Usage + +
+
+ +
+
+ +```python +client.filestorage.files.download_retrieve(...) +``` +
+
+
+
+ +#### ⚙️ Parameters + +
+
+ +
+
+ +**id:** `str` + +
+
+ +
+
+ +**include_shell_data:** `typing.Optional[bool]` — Whether to include shell records. Shell records are empty records (they may contain some metadata but all other fields are null). + +
+
+ +
+
+ +**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. + +
+
+
+
+ + +
+
+
+ +
client.filestorage.files.download_request_meta_retrieve(...) -> DownloadRequestMeta
@@ -68162,11 +67785,13 @@ Returns metadata to construct an authenticated file download request for a singu ```python from merge import Merge +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.filestorage.files.download_request_meta_retrieve( id="id", mime_type="mime_type", @@ -68214,7 +67839,7 @@ client.filestorage.files.download_request_meta_retrieve(
-
client.filestorage.files.download_request_meta_list(...) +
client.filestorage.files.download_request_meta_list(...) -> PaginatedDownloadRequestMetaList
@@ -68242,14 +67867,13 @@ Returns metadata to construct authenticated file download requests, allowing you ```python from merge import Merge -from merge.resources.filestorage.resources.files import ( - FilesDownloadRequestMetaListRequestOrderBy, -) +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.filestorage.files.download_request_meta_list( created_after="created_after", created_before="created_before", @@ -68258,7 +67882,7 @@ client.filestorage.files.download_request_meta_list( mime_types="mime_types", modified_after="modified_after", modified_before="modified_before", - order_by=FilesDownloadRequestMetaListRequestOrderBy.CREATED_AT_DESCENDING, + order_by="-created_at", page_size=1, ) @@ -68368,7 +67992,7 @@ client.filestorage.files.download_request_meta_list(
-
client.filestorage.files.meta_post_retrieve() +
client.filestorage.files.meta_post_retrieve() -> MetaResponse
@@ -68396,11 +68020,13 @@ Returns metadata for `FileStorageFile` POSTs. ```python from merge import Merge +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.filestorage.files.meta_post_retrieve() ``` @@ -68430,7 +68056,7 @@ client.filestorage.files.meta_post_retrieve()
## Filestorage Folders -
client.filestorage.folders.list(...) +
client.filestorage.folders.list(...) -> PaginatedFolderList
@@ -68457,32 +68083,25 @@ Returns a list of `Folder` objects.
```python -import datetime - from merge import Merge +from merge.environment import MergeEnvironment +import datetime client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.filestorage.folders.list( - created_after=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), - created_before=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), + created_after=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), + created_before=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), cursor="cD0yMDIxLTAxLTA2KzAzJTNBMjQlM0E1My40MzQzMjYlMkIwMCUzQTAw", drive_id="drive_id", include_deleted_data=True, include_remote_data=True, include_shell_data=True, - modified_after=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), - modified_before=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), + modified_after=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), + modified_before=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), name="name", page_size=1, parent_folder_id="parent_folder_id", @@ -68503,7 +68122,7 @@ client.filestorage.folders.list(
-**created_after:** `typing.Optional[dt.datetime]` — If provided, will only return objects created after this datetime. +**created_after:** `typing.Optional[datetime.datetime]` — If provided, will only return objects created after this datetime.
@@ -68511,7 +68130,7 @@ client.filestorage.folders.list(
-**created_before:** `typing.Optional[dt.datetime]` — If provided, will only return objects created before this datetime. +**created_before:** `typing.Optional[datetime.datetime]` — If provided, will only return objects created before this datetime.
@@ -68535,12 +68154,7 @@ client.filestorage.folders.list(
-**expand:** `typing.Optional[ - typing.Union[ - FoldersListRequestExpandItem, - typing.Sequence[FoldersListRequestExpandItem], - ] -]` — Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces. +**expand:** `typing.Optional[typing.Union[FoldersListRequestExpandItem, typing.Sequence[FoldersListRequestExpandItem]]]` — Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces.
@@ -68572,7 +68186,7 @@ client.filestorage.folders.list(
-**modified_after:** `typing.Optional[dt.datetime]` — If provided, only objects synced by Merge after this date time will be returned. +**modified_after:** `typing.Optional[datetime.datetime]` — If provided, only objects synced by Merge after this date time will be returned.
@@ -68580,7 +68194,7 @@ client.filestorage.folders.list(
-**modified_before:** `typing.Optional[dt.datetime]` — If provided, only objects synced by Merge before this date time will be returned. +**modified_before:** `typing.Optional[datetime.datetime]` — If provided, only objects synced by Merge before this date time will be returned.
@@ -68632,7 +68246,7 @@ client.filestorage.folders.list(
-
client.filestorage.folders.create(...) +
client.filestorage.folders.create(...) -> FileStorageFolderResponse
@@ -68660,12 +68274,14 @@ Creates a `Folder` object with the given values. ```python from merge import Merge -from merge.resources.filestorage import FolderRequest +from merge.environment import MergeEnvironment +from merge.filestorage import FolderRequest client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.filestorage.folders.create( is_debug_mode=True, run_async=True, @@ -68722,7 +68338,7 @@ client.filestorage.folders.create(
-
client.filestorage.folders.retrieve(...) +
client.filestorage.folders.retrieve(...) -> Folder
@@ -68750,11 +68366,13 @@ Returns a `Folder` object with the given `id`. ```python from merge import Merge +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.filestorage.folders.retrieve( id="id", include_remote_data=True, @@ -68783,12 +68401,7 @@ client.filestorage.folders.retrieve(
-**expand:** `typing.Optional[ - typing.Union[ - FoldersRetrieveRequestExpandItem, - typing.Sequence[FoldersRetrieveRequestExpandItem], - ] -]` — Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces. +**expand:** `typing.Optional[typing.Union[FoldersRetrieveRequestExpandItem, typing.Sequence[FoldersRetrieveRequestExpandItem]]]` — Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces.
@@ -68824,7 +68437,7 @@ client.filestorage.folders.retrieve(
-
client.filestorage.folders.meta_post_retrieve() +
client.filestorage.folders.meta_post_retrieve() -> MetaResponse
@@ -68852,11 +68465,13 @@ Returns metadata for `FileStorageFolder` POSTs. ```python from merge import Merge +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.filestorage.folders.meta_post_retrieve() ``` @@ -68886,7 +68501,7 @@ client.filestorage.folders.meta_post_retrieve()
## Filestorage GenerateKey -
client.filestorage.generate_key.create(...) +
client.filestorage.generate_key.create(...) -> RemoteKey
@@ -68914,11 +68529,13 @@ Create a remote key. ```python from merge import Merge +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.filestorage.generate_key.create( name="Remote Deployment Key 1", ) @@ -68958,7 +68575,7 @@ client.filestorage.generate_key.create(
## Filestorage Groups -
client.filestorage.groups.list(...) +
client.filestorage.groups.list(...) -> PaginatedGroupList
@@ -68985,31 +68602,24 @@ Returns a list of `Group` objects.
```python -import datetime - from merge import Merge +from merge.environment import MergeEnvironment +import datetime client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.filestorage.groups.list( - created_after=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), - created_before=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), + created_after=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), + created_before=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), cursor="cD0yMDIxLTAxLTA2KzAzJTNBMjQlM0E1My40MzQzMjYlMkIwMCUzQTAw", include_deleted_data=True, include_remote_data=True, include_shell_data=True, - modified_after=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), - modified_before=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), + modified_after=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), + modified_before=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), page_size=1, remote_id="remote_id", ) @@ -69028,7 +68638,7 @@ client.filestorage.groups.list(
-**created_after:** `typing.Optional[dt.datetime]` — If provided, will only return objects created after this datetime. +**created_after:** `typing.Optional[datetime.datetime]` — If provided, will only return objects created after this datetime.
@@ -69036,7 +68646,7 @@ client.filestorage.groups.list(
-**created_before:** `typing.Optional[dt.datetime]` — If provided, will only return objects created before this datetime. +**created_before:** `typing.Optional[datetime.datetime]` — If provided, will only return objects created before this datetime.
@@ -69052,12 +68662,7 @@ client.filestorage.groups.list(
-**expand:** `typing.Optional[ - typing.Union[ - GroupsListRequestExpandItem, - typing.Sequence[GroupsListRequestExpandItem], - ] -]` — Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces. +**expand:** `typing.Optional[typing.Union[GroupsListRequestExpandItem, typing.Sequence[GroupsListRequestExpandItem]]]` — Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces.
@@ -69089,7 +68694,7 @@ client.filestorage.groups.list(
-**modified_after:** `typing.Optional[dt.datetime]` — If provided, only objects synced by Merge after this date time will be returned. +**modified_after:** `typing.Optional[datetime.datetime]` — If provided, only objects synced by Merge after this date time will be returned.
@@ -69097,7 +68702,7 @@ client.filestorage.groups.list(
-**modified_before:** `typing.Optional[dt.datetime]` — If provided, only objects synced by Merge before this date time will be returned. +**modified_before:** `typing.Optional[datetime.datetime]` — If provided, only objects synced by Merge before this date time will be returned.
@@ -69133,7 +68738,7 @@ client.filestorage.groups.list(
-
client.filestorage.groups.retrieve(...) +
client.filestorage.groups.retrieve(...) -> Group
@@ -69161,11 +68766,13 @@ Returns a `Group` object with the given `id`. ```python from merge import Merge +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.filestorage.groups.retrieve( id="id", include_remote_data=True, @@ -69194,12 +68801,7 @@ client.filestorage.groups.retrieve(
-**expand:** `typing.Optional[ - typing.Union[ - GroupsRetrieveRequestExpandItem, - typing.Sequence[GroupsRetrieveRequestExpandItem], - ] -]` — Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces. +**expand:** `typing.Optional[typing.Union[GroupsRetrieveRequestExpandItem, typing.Sequence[GroupsRetrieveRequestExpandItem]]]` — Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces.
@@ -69236,7 +68838,7 @@ client.filestorage.groups.retrieve(
## Filestorage Issues -
client.filestorage.issues.list(...) +
client.filestorage.issues.list(...) -> PaginatedIssueList
@@ -69263,38 +68865,30 @@ Gets all issues for Organization.
```python -import datetime - from merge import Merge -from merge.resources.filestorage.resources.issues import IssuesListRequestStatus +from merge.environment import MergeEnvironment +import datetime client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.filestorage.issues.list( account_token="account_token", cursor="cD0yMDIxLTAxLTA2KzAzJTNBMjQlM0E1My40MzQzMjYlMkIwMCUzQTAw", end_date="end_date", end_user_organization_name="end_user_organization_name", - first_incident_time_after=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), - first_incident_time_before=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), + first_incident_time_after=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), + first_incident_time_before=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), include_muted="include_muted", integration_name="integration_name", - last_incident_time_after=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), - last_incident_time_before=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), + last_incident_time_after=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), + last_incident_time_before=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), linked_account_id="linked_account_id", page_size=1, start_date="start_date", - status=IssuesListRequestStatus.ONGOING, + status="ONGOING", ) ``` @@ -69343,7 +68937,7 @@ client.filestorage.issues.list(
-**first_incident_time_after:** `typing.Optional[dt.datetime]` — If provided, will only return issues whose first incident time was after this datetime. +**first_incident_time_after:** `typing.Optional[datetime.datetime]` — If provided, will only return issues whose first incident time was after this datetime.
@@ -69351,7 +68945,7 @@ client.filestorage.issues.list(
-**first_incident_time_before:** `typing.Optional[dt.datetime]` — If provided, will only return issues whose first incident time was before this datetime. +**first_incident_time_before:** `typing.Optional[datetime.datetime]` — If provided, will only return issues whose first incident time was before this datetime.
@@ -69375,7 +68969,7 @@ client.filestorage.issues.list(
-**last_incident_time_after:** `typing.Optional[dt.datetime]` — If provided, will only return issues whose last incident time was after this datetime. +**last_incident_time_after:** `typing.Optional[datetime.datetime]` — If provided, will only return issues whose last incident time was after this datetime.
@@ -69383,7 +68977,7 @@ client.filestorage.issues.list(
-**last_incident_time_before:** `typing.Optional[dt.datetime]` — If provided, will only return issues whose last incident time was before this datetime. +**last_incident_time_before:** `typing.Optional[datetime.datetime]` — If provided, will only return issues whose last incident time was before this datetime.
@@ -69440,7 +69034,7 @@ Status of the issue. Options: ('ONGOING', 'RESOLVED')
-
client.filestorage.issues.retrieve(...) +
client.filestorage.issues.retrieve(...) -> Issue
@@ -69468,11 +69062,13 @@ Get a specific issue. ```python from merge import Merge +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.filestorage.issues.retrieve( id="id", ) @@ -69512,7 +69108,7 @@ client.filestorage.issues.retrieve(
## Filestorage LinkToken -
client.filestorage.link_token.create(...) +
client.filestorage.link_token.create(...) -> LinkToken
@@ -69540,17 +69136,21 @@ Creates a link token to be used when linking a new end user. The link token expi ```python from merge import Merge -from merge.resources.filestorage import CategoriesEnum +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.filestorage.link_token.create( end_user_email_address="example@gmail.com", end_user_organization_name="Test Organization", end_user_origin_id="12345", - categories=[CategoriesEnum.HRIS, CategoriesEnum.ATS], + categories=[ + "hris", + "ats" + ], ) ``` @@ -69591,7 +69191,7 @@ client.filestorage.link_token.create(
-**categories:** `typing.Sequence[CategoriesEnum]` — The integration categories to show in Merge Link. +**categories:** `typing.List[CategoriesEnum]` — The integration categories to show in Merge Link.
@@ -69631,7 +69231,7 @@ client.filestorage.link_token.create(
-**common_models:** `typing.Optional[typing.Sequence[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. +**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.
@@ -69639,14 +69239,7 @@ client.filestorage.link_token.create(
-**category_common_model_scopes:** `typing.Optional[ - typing.Dict[ - str, - typing.Optional[ - typing.Sequence[IndividualCommonModelScopeDeserializerRequest] - ], - ] -]` — When creating a Link Token, you can set permissions for Common Models that will apply to the account that is going to be linked. Any model or field not specified in link token payload will default to existing settings. +**category_common_model_scopes:** `typing.Optional[typing.Dict[str, typing.Optional[typing.List[IndividualCommonModelScopeDeserializerRequest]]]]` — When creating a Link Token, you can set permissions for Common Models that will apply to the account that is going to be linked. Any model or field not specified in link token payload will default to existing settings.
@@ -69675,7 +69268,7 @@ The following subset of IETF language tags can be used to configure localization
-**integration_specific_config:** `typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]]` — A JSON object containing integration-specific configuration options. +**integration_specific_config:** `typing.Optional[typing.Dict[str, typing.Any]]` — A JSON object containing integration-specific configuration options.
@@ -69696,7 +69289,7 @@ The following subset of IETF language tags can be used to configure localization
## Filestorage LinkedAccounts -
client.filestorage.linked_accounts.list(...) +
client.filestorage.linked_accounts.list(...) -> PaginatedAccountDetailsAndActionsList
@@ -69724,16 +69317,15 @@ List linked accounts for your organization. ```python from merge import Merge -from merge.resources.filestorage.resources.linked_accounts import ( - LinkedAccountsListRequestCategory, -) +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.filestorage.linked_accounts.list( - category=LinkedAccountsListRequestCategory.ACCOUNTING, + category="accounting", cursor="cD0yMDIxLTAxLTA2KzAzJTNBMjQlM0E1My40MzQzMjYlMkIwMCUzQTAw", end_user_email_address="end_user_email_address", end_user_organization_name="end_user_organization_name", @@ -69889,7 +69481,7 @@ Options: `accounting`, `ats`, `crm`, `filestorage`, `hris`, `mktg`, `ticketing`
## Filestorage Passthrough -
client.filestorage.passthrough.create(...) +
client.filestorage.passthrough.create(...) -> RemoteResponse
@@ -69917,15 +69509,17 @@ Pull data from an endpoint not currently supported by Merge. ```python from merge import Merge -from merge.resources.filestorage import DataPassthroughRequest, MethodEnum +from merge.environment import MergeEnvironment +from merge.filestorage import DataPassthroughRequest client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.filestorage.passthrough.create( request=DataPassthroughRequest( - method=MethodEnum.GET, + method="GET", path="/scooters", ), ) @@ -69965,7 +69559,7 @@ client.filestorage.passthrough.create(
## Filestorage RegenerateKey -
client.filestorage.regenerate_key.create(...) +
client.filestorage.regenerate_key.create(...) -> RemoteKey
@@ -69993,11 +69587,13 @@ Exchange remote keys. ```python from merge import Merge +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.filestorage.regenerate_key.create( name="Remote Deployment Key 1", ) @@ -70037,7 +69633,7 @@ client.filestorage.regenerate_key.create(
## Filestorage SyncStatus -
client.filestorage.sync_status.list(...) +
client.filestorage.sync_status.list(...) -> PaginatedSyncStatusList
@@ -70065,11 +69661,13 @@ Get sync status for the current sync and the most recently finished sync. `last_ ```python from merge import Merge +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.filestorage.sync_status.list( cursor="cD0yMDIxLTAxLTA2KzAzJTNBMjQlM0E1My40MzQzMjYlMkIwMCUzQTAw", page_size=1, @@ -70118,7 +69716,7 @@ client.filestorage.sync_status.list(
## Filestorage ForceResync -
client.filestorage.force_resync.sync_status_resync_create() +
client.filestorage.force_resync.sync_status_resync_create() -> typing.List[SyncStatus]
@@ -70146,11 +69744,13 @@ Force re-sync of all models. This endpoint is available for monthly, quarterly, ```python from merge import Merge +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.filestorage.force_resync.sync_status_resync_create() ``` @@ -70180,7 +69780,7 @@ client.filestorage.force_resync.sync_status_resync_create()
## Filestorage Users -
client.filestorage.users.list(...) +
client.filestorage.users.list(...) -> PaginatedUserList
@@ -70207,33 +69807,26 @@ Returns a list of `User` objects.
```python -import datetime - from merge import Merge +from merge.environment import MergeEnvironment +import datetime client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.filestorage.users.list( - created_after=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), - created_before=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), + created_after=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), + created_before=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), cursor="cD0yMDIxLTAxLTA2KzAzJTNBMjQlM0E1My40MzQzMjYlMkIwMCUzQTAw", email_address="email_address", include_deleted_data=True, include_remote_data=True, include_shell_data=True, is_me="is_me", - modified_after=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), - modified_before=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), + modified_after=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), + modified_before=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), page_size=1, remote_id="remote_id", ) @@ -70252,7 +69845,7 @@ client.filestorage.users.list(
-**created_after:** `typing.Optional[dt.datetime]` — If provided, will only return objects created after this datetime. +**created_after:** `typing.Optional[datetime.datetime]` — If provided, will only return objects created after this datetime.
@@ -70260,7 +69853,7 @@ client.filestorage.users.list(
-**created_before:** `typing.Optional[dt.datetime]` — If provided, will only return objects created before this datetime. +**created_before:** `typing.Optional[datetime.datetime]` — If provided, will only return objects created before this datetime.
@@ -70316,7 +69909,7 @@ client.filestorage.users.list(
-**modified_after:** `typing.Optional[dt.datetime]` — If provided, only objects synced by Merge after this date time will be returned. +**modified_after:** `typing.Optional[datetime.datetime]` — If provided, only objects synced by Merge after this date time will be returned.
@@ -70324,7 +69917,7 @@ client.filestorage.users.list(
-**modified_before:** `typing.Optional[dt.datetime]` — If provided, only objects synced by Merge before this date time will be returned. +**modified_before:** `typing.Optional[datetime.datetime]` — If provided, only objects synced by Merge before this date time will be returned.
@@ -70360,7 +69953,7 @@ client.filestorage.users.list(
-
client.filestorage.users.retrieve(...) +
client.filestorage.users.retrieve(...) -> User
@@ -70388,11 +69981,13 @@ Returns a `User` object with the given `id`. ```python from merge import Merge +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.filestorage.users.retrieve( id="id", include_remote_data=True, @@ -70450,7 +70045,7 @@ client.filestorage.users.retrieve(
## Filestorage WebhookReceivers -
client.filestorage.webhook_receivers.list() +
client.filestorage.webhook_receivers.list() -> typing.List[WebhookReceiver]
@@ -70478,11 +70073,13 @@ Returns a list of `WebhookReceiver` objects. ```python from merge import Merge +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.filestorage.webhook_receivers.list() ``` @@ -70511,7 +70108,7 @@ client.filestorage.webhook_receivers.list()
-
client.filestorage.webhook_receivers.create(...) +
client.filestorage.webhook_receivers.create(...) -> WebhookReceiver
@@ -70539,11 +70136,13 @@ Creates a `WebhookReceiver` object with the given values. ```python from merge import Merge +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.filestorage.webhook_receivers.create( event="event", is_active=True, @@ -70600,7 +70199,7 @@ client.filestorage.webhook_receivers.create(
## Knowledgebase AccountDetails -
client.knowledgebase.account_details.retrieve() +
client.knowledgebase.account_details.retrieve() -> AccountDetails
@@ -70628,11 +70227,13 @@ Get details for a linked account. ```python from merge import Merge +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.knowledgebase.account_details.retrieve() ``` @@ -70662,7 +70263,7 @@ client.knowledgebase.account_details.retrieve()
## Knowledgebase AccountToken -
client.knowledgebase.account_token.retrieve(...) +
client.knowledgebase.account_token.retrieve(...) -> AccountToken
@@ -70690,11 +70291,13 @@ Returns the account token for the end user with the provided public token. ```python from merge import Merge +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.knowledgebase.account_token.retrieve( public_token="public_token", ) @@ -70733,7 +70336,7 @@ client.knowledgebase.account_token.retrieve(
-
client.knowledgebase.account_token.regenerate_create() +
client.knowledgebase.account_token.regenerate_create() -> RegenerateAccountToken
@@ -70761,11 +70364,13 @@ Exchange Linked Account account tokens. ```python from merge import Merge +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.knowledgebase.account_token.regenerate_create() ``` @@ -70795,7 +70400,7 @@ client.knowledgebase.account_token.regenerate_create()
## Knowledgebase Articles -
client.knowledgebase.articles.list(...) +
client.knowledgebase.articles.list(...) -> PaginatedArticleList
@@ -70822,41 +70427,31 @@ Returns a list of `Article` objects.
```python -import datetime - from merge import Merge -from merge.resources.knowledgebase.resources.articles import ( - ArticlesListRequestType, -) +from merge.environment import MergeEnvironment +import datetime client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.knowledgebase.articles.list( - created_after=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), - created_before=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), + created_after=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), + created_before=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), cursor="cD0yMDIxLTAxLTA2KzAzJTNBMjQlM0E1My40MzQzMjYlMkIwMCUzQTAw", include_deleted_data=True, include_remote_data=True, include_shell_data=True, - modified_after=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), - modified_before=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), + modified_after=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), + modified_before=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), page_size=1, parent_article_id="parent_article_id", parent_container_id="parent_container_id", remote_id="remote_id", root_container_id="root_container_id", status="status", - type=ArticlesListRequestType.EMPTY, + type="", ) ``` @@ -70873,7 +70468,7 @@ client.knowledgebase.articles.list(
-**created_after:** `typing.Optional[dt.datetime]` — If provided, will only return objects created after this datetime. +**created_after:** `typing.Optional[datetime.datetime]` — If provided, will only return objects created after this datetime.
@@ -70881,7 +70476,7 @@ client.knowledgebase.articles.list(
-**created_before:** `typing.Optional[dt.datetime]` — If provided, will only return objects created before this datetime. +**created_before:** `typing.Optional[datetime.datetime]` — If provided, will only return objects created before this datetime.
@@ -70897,12 +70492,7 @@ client.knowledgebase.articles.list(
-**expand:** `typing.Optional[ - typing.Union[ - ArticlesListRequestExpandItem, - typing.Sequence[ArticlesListRequestExpandItem], - ] -]` — Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces. +**expand:** `typing.Optional[typing.Union[ArticlesListRequestExpandItem, typing.Sequence[ArticlesListRequestExpandItem]]]` — Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces.
@@ -70934,7 +70524,7 @@ client.knowledgebase.articles.list(
-**modified_after:** `typing.Optional[dt.datetime]` — If provided, only objects synced by Merge after this date time will be returned. +**modified_after:** `typing.Optional[datetime.datetime]` — If provided, only objects synced by Merge after this date time will be returned.
@@ -70942,7 +70532,7 @@ client.knowledgebase.articles.list(
-**modified_before:** `typing.Optional[dt.datetime]` — If provided, only objects synced by Merge before this date time will be returned. +**modified_before:** `typing.Optional[datetime.datetime]` — If provided, only objects synced by Merge before this date time will be returned.
@@ -71018,7 +70608,7 @@ client.knowledgebase.articles.list(
-
client.knowledgebase.articles.retrieve(...) +
client.knowledgebase.articles.retrieve(...) -> Article
@@ -71046,11 +70636,13 @@ Returns an `Article` object with the given `id`. ```python from merge import Merge +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.knowledgebase.articles.retrieve( id="id", include_remote_data=True, @@ -71079,12 +70671,7 @@ client.knowledgebase.articles.retrieve(
-**expand:** `typing.Optional[ - typing.Union[ - ArticlesRetrieveRequestExpandItem, - typing.Sequence[ArticlesRetrieveRequestExpandItem], - ] -]` — Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces. +**expand:** `typing.Optional[typing.Union[ArticlesRetrieveRequestExpandItem, typing.Sequence[ArticlesRetrieveRequestExpandItem]]]` — Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces.
@@ -71121,7 +70708,7 @@ client.knowledgebase.articles.retrieve(
## Knowledgebase AsyncPassthrough -
client.knowledgebase.async_passthrough.create(...) +
client.knowledgebase.async_passthrough.create(...) -> AsyncPassthroughReciept
@@ -71149,15 +70736,17 @@ Asynchronously pull data from an endpoint not currently supported by Merge. ```python from merge import Merge -from merge.resources.knowledgebase import DataPassthroughRequest, MethodEnum +from merge.environment import MergeEnvironment +from merge.knowledgebase import DataPassthroughRequest client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.knowledgebase.async_passthrough.create( request=DataPassthroughRequest( - method=MethodEnum.GET, + method="GET", path="/scooters", ), ) @@ -71196,7 +70785,7 @@ client.knowledgebase.async_passthrough.create(
-
client.knowledgebase.async_passthrough.retrieve(...) +
client.knowledgebase.async_passthrough.retrieve(...) -> AsyncPassthroughRetrieveResponse
@@ -71224,11 +70813,13 @@ Retrieves data from earlier async-passthrough POST request ```python from merge import Merge +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.knowledgebase.async_passthrough.retrieve( async_passthrough_receipt_id="async_passthrough_receipt_id", ) @@ -71268,7 +70859,7 @@ client.knowledgebase.async_passthrough.retrieve(
## Knowledgebase Attachments -
client.knowledgebase.attachments.list(...) +
client.knowledgebase.attachments.list(...) -> PaginatedAttachmentList
@@ -71295,31 +70886,24 @@ Returns a list of `Attachment` objects.
```python -import datetime - from merge import Merge +from merge.environment import MergeEnvironment +import datetime client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.knowledgebase.attachments.list( - created_after=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), - created_before=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), + created_after=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), + created_before=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), cursor="cD0yMDIxLTAxLTA2KzAzJTNBMjQlM0E1My40MzQzMjYlMkIwMCUzQTAw", include_deleted_data=True, include_remote_data=True, include_shell_data=True, - modified_after=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), - modified_before=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), + modified_after=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), + modified_before=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), page_size=1, remote_id="remote_id", ) @@ -71338,7 +70922,7 @@ client.knowledgebase.attachments.list(
-**created_after:** `typing.Optional[dt.datetime]` — If provided, will only return objects created after this datetime. +**created_after:** `typing.Optional[datetime.datetime]` — If provided, will only return objects created after this datetime.
@@ -71346,7 +70930,7 @@ client.knowledgebase.attachments.list(
-**created_before:** `typing.Optional[dt.datetime]` — If provided, will only return objects created before this datetime. +**created_before:** `typing.Optional[datetime.datetime]` — If provided, will only return objects created before this datetime.
@@ -71386,7 +70970,7 @@ client.knowledgebase.attachments.list(
-**modified_after:** `typing.Optional[dt.datetime]` — If provided, only objects synced by Merge after this date time will be returned. +**modified_after:** `typing.Optional[datetime.datetime]` — If provided, only objects synced by Merge after this date time will be returned.
@@ -71394,7 +70978,7 @@ client.knowledgebase.attachments.list(
-**modified_before:** `typing.Optional[dt.datetime]` — If provided, only objects synced by Merge before this date time will be returned. +**modified_before:** `typing.Optional[datetime.datetime]` — If provided, only objects synced by Merge before this date time will be returned.
@@ -71430,7 +71014,7 @@ client.knowledgebase.attachments.list(
-
client.knowledgebase.attachments.retrieve(...) +
client.knowledgebase.attachments.retrieve(...) -> Attachment
@@ -71458,11 +71042,13 @@ Returns an `Attachment` object with the given `id`. ```python from merge import Merge +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.knowledgebase.attachments.retrieve( id="id", include_remote_data=True, @@ -71520,7 +71106,7 @@ client.knowledgebase.attachments.retrieve(
## Knowledgebase AuditTrail -
client.knowledgebase.audit_trail.list(...) +
client.knowledgebase.audit_trail.list(...) -> PaginatedAuditLogEventList
@@ -71548,11 +71134,13 @@ Gets a list of audit trail events. ```python from merge import Merge +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.knowledgebase.audit_trail.list( cursor="cD0yMDIxLTAxLTA2KzAzJTNBMjQlM0E1My40MzQzMjYlMkIwMCUzQTAw", end_date="end_date", @@ -71637,7 +71225,7 @@ client.knowledgebase.audit_trail.list(
## Knowledgebase AvailableActions -
client.knowledgebase.available_actions.retrieve() +
client.knowledgebase.available_actions.retrieve() -> AvailableActions
@@ -71665,11 +71253,13 @@ Returns a list of models and actions available for an account. ```python from merge import Merge +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.knowledgebase.available_actions.retrieve() ``` @@ -71699,7 +71289,7 @@ client.knowledgebase.available_actions.retrieve()
## Knowledgebase Containers -
client.knowledgebase.containers.list(...) +
client.knowledgebase.containers.list(...) -> PaginatedContainerList
@@ -71726,39 +71316,29 @@ Returns a list of `Container` objects.
```python -import datetime - from merge import Merge -from merge.resources.knowledgebase.resources.containers import ( - ContainersListRequestType, -) +from merge.environment import MergeEnvironment +import datetime client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.knowledgebase.containers.list( - created_after=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), - created_before=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), + created_after=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), + created_before=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), cursor="cD0yMDIxLTAxLTA2KzAzJTNBMjQlM0E1My40MzQzMjYlMkIwMCUzQTAw", include_deleted_data=True, include_remote_data=True, include_shell_data=True, - modified_after=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), - modified_before=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), + modified_after=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), + modified_before=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), page_size=1, parent_article_id="parent_article_id", parent_container_id="parent_container_id", remote_id="remote_id", - type=ContainersListRequestType.EMPTY, + type="", ) ``` @@ -71775,7 +71355,7 @@ client.knowledgebase.containers.list(
-**created_after:** `typing.Optional[dt.datetime]` — If provided, will only return objects created after this datetime. +**created_after:** `typing.Optional[datetime.datetime]` — If provided, will only return objects created after this datetime.
@@ -71783,7 +71363,7 @@ client.knowledgebase.containers.list(
-**created_before:** `typing.Optional[dt.datetime]` — If provided, will only return objects created before this datetime. +**created_before:** `typing.Optional[datetime.datetime]` — If provided, will only return objects created before this datetime.
@@ -71799,12 +71379,7 @@ client.knowledgebase.containers.list(
-**expand:** `typing.Optional[ - typing.Union[ - ContainersListRequestExpandItem, - typing.Sequence[ContainersListRequestExpandItem], - ] -]` — Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces. +**expand:** `typing.Optional[typing.Union[ContainersListRequestExpandItem, typing.Sequence[ContainersListRequestExpandItem]]]` — Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces.
@@ -71836,7 +71411,7 @@ client.knowledgebase.containers.list(
-**modified_after:** `typing.Optional[dt.datetime]` — If provided, only objects synced by Merge after this date time will be returned. +**modified_after:** `typing.Optional[datetime.datetime]` — If provided, only objects synced by Merge after this date time will be returned.
@@ -71844,7 +71419,7 @@ client.knowledgebase.containers.list(
-**modified_before:** `typing.Optional[dt.datetime]` — If provided, only objects synced by Merge before this date time will be returned. +**modified_before:** `typing.Optional[datetime.datetime]` — If provided, only objects synced by Merge before this date time will be returned.
@@ -71904,7 +71479,7 @@ client.knowledgebase.containers.list(
-
client.knowledgebase.containers.retrieve(...) +
client.knowledgebase.containers.retrieve(...) -> Container
@@ -71932,11 +71507,13 @@ Returns a `Container` object with the given `id`. ```python from merge import Merge +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.knowledgebase.containers.retrieve( id="id", include_remote_data=True, @@ -71965,12 +71542,7 @@ client.knowledgebase.containers.retrieve(
-**expand:** `typing.Optional[ - typing.Union[ - ContainersRetrieveRequestExpandItem, - typing.Sequence[ContainersRetrieveRequestExpandItem], - ] -]` — Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces. +**expand:** `typing.Optional[typing.Union[ContainersRetrieveRequestExpandItem, typing.Sequence[ContainersRetrieveRequestExpandItem]]]` — Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces.
@@ -72007,7 +71579,7 @@ client.knowledgebase.containers.retrieve(
## Knowledgebase Scopes -
client.knowledgebase.scopes.default_scopes_retrieve() +
client.knowledgebase.scopes.default_scopes_retrieve() -> CommonModelScopeApi
@@ -72035,11 +71607,13 @@ Get the default permissions for Merge Common Models and fields across all Linked ```python from merge import Merge +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.knowledgebase.scopes.default_scopes_retrieve() ``` @@ -72068,7 +71642,7 @@ client.knowledgebase.scopes.default_scopes_retrieve()
-
client.knowledgebase.scopes.linked_account_scopes_retrieve() +
client.knowledgebase.scopes.linked_account_scopes_retrieve() -> CommonModelScopeApi
@@ -72096,11 +71670,13 @@ Get all available permissions for Merge Common Models and fields for a single Li ```python from merge import Merge +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.knowledgebase.scopes.linked_account_scopes_retrieve() ``` @@ -72129,7 +71705,7 @@ client.knowledgebase.scopes.linked_account_scopes_retrieve()
-
client.knowledgebase.scopes.linked_account_scopes_create(...) +
client.knowledgebase.scopes.linked_account_scopes_create(...) -> CommonModelScopeApi
@@ -72157,16 +71733,14 @@ Update permissions for any Common Model or field for a single Linked Account. An ```python from merge import Merge -from merge.resources.knowledgebase import ( - FieldPermissionDeserializerRequest, - IndividualCommonModelScopeDeserializerRequest, - ModelPermissionDeserializerRequest, -) +from merge.environment import MergeEnvironment +from merge.knowledgebase import IndividualCommonModelScopeDeserializerRequest, ModelPermissionDeserializerRequest, FieldPermissionDeserializerRequest client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.knowledgebase.scopes.linked_account_scopes_create( common_models=[ IndividualCommonModelScopeDeserializerRequest( @@ -72177,11 +71751,16 @@ client.knowledgebase.scopes.linked_account_scopes_create( ), "WRITE": ModelPermissionDeserializerRequest( is_enabled=False, - ), + ) }, field_permissions=FieldPermissionDeserializerRequest( - enabled_fields=["avatar", "home_location"], - disabled_fields=["work_location"], + enabled_fields=[ + "avatar", + "home_location" + ], + disabled_fields=[ + "work_location" + ], ), ), IndividualCommonModelScopeDeserializerRequest( @@ -72191,7 +71770,7 @@ client.knowledgebase.scopes.linked_account_scopes_create( is_enabled=False, ) }, - ), + ) ], ) @@ -72209,7 +71788,7 @@ client.knowledgebase.scopes.linked_account_scopes_create(
-**common_models:** `typing.Sequence[IndividualCommonModelScopeDeserializerRequest]` — The common models you want to update the scopes for +**common_models:** `typing.List[IndividualCommonModelScopeDeserializerRequest]` — The common models you want to update the scopes for
@@ -72230,7 +71809,7 @@ client.knowledgebase.scopes.linked_account_scopes_create(
## Knowledgebase DeleteAccount -
client.knowledgebase.delete_account.delete() +
client.knowledgebase.delete_account.delete()
@@ -72258,11 +71837,13 @@ Delete a linked account. ```python from merge import Merge +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.knowledgebase.delete_account.delete() ``` @@ -72292,7 +71873,7 @@ client.knowledgebase.delete_account.delete()
## Knowledgebase FieldMapping -
client.knowledgebase.field_mapping.field_mappings_retrieve(...) +
client.knowledgebase.field_mapping.field_mappings_retrieve(...) -> FieldMappingApiInstanceResponse
@@ -72320,11 +71901,13 @@ Get all Field Mappings for this Linked Account. Field Mappings are mappings betw ```python from merge import Merge +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.knowledgebase.field_mapping.field_mappings_retrieve( exclude_remote_field_metadata=True, ) @@ -72363,7 +71946,7 @@ client.knowledgebase.field_mapping.field_mappings_retrieve(
-
client.knowledgebase.field_mapping.field_mappings_create(...) +
client.knowledgebase.field_mapping.field_mappings_create(...) -> FieldMappingInstanceResponse
@@ -72391,15 +71974,19 @@ Create new Field Mappings that will be available after the next scheduled sync. ```python from merge import Merge +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.knowledgebase.field_mapping.field_mappings_create( exclude_remote_field_metadata=True, remote_data_iteration_count=1, - remote_field_traversal_path=["example_remote_field"], + remote_field_traversal_path=[ + "example_remote_field" + ], remote_method="GET", remote_url_path="/example-url-path", common_model_name="ExampleCommonModel", @@ -72419,7 +72006,7 @@ client.knowledgebase.field_mapping.field_mappings_create(
-**remote_field_traversal_path:** `typing.Sequence[typing.Optional[typing.Any]]` — The field traversal path of the remote field listed when you hit the GET /remote-fields endpoint. +**remote_field_traversal_path:** `typing.List[typing.Any]` — The field traversal path of the remote field listed when you hit the GET /remote-fields endpoint.
@@ -72527,7 +72114,7 @@ client.knowledgebase.field_mapping.field_mappings_create(
-
client.knowledgebase.field_mapping.field_mappings_destroy(...) +
client.knowledgebase.field_mapping.field_mappings_destroy(...) -> FieldMappingInstanceResponse
@@ -72555,11 +72142,13 @@ Deletes Field Mappings for a Linked Account. All data related to this Field Mapp ```python from merge import Merge +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.knowledgebase.field_mapping.field_mappings_destroy( field_mapping_id="field_mapping_id", ) @@ -72598,7 +72187,7 @@ client.knowledgebase.field_mapping.field_mappings_destroy(
-
client.knowledgebase.field_mapping.field_mappings_partial_update(...) +
client.knowledgebase.field_mapping.field_mappings_partial_update(...) -> FieldMappingInstanceResponse
@@ -72626,11 +72215,13 @@ Create or update existing Field Mappings for a Linked Account. Changes will be r ```python from merge import Merge +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.knowledgebase.field_mapping.field_mappings_partial_update( field_mapping_id="field_mapping_id", remote_data_iteration_count=1, @@ -72666,7 +72257,7 @@ client.knowledgebase.field_mapping.field_mappings_partial_update(
-**remote_field_traversal_path:** `typing.Optional[typing.Sequence[typing.Optional[typing.Any]]]` — The field traversal path of the remote field listed when you hit the GET /remote-fields endpoint. +**remote_field_traversal_path:** `typing.Optional[typing.List[typing.Any]]` — The field traversal path of the remote field listed when you hit the GET /remote-fields endpoint.
@@ -72718,7 +72309,7 @@ client.knowledgebase.field_mapping.field_mappings_partial_update(
-
client.knowledgebase.field_mapping.remote_fields_retrieve(...) +
client.knowledgebase.field_mapping.remote_fields_retrieve(...) -> RemoteFieldApiResponse
@@ -72746,11 +72337,13 @@ Get all remote fields for a Linked Account. Remote fields are third-party fields ```python from merge import Merge +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.knowledgebase.field_mapping.remote_fields_retrieve( common_models="common_models", include_example_values="include_example_values", @@ -72798,7 +72391,7 @@ client.knowledgebase.field_mapping.remote_fields_retrieve(
-
client.knowledgebase.field_mapping.target_fields_retrieve() +
client.knowledgebase.field_mapping.target_fields_retrieve() -> ExternalTargetFieldApiResponse
@@ -72826,11 +72419,13 @@ Get all organization-wide Target Fields, this will not include any Linked Accoun ```python from merge import Merge +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.knowledgebase.field_mapping.target_fields_retrieve() ``` @@ -72859,7 +72454,7 @@ client.knowledgebase.field_mapping.target_fields_retrieve()
-
client.knowledgebase.field_mapping.target_fields_create(...) +
client.knowledgebase.field_mapping.target_fields_create(...) -> ExternalTargetFieldApiResponse
@@ -72887,11 +72482,13 @@ Create a new organization-wide Target Field. Target Fields are custom fields tha ```python from merge import Merge +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.knowledgebase.field_mapping.target_fields_create( name="employee_favorite_team", common_model="Employee", @@ -72948,7 +72545,7 @@ client.knowledgebase.field_mapping.target_fields_create(
## Knowledgebase GenerateKey -
client.knowledgebase.generate_key.create(...) +
client.knowledgebase.generate_key.create(...) -> RemoteKey
@@ -72976,11 +72573,13 @@ Create a remote key. ```python from merge import Merge +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.knowledgebase.generate_key.create( name="Remote Deployment Key 1", ) @@ -73020,7 +72619,7 @@ client.knowledgebase.generate_key.create(
## Knowledgebase Groups -
client.knowledgebase.groups.list(...) +
client.knowledgebase.groups.list(...) -> PaginatedGroupList
@@ -73047,31 +72646,24 @@ Returns a list of `Group` objects.
```python -import datetime - from merge import Merge +from merge.environment import MergeEnvironment +import datetime client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.knowledgebase.groups.list( - created_after=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), - created_before=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), + created_after=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), + created_before=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), cursor="cD0yMDIxLTAxLTA2KzAzJTNBMjQlM0E1My40MzQzMjYlMkIwMCUzQTAw", include_deleted_data=True, include_remote_data=True, include_shell_data=True, - modified_after=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), - modified_before=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), + modified_after=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), + modified_before=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), page_size=1, remote_id="remote_id", ) @@ -73090,7 +72682,7 @@ client.knowledgebase.groups.list(
-**created_after:** `typing.Optional[dt.datetime]` — If provided, will only return objects created after this datetime. +**created_after:** `typing.Optional[datetime.datetime]` — If provided, will only return objects created after this datetime.
@@ -73098,7 +72690,7 @@ client.knowledgebase.groups.list(
-**created_before:** `typing.Optional[dt.datetime]` — If provided, will only return objects created before this datetime. +**created_before:** `typing.Optional[datetime.datetime]` — If provided, will only return objects created before this datetime.
@@ -73114,12 +72706,7 @@ client.knowledgebase.groups.list(
-**expand:** `typing.Optional[ - typing.Union[ - GroupsListRequestExpandItem, - typing.Sequence[GroupsListRequestExpandItem], - ] -]` — Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces. +**expand:** `typing.Optional[typing.Union[GroupsListRequestExpandItem, typing.Sequence[GroupsListRequestExpandItem]]]` — Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces.
@@ -73151,7 +72738,7 @@ client.knowledgebase.groups.list(
-**modified_after:** `typing.Optional[dt.datetime]` — If provided, only objects synced by Merge after this date time will be returned. +**modified_after:** `typing.Optional[datetime.datetime]` — If provided, only objects synced by Merge after this date time will be returned.
@@ -73159,7 +72746,7 @@ client.knowledgebase.groups.list(
-**modified_before:** `typing.Optional[dt.datetime]` — If provided, only objects synced by Merge before this date time will be returned. +**modified_before:** `typing.Optional[datetime.datetime]` — If provided, only objects synced by Merge before this date time will be returned.
@@ -73195,7 +72782,7 @@ client.knowledgebase.groups.list(
-
client.knowledgebase.groups.retrieve(...) +
client.knowledgebase.groups.retrieve(...) -> Group
@@ -73223,11 +72810,13 @@ Returns a `Group` object with the given `id`. ```python from merge import Merge +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.knowledgebase.groups.retrieve( id="id", include_remote_data=True, @@ -73256,12 +72845,7 @@ client.knowledgebase.groups.retrieve(
-**expand:** `typing.Optional[ - typing.Union[ - GroupsRetrieveRequestExpandItem, - typing.Sequence[GroupsRetrieveRequestExpandItem], - ] -]` — Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces. +**expand:** `typing.Optional[typing.Union[GroupsRetrieveRequestExpandItem, typing.Sequence[GroupsRetrieveRequestExpandItem]]]` — Which relations should be returned in expanded form. Multiple relation names should be comma separated without spaces.
@@ -73298,7 +72882,7 @@ client.knowledgebase.groups.retrieve(
## Knowledgebase Issues -
client.knowledgebase.issues.list(...) +
client.knowledgebase.issues.list(...) -> PaginatedIssueList
@@ -73325,40 +72909,30 @@ Gets all issues for Organization.
```python -import datetime - from merge import Merge -from merge.resources.knowledgebase.resources.issues import ( - IssuesListRequestStatus, -) +from merge.environment import MergeEnvironment +import datetime client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.knowledgebase.issues.list( account_token="account_token", cursor="cD0yMDIxLTAxLTA2KzAzJTNBMjQlM0E1My40MzQzMjYlMkIwMCUzQTAw", end_date="end_date", end_user_organization_name="end_user_organization_name", - first_incident_time_after=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), - first_incident_time_before=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), + first_incident_time_after=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), + first_incident_time_before=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), include_muted="include_muted", integration_name="integration_name", - last_incident_time_after=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), - last_incident_time_before=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), + last_incident_time_after=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), + last_incident_time_before=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), linked_account_id="linked_account_id", page_size=1, start_date="start_date", - status=IssuesListRequestStatus.ONGOING, + status="ONGOING", ) ``` @@ -73407,7 +72981,7 @@ client.knowledgebase.issues.list(
-**first_incident_time_after:** `typing.Optional[dt.datetime]` — If provided, will only return issues whose first incident time was after this datetime. +**first_incident_time_after:** `typing.Optional[datetime.datetime]` — If provided, will only return issues whose first incident time was after this datetime.
@@ -73415,7 +72989,7 @@ client.knowledgebase.issues.list(
-**first_incident_time_before:** `typing.Optional[dt.datetime]` — If provided, will only return issues whose first incident time was before this datetime. +**first_incident_time_before:** `typing.Optional[datetime.datetime]` — If provided, will only return issues whose first incident time was before this datetime.
@@ -73439,7 +73013,7 @@ client.knowledgebase.issues.list(
-**last_incident_time_after:** `typing.Optional[dt.datetime]` — If provided, will only return issues whose last incident time was after this datetime. +**last_incident_time_after:** `typing.Optional[datetime.datetime]` — If provided, will only return issues whose last incident time was after this datetime.
@@ -73447,7 +73021,7 @@ client.knowledgebase.issues.list(
-**last_incident_time_before:** `typing.Optional[dt.datetime]` — If provided, will only return issues whose last incident time was before this datetime. +**last_incident_time_before:** `typing.Optional[datetime.datetime]` — If provided, will only return issues whose last incident time was before this datetime.
@@ -73499,7 +73073,7 @@ client.knowledgebase.issues.list(
-
client.knowledgebase.issues.retrieve(...) +
client.knowledgebase.issues.retrieve(...) -> Issue
@@ -73527,11 +73101,13 @@ Get a specific issue. ```python from merge import Merge +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.knowledgebase.issues.retrieve( id="id", ) @@ -73571,7 +73147,7 @@ client.knowledgebase.issues.retrieve(
## Knowledgebase LinkToken -
client.knowledgebase.link_token.create(...) +
client.knowledgebase.link_token.create(...) -> LinkToken
@@ -73599,17 +73175,21 @@ Creates a link token to be used when linking a new end user. The link token expi ```python from merge import Merge -from merge.resources.knowledgebase import CategoriesEnum +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.knowledgebase.link_token.create( end_user_email_address="example@gmail.com", end_user_organization_name="Test Organization", end_user_origin_id="12345", - categories=[CategoriesEnum.HRIS, CategoriesEnum.ATS], + categories=[ + "hris", + "ats" + ], ) ``` @@ -73650,7 +73230,7 @@ client.knowledgebase.link_token.create(
-**categories:** `typing.Sequence[CategoriesEnum]` — The integration categories to show in Merge Link. +**categories:** `typing.List[CategoriesEnum]` — The integration categories to show in Merge Link.
@@ -73690,7 +73270,7 @@ client.knowledgebase.link_token.create(
-**common_models:** `typing.Optional[typing.Sequence[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. +**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.
@@ -73698,14 +73278,7 @@ client.knowledgebase.link_token.create(
-**category_common_model_scopes:** `typing.Optional[ - typing.Dict[ - str, - typing.Optional[ - typing.Sequence[IndividualCommonModelScopeDeserializerRequest] - ], - ] -]` — When creating a Link Token, you can set permissions for Common Models that will apply to the account that is going to be linked. Any model or field not specified in link token payload will default to existing settings. +**category_common_model_scopes:** `typing.Optional[typing.Dict[str, typing.Optional[typing.List[IndividualCommonModelScopeDeserializerRequest]]]]` — When creating a Link Token, you can set permissions for Common Models that will apply to the account that is going to be linked. Any model or field not specified in link token payload will default to existing settings.
@@ -73729,7 +73302,7 @@ client.knowledgebase.link_token.create(
-**integration_specific_config:** `typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]]` — A JSON object containing integration-specific configuration options. +**integration_specific_config:** `typing.Optional[typing.Dict[str, typing.Any]]` — A JSON object containing integration-specific configuration options.
@@ -73774,7 +73347,7 @@ client.knowledgebase.link_token.create(
## Knowledgebase LinkedAccounts -
client.knowledgebase.linked_accounts.list(...) +
client.knowledgebase.linked_accounts.list(...) -> PaginatedAccountDetailsAndActionsList
@@ -73802,16 +73375,15 @@ List linked accounts for your organization. ```python from merge import Merge -from merge.resources.knowledgebase.resources.linked_accounts import ( - LinkedAccountsListRequestCategory, -) +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.knowledgebase.linked_accounts.list( - category=LinkedAccountsListRequestCategory.ACCOUNTING, + category="accounting", cursor="cD0yMDIxLTAxLTA2KzAzJTNBMjQlM0E1My40MzQzMjYlMkIwMCUzQTAw", end_user_email_address="end_user_email_address", end_user_organization_name="end_user_organization_name", @@ -73957,7 +73529,7 @@ client.knowledgebase.linked_accounts.list(
## Knowledgebase Passthrough -
client.knowledgebase.passthrough.create(...) +
client.knowledgebase.passthrough.create(...) -> RemoteResponse
@@ -73985,15 +73557,17 @@ Pull data from an endpoint not currently supported by Merge. ```python from merge import Merge -from merge.resources.knowledgebase import DataPassthroughRequest, MethodEnum +from merge.environment import MergeEnvironment +from merge.knowledgebase import DataPassthroughRequest client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.knowledgebase.passthrough.create( request=DataPassthroughRequest( - method=MethodEnum.GET, + method="GET", path="/scooters", ), ) @@ -74033,7 +73607,7 @@ client.knowledgebase.passthrough.create(
## Knowledgebase RegenerateKey -
client.knowledgebase.regenerate_key.create(...) +
client.knowledgebase.regenerate_key.create(...) -> RemoteKey
@@ -74061,11 +73635,13 @@ Exchange remote keys. ```python from merge import Merge +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.knowledgebase.regenerate_key.create( name="Remote Deployment Key 1", ) @@ -74105,7 +73681,7 @@ client.knowledgebase.regenerate_key.create(
## Knowledgebase SyncStatus -
client.knowledgebase.sync_status.list(...) +
client.knowledgebase.sync_status.list(...) -> PaginatedSyncStatusList
@@ -74133,11 +73709,13 @@ Get sync status for the current sync and the most recently finished sync. `last_ ```python from merge import Merge +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.knowledgebase.sync_status.list( cursor="cD0yMDIxLTAxLTA2KzAzJTNBMjQlM0E1My40MzQzMjYlMkIwMCUzQTAw", page_size=1, @@ -74186,7 +73764,7 @@ client.knowledgebase.sync_status.list(
## Knowledgebase ForceResync -
client.knowledgebase.force_resync.sync_status_resync_create() +
client.knowledgebase.force_resync.sync_status_resync_create() -> typing.List[SyncStatus]
@@ -74214,11 +73792,13 @@ Force re-sync of all models. This endpoint is available for monthly, quarterly, ```python from merge import Merge +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.knowledgebase.force_resync.sync_status_resync_create() ``` @@ -74248,7 +73828,7 @@ client.knowledgebase.force_resync.sync_status_resync_create()
## Knowledgebase Users -
client.knowledgebase.users.list(...) +
client.knowledgebase.users.list(...) -> PaginatedUserList
@@ -74275,31 +73855,24 @@ Returns a list of `User` objects.
```python -import datetime - from merge import Merge +from merge.environment import MergeEnvironment +import datetime client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.knowledgebase.users.list( - created_after=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), - created_before=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), + created_after=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), + created_before=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), cursor="cD0yMDIxLTAxLTA2KzAzJTNBMjQlM0E1My40MzQzMjYlMkIwMCUzQTAw", include_deleted_data=True, include_remote_data=True, include_shell_data=True, - modified_after=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), - modified_before=datetime.datetime.fromisoformat( - "2024-01-15 09:30:00+00:00", - ), + modified_after=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), + modified_before=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"), page_size=1, remote_id="remote_id", ) @@ -74318,7 +73891,7 @@ client.knowledgebase.users.list(
-**created_after:** `typing.Optional[dt.datetime]` — If provided, will only return objects created after this datetime. +**created_after:** `typing.Optional[datetime.datetime]` — If provided, will only return objects created after this datetime.
@@ -74326,7 +73899,7 @@ client.knowledgebase.users.list(
-**created_before:** `typing.Optional[dt.datetime]` — If provided, will only return objects created before this datetime. +**created_before:** `typing.Optional[datetime.datetime]` — If provided, will only return objects created before this datetime.
@@ -74366,7 +73939,7 @@ client.knowledgebase.users.list(
-**modified_after:** `typing.Optional[dt.datetime]` — If provided, only objects synced by Merge after this date time will be returned. +**modified_after:** `typing.Optional[datetime.datetime]` — If provided, only objects synced by Merge after this date time will be returned.
@@ -74374,7 +73947,7 @@ client.knowledgebase.users.list(
-**modified_before:** `typing.Optional[dt.datetime]` — If provided, only objects synced by Merge before this date time will be returned. +**modified_before:** `typing.Optional[datetime.datetime]` — If provided, only objects synced by Merge before this date time will be returned.
@@ -74410,7 +73983,7 @@ client.knowledgebase.users.list(
-
client.knowledgebase.users.retrieve(...) +
client.knowledgebase.users.retrieve(...) -> User
@@ -74438,11 +74011,13 @@ Returns a `User` object with the given `id`. ```python from merge import Merge +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.knowledgebase.users.retrieve( id="id", include_remote_data=True, @@ -74500,7 +74075,7 @@ client.knowledgebase.users.retrieve(
## Knowledgebase WebhookReceivers -
client.knowledgebase.webhook_receivers.list() +
client.knowledgebase.webhook_receivers.list() -> typing.List[WebhookReceiver]
@@ -74528,11 +74103,13 @@ Returns a list of `WebhookReceiver` objects. ```python from merge import Merge +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.knowledgebase.webhook_receivers.list() ``` @@ -74561,7 +74138,7 @@ client.knowledgebase.webhook_receivers.list()
-
client.knowledgebase.webhook_receivers.create(...) +
client.knowledgebase.webhook_receivers.create(...) -> WebhookReceiver
@@ -74589,11 +74166,13 @@ Creates a `WebhookReceiver` object with the given values. ```python from merge import Merge +from merge.environment import MergeEnvironment client = Merge( - account_token="YOUR_ACCOUNT_TOKEN", - api_key="YOUR_API_KEY", + api_key="", + environment=MergeEnvironment.PRODUCTION, ) + client.knowledgebase.webhook_receivers.create( event="event", is_active=True, diff --git a/src/merge/__init__.py b/src/merge/__init__.py index 1429d35f..579fd2df 100644 --- a/src/merge/__init__.py +++ b/src/merge/__init__.py @@ -34,8 +34,10 @@ def __getattr__(attr_name: str) -> typing.Any: raise AttributeError(f"No {attr_name} found in _dynamic_imports for module name -> {__name__}") try: module = import_module(module_name, __package__) - result = getattr(module, attr_name) - return result + if module_name == f".{attr_name}": + return module + else: + return getattr(module, attr_name) except ImportError as e: raise ImportError(f"Failed to import {attr_name} from {module_name}: {e}") from e except AttributeError as e: diff --git a/src/merge/client.py b/src/merge/client.py index 44d370b4..288a24a7 100644 --- a/src/merge/client.py +++ b/src/merge/client.py @@ -6,6 +6,7 @@ import httpx from .core.client_wrapper import AsyncClientWrapper, SyncClientWrapper +from .core.logging import LogConfig, Logger from .environment import MergeEnvironment if typing.TYPE_CHECKING: @@ -53,6 +54,9 @@ class Merge: httpx_client : typing.Optional[httpx.Client] The httpx client to use for making requests, a preconfigured client is used by default, however this is useful should you want to pass in any custom httpx configuration. + logging : typing.Optional[typing.Union[LogConfig, Logger]] + Configure logging for the SDK. Accepts a LogConfig dict with 'level' (debug/info/warn/error), 'logger' (custom logger implementation), and 'silent' (boolean, defaults to True) fields. You can also pass a pre-configured Logger instance. + Examples -------- from merge import Merge @@ -74,6 +78,7 @@ def __init__( timeout: typing.Optional[float] = None, follow_redirects: typing.Optional[bool] = True, httpx_client: typing.Optional[httpx.Client] = None, + logging: typing.Optional[typing.Union[LogConfig, Logger]] = None, ): _defaulted_timeout = ( timeout if timeout is not None else 60 if httpx_client is None else httpx_client.timeout.read @@ -89,6 +94,7 @@ def __init__( if follow_redirects is not None else httpx.Client(timeout=_defaulted_timeout), timeout=_defaulted_timeout, + logging=logging, ) self._ats: typing.Optional[AtsClient] = None self._accounting: typing.Optional[AccountingClient] = None @@ -214,6 +220,9 @@ class AsyncMerge: httpx_client : typing.Optional[httpx.AsyncClient] The httpx client to use for making requests, a preconfigured client is used by default, however this is useful should you want to pass in any custom httpx configuration. + logging : typing.Optional[typing.Union[LogConfig, Logger]] + Configure logging for the SDK. Accepts a LogConfig dict with 'level' (debug/info/warn/error), 'logger' (custom logger implementation), and 'silent' (boolean, defaults to True) fields. You can also pass a pre-configured Logger instance. + Examples -------- from merge import AsyncMerge @@ -235,6 +244,7 @@ def __init__( timeout: typing.Optional[float] = None, follow_redirects: typing.Optional[bool] = True, httpx_client: typing.Optional[httpx.AsyncClient] = None, + logging: typing.Optional[typing.Union[LogConfig, Logger]] = None, ): _defaulted_timeout = ( timeout if timeout is not None else 60 if httpx_client is None else httpx_client.timeout.read @@ -250,6 +260,7 @@ def __init__( if follow_redirects is not None else httpx.AsyncClient(timeout=_defaulted_timeout), timeout=_defaulted_timeout, + logging=logging, ) self._ats: typing.Optional[AsyncAtsClient] = None self._accounting: typing.Optional[AsyncAccountingClient] = None diff --git a/src/merge/core/__init__.py b/src/merge/core/__init__.py index 18228526..3b227d7f 100644 --- a/src/merge/core/__init__.py +++ b/src/merge/core/__init__.py @@ -8,11 +8,13 @@ if typing.TYPE_CHECKING: from .api_error import ApiError from .client_wrapper import AsyncClientWrapper, BaseClientWrapper, SyncClientWrapper - from .datetime_utils import serialize_datetime + from .datetime_utils import Rfc2822DateTime, parse_rfc2822_datetime, serialize_datetime from .file import File, convert_file_dict_to_httpx_tuples, with_content_type from .http_client import AsyncHttpClient, HttpClient from .http_response import AsyncHttpResponse, HttpResponse from .jsonable_encoder import jsonable_encoder + from .logging import ConsoleLogger, ILogger, LogConfig, LogLevel, Logger, create_logger + from .parse_error import ParsingError from .pydantic_utilities import ( IS_PYDANTIC_V2, UniversalBaseModel, @@ -33,12 +35,19 @@ "AsyncHttpClient": ".http_client", "AsyncHttpResponse": ".http_response", "BaseClientWrapper": ".client_wrapper", + "ConsoleLogger": ".logging", "FieldMetadata": ".serialization", "File": ".file", "HttpClient": ".http_client", "HttpResponse": ".http_response", + "ILogger": ".logging", "IS_PYDANTIC_V2": ".pydantic_utilities", + "LogConfig": ".logging", + "LogLevel": ".logging", + "Logger": ".logging", + "ParsingError": ".parse_error", "RequestOptions": ".request_options", + "Rfc2822DateTime": ".datetime_utils", "SyncClientWrapper": ".client_wrapper", "UncheckedBaseModel": ".unchecked_base_model", "UnionMetadata": ".unchecked_base_model", @@ -47,9 +56,11 @@ "construct_type": ".unchecked_base_model", "convert_and_respect_annotation_metadata": ".serialization", "convert_file_dict_to_httpx_tuples": ".file", + "create_logger": ".logging", "encode_query": ".query_encoder", "jsonable_encoder": ".jsonable_encoder", "parse_obj_as": ".pydantic_utilities", + "parse_rfc2822_datetime": ".datetime_utils", "remove_none_from_dict": ".remove_none_from_dict", "serialize_datetime": ".datetime_utils", "universal_field_validator": ".pydantic_utilities", @@ -65,8 +76,10 @@ def __getattr__(attr_name: str) -> typing.Any: raise AttributeError(f"No {attr_name} found in _dynamic_imports for module name -> {__name__}") try: module = import_module(module_name, __package__) - result = getattr(module, attr_name) - return result + if module_name == f".{attr_name}": + return module + else: + return getattr(module, attr_name) except ImportError as e: raise ImportError(f"Failed to import {attr_name} from {module_name}: {e}") from e except AttributeError as e: @@ -84,12 +97,19 @@ def __dir__(): "AsyncHttpClient", "AsyncHttpResponse", "BaseClientWrapper", + "ConsoleLogger", "FieldMetadata", "File", "HttpClient", "HttpResponse", + "ILogger", "IS_PYDANTIC_V2", + "LogConfig", + "LogLevel", + "Logger", + "ParsingError", "RequestOptions", + "Rfc2822DateTime", "SyncClientWrapper", "UncheckedBaseModel", "UnionMetadata", @@ -98,9 +118,11 @@ def __dir__(): "construct_type", "convert_and_respect_annotation_metadata", "convert_file_dict_to_httpx_tuples", + "create_logger", "encode_query", "jsonable_encoder", "parse_obj_as", + "parse_rfc2822_datetime", "remove_none_from_dict", "serialize_datetime", "universal_field_validator", diff --git a/src/merge/core/client_wrapper.py b/src/merge/core/client_wrapper.py index fb141371..20929ea0 100644 --- a/src/merge/core/client_wrapper.py +++ b/src/merge/core/client_wrapper.py @@ -4,6 +4,7 @@ import httpx from .http_client import AsyncHttpClient, HttpClient +from .logging import LogConfig, Logger class BaseClientWrapper: @@ -15,19 +16,25 @@ def __init__( headers: typing.Optional[typing.Dict[str, str]] = None, base_url: str, timeout: typing.Optional[float] = None, + logging: typing.Optional[typing.Union[LogConfig, Logger]] = None, ): self._account_token = account_token self._api_key = api_key self._headers = headers self._base_url = base_url self._timeout = timeout + self._logging = logging def get_headers(self) -> typing.Dict[str, str]: + import platform + headers: typing.Dict[str, str] = { - "User-Agent": "MergePythonClient/3.1.0", + "User-Agent": "MergePythonClient/4.0.0", "X-Fern-Language": "Python", + "X-Fern-Runtime": f"python/{platform.python_version()}", + "X-Fern-Platform": f"{platform.system().lower()}/{platform.release()}", "X-Fern-SDK-Name": "MergePythonClient", - "X-Fern-SDK-Version": "3.1.0", + "X-Fern-SDK-Version": "4.0.0", **(self.get_custom_headers() or {}), } if self._account_token is not None: @@ -60,16 +67,23 @@ def __init__( headers: typing.Optional[typing.Dict[str, str]] = None, base_url: str, timeout: typing.Optional[float] = None, + logging: typing.Optional[typing.Union[LogConfig, Logger]] = None, httpx_client: httpx.Client, ): super().__init__( - account_token=account_token, api_key=api_key, headers=headers, base_url=base_url, timeout=timeout + account_token=account_token, + api_key=api_key, + headers=headers, + base_url=base_url, + timeout=timeout, + logging=logging, ) self.httpx_client = HttpClient( httpx_client=httpx_client, base_headers=self.get_headers, base_timeout=self.get_timeout, base_url=self.get_base_url, + logging_config=self._logging, ) @@ -82,14 +96,31 @@ def __init__( headers: typing.Optional[typing.Dict[str, str]] = None, base_url: str, timeout: typing.Optional[float] = None, + logging: typing.Optional[typing.Union[LogConfig, Logger]] = None, + async_token: typing.Optional[typing.Callable[[], typing.Awaitable[str]]] = None, httpx_client: httpx.AsyncClient, ): super().__init__( - account_token=account_token, api_key=api_key, headers=headers, base_url=base_url, timeout=timeout + account_token=account_token, + api_key=api_key, + headers=headers, + base_url=base_url, + timeout=timeout, + logging=logging, ) + self._async_token = async_token self.httpx_client = AsyncHttpClient( httpx_client=httpx_client, base_headers=self.get_headers, base_timeout=self.get_timeout, base_url=self.get_base_url, + async_base_headers=self.async_get_headers, + logging_config=self._logging, ) + + async def async_get_headers(self) -> typing.Dict[str, str]: + headers = self.get_headers() + if self._async_token is not None: + token = await self._async_token() + headers["Authorization"] = f"Bearer {token}" + return headers diff --git a/src/merge/core/datetime_utils.py b/src/merge/core/datetime_utils.py index 7c9864a9..a12b2ad0 100644 --- a/src/merge/core/datetime_utils.py +++ b/src/merge/core/datetime_utils.py @@ -1,6 +1,48 @@ # This file was auto-generated by Fern from our API Definition. import datetime as dt +from email.utils import parsedate_to_datetime +from typing import Any + +import pydantic + +IS_PYDANTIC_V2 = pydantic.VERSION.startswith("2.") + + +def parse_rfc2822_datetime(v: Any) -> dt.datetime: + """ + Parse an RFC 2822 datetime string (e.g., "Wed, 02 Oct 2002 13:00:00 GMT") + into a datetime object. If the value is already a datetime, return it as-is. + Falls back to ISO 8601 parsing if RFC 2822 parsing fails. + """ + if isinstance(v, dt.datetime): + return v + if isinstance(v, str): + try: + return parsedate_to_datetime(v) + except Exception: + pass + # Fallback to ISO 8601 parsing + return dt.datetime.fromisoformat(v.replace("Z", "+00:00")) + raise ValueError(f"Expected str or datetime, got {type(v)}") + + +class Rfc2822DateTime(dt.datetime): + """A datetime subclass that parses RFC 2822 date strings. + + On Pydantic V1, uses __get_validators__ for pre-validation. + On Pydantic V2, uses __get_pydantic_core_schema__ for BeforeValidator-style parsing. + """ + + @classmethod + def __get_validators__(cls): # type: ignore[no-untyped-def] + yield parse_rfc2822_datetime + + @classmethod + def __get_pydantic_core_schema__(cls, _source_type: Any, _handler: Any) -> Any: # type: ignore[override] + from pydantic_core import core_schema + + return core_schema.no_info_before_validator_function(parse_rfc2822_datetime, core_schema.datetime_schema()) def serialize_datetime(v: dt.datetime) -> str: diff --git a/src/merge/core/enum.py b/src/merge/core/enum.py new file mode 100644 index 00000000..a3d17a67 --- /dev/null +++ b/src/merge/core/enum.py @@ -0,0 +1,20 @@ +# This file was auto-generated by Fern from our API Definition. + +""" +Provides a StrEnum base class that works across Python versions. + +For Python >= 3.11, this re-exports the standard library enum.StrEnum. +For older Python versions, this defines a compatible StrEnum using the +(str, Enum) mixin pattern so that generated SDKs can use a single base +class in all supported Python versions. +""" + +import enum +import sys + +if sys.version_info >= (3, 11): + from enum import StrEnum +else: + + class StrEnum(str, enum.Enum): + pass diff --git a/src/merge/core/http_client.py b/src/merge/core/http_client.py index e4173f99..ee937589 100644 --- a/src/merge/core/http_client.py +++ b/src/merge/core/http_client.py @@ -5,7 +5,6 @@ import re import time import typing -import urllib.parse from contextlib import asynccontextmanager, contextmanager from random import random @@ -13,14 +12,15 @@ from .file import File, convert_file_dict_to_httpx_tuples from .force_multipart import FORCE_MULTIPART from .jsonable_encoder import jsonable_encoder +from .logging import LogConfig, Logger, create_logger from .query_encoder import encode_query -from .remove_none_from_dict import remove_none_from_dict +from .remove_none_from_dict import remove_none_from_dict as remove_none_from_dict from .request_options import RequestOptions from httpx._types import RequestFiles -INITIAL_RETRY_DELAY_SECONDS = 0.5 -MAX_RETRY_DELAY_SECONDS = 10 -MAX_RETRY_DELAY_SECONDS_FROM_HEADER = 30 +INITIAL_RETRY_DELAY_SECONDS = 1.0 +MAX_RETRY_DELAY_SECONDS = 60.0 +JITTER_FACTOR = 0.2 # 20% random jitter def _parse_retry_after(response_headers: httpx.Headers) -> typing.Optional[float]: @@ -64,6 +64,38 @@ def _parse_retry_after(response_headers: httpx.Headers) -> typing.Optional[float return seconds +def _add_positive_jitter(delay: float) -> float: + """Add positive jitter (0-20%) to prevent thundering herd.""" + jitter_multiplier = 1 + random() * JITTER_FACTOR + return delay * jitter_multiplier + + +def _add_symmetric_jitter(delay: float) -> float: + """Add symmetric jitter (±10%) for exponential backoff.""" + jitter_multiplier = 1 + (random() - 0.5) * JITTER_FACTOR + return delay * jitter_multiplier + + +def _parse_x_ratelimit_reset(response_headers: httpx.Headers) -> typing.Optional[float]: + """ + Parse the X-RateLimit-Reset header (Unix timestamp in seconds). + Returns seconds to wait, or None if header is missing/invalid. + """ + reset_time_str = response_headers.get("x-ratelimit-reset") + if reset_time_str is None: + return None + + try: + reset_time = int(reset_time_str) + delay = reset_time - time.time() + if delay > 0: + return delay + except (ValueError, TypeError): + pass + + return None + + def _retry_timeout(response: httpx.Response, retries: int) -> float: """ Determine the amount of time to wait before retrying a request. @@ -71,17 +103,19 @@ def _retry_timeout(response: httpx.Response, retries: int) -> float: with a jitter to determine the number of seconds to wait. """ - # If the API asks us to wait a certain amount of time (and it's a reasonable amount), just do what it says. + # 1. Check Retry-After header first retry_after = _parse_retry_after(response.headers) - if retry_after is not None and retry_after <= MAX_RETRY_DELAY_SECONDS_FROM_HEADER: - return retry_after + if retry_after is not None and retry_after > 0: + return min(retry_after, MAX_RETRY_DELAY_SECONDS) - # Apply exponential backoff, capped at MAX_RETRY_DELAY_SECONDS. - retry_delay = min(INITIAL_RETRY_DELAY_SECONDS * pow(2.0, retries), MAX_RETRY_DELAY_SECONDS) + # 2. Check X-RateLimit-Reset header (with positive jitter) + ratelimit_reset = _parse_x_ratelimit_reset(response.headers) + if ratelimit_reset is not None: + return _add_positive_jitter(min(ratelimit_reset, MAX_RETRY_DELAY_SECONDS)) - # Add a randomness / jitter to the retry delay to avoid overwhelming the server with retries. - timeout = retry_delay * (1 - 0.25 * random()) - return timeout if timeout >= 0 else 0 + # 3. Fall back to exponential backoff (with symmetric jitter) + backoff = min(INITIAL_RETRY_DELAY_SECONDS * pow(2.0, retries), MAX_RETRY_DELAY_SECONDS) + return _add_symmetric_jitter(backoff) def _should_retry(response: httpx.Response) -> bool: @@ -89,6 +123,71 @@ def _should_retry(response: httpx.Response) -> bool: return response.status_code >= 500 or response.status_code in retryable_400s +_SENSITIVE_HEADERS = frozenset( + { + "authorization", + "www-authenticate", + "x-api-key", + "api-key", + "apikey", + "x-api-token", + "x-auth-token", + "auth-token", + "cookie", + "set-cookie", + "proxy-authorization", + "proxy-authenticate", + "x-csrf-token", + "x-xsrf-token", + "x-session-token", + "x-access-token", + } +) + + +def _redact_headers(headers: typing.Dict[str, str]) -> typing.Dict[str, str]: + return {k: ("[REDACTED]" if k.lower() in _SENSITIVE_HEADERS else v) for k, v in headers.items()} + + +def _build_url(base_url: str, path: typing.Optional[str]) -> str: + """ + Build a full URL by joining a base URL with a path. + + This function correctly handles base URLs that contain path prefixes (e.g., tenant-based URLs) + by using string concatenation instead of urllib.parse.urljoin(), which would incorrectly + strip path components when the path starts with '/'. + + Example: + >>> _build_url("https://cloud.example.com/org/tenant/api", "/users") + 'https://cloud.example.com/org/tenant/api/users' + + Args: + base_url: The base URL, which may contain path prefixes. + path: The path to append. Can be None or empty string. + + Returns: + The full URL with base_url and path properly joined. + """ + if not path: + return base_url + return f"{base_url.rstrip('/')}/{path.lstrip('/')}" + + +def _maybe_filter_none_from_multipart_data( + data: typing.Optional[typing.Any], + request_files: typing.Optional[RequestFiles], + force_multipart: typing.Optional[bool], +) -> typing.Optional[typing.Any]: + """ + Filter None values from data body for multipart/form requests. + This prevents httpx from converting None to empty strings in multipart encoding. + Only applies when files are present or force_multipart is True. + """ + if data is not None and isinstance(data, typing.Mapping) and (request_files or force_multipart): + return remove_none_from_dict(data) + return data + + def remove_omit_from_dict( original: typing.Dict[str, typing.Optional[typing.Any]], omit: typing.Optional[typing.Any], @@ -143,8 +242,19 @@ def get_request_body( # If both data and json are None, we send json data in the event extra properties are specified json_body = maybe_filter_request_body(json, request_options, omit) - # If you have an empty JSON body, you should just send None - return (json_body if json_body != {} else None), data_body if data_body != {} else None + has_additional_body_parameters = bool( + request_options is not None and request_options.get("additional_body_parameters") + ) + + # Only collapse empty dict to None when the body was not explicitly provided + # and there are no additional body parameters. This preserves explicit empty + # bodies (e.g., when an endpoint has a request body type but all fields are optional). + if json_body == {} and json is None and not has_additional_body_parameters: + json_body = None + if data_body == {} and data is None and not has_additional_body_parameters: + data_body = None + + return json_body, data_body class HttpClient: @@ -155,11 +265,13 @@ def __init__( base_timeout: typing.Callable[[], typing.Optional[float]], base_headers: typing.Callable[[], typing.Dict[str, str]], base_url: typing.Optional[typing.Callable[[], str]] = None, + logging_config: typing.Optional[typing.Union[LogConfig, Logger]] = None, ): self.base_url = base_url self.base_timeout = base_timeout self.base_headers = base_headers self.httpx_client = httpx_client + self.logger = create_logger(logging_config) def get_base_url(self, maybe_base_url: typing.Optional[str]) -> str: base_url = maybe_base_url @@ -188,7 +300,7 @@ def request( ] = None, headers: typing.Optional[typing.Dict[str, typing.Any]] = None, request_options: typing.Optional[RequestOptions] = None, - retries: int = 2, + retries: int = 0, omit: typing.Optional[typing.Any] = None, force_multipart: typing.Optional[bool] = None, ) -> httpx.Response: @@ -210,35 +322,53 @@ def request( if (request_files is None or len(request_files) == 0) and force_multipart: request_files = FORCE_MULTIPART - response = self.httpx_client.request( - method=method, - url=urllib.parse.urljoin(f"{base_url}/", path), - headers=jsonable_encoder( + data_body = _maybe_filter_none_from_multipart_data(data_body, request_files, force_multipart) + + # Compute encoded params separately to avoid passing empty list to httpx + # (httpx strips existing query params from URL when params=[] is passed) + _encoded_params = encode_query( + jsonable_encoder( remove_none_from_dict( - { - **self.base_headers(), - **(headers if headers is not None else {}), - **(request_options.get("additional_headers", {}) or {} if request_options is not None else {}), - } - ) - ), - params=encode_query( - jsonable_encoder( - remove_none_from_dict( - remove_omit_from_dict( - { - **(params if params is not None else {}), - **( - request_options.get("additional_query_parameters", {}) or {} - if request_options is not None - else {} - ), - }, - omit, - ) + remove_omit_from_dict( + { + **(params if params is not None else {}), + **( + request_options.get("additional_query_parameters", {}) or {} + if request_options is not None + else {} + ), + }, + omit, ) ) - ), + ) + ) + + _request_url = _build_url(base_url, path) + _request_headers = jsonable_encoder( + remove_none_from_dict( + { + **self.base_headers(), + **(headers if headers is not None else {}), + **(request_options.get("additional_headers", {}) or {} if request_options is not None else {}), + } + ) + ) + + if self.logger.is_debug(): + self.logger.debug( + "Making HTTP request", + method=method, + url=_request_url, + headers=_redact_headers(_request_headers), + has_body=json_body is not None or data_body is not None, + ) + + response = self.httpx_client.request( + method=method, + url=_request_url, + headers=_request_headers, + params=_encoded_params if _encoded_params else None, json=json_body, data=data_body, content=content, @@ -246,9 +376,9 @@ def request( timeout=timeout, ) - max_retries: int = request_options.get("max_retries", 0) if request_options is not None else 0 + max_retries: int = request_options.get("max_retries", 2) if request_options is not None else 2 if _should_retry(response=response): - if max_retries > retries: + if retries < max_retries: time.sleep(_retry_timeout(response=response, retries=retries)) return self.request( path=path, @@ -264,6 +394,24 @@ def request( omit=omit, ) + if self.logger.is_debug(): + if 200 <= response.status_code < 400: + self.logger.debug( + "HTTP request succeeded", + method=method, + url=_request_url, + status_code=response.status_code, + ) + + if self.logger.is_error(): + if response.status_code >= 400: + self.logger.error( + "HTTP request failed with error status", + method=method, + url=_request_url, + status_code=response.status_code, + ) + return response @contextmanager @@ -285,7 +433,7 @@ def stream( ] = None, headers: typing.Optional[typing.Dict[str, typing.Any]] = None, request_options: typing.Optional[RequestOptions] = None, - retries: int = 2, + retries: int = 0, omit: typing.Optional[typing.Any] = None, force_multipart: typing.Optional[bool] = None, ) -> typing.Iterator[httpx.Response]: @@ -307,35 +455,52 @@ def stream( json_body, data_body = get_request_body(json=json, data=data, request_options=request_options, omit=omit) - with self.httpx_client.stream( - method=method, - url=urllib.parse.urljoin(f"{base_url}/", path), - headers=jsonable_encoder( + data_body = _maybe_filter_none_from_multipart_data(data_body, request_files, force_multipart) + + # Compute encoded params separately to avoid passing empty list to httpx + # (httpx strips existing query params from URL when params=[] is passed) + _encoded_params = encode_query( + jsonable_encoder( remove_none_from_dict( - { - **self.base_headers(), - **(headers if headers is not None else {}), - **(request_options.get("additional_headers", {}) if request_options is not None else {}), - } - ) - ), - params=encode_query( - jsonable_encoder( - remove_none_from_dict( - remove_omit_from_dict( - { - **(params if params is not None else {}), - **( - request_options.get("additional_query_parameters", {}) - if request_options is not None - else {} - ), - }, - omit, - ) + remove_omit_from_dict( + { + **(params if params is not None else {}), + **( + request_options.get("additional_query_parameters", {}) + if request_options is not None + else {} + ), + }, + omit, ) ) - ), + ) + ) + + _request_url = _build_url(base_url, path) + _request_headers = jsonable_encoder( + remove_none_from_dict( + { + **self.base_headers(), + **(headers if headers is not None else {}), + **(request_options.get("additional_headers", {}) if request_options is not None else {}), + } + ) + ) + + if self.logger.is_debug(): + self.logger.debug( + "Making streaming HTTP request", + method=method, + url=_request_url, + headers=_redact_headers(_request_headers), + ) + + with self.httpx_client.stream( + method=method, + url=_request_url, + headers=_request_headers, + params=_encoded_params if _encoded_params else None, json=json_body, data=data_body, content=content, @@ -353,11 +518,20 @@ def __init__( base_timeout: typing.Callable[[], typing.Optional[float]], base_headers: typing.Callable[[], typing.Dict[str, str]], base_url: typing.Optional[typing.Callable[[], str]] = None, + async_base_headers: typing.Optional[typing.Callable[[], typing.Awaitable[typing.Dict[str, str]]]] = None, + logging_config: typing.Optional[typing.Union[LogConfig, Logger]] = None, ): self.base_url = base_url self.base_timeout = base_timeout self.base_headers = base_headers + self.async_base_headers = async_base_headers self.httpx_client = httpx_client + self.logger = create_logger(logging_config) + + async def _get_headers(self) -> typing.Dict[str, str]: + if self.async_base_headers is not None: + return await self.async_base_headers() + return self.base_headers() def get_base_url(self, maybe_base_url: typing.Optional[str]) -> str: base_url = maybe_base_url @@ -386,7 +560,7 @@ async def request( ] = None, headers: typing.Optional[typing.Dict[str, typing.Any]] = None, request_options: typing.Optional[RequestOptions] = None, - retries: int = 2, + retries: int = 0, omit: typing.Optional[typing.Any] = None, force_multipart: typing.Optional[bool] = None, ) -> httpx.Response: @@ -408,36 +582,56 @@ async def request( json_body, data_body = get_request_body(json=json, data=data, request_options=request_options, omit=omit) - # Add the input to each of these and do None-safety checks - response = await self.httpx_client.request( - method=method, - url=urllib.parse.urljoin(f"{base_url}/", path), - headers=jsonable_encoder( + data_body = _maybe_filter_none_from_multipart_data(data_body, request_files, force_multipart) + + # Get headers (supports async token providers) + _headers = await self._get_headers() + + # Compute encoded params separately to avoid passing empty list to httpx + # (httpx strips existing query params from URL when params=[] is passed) + _encoded_params = encode_query( + jsonable_encoder( remove_none_from_dict( - { - **self.base_headers(), - **(headers if headers is not None else {}), - **(request_options.get("additional_headers", {}) or {} if request_options is not None else {}), - } - ) - ), - params=encode_query( - jsonable_encoder( - remove_none_from_dict( - remove_omit_from_dict( - { - **(params if params is not None else {}), - **( - request_options.get("additional_query_parameters", {}) or {} - if request_options is not None - else {} - ), - }, - omit, - ) + remove_omit_from_dict( + { + **(params if params is not None else {}), + **( + request_options.get("additional_query_parameters", {}) or {} + if request_options is not None + else {} + ), + }, + omit, ) ) - ), + ) + ) + + _request_url = _build_url(base_url, path) + _request_headers = jsonable_encoder( + remove_none_from_dict( + { + **_headers, + **(headers if headers is not None else {}), + **(request_options.get("additional_headers", {}) or {} if request_options is not None else {}), + } + ) + ) + + if self.logger.is_debug(): + self.logger.debug( + "Making HTTP request", + method=method, + url=_request_url, + headers=_redact_headers(_request_headers), + has_body=json_body is not None or data_body is not None, + ) + + response = await self.httpx_client.request( + method=method, + url=_request_url, + headers=_request_headers, + params=_encoded_params if _encoded_params else None, json=json_body, data=data_body, content=content, @@ -445,9 +639,9 @@ async def request( timeout=timeout, ) - max_retries: int = request_options.get("max_retries", 0) if request_options is not None else 0 + max_retries: int = request_options.get("max_retries", 2) if request_options is not None else 2 if _should_retry(response=response): - if max_retries > retries: + if retries < max_retries: await asyncio.sleep(_retry_timeout(response=response, retries=retries)) return await self.request( path=path, @@ -462,6 +656,25 @@ async def request( retries=retries + 1, omit=omit, ) + + if self.logger.is_debug(): + if 200 <= response.status_code < 400: + self.logger.debug( + "HTTP request succeeded", + method=method, + url=_request_url, + status_code=response.status_code, + ) + + if self.logger.is_error(): + if response.status_code >= 400: + self.logger.error( + "HTTP request failed with error status", + method=method, + url=_request_url, + status_code=response.status_code, + ) + return response @asynccontextmanager @@ -483,7 +696,7 @@ async def stream( ] = None, headers: typing.Optional[typing.Dict[str, typing.Any]] = None, request_options: typing.Optional[RequestOptions] = None, - retries: int = 2, + retries: int = 0, omit: typing.Optional[typing.Any] = None, force_multipart: typing.Optional[bool] = None, ) -> typing.AsyncIterator[httpx.Response]: @@ -505,35 +718,55 @@ async def stream( json_body, data_body = get_request_body(json=json, data=data, request_options=request_options, omit=omit) - async with self.httpx_client.stream( - method=method, - url=urllib.parse.urljoin(f"{base_url}/", path), - headers=jsonable_encoder( + data_body = _maybe_filter_none_from_multipart_data(data_body, request_files, force_multipart) + + # Get headers (supports async token providers) + _headers = await self._get_headers() + + # Compute encoded params separately to avoid passing empty list to httpx + # (httpx strips existing query params from URL when params=[] is passed) + _encoded_params = encode_query( + jsonable_encoder( remove_none_from_dict( - { - **self.base_headers(), - **(headers if headers is not None else {}), - **(request_options.get("additional_headers", {}) if request_options is not None else {}), - } - ) - ), - params=encode_query( - jsonable_encoder( - remove_none_from_dict( - remove_omit_from_dict( - { - **(params if params is not None else {}), - **( - request_options.get("additional_query_parameters", {}) - if request_options is not None - else {} - ), - }, - omit=omit, - ) + remove_omit_from_dict( + { + **(params if params is not None else {}), + **( + request_options.get("additional_query_parameters", {}) + if request_options is not None + else {} + ), + }, + omit=omit, ) ) - ), + ) + ) + + _request_url = _build_url(base_url, path) + _request_headers = jsonable_encoder( + remove_none_from_dict( + { + **_headers, + **(headers if headers is not None else {}), + **(request_options.get("additional_headers", {}) if request_options is not None else {}), + } + ) + ) + + if self.logger.is_debug(): + self.logger.debug( + "Making streaming HTTP request", + method=method, + url=_request_url, + headers=_redact_headers(_request_headers), + ) + + async with self.httpx_client.stream( + method=method, + url=_request_url, + headers=_request_headers, + params=_encoded_params if _encoded_params else None, json=json_body, data=data_body, content=content, diff --git a/src/merge/core/http_response.py b/src/merge/core/http_response.py index 2479747e..00bb1096 100644 --- a/src/merge/core/http_response.py +++ b/src/merge/core/http_response.py @@ -9,7 +9,7 @@ class BaseHttpResponse: - """Minimalist HTTP response wrapper that exposes response headers.""" + """Minimalist HTTP response wrapper that exposes response headers and status code.""" _response: httpx.Response @@ -20,6 +20,10 @@ def __init__(self, response: httpx.Response): def headers(self) -> Dict[str, str]: return dict(self._response.headers) + @property + def status_code(self) -> int: + return self._response.status_code + class HttpResponse(Generic[T], BaseHttpResponse): """HTTP response wrapper that exposes response headers and data.""" diff --git a/src/merge/core/http_sse/__init__.py b/src/merge/core/http_sse/__init__.py new file mode 100644 index 00000000..730e5a33 --- /dev/null +++ b/src/merge/core/http_sse/__init__.py @@ -0,0 +1,42 @@ +# This file was auto-generated by Fern from our API Definition. + +# isort: skip_file + +import typing +from importlib import import_module + +if typing.TYPE_CHECKING: + from ._api import EventSource, aconnect_sse, connect_sse + from ._exceptions import SSEError + from ._models import ServerSentEvent +_dynamic_imports: typing.Dict[str, str] = { + "EventSource": "._api", + "SSEError": "._exceptions", + "ServerSentEvent": "._models", + "aconnect_sse": "._api", + "connect_sse": "._api", +} + + +def __getattr__(attr_name: str) -> typing.Any: + module_name = _dynamic_imports.get(attr_name) + if module_name is None: + raise AttributeError(f"No {attr_name} found in _dynamic_imports for module name -> {__name__}") + try: + module = import_module(module_name, __package__) + if module_name == f".{attr_name}": + return module + else: + return getattr(module, attr_name) + except ImportError as e: + raise ImportError(f"Failed to import {attr_name} from {module_name}: {e}") from e + except AttributeError as e: + raise AttributeError(f"Failed to get {attr_name} from {module_name}: {e}") from e + + +def __dir__(): + lazy_attrs = list(_dynamic_imports.keys()) + return sorted(lazy_attrs) + + +__all__ = ["EventSource", "SSEError", "ServerSentEvent", "aconnect_sse", "connect_sse"] diff --git a/src/merge/core/http_sse/_api.py b/src/merge/core/http_sse/_api.py new file mode 100644 index 00000000..f900b3b6 --- /dev/null +++ b/src/merge/core/http_sse/_api.py @@ -0,0 +1,112 @@ +# This file was auto-generated by Fern from our API Definition. + +import re +from contextlib import asynccontextmanager, contextmanager +from typing import Any, AsyncGenerator, AsyncIterator, Iterator, cast + +import httpx +from ._decoders import SSEDecoder +from ._exceptions import SSEError +from ._models import ServerSentEvent + + +class EventSource: + def __init__(self, response: httpx.Response) -> None: + self._response = response + + def _check_content_type(self) -> None: + content_type = self._response.headers.get("content-type", "").partition(";")[0] + if "text/event-stream" not in content_type: + raise SSEError( + f"Expected response header Content-Type to contain 'text/event-stream', got {content_type!r}" + ) + + def _get_charset(self) -> str: + """Extract charset from Content-Type header, fallback to UTF-8.""" + content_type = self._response.headers.get("content-type", "") + + # Parse charset parameter using regex + charset_match = re.search(r"charset=([^;\s]+)", content_type, re.IGNORECASE) + if charset_match: + charset = charset_match.group(1).strip("\"'") + # Validate that it's a known encoding + try: + # Test if the charset is valid by trying to encode/decode + "test".encode(charset).decode(charset) + return charset + except (LookupError, UnicodeError): + # If charset is invalid, fall back to UTF-8 + pass + + # Default to UTF-8 if no charset specified or invalid charset + return "utf-8" + + @property + def response(self) -> httpx.Response: + return self._response + + def iter_sse(self) -> Iterator[ServerSentEvent]: + self._check_content_type() + decoder = SSEDecoder() + charset = self._get_charset() + + buffer = "" + for chunk in self._response.iter_bytes(): + # Decode chunk using detected charset + text_chunk = chunk.decode(charset, errors="replace") + buffer += text_chunk + + # Process complete lines + while "\n" in buffer: + line, buffer = buffer.split("\n", 1) + line = line.rstrip("\r") + sse = decoder.decode(line) + # when we reach a "\n\n" => line = '' + # => decoder will attempt to return an SSE Event + if sse is not None: + yield sse + + # Process any remaining data in buffer + if buffer.strip(): + line = buffer.rstrip("\r") + sse = decoder.decode(line) + if sse is not None: + yield sse + + async def aiter_sse(self) -> AsyncGenerator[ServerSentEvent, None]: + self._check_content_type() + decoder = SSEDecoder() + lines = cast(AsyncGenerator[str, None], self._response.aiter_lines()) + try: + async for line in lines: + line = line.rstrip("\n") + sse = decoder.decode(line) + if sse is not None: + yield sse + finally: + await lines.aclose() + + +@contextmanager +def connect_sse(client: httpx.Client, method: str, url: str, **kwargs: Any) -> Iterator[EventSource]: + headers = kwargs.pop("headers", {}) + headers["Accept"] = "text/event-stream" + headers["Cache-Control"] = "no-store" + + with client.stream(method, url, headers=headers, **kwargs) as response: + yield EventSource(response) + + +@asynccontextmanager +async def aconnect_sse( + client: httpx.AsyncClient, + method: str, + url: str, + **kwargs: Any, +) -> AsyncIterator[EventSource]: + headers = kwargs.pop("headers", {}) + headers["Accept"] = "text/event-stream" + headers["Cache-Control"] = "no-store" + + async with client.stream(method, url, headers=headers, **kwargs) as response: + yield EventSource(response) diff --git a/src/merge/core/http_sse/_decoders.py b/src/merge/core/http_sse/_decoders.py new file mode 100644 index 00000000..339b0890 --- /dev/null +++ b/src/merge/core/http_sse/_decoders.py @@ -0,0 +1,61 @@ +# This file was auto-generated by Fern from our API Definition. + +from typing import List, Optional + +from ._models import ServerSentEvent + + +class SSEDecoder: + def __init__(self) -> None: + self._event = "" + self._data: List[str] = [] + self._last_event_id = "" + self._retry: Optional[int] = None + + def decode(self, line: str) -> Optional[ServerSentEvent]: + # See: https://html.spec.whatwg.org/multipage/server-sent-events.html#event-stream-interpretation # noqa: E501 + + if not line: + if not self._event and not self._data and not self._last_event_id and self._retry is None: + return None + + sse = ServerSentEvent( + event=self._event, + data="\n".join(self._data), + id=self._last_event_id, + retry=self._retry, + ) + + # NOTE: as per the SSE spec, do not reset last_event_id. + self._event = "" + self._data = [] + self._retry = None + + return sse + + if line.startswith(":"): + return None + + fieldname, _, value = line.partition(":") + + if value.startswith(" "): + value = value[1:] + + if fieldname == "event": + self._event = value + elif fieldname == "data": + self._data.append(value) + elif fieldname == "id": + if "\0" in value: + pass + else: + self._last_event_id = value + elif fieldname == "retry": + try: + self._retry = int(value) + except (TypeError, ValueError): + pass + else: + pass # Field is ignored. + + return None diff --git a/src/merge/core/http_sse/_exceptions.py b/src/merge/core/http_sse/_exceptions.py new file mode 100644 index 00000000..81605a8a --- /dev/null +++ b/src/merge/core/http_sse/_exceptions.py @@ -0,0 +1,7 @@ +# This file was auto-generated by Fern from our API Definition. + +import httpx + + +class SSEError(httpx.TransportError): + pass diff --git a/src/merge/core/http_sse/_models.py b/src/merge/core/http_sse/_models.py new file mode 100644 index 00000000..1af57f8f --- /dev/null +++ b/src/merge/core/http_sse/_models.py @@ -0,0 +1,17 @@ +# This file was auto-generated by Fern from our API Definition. + +import json +from dataclasses import dataclass +from typing import Any, Optional + + +@dataclass(frozen=True) +class ServerSentEvent: + event: str = "message" + data: str = "" + id: str = "" + retry: Optional[int] = None + + def json(self) -> Any: + """Parse the data field as JSON.""" + return json.loads(self.data) diff --git a/src/merge/core/jsonable_encoder.py b/src/merge/core/jsonable_encoder.py index afee3662..f8beaeaf 100644 --- a/src/merge/core/jsonable_encoder.py +++ b/src/merge/core/jsonable_encoder.py @@ -30,6 +30,10 @@ def jsonable_encoder(obj: Any, custom_encoder: Optional[Dict[Any, Callable[[Any], Any]]] = None) -> Any: custom_encoder = custom_encoder or {} + # Generated SDKs use Ellipsis (`...`) as the sentinel value for "OMIT". + # OMIT values should be excluded from serialized payloads. + if obj is Ellipsis: + return None if custom_encoder: if type(obj) in custom_encoder: return custom_encoder[type(obj)](obj) @@ -70,6 +74,8 @@ def jsonable_encoder(obj: Any, custom_encoder: Optional[Dict[Any, Callable[[Any] allowed_keys = set(obj.keys()) for key, value in obj.items(): if key in allowed_keys: + if value is Ellipsis: + continue encoded_key = jsonable_encoder(key, custom_encoder=custom_encoder) encoded_value = jsonable_encoder(value, custom_encoder=custom_encoder) encoded_dict[encoded_key] = encoded_value @@ -77,6 +83,8 @@ def jsonable_encoder(obj: Any, custom_encoder: Optional[Dict[Any, Callable[[Any] if isinstance(obj, (list, set, frozenset, GeneratorType, tuple)): encoded_list = [] for item in obj: + if item is Ellipsis: + continue encoded_list.append(jsonable_encoder(item, custom_encoder=custom_encoder)) return encoded_list diff --git a/src/merge/core/logging.py b/src/merge/core/logging.py new file mode 100644 index 00000000..e5e57245 --- /dev/null +++ b/src/merge/core/logging.py @@ -0,0 +1,107 @@ +# This file was auto-generated by Fern from our API Definition. + +import logging +import typing + +LogLevel = typing.Literal["debug", "info", "warn", "error"] + +_LOG_LEVEL_MAP: typing.Dict[LogLevel, int] = { + "debug": 1, + "info": 2, + "warn": 3, + "error": 4, +} + + +class ILogger(typing.Protocol): + def debug(self, message: str, **kwargs: typing.Any) -> None: ... + def info(self, message: str, **kwargs: typing.Any) -> None: ... + def warn(self, message: str, **kwargs: typing.Any) -> None: ... + def error(self, message: str, **kwargs: typing.Any) -> None: ... + + +class ConsoleLogger: + _logger: logging.Logger + + def __init__(self) -> None: + self._logger = logging.getLogger("fern") + if not self._logger.handlers: + handler = logging.StreamHandler() + handler.setFormatter(logging.Formatter("%(levelname)s - %(message)s")) + self._logger.addHandler(handler) + self._logger.setLevel(logging.DEBUG) + + def debug(self, message: str, **kwargs: typing.Any) -> None: + self._logger.debug(message, extra=kwargs) + + def info(self, message: str, **kwargs: typing.Any) -> None: + self._logger.info(message, extra=kwargs) + + def warn(self, message: str, **kwargs: typing.Any) -> None: + self._logger.warning(message, extra=kwargs) + + def error(self, message: str, **kwargs: typing.Any) -> None: + self._logger.error(message, extra=kwargs) + + +class LogConfig(typing.TypedDict, total=False): + level: LogLevel + logger: ILogger + silent: bool + + +class Logger: + _level: int + _logger: ILogger + _silent: bool + + def __init__(self, *, level: LogLevel, logger: ILogger, silent: bool) -> None: + self._level = _LOG_LEVEL_MAP[level] + self._logger = logger + self._silent = silent + + def _should_log(self, level: LogLevel) -> bool: + return not self._silent and self._level <= _LOG_LEVEL_MAP[level] + + def is_debug(self) -> bool: + return self._should_log("debug") + + def is_info(self) -> bool: + return self._should_log("info") + + def is_warn(self) -> bool: + return self._should_log("warn") + + def is_error(self) -> bool: + return self._should_log("error") + + def debug(self, message: str, **kwargs: typing.Any) -> None: + if self.is_debug(): + self._logger.debug(message, **kwargs) + + def info(self, message: str, **kwargs: typing.Any) -> None: + if self.is_info(): + self._logger.info(message, **kwargs) + + def warn(self, message: str, **kwargs: typing.Any) -> None: + if self.is_warn(): + self._logger.warn(message, **kwargs) + + def error(self, message: str, **kwargs: typing.Any) -> None: + if self.is_error(): + self._logger.error(message, **kwargs) + + +_default_logger: Logger = Logger(level="info", logger=ConsoleLogger(), silent=True) + + +def create_logger(config: typing.Optional[typing.Union[LogConfig, Logger]] = None) -> Logger: + if config is None: + return _default_logger + if isinstance(config, Logger): + return config + return Logger( + level=config.get("level", "info"), + logger=config.get("logger", ConsoleLogger()), + silent=config.get("silent", True), + ) diff --git a/src/merge/core/parse_error.py b/src/merge/core/parse_error.py new file mode 100644 index 00000000..4527c6a8 --- /dev/null +++ b/src/merge/core/parse_error.py @@ -0,0 +1,36 @@ +# This file was auto-generated by Fern from our API Definition. + +from typing import Any, Dict, Optional + + +class ParsingError(Exception): + """ + Raised when the SDK fails to parse/validate a response from the server. + This typically indicates that the server returned a response whose shape + does not match the expected schema. + """ + + headers: Optional[Dict[str, str]] + status_code: Optional[int] + body: Any + cause: Optional[Exception] + + def __init__( + self, + *, + headers: Optional[Dict[str, str]] = None, + status_code: Optional[int] = None, + body: Any = None, + cause: Optional[Exception] = None, + ) -> None: + self.headers = headers + self.status_code = status_code + self.body = body + self.cause = cause + super().__init__() + if cause is not None: + self.__cause__ = cause + + def __str__(self) -> str: + cause_str = f", cause: {self.cause}" if self.cause is not None else "" + return f"headers: {self.headers}, status_code: {self.status_code}, body: {self.body}{cause_str}" diff --git a/src/merge/core/pydantic_utilities.py b/src/merge/core/pydantic_utilities.py index 6bea25f3..ed95da8b 100644 --- a/src/merge/core/pydantic_utilities.py +++ b/src/merge/core/pydantic_utilities.py @@ -2,30 +2,128 @@ # nopycln: file import datetime as dt +import inspect +import json +import logging from collections import defaultdict -from typing import Any, Callable, Dict, List, Mapping, Tuple, Type, TypeVar, Union, cast +from dataclasses import asdict +from typing import ( + TYPE_CHECKING, + Any, + Callable, + ClassVar, + Dict, + List, + Mapping, + Optional, + Tuple, + Type, + TypeVar, + Union, + cast, +) import pydantic +import typing_extensions +from pydantic.fields import FieldInfo as _FieldInfo + +_logger = logging.getLogger(__name__) + +if TYPE_CHECKING: + from .http_sse._models import ServerSentEvent IS_PYDANTIC_V2 = pydantic.VERSION.startswith("2.") if IS_PYDANTIC_V2: - from pydantic.v1.datetime_parse import parse_date as parse_date - from pydantic.v1.datetime_parse import parse_datetime as parse_datetime - from pydantic.v1.fields import ModelField as ModelField - from pydantic.v1.json import ENCODERS_BY_TYPE as encoders_by_type # type: ignore[attr-defined] - from pydantic.v1.typing import get_args as get_args - from pydantic.v1.typing import get_origin as get_origin - from pydantic.v1.typing import is_literal_type as is_literal_type - from pydantic.v1.typing import is_union as is_union + _datetime_adapter = pydantic.TypeAdapter(dt.datetime) # type: ignore[attr-defined] + _date_adapter = pydantic.TypeAdapter(dt.date) # type: ignore[attr-defined] + + def parse_datetime(value: Any) -> dt.datetime: # type: ignore[misc] + if isinstance(value, dt.datetime): + return value + return _datetime_adapter.validate_python(value) + + def parse_date(value: Any) -> dt.date: # type: ignore[misc] + if isinstance(value, dt.datetime): + return value.date() + if isinstance(value, dt.date): + return value + return _date_adapter.validate_python(value) + + # Avoid importing from pydantic.v1 to maintain Python 3.14 compatibility. + from typing import get_args as get_args # type: ignore[assignment] + from typing import get_origin as get_origin # type: ignore[assignment] + + def is_literal_type(tp: Optional[Type[Any]]) -> bool: # type: ignore[misc] + return typing_extensions.get_origin(tp) is typing_extensions.Literal + + def is_union(tp: Optional[Type[Any]]) -> bool: # type: ignore[misc] + return tp is Union or typing_extensions.get_origin(tp) is Union # type: ignore[comparison-overlap] + + # Inline encoders_by_type to avoid importing from pydantic.v1.json + import re as _re + from collections import deque as _deque + from decimal import Decimal as _Decimal + from enum import Enum as _Enum + from ipaddress import ( + IPv4Address as _IPv4Address, + ) + from ipaddress import ( + IPv4Interface as _IPv4Interface, + ) + from ipaddress import ( + IPv4Network as _IPv4Network, + ) + from ipaddress import ( + IPv6Address as _IPv6Address, + ) + from ipaddress import ( + IPv6Interface as _IPv6Interface, + ) + from ipaddress import ( + IPv6Network as _IPv6Network, + ) + from pathlib import Path as _Path + from types import GeneratorType as _GeneratorType + from uuid import UUID as _UUID + + from pydantic.fields import FieldInfo as ModelField # type: ignore[no-redef, assignment] + + def _decimal_encoder(dec_value: Any) -> Any: + if dec_value.as_tuple().exponent >= 0: + return int(dec_value) + return float(dec_value) + + encoders_by_type: Dict[Type[Any], Callable[[Any], Any]] = { # type: ignore[no-redef] + bytes: lambda o: o.decode(), + dt.date: lambda o: o.isoformat(), + dt.datetime: lambda o: o.isoformat(), + dt.time: lambda o: o.isoformat(), + dt.timedelta: lambda td: td.total_seconds(), + _Decimal: _decimal_encoder, + _Enum: lambda o: o.value, + frozenset: list, + _deque: list, + _GeneratorType: list, + _IPv4Address: str, + _IPv4Interface: str, + _IPv4Network: str, + _IPv6Address: str, + _IPv6Interface: str, + _IPv6Network: str, + _Path: str, + _re.Pattern: lambda o: o.pattern, + set: list, + _UUID: str, + } else: from pydantic.datetime_parse import parse_date as parse_date # type: ignore[no-redef] from pydantic.datetime_parse import parse_datetime as parse_datetime # type: ignore[no-redef] - from pydantic.fields import ModelField as ModelField # type: ignore[attr-defined, no-redef] + from pydantic.fields import ModelField as ModelField # type: ignore[attr-defined, no-redef, assignment] from pydantic.json import ENCODERS_BY_TYPE as encoders_by_type # type: ignore[no-redef] from pydantic.typing import get_args as get_args # type: ignore[no-redef] from pydantic.typing import get_origin as get_origin # type: ignore[no-redef] - from pydantic.typing import is_literal_type as is_literal_type # type: ignore[no-redef] + from pydantic.typing import is_literal_type as is_literal_type # type: ignore[no-redef, assignment] from pydantic.typing import is_union as is_union # type: ignore[no-redef] from .datetime_utils import serialize_datetime @@ -35,6 +133,169 @@ Model = TypeVar("Model", bound=pydantic.BaseModel) +def _get_discriminator_and_variants(type_: Type[Any]) -> Tuple[Optional[str], Optional[List[Type[Any]]]]: + """ + Extract the discriminator field name and union variants from a discriminated union type. + Supports Annotated[Union[...], Field(discriminator=...)] patterns. + Returns (discriminator, variants) or (None, None) if not a discriminated union. + """ + origin = typing_extensions.get_origin(type_) + + if origin is typing_extensions.Annotated: + args = typing_extensions.get_args(type_) + if len(args) >= 2: + inner_type = args[0] + # Check annotations for discriminator + discriminator = None + for annotation in args[1:]: + if hasattr(annotation, "discriminator"): + discriminator = getattr(annotation, "discriminator", None) + break + + if discriminator: + inner_origin = typing_extensions.get_origin(inner_type) + if inner_origin is Union: + variants = list(typing_extensions.get_args(inner_type)) + return discriminator, variants + return None, None + + +def _get_field_annotation(model: Type[Any], field_name: str) -> Optional[Type[Any]]: + """Get the type annotation of a field from a Pydantic model.""" + if IS_PYDANTIC_V2: + fields = getattr(model, "model_fields", {}) + field_info = fields.get(field_name) + if field_info: + return cast(Optional[Type[Any]], field_info.annotation) + else: + fields = getattr(model, "__fields__", {}) + field_info = fields.get(field_name) + if field_info: + return cast(Optional[Type[Any]], field_info.outer_type_) + return None + + +def _find_variant_by_discriminator( + variants: List[Type[Any]], + discriminator: str, + discriminator_value: Any, +) -> Optional[Type[Any]]: + """Find the union variant that matches the discriminator value.""" + for variant in variants: + if not (inspect.isclass(variant) and issubclass(variant, pydantic.BaseModel)): + continue + + disc_annotation = _get_field_annotation(variant, discriminator) + if disc_annotation and is_literal_type(disc_annotation): + literal_args = get_args(disc_annotation) + if literal_args and literal_args[0] == discriminator_value: + return variant + return None + + +def _is_string_type(type_: Type[Any]) -> bool: + """Check if a type is str or Optional[str].""" + if type_ is str: + return True + + origin = typing_extensions.get_origin(type_) + if origin is Union: + args = typing_extensions.get_args(type_) + # Optional[str] = Union[str, None] + non_none_args = [a for a in args if a is not type(None)] + if len(non_none_args) == 1 and non_none_args[0] is str: + return True + + return False + + +def parse_sse_obj(sse: "ServerSentEvent", type_: Type[T]) -> T: + """ + Parse a ServerSentEvent into the appropriate type. + + Handles two scenarios based on where the discriminator field is located: + + 1. Data-level discrimination: The discriminator (e.g., 'type') is inside the 'data' payload. + The union describes the data content, not the SSE envelope. + -> Returns: json.loads(data) parsed into the type + + 2. Event-level discrimination: The discriminator (e.g., 'event') is at the SSE event level. + The union describes the full SSE event structure. + -> Returns: SSE envelope with 'data' field JSON-parsed only if the variant expects non-string + + Args: + sse: The ServerSentEvent object to parse + type_: The target discriminated union type + + Returns: + The parsed object of type T + + Note: + This function is only available in SDK contexts where http_sse module exists. + """ + sse_event = asdict(sse) + discriminator, variants = _get_discriminator_and_variants(type_) + + if discriminator is None or variants is None: + # Not a discriminated union - parse the data field as JSON + data_value = sse_event.get("data") + if isinstance(data_value, str) and data_value: + try: + parsed_data = json.loads(data_value) + return parse_obj_as(type_, parsed_data) + except json.JSONDecodeError as e: + _logger.warning( + "Failed to parse SSE data field as JSON: %s, data: %s", + e, + data_value[:100] if len(data_value) > 100 else data_value, + ) + return parse_obj_as(type_, sse_event) + + data_value = sse_event.get("data") + + # Check if discriminator is at the top level (event-level discrimination) + if discriminator in sse_event: + # Case 2: Event-level discrimination + # Find the matching variant to check if 'data' field needs JSON parsing + disc_value = sse_event.get(discriminator) + matching_variant = _find_variant_by_discriminator(variants, discriminator, disc_value) + + if matching_variant is not None: + # Check what type the variant expects for 'data' + data_type = _get_field_annotation(matching_variant, "data") + if data_type is not None and not _is_string_type(data_type): + # Variant expects non-string data - parse JSON + if isinstance(data_value, str) and data_value: + try: + parsed_data = json.loads(data_value) + new_object = dict(sse_event) + new_object["data"] = parsed_data + return parse_obj_as(type_, new_object) + except json.JSONDecodeError as e: + _logger.warning( + "Failed to parse SSE data field as JSON for event-level discrimination: %s, data: %s", + e, + data_value[:100] if len(data_value) > 100 else data_value, + ) + # Either no matching variant, data is string type, or JSON parse failed + return parse_obj_as(type_, sse_event) + + else: + # Case 1: Data-level discrimination + # The discriminator is inside the data payload - extract and parse data only + if isinstance(data_value, str) and data_value: + try: + parsed_data = json.loads(data_value) + return parse_obj_as(type_, parsed_data) + except json.JSONDecodeError as e: + _logger.warning( + "Failed to parse SSE data field as JSON for data-level discrimination: %s, data: %s", + e, + data_value[:100] if len(data_value) > 100 else data_value, + ) + return parse_obj_as(type_, sse_event) + + def parse_obj_as(type_: Type[T], object_: Any) -> T: if IS_PYDANTIC_V2: adapter = pydantic.TypeAdapter(type_) # type: ignore[attr-defined] @@ -51,13 +312,37 @@ def to_jsonable_with_fallback(obj: Any, fallback_serializer: Callable[[Any], Any class UniversalBaseModel(pydantic.BaseModel): - class Config: - populate_by_name = True - smart_union = True - allow_population_by_field_name = True - json_encoders = {dt.datetime: serialize_datetime} - # Allow fields beginning with `model_` to be used in the model - protected_namespaces = () + if IS_PYDANTIC_V2: + model_config: ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict( # type: ignore[typeddict-unknown-key] + validate_by_name=True, + validate_by_alias=True, + # Allow fields beginning with `model_` to be used in the model + protected_namespaces=(), + ) + + @pydantic.model_serializer(mode="plain", when_used="json") # type: ignore[attr-defined] + def serialize_model(self) -> Any: # type: ignore[name-defined] + def _serialize_recursive(obj: Any) -> Any: + if isinstance(obj, dt.datetime): + return serialize_datetime(obj) + elif isinstance(obj, dict): + return {k: _serialize_recursive(v) for k, v in obj.items()} + elif isinstance(obj, list): + return [_serialize_recursive(item) for item in obj] + return obj + + serialized = self.model_dump() # type: ignore[attr-defined] + return _serialize_recursive(serialized) + + else: + + class Config: + populate_by_name = True + smart_union = True + allow_population_by_field_name = True + json_encoders = {dt.datetime: serialize_datetime} + # Allow fields beginning with `model_` to be used in the model + protected_namespaces = () def json(self, **kwargs: Any) -> str: kwargs_with_defaults = { @@ -185,10 +470,14 @@ def update_forward_refs(model: Type["Model"], **localns: Any) -> None: AnyCallable = Callable[..., Any] -def universal_root_validator(pre: bool = False) -> Callable[[AnyCallable], AnyCallable]: +def universal_root_validator( + pre: bool = False, +) -> Callable[[AnyCallable], AnyCallable]: def decorator(func: AnyCallable) -> AnyCallable: if IS_PYDANTIC_V2: - return cast(AnyCallable, pydantic.model_validator(mode="before" if pre else "after")(func)) # type: ignore[attr-defined] + # In Pydantic v2, for RootModel we always use "before" mode + # The custom validators transform the input value before the model is created + return cast(AnyCallable, pydantic.model_validator(mode="before")(func)) # type: ignore[attr-defined] return cast(AnyCallable, pydantic.root_validator(pre=pre)(func)) # type: ignore[call-overload] return decorator @@ -203,7 +492,7 @@ def decorator(func: AnyCallable) -> AnyCallable: return decorator -PydanticField = Union[ModelField, pydantic.fields.FieldInfo] +PydanticField = Union[ModelField, _FieldInfo] def _get_model_fields(model: Type["Model"]) -> Mapping[str, PydanticField]: diff --git a/src/merge/core/unchecked_base_model.py b/src/merge/core/unchecked_base_model.py index ae59845f..43879b80 100644 --- a/src/merge/core/unchecked_base_model.py +++ b/src/merge/core/unchecked_base_model.py @@ -1,13 +1,15 @@ # This file was auto-generated by Fern from our API Definition. import datetime as dt +import enum import inspect +import sys import typing import uuid import pydantic import typing_extensions -from .pydantic_utilities import ( +from .pydantic_utilities import ( # type: ignore[attr-defined] IS_PYDANTIC_V2, ModelField, UniversalBaseModel, @@ -33,6 +35,28 @@ def __init__(self, *, discriminant: str) -> None: Model = typing.TypeVar("Model", bound=pydantic.BaseModel) +def _maybe_resolve_forward_ref( + type_: typing.Any, + host: typing.Optional[typing.Type[typing.Any]], +) -> typing.Any: + """Resolve a ForwardRef using the module where *host* is defined. + + Pydantic v2 + ``from __future__ import annotations`` can leave field + annotations as ``list[ForwardRef('Block')]`` even after ``model_rebuild``. + Without resolution, ``construct_type`` sees a ForwardRef (not a class) and + skips recursive model construction, leaving nested data as raw dicts. + """ + if host is None or not isinstance(type_, typing.ForwardRef): + return type_ + mod = sys.modules.get(host.__module__) + if mod is None: + return type_ + try: + return eval(type_.__forward_arg__, vars(mod)) + except Exception: + return type_ + + class UncheckedBaseModel(UniversalBaseModel): if IS_PYDANTIC_V2: model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow") # type: ignore # Pydantic v2 @@ -86,7 +110,7 @@ def construct( type_ = typing.cast(typing.Type, field.outer_type_) # type: ignore # Pydantic < v1.10.15 fields_values[name] = ( - construct_type(object_=values[key], type_=type_) if type_ is not None else values[key] + construct_type(object_=values[key], type_=type_, host=cls) if type_ is not None else values[key] ) _fields_set.add(name) else: @@ -150,15 +174,75 @@ def _validate_collection_items_compatible(collection: typing.Any, target_type: t return True -def _convert_undiscriminated_union_type(union_type: typing.Type[typing.Any], object_: typing.Any) -> typing.Any: +def _get_literal_field_value( + inner_type: typing.Type[typing.Any], field_name: str, field: typing.Any, object_: typing.Any +) -> typing.Any: + """Get the value of a Literal field from *object_*, checking both alias and field name.""" + name_or_alias = get_field_to_alias_mapping(inner_type).get(field_name, field_name) + pydantic_alias = getattr(field, "alias", None) + if isinstance(object_, dict): + if name_or_alias in object_: + return object_[name_or_alias] + if pydantic_alias and pydantic_alias != name_or_alias and pydantic_alias in object_: + return object_[pydantic_alias] + return None + return getattr(object_, name_or_alias, getattr(object_, pydantic_alias, None) if pydantic_alias else None) + + +def _literal_fields_match_strict(inner_type: typing.Type[typing.Any], object_: typing.Any) -> bool: + """Return True iff every Literal-typed field in *inner_type* is **present** in + *object_* and its value equals the field's declared default. + + This prevents models whose fields are all optional (e.g. ``FigureDetails``) + from vacuously matching inputs that don't carry the discriminant key at all + (e.g. ``{}`` for text blocks). For types with no Literal fields this + returns True unconditionally. + """ + fields = _get_model_fields(inner_type) + for field_name, field in fields.items(): + if IS_PYDANTIC_V2: + field_type = field.annotation # type: ignore # Pydantic v2 + else: + field_type = field.outer_type_ # type: ignore # Pydantic v1 + + if is_literal_type(field_type): # type: ignore[arg-type] + field_default = _get_field_default(field) + object_value = _get_literal_field_value(inner_type, field_name, field, object_) + if field_default != object_value: + return False + return True + + +def _convert_undiscriminated_union_type( + union_type: typing.Type[typing.Any], + object_: typing.Any, + host: typing.Optional[typing.Type[typing.Any]] = None, +) -> typing.Any: inner_types = get_args(union_type) if typing.Any in inner_types: return object_ + # When any union member carries a Literal discriminant field, require the + # discriminant key to be present AND matching before accepting a candidate. + # This prevents models with all-optional fields (e.g. FigureDetails) from + # greedily matching inputs that belong to a different variant or to a + # plain-dict fallback (e.g. EmptyBlockDetails = Dict[str, Any]). + has_literal_discriminant = any( + inspect.isclass(t) + and issubclass(t, pydantic.BaseModel) + and any( + is_literal_type( + f.annotation if IS_PYDANTIC_V2 else f.outer_type_ # type: ignore + ) + for f in _get_model_fields(t).values() + ) + for t in inner_types + ) + for inner_type in inner_types: # Handle lists of objects that need parsing if get_origin(inner_type) is list and isinstance(object_, list): - list_inner_type = get_args(inner_type)[0] + list_inner_type = _maybe_resolve_forward_ref(get_args(inner_type)[0], host) try: if inspect.isclass(list_inner_type) and issubclass(list_inner_type, pydantic.BaseModel): # Validate that all items in the list are compatible with the target type @@ -170,20 +254,63 @@ def _convert_undiscriminated_union_type(union_type: typing.Type[typing.Any], obj try: if inspect.isclass(inner_type) and issubclass(inner_type, pydantic.BaseModel): + if has_literal_discriminant and not _literal_fields_match_strict(inner_type, object_): + continue # Attempt a validated parse until one works return parse_obj_as(inner_type, object_) except Exception: continue - # If none of the types work, just return the first successful cast + # First pass: try types where all literal fields match the object's values. + for inner_type in inner_types: + if inspect.isclass(inner_type) and issubclass(inner_type, pydantic.BaseModel): + if has_literal_discriminant: + if not _literal_fields_match_strict(inner_type, object_): + continue + else: + # Legacy lenient check: skip only when a Literal value is + # present but doesn't match (allows absent-discriminant inputs). + fields = _get_model_fields(inner_type) + literal_fields_match = True + for field_name, field in fields.items(): + if IS_PYDANTIC_V2: + field_type = field.annotation # type: ignore # Pydantic v2 + else: + field_type = field.outer_type_ # type: ignore # Pydantic v1 + + if is_literal_type(field_type): # type: ignore[arg-type] + field_default = _get_field_default(field) + object_value = _get_literal_field_value(inner_type, field_name, field, object_) + if object_value is not None and field_default != object_value: + literal_fields_match = False + break + + if not literal_fields_match: + continue + + try: + return construct_type(object_=object_, type_=inner_type, host=host) + except Exception: + continue + + # Second pass: if no literal matches, return the first successful cast. + # When a Literal discriminant is present, skip Pydantic models whose + # discriminant doesn't match so that plain-dict fallback types are reached. for inner_type in inner_types: try: - return construct_type(object_=object_, type_=inner_type) + if has_literal_discriminant and inspect.isclass(inner_type) and issubclass(inner_type, pydantic.BaseModel): + if not _literal_fields_match_strict(inner_type, object_): + continue + return construct_type(object_=object_, type_=inner_type, host=host) except Exception: continue -def _convert_union_type(type_: typing.Type[typing.Any], object_: typing.Any) -> typing.Any: +def _convert_union_type( + type_: typing.Type[typing.Any], + object_: typing.Any, + host: typing.Optional[typing.Type[typing.Any]] = None, +) -> typing.Any: base_type = get_origin(type_) or type_ union_type = type_ if base_type == typing_extensions.Annotated: # type: ignore[comparison-overlap] @@ -199,14 +326,19 @@ def _convert_union_type(type_: typing.Type[typing.Any], object_: typing.Any) -> except: objects_discriminant = object_[metadata.discriminant] if inner_type.__fields__[metadata.discriminant].default == objects_discriminant: - return construct_type(object_=object_, type_=inner_type) + return construct_type(object_=object_, type_=inner_type, host=host) except Exception: # Allow to fall through to our regular union handling pass - return _convert_undiscriminated_union_type(union_type, object_) + return _convert_undiscriminated_union_type(union_type, object_, host) -def construct_type(*, type_: typing.Type[typing.Any], object_: typing.Any) -> typing.Any: +def construct_type( + *, + type_: typing.Type[typing.Any], + object_: typing.Any, + host: typing.Optional[typing.Type[typing.Any]] = None, +) -> typing.Any: """ Here we are essentially creating the same `construct` method in spirit as the above, but for all types, not just Pydantic models. @@ -229,8 +361,12 @@ def construct_type(*, type_: typing.Type[typing.Any], object_: typing.Any) -> ty return object_ key_type, items_type = get_args(type_) + key_type = _maybe_resolve_forward_ref(key_type, host) + items_type = _maybe_resolve_forward_ref(items_type, host) d = { - construct_type(object_=key, type_=key_type): construct_type(object_=item, type_=items_type) + construct_type(object_=key, type_=key_type, host=host): construct_type( + object_=item, type_=items_type, host=host + ) for key, item in object_.items() } return d @@ -239,18 +375,18 @@ def construct_type(*, type_: typing.Type[typing.Any], object_: typing.Any) -> ty if not isinstance(object_, list): return object_ - inner_type = get_args(type_)[0] - return [construct_type(object_=entry, type_=inner_type) for entry in object_] + inner_type = _maybe_resolve_forward_ref(get_args(type_)[0], host) + return [construct_type(object_=entry, type_=inner_type, host=host) for entry in object_] if base_type == set: if not isinstance(object_, set) and not isinstance(object_, list): return object_ - inner_type = get_args(type_)[0] - return {construct_type(object_=entry, type_=inner_type) for entry in object_} + inner_type = _maybe_resolve_forward_ref(get_args(type_)[0], host) + return {construct_type(object_=entry, type_=inner_type, host=host) for entry in object_} if is_union(base_type) or is_annotated_union: - return _convert_union_type(type_, object_) + return _convert_union_type(type_, object_, host) # Cannot do an `issubclass` with a literal type, let's also just confirm we have a class before this call if ( @@ -304,6 +440,8 @@ def construct_type(*, type_: typing.Type[typing.Any], object_: typing.Any) -> ty except Exception: return object_ + # MERGE CUSTOMIZATION: return raw enum values instead of coercing to enum + # members, to preserve forward-compatible behavior for customers. return object_ @@ -313,7 +451,9 @@ def _get_is_populate_by_name(model: typing.Type["Model"]) -> bool: return model.__config__.allow_population_by_field_name # type: ignore # Pydantic v1 -PydanticField = typing.Union[ModelField, pydantic.fields.FieldInfo] +from pydantic.fields import FieldInfo as _FieldInfo + +PydanticField = typing.Union[ModelField, _FieldInfo] # Pydantic V1 swapped the typing of __fields__'s values from ModelField to FieldInfo diff --git a/src/merge/resources/__init__.py b/src/merge/resources/__init__.py index 3899f5b0..c9753741 100644 --- a/src/merge/resources/__init__.py +++ b/src/merge/resources/__init__.py @@ -8,16 +8,16 @@ if typing.TYPE_CHECKING: from . import accounting, ats, calendar, chat, crm, email, filestorage, hris, knowledgebase, ticketing _dynamic_imports: typing.Dict[str, str] = { - "accounting": ".", - "ats": ".", - "calendar": ".", - "chat": ".", - "crm": ".", - "email": ".", - "filestorage": ".", - "hris": ".", - "knowledgebase": ".", - "ticketing": ".", + "accounting": ".accounting", + "ats": ".ats", + "calendar": ".calendar", + "chat": ".chat", + "crm": ".crm", + "email": ".email", + "filestorage": ".filestorage", + "hris": ".hris", + "knowledgebase": ".knowledgebase", + "ticketing": ".ticketing", } @@ -27,8 +27,10 @@ def __getattr__(attr_name: str) -> typing.Any: raise AttributeError(f"No {attr_name} found in _dynamic_imports for module name -> {__name__}") try: module = import_module(module_name, __package__) - result = getattr(module, attr_name) - return result + if module_name == f".{attr_name}": + return module + else: + return getattr(module, attr_name) except ImportError as e: raise ImportError(f"Failed to import {attr_name} from {module_name}: {e}") from e except AttributeError as e: diff --git a/src/merge/resources/accounting/__init__.py b/src/merge/resources/accounting/__init__.py index f7dd2938..3515ccf4 100644 --- a/src/merge/resources/accounting/__init__.py +++ b/src/merge/resources/accounting/__init__.py @@ -1476,8 +1476,10 @@ def __getattr__(attr_name: str) -> typing.Any: raise AttributeError(f"No {attr_name} found in _dynamic_imports for module name -> {__name__}") try: module = import_module(module_name, __package__) - result = getattr(module, attr_name) - return result + if module_name == f".{attr_name}": + return module + else: + return getattr(module, attr_name) except ImportError as e: raise ImportError(f"Failed to import {attr_name} from {module_name}: {e}") from e except AttributeError as e: diff --git a/src/merge/resources/accounting/resources/__init__.py b/src/merge/resources/accounting/resources/__init__.py index c7eebe10..6c92fae9 100644 --- a/src/merge/resources/accounting/resources/__init__.py +++ b/src/merge/resources/accounting/resources/__init__.py @@ -159,55 +159,55 @@ "TransactionsRetrieveRequestExpandItem": ".transactions", "VendorCreditsListRequestExpandItem": ".vendor_credits", "VendorCreditsRetrieveRequestExpandItem": ".vendor_credits", - "account_details": ".", - "account_token": ".", - "accounting_periods": ".", - "accounts": ".", - "addresses": ".", - "async_passthrough": ".", - "async_tasks": ".", - "attachments": ".", - "audit_trail": ".", - "available_actions": ".", - "balance_sheets": ".", - "bank_feed_accounts": ".", - "bank_feed_transactions": ".", - "cash_flow_statements": ".", - "company_info": ".", - "contacts": ".", - "credit_notes": ".", - "delete_account": ".", - "employees": ".", - "expense_reports": ".", - "expenses": ".", - "field_mapping": ".", - "force_resync": ".", - "general_ledger_transactions": ".", - "generate_key": ".", - "income_statements": ".", - "invoices": ".", - "issues": ".", - "item_fulfillments": ".", - "items": ".", - "journal_entries": ".", - "link_token": ".", - "linked_accounts": ".", - "passthrough": ".", - "payment_methods": ".", - "payment_terms": ".", - "payments": ".", - "phone_numbers": ".", - "projects": ".", - "purchase_orders": ".", - "regenerate_key": ".", - "sales_orders": ".", - "scopes": ".", - "sync_status": ".", - "tax_rates": ".", - "tracking_categories": ".", - "transactions": ".", - "vendor_credits": ".", - "webhook_receivers": ".", + "account_details": ".account_details", + "account_token": ".account_token", + "accounting_periods": ".accounting_periods", + "accounts": ".accounts", + "addresses": ".addresses", + "async_passthrough": ".async_passthrough", + "async_tasks": ".async_tasks", + "attachments": ".attachments", + "audit_trail": ".audit_trail", + "available_actions": ".available_actions", + "balance_sheets": ".balance_sheets", + "bank_feed_accounts": ".bank_feed_accounts", + "bank_feed_transactions": ".bank_feed_transactions", + "cash_flow_statements": ".cash_flow_statements", + "company_info": ".company_info", + "contacts": ".contacts", + "credit_notes": ".credit_notes", + "delete_account": ".delete_account", + "employees": ".employees", + "expense_reports": ".expense_reports", + "expenses": ".expenses", + "field_mapping": ".field_mapping", + "force_resync": ".force_resync", + "general_ledger_transactions": ".general_ledger_transactions", + "generate_key": ".generate_key", + "income_statements": ".income_statements", + "invoices": ".invoices", + "issues": ".issues", + "item_fulfillments": ".item_fulfillments", + "items": ".items", + "journal_entries": ".journal_entries", + "link_token": ".link_token", + "linked_accounts": ".linked_accounts", + "passthrough": ".passthrough", + "payment_methods": ".payment_methods", + "payment_terms": ".payment_terms", + "payments": ".payments", + "phone_numbers": ".phone_numbers", + "projects": ".projects", + "purchase_orders": ".purchase_orders", + "regenerate_key": ".regenerate_key", + "sales_orders": ".sales_orders", + "scopes": ".scopes", + "sync_status": ".sync_status", + "tax_rates": ".tax_rates", + "tracking_categories": ".tracking_categories", + "transactions": ".transactions", + "vendor_credits": ".vendor_credits", + "webhook_receivers": ".webhook_receivers", } @@ -217,8 +217,10 @@ def __getattr__(attr_name: str) -> typing.Any: raise AttributeError(f"No {attr_name} found in _dynamic_imports for module name -> {__name__}") try: module = import_module(module_name, __package__) - result = getattr(module, attr_name) - return result + if module_name == f".{attr_name}": + return module + else: + return getattr(module, attr_name) except ImportError as e: raise ImportError(f"Failed to import {attr_name} from {module_name}: {e}") from e except AttributeError as e: diff --git a/src/merge/resources/accounting/resources/account_details/raw_client.py b/src/merge/resources/accounting/resources/account_details/raw_client.py index 8545113d..e30b13d8 100644 --- a/src/merge/resources/accounting/resources/account_details/raw_client.py +++ b/src/merge/resources/accounting/resources/account_details/raw_client.py @@ -6,9 +6,11 @@ from .....core.api_error import ApiError from .....core.client_wrapper import AsyncClientWrapper, SyncClientWrapper from .....core.http_response import AsyncHttpResponse, HttpResponse +from .....core.parse_error import ParsingError from .....core.request_options import RequestOptions from .....core.unchecked_base_model import construct_type from ...types.account_details import AccountDetails +from pydantic import ValidationError class RawAccountDetailsClient: @@ -47,6 +49,10 @@ def retrieve(self, *, request_options: typing.Optional[RequestOptions] = None) - _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) @@ -88,4 +94,8 @@ async def retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) diff --git a/src/merge/resources/accounting/resources/account_token/raw_client.py b/src/merge/resources/accounting/resources/account_token/raw_client.py index 619b7dd9..ca5c3e66 100644 --- a/src/merge/resources/accounting/resources/account_token/raw_client.py +++ b/src/merge/resources/accounting/resources/account_token/raw_client.py @@ -7,10 +7,12 @@ from .....core.client_wrapper import AsyncClientWrapper, SyncClientWrapper from .....core.http_response import AsyncHttpResponse, HttpResponse from .....core.jsonable_encoder import jsonable_encoder +from .....core.parse_error import ParsingError from .....core.request_options import RequestOptions from .....core.unchecked_base_model import construct_type from ...types.account_token import AccountToken from ...types.regenerate_account_token import RegenerateAccountToken +from pydantic import ValidationError class RawAccountTokenClient: @@ -53,6 +55,10 @@ def retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) def regenerate_create( @@ -89,6 +95,10 @@ def regenerate_create( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) @@ -132,6 +142,10 @@ async def retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) async def regenerate_create( @@ -168,4 +182,8 @@ async def regenerate_create( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) diff --git a/src/merge/resources/accounting/resources/accounting_periods/raw_client.py b/src/merge/resources/accounting/resources/accounting_periods/raw_client.py index 895aa1e5..5183b734 100644 --- a/src/merge/resources/accounting/resources/accounting_periods/raw_client.py +++ b/src/merge/resources/accounting/resources/accounting_periods/raw_client.py @@ -7,10 +7,12 @@ from .....core.client_wrapper import AsyncClientWrapper, SyncClientWrapper from .....core.http_response import AsyncHttpResponse, HttpResponse from .....core.jsonable_encoder import jsonable_encoder +from .....core.parse_error import ParsingError from .....core.request_options import RequestOptions from .....core.unchecked_base_model import construct_type from ...types.accounting_period import AccountingPeriod from ...types.paginated_accounting_period_list import PaginatedAccountingPeriodList +from pydantic import ValidationError class RawAccountingPeriodsClient: @@ -80,6 +82,10 @@ def list( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) def retrieve( @@ -133,6 +139,10 @@ def retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) @@ -203,6 +213,10 @@ async def list( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) async def retrieve( @@ -256,4 +270,8 @@ async def retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) diff --git a/src/merge/resources/accounting/resources/accounts/__init__.py b/src/merge/resources/accounting/resources/accounts/__init__.py index bee926eb..2c02b11a 100644 --- a/src/merge/resources/accounting/resources/accounts/__init__.py +++ b/src/merge/resources/accounting/resources/accounts/__init__.py @@ -30,8 +30,10 @@ def __getattr__(attr_name: str) -> typing.Any: raise AttributeError(f"No {attr_name} found in _dynamic_imports for module name -> {__name__}") try: module = import_module(module_name, __package__) - result = getattr(module, attr_name) - return result + if module_name == f".{attr_name}": + return module + else: + return getattr(module, attr_name) except ImportError as e: raise ImportError(f"Failed to import {attr_name} from {module_name}: {e}") from e except AttributeError as e: diff --git a/src/merge/resources/accounting/resources/accounts/raw_client.py b/src/merge/resources/accounting/resources/accounts/raw_client.py index 7ba64f8f..eb821bc1 100644 --- a/src/merge/resources/accounting/resources/accounts/raw_client.py +++ b/src/merge/resources/accounting/resources/accounts/raw_client.py @@ -9,6 +9,7 @@ from .....core.datetime_utils import serialize_datetime from .....core.http_response import AsyncHttpResponse, HttpResponse from .....core.jsonable_encoder import jsonable_encoder +from .....core.parse_error import ParsingError from .....core.request_options import RequestOptions from .....core.unchecked_base_model import construct_type from ...types.account import Account @@ -22,6 +23,7 @@ from .types.accounts_list_request_status import AccountsListRequestStatus from .types.accounts_retrieve_request_remote_fields import AccountsRetrieveRequestRemoteFields from .types.accounts_retrieve_request_show_enum_origins import AccountsRetrieveRequestShowEnumOrigins +from pydantic import ValidationError # this is used as the default value for optional parameters OMIT = typing.cast(typing.Any, ...) @@ -161,6 +163,10 @@ def list( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) def create( @@ -221,6 +227,10 @@ def create( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) def retrieve( @@ -291,6 +301,10 @@ def retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) def meta_post_retrieve( @@ -327,6 +341,10 @@ def meta_post_retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) @@ -464,6 +482,10 @@ async def list( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) async def create( @@ -524,6 +546,10 @@ async def create( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) async def retrieve( @@ -594,6 +620,10 @@ async def retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) async def meta_post_retrieve( @@ -630,4 +660,8 @@ async def meta_post_retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) diff --git a/src/merge/resources/accounting/resources/accounts/types/__init__.py b/src/merge/resources/accounting/resources/accounts/types/__init__.py index 61dd5434..e63adf59 100644 --- a/src/merge/resources/accounting/resources/accounts/types/__init__.py +++ b/src/merge/resources/accounting/resources/accounts/types/__init__.py @@ -28,8 +28,10 @@ def __getattr__(attr_name: str) -> typing.Any: raise AttributeError(f"No {attr_name} found in _dynamic_imports for module name -> {__name__}") try: module = import_module(module_name, __package__) - result = getattr(module, attr_name) - return result + if module_name == f".{attr_name}": + return module + else: + return getattr(module, attr_name) except ImportError as e: raise ImportError(f"Failed to import {attr_name} from {module_name}: {e}") from e except AttributeError as e: diff --git a/src/merge/resources/accounting/resources/accounts/types/accounts_list_request_classification.py b/src/merge/resources/accounting/resources/accounts/types/accounts_list_request_classification.py index dd3eac4b..61757ef8 100644 --- a/src/merge/resources/accounting/resources/accounts/types/accounts_list_request_classification.py +++ b/src/merge/resources/accounting/resources/accounts/types/accounts_list_request_classification.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ......core import enum + T_Result = typing.TypeVar("T_Result") -class AccountsListRequestClassification(str, enum.Enum): +class AccountsListRequestClassification(enum.StrEnum): EMPTY = "" ASSET = "ASSET" EQUITY = "EQUITY" diff --git a/src/merge/resources/accounting/resources/accounts/types/accounts_list_request_remote_fields.py b/src/merge/resources/accounting/resources/accounts/types/accounts_list_request_remote_fields.py index a7bcc53e..94caf019 100644 --- a/src/merge/resources/accounting/resources/accounts/types/accounts_list_request_remote_fields.py +++ b/src/merge/resources/accounting/resources/accounts/types/accounts_list_request_remote_fields.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ......core import enum + T_Result = typing.TypeVar("T_Result") -class AccountsListRequestRemoteFields(str, enum.Enum): +class AccountsListRequestRemoteFields(enum.StrEnum): CLASSIFICATION = "classification" CLASSIFICATION_STATUS = "classification,status" STATUS = "status" diff --git a/src/merge/resources/accounting/resources/accounts/types/accounts_list_request_show_enum_origins.py b/src/merge/resources/accounting/resources/accounts/types/accounts_list_request_show_enum_origins.py index 16e8bba6..b3b3e6d9 100644 --- a/src/merge/resources/accounting/resources/accounts/types/accounts_list_request_show_enum_origins.py +++ b/src/merge/resources/accounting/resources/accounts/types/accounts_list_request_show_enum_origins.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ......core import enum + T_Result = typing.TypeVar("T_Result") -class AccountsListRequestShowEnumOrigins(str, enum.Enum): +class AccountsListRequestShowEnumOrigins(enum.StrEnum): CLASSIFICATION = "classification" CLASSIFICATION_STATUS = "classification,status" STATUS = "status" diff --git a/src/merge/resources/accounting/resources/accounts/types/accounts_list_request_status.py b/src/merge/resources/accounting/resources/accounts/types/accounts_list_request_status.py index ddaed77c..edad0ff5 100644 --- a/src/merge/resources/accounting/resources/accounts/types/accounts_list_request_status.py +++ b/src/merge/resources/accounting/resources/accounts/types/accounts_list_request_status.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ......core import enum + T_Result = typing.TypeVar("T_Result") -class AccountsListRequestStatus(str, enum.Enum): +class AccountsListRequestStatus(enum.StrEnum): EMPTY = "" ACTIVE = "ACTIVE" INACTIVE = "INACTIVE" diff --git a/src/merge/resources/accounting/resources/accounts/types/accounts_retrieve_request_remote_fields.py b/src/merge/resources/accounting/resources/accounts/types/accounts_retrieve_request_remote_fields.py index 9ed86394..23c863de 100644 --- a/src/merge/resources/accounting/resources/accounts/types/accounts_retrieve_request_remote_fields.py +++ b/src/merge/resources/accounting/resources/accounts/types/accounts_retrieve_request_remote_fields.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ......core import enum + T_Result = typing.TypeVar("T_Result") -class AccountsRetrieveRequestRemoteFields(str, enum.Enum): +class AccountsRetrieveRequestRemoteFields(enum.StrEnum): CLASSIFICATION = "classification" CLASSIFICATION_STATUS = "classification,status" STATUS = "status" diff --git a/src/merge/resources/accounting/resources/accounts/types/accounts_retrieve_request_show_enum_origins.py b/src/merge/resources/accounting/resources/accounts/types/accounts_retrieve_request_show_enum_origins.py index 7ebeb5b8..0f811a36 100644 --- a/src/merge/resources/accounting/resources/accounts/types/accounts_retrieve_request_show_enum_origins.py +++ b/src/merge/resources/accounting/resources/accounts/types/accounts_retrieve_request_show_enum_origins.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ......core import enum + T_Result = typing.TypeVar("T_Result") -class AccountsRetrieveRequestShowEnumOrigins(str, enum.Enum): +class AccountsRetrieveRequestShowEnumOrigins(enum.StrEnum): CLASSIFICATION = "classification" CLASSIFICATION_STATUS = "classification,status" STATUS = "status" diff --git a/src/merge/resources/accounting/resources/addresses/raw_client.py b/src/merge/resources/accounting/resources/addresses/raw_client.py index 1c6fc0b8..000a9274 100644 --- a/src/merge/resources/accounting/resources/addresses/raw_client.py +++ b/src/merge/resources/accounting/resources/addresses/raw_client.py @@ -7,9 +7,11 @@ from .....core.client_wrapper import AsyncClientWrapper, SyncClientWrapper from .....core.http_response import AsyncHttpResponse, HttpResponse from .....core.jsonable_encoder import jsonable_encoder +from .....core.parse_error import ParsingError from .....core.request_options import RequestOptions from .....core.unchecked_base_model import construct_type from ...types.address import Address +from pydantic import ValidationError class RawAddressesClient: @@ -77,6 +79,10 @@ def retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) @@ -145,4 +151,8 @@ async def retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) diff --git a/src/merge/resources/accounting/resources/async_passthrough/__init__.py b/src/merge/resources/accounting/resources/async_passthrough/__init__.py index 375c7953..11090986 100644 --- a/src/merge/resources/accounting/resources/async_passthrough/__init__.py +++ b/src/merge/resources/accounting/resources/async_passthrough/__init__.py @@ -16,8 +16,10 @@ def __getattr__(attr_name: str) -> typing.Any: raise AttributeError(f"No {attr_name} found in _dynamic_imports for module name -> {__name__}") try: module = import_module(module_name, __package__) - result = getattr(module, attr_name) - return result + if module_name == f".{attr_name}": + return module + else: + return getattr(module, attr_name) except ImportError as e: raise ImportError(f"Failed to import {attr_name} from {module_name}: {e}") from e except AttributeError as e: diff --git a/src/merge/resources/accounting/resources/async_passthrough/raw_client.py b/src/merge/resources/accounting/resources/async_passthrough/raw_client.py index 18375f3b..39c2f22f 100644 --- a/src/merge/resources/accounting/resources/async_passthrough/raw_client.py +++ b/src/merge/resources/accounting/resources/async_passthrough/raw_client.py @@ -7,11 +7,13 @@ from .....core.client_wrapper import AsyncClientWrapper, SyncClientWrapper from .....core.http_response import AsyncHttpResponse, HttpResponse from .....core.jsonable_encoder import jsonable_encoder +from .....core.parse_error import ParsingError from .....core.request_options import RequestOptions from .....core.unchecked_base_model import construct_type from ...types.async_passthrough_reciept import AsyncPassthroughReciept from ...types.data_passthrough_request import DataPassthroughRequest from .types.async_passthrough_retrieve_response import AsyncPassthroughRetrieveResponse +from pydantic import ValidationError # this is used as the default value for optional parameters OMIT = typing.cast(typing.Any, ...) @@ -62,6 +64,10 @@ def create( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) def retrieve( @@ -100,6 +106,10 @@ def retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) @@ -148,6 +158,10 @@ async def create( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) async def retrieve( @@ -186,4 +200,8 @@ async def retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) diff --git a/src/merge/resources/accounting/resources/async_passthrough/types/__init__.py b/src/merge/resources/accounting/resources/async_passthrough/types/__init__.py index f6e9bec9..dc335400 100644 --- a/src/merge/resources/accounting/resources/async_passthrough/types/__init__.py +++ b/src/merge/resources/accounting/resources/async_passthrough/types/__init__.py @@ -16,8 +16,10 @@ def __getattr__(attr_name: str) -> typing.Any: raise AttributeError(f"No {attr_name} found in _dynamic_imports for module name -> {__name__}") try: module = import_module(module_name, __package__) - result = getattr(module, attr_name) - return result + if module_name == f".{attr_name}": + return module + else: + return getattr(module, attr_name) except ImportError as e: raise ImportError(f"Failed to import {attr_name} from {module_name}: {e}") from e except AttributeError as e: diff --git a/src/merge/resources/accounting/resources/async_tasks/raw_client.py b/src/merge/resources/accounting/resources/async_tasks/raw_client.py index 593d5a4f..9625c0ac 100644 --- a/src/merge/resources/accounting/resources/async_tasks/raw_client.py +++ b/src/merge/resources/accounting/resources/async_tasks/raw_client.py @@ -7,9 +7,11 @@ from .....core.client_wrapper import AsyncClientWrapper, SyncClientWrapper from .....core.http_response import AsyncHttpResponse, HttpResponse from .....core.jsonable_encoder import jsonable_encoder +from .....core.parse_error import ParsingError from .....core.request_options import RequestOptions from .....core.unchecked_base_model import construct_type from ...types.async_post_task import AsyncPostTask +from pydantic import ValidationError class RawAsyncTasksClient: @@ -52,6 +54,10 @@ def retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) @@ -95,4 +101,8 @@ async def retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) diff --git a/src/merge/resources/accounting/resources/attachments/raw_client.py b/src/merge/resources/accounting/resources/attachments/raw_client.py index ade38f6e..b49c1e7e 100644 --- a/src/merge/resources/accounting/resources/attachments/raw_client.py +++ b/src/merge/resources/accounting/resources/attachments/raw_client.py @@ -9,6 +9,7 @@ from .....core.datetime_utils import serialize_datetime from .....core.http_response import AsyncHttpResponse, HttpResponse from .....core.jsonable_encoder import jsonable_encoder +from .....core.parse_error import ParsingError from .....core.request_options import RequestOptions from .....core.unchecked_base_model import construct_type from ...types.accounting_attachment import AccountingAttachment @@ -16,6 +17,7 @@ from ...types.accounting_attachment_response import AccountingAttachmentResponse from ...types.meta_response import MetaResponse from ...types.paginated_accounting_attachment_list import PaginatedAccountingAttachmentList +from pydantic import ValidationError # this is used as the default value for optional parameters OMIT = typing.cast(typing.Any, ...) @@ -118,6 +120,10 @@ def list( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) def create( @@ -178,6 +184,10 @@ def create( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) def retrieve( @@ -231,6 +241,10 @@ def retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) def meta_post_retrieve( @@ -267,6 +281,10 @@ def meta_post_retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) @@ -367,6 +385,10 @@ async def list( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) async def create( @@ -427,6 +449,10 @@ async def create( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) async def retrieve( @@ -480,6 +506,10 @@ async def retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) async def meta_post_retrieve( @@ -516,4 +546,8 @@ async def meta_post_retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) diff --git a/src/merge/resources/accounting/resources/audit_trail/raw_client.py b/src/merge/resources/accounting/resources/audit_trail/raw_client.py index 83c23773..1d825c55 100644 --- a/src/merge/resources/accounting/resources/audit_trail/raw_client.py +++ b/src/merge/resources/accounting/resources/audit_trail/raw_client.py @@ -6,9 +6,11 @@ from .....core.api_error import ApiError from .....core.client_wrapper import AsyncClientWrapper, SyncClientWrapper from .....core.http_response import AsyncHttpResponse, HttpResponse +from .....core.parse_error import ParsingError from .....core.request_options import RequestOptions from .....core.unchecked_base_model import construct_type from ...types.paginated_audit_log_event_list import PaginatedAuditLogEventList +from pydantic import ValidationError class RawAuditTrailClient: @@ -83,6 +85,10 @@ def list( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) @@ -158,4 +164,8 @@ async def list( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) diff --git a/src/merge/resources/accounting/resources/available_actions/raw_client.py b/src/merge/resources/accounting/resources/available_actions/raw_client.py index 03a2f720..d6a340c1 100644 --- a/src/merge/resources/accounting/resources/available_actions/raw_client.py +++ b/src/merge/resources/accounting/resources/available_actions/raw_client.py @@ -6,9 +6,11 @@ from .....core.api_error import ApiError from .....core.client_wrapper import AsyncClientWrapper, SyncClientWrapper from .....core.http_response import AsyncHttpResponse, HttpResponse +from .....core.parse_error import ParsingError from .....core.request_options import RequestOptions from .....core.unchecked_base_model import construct_type from ...types.available_actions import AvailableActions +from pydantic import ValidationError class RawAvailableActionsClient: @@ -47,6 +49,10 @@ def retrieve(self, *, request_options: typing.Optional[RequestOptions] = None) - _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) @@ -88,4 +94,8 @@ async def retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) diff --git a/src/merge/resources/accounting/resources/balance_sheets/raw_client.py b/src/merge/resources/accounting/resources/balance_sheets/raw_client.py index c931dfe9..f6c1f762 100644 --- a/src/merge/resources/accounting/resources/balance_sheets/raw_client.py +++ b/src/merge/resources/accounting/resources/balance_sheets/raw_client.py @@ -9,10 +9,12 @@ from .....core.datetime_utils import serialize_datetime from .....core.http_response import AsyncHttpResponse, HttpResponse from .....core.jsonable_encoder import jsonable_encoder +from .....core.parse_error import ParsingError from .....core.request_options import RequestOptions from .....core.unchecked_base_model import construct_type from ...types.balance_sheet import BalanceSheet from ...types.paginated_balance_sheet_list import PaginatedBalanceSheetList +from pydantic import ValidationError class RawBalanceSheetsClient: @@ -119,6 +121,10 @@ def list( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) def retrieve( @@ -179,6 +185,10 @@ def retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) @@ -286,6 +296,10 @@ async def list( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) async def retrieve( @@ -346,4 +360,8 @@ async def retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) diff --git a/src/merge/resources/accounting/resources/bank_feed_accounts/raw_client.py b/src/merge/resources/accounting/resources/bank_feed_accounts/raw_client.py index 2c34a702..8691ec71 100644 --- a/src/merge/resources/accounting/resources/bank_feed_accounts/raw_client.py +++ b/src/merge/resources/accounting/resources/bank_feed_accounts/raw_client.py @@ -7,6 +7,7 @@ from .....core.client_wrapper import AsyncClientWrapper, SyncClientWrapper from .....core.http_response import AsyncHttpResponse, HttpResponse from .....core.jsonable_encoder import jsonable_encoder +from .....core.parse_error import ParsingError from .....core.request_options import RequestOptions from .....core.unchecked_base_model import construct_type from ...types.bank_feed_account import BankFeedAccount @@ -14,6 +15,7 @@ from ...types.bank_feed_account_response import BankFeedAccountResponse from ...types.meta_response import MetaResponse from ...types.paginated_bank_feed_account_list import PaginatedBankFeedAccountList +from pydantic import ValidationError # this is used as the default value for optional parameters OMIT = typing.cast(typing.Any, ...) @@ -86,6 +88,10 @@ def list( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) def create( @@ -146,6 +152,10 @@ def create( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) def retrieve( @@ -199,6 +209,10 @@ def retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) def meta_post_retrieve( @@ -235,6 +249,10 @@ def meta_post_retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) @@ -305,6 +323,10 @@ async def list( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) async def create( @@ -365,6 +387,10 @@ async def create( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) async def retrieve( @@ -418,6 +444,10 @@ async def retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) async def meta_post_retrieve( @@ -454,4 +484,8 @@ async def meta_post_retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) diff --git a/src/merge/resources/accounting/resources/bank_feed_transactions/raw_client.py b/src/merge/resources/accounting/resources/bank_feed_transactions/raw_client.py index 15d8c607..ee16beab 100644 --- a/src/merge/resources/accounting/resources/bank_feed_transactions/raw_client.py +++ b/src/merge/resources/accounting/resources/bank_feed_transactions/raw_client.py @@ -9,6 +9,7 @@ from .....core.datetime_utils import serialize_datetime from .....core.http_response import AsyncHttpResponse, HttpResponse from .....core.jsonable_encoder import jsonable_encoder +from .....core.parse_error import ParsingError from .....core.request_options import RequestOptions from .....core.unchecked_base_model import construct_type from ...types.bank_feed_transaction import BankFeedTransaction @@ -16,6 +17,7 @@ from ...types.bank_feed_transaction_response import BankFeedTransactionResponse from ...types.meta_response import MetaResponse from ...types.paginated_bank_feed_transaction_list import PaginatedBankFeedTransactionList +from pydantic import ValidationError # this is used as the default value for optional parameters OMIT = typing.cast(typing.Any, ...) @@ -125,6 +127,10 @@ def list( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) def create( @@ -185,6 +191,10 @@ def create( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) def retrieve( @@ -245,6 +255,10 @@ def retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) def meta_post_retrieve( @@ -281,6 +295,10 @@ def meta_post_retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) @@ -388,6 +406,10 @@ async def list( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) async def create( @@ -448,6 +470,10 @@ async def create( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) async def retrieve( @@ -508,6 +534,10 @@ async def retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) async def meta_post_retrieve( @@ -544,4 +574,8 @@ async def meta_post_retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) diff --git a/src/merge/resources/accounting/resources/cash_flow_statements/raw_client.py b/src/merge/resources/accounting/resources/cash_flow_statements/raw_client.py index 725d8c94..75581682 100644 --- a/src/merge/resources/accounting/resources/cash_flow_statements/raw_client.py +++ b/src/merge/resources/accounting/resources/cash_flow_statements/raw_client.py @@ -9,10 +9,12 @@ from .....core.datetime_utils import serialize_datetime from .....core.http_response import AsyncHttpResponse, HttpResponse from .....core.jsonable_encoder import jsonable_encoder +from .....core.parse_error import ParsingError from .....core.request_options import RequestOptions from .....core.unchecked_base_model import construct_type from ...types.cash_flow_statement import CashFlowStatement from ...types.paginated_cash_flow_statement_list import PaginatedCashFlowStatementList +from pydantic import ValidationError class RawCashFlowStatementsClient: @@ -119,6 +121,10 @@ def list( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) def retrieve( @@ -179,6 +185,10 @@ def retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) @@ -286,6 +296,10 @@ async def list( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) async def retrieve( @@ -346,4 +360,8 @@ async def retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) diff --git a/src/merge/resources/accounting/resources/company_info/__init__.py b/src/merge/resources/accounting/resources/company_info/__init__.py index fa192fe1..d2d8f9fc 100644 --- a/src/merge/resources/accounting/resources/company_info/__init__.py +++ b/src/merge/resources/accounting/resources/company_info/__init__.py @@ -19,8 +19,10 @@ def __getattr__(attr_name: str) -> typing.Any: raise AttributeError(f"No {attr_name} found in _dynamic_imports for module name -> {__name__}") try: module = import_module(module_name, __package__) - result = getattr(module, attr_name) - return result + if module_name == f".{attr_name}": + return module + else: + return getattr(module, attr_name) except ImportError as e: raise ImportError(f"Failed to import {attr_name} from {module_name}: {e}") from e except AttributeError as e: diff --git a/src/merge/resources/accounting/resources/company_info/raw_client.py b/src/merge/resources/accounting/resources/company_info/raw_client.py index 6f3de01a..9bed2c3f 100644 --- a/src/merge/resources/accounting/resources/company_info/raw_client.py +++ b/src/merge/resources/accounting/resources/company_info/raw_client.py @@ -9,12 +9,14 @@ from .....core.datetime_utils import serialize_datetime from .....core.http_response import AsyncHttpResponse, HttpResponse from .....core.jsonable_encoder import jsonable_encoder +from .....core.parse_error import ParsingError from .....core.request_options import RequestOptions from .....core.unchecked_base_model import construct_type from ...types.company_info import CompanyInfo from ...types.paginated_company_info_list import PaginatedCompanyInfoList from .types.company_info_list_request_expand_item import CompanyInfoListRequestExpandItem from .types.company_info_retrieve_request_expand_item import CompanyInfoRetrieveRequestExpandItem +from pydantic import ValidationError class RawCompanyInfoClient: @@ -121,6 +123,10 @@ def list( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) def retrieve( @@ -181,6 +187,10 @@ def retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) @@ -288,6 +298,10 @@ async def list( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) async def retrieve( @@ -348,4 +362,8 @@ async def retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) diff --git a/src/merge/resources/accounting/resources/company_info/types/__init__.py b/src/merge/resources/accounting/resources/company_info/types/__init__.py index 44e92ab2..3ffed177 100644 --- a/src/merge/resources/accounting/resources/company_info/types/__init__.py +++ b/src/merge/resources/accounting/resources/company_info/types/__init__.py @@ -20,8 +20,10 @@ def __getattr__(attr_name: str) -> typing.Any: raise AttributeError(f"No {attr_name} found in _dynamic_imports for module name -> {__name__}") try: module = import_module(module_name, __package__) - result = getattr(module, attr_name) - return result + if module_name == f".{attr_name}": + return module + else: + return getattr(module, attr_name) except ImportError as e: raise ImportError(f"Failed to import {attr_name} from {module_name}: {e}") from e except AttributeError as e: diff --git a/src/merge/resources/accounting/resources/company_info/types/company_info_list_request_expand_item.py b/src/merge/resources/accounting/resources/company_info/types/company_info_list_request_expand_item.py index fcd4b70b..ace56faa 100644 --- a/src/merge/resources/accounting/resources/company_info/types/company_info_list_request_expand_item.py +++ b/src/merge/resources/accounting/resources/company_info/types/company_info_list_request_expand_item.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ......core import enum + T_Result = typing.TypeVar("T_Result") -class CompanyInfoListRequestExpandItem(str, enum.Enum): +class CompanyInfoListRequestExpandItem(enum.StrEnum): ADDRESSES = "addresses" PHONE_NUMBERS = "phone_numbers" diff --git a/src/merge/resources/accounting/resources/company_info/types/company_info_retrieve_request_expand_item.py b/src/merge/resources/accounting/resources/company_info/types/company_info_retrieve_request_expand_item.py index 8ba3d646..31c4750f 100644 --- a/src/merge/resources/accounting/resources/company_info/types/company_info_retrieve_request_expand_item.py +++ b/src/merge/resources/accounting/resources/company_info/types/company_info_retrieve_request_expand_item.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ......core import enum + T_Result = typing.TypeVar("T_Result") -class CompanyInfoRetrieveRequestExpandItem(str, enum.Enum): +class CompanyInfoRetrieveRequestExpandItem(enum.StrEnum): ADDRESSES = "addresses" PHONE_NUMBERS = "phone_numbers" diff --git a/src/merge/resources/accounting/resources/contacts/__init__.py b/src/merge/resources/accounting/resources/contacts/__init__.py index 525a6174..6f7a2a3d 100644 --- a/src/merge/resources/accounting/resources/contacts/__init__.py +++ b/src/merge/resources/accounting/resources/contacts/__init__.py @@ -20,8 +20,10 @@ def __getattr__(attr_name: str) -> typing.Any: raise AttributeError(f"No {attr_name} found in _dynamic_imports for module name -> {__name__}") try: module = import_module(module_name, __package__) - result = getattr(module, attr_name) - return result + if module_name == f".{attr_name}": + return module + else: + return getattr(module, attr_name) except ImportError as e: raise ImportError(f"Failed to import {attr_name} from {module_name}: {e}") from e except AttributeError as e: diff --git a/src/merge/resources/accounting/resources/contacts/raw_client.py b/src/merge/resources/accounting/resources/contacts/raw_client.py index 4e95b33a..5327bfaf 100644 --- a/src/merge/resources/accounting/resources/contacts/raw_client.py +++ b/src/merge/resources/accounting/resources/contacts/raw_client.py @@ -9,6 +9,7 @@ from .....core.datetime_utils import serialize_datetime from .....core.http_response import AsyncHttpResponse, HttpResponse from .....core.jsonable_encoder import jsonable_encoder +from .....core.parse_error import ParsingError from .....core.request_options import RequestOptions from .....core.unchecked_base_model import construct_type from ...types.contact import Contact @@ -21,6 +22,7 @@ from .types.contacts_list_request_expand_item import ContactsListRequestExpandItem from .types.contacts_list_request_status import ContactsListRequestStatus from .types.contacts_retrieve_request_expand_item import ContactsRetrieveRequestExpandItem +from pydantic import ValidationError # this is used as the default value for optional parameters OMIT = typing.cast(typing.Any, ...) @@ -170,6 +172,10 @@ def list( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) def create( @@ -230,6 +236,10 @@ def create( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) def retrieve( @@ -305,6 +315,10 @@ def retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) def partial_update( @@ -368,6 +382,10 @@ def partial_update( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) def meta_patch_retrieve( @@ -406,6 +424,10 @@ def meta_patch_retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) def meta_post_retrieve( @@ -442,6 +464,10 @@ def meta_post_retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) def remote_field_classes_list( @@ -517,6 +543,10 @@ def remote_field_classes_list( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) @@ -664,6 +694,10 @@ async def list( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) async def create( @@ -724,6 +758,10 @@ async def create( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) async def retrieve( @@ -799,6 +837,10 @@ async def retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) async def partial_update( @@ -862,6 +904,10 @@ async def partial_update( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) async def meta_patch_retrieve( @@ -900,6 +946,10 @@ async def meta_patch_retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) async def meta_post_retrieve( @@ -936,6 +986,10 @@ async def meta_post_retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) async def remote_field_classes_list( @@ -1011,4 +1065,8 @@ async def remote_field_classes_list( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) diff --git a/src/merge/resources/accounting/resources/contacts/types/__init__.py b/src/merge/resources/accounting/resources/contacts/types/__init__.py index 0a474087..1d575539 100644 --- a/src/merge/resources/accounting/resources/contacts/types/__init__.py +++ b/src/merge/resources/accounting/resources/contacts/types/__init__.py @@ -22,8 +22,10 @@ def __getattr__(attr_name: str) -> typing.Any: raise AttributeError(f"No {attr_name} found in _dynamic_imports for module name -> {__name__}") try: module = import_module(module_name, __package__) - result = getattr(module, attr_name) - return result + if module_name == f".{attr_name}": + return module + else: + return getattr(module, attr_name) except ImportError as e: raise ImportError(f"Failed to import {attr_name} from {module_name}: {e}") from e except AttributeError as e: diff --git a/src/merge/resources/accounting/resources/contacts/types/contacts_list_request_expand_item.py b/src/merge/resources/accounting/resources/contacts/types/contacts_list_request_expand_item.py index ae437e08..561e2c47 100644 --- a/src/merge/resources/accounting/resources/contacts/types/contacts_list_request_expand_item.py +++ b/src/merge/resources/accounting/resources/contacts/types/contacts_list_request_expand_item.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ......core import enum + T_Result = typing.TypeVar("T_Result") -class ContactsListRequestExpandItem(str, enum.Enum): +class ContactsListRequestExpandItem(enum.StrEnum): ADDRESSES = "addresses" COMPANY = "company" PHONE_NUMBERS = "phone_numbers" diff --git a/src/merge/resources/accounting/resources/contacts/types/contacts_list_request_status.py b/src/merge/resources/accounting/resources/contacts/types/contacts_list_request_status.py index fa950926..fad03d82 100644 --- a/src/merge/resources/accounting/resources/contacts/types/contacts_list_request_status.py +++ b/src/merge/resources/accounting/resources/contacts/types/contacts_list_request_status.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ......core import enum + T_Result = typing.TypeVar("T_Result") -class ContactsListRequestStatus(str, enum.Enum): +class ContactsListRequestStatus(enum.StrEnum): EMPTY = "" ACTIVE = "ACTIVE" ARCHIVED = "ARCHIVED" diff --git a/src/merge/resources/accounting/resources/contacts/types/contacts_retrieve_request_expand_item.py b/src/merge/resources/accounting/resources/contacts/types/contacts_retrieve_request_expand_item.py index f3879789..dab147a1 100644 --- a/src/merge/resources/accounting/resources/contacts/types/contacts_retrieve_request_expand_item.py +++ b/src/merge/resources/accounting/resources/contacts/types/contacts_retrieve_request_expand_item.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ......core import enum + T_Result = typing.TypeVar("T_Result") -class ContactsRetrieveRequestExpandItem(str, enum.Enum): +class ContactsRetrieveRequestExpandItem(enum.StrEnum): ADDRESSES = "addresses" COMPANY = "company" PHONE_NUMBERS = "phone_numbers" diff --git a/src/merge/resources/accounting/resources/credit_notes/__init__.py b/src/merge/resources/accounting/resources/credit_notes/__init__.py index 138950fc..917b71e7 100644 --- a/src/merge/resources/accounting/resources/credit_notes/__init__.py +++ b/src/merge/resources/accounting/resources/credit_notes/__init__.py @@ -30,8 +30,10 @@ def __getattr__(attr_name: str) -> typing.Any: raise AttributeError(f"No {attr_name} found in _dynamic_imports for module name -> {__name__}") try: module = import_module(module_name, __package__) - result = getattr(module, attr_name) - return result + if module_name == f".{attr_name}": + return module + else: + return getattr(module, attr_name) except ImportError as e: raise ImportError(f"Failed to import {attr_name} from {module_name}: {e}") from e except AttributeError as e: diff --git a/src/merge/resources/accounting/resources/credit_notes/raw_client.py b/src/merge/resources/accounting/resources/credit_notes/raw_client.py index c1711ade..90914546 100644 --- a/src/merge/resources/accounting/resources/credit_notes/raw_client.py +++ b/src/merge/resources/accounting/resources/credit_notes/raw_client.py @@ -9,6 +9,7 @@ from .....core.datetime_utils import serialize_datetime from .....core.http_response import AsyncHttpResponse, HttpResponse from .....core.jsonable_encoder import jsonable_encoder +from .....core.parse_error import ParsingError from .....core.request_options import RequestOptions from .....core.unchecked_base_model import construct_type from ...types.credit_note import CreditNote @@ -22,6 +23,7 @@ from .types.credit_notes_retrieve_request_expand_item import CreditNotesRetrieveRequestExpandItem from .types.credit_notes_retrieve_request_remote_fields import CreditNotesRetrieveRequestRemoteFields from .types.credit_notes_retrieve_request_show_enum_origins import CreditNotesRetrieveRequestShowEnumOrigins +from pydantic import ValidationError # this is used as the default value for optional parameters OMIT = typing.cast(typing.Any, ...) @@ -155,6 +157,10 @@ def list( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) def create( @@ -215,6 +221,10 @@ def create( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) def retrieve( @@ -285,6 +295,10 @@ def retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) def partial_update( @@ -348,6 +362,10 @@ def partial_update( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) def application_create( @@ -422,6 +440,10 @@ def application_create( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) def meta_patch_retrieve( @@ -460,6 +482,10 @@ def meta_patch_retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) def meta_post_retrieve( @@ -496,6 +522,10 @@ def meta_post_retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) @@ -627,6 +657,10 @@ async def list( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) async def create( @@ -687,6 +721,10 @@ async def create( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) async def retrieve( @@ -757,6 +795,10 @@ async def retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) async def partial_update( @@ -820,6 +862,10 @@ async def partial_update( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) async def application_create( @@ -894,6 +940,10 @@ async def application_create( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) async def meta_patch_retrieve( @@ -932,6 +982,10 @@ async def meta_patch_retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) async def meta_post_retrieve( @@ -968,4 +1022,8 @@ async def meta_post_retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) diff --git a/src/merge/resources/accounting/resources/credit_notes/types/__init__.py b/src/merge/resources/accounting/resources/credit_notes/types/__init__.py index 5072c1cc..b8c0cbb8 100644 --- a/src/merge/resources/accounting/resources/credit_notes/types/__init__.py +++ b/src/merge/resources/accounting/resources/credit_notes/types/__init__.py @@ -28,8 +28,10 @@ def __getattr__(attr_name: str) -> typing.Any: raise AttributeError(f"No {attr_name} found in _dynamic_imports for module name -> {__name__}") try: module = import_module(module_name, __package__) - result = getattr(module, attr_name) - return result + if module_name == f".{attr_name}": + return module + else: + return getattr(module, attr_name) except ImportError as e: raise ImportError(f"Failed to import {attr_name} from {module_name}: {e}") from e except AttributeError as e: diff --git a/src/merge/resources/accounting/resources/credit_notes/types/credit_notes_list_request_expand_item.py b/src/merge/resources/accounting/resources/credit_notes/types/credit_notes_list_request_expand_item.py index 74046e9b..ece50372 100644 --- a/src/merge/resources/accounting/resources/credit_notes/types/credit_notes_list_request_expand_item.py +++ b/src/merge/resources/accounting/resources/credit_notes/types/credit_notes_list_request_expand_item.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ......core import enum + T_Result = typing.TypeVar("T_Result") -class CreditNotesListRequestExpandItem(str, enum.Enum): +class CreditNotesListRequestExpandItem(enum.StrEnum): ACCOUNTING_PERIOD = "accounting_period" APPLIED_PAYMENTS = "applied_payments" COMPANY = "company" diff --git a/src/merge/resources/accounting/resources/credit_notes/types/credit_notes_list_request_remote_fields.py b/src/merge/resources/accounting/resources/credit_notes/types/credit_notes_list_request_remote_fields.py index e881f032..a95f69b4 100644 --- a/src/merge/resources/accounting/resources/credit_notes/types/credit_notes_list_request_remote_fields.py +++ b/src/merge/resources/accounting/resources/credit_notes/types/credit_notes_list_request_remote_fields.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ......core import enum + T_Result = typing.TypeVar("T_Result") -class CreditNotesListRequestRemoteFields(str, enum.Enum): +class CreditNotesListRequestRemoteFields(enum.StrEnum): STATUS = "status" STATUS_TYPE = "status,type" TYPE = "type" diff --git a/src/merge/resources/accounting/resources/credit_notes/types/credit_notes_list_request_show_enum_origins.py b/src/merge/resources/accounting/resources/credit_notes/types/credit_notes_list_request_show_enum_origins.py index e2d8982c..bd8ad6cd 100644 --- a/src/merge/resources/accounting/resources/credit_notes/types/credit_notes_list_request_show_enum_origins.py +++ b/src/merge/resources/accounting/resources/credit_notes/types/credit_notes_list_request_show_enum_origins.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ......core import enum + T_Result = typing.TypeVar("T_Result") -class CreditNotesListRequestShowEnumOrigins(str, enum.Enum): +class CreditNotesListRequestShowEnumOrigins(enum.StrEnum): STATUS = "status" STATUS_TYPE = "status,type" TYPE = "type" diff --git a/src/merge/resources/accounting/resources/credit_notes/types/credit_notes_retrieve_request_expand_item.py b/src/merge/resources/accounting/resources/credit_notes/types/credit_notes_retrieve_request_expand_item.py index b55f5a26..6258e4c9 100644 --- a/src/merge/resources/accounting/resources/credit_notes/types/credit_notes_retrieve_request_expand_item.py +++ b/src/merge/resources/accounting/resources/credit_notes/types/credit_notes_retrieve_request_expand_item.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ......core import enum + T_Result = typing.TypeVar("T_Result") -class CreditNotesRetrieveRequestExpandItem(str, enum.Enum): +class CreditNotesRetrieveRequestExpandItem(enum.StrEnum): ACCOUNTING_PERIOD = "accounting_period" APPLIED_PAYMENTS = "applied_payments" COMPANY = "company" diff --git a/src/merge/resources/accounting/resources/credit_notes/types/credit_notes_retrieve_request_remote_fields.py b/src/merge/resources/accounting/resources/credit_notes/types/credit_notes_retrieve_request_remote_fields.py index 4c6fda3c..60b918d8 100644 --- a/src/merge/resources/accounting/resources/credit_notes/types/credit_notes_retrieve_request_remote_fields.py +++ b/src/merge/resources/accounting/resources/credit_notes/types/credit_notes_retrieve_request_remote_fields.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ......core import enum + T_Result = typing.TypeVar("T_Result") -class CreditNotesRetrieveRequestRemoteFields(str, enum.Enum): +class CreditNotesRetrieveRequestRemoteFields(enum.StrEnum): STATUS = "status" STATUS_TYPE = "status,type" TYPE = "type" diff --git a/src/merge/resources/accounting/resources/credit_notes/types/credit_notes_retrieve_request_show_enum_origins.py b/src/merge/resources/accounting/resources/credit_notes/types/credit_notes_retrieve_request_show_enum_origins.py index 108451a1..e7b832f6 100644 --- a/src/merge/resources/accounting/resources/credit_notes/types/credit_notes_retrieve_request_show_enum_origins.py +++ b/src/merge/resources/accounting/resources/credit_notes/types/credit_notes_retrieve_request_show_enum_origins.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ......core import enum + T_Result = typing.TypeVar("T_Result") -class CreditNotesRetrieveRequestShowEnumOrigins(str, enum.Enum): +class CreditNotesRetrieveRequestShowEnumOrigins(enum.StrEnum): STATUS = "status" STATUS_TYPE = "status,type" TYPE = "type" diff --git a/src/merge/resources/accounting/resources/delete_account/raw_client.py b/src/merge/resources/accounting/resources/delete_account/raw_client.py index 5bd254b2..cd336eb2 100644 --- a/src/merge/resources/accounting/resources/delete_account/raw_client.py +++ b/src/merge/resources/accounting/resources/delete_account/raw_client.py @@ -6,7 +6,9 @@ from .....core.api_error import ApiError from .....core.client_wrapper import AsyncClientWrapper, SyncClientWrapper from .....core.http_response import AsyncHttpResponse, HttpResponse +from .....core.parse_error import ParsingError from .....core.request_options import RequestOptions +from pydantic import ValidationError class RawDeleteAccountClient: @@ -37,6 +39,10 @@ def delete(self, *, request_options: typing.Optional[RequestOptions] = None) -> _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) @@ -68,4 +74,8 @@ async def delete(self, *, request_options: typing.Optional[RequestOptions] = Non _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) diff --git a/src/merge/resources/accounting/resources/employees/raw_client.py b/src/merge/resources/accounting/resources/employees/raw_client.py index a44eddcc..fa523217 100644 --- a/src/merge/resources/accounting/resources/employees/raw_client.py +++ b/src/merge/resources/accounting/resources/employees/raw_client.py @@ -9,10 +9,12 @@ from .....core.datetime_utils import serialize_datetime from .....core.http_response import AsyncHttpResponse, HttpResponse from .....core.jsonable_encoder import jsonable_encoder +from .....core.parse_error import ParsingError from .....core.request_options import RequestOptions from .....core.unchecked_base_model import construct_type from ...types.employee import Employee from ...types.paginated_employee_list import PaginatedEmployeeList +from pydantic import ValidationError class RawEmployeesClient: @@ -119,6 +121,10 @@ def list( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) def retrieve( @@ -179,6 +185,10 @@ def retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) @@ -286,6 +296,10 @@ async def list( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) async def retrieve( @@ -346,4 +360,8 @@ async def retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) diff --git a/src/merge/resources/accounting/resources/expense_reports/__init__.py b/src/merge/resources/accounting/resources/expense_reports/__init__.py index c7de6440..ea370cb7 100644 --- a/src/merge/resources/accounting/resources/expense_reports/__init__.py +++ b/src/merge/resources/accounting/resources/expense_reports/__init__.py @@ -24,8 +24,10 @@ def __getattr__(attr_name: str) -> typing.Any: raise AttributeError(f"No {attr_name} found in _dynamic_imports for module name -> {__name__}") try: module = import_module(module_name, __package__) - result = getattr(module, attr_name) - return result + if module_name == f".{attr_name}": + return module + else: + return getattr(module, attr_name) except ImportError as e: raise ImportError(f"Failed to import {attr_name} from {module_name}: {e}") from e except AttributeError as e: diff --git a/src/merge/resources/accounting/resources/expense_reports/raw_client.py b/src/merge/resources/accounting/resources/expense_reports/raw_client.py index d3376d0e..1a94ab1a 100644 --- a/src/merge/resources/accounting/resources/expense_reports/raw_client.py +++ b/src/merge/resources/accounting/resources/expense_reports/raw_client.py @@ -9,6 +9,7 @@ from .....core.datetime_utils import serialize_datetime from .....core.http_response import AsyncHttpResponse, HttpResponse from .....core.jsonable_encoder import jsonable_encoder +from .....core.parse_error import ParsingError from .....core.request_options import RequestOptions from .....core.unchecked_base_model import construct_type from ...types.expense_report import ExpenseReport @@ -21,6 +22,7 @@ from .types.expense_reports_lines_list_request_expand_item import ExpenseReportsLinesListRequestExpandItem from .types.expense_reports_list_request_expand_item import ExpenseReportsListRequestExpandItem from .types.expense_reports_retrieve_request_expand_item import ExpenseReportsRetrieveRequestExpandItem +from pydantic import ValidationError # this is used as the default value for optional parameters OMIT = typing.cast(typing.Any, ...) @@ -135,6 +137,10 @@ def list( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) def create( @@ -195,6 +201,10 @@ def create( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) def lines_list( @@ -277,6 +287,10 @@ def lines_list( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) def retrieve( @@ -344,6 +358,10 @@ def retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) def lines_remote_field_classes_list( @@ -419,6 +437,10 @@ def lines_remote_field_classes_list( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) def meta_post_retrieve( @@ -455,6 +477,10 @@ def meta_post_retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) def remote_field_classes_list( @@ -530,6 +556,10 @@ def remote_field_classes_list( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) @@ -642,6 +672,10 @@ async def list( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) async def create( @@ -702,6 +736,10 @@ async def create( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) async def lines_list( @@ -784,6 +822,10 @@ async def lines_list( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) async def retrieve( @@ -851,6 +893,10 @@ async def retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) async def lines_remote_field_classes_list( @@ -926,6 +972,10 @@ async def lines_remote_field_classes_list( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) async def meta_post_retrieve( @@ -962,6 +1012,10 @@ async def meta_post_retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) async def remote_field_classes_list( @@ -1037,4 +1091,8 @@ async def remote_field_classes_list( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) diff --git a/src/merge/resources/accounting/resources/expense_reports/types/__init__.py b/src/merge/resources/accounting/resources/expense_reports/types/__init__.py index 7b3c8498..b8c876d0 100644 --- a/src/merge/resources/accounting/resources/expense_reports/types/__init__.py +++ b/src/merge/resources/accounting/resources/expense_reports/types/__init__.py @@ -22,8 +22,10 @@ def __getattr__(attr_name: str) -> typing.Any: raise AttributeError(f"No {attr_name} found in _dynamic_imports for module name -> {__name__}") try: module = import_module(module_name, __package__) - result = getattr(module, attr_name) - return result + if module_name == f".{attr_name}": + return module + else: + return getattr(module, attr_name) except ImportError as e: raise ImportError(f"Failed to import {attr_name} from {module_name}: {e}") from e except AttributeError as e: diff --git a/src/merge/resources/accounting/resources/expense_reports/types/expense_reports_lines_list_request_expand_item.py b/src/merge/resources/accounting/resources/expense_reports/types/expense_reports_lines_list_request_expand_item.py index 7fed7333..3b021472 100644 --- a/src/merge/resources/accounting/resources/expense_reports/types/expense_reports_lines_list_request_expand_item.py +++ b/src/merge/resources/accounting/resources/expense_reports/types/expense_reports_lines_list_request_expand_item.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ......core import enum + T_Result = typing.TypeVar("T_Result") -class ExpenseReportsLinesListRequestExpandItem(str, enum.Enum): +class ExpenseReportsLinesListRequestExpandItem(enum.StrEnum): ACCOUNT = "account" COMPANY = "company" CONTACT = "contact" diff --git a/src/merge/resources/accounting/resources/expense_reports/types/expense_reports_list_request_expand_item.py b/src/merge/resources/accounting/resources/expense_reports/types/expense_reports_list_request_expand_item.py index 7285f28f..2a51b0cb 100644 --- a/src/merge/resources/accounting/resources/expense_reports/types/expense_reports_list_request_expand_item.py +++ b/src/merge/resources/accounting/resources/expense_reports/types/expense_reports_list_request_expand_item.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ......core import enum + T_Result = typing.TypeVar("T_Result") -class ExpenseReportsListRequestExpandItem(str, enum.Enum): +class ExpenseReportsListRequestExpandItem(enum.StrEnum): ACCOUNTING_PERIOD = "accounting_period" COMPANY = "company" EMPLOYEE = "employee" diff --git a/src/merge/resources/accounting/resources/expense_reports/types/expense_reports_retrieve_request_expand_item.py b/src/merge/resources/accounting/resources/expense_reports/types/expense_reports_retrieve_request_expand_item.py index 7692f8d8..6adaefc2 100644 --- a/src/merge/resources/accounting/resources/expense_reports/types/expense_reports_retrieve_request_expand_item.py +++ b/src/merge/resources/accounting/resources/expense_reports/types/expense_reports_retrieve_request_expand_item.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ......core import enum + T_Result = typing.TypeVar("T_Result") -class ExpenseReportsRetrieveRequestExpandItem(str, enum.Enum): +class ExpenseReportsRetrieveRequestExpandItem(enum.StrEnum): ACCOUNTING_PERIOD = "accounting_period" COMPANY = "company" EMPLOYEE = "employee" diff --git a/src/merge/resources/accounting/resources/expenses/__init__.py b/src/merge/resources/accounting/resources/expenses/__init__.py index 50ac2fdf..9ae9066d 100644 --- a/src/merge/resources/accounting/resources/expenses/__init__.py +++ b/src/merge/resources/accounting/resources/expenses/__init__.py @@ -19,8 +19,10 @@ def __getattr__(attr_name: str) -> typing.Any: raise AttributeError(f"No {attr_name} found in _dynamic_imports for module name -> {__name__}") try: module = import_module(module_name, __package__) - result = getattr(module, attr_name) - return result + if module_name == f".{attr_name}": + return module + else: + return getattr(module, attr_name) except ImportError as e: raise ImportError(f"Failed to import {attr_name} from {module_name}: {e}") from e except AttributeError as e: diff --git a/src/merge/resources/accounting/resources/expenses/raw_client.py b/src/merge/resources/accounting/resources/expenses/raw_client.py index 6f736c9e..926d8451 100644 --- a/src/merge/resources/accounting/resources/expenses/raw_client.py +++ b/src/merge/resources/accounting/resources/expenses/raw_client.py @@ -9,6 +9,7 @@ from .....core.datetime_utils import serialize_datetime from .....core.http_response import AsyncHttpResponse, HttpResponse from .....core.jsonable_encoder import jsonable_encoder +from .....core.parse_error import ParsingError from .....core.request_options import RequestOptions from .....core.unchecked_base_model import construct_type from ...types.async_bulk_create_response import AsyncBulkCreateResponse @@ -22,6 +23,7 @@ from ...types.paginated_remote_field_class_list import PaginatedRemoteFieldClassList from .types.expenses_list_request_expand_item import ExpensesListRequestExpandItem from .types.expenses_retrieve_request_expand_item import ExpensesRetrieveRequestExpandItem +from pydantic import ValidationError # this is used as the default value for optional parameters OMIT = typing.cast(typing.Any, ...) @@ -150,6 +152,10 @@ def list( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) def create( @@ -210,6 +216,10 @@ def create( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) def retrieve( @@ -275,6 +285,10 @@ def retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) def bulk_create( @@ -323,6 +337,10 @@ def bulk_create( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) def bulk_retrieve( @@ -361,6 +379,10 @@ def bulk_retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) def lines_remote_field_classes_list( @@ -436,6 +458,10 @@ def lines_remote_field_classes_list( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) def meta_post_retrieve( @@ -472,6 +498,10 @@ def meta_post_retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) def remote_field_classes_list( @@ -547,6 +577,10 @@ def remote_field_classes_list( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) @@ -673,6 +707,10 @@ async def list( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) async def create( @@ -733,6 +771,10 @@ async def create( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) async def retrieve( @@ -798,6 +840,10 @@ async def retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) async def bulk_create( @@ -846,6 +892,10 @@ async def bulk_create( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) async def bulk_retrieve( @@ -884,6 +934,10 @@ async def bulk_retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) async def lines_remote_field_classes_list( @@ -959,6 +1013,10 @@ async def lines_remote_field_classes_list( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) async def meta_post_retrieve( @@ -995,6 +1053,10 @@ async def meta_post_retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) async def remote_field_classes_list( @@ -1070,4 +1132,8 @@ async def remote_field_classes_list( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) diff --git a/src/merge/resources/accounting/resources/expenses/types/__init__.py b/src/merge/resources/accounting/resources/expenses/types/__init__.py index d1ea4608..9d8be4d9 100644 --- a/src/merge/resources/accounting/resources/expenses/types/__init__.py +++ b/src/merge/resources/accounting/resources/expenses/types/__init__.py @@ -20,8 +20,10 @@ def __getattr__(attr_name: str) -> typing.Any: raise AttributeError(f"No {attr_name} found in _dynamic_imports for module name -> {__name__}") try: module = import_module(module_name, __package__) - result = getattr(module, attr_name) - return result + if module_name == f".{attr_name}": + return module + else: + return getattr(module, attr_name) except ImportError as e: raise ImportError(f"Failed to import {attr_name} from {module_name}: {e}") from e except AttributeError as e: diff --git a/src/merge/resources/accounting/resources/expenses/types/expenses_list_request_expand_item.py b/src/merge/resources/accounting/resources/expenses/types/expenses_list_request_expand_item.py index 7e3f0793..71656ab6 100644 --- a/src/merge/resources/accounting/resources/expenses/types/expenses_list_request_expand_item.py +++ b/src/merge/resources/accounting/resources/expenses/types/expenses_list_request_expand_item.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ......core import enum + T_Result = typing.TypeVar("T_Result") -class ExpensesListRequestExpandItem(str, enum.Enum): +class ExpensesListRequestExpandItem(enum.StrEnum): ACCOUNT = "account" ACCOUNTING_PERIOD = "accounting_period" COMPANY = "company" diff --git a/src/merge/resources/accounting/resources/expenses/types/expenses_retrieve_request_expand_item.py b/src/merge/resources/accounting/resources/expenses/types/expenses_retrieve_request_expand_item.py index d496b015..55c6ad1c 100644 --- a/src/merge/resources/accounting/resources/expenses/types/expenses_retrieve_request_expand_item.py +++ b/src/merge/resources/accounting/resources/expenses/types/expenses_retrieve_request_expand_item.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ......core import enum + T_Result = typing.TypeVar("T_Result") -class ExpensesRetrieveRequestExpandItem(str, enum.Enum): +class ExpensesRetrieveRequestExpandItem(enum.StrEnum): ACCOUNT = "account" ACCOUNTING_PERIOD = "accounting_period" COMPANY = "company" diff --git a/src/merge/resources/accounting/resources/field_mapping/client.py b/src/merge/resources/accounting/resources/field_mapping/client.py index ced857d9..c8fc66d3 100644 --- a/src/merge/resources/accounting/resources/field_mapping/client.py +++ b/src/merge/resources/accounting/resources/field_mapping/client.py @@ -73,7 +73,7 @@ def field_mappings_create( *, target_field_name: str, target_field_description: str, - remote_field_traversal_path: typing.Sequence[typing.Optional[typing.Any]], + remote_field_traversal_path: typing.Sequence[typing.Any], remote_method: str, remote_url_path: str, common_model_name: str, @@ -94,7 +94,7 @@ def field_mappings_create( target_field_description : str The description of the target field you want this remote field to map to. - remote_field_traversal_path : typing.Sequence[typing.Optional[typing.Any]] + remote_field_traversal_path : typing.Sequence[typing.Any] The field traversal path of the remote field listed when you hit the GET /remote-fields endpoint. remote_method : str @@ -198,7 +198,7 @@ def field_mappings_partial_update( field_mapping_id: str, *, remote_data_iteration_count: typing.Optional[int] = None, - remote_field_traversal_path: typing.Optional[typing.Sequence[typing.Optional[typing.Any]]] = OMIT, + remote_field_traversal_path: typing.Optional[typing.Sequence[typing.Any]] = OMIT, remote_method: typing.Optional[str] = OMIT, remote_url_path: typing.Optional[str] = OMIT, jmes_path: typing.Optional[str] = OMIT, @@ -215,7 +215,7 @@ def field_mappings_partial_update( remote_data_iteration_count : typing.Optional[int] Number of common model instances to iterate through when fetching remote data for field mappings. Defaults to 250 if not provided. - remote_field_traversal_path : typing.Optional[typing.Sequence[typing.Optional[typing.Any]]] + remote_field_traversal_path : typing.Optional[typing.Sequence[typing.Any]] The field traversal path of the remote field listed when you hit the GET /remote-fields endpoint. remote_method : typing.Optional[str] @@ -404,7 +404,7 @@ async def field_mappings_create( *, target_field_name: str, target_field_description: str, - remote_field_traversal_path: typing.Sequence[typing.Optional[typing.Any]], + remote_field_traversal_path: typing.Sequence[typing.Any], remote_method: str, remote_url_path: str, common_model_name: str, @@ -425,7 +425,7 @@ async def field_mappings_create( target_field_description : str The description of the target field you want this remote field to map to. - remote_field_traversal_path : typing.Sequence[typing.Optional[typing.Any]] + remote_field_traversal_path : typing.Sequence[typing.Any] The field traversal path of the remote field listed when you hit the GET /remote-fields endpoint. remote_method : str @@ -545,7 +545,7 @@ async def field_mappings_partial_update( field_mapping_id: str, *, remote_data_iteration_count: typing.Optional[int] = None, - remote_field_traversal_path: typing.Optional[typing.Sequence[typing.Optional[typing.Any]]] = OMIT, + remote_field_traversal_path: typing.Optional[typing.Sequence[typing.Any]] = OMIT, remote_method: typing.Optional[str] = OMIT, remote_url_path: typing.Optional[str] = OMIT, jmes_path: typing.Optional[str] = OMIT, @@ -562,7 +562,7 @@ async def field_mappings_partial_update( remote_data_iteration_count : typing.Optional[int] Number of common model instances to iterate through when fetching remote data for field mappings. Defaults to 250 if not provided. - remote_field_traversal_path : typing.Optional[typing.Sequence[typing.Optional[typing.Any]]] + remote_field_traversal_path : typing.Optional[typing.Sequence[typing.Any]] The field traversal path of the remote field listed when you hit the GET /remote-fields endpoint. remote_method : typing.Optional[str] diff --git a/src/merge/resources/accounting/resources/field_mapping/raw_client.py b/src/merge/resources/accounting/resources/field_mapping/raw_client.py index b9e9d8bc..3cabc28f 100644 --- a/src/merge/resources/accounting/resources/field_mapping/raw_client.py +++ b/src/merge/resources/accounting/resources/field_mapping/raw_client.py @@ -7,12 +7,14 @@ from .....core.client_wrapper import AsyncClientWrapper, SyncClientWrapper from .....core.http_response import AsyncHttpResponse, HttpResponse from .....core.jsonable_encoder import jsonable_encoder +from .....core.parse_error import ParsingError from .....core.request_options import RequestOptions from .....core.unchecked_base_model import construct_type from ...types.external_target_field_api_response import ExternalTargetFieldApiResponse from ...types.field_mapping_api_instance_response import FieldMappingApiInstanceResponse from ...types.field_mapping_instance_response import FieldMappingInstanceResponse from ...types.remote_field_api_response import RemoteFieldApiResponse +from pydantic import ValidationError # this is used as the default value for optional parameters OMIT = typing.cast(typing.Any, ...) @@ -65,6 +67,10 @@ def field_mappings_retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) def field_mappings_create( @@ -72,7 +78,7 @@ def field_mappings_create( *, target_field_name: str, target_field_description: str, - remote_field_traversal_path: typing.Sequence[typing.Optional[typing.Any]], + remote_field_traversal_path: typing.Sequence[typing.Any], remote_method: str, remote_url_path: str, common_model_name: str, @@ -93,7 +99,7 @@ def field_mappings_create( target_field_description : str The description of the target field you want this remote field to map to. - remote_field_traversal_path : typing.Sequence[typing.Optional[typing.Any]] + remote_field_traversal_path : typing.Sequence[typing.Any] The field traversal path of the remote field listed when you hit the GET /remote-fields endpoint. remote_method : str @@ -161,6 +167,10 @@ def field_mappings_create( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) def field_mappings_destroy( @@ -199,6 +209,10 @@ def field_mappings_destroy( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) def field_mappings_partial_update( @@ -206,7 +220,7 @@ def field_mappings_partial_update( field_mapping_id: str, *, remote_data_iteration_count: typing.Optional[int] = None, - remote_field_traversal_path: typing.Optional[typing.Sequence[typing.Optional[typing.Any]]] = OMIT, + remote_field_traversal_path: typing.Optional[typing.Sequence[typing.Any]] = OMIT, remote_method: typing.Optional[str] = OMIT, remote_url_path: typing.Optional[str] = OMIT, jmes_path: typing.Optional[str] = OMIT, @@ -223,7 +237,7 @@ def field_mappings_partial_update( remote_data_iteration_count : typing.Optional[int] Number of common model instances to iterate through when fetching remote data for field mappings. Defaults to 250 if not provided. - remote_field_traversal_path : typing.Optional[typing.Sequence[typing.Optional[typing.Any]]] + remote_field_traversal_path : typing.Optional[typing.Sequence[typing.Any]] The field traversal path of the remote field listed when you hit the GET /remote-fields endpoint. remote_method : typing.Optional[str] @@ -278,6 +292,10 @@ def field_mappings_partial_update( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) def remote_fields_retrieve( @@ -328,6 +346,10 @@ def remote_fields_retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) def target_fields_retrieve( @@ -364,6 +386,10 @@ def target_fields_retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) @@ -414,6 +440,10 @@ async def field_mappings_retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) async def field_mappings_create( @@ -421,7 +451,7 @@ async def field_mappings_create( *, target_field_name: str, target_field_description: str, - remote_field_traversal_path: typing.Sequence[typing.Optional[typing.Any]], + remote_field_traversal_path: typing.Sequence[typing.Any], remote_method: str, remote_url_path: str, common_model_name: str, @@ -442,7 +472,7 @@ async def field_mappings_create( target_field_description : str The description of the target field you want this remote field to map to. - remote_field_traversal_path : typing.Sequence[typing.Optional[typing.Any]] + remote_field_traversal_path : typing.Sequence[typing.Any] The field traversal path of the remote field listed when you hit the GET /remote-fields endpoint. remote_method : str @@ -510,6 +540,10 @@ async def field_mappings_create( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) async def field_mappings_destroy( @@ -548,6 +582,10 @@ async def field_mappings_destroy( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) async def field_mappings_partial_update( @@ -555,7 +593,7 @@ async def field_mappings_partial_update( field_mapping_id: str, *, remote_data_iteration_count: typing.Optional[int] = None, - remote_field_traversal_path: typing.Optional[typing.Sequence[typing.Optional[typing.Any]]] = OMIT, + remote_field_traversal_path: typing.Optional[typing.Sequence[typing.Any]] = OMIT, remote_method: typing.Optional[str] = OMIT, remote_url_path: typing.Optional[str] = OMIT, jmes_path: typing.Optional[str] = OMIT, @@ -572,7 +610,7 @@ async def field_mappings_partial_update( remote_data_iteration_count : typing.Optional[int] Number of common model instances to iterate through when fetching remote data for field mappings. Defaults to 250 if not provided. - remote_field_traversal_path : typing.Optional[typing.Sequence[typing.Optional[typing.Any]]] + remote_field_traversal_path : typing.Optional[typing.Sequence[typing.Any]] The field traversal path of the remote field listed when you hit the GET /remote-fields endpoint. remote_method : typing.Optional[str] @@ -627,6 +665,10 @@ async def field_mappings_partial_update( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) async def remote_fields_retrieve( @@ -677,6 +719,10 @@ async def remote_fields_retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) async def target_fields_retrieve( @@ -713,4 +759,8 @@ async def target_fields_retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) diff --git a/src/merge/resources/accounting/resources/force_resync/raw_client.py b/src/merge/resources/accounting/resources/force_resync/raw_client.py index 6a49df95..8cc8b43d 100644 --- a/src/merge/resources/accounting/resources/force_resync/raw_client.py +++ b/src/merge/resources/accounting/resources/force_resync/raw_client.py @@ -6,9 +6,11 @@ from .....core.api_error import ApiError from .....core.client_wrapper import AsyncClientWrapper, SyncClientWrapper from .....core.http_response import AsyncHttpResponse, HttpResponse +from .....core.parse_error import ParsingError from .....core.request_options import RequestOptions from .....core.unchecked_base_model import construct_type from ...types.sync_status import SyncStatus +from pydantic import ValidationError class RawForceResyncClient: @@ -49,6 +51,10 @@ def sync_status_resync_create( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) @@ -90,4 +96,8 @@ async def sync_status_resync_create( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) diff --git a/src/merge/resources/accounting/resources/general_ledger_transactions/__init__.py b/src/merge/resources/accounting/resources/general_ledger_transactions/__init__.py index f4b8e505..8b7cf5fc 100644 --- a/src/merge/resources/accounting/resources/general_ledger_transactions/__init__.py +++ b/src/merge/resources/accounting/resources/general_ledger_transactions/__init__.py @@ -22,8 +22,10 @@ def __getattr__(attr_name: str) -> typing.Any: raise AttributeError(f"No {attr_name} found in _dynamic_imports for module name -> {__name__}") try: module = import_module(module_name, __package__) - result = getattr(module, attr_name) - return result + if module_name == f".{attr_name}": + return module + else: + return getattr(module, attr_name) except ImportError as e: raise ImportError(f"Failed to import {attr_name} from {module_name}: {e}") from e except AttributeError as e: diff --git a/src/merge/resources/accounting/resources/general_ledger_transactions/raw_client.py b/src/merge/resources/accounting/resources/general_ledger_transactions/raw_client.py index bdc71dda..13b6cfad 100644 --- a/src/merge/resources/accounting/resources/general_ledger_transactions/raw_client.py +++ b/src/merge/resources/accounting/resources/general_ledger_transactions/raw_client.py @@ -9,6 +9,7 @@ from .....core.datetime_utils import serialize_datetime from .....core.http_response import AsyncHttpResponse, HttpResponse from .....core.jsonable_encoder import jsonable_encoder +from .....core.parse_error import ParsingError from .....core.request_options import RequestOptions from .....core.unchecked_base_model import construct_type from ...types.general_ledger_transaction import GeneralLedgerTransaction @@ -17,6 +18,7 @@ from .types.general_ledger_transactions_retrieve_request_expand_item import ( GeneralLedgerTransactionsRetrieveRequestExpandItem, ) +from pydantic import ValidationError class RawGeneralLedgerTransactionsClient: @@ -138,6 +140,10 @@ def list( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) def retrieve( @@ -201,6 +207,10 @@ def retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) @@ -323,6 +333,10 @@ async def list( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) async def retrieve( @@ -386,4 +400,8 @@ async def retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) diff --git a/src/merge/resources/accounting/resources/general_ledger_transactions/types/__init__.py b/src/merge/resources/accounting/resources/general_ledger_transactions/types/__init__.py index bfb2fa70..0e86a5df 100644 --- a/src/merge/resources/accounting/resources/general_ledger_transactions/types/__init__.py +++ b/src/merge/resources/accounting/resources/general_ledger_transactions/types/__init__.py @@ -22,8 +22,10 @@ def __getattr__(attr_name: str) -> typing.Any: raise AttributeError(f"No {attr_name} found in _dynamic_imports for module name -> {__name__}") try: module = import_module(module_name, __package__) - result = getattr(module, attr_name) - return result + if module_name == f".{attr_name}": + return module + else: + return getattr(module, attr_name) except ImportError as e: raise ImportError(f"Failed to import {attr_name} from {module_name}: {e}") from e except AttributeError as e: diff --git a/src/merge/resources/accounting/resources/general_ledger_transactions/types/general_ledger_transactions_list_request_expand_item.py b/src/merge/resources/accounting/resources/general_ledger_transactions/types/general_ledger_transactions_list_request_expand_item.py index 3ac96d8b..486f3286 100644 --- a/src/merge/resources/accounting/resources/general_ledger_transactions/types/general_ledger_transactions_list_request_expand_item.py +++ b/src/merge/resources/accounting/resources/general_ledger_transactions/types/general_ledger_transactions_list_request_expand_item.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ......core import enum + T_Result = typing.TypeVar("T_Result") -class GeneralLedgerTransactionsListRequestExpandItem(str, enum.Enum): +class GeneralLedgerTransactionsListRequestExpandItem(enum.StrEnum): ACCOUNTING_PERIOD = "accounting_period" COMPANY = "company" GENERAL_LEDGER_TRANSACTION_LINES = "general_ledger_transaction_lines" diff --git a/src/merge/resources/accounting/resources/general_ledger_transactions/types/general_ledger_transactions_retrieve_request_expand_item.py b/src/merge/resources/accounting/resources/general_ledger_transactions/types/general_ledger_transactions_retrieve_request_expand_item.py index 78502da8..53d7da4f 100644 --- a/src/merge/resources/accounting/resources/general_ledger_transactions/types/general_ledger_transactions_retrieve_request_expand_item.py +++ b/src/merge/resources/accounting/resources/general_ledger_transactions/types/general_ledger_transactions_retrieve_request_expand_item.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ......core import enum + T_Result = typing.TypeVar("T_Result") -class GeneralLedgerTransactionsRetrieveRequestExpandItem(str, enum.Enum): +class GeneralLedgerTransactionsRetrieveRequestExpandItem(enum.StrEnum): ACCOUNTING_PERIOD = "accounting_period" COMPANY = "company" GENERAL_LEDGER_TRANSACTION_LINES = "general_ledger_transaction_lines" diff --git a/src/merge/resources/accounting/resources/generate_key/raw_client.py b/src/merge/resources/accounting/resources/generate_key/raw_client.py index 558feb1d..65485928 100644 --- a/src/merge/resources/accounting/resources/generate_key/raw_client.py +++ b/src/merge/resources/accounting/resources/generate_key/raw_client.py @@ -6,9 +6,11 @@ from .....core.api_error import ApiError from .....core.client_wrapper import AsyncClientWrapper, SyncClientWrapper from .....core.http_response import AsyncHttpResponse, HttpResponse +from .....core.parse_error import ParsingError from .....core.request_options import RequestOptions from .....core.unchecked_base_model import construct_type from ...types.remote_key import RemoteKey +from pydantic import ValidationError # this is used as the default value for optional parameters OMIT = typing.cast(typing.Any, ...) @@ -60,6 +62,10 @@ def create(self, *, name: str, request_options: typing.Optional[RequestOptions] _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) @@ -111,4 +117,8 @@ async def create( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) diff --git a/src/merge/resources/accounting/resources/income_statements/raw_client.py b/src/merge/resources/accounting/resources/income_statements/raw_client.py index 5cf0f4ad..29bdd9ad 100644 --- a/src/merge/resources/accounting/resources/income_statements/raw_client.py +++ b/src/merge/resources/accounting/resources/income_statements/raw_client.py @@ -9,10 +9,12 @@ from .....core.datetime_utils import serialize_datetime from .....core.http_response import AsyncHttpResponse, HttpResponse from .....core.jsonable_encoder import jsonable_encoder +from .....core.parse_error import ParsingError from .....core.request_options import RequestOptions from .....core.unchecked_base_model import construct_type from ...types.income_statement import IncomeStatement from ...types.paginated_income_statement_list import PaginatedIncomeStatementList +from pydantic import ValidationError class RawIncomeStatementsClient: @@ -119,6 +121,10 @@ def list( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) def retrieve( @@ -179,6 +185,10 @@ def retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) @@ -286,6 +296,10 @@ async def list( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) async def retrieve( @@ -346,4 +360,8 @@ async def retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) diff --git a/src/merge/resources/accounting/resources/invoices/__init__.py b/src/merge/resources/accounting/resources/invoices/__init__.py index e67bb781..9c861e14 100644 --- a/src/merge/resources/accounting/resources/invoices/__init__.py +++ b/src/merge/resources/accounting/resources/invoices/__init__.py @@ -26,8 +26,10 @@ def __getattr__(attr_name: str) -> typing.Any: raise AttributeError(f"No {attr_name} found in _dynamic_imports for module name -> {__name__}") try: module = import_module(module_name, __package__) - result = getattr(module, attr_name) - return result + if module_name == f".{attr_name}": + return module + else: + return getattr(module, attr_name) except ImportError as e: raise ImportError(f"Failed to import {attr_name} from {module_name}: {e}") from e except AttributeError as e: diff --git a/src/merge/resources/accounting/resources/invoices/raw_client.py b/src/merge/resources/accounting/resources/invoices/raw_client.py index 12cd2649..cdf5242f 100644 --- a/src/merge/resources/accounting/resources/invoices/raw_client.py +++ b/src/merge/resources/accounting/resources/invoices/raw_client.py @@ -9,6 +9,7 @@ from .....core.datetime_utils import serialize_datetime from .....core.http_response import AsyncHttpResponse, HttpResponse from .....core.jsonable_encoder import jsonable_encoder +from .....core.parse_error import ParsingError from .....core.request_options import RequestOptions from .....core.unchecked_base_model import construct_type from ...types.async_bulk_create_response import AsyncBulkCreateResponse @@ -24,6 +25,7 @@ from .types.invoices_list_request_status import InvoicesListRequestStatus from .types.invoices_list_request_type import InvoicesListRequestType from .types.invoices_retrieve_request_expand_item import InvoicesRetrieveRequestExpandItem +from pydantic import ValidationError # this is used as the default value for optional parameters OMIT = typing.cast(typing.Any, ...) @@ -188,6 +190,10 @@ def list( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) def create( @@ -250,6 +256,10 @@ def create( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) def retrieve( @@ -325,6 +335,10 @@ def retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) def partial_update( @@ -388,6 +402,10 @@ def partial_update( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) def bulk_create( @@ -436,6 +454,10 @@ def bulk_create( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) def bulk_retrieve( @@ -474,6 +496,10 @@ def bulk_retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) def line_items_remote_field_classes_list( @@ -549,6 +575,10 @@ def line_items_remote_field_classes_list( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) def meta_patch_retrieve( @@ -587,6 +617,10 @@ def meta_patch_retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) def meta_post_retrieve( @@ -623,6 +657,10 @@ def meta_post_retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) def remote_field_classes_list( @@ -698,6 +736,10 @@ def remote_field_classes_list( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) @@ -860,6 +902,10 @@ async def list( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) async def create( @@ -922,6 +968,10 @@ async def create( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) async def retrieve( @@ -997,6 +1047,10 @@ async def retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) async def partial_update( @@ -1060,6 +1114,10 @@ async def partial_update( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) async def bulk_create( @@ -1108,6 +1166,10 @@ async def bulk_create( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) async def bulk_retrieve( @@ -1146,6 +1208,10 @@ async def bulk_retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) async def line_items_remote_field_classes_list( @@ -1221,6 +1287,10 @@ async def line_items_remote_field_classes_list( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) async def meta_patch_retrieve( @@ -1259,6 +1329,10 @@ async def meta_patch_retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) async def meta_post_retrieve( @@ -1295,6 +1369,10 @@ async def meta_post_retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) async def remote_field_classes_list( @@ -1370,4 +1448,8 @@ async def remote_field_classes_list( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) diff --git a/src/merge/resources/accounting/resources/invoices/types/__init__.py b/src/merge/resources/accounting/resources/invoices/types/__init__.py index e3497f37..d651c9da 100644 --- a/src/merge/resources/accounting/resources/invoices/types/__init__.py +++ b/src/merge/resources/accounting/resources/invoices/types/__init__.py @@ -24,8 +24,10 @@ def __getattr__(attr_name: str) -> typing.Any: raise AttributeError(f"No {attr_name} found in _dynamic_imports for module name -> {__name__}") try: module = import_module(module_name, __package__) - result = getattr(module, attr_name) - return result + if module_name == f".{attr_name}": + return module + else: + return getattr(module, attr_name) except ImportError as e: raise ImportError(f"Failed to import {attr_name} from {module_name}: {e}") from e except AttributeError as e: diff --git a/src/merge/resources/accounting/resources/invoices/types/invoices_list_request_expand_item.py b/src/merge/resources/accounting/resources/invoices/types/invoices_list_request_expand_item.py index ae330277..42e72959 100644 --- a/src/merge/resources/accounting/resources/invoices/types/invoices_list_request_expand_item.py +++ b/src/merge/resources/accounting/resources/invoices/types/invoices_list_request_expand_item.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ......core import enum + T_Result = typing.TypeVar("T_Result") -class InvoicesListRequestExpandItem(str, enum.Enum): +class InvoicesListRequestExpandItem(enum.StrEnum): ACCOUNTING_PERIOD = "accounting_period" APPLIED_CREDIT_NOTES = "applied_credit_notes" APPLIED_PAYMENTS = "applied_payments" diff --git a/src/merge/resources/accounting/resources/invoices/types/invoices_list_request_status.py b/src/merge/resources/accounting/resources/invoices/types/invoices_list_request_status.py index c4f5a109..25a1c0c0 100644 --- a/src/merge/resources/accounting/resources/invoices/types/invoices_list_request_status.py +++ b/src/merge/resources/accounting/resources/invoices/types/invoices_list_request_status.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ......core import enum + T_Result = typing.TypeVar("T_Result") -class InvoicesListRequestStatus(str, enum.Enum): +class InvoicesListRequestStatus(enum.StrEnum): DRAFT = "DRAFT" OPEN = "OPEN" PAID = "PAID" diff --git a/src/merge/resources/accounting/resources/invoices/types/invoices_list_request_type.py b/src/merge/resources/accounting/resources/invoices/types/invoices_list_request_type.py index 549c7844..a1e8ead2 100644 --- a/src/merge/resources/accounting/resources/invoices/types/invoices_list_request_type.py +++ b/src/merge/resources/accounting/resources/invoices/types/invoices_list_request_type.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ......core import enum + T_Result = typing.TypeVar("T_Result") -class InvoicesListRequestType(str, enum.Enum): +class InvoicesListRequestType(enum.StrEnum): ACCOUNTS_PAYABLE = "ACCOUNTS_PAYABLE" ACCOUNTS_RECEIVABLE = "ACCOUNTS_RECEIVABLE" diff --git a/src/merge/resources/accounting/resources/invoices/types/invoices_retrieve_request_expand_item.py b/src/merge/resources/accounting/resources/invoices/types/invoices_retrieve_request_expand_item.py index 889da803..ca51105a 100644 --- a/src/merge/resources/accounting/resources/invoices/types/invoices_retrieve_request_expand_item.py +++ b/src/merge/resources/accounting/resources/invoices/types/invoices_retrieve_request_expand_item.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ......core import enum + T_Result = typing.TypeVar("T_Result") -class InvoicesRetrieveRequestExpandItem(str, enum.Enum): +class InvoicesRetrieveRequestExpandItem(enum.StrEnum): ACCOUNTING_PERIOD = "accounting_period" APPLIED_CREDIT_NOTES = "applied_credit_notes" APPLIED_PAYMENTS = "applied_payments" diff --git a/src/merge/resources/accounting/resources/issues/__init__.py b/src/merge/resources/accounting/resources/issues/__init__.py index 3ca1094b..45b33fe1 100644 --- a/src/merge/resources/accounting/resources/issues/__init__.py +++ b/src/merge/resources/accounting/resources/issues/__init__.py @@ -16,8 +16,10 @@ def __getattr__(attr_name: str) -> typing.Any: raise AttributeError(f"No {attr_name} found in _dynamic_imports for module name -> {__name__}") try: module = import_module(module_name, __package__) - result = getattr(module, attr_name) - return result + if module_name == f".{attr_name}": + return module + else: + return getattr(module, attr_name) except ImportError as e: raise ImportError(f"Failed to import {attr_name} from {module_name}: {e}") from e except AttributeError as e: diff --git a/src/merge/resources/accounting/resources/issues/raw_client.py b/src/merge/resources/accounting/resources/issues/raw_client.py index c1ba2017..c7d442b2 100644 --- a/src/merge/resources/accounting/resources/issues/raw_client.py +++ b/src/merge/resources/accounting/resources/issues/raw_client.py @@ -9,11 +9,13 @@ from .....core.datetime_utils import serialize_datetime from .....core.http_response import AsyncHttpResponse, HttpResponse from .....core.jsonable_encoder import jsonable_encoder +from .....core.parse_error import ParsingError from .....core.request_options import RequestOptions from .....core.unchecked_base_model import construct_type from ...types.issue import Issue from ...types.paginated_issue_list import PaginatedIssueList from .types.issues_list_request_status import IssuesListRequestStatus +from pydantic import ValidationError class RawIssuesClient: @@ -136,6 +138,10 @@ def list( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) def retrieve(self, id: str, *, request_options: typing.Optional[RequestOptions] = None) -> HttpResponse[Issue]: @@ -172,6 +178,10 @@ def retrieve(self, id: str, *, request_options: typing.Optional[RequestOptions] _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) @@ -295,6 +305,10 @@ async def list( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) async def retrieve( @@ -333,4 +347,8 @@ async def retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) diff --git a/src/merge/resources/accounting/resources/issues/types/__init__.py b/src/merge/resources/accounting/resources/issues/types/__init__.py index 88fbf977..5e097583 100644 --- a/src/merge/resources/accounting/resources/issues/types/__init__.py +++ b/src/merge/resources/accounting/resources/issues/types/__init__.py @@ -16,8 +16,10 @@ def __getattr__(attr_name: str) -> typing.Any: raise AttributeError(f"No {attr_name} found in _dynamic_imports for module name -> {__name__}") try: module = import_module(module_name, __package__) - result = getattr(module, attr_name) - return result + if module_name == f".{attr_name}": + return module + else: + return getattr(module, attr_name) except ImportError as e: raise ImportError(f"Failed to import {attr_name} from {module_name}: {e}") from e except AttributeError as e: diff --git a/src/merge/resources/accounting/resources/issues/types/issues_list_request_status.py b/src/merge/resources/accounting/resources/issues/types/issues_list_request_status.py index 2bd3521e..a61afdd0 100644 --- a/src/merge/resources/accounting/resources/issues/types/issues_list_request_status.py +++ b/src/merge/resources/accounting/resources/issues/types/issues_list_request_status.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ......core import enum + T_Result = typing.TypeVar("T_Result") -class IssuesListRequestStatus(str, enum.Enum): +class IssuesListRequestStatus(enum.StrEnum): ONGOING = "ONGOING" RESOLVED = "RESOLVED" diff --git a/src/merge/resources/accounting/resources/item_fulfillments/__init__.py b/src/merge/resources/accounting/resources/item_fulfillments/__init__.py index 631d0f03..beccbb1d 100644 --- a/src/merge/resources/accounting/resources/item_fulfillments/__init__.py +++ b/src/merge/resources/accounting/resources/item_fulfillments/__init__.py @@ -19,8 +19,10 @@ def __getattr__(attr_name: str) -> typing.Any: raise AttributeError(f"No {attr_name} found in _dynamic_imports for module name -> {__name__}") try: module = import_module(module_name, __package__) - result = getattr(module, attr_name) - return result + if module_name == f".{attr_name}": + return module + else: + return getattr(module, attr_name) except ImportError as e: raise ImportError(f"Failed to import {attr_name} from {module_name}: {e}") from e except AttributeError as e: diff --git a/src/merge/resources/accounting/resources/item_fulfillments/raw_client.py b/src/merge/resources/accounting/resources/item_fulfillments/raw_client.py index 1bc8419f..c9607ea8 100644 --- a/src/merge/resources/accounting/resources/item_fulfillments/raw_client.py +++ b/src/merge/resources/accounting/resources/item_fulfillments/raw_client.py @@ -7,6 +7,7 @@ from .....core.client_wrapper import AsyncClientWrapper, SyncClientWrapper from .....core.http_response import AsyncHttpResponse, HttpResponse from .....core.jsonable_encoder import jsonable_encoder +from .....core.parse_error import ParsingError from .....core.request_options import RequestOptions from .....core.unchecked_base_model import construct_type from ...types.async_bulk_create_response import AsyncBulkCreateResponse @@ -20,6 +21,7 @@ from ...types.paginated_remote_field_class_list import PaginatedRemoteFieldClassList from .types.item_fulfillments_list_request_expand_item import ItemFulfillmentsListRequestExpandItem from .types.item_fulfillments_retrieve_request_expand_item import ItemFulfillmentsRetrieveRequestExpandItem +from pydantic import ValidationError # this is used as the default value for optional parameters OMIT = typing.cast(typing.Any, ...) @@ -114,6 +116,10 @@ def list( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) def create( @@ -174,6 +180,10 @@ def create( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) def retrieve( @@ -251,6 +261,10 @@ def retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) def bulk_create( @@ -299,6 +313,10 @@ def bulk_create( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) def bulk_retrieve( @@ -337,6 +355,10 @@ def bulk_retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) def lines_remote_field_classes_list( @@ -412,6 +434,10 @@ def lines_remote_field_classes_list( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) def meta_post_retrieve( @@ -448,6 +474,10 @@ def meta_post_retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) def remote_field_classes_list( @@ -523,6 +553,10 @@ def remote_field_classes_list( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) @@ -615,6 +649,10 @@ async def list( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) async def create( @@ -675,6 +713,10 @@ async def create( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) async def retrieve( @@ -752,6 +794,10 @@ async def retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) async def bulk_create( @@ -800,6 +846,10 @@ async def bulk_create( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) async def bulk_retrieve( @@ -838,6 +888,10 @@ async def bulk_retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) async def lines_remote_field_classes_list( @@ -913,6 +967,10 @@ async def lines_remote_field_classes_list( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) async def meta_post_retrieve( @@ -949,6 +1007,10 @@ async def meta_post_retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) async def remote_field_classes_list( @@ -1024,4 +1086,8 @@ async def remote_field_classes_list( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) diff --git a/src/merge/resources/accounting/resources/item_fulfillments/types/__init__.py b/src/merge/resources/accounting/resources/item_fulfillments/types/__init__.py index 2dfa8ff7..3f54c6b2 100644 --- a/src/merge/resources/accounting/resources/item_fulfillments/types/__init__.py +++ b/src/merge/resources/accounting/resources/item_fulfillments/types/__init__.py @@ -20,8 +20,10 @@ def __getattr__(attr_name: str) -> typing.Any: raise AttributeError(f"No {attr_name} found in _dynamic_imports for module name -> {__name__}") try: module = import_module(module_name, __package__) - result = getattr(module, attr_name) - return result + if module_name == f".{attr_name}": + return module + else: + return getattr(module, attr_name) except ImportError as e: raise ImportError(f"Failed to import {attr_name} from {module_name}: {e}") from e except AttributeError as e: diff --git a/src/merge/resources/accounting/resources/item_fulfillments/types/item_fulfillments_list_request_expand_item.py b/src/merge/resources/accounting/resources/item_fulfillments/types/item_fulfillments_list_request_expand_item.py index c9146ad2..d2c626c6 100644 --- a/src/merge/resources/accounting/resources/item_fulfillments/types/item_fulfillments_list_request_expand_item.py +++ b/src/merge/resources/accounting/resources/item_fulfillments/types/item_fulfillments_list_request_expand_item.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ......core import enum + T_Result = typing.TypeVar("T_Result") -class ItemFulfillmentsListRequestExpandItem(str, enum.Enum): +class ItemFulfillmentsListRequestExpandItem(enum.StrEnum): COMPANY = "company" CUSTOMER = "customer" LINES = "lines" diff --git a/src/merge/resources/accounting/resources/item_fulfillments/types/item_fulfillments_retrieve_request_expand_item.py b/src/merge/resources/accounting/resources/item_fulfillments/types/item_fulfillments_retrieve_request_expand_item.py index 931d5944..33422069 100644 --- a/src/merge/resources/accounting/resources/item_fulfillments/types/item_fulfillments_retrieve_request_expand_item.py +++ b/src/merge/resources/accounting/resources/item_fulfillments/types/item_fulfillments_retrieve_request_expand_item.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ......core import enum + T_Result = typing.TypeVar("T_Result") -class ItemFulfillmentsRetrieveRequestExpandItem(str, enum.Enum): +class ItemFulfillmentsRetrieveRequestExpandItem(enum.StrEnum): COMPANY = "company" CUSTOMER = "customer" LINES = "lines" diff --git a/src/merge/resources/accounting/resources/items/__init__.py b/src/merge/resources/accounting/resources/items/__init__.py index 8a0039db..bd134cd1 100644 --- a/src/merge/resources/accounting/resources/items/__init__.py +++ b/src/merge/resources/accounting/resources/items/__init__.py @@ -19,8 +19,10 @@ def __getattr__(attr_name: str) -> typing.Any: raise AttributeError(f"No {attr_name} found in _dynamic_imports for module name -> {__name__}") try: module = import_module(module_name, __package__) - result = getattr(module, attr_name) - return result + if module_name == f".{attr_name}": + return module + else: + return getattr(module, attr_name) except ImportError as e: raise ImportError(f"Failed to import {attr_name} from {module_name}: {e}") from e except AttributeError as e: diff --git a/src/merge/resources/accounting/resources/items/raw_client.py b/src/merge/resources/accounting/resources/items/raw_client.py index 60b7108f..4a8d23ae 100644 --- a/src/merge/resources/accounting/resources/items/raw_client.py +++ b/src/merge/resources/accounting/resources/items/raw_client.py @@ -9,6 +9,7 @@ from .....core.datetime_utils import serialize_datetime from .....core.http_response import AsyncHttpResponse, HttpResponse from .....core.jsonable_encoder import jsonable_encoder +from .....core.parse_error import ParsingError from .....core.request_options import RequestOptions from .....core.unchecked_base_model import construct_type from ...types.item import Item @@ -19,6 +20,7 @@ from ...types.patched_item_request_request import PatchedItemRequestRequest from .types.items_list_request_expand_item import ItemsListRequestExpandItem from .types.items_retrieve_request_expand_item import ItemsRetrieveRequestExpandItem +from pydantic import ValidationError # this is used as the default value for optional parameters OMIT = typing.cast(typing.Any, ...) @@ -143,6 +145,10 @@ def list( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) def create( @@ -203,6 +209,10 @@ def create( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) def retrieve( @@ -273,6 +283,10 @@ def retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) def partial_update( @@ -336,6 +350,10 @@ def partial_update( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) def meta_patch_retrieve( @@ -374,6 +392,10 @@ def meta_patch_retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) def meta_post_retrieve( @@ -410,6 +432,10 @@ def meta_post_retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) @@ -532,6 +558,10 @@ async def list( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) async def create( @@ -592,6 +622,10 @@ async def create( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) async def retrieve( @@ -662,6 +696,10 @@ async def retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) async def partial_update( @@ -725,6 +763,10 @@ async def partial_update( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) async def meta_patch_retrieve( @@ -763,6 +805,10 @@ async def meta_patch_retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) async def meta_post_retrieve( @@ -799,4 +845,8 @@ async def meta_post_retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) diff --git a/src/merge/resources/accounting/resources/items/types/__init__.py b/src/merge/resources/accounting/resources/items/types/__init__.py index 94716a6d..8901398b 100644 --- a/src/merge/resources/accounting/resources/items/types/__init__.py +++ b/src/merge/resources/accounting/resources/items/types/__init__.py @@ -20,8 +20,10 @@ def __getattr__(attr_name: str) -> typing.Any: raise AttributeError(f"No {attr_name} found in _dynamic_imports for module name -> {__name__}") try: module = import_module(module_name, __package__) - result = getattr(module, attr_name) - return result + if module_name == f".{attr_name}": + return module + else: + return getattr(module, attr_name) except ImportError as e: raise ImportError(f"Failed to import {attr_name} from {module_name}: {e}") from e except AttributeError as e: diff --git a/src/merge/resources/accounting/resources/items/types/items_list_request_expand_item.py b/src/merge/resources/accounting/resources/items/types/items_list_request_expand_item.py index 2cf676c2..b3e39ebc 100644 --- a/src/merge/resources/accounting/resources/items/types/items_list_request_expand_item.py +++ b/src/merge/resources/accounting/resources/items/types/items_list_request_expand_item.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ......core import enum + T_Result = typing.TypeVar("T_Result") -class ItemsListRequestExpandItem(str, enum.Enum): +class ItemsListRequestExpandItem(enum.StrEnum): COMPANY = "company" PURCHASE_ACCOUNT = "purchase_account" PURCHASE_TAX_RATE = "purchase_tax_rate" diff --git a/src/merge/resources/accounting/resources/items/types/items_retrieve_request_expand_item.py b/src/merge/resources/accounting/resources/items/types/items_retrieve_request_expand_item.py index 6dad67a3..25a8410f 100644 --- a/src/merge/resources/accounting/resources/items/types/items_retrieve_request_expand_item.py +++ b/src/merge/resources/accounting/resources/items/types/items_retrieve_request_expand_item.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ......core import enum + T_Result = typing.TypeVar("T_Result") -class ItemsRetrieveRequestExpandItem(str, enum.Enum): +class ItemsRetrieveRequestExpandItem(enum.StrEnum): COMPANY = "company" PURCHASE_ACCOUNT = "purchase_account" PURCHASE_TAX_RATE = "purchase_tax_rate" diff --git a/src/merge/resources/accounting/resources/journal_entries/__init__.py b/src/merge/resources/accounting/resources/journal_entries/__init__.py index abd41565..3cb2c57b 100644 --- a/src/merge/resources/accounting/resources/journal_entries/__init__.py +++ b/src/merge/resources/accounting/resources/journal_entries/__init__.py @@ -19,8 +19,10 @@ def __getattr__(attr_name: str) -> typing.Any: raise AttributeError(f"No {attr_name} found in _dynamic_imports for module name -> {__name__}") try: module = import_module(module_name, __package__) - result = getattr(module, attr_name) - return result + if module_name == f".{attr_name}": + return module + else: + return getattr(module, attr_name) except ImportError as e: raise ImportError(f"Failed to import {attr_name} from {module_name}: {e}") from e except AttributeError as e: diff --git a/src/merge/resources/accounting/resources/journal_entries/raw_client.py b/src/merge/resources/accounting/resources/journal_entries/raw_client.py index 00bd3258..3b192b21 100644 --- a/src/merge/resources/accounting/resources/journal_entries/raw_client.py +++ b/src/merge/resources/accounting/resources/journal_entries/raw_client.py @@ -9,6 +9,7 @@ from .....core.datetime_utils import serialize_datetime from .....core.http_response import AsyncHttpResponse, HttpResponse from .....core.jsonable_encoder import jsonable_encoder +from .....core.parse_error import ParsingError from .....core.request_options import RequestOptions from .....core.unchecked_base_model import construct_type from ...types.journal_entry import JournalEntry @@ -19,6 +20,7 @@ from ...types.paginated_remote_field_class_list import PaginatedRemoteFieldClassList from .types.journal_entries_list_request_expand_item import JournalEntriesListRequestExpandItem from .types.journal_entries_retrieve_request_expand_item import JournalEntriesRetrieveRequestExpandItem +from pydantic import ValidationError # this is used as the default value for optional parameters OMIT = typing.cast(typing.Any, ...) @@ -147,6 +149,10 @@ def list( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) def create( @@ -207,6 +213,10 @@ def create( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) def retrieve( @@ -274,6 +284,10 @@ def retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) def lines_remote_field_classes_list( @@ -349,6 +363,10 @@ def lines_remote_field_classes_list( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) def meta_post_retrieve( @@ -385,6 +403,10 @@ def meta_post_retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) def remote_field_classes_list( @@ -460,6 +482,10 @@ def remote_field_classes_list( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) @@ -586,6 +612,10 @@ async def list( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) async def create( @@ -646,6 +676,10 @@ async def create( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) async def retrieve( @@ -713,6 +747,10 @@ async def retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) async def lines_remote_field_classes_list( @@ -788,6 +826,10 @@ async def lines_remote_field_classes_list( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) async def meta_post_retrieve( @@ -824,6 +866,10 @@ async def meta_post_retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) async def remote_field_classes_list( @@ -899,4 +945,8 @@ async def remote_field_classes_list( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) diff --git a/src/merge/resources/accounting/resources/journal_entries/types/__init__.py b/src/merge/resources/accounting/resources/journal_entries/types/__init__.py index d080468c..929919c5 100644 --- a/src/merge/resources/accounting/resources/journal_entries/types/__init__.py +++ b/src/merge/resources/accounting/resources/journal_entries/types/__init__.py @@ -20,8 +20,10 @@ def __getattr__(attr_name: str) -> typing.Any: raise AttributeError(f"No {attr_name} found in _dynamic_imports for module name -> {__name__}") try: module = import_module(module_name, __package__) - result = getattr(module, attr_name) - return result + if module_name == f".{attr_name}": + return module + else: + return getattr(module, attr_name) except ImportError as e: raise ImportError(f"Failed to import {attr_name} from {module_name}: {e}") from e except AttributeError as e: diff --git a/src/merge/resources/accounting/resources/journal_entries/types/journal_entries_list_request_expand_item.py b/src/merge/resources/accounting/resources/journal_entries/types/journal_entries_list_request_expand_item.py index b7942027..318b9176 100644 --- a/src/merge/resources/accounting/resources/journal_entries/types/journal_entries_list_request_expand_item.py +++ b/src/merge/resources/accounting/resources/journal_entries/types/journal_entries_list_request_expand_item.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ......core import enum + T_Result = typing.TypeVar("T_Result") -class JournalEntriesListRequestExpandItem(str, enum.Enum): +class JournalEntriesListRequestExpandItem(enum.StrEnum): ACCOUNTING_PERIOD = "accounting_period" APPLIED_PAYMENTS = "applied_payments" COMPANY = "company" diff --git a/src/merge/resources/accounting/resources/journal_entries/types/journal_entries_retrieve_request_expand_item.py b/src/merge/resources/accounting/resources/journal_entries/types/journal_entries_retrieve_request_expand_item.py index d0d1f3ee..bde1d4b2 100644 --- a/src/merge/resources/accounting/resources/journal_entries/types/journal_entries_retrieve_request_expand_item.py +++ b/src/merge/resources/accounting/resources/journal_entries/types/journal_entries_retrieve_request_expand_item.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ......core import enum + T_Result = typing.TypeVar("T_Result") -class JournalEntriesRetrieveRequestExpandItem(str, enum.Enum): +class JournalEntriesRetrieveRequestExpandItem(enum.StrEnum): ACCOUNTING_PERIOD = "accounting_period" APPLIED_PAYMENTS = "applied_payments" COMPANY = "company" diff --git a/src/merge/resources/accounting/resources/link_token/__init__.py b/src/merge/resources/accounting/resources/link_token/__init__.py index be8c3839..834918c1 100644 --- a/src/merge/resources/accounting/resources/link_token/__init__.py +++ b/src/merge/resources/accounting/resources/link_token/__init__.py @@ -19,8 +19,10 @@ def __getattr__(attr_name: str) -> typing.Any: raise AttributeError(f"No {attr_name} found in _dynamic_imports for module name -> {__name__}") try: module = import_module(module_name, __package__) - result = getattr(module, attr_name) - return result + if module_name == f".{attr_name}": + return module + else: + return getattr(module, attr_name) except ImportError as e: raise ImportError(f"Failed to import {attr_name} from {module_name}: {e}") from e except AttributeError as e: diff --git a/src/merge/resources/accounting/resources/link_token/client.py b/src/merge/resources/accounting/resources/link_token/client.py index 9dea0c22..754c89be 100644 --- a/src/merge/resources/accounting/resources/link_token/client.py +++ b/src/merge/resources/accounting/resources/link_token/client.py @@ -50,7 +50,7 @@ def create( ] = OMIT, language: typing.Optional[EndUserDetailsRequestLanguage] = OMIT, are_syncs_disabled: typing.Optional[bool] = OMIT, - integration_specific_config: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = OMIT, + integration_specific_config: typing.Optional[typing.Dict[str, typing.Any]] = OMIT, completed_account_initial_screen: typing.Optional[EndUserDetailsRequestCompletedAccountInitialScreen] = OMIT, linked_destination_id: typing.Optional[str] = OMIT, credential_id: typing.Optional[str] = OMIT, @@ -100,7 +100,7 @@ def create( are_syncs_disabled : typing.Optional[bool] The boolean that indicates whether initial, periodic, and force syncs will be disabled. - integration_specific_config : typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] + integration_specific_config : typing.Optional[typing.Dict[str, typing.Any]] A JSON object containing integration-specific configuration options. completed_account_initial_screen : typing.Optional[EndUserDetailsRequestCompletedAccountInitialScreen] @@ -192,7 +192,7 @@ async def create( ] = OMIT, language: typing.Optional[EndUserDetailsRequestLanguage] = OMIT, are_syncs_disabled: typing.Optional[bool] = OMIT, - integration_specific_config: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = OMIT, + integration_specific_config: typing.Optional[typing.Dict[str, typing.Any]] = OMIT, completed_account_initial_screen: typing.Optional[EndUserDetailsRequestCompletedAccountInitialScreen] = OMIT, linked_destination_id: typing.Optional[str] = OMIT, credential_id: typing.Optional[str] = OMIT, @@ -242,7 +242,7 @@ async def create( are_syncs_disabled : typing.Optional[bool] The boolean that indicates whether initial, periodic, and force syncs will be disabled. - integration_specific_config : typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] + integration_specific_config : typing.Optional[typing.Dict[str, typing.Any]] A JSON object containing integration-specific configuration options. completed_account_initial_screen : typing.Optional[EndUserDetailsRequestCompletedAccountInitialScreen] diff --git a/src/merge/resources/accounting/resources/link_token/raw_client.py b/src/merge/resources/accounting/resources/link_token/raw_client.py index 89324aa9..fd8f1a33 100644 --- a/src/merge/resources/accounting/resources/link_token/raw_client.py +++ b/src/merge/resources/accounting/resources/link_token/raw_client.py @@ -6,6 +6,7 @@ from .....core.api_error import ApiError from .....core.client_wrapper import AsyncClientWrapper, SyncClientWrapper from .....core.http_response import AsyncHttpResponse, HttpResponse +from .....core.parse_error import ParsingError from .....core.request_options import RequestOptions from .....core.unchecked_base_model import construct_type from ...types.categories_enum import CategoriesEnum @@ -16,6 +17,7 @@ EndUserDetailsRequestCompletedAccountInitialScreen, ) from .types.end_user_details_request_language import EndUserDetailsRequestLanguage +from pydantic import ValidationError # this is used as the default value for optional parameters OMIT = typing.cast(typing.Any, ...) @@ -42,7 +44,7 @@ def create( ] = OMIT, language: typing.Optional[EndUserDetailsRequestLanguage] = OMIT, are_syncs_disabled: typing.Optional[bool] = OMIT, - integration_specific_config: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = OMIT, + integration_specific_config: typing.Optional[typing.Dict[str, typing.Any]] = OMIT, completed_account_initial_screen: typing.Optional[EndUserDetailsRequestCompletedAccountInitialScreen] = OMIT, linked_destination_id: typing.Optional[str] = OMIT, credential_id: typing.Optional[str] = OMIT, @@ -92,7 +94,7 @@ def create( are_syncs_disabled : typing.Optional[bool] The boolean that indicates whether initial, periodic, and force syncs will be disabled. - integration_specific_config : typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] + integration_specific_config : typing.Optional[typing.Dict[str, typing.Any]] A JSON object containing integration-specific configuration options. completed_account_initial_screen : typing.Optional[EndUserDetailsRequestCompletedAccountInitialScreen] @@ -154,6 +156,10 @@ def create( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) @@ -178,7 +184,7 @@ async def create( ] = OMIT, language: typing.Optional[EndUserDetailsRequestLanguage] = OMIT, are_syncs_disabled: typing.Optional[bool] = OMIT, - integration_specific_config: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = OMIT, + integration_specific_config: typing.Optional[typing.Dict[str, typing.Any]] = OMIT, completed_account_initial_screen: typing.Optional[EndUserDetailsRequestCompletedAccountInitialScreen] = OMIT, linked_destination_id: typing.Optional[str] = OMIT, credential_id: typing.Optional[str] = OMIT, @@ -228,7 +234,7 @@ async def create( are_syncs_disabled : typing.Optional[bool] The boolean that indicates whether initial, periodic, and force syncs will be disabled. - integration_specific_config : typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] + integration_specific_config : typing.Optional[typing.Dict[str, typing.Any]] A JSON object containing integration-specific configuration options. completed_account_initial_screen : typing.Optional[EndUserDetailsRequestCompletedAccountInitialScreen] @@ -290,4 +296,8 @@ async def create( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) diff --git a/src/merge/resources/accounting/resources/link_token/types/__init__.py b/src/merge/resources/accounting/resources/link_token/types/__init__.py index 55cc1d4e..1846dfb1 100644 --- a/src/merge/resources/accounting/resources/link_token/types/__init__.py +++ b/src/merge/resources/accounting/resources/link_token/types/__init__.py @@ -22,8 +22,10 @@ def __getattr__(attr_name: str) -> typing.Any: raise AttributeError(f"No {attr_name} found in _dynamic_imports for module name -> {__name__}") try: module = import_module(module_name, __package__) - result = getattr(module, attr_name) - return result + if module_name == f".{attr_name}": + return module + else: + return getattr(module, attr_name) except ImportError as e: raise ImportError(f"Failed to import {attr_name} from {module_name}: {e}") from e except AttributeError as e: diff --git a/src/merge/resources/accounting/resources/linked_accounts/__init__.py b/src/merge/resources/accounting/resources/linked_accounts/__init__.py index 0b9e42b4..12e213b7 100644 --- a/src/merge/resources/accounting/resources/linked_accounts/__init__.py +++ b/src/merge/resources/accounting/resources/linked_accounts/__init__.py @@ -16,8 +16,10 @@ def __getattr__(attr_name: str) -> typing.Any: raise AttributeError(f"No {attr_name} found in _dynamic_imports for module name -> {__name__}") try: module = import_module(module_name, __package__) - result = getattr(module, attr_name) - return result + if module_name == f".{attr_name}": + return module + else: + return getattr(module, attr_name) except ImportError as e: raise ImportError(f"Failed to import {attr_name} from {module_name}: {e}") from e except AttributeError as e: diff --git a/src/merge/resources/accounting/resources/linked_accounts/raw_client.py b/src/merge/resources/accounting/resources/linked_accounts/raw_client.py index e4c24854..4a5d61cd 100644 --- a/src/merge/resources/accounting/resources/linked_accounts/raw_client.py +++ b/src/merge/resources/accounting/resources/linked_accounts/raw_client.py @@ -6,10 +6,12 @@ from .....core.api_error import ApiError from .....core.client_wrapper import AsyncClientWrapper, SyncClientWrapper from .....core.http_response import AsyncHttpResponse, HttpResponse +from .....core.parse_error import ParsingError from .....core.request_options import RequestOptions from .....core.unchecked_base_model import construct_type from ...types.paginated_account_details_and_actions_list import PaginatedAccountDetailsAndActionsList from .types.linked_accounts_list_request_category import LinkedAccountsListRequestCategory +from pydantic import ValidationError class RawLinkedAccountsClient: @@ -130,6 +132,10 @@ def list( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) @@ -251,4 +257,8 @@ async def list( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) diff --git a/src/merge/resources/accounting/resources/linked_accounts/types/__init__.py b/src/merge/resources/accounting/resources/linked_accounts/types/__init__.py index a28f38cc..a884db6a 100644 --- a/src/merge/resources/accounting/resources/linked_accounts/types/__init__.py +++ b/src/merge/resources/accounting/resources/linked_accounts/types/__init__.py @@ -18,8 +18,10 @@ def __getattr__(attr_name: str) -> typing.Any: raise AttributeError(f"No {attr_name} found in _dynamic_imports for module name -> {__name__}") try: module = import_module(module_name, __package__) - result = getattr(module, attr_name) - return result + if module_name == f".{attr_name}": + return module + else: + return getattr(module, attr_name) except ImportError as e: raise ImportError(f"Failed to import {attr_name} from {module_name}: {e}") from e except AttributeError as e: diff --git a/src/merge/resources/accounting/resources/linked_accounts/types/linked_accounts_list_request_category.py b/src/merge/resources/accounting/resources/linked_accounts/types/linked_accounts_list_request_category.py index 072b2329..c5e76b51 100644 --- a/src/merge/resources/accounting/resources/linked_accounts/types/linked_accounts_list_request_category.py +++ b/src/merge/resources/accounting/resources/linked_accounts/types/linked_accounts_list_request_category.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ......core import enum + T_Result = typing.TypeVar("T_Result") -class LinkedAccountsListRequestCategory(str, enum.Enum): +class LinkedAccountsListRequestCategory(enum.StrEnum): ACCOUNTING = "accounting" ATS = "ats" CHAT = "chat" diff --git a/src/merge/resources/accounting/resources/passthrough/raw_client.py b/src/merge/resources/accounting/resources/passthrough/raw_client.py index f02bb1a3..bd5b77d7 100644 --- a/src/merge/resources/accounting/resources/passthrough/raw_client.py +++ b/src/merge/resources/accounting/resources/passthrough/raw_client.py @@ -6,10 +6,12 @@ from .....core.api_error import ApiError from .....core.client_wrapper import AsyncClientWrapper, SyncClientWrapper from .....core.http_response import AsyncHttpResponse, HttpResponse +from .....core.parse_error import ParsingError from .....core.request_options import RequestOptions from .....core.unchecked_base_model import construct_type from ...types.data_passthrough_request import DataPassthroughRequest from ...types.remote_response import RemoteResponse +from pydantic import ValidationError # this is used as the default value for optional parameters OMIT = typing.cast(typing.Any, ...) @@ -60,6 +62,10 @@ def create( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) @@ -108,4 +114,8 @@ async def create( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) diff --git a/src/merge/resources/accounting/resources/payment_methods/raw_client.py b/src/merge/resources/accounting/resources/payment_methods/raw_client.py index 38fab3d6..c28b6b50 100644 --- a/src/merge/resources/accounting/resources/payment_methods/raw_client.py +++ b/src/merge/resources/accounting/resources/payment_methods/raw_client.py @@ -7,10 +7,12 @@ from .....core.client_wrapper import AsyncClientWrapper, SyncClientWrapper from .....core.http_response import AsyncHttpResponse, HttpResponse from .....core.jsonable_encoder import jsonable_encoder +from .....core.parse_error import ParsingError from .....core.request_options import RequestOptions from .....core.unchecked_base_model import construct_type from ...types.paginated_payment_method_list import PaginatedPaymentMethodList from ...types.payment_method import PaymentMethod +from pydantic import ValidationError class RawPaymentMethodsClient: @@ -80,6 +82,10 @@ def list( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) def retrieve( @@ -133,6 +139,10 @@ def retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) @@ -203,6 +213,10 @@ async def list( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) async def retrieve( @@ -256,4 +270,8 @@ async def retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) diff --git a/src/merge/resources/accounting/resources/payment_terms/raw_client.py b/src/merge/resources/accounting/resources/payment_terms/raw_client.py index 50d73ce5..52144911 100644 --- a/src/merge/resources/accounting/resources/payment_terms/raw_client.py +++ b/src/merge/resources/accounting/resources/payment_terms/raw_client.py @@ -7,10 +7,12 @@ from .....core.client_wrapper import AsyncClientWrapper, SyncClientWrapper from .....core.http_response import AsyncHttpResponse, HttpResponse from .....core.jsonable_encoder import jsonable_encoder +from .....core.parse_error import ParsingError from .....core.request_options import RequestOptions from .....core.unchecked_base_model import construct_type from ...types.paginated_payment_term_list import PaginatedPaymentTermList from ...types.payment_term import PaymentTerm +from pydantic import ValidationError class RawPaymentTermsClient: @@ -87,6 +89,10 @@ def list( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) def retrieve( @@ -147,6 +153,10 @@ def retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) @@ -224,6 +234,10 @@ async def list( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) async def retrieve( @@ -284,4 +298,8 @@ async def retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) diff --git a/src/merge/resources/accounting/resources/payments/__init__.py b/src/merge/resources/accounting/resources/payments/__init__.py index 5b899f5a..281e5e2d 100644 --- a/src/merge/resources/accounting/resources/payments/__init__.py +++ b/src/merge/resources/accounting/resources/payments/__init__.py @@ -19,8 +19,10 @@ def __getattr__(attr_name: str) -> typing.Any: raise AttributeError(f"No {attr_name} found in _dynamic_imports for module name -> {__name__}") try: module = import_module(module_name, __package__) - result = getattr(module, attr_name) - return result + if module_name == f".{attr_name}": + return module + else: + return getattr(module, attr_name) except ImportError as e: raise ImportError(f"Failed to import {attr_name} from {module_name}: {e}") from e except AttributeError as e: diff --git a/src/merge/resources/accounting/resources/payments/raw_client.py b/src/merge/resources/accounting/resources/payments/raw_client.py index eee38860..502dfe04 100644 --- a/src/merge/resources/accounting/resources/payments/raw_client.py +++ b/src/merge/resources/accounting/resources/payments/raw_client.py @@ -9,6 +9,7 @@ from .....core.datetime_utils import serialize_datetime from .....core.http_response import AsyncHttpResponse, HttpResponse from .....core.jsonable_encoder import jsonable_encoder +from .....core.parse_error import ParsingError from .....core.request_options import RequestOptions from .....core.unchecked_base_model import construct_type from ...types.meta_response import MetaResponse @@ -20,6 +21,7 @@ from ...types.payment_response import PaymentResponse from .types.payments_list_request_expand_item import PaymentsListRequestExpandItem from .types.payments_retrieve_request_expand_item import PaymentsRetrieveRequestExpandItem +from pydantic import ValidationError # this is used as the default value for optional parameters OMIT = typing.cast(typing.Any, ...) @@ -158,6 +160,10 @@ def list( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) def create( @@ -218,6 +224,10 @@ def create( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) def retrieve( @@ -283,6 +293,10 @@ def retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) def partial_update( @@ -346,6 +360,10 @@ def partial_update( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) def line_items_remote_field_classes_list( @@ -421,6 +439,10 @@ def line_items_remote_field_classes_list( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) def meta_patch_retrieve( @@ -459,6 +481,10 @@ def meta_patch_retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) def meta_post_retrieve( @@ -495,6 +521,10 @@ def meta_post_retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) def remote_field_classes_list( @@ -570,6 +600,10 @@ def remote_field_classes_list( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) @@ -706,6 +740,10 @@ async def list( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) async def create( @@ -766,6 +804,10 @@ async def create( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) async def retrieve( @@ -831,6 +873,10 @@ async def retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) async def partial_update( @@ -894,6 +940,10 @@ async def partial_update( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) async def line_items_remote_field_classes_list( @@ -969,6 +1019,10 @@ async def line_items_remote_field_classes_list( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) async def meta_patch_retrieve( @@ -1007,6 +1061,10 @@ async def meta_patch_retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) async def meta_post_retrieve( @@ -1043,6 +1101,10 @@ async def meta_post_retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) async def remote_field_classes_list( @@ -1118,4 +1180,8 @@ async def remote_field_classes_list( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) diff --git a/src/merge/resources/accounting/resources/payments/types/__init__.py b/src/merge/resources/accounting/resources/payments/types/__init__.py index 42fedbc5..f0fb47a2 100644 --- a/src/merge/resources/accounting/resources/payments/types/__init__.py +++ b/src/merge/resources/accounting/resources/payments/types/__init__.py @@ -20,8 +20,10 @@ def __getattr__(attr_name: str) -> typing.Any: raise AttributeError(f"No {attr_name} found in _dynamic_imports for module name -> {__name__}") try: module = import_module(module_name, __package__) - result = getattr(module, attr_name) - return result + if module_name == f".{attr_name}": + return module + else: + return getattr(module, attr_name) except ImportError as e: raise ImportError(f"Failed to import {attr_name} from {module_name}: {e}") from e except AttributeError as e: diff --git a/src/merge/resources/accounting/resources/payments/types/payments_list_request_expand_item.py b/src/merge/resources/accounting/resources/payments/types/payments_list_request_expand_item.py index 6ae2b539..6411162d 100644 --- a/src/merge/resources/accounting/resources/payments/types/payments_list_request_expand_item.py +++ b/src/merge/resources/accounting/resources/payments/types/payments_list_request_expand_item.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ......core import enum + T_Result = typing.TypeVar("T_Result") -class PaymentsListRequestExpandItem(str, enum.Enum): +class PaymentsListRequestExpandItem(enum.StrEnum): ACCOUNT = "account" ACCOUNTING_PERIOD = "accounting_period" APPLIED_TO_LINES = "applied_to_lines" diff --git a/src/merge/resources/accounting/resources/payments/types/payments_retrieve_request_expand_item.py b/src/merge/resources/accounting/resources/payments/types/payments_retrieve_request_expand_item.py index 037761ae..28f65680 100644 --- a/src/merge/resources/accounting/resources/payments/types/payments_retrieve_request_expand_item.py +++ b/src/merge/resources/accounting/resources/payments/types/payments_retrieve_request_expand_item.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ......core import enum + T_Result = typing.TypeVar("T_Result") -class PaymentsRetrieveRequestExpandItem(str, enum.Enum): +class PaymentsRetrieveRequestExpandItem(enum.StrEnum): ACCOUNT = "account" ACCOUNTING_PERIOD = "accounting_period" APPLIED_TO_LINES = "applied_to_lines" diff --git a/src/merge/resources/accounting/resources/phone_numbers/raw_client.py b/src/merge/resources/accounting/resources/phone_numbers/raw_client.py index 923613ee..f5452b04 100644 --- a/src/merge/resources/accounting/resources/phone_numbers/raw_client.py +++ b/src/merge/resources/accounting/resources/phone_numbers/raw_client.py @@ -7,9 +7,11 @@ from .....core.client_wrapper import AsyncClientWrapper, SyncClientWrapper from .....core.http_response import AsyncHttpResponse, HttpResponse from .....core.jsonable_encoder import jsonable_encoder +from .....core.parse_error import ParsingError from .....core.request_options import RequestOptions from .....core.unchecked_base_model import construct_type from ...types.accounting_phone_number import AccountingPhoneNumber +from pydantic import ValidationError class RawPhoneNumbersClient: @@ -67,6 +69,10 @@ def retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) @@ -125,4 +131,8 @@ async def retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) diff --git a/src/merge/resources/accounting/resources/projects/__init__.py b/src/merge/resources/accounting/resources/projects/__init__.py index c27a4ad7..c7ddedad 100644 --- a/src/merge/resources/accounting/resources/projects/__init__.py +++ b/src/merge/resources/accounting/resources/projects/__init__.py @@ -19,8 +19,10 @@ def __getattr__(attr_name: str) -> typing.Any: raise AttributeError(f"No {attr_name} found in _dynamic_imports for module name -> {__name__}") try: module = import_module(module_name, __package__) - result = getattr(module, attr_name) - return result + if module_name == f".{attr_name}": + return module + else: + return getattr(module, attr_name) except ImportError as e: raise ImportError(f"Failed to import {attr_name} from {module_name}: {e}") from e except AttributeError as e: diff --git a/src/merge/resources/accounting/resources/projects/raw_client.py b/src/merge/resources/accounting/resources/projects/raw_client.py index 8b3b587d..7d986f2a 100644 --- a/src/merge/resources/accounting/resources/projects/raw_client.py +++ b/src/merge/resources/accounting/resources/projects/raw_client.py @@ -9,12 +9,14 @@ from .....core.datetime_utils import serialize_datetime from .....core.http_response import AsyncHttpResponse, HttpResponse from .....core.jsonable_encoder import jsonable_encoder +from .....core.parse_error import ParsingError from .....core.request_options import RequestOptions from .....core.unchecked_base_model import construct_type from ...types.paginated_project_list import PaginatedProjectList from ...types.project import Project from .types.projects_list_request_expand_item import ProjectsListRequestExpandItem from .types.projects_retrieve_request_expand_item import ProjectsRetrieveRequestExpandItem +from pydantic import ValidationError class RawProjectsClient: @@ -126,6 +128,10 @@ def list( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) def retrieve( @@ -186,6 +192,10 @@ def retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) @@ -298,6 +308,10 @@ async def list( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) async def retrieve( @@ -358,4 +372,8 @@ async def retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) diff --git a/src/merge/resources/accounting/resources/projects/types/__init__.py b/src/merge/resources/accounting/resources/projects/types/__init__.py index 857d709c..6d5fe8bc 100644 --- a/src/merge/resources/accounting/resources/projects/types/__init__.py +++ b/src/merge/resources/accounting/resources/projects/types/__init__.py @@ -20,8 +20,10 @@ def __getattr__(attr_name: str) -> typing.Any: raise AttributeError(f"No {attr_name} found in _dynamic_imports for module name -> {__name__}") try: module = import_module(module_name, __package__) - result = getattr(module, attr_name) - return result + if module_name == f".{attr_name}": + return module + else: + return getattr(module, attr_name) except ImportError as e: raise ImportError(f"Failed to import {attr_name} from {module_name}: {e}") from e except AttributeError as e: diff --git a/src/merge/resources/accounting/resources/projects/types/projects_list_request_expand_item.py b/src/merge/resources/accounting/resources/projects/types/projects_list_request_expand_item.py index 0a06a67b..3c927978 100644 --- a/src/merge/resources/accounting/resources/projects/types/projects_list_request_expand_item.py +++ b/src/merge/resources/accounting/resources/projects/types/projects_list_request_expand_item.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ......core import enum + T_Result = typing.TypeVar("T_Result") -class ProjectsListRequestExpandItem(str, enum.Enum): +class ProjectsListRequestExpandItem(enum.StrEnum): COMPANY = "company" CONTACT = "contact" diff --git a/src/merge/resources/accounting/resources/projects/types/projects_retrieve_request_expand_item.py b/src/merge/resources/accounting/resources/projects/types/projects_retrieve_request_expand_item.py index 14927ee8..82397166 100644 --- a/src/merge/resources/accounting/resources/projects/types/projects_retrieve_request_expand_item.py +++ b/src/merge/resources/accounting/resources/projects/types/projects_retrieve_request_expand_item.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ......core import enum + T_Result = typing.TypeVar("T_Result") -class ProjectsRetrieveRequestExpandItem(str, enum.Enum): +class ProjectsRetrieveRequestExpandItem(enum.StrEnum): COMPANY = "company" CONTACT = "contact" diff --git a/src/merge/resources/accounting/resources/purchase_orders/__init__.py b/src/merge/resources/accounting/resources/purchase_orders/__init__.py index 3e7388a6..f0f0b74d 100644 --- a/src/merge/resources/accounting/resources/purchase_orders/__init__.py +++ b/src/merge/resources/accounting/resources/purchase_orders/__init__.py @@ -19,8 +19,10 @@ def __getattr__(attr_name: str) -> typing.Any: raise AttributeError(f"No {attr_name} found in _dynamic_imports for module name -> {__name__}") try: module = import_module(module_name, __package__) - result = getattr(module, attr_name) - return result + if module_name == f".{attr_name}": + return module + else: + return getattr(module, attr_name) except ImportError as e: raise ImportError(f"Failed to import {attr_name} from {module_name}: {e}") from e except AttributeError as e: diff --git a/src/merge/resources/accounting/resources/purchase_orders/raw_client.py b/src/merge/resources/accounting/resources/purchase_orders/raw_client.py index b23c921a..74cd1e9b 100644 --- a/src/merge/resources/accounting/resources/purchase_orders/raw_client.py +++ b/src/merge/resources/accounting/resources/purchase_orders/raw_client.py @@ -9,6 +9,7 @@ from .....core.datetime_utils import serialize_datetime from .....core.http_response import AsyncHttpResponse, HttpResponse from .....core.jsonable_encoder import jsonable_encoder +from .....core.parse_error import ParsingError from .....core.request_options import RequestOptions from .....core.unchecked_base_model import construct_type from ...types.meta_response import MetaResponse @@ -19,6 +20,7 @@ from ...types.purchase_order_response import PurchaseOrderResponse from .types.purchase_orders_list_request_expand_item import PurchaseOrdersListRequestExpandItem from .types.purchase_orders_retrieve_request_expand_item import PurchaseOrdersRetrieveRequestExpandItem +from pydantic import ValidationError # this is used as the default value for optional parameters OMIT = typing.cast(typing.Any, ...) @@ -153,6 +155,10 @@ def list( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) def create( @@ -213,6 +219,10 @@ def create( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) def retrieve( @@ -290,6 +300,10 @@ def retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) def line_items_remote_field_classes_list( @@ -365,6 +379,10 @@ def line_items_remote_field_classes_list( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) def meta_post_retrieve( @@ -401,6 +419,10 @@ def meta_post_retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) def remote_field_classes_list( @@ -476,6 +498,10 @@ def remote_field_classes_list( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) @@ -608,6 +634,10 @@ async def list( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) async def create( @@ -668,6 +698,10 @@ async def create( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) async def retrieve( @@ -745,6 +779,10 @@ async def retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) async def line_items_remote_field_classes_list( @@ -820,6 +858,10 @@ async def line_items_remote_field_classes_list( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) async def meta_post_retrieve( @@ -856,6 +898,10 @@ async def meta_post_retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) async def remote_field_classes_list( @@ -931,4 +977,8 @@ async def remote_field_classes_list( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) diff --git a/src/merge/resources/accounting/resources/purchase_orders/types/__init__.py b/src/merge/resources/accounting/resources/purchase_orders/types/__init__.py index 8823e821..8853863e 100644 --- a/src/merge/resources/accounting/resources/purchase_orders/types/__init__.py +++ b/src/merge/resources/accounting/resources/purchase_orders/types/__init__.py @@ -20,8 +20,10 @@ def __getattr__(attr_name: str) -> typing.Any: raise AttributeError(f"No {attr_name} found in _dynamic_imports for module name -> {__name__}") try: module = import_module(module_name, __package__) - result = getattr(module, attr_name) - return result + if module_name == f".{attr_name}": + return module + else: + return getattr(module, attr_name) except ImportError as e: raise ImportError(f"Failed to import {attr_name} from {module_name}: {e}") from e except AttributeError as e: diff --git a/src/merge/resources/accounting/resources/purchase_orders/types/purchase_orders_list_request_expand_item.py b/src/merge/resources/accounting/resources/purchase_orders/types/purchase_orders_list_request_expand_item.py index 55354de8..61eaef78 100644 --- a/src/merge/resources/accounting/resources/purchase_orders/types/purchase_orders_list_request_expand_item.py +++ b/src/merge/resources/accounting/resources/purchase_orders/types/purchase_orders_list_request_expand_item.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ......core import enum + T_Result = typing.TypeVar("T_Result") -class PurchaseOrdersListRequestExpandItem(str, enum.Enum): +class PurchaseOrdersListRequestExpandItem(enum.StrEnum): ACCOUNTING_PERIOD = "accounting_period" COMPANY = "company" DELIVERY_ADDRESS = "delivery_address" diff --git a/src/merge/resources/accounting/resources/purchase_orders/types/purchase_orders_retrieve_request_expand_item.py b/src/merge/resources/accounting/resources/purchase_orders/types/purchase_orders_retrieve_request_expand_item.py index 775024d1..8d784e78 100644 --- a/src/merge/resources/accounting/resources/purchase_orders/types/purchase_orders_retrieve_request_expand_item.py +++ b/src/merge/resources/accounting/resources/purchase_orders/types/purchase_orders_retrieve_request_expand_item.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ......core import enum + T_Result = typing.TypeVar("T_Result") -class PurchaseOrdersRetrieveRequestExpandItem(str, enum.Enum): +class PurchaseOrdersRetrieveRequestExpandItem(enum.StrEnum): ACCOUNTING_PERIOD = "accounting_period" COMPANY = "company" DELIVERY_ADDRESS = "delivery_address" diff --git a/src/merge/resources/accounting/resources/regenerate_key/raw_client.py b/src/merge/resources/accounting/resources/regenerate_key/raw_client.py index d27d2b33..7382ee47 100644 --- a/src/merge/resources/accounting/resources/regenerate_key/raw_client.py +++ b/src/merge/resources/accounting/resources/regenerate_key/raw_client.py @@ -6,9 +6,11 @@ from .....core.api_error import ApiError from .....core.client_wrapper import AsyncClientWrapper, SyncClientWrapper from .....core.http_response import AsyncHttpResponse, HttpResponse +from .....core.parse_error import ParsingError from .....core.request_options import RequestOptions from .....core.unchecked_base_model import construct_type from ...types.remote_key import RemoteKey +from pydantic import ValidationError # this is used as the default value for optional parameters OMIT = typing.cast(typing.Any, ...) @@ -60,6 +62,10 @@ def create(self, *, name: str, request_options: typing.Optional[RequestOptions] _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) @@ -111,4 +117,8 @@ async def create( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) diff --git a/src/merge/resources/accounting/resources/sales_orders/__init__.py b/src/merge/resources/accounting/resources/sales_orders/__init__.py index df0064de..2d85b8a2 100644 --- a/src/merge/resources/accounting/resources/sales_orders/__init__.py +++ b/src/merge/resources/accounting/resources/sales_orders/__init__.py @@ -19,8 +19,10 @@ def __getattr__(attr_name: str) -> typing.Any: raise AttributeError(f"No {attr_name} found in _dynamic_imports for module name -> {__name__}") try: module = import_module(module_name, __package__) - result = getattr(module, attr_name) - return result + if module_name == f".{attr_name}": + return module + else: + return getattr(module, attr_name) except ImportError as e: raise ImportError(f"Failed to import {attr_name} from {module_name}: {e}") from e except AttributeError as e: diff --git a/src/merge/resources/accounting/resources/sales_orders/raw_client.py b/src/merge/resources/accounting/resources/sales_orders/raw_client.py index 8ad90f1d..7688aa77 100644 --- a/src/merge/resources/accounting/resources/sales_orders/raw_client.py +++ b/src/merge/resources/accounting/resources/sales_orders/raw_client.py @@ -9,6 +9,7 @@ from .....core.datetime_utils import serialize_datetime from .....core.http_response import AsyncHttpResponse, HttpResponse from .....core.jsonable_encoder import jsonable_encoder +from .....core.parse_error import ParsingError from .....core.request_options import RequestOptions from .....core.unchecked_base_model import construct_type from ...types.async_bulk_create_response import AsyncBulkCreateResponse @@ -22,6 +23,7 @@ from ...types.sales_order_response import SalesOrderResponse from .types.sales_orders_list_request_expand_item import SalesOrdersListRequestExpandItem from .types.sales_orders_retrieve_request_expand_item import SalesOrdersRetrieveRequestExpandItem +from pydantic import ValidationError # this is used as the default value for optional parameters OMIT = typing.cast(typing.Any, ...) @@ -156,6 +158,10 @@ def list( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) def create( @@ -216,6 +222,10 @@ def create( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) def retrieve( @@ -291,6 +301,10 @@ def retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) def bulk_create( @@ -339,6 +353,10 @@ def bulk_create( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) def bulk_retrieve( @@ -377,6 +395,10 @@ def bulk_retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) def lines_remote_field_classes_list( @@ -452,6 +474,10 @@ def lines_remote_field_classes_list( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) def meta_post_retrieve( @@ -488,6 +514,10 @@ def meta_post_retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) def remote_field_classes_list( @@ -563,6 +593,10 @@ def remote_field_classes_list( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) @@ -695,6 +729,10 @@ async def list( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) async def create( @@ -755,6 +793,10 @@ async def create( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) async def retrieve( @@ -830,6 +872,10 @@ async def retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) async def bulk_create( @@ -878,6 +924,10 @@ async def bulk_create( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) async def bulk_retrieve( @@ -916,6 +966,10 @@ async def bulk_retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) async def lines_remote_field_classes_list( @@ -991,6 +1045,10 @@ async def lines_remote_field_classes_list( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) async def meta_post_retrieve( @@ -1027,6 +1085,10 @@ async def meta_post_retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) async def remote_field_classes_list( @@ -1102,4 +1164,8 @@ async def remote_field_classes_list( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) diff --git a/src/merge/resources/accounting/resources/sales_orders/types/__init__.py b/src/merge/resources/accounting/resources/sales_orders/types/__init__.py index 83e44bd6..f66e71b8 100644 --- a/src/merge/resources/accounting/resources/sales_orders/types/__init__.py +++ b/src/merge/resources/accounting/resources/sales_orders/types/__init__.py @@ -20,8 +20,10 @@ def __getattr__(attr_name: str) -> typing.Any: raise AttributeError(f"No {attr_name} found in _dynamic_imports for module name -> {__name__}") try: module = import_module(module_name, __package__) - result = getattr(module, attr_name) - return result + if module_name == f".{attr_name}": + return module + else: + return getattr(module, attr_name) except ImportError as e: raise ImportError(f"Failed to import {attr_name} from {module_name}: {e}") from e except AttributeError as e: diff --git a/src/merge/resources/accounting/resources/sales_orders/types/sales_orders_list_request_expand_item.py b/src/merge/resources/accounting/resources/sales_orders/types/sales_orders_list_request_expand_item.py index 004b1d89..693a5c91 100644 --- a/src/merge/resources/accounting/resources/sales_orders/types/sales_orders_list_request_expand_item.py +++ b/src/merge/resources/accounting/resources/sales_orders/types/sales_orders_list_request_expand_item.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ......core import enum + T_Result = typing.TypeVar("T_Result") -class SalesOrdersListRequestExpandItem(str, enum.Enum): +class SalesOrdersListRequestExpandItem(enum.StrEnum): COMPANY = "company" CUSTOMER = "customer" LINES = "lines" diff --git a/src/merge/resources/accounting/resources/sales_orders/types/sales_orders_retrieve_request_expand_item.py b/src/merge/resources/accounting/resources/sales_orders/types/sales_orders_retrieve_request_expand_item.py index 0a998b96..8e198f08 100644 --- a/src/merge/resources/accounting/resources/sales_orders/types/sales_orders_retrieve_request_expand_item.py +++ b/src/merge/resources/accounting/resources/sales_orders/types/sales_orders_retrieve_request_expand_item.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ......core import enum + T_Result = typing.TypeVar("T_Result") -class SalesOrdersRetrieveRequestExpandItem(str, enum.Enum): +class SalesOrdersRetrieveRequestExpandItem(enum.StrEnum): COMPANY = "company" CUSTOMER = "customer" LINES = "lines" diff --git a/src/merge/resources/accounting/resources/scopes/raw_client.py b/src/merge/resources/accounting/resources/scopes/raw_client.py index 1987e457..e5a77cd2 100644 --- a/src/merge/resources/accounting/resources/scopes/raw_client.py +++ b/src/merge/resources/accounting/resources/scopes/raw_client.py @@ -6,10 +6,12 @@ from .....core.api_error import ApiError from .....core.client_wrapper import AsyncClientWrapper, SyncClientWrapper from .....core.http_response import AsyncHttpResponse, HttpResponse +from .....core.parse_error import ParsingError from .....core.request_options import RequestOptions from .....core.unchecked_base_model import construct_type from ...types.common_model_scope_api import CommonModelScopeApi from ...types.individual_common_model_scope_deserializer_request import IndividualCommonModelScopeDeserializerRequest +from pydantic import ValidationError # this is used as the default value for optional parameters OMIT = typing.cast(typing.Any, ...) @@ -53,6 +55,10 @@ def default_scopes_retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) def linked_account_scopes_retrieve( @@ -89,6 +95,10 @@ def linked_account_scopes_retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) def linked_account_scopes_create( @@ -138,6 +148,10 @@ def linked_account_scopes_create( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) @@ -179,6 +193,10 @@ async def default_scopes_retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) async def linked_account_scopes_retrieve( @@ -215,6 +233,10 @@ async def linked_account_scopes_retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) async def linked_account_scopes_create( @@ -264,4 +286,8 @@ async def linked_account_scopes_create( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) diff --git a/src/merge/resources/accounting/resources/sync_status/raw_client.py b/src/merge/resources/accounting/resources/sync_status/raw_client.py index 89fbd854..0e4e215c 100644 --- a/src/merge/resources/accounting/resources/sync_status/raw_client.py +++ b/src/merge/resources/accounting/resources/sync_status/raw_client.py @@ -6,9 +6,11 @@ from .....core.api_error import ApiError from .....core.client_wrapper import AsyncClientWrapper, SyncClientWrapper from .....core.http_response import AsyncHttpResponse, HttpResponse +from .....core.parse_error import ParsingError from .....core.request_options import RequestOptions from .....core.unchecked_base_model import construct_type from ...types.paginated_sync_status_list import PaginatedSyncStatusList +from pydantic import ValidationError class RawSyncStatusClient: @@ -63,6 +65,10 @@ def list( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) @@ -118,4 +124,8 @@ async def list( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) diff --git a/src/merge/resources/accounting/resources/tax_rates/raw_client.py b/src/merge/resources/accounting/resources/tax_rates/raw_client.py index cc2592ef..19267a7c 100644 --- a/src/merge/resources/accounting/resources/tax_rates/raw_client.py +++ b/src/merge/resources/accounting/resources/tax_rates/raw_client.py @@ -9,10 +9,12 @@ from .....core.datetime_utils import serialize_datetime from .....core.http_response import AsyncHttpResponse, HttpResponse from .....core.jsonable_encoder import jsonable_encoder +from .....core.parse_error import ParsingError from .....core.request_options import RequestOptions from .....core.unchecked_base_model import construct_type from ...types.paginated_tax_rate_list import PaginatedTaxRateList from ...types.tax_rate import TaxRate +from pydantic import ValidationError class RawTaxRatesClient: @@ -124,6 +126,10 @@ def list( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) def retrieve( @@ -184,6 +190,10 @@ def retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) @@ -296,6 +306,10 @@ async def list( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) async def retrieve( @@ -356,4 +370,8 @@ async def retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) diff --git a/src/merge/resources/accounting/resources/tracking_categories/__init__.py b/src/merge/resources/accounting/resources/tracking_categories/__init__.py index 6f5cbc5a..ee463e8f 100644 --- a/src/merge/resources/accounting/resources/tracking_categories/__init__.py +++ b/src/merge/resources/accounting/resources/tracking_categories/__init__.py @@ -19,8 +19,10 @@ def __getattr__(attr_name: str) -> typing.Any: raise AttributeError(f"No {attr_name} found in _dynamic_imports for module name -> {__name__}") try: module = import_module(module_name, __package__) - result = getattr(module, attr_name) - return result + if module_name == f".{attr_name}": + return module + else: + return getattr(module, attr_name) except ImportError as e: raise ImportError(f"Failed to import {attr_name} from {module_name}: {e}") from e except AttributeError as e: diff --git a/src/merge/resources/accounting/resources/tracking_categories/raw_client.py b/src/merge/resources/accounting/resources/tracking_categories/raw_client.py index 9af9e4b4..adc86a03 100644 --- a/src/merge/resources/accounting/resources/tracking_categories/raw_client.py +++ b/src/merge/resources/accounting/resources/tracking_categories/raw_client.py @@ -9,12 +9,14 @@ from .....core.datetime_utils import serialize_datetime from .....core.http_response import AsyncHttpResponse, HttpResponse from .....core.jsonable_encoder import jsonable_encoder +from .....core.parse_error import ParsingError from .....core.request_options import RequestOptions from .....core.unchecked_base_model import construct_type from ...types.paginated_tracking_category_list import PaginatedTrackingCategoryList from ...types.tracking_category import TrackingCategory from .types.tracking_categories_list_request_category_type import TrackingCategoriesListRequestCategoryType from .types.tracking_categories_list_request_status import TrackingCategoriesListRequestStatus +from pydantic import ValidationError class RawTrackingCategoriesClient: @@ -146,6 +148,10 @@ def list( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) def retrieve( @@ -216,6 +222,10 @@ def retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) @@ -348,6 +358,10 @@ async def list( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) async def retrieve( @@ -418,4 +432,8 @@ async def retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) diff --git a/src/merge/resources/accounting/resources/tracking_categories/types/__init__.py b/src/merge/resources/accounting/resources/tracking_categories/types/__init__.py index 702a54d3..9b52a164 100644 --- a/src/merge/resources/accounting/resources/tracking_categories/types/__init__.py +++ b/src/merge/resources/accounting/resources/tracking_categories/types/__init__.py @@ -20,8 +20,10 @@ def __getattr__(attr_name: str) -> typing.Any: raise AttributeError(f"No {attr_name} found in _dynamic_imports for module name -> {__name__}") try: module = import_module(module_name, __package__) - result = getattr(module, attr_name) - return result + if module_name == f".{attr_name}": + return module + else: + return getattr(module, attr_name) except ImportError as e: raise ImportError(f"Failed to import {attr_name} from {module_name}: {e}") from e except AttributeError as e: diff --git a/src/merge/resources/accounting/resources/tracking_categories/types/tracking_categories_list_request_category_type.py b/src/merge/resources/accounting/resources/tracking_categories/types/tracking_categories_list_request_category_type.py index 92354377..9ca9b320 100644 --- a/src/merge/resources/accounting/resources/tracking_categories/types/tracking_categories_list_request_category_type.py +++ b/src/merge/resources/accounting/resources/tracking_categories/types/tracking_categories_list_request_category_type.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ......core import enum + T_Result = typing.TypeVar("T_Result") -class TrackingCategoriesListRequestCategoryType(str, enum.Enum): +class TrackingCategoriesListRequestCategoryType(enum.StrEnum): EMPTY = "" CLASS = "CLASS" DEPARTMENT = "DEPARTMENT" diff --git a/src/merge/resources/accounting/resources/tracking_categories/types/tracking_categories_list_request_status.py b/src/merge/resources/accounting/resources/tracking_categories/types/tracking_categories_list_request_status.py index 3f8a0cc3..ccf4d2cb 100644 --- a/src/merge/resources/accounting/resources/tracking_categories/types/tracking_categories_list_request_status.py +++ b/src/merge/resources/accounting/resources/tracking_categories/types/tracking_categories_list_request_status.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ......core import enum + T_Result = typing.TypeVar("T_Result") -class TrackingCategoriesListRequestStatus(str, enum.Enum): +class TrackingCategoriesListRequestStatus(enum.StrEnum): EMPTY = "" ACTIVE = "ACTIVE" ARCHIVED = "ARCHIVED" diff --git a/src/merge/resources/accounting/resources/transactions/__init__.py b/src/merge/resources/accounting/resources/transactions/__init__.py index 48ced57c..3697bbc7 100644 --- a/src/merge/resources/accounting/resources/transactions/__init__.py +++ b/src/merge/resources/accounting/resources/transactions/__init__.py @@ -19,8 +19,10 @@ def __getattr__(attr_name: str) -> typing.Any: raise AttributeError(f"No {attr_name} found in _dynamic_imports for module name -> {__name__}") try: module = import_module(module_name, __package__) - result = getattr(module, attr_name) - return result + if module_name == f".{attr_name}": + return module + else: + return getattr(module, attr_name) except ImportError as e: raise ImportError(f"Failed to import {attr_name} from {module_name}: {e}") from e except AttributeError as e: diff --git a/src/merge/resources/accounting/resources/transactions/raw_client.py b/src/merge/resources/accounting/resources/transactions/raw_client.py index ba17ce21..fbbc193c 100644 --- a/src/merge/resources/accounting/resources/transactions/raw_client.py +++ b/src/merge/resources/accounting/resources/transactions/raw_client.py @@ -9,12 +9,14 @@ from .....core.datetime_utils import serialize_datetime from .....core.http_response import AsyncHttpResponse, HttpResponse from .....core.jsonable_encoder import jsonable_encoder +from .....core.parse_error import ParsingError from .....core.request_options import RequestOptions from .....core.unchecked_base_model import construct_type from ...types.paginated_transaction_list import PaginatedTransactionList from ...types.transaction import Transaction from .types.transactions_list_request_expand_item import TransactionsListRequestExpandItem from .types.transactions_retrieve_request_expand_item import TransactionsRetrieveRequestExpandItem +from pydantic import ValidationError class RawTransactionsClient: @@ -135,6 +137,10 @@ def list( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) def retrieve( @@ -195,6 +201,10 @@ def retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) @@ -316,6 +326,10 @@ async def list( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) async def retrieve( @@ -376,4 +390,8 @@ async def retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) diff --git a/src/merge/resources/accounting/resources/transactions/types/__init__.py b/src/merge/resources/accounting/resources/transactions/types/__init__.py index 67bb4db7..147d4384 100644 --- a/src/merge/resources/accounting/resources/transactions/types/__init__.py +++ b/src/merge/resources/accounting/resources/transactions/types/__init__.py @@ -20,8 +20,10 @@ def __getattr__(attr_name: str) -> typing.Any: raise AttributeError(f"No {attr_name} found in _dynamic_imports for module name -> {__name__}") try: module = import_module(module_name, __package__) - result = getattr(module, attr_name) - return result + if module_name == f".{attr_name}": + return module + else: + return getattr(module, attr_name) except ImportError as e: raise ImportError(f"Failed to import {attr_name} from {module_name}: {e}") from e except AttributeError as e: diff --git a/src/merge/resources/accounting/resources/transactions/types/transactions_list_request_expand_item.py b/src/merge/resources/accounting/resources/transactions/types/transactions_list_request_expand_item.py index 9d90be89..3925ee3c 100644 --- a/src/merge/resources/accounting/resources/transactions/types/transactions_list_request_expand_item.py +++ b/src/merge/resources/accounting/resources/transactions/types/transactions_list_request_expand_item.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ......core import enum + T_Result = typing.TypeVar("T_Result") -class TransactionsListRequestExpandItem(str, enum.Enum): +class TransactionsListRequestExpandItem(enum.StrEnum): ACCOUNT = "account" ACCOUNTING_PERIOD = "accounting_period" COMPANY = "company" diff --git a/src/merge/resources/accounting/resources/transactions/types/transactions_retrieve_request_expand_item.py b/src/merge/resources/accounting/resources/transactions/types/transactions_retrieve_request_expand_item.py index 6d7d402f..f5e804c6 100644 --- a/src/merge/resources/accounting/resources/transactions/types/transactions_retrieve_request_expand_item.py +++ b/src/merge/resources/accounting/resources/transactions/types/transactions_retrieve_request_expand_item.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ......core import enum + T_Result = typing.TypeVar("T_Result") -class TransactionsRetrieveRequestExpandItem(str, enum.Enum): +class TransactionsRetrieveRequestExpandItem(enum.StrEnum): ACCOUNT = "account" ACCOUNTING_PERIOD = "accounting_period" COMPANY = "company" diff --git a/src/merge/resources/accounting/resources/vendor_credits/__init__.py b/src/merge/resources/accounting/resources/vendor_credits/__init__.py index eaf4507e..828f5681 100644 --- a/src/merge/resources/accounting/resources/vendor_credits/__init__.py +++ b/src/merge/resources/accounting/resources/vendor_credits/__init__.py @@ -19,8 +19,10 @@ def __getattr__(attr_name: str) -> typing.Any: raise AttributeError(f"No {attr_name} found in _dynamic_imports for module name -> {__name__}") try: module = import_module(module_name, __package__) - result = getattr(module, attr_name) - return result + if module_name == f".{attr_name}": + return module + else: + return getattr(module, attr_name) except ImportError as e: raise ImportError(f"Failed to import {attr_name} from {module_name}: {e}") from e except AttributeError as e: diff --git a/src/merge/resources/accounting/resources/vendor_credits/raw_client.py b/src/merge/resources/accounting/resources/vendor_credits/raw_client.py index 031f7fb3..8f8082c4 100644 --- a/src/merge/resources/accounting/resources/vendor_credits/raw_client.py +++ b/src/merge/resources/accounting/resources/vendor_credits/raw_client.py @@ -9,6 +9,7 @@ from .....core.datetime_utils import serialize_datetime from .....core.http_response import AsyncHttpResponse, HttpResponse from .....core.jsonable_encoder import jsonable_encoder +from .....core.parse_error import ParsingError from .....core.request_options import RequestOptions from .....core.unchecked_base_model import construct_type from ...types.meta_response import MetaResponse @@ -19,6 +20,7 @@ from ...types.vendor_credit_response import VendorCreditResponse from .types.vendor_credits_list_request_expand_item import VendorCreditsListRequestExpandItem from .types.vendor_credits_retrieve_request_expand_item import VendorCreditsRetrieveRequestExpandItem +from pydantic import ValidationError # this is used as the default value for optional parameters OMIT = typing.cast(typing.Any, ...) @@ -142,6 +144,10 @@ def list( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) def create( @@ -202,6 +208,10 @@ def create( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) def retrieve( @@ -264,6 +274,10 @@ def retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) def partial_update( @@ -327,6 +341,10 @@ def partial_update( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) def application_create( @@ -401,6 +419,10 @@ def application_create( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) def meta_patch_retrieve( @@ -439,6 +461,10 @@ def meta_patch_retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) def meta_post_retrieve( @@ -475,6 +501,10 @@ def meta_post_retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) @@ -596,6 +626,10 @@ async def list( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) async def create( @@ -656,6 +690,10 @@ async def create( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) async def retrieve( @@ -718,6 +756,10 @@ async def retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) async def partial_update( @@ -781,6 +823,10 @@ async def partial_update( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) async def application_create( @@ -855,6 +901,10 @@ async def application_create( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) async def meta_patch_retrieve( @@ -893,6 +943,10 @@ async def meta_patch_retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) async def meta_post_retrieve( @@ -929,4 +983,8 @@ async def meta_post_retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) diff --git a/src/merge/resources/accounting/resources/vendor_credits/types/__init__.py b/src/merge/resources/accounting/resources/vendor_credits/types/__init__.py index d880c0fb..ab4fcefe 100644 --- a/src/merge/resources/accounting/resources/vendor_credits/types/__init__.py +++ b/src/merge/resources/accounting/resources/vendor_credits/types/__init__.py @@ -20,8 +20,10 @@ def __getattr__(attr_name: str) -> typing.Any: raise AttributeError(f"No {attr_name} found in _dynamic_imports for module name -> {__name__}") try: module = import_module(module_name, __package__) - result = getattr(module, attr_name) - return result + if module_name == f".{attr_name}": + return module + else: + return getattr(module, attr_name) except ImportError as e: raise ImportError(f"Failed to import {attr_name} from {module_name}: {e}") from e except AttributeError as e: diff --git a/src/merge/resources/accounting/resources/vendor_credits/types/vendor_credits_list_request_expand_item.py b/src/merge/resources/accounting/resources/vendor_credits/types/vendor_credits_list_request_expand_item.py index f13f5f69..f47d9d0b 100644 --- a/src/merge/resources/accounting/resources/vendor_credits/types/vendor_credits_list_request_expand_item.py +++ b/src/merge/resources/accounting/resources/vendor_credits/types/vendor_credits_list_request_expand_item.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ......core import enum + T_Result = typing.TypeVar("T_Result") -class VendorCreditsListRequestExpandItem(str, enum.Enum): +class VendorCreditsListRequestExpandItem(enum.StrEnum): ACCOUNTING_PERIOD = "accounting_period" COMPANY = "company" LINES = "lines" diff --git a/src/merge/resources/accounting/resources/vendor_credits/types/vendor_credits_retrieve_request_expand_item.py b/src/merge/resources/accounting/resources/vendor_credits/types/vendor_credits_retrieve_request_expand_item.py index ecc39a29..bdadc551 100644 --- a/src/merge/resources/accounting/resources/vendor_credits/types/vendor_credits_retrieve_request_expand_item.py +++ b/src/merge/resources/accounting/resources/vendor_credits/types/vendor_credits_retrieve_request_expand_item.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ......core import enum + T_Result = typing.TypeVar("T_Result") -class VendorCreditsRetrieveRequestExpandItem(str, enum.Enum): +class VendorCreditsRetrieveRequestExpandItem(enum.StrEnum): ACCOUNTING_PERIOD = "accounting_period" COMPANY = "company" LINES = "lines" diff --git a/src/merge/resources/accounting/resources/webhook_receivers/raw_client.py b/src/merge/resources/accounting/resources/webhook_receivers/raw_client.py index 4501e01a..f085d580 100644 --- a/src/merge/resources/accounting/resources/webhook_receivers/raw_client.py +++ b/src/merge/resources/accounting/resources/webhook_receivers/raw_client.py @@ -6,9 +6,11 @@ from .....core.api_error import ApiError from .....core.client_wrapper import AsyncClientWrapper, SyncClientWrapper from .....core.http_response import AsyncHttpResponse, HttpResponse +from .....core.parse_error import ParsingError from .....core.request_options import RequestOptions from .....core.unchecked_base_model import construct_type from ...types.webhook_receiver import WebhookReceiver +from pydantic import ValidationError # this is used as the default value for optional parameters OMIT = typing.cast(typing.Any, ...) @@ -52,6 +54,10 @@ def list( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) def create( @@ -108,6 +114,10 @@ def create( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) @@ -149,6 +159,10 @@ async def list( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) async def create( @@ -205,4 +219,8 @@ async def create( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) diff --git a/src/merge/resources/accounting/types/__init__.py b/src/merge/resources/accounting/types/__init__.py index f4086c27..e13bb37f 100644 --- a/src/merge/resources/accounting/types/__init__.py +++ b/src/merge/resources/accounting/types/__init__.py @@ -1280,8 +1280,10 @@ def __getattr__(attr_name: str) -> typing.Any: raise AttributeError(f"No {attr_name} found in _dynamic_imports for module name -> {__name__}") try: module = import_module(module_name, __package__) - result = getattr(module, attr_name) - return result + if module_name == f".{attr_name}": + return module + else: + return getattr(module, attr_name) except ImportError as e: raise ImportError(f"Failed to import {attr_name} from {module_name}: {e}") from e except AttributeError as e: diff --git a/src/merge/resources/accounting/types/account.py b/src/merge/resources/accounting/types/account.py index 938cd441..49d9ad8e 100644 --- a/src/merge/resources/accounting/types/account.py +++ b/src/merge/resources/accounting/types/account.py @@ -443,7 +443,7 @@ class Account(UncheckedBaseModel): Indicates whether or not this object has been deleted in the third party platform. Full coverage deletion detection is a premium add-on. Native deletion detection is offered for free with limited coverage. [Learn more](https://docs.merge.dev/integrations/hris/supported-features/). """ - field_mappings: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None + field_mappings: typing.Optional[typing.Dict[str, typing.Any]] = None remote_data: typing.Optional[typing.List[RemoteData]] = None if IS_PYDANTIC_V2: diff --git a/src/merge/resources/accounting/types/account_account_type_enum.py b/src/merge/resources/accounting/types/account_account_type_enum.py index 8a020c01..e578a428 100644 --- a/src/merge/resources/accounting/types/account_account_type_enum.py +++ b/src/merge/resources/accounting/types/account_account_type_enum.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ....core import enum + T_Result = typing.TypeVar("T_Result") -class AccountAccountTypeEnum(str, enum.Enum): +class AccountAccountTypeEnum(enum.StrEnum): """ * `BANK` - BANK * `CREDIT_CARD` - CREDIT_CARD diff --git a/src/merge/resources/accounting/types/account_details_and_actions.py b/src/merge/resources/accounting/types/account_details_and_actions.py index 93c874ed..cbf29cb3 100644 --- a/src/merge/resources/accounting/types/account_details_and_actions.py +++ b/src/merge/resources/accounting/types/account_details_and_actions.py @@ -42,7 +42,7 @@ class AccountDetailsAndActions(UncheckedBaseModel): integration: typing.Optional[AccountDetailsAndActionsIntegration] = None account_type: str completed_at: dt.datetime - integration_specific_fields: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None + integration_specific_fields: typing.Optional[typing.Dict[str, typing.Any]] = None if IS_PYDANTIC_V2: model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2 diff --git a/src/merge/resources/accounting/types/account_details_and_actions_status_enum.py b/src/merge/resources/accounting/types/account_details_and_actions_status_enum.py index df37f582..b9ae9efc 100644 --- a/src/merge/resources/accounting/types/account_details_and_actions_status_enum.py +++ b/src/merge/resources/accounting/types/account_details_and_actions_status_enum.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ....core import enum + T_Result = typing.TypeVar("T_Result") -class AccountDetailsAndActionsStatusEnum(str, enum.Enum): +class AccountDetailsAndActionsStatusEnum(enum.StrEnum): """ * `COMPLETE` - COMPLETE * `INCOMPLETE` - INCOMPLETE diff --git a/src/merge/resources/accounting/types/account_integration.py b/src/merge/resources/accounting/types/account_integration.py index ef8b260d..7bc872ca 100644 --- a/src/merge/resources/accounting/types/account_integration.py +++ b/src/merge/resources/accounting/types/account_integration.py @@ -40,9 +40,7 @@ class AccountIntegration(UncheckedBaseModel): """ slug: typing.Optional[str] = None - api_endpoints_to_documentation_urls: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = ( - pydantic.Field(default=None) - ) + api_endpoints_to_documentation_urls: typing.Optional[typing.Dict[str, typing.Any]] = pydantic.Field(default=None) """ Mapping of API endpoints to documentation urls for support. Example: {'GET': [['/common-model-scopes', 'https://docs.merge.dev/accounting/common-model-scopes/#common_model_scopes_retrieve'],['/common-model-actions', 'https://docs.merge.dev/accounting/common-model-actions/#common_model_actions_retrieve']], 'POST': []} """ @@ -52,7 +50,7 @@ class AccountIntegration(UncheckedBaseModel): Setup guide URL for third party webhook creation. Exposed in Merge Docs. """ - category_beta_status: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = pydantic.Field(default=None) + category_beta_status: typing.Optional[typing.Dict[str, typing.Any]] = pydantic.Field(default=None) """ Category or categories this integration is in beta status for. """ diff --git a/src/merge/resources/accounting/types/account_request.py b/src/merge/resources/accounting/types/account_request.py index 35be1e07..3c936635 100644 --- a/src/merge/resources/accounting/types/account_request.py +++ b/src/merge/resources/accounting/types/account_request.py @@ -420,8 +420,8 @@ class AccountRequest(UncheckedBaseModel): The company the account belongs to. """ - integration_params: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None - linked_account_params: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None + integration_params: typing.Optional[typing.Dict[str, typing.Any]] = None + linked_account_params: typing.Optional[typing.Dict[str, typing.Any]] = None if IS_PYDANTIC_V2: model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2 diff --git a/src/merge/resources/accounting/types/account_status_enum.py b/src/merge/resources/accounting/types/account_status_enum.py index f95c253b..faa30545 100644 --- a/src/merge/resources/accounting/types/account_status_enum.py +++ b/src/merge/resources/accounting/types/account_status_enum.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ....core import enum + T_Result = typing.TypeVar("T_Result") -class AccountStatusEnum(str, enum.Enum): +class AccountStatusEnum(enum.StrEnum): """ * `ACTIVE` - ACTIVE * `PENDING` - PENDING diff --git a/src/merge/resources/accounting/types/accounting_attachment.py b/src/merge/resources/accounting/types/accounting_attachment.py index c7076640..ae341bcc 100644 --- a/src/merge/resources/accounting/types/accounting_attachment.py +++ b/src/merge/resources/accounting/types/accounting_attachment.py @@ -55,7 +55,7 @@ class AccountingAttachment(UncheckedBaseModel): Indicates whether or not this object has been deleted in the third party platform. Full coverage deletion detection is a premium add-on. Native deletion detection is offered for free with limited coverage. [Learn more](https://docs.merge.dev/integrations/hris/supported-features/). """ - field_mappings: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None + field_mappings: typing.Optional[typing.Dict[str, typing.Any]] = None remote_data: typing.Optional[typing.List[RemoteData]] = None if IS_PYDANTIC_V2: diff --git a/src/merge/resources/accounting/types/accounting_attachment_request.py b/src/merge/resources/accounting/types/accounting_attachment_request.py index a846f08a..1d095f72 100644 --- a/src/merge/resources/accounting/types/accounting_attachment_request.py +++ b/src/merge/resources/accounting/types/accounting_attachment_request.py @@ -32,8 +32,8 @@ class AccountingAttachmentRequest(UncheckedBaseModel): The company the accounting attachment belongs to. """ - integration_params: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None - linked_account_params: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None + integration_params: typing.Optional[typing.Dict[str, typing.Any]] = None + linked_account_params: typing.Optional[typing.Dict[str, typing.Any]] = None if IS_PYDANTIC_V2: model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2 diff --git a/src/merge/resources/accounting/types/accounting_period.py b/src/merge/resources/accounting/types/accounting_period.py index 8bba15b0..fa689378 100644 --- a/src/merge/resources/accounting/types/accounting_period.py +++ b/src/merge/resources/accounting/types/accounting_period.py @@ -57,7 +57,7 @@ class AccountingPeriod(UncheckedBaseModel): End date of the period """ - field_mappings: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None + field_mappings: typing.Optional[typing.Dict[str, typing.Any]] = None remote_data: typing.Optional[typing.List[RemoteData]] = None if IS_PYDANTIC_V2: diff --git a/src/merge/resources/accounting/types/accounting_phone_number_request.py b/src/merge/resources/accounting/types/accounting_phone_number_request.py index 1bb6e597..a2758beb 100644 --- a/src/merge/resources/accounting/types/accounting_phone_number_request.py +++ b/src/merge/resources/accounting/types/accounting_phone_number_request.py @@ -27,8 +27,8 @@ class AccountingPhoneNumberRequest(UncheckedBaseModel): The phone number's type. """ - integration_params: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None - linked_account_params: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None + integration_params: typing.Optional[typing.Dict[str, typing.Any]] = None + linked_account_params: typing.Optional[typing.Dict[str, typing.Any]] = None if IS_PYDANTIC_V2: model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2 diff --git a/src/merge/resources/accounting/types/address.py b/src/merge/resources/accounting/types/address.py index 196a516f..f5bfaa43 100644 --- a/src/merge/resources/accounting/types/address.py +++ b/src/merge/resources/accounting/types/address.py @@ -53,7 +53,7 @@ class Address(UncheckedBaseModel): The address's city. """ - state: typing.Optional[typing.Optional[typing.Any]] = pydantic.Field(default=None) + state: typing.Optional[typing.Any] = pydantic.Field(default=None) """ The address's state or region. """ diff --git a/src/merge/resources/accounting/types/address_request.py b/src/merge/resources/accounting/types/address_request.py index a7545759..1dfc552f 100644 --- a/src/merge/resources/accounting/types/address_request.py +++ b/src/merge/resources/accounting/types/address_request.py @@ -307,8 +307,8 @@ class AddressRequest(UncheckedBaseModel): The address's zip code. """ - integration_params: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None - linked_account_params: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None + integration_params: typing.Optional[typing.Dict[str, typing.Any]] = None + linked_account_params: typing.Optional[typing.Dict[str, typing.Any]] = None if IS_PYDANTIC_V2: model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2 diff --git a/src/merge/resources/accounting/types/address_type_enum.py b/src/merge/resources/accounting/types/address_type_enum.py index 69be620b..397f768d 100644 --- a/src/merge/resources/accounting/types/address_type_enum.py +++ b/src/merge/resources/accounting/types/address_type_enum.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ....core import enum + T_Result = typing.TypeVar("T_Result") -class AddressTypeEnum(str, enum.Enum): +class AddressTypeEnum(enum.StrEnum): """ * `BILLING` - BILLING * `SHIPPING` - SHIPPING diff --git a/src/merge/resources/accounting/types/advanced_metadata.py b/src/merge/resources/accounting/types/advanced_metadata.py index 60b5d072..aef64bb3 100644 --- a/src/merge/resources/accounting/types/advanced_metadata.py +++ b/src/merge/resources/accounting/types/advanced_metadata.py @@ -13,7 +13,7 @@ class AdvancedMetadata(UncheckedBaseModel): description: typing.Optional[str] = None is_required: typing.Optional[bool] = None is_custom: typing.Optional[bool] = None - field_choices: typing.Optional[typing.List[typing.Optional[typing.Any]]] = None + field_choices: typing.Optional[typing.List[typing.Any]] = None if IS_PYDANTIC_V2: model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2 diff --git a/src/merge/resources/accounting/types/async_post_task_result.py b/src/merge/resources/accounting/types/async_post_task_result.py index 3cd4ef00..bece6643 100644 --- a/src/merge/resources/accounting/types/async_post_task_result.py +++ b/src/merge/resources/accounting/types/async_post_task_result.py @@ -9,7 +9,7 @@ class AsyncPostTaskResult(UncheckedBaseModel): status_code: typing.Optional[int] = None - response: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None + response: typing.Optional[typing.Dict[str, typing.Any]] = None if IS_PYDANTIC_V2: model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2 diff --git a/src/merge/resources/accounting/types/async_post_task_status_enum.py b/src/merge/resources/accounting/types/async_post_task_status_enum.py index e80df1b4..3b35e3c3 100644 --- a/src/merge/resources/accounting/types/async_post_task_status_enum.py +++ b/src/merge/resources/accounting/types/async_post_task_status_enum.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ....core import enum + T_Result = typing.TypeVar("T_Result") -class AsyncPostTaskStatusEnum(str, enum.Enum): +class AsyncPostTaskStatusEnum(enum.StrEnum): """ * `QUEUED` - QUEUED * `IN_PROGRESS` - IN_PROGRESS diff --git a/src/merge/resources/accounting/types/balance_sheet.py b/src/merge/resources/accounting/types/balance_sheet.py index f882760e..47d38202 100644 --- a/src/merge/resources/accounting/types/balance_sheet.py +++ b/src/merge/resources/accounting/types/balance_sheet.py @@ -383,7 +383,7 @@ class BalanceSheet(UncheckedBaseModel): Indicates whether or not this object has been deleted in the third party platform. Full coverage deletion detection is a premium add-on. Native deletion detection is offered for free with limited coverage. [Learn more](https://docs.merge.dev/integrations/hris/supported-features/). """ - field_mappings: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None + field_mappings: typing.Optional[typing.Dict[str, typing.Any]] = None remote_data: typing.Optional[typing.List[RemoteData]] = None if IS_PYDANTIC_V2: diff --git a/src/merge/resources/accounting/types/bank_feed_account.py b/src/merge/resources/accounting/types/bank_feed_account.py index 9e7c035c..b4c6ec68 100644 --- a/src/merge/resources/accounting/types/bank_feed_account.py +++ b/src/merge/resources/accounting/types/bank_feed_account.py @@ -411,7 +411,7 @@ class BankFeedAccount(UncheckedBaseModel): Indicates whether or not this object has been deleted in the third party platform. Full coverage deletion detection is a premium add-on. Native deletion detection is offered for free with limited coverage. [Learn more](https://docs.merge.dev/integrations/hris/supported-features/). """ - field_mappings: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None + field_mappings: typing.Optional[typing.Dict[str, typing.Any]] = None remote_data: typing.Optional[typing.List[RemoteData]] = None if IS_PYDANTIC_V2: diff --git a/src/merge/resources/accounting/types/bank_feed_account_account_type_enum.py b/src/merge/resources/accounting/types/bank_feed_account_account_type_enum.py index 4ec29afb..b9135603 100644 --- a/src/merge/resources/accounting/types/bank_feed_account_account_type_enum.py +++ b/src/merge/resources/accounting/types/bank_feed_account_account_type_enum.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ....core import enum + T_Result = typing.TypeVar("T_Result") -class BankFeedAccountAccountTypeEnum(str, enum.Enum): +class BankFeedAccountAccountTypeEnum(enum.StrEnum): """ * `BANK` - BANK * `CREDIT_CARD` - CREDIT_CARD diff --git a/src/merge/resources/accounting/types/bank_feed_account_request.py b/src/merge/resources/accounting/types/bank_feed_account_request.py index 3f298bcb..65562bde 100644 --- a/src/merge/resources/accounting/types/bank_feed_account_request.py +++ b/src/merge/resources/accounting/types/bank_feed_account_request.py @@ -389,8 +389,8 @@ class BankFeedAccountRequest(UncheckedBaseModel): * `CREDIT_CARD` - CREDIT_CARD """ - integration_params: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None - linked_account_params: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None + integration_params: typing.Optional[typing.Dict[str, typing.Any]] = None + linked_account_params: typing.Optional[typing.Dict[str, typing.Any]] = None if IS_PYDANTIC_V2: model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2 diff --git a/src/merge/resources/accounting/types/bank_feed_transaction_request_request.py b/src/merge/resources/accounting/types/bank_feed_transaction_request_request.py index f5f9e482..bb2d8775 100644 --- a/src/merge/resources/accounting/types/bank_feed_transaction_request_request.py +++ b/src/merge/resources/accounting/types/bank_feed_transaction_request_request.py @@ -68,8 +68,8 @@ class BankFeedTransactionRequestRequest(UncheckedBaseModel): The customer’s identifier for the transaction. """ - integration_params: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None - linked_account_params: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None + integration_params: typing.Optional[typing.Dict[str, typing.Any]] = None + linked_account_params: typing.Optional[typing.Dict[str, typing.Any]] = None if IS_PYDANTIC_V2: model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2 diff --git a/src/merge/resources/accounting/types/batch_object_status_enum.py b/src/merge/resources/accounting/types/batch_object_status_enum.py index 57b5ca85..82fa0c65 100644 --- a/src/merge/resources/accounting/types/batch_object_status_enum.py +++ b/src/merge/resources/accounting/types/batch_object_status_enum.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ....core import enum + T_Result = typing.TypeVar("T_Result") -class BatchObjectStatusEnum(str, enum.Enum): +class BatchObjectStatusEnum(enum.StrEnum): """ * `PENDING` - This object has not been processed yet * `SUCCESS` - This object was successfully POSTed diff --git a/src/merge/resources/accounting/types/batch_objects_response_status_enum.py b/src/merge/resources/accounting/types/batch_objects_response_status_enum.py index b6b2cdad..c208b4f4 100644 --- a/src/merge/resources/accounting/types/batch_objects_response_status_enum.py +++ b/src/merge/resources/accounting/types/batch_objects_response_status_enum.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ....core import enum + T_Result = typing.TypeVar("T_Result") -class BatchObjectsResponseStatusEnum(str, enum.Enum): +class BatchObjectsResponseStatusEnum(enum.StrEnum): """ * `ENQUEUED` - The request has been received and a task has been enqueued for processing * `IN_PROGRESS` - The enqueued task is being processed diff --git a/src/merge/resources/accounting/types/cash_flow_statement.py b/src/merge/resources/accounting/types/cash_flow_statement.py index ef460a0e..024b5bad 100644 --- a/src/merge/resources/accounting/types/cash_flow_statement.py +++ b/src/merge/resources/accounting/types/cash_flow_statement.py @@ -393,7 +393,7 @@ class CashFlowStatement(UncheckedBaseModel): Indicates whether or not this object has been deleted in the third party platform. Full coverage deletion detection is a premium add-on. Native deletion detection is offered for free with limited coverage. [Learn more](https://docs.merge.dev/integrations/hris/supported-features/). """ - field_mappings: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None + field_mappings: typing.Optional[typing.Dict[str, typing.Any]] = None remote_data: typing.Optional[typing.List[RemoteData]] = None if IS_PYDANTIC_V2: diff --git a/src/merge/resources/accounting/types/categories_enum.py b/src/merge/resources/accounting/types/categories_enum.py index da1e0dc0..b103c12e 100644 --- a/src/merge/resources/accounting/types/categories_enum.py +++ b/src/merge/resources/accounting/types/categories_enum.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ....core import enum + T_Result = typing.TypeVar("T_Result") -class CategoriesEnum(str, enum.Enum): +class CategoriesEnum(enum.StrEnum): """ * `hris` - hris * `ats` - ats diff --git a/src/merge/resources/accounting/types/category_enum.py b/src/merge/resources/accounting/types/category_enum.py index 1d7cd2c0..056087ae 100644 --- a/src/merge/resources/accounting/types/category_enum.py +++ b/src/merge/resources/accounting/types/category_enum.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ....core import enum + T_Result = typing.TypeVar("T_Result") -class CategoryEnum(str, enum.Enum): +class CategoryEnum(enum.StrEnum): """ * `hris` - hris * `ats` - ats diff --git a/src/merge/resources/accounting/types/category_type_enum.py b/src/merge/resources/accounting/types/category_type_enum.py index 3f03c333..9bab1b7f 100644 --- a/src/merge/resources/accounting/types/category_type_enum.py +++ b/src/merge/resources/accounting/types/category_type_enum.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ....core import enum + T_Result = typing.TypeVar("T_Result") -class CategoryTypeEnum(str, enum.Enum): +class CategoryTypeEnum(enum.StrEnum): """ * `CLASS` - CLASS * `DEPARTMENT` - DEPARTMENT diff --git a/src/merge/resources/accounting/types/classification_enum.py b/src/merge/resources/accounting/types/classification_enum.py index 3f2ed1f6..931300f5 100644 --- a/src/merge/resources/accounting/types/classification_enum.py +++ b/src/merge/resources/accounting/types/classification_enum.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ....core import enum + T_Result = typing.TypeVar("T_Result") -class ClassificationEnum(str, enum.Enum): +class ClassificationEnum(enum.StrEnum): """ * `ASSET` - ASSET * `EQUITY` - EQUITY diff --git a/src/merge/resources/accounting/types/company_info.py b/src/merge/resources/accounting/types/company_info.py index fea08c22..3ade2459 100644 --- a/src/merge/resources/accounting/types/company_info.py +++ b/src/merge/resources/accounting/types/company_info.py @@ -397,7 +397,7 @@ class CompanyInfo(UncheckedBaseModel): Indicates whether or not this object has been deleted in the third party platform. Full coverage deletion detection is a premium add-on. Native deletion detection is offered for free with limited coverage. [Learn more](https://docs.merge.dev/integrations/hris/supported-features/). """ - field_mappings: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None + field_mappings: typing.Optional[typing.Dict[str, typing.Any]] = None remote_data: typing.Optional[typing.List[RemoteData]] = None if IS_PYDANTIC_V2: diff --git a/src/merge/resources/accounting/types/completed_account_initial_screen_enum.py b/src/merge/resources/accounting/types/completed_account_initial_screen_enum.py index c112dfd1..960da271 100644 --- a/src/merge/resources/accounting/types/completed_account_initial_screen_enum.py +++ b/src/merge/resources/accounting/types/completed_account_initial_screen_enum.py @@ -3,3 +3,6 @@ import typing CompletedAccountInitialScreenEnum = typing.Literal["SELECTIVE_SYNC"] +""" +* `SELECTIVE_SYNC` - SELECTIVE_SYNC +""" diff --git a/src/merge/resources/accounting/types/component_type_enum.py b/src/merge/resources/accounting/types/component_type_enum.py index 41b616c0..839aae55 100644 --- a/src/merge/resources/accounting/types/component_type_enum.py +++ b/src/merge/resources/accounting/types/component_type_enum.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ....core import enum + T_Result = typing.TypeVar("T_Result") -class ComponentTypeEnum(str, enum.Enum): +class ComponentTypeEnum(enum.StrEnum): """ * `SALES` - SALES * `PURCHASE` - PURCHASE diff --git a/src/merge/resources/accounting/types/contact.py b/src/merge/resources/accounting/types/contact.py index da851755..0e2aba37 100644 --- a/src/merge/resources/accounting/types/contact.py +++ b/src/merge/resources/accounting/types/contact.py @@ -110,7 +110,7 @@ class Contact(UncheckedBaseModel): Indicates whether or not this object has been deleted in the third party platform. Full coverage deletion detection is a premium add-on. Native deletion detection is offered for free with limited coverage. [Learn more](https://docs.merge.dev/integrations/hris/supported-features/). """ - field_mappings: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None + field_mappings: typing.Optional[typing.Dict[str, typing.Any]] = None remote_data: typing.Optional[typing.List[RemoteData]] = None remote_fields: typing.Optional[typing.List[RemoteField]] = None diff --git a/src/merge/resources/accounting/types/contact_request.py b/src/merge/resources/accounting/types/contact_request.py index 979e04c7..57f75ec7 100644 --- a/src/merge/resources/accounting/types/contact_request.py +++ b/src/merge/resources/accounting/types/contact_request.py @@ -82,8 +82,8 @@ class ContactRequest(UncheckedBaseModel): `AccountingPhoneNumber` object for the given `Contacts` object. """ - integration_params: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None - linked_account_params: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None + integration_params: typing.Optional[typing.Dict[str, typing.Any]] = None + linked_account_params: typing.Optional[typing.Dict[str, typing.Any]] = None remote_fields: typing.Optional[typing.List[RemoteFieldRequest]] = None if IS_PYDANTIC_V2: diff --git a/src/merge/resources/accounting/types/country_enum.py b/src/merge/resources/accounting/types/country_enum.py index a631e320..f2dd1f87 100644 --- a/src/merge/resources/accounting/types/country_enum.py +++ b/src/merge/resources/accounting/types/country_enum.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ....core import enum + T_Result = typing.TypeVar("T_Result") -class CountryEnum(str, enum.Enum): +class CountryEnum(enum.StrEnum): """ * `AF` - Afghanistan * `AX` - Åland Islands diff --git a/src/merge/resources/accounting/types/credit_note.py b/src/merge/resources/accounting/types/credit_note.py index 6211e1f3..abb63101 100644 --- a/src/merge/resources/accounting/types/credit_note.py +++ b/src/merge/resources/accounting/types/credit_note.py @@ -451,7 +451,7 @@ class CreditNote(UncheckedBaseModel): Indicates whether or not this object has been deleted in the third party platform. Full coverage deletion detection is a premium add-on. Native deletion detection is offered for free with limited coverage. [Learn more](https://docs.merge.dev/integrations/hris/supported-features/). """ - field_mappings: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None + field_mappings: typing.Optional[typing.Dict[str, typing.Any]] = None remote_data: typing.Optional[typing.List[RemoteData]] = None if IS_PYDANTIC_V2: @@ -464,11 +464,31 @@ class Config: extra = pydantic.Extra.allow -from .credit_note_apply_line_for_credit_note import CreditNoteApplyLineForCreditNote # noqa: E402, F401, I001 -from .credit_note_apply_line_for_invoice import CreditNoteApplyLineForInvoice # noqa: E402, F401, I001 -from .invoice import Invoice # noqa: E402, F401, I001 -from .vendor_credit import VendorCredit # noqa: E402, F401, I001 -from .vendor_credit_apply_line_for_invoice import VendorCreditApplyLineForInvoice # noqa: E402, F401, I001 -from .vendor_credit_apply_line_for_vendor_credit import VendorCreditApplyLineForVendorCredit # noqa: E402, F401, I001 - -update_forward_refs(CreditNote) +from .credit_note_apply_line_for_credit_note import CreditNoteApplyLineForCreditNote # noqa: E402, I001 +from .credit_note_apply_line_for_credit_note_invoice import CreditNoteApplyLineForCreditNoteInvoice # noqa: E402, I001 +from .credit_note_apply_line_for_invoice import CreditNoteApplyLineForInvoice # noqa: E402, I001 +from .credit_note_apply_line_for_invoice_credit_note import CreditNoteApplyLineForInvoiceCreditNote # noqa: E402, I001 +from .invoice import Invoice # noqa: E402, I001 +from .invoice_applied_credit_notes_item import InvoiceAppliedCreditNotesItem # noqa: E402, I001 +from .invoice_applied_vendor_credits_item import InvoiceAppliedVendorCreditsItem # noqa: E402, I001 +from .vendor_credit import VendorCredit # noqa: E402, I001 +from .vendor_credit_apply_line_for_invoice import VendorCreditApplyLineForInvoice # noqa: E402, I001 +from .vendor_credit_apply_line_for_invoice_vendor_credit import VendorCreditApplyLineForInvoiceVendorCredit # noqa: E402, I001 +from .vendor_credit_apply_line_for_vendor_credit import VendorCreditApplyLineForVendorCredit # noqa: E402, I001 +from .vendor_credit_apply_line_for_vendor_credit_invoice import VendorCreditApplyLineForVendorCreditInvoice # noqa: E402, I001 + +update_forward_refs( + CreditNote, + CreditNoteApplyLineForCreditNote=CreditNoteApplyLineForCreditNote, + CreditNoteApplyLineForCreditNoteInvoice=CreditNoteApplyLineForCreditNoteInvoice, + CreditNoteApplyLineForInvoice=CreditNoteApplyLineForInvoice, + CreditNoteApplyLineForInvoiceCreditNote=CreditNoteApplyLineForInvoiceCreditNote, + Invoice=Invoice, + InvoiceAppliedCreditNotesItem=InvoiceAppliedCreditNotesItem, + InvoiceAppliedVendorCreditsItem=InvoiceAppliedVendorCreditsItem, + VendorCredit=VendorCredit, + VendorCreditApplyLineForInvoice=VendorCreditApplyLineForInvoice, + VendorCreditApplyLineForInvoiceVendorCredit=VendorCreditApplyLineForInvoiceVendorCredit, + VendorCreditApplyLineForVendorCredit=VendorCreditApplyLineForVendorCredit, + VendorCreditApplyLineForVendorCreditInvoice=VendorCreditApplyLineForVendorCreditInvoice, +) diff --git a/src/merge/resources/accounting/types/credit_note_apply_line_for_credit_note.py b/src/merge/resources/accounting/types/credit_note_apply_line_for_credit_note.py index 643aa3cd..9f4b0729 100644 --- a/src/merge/resources/accounting/types/credit_note_apply_line_for_credit_note.py +++ b/src/merge/resources/accounting/types/credit_note_apply_line_for_credit_note.py @@ -61,12 +61,31 @@ class Config: extra = pydantic.Extra.allow -from .credit_note import CreditNote # noqa: E402, F401, I001 -from .credit_note_apply_line_for_invoice import CreditNoteApplyLineForInvoice # noqa: E402, F401, I001 -from .invoice import Invoice # noqa: E402, F401, I001 -from .vendor_credit import VendorCredit # noqa: E402, F401, I001 -from .vendor_credit_apply_line_for_invoice import VendorCreditApplyLineForInvoice # noqa: E402, F401, I001 -from .vendor_credit_apply_line_for_vendor_credit import VendorCreditApplyLineForVendorCredit # noqa: E402, F401, I001 -from .credit_note_apply_line_for_credit_note_invoice import CreditNoteApplyLineForCreditNoteInvoice # noqa: E402, F401, I001 - -update_forward_refs(CreditNoteApplyLineForCreditNote) +from .credit_note import CreditNote # noqa: E402, I001 +from .credit_note_apply_line_for_credit_note_invoice import CreditNoteApplyLineForCreditNoteInvoice # noqa: E402, I001 +from .credit_note_apply_line_for_invoice import CreditNoteApplyLineForInvoice # noqa: E402, I001 +from .credit_note_apply_line_for_invoice_credit_note import CreditNoteApplyLineForInvoiceCreditNote # noqa: E402, I001 +from .invoice import Invoice # noqa: E402, I001 +from .invoice_applied_credit_notes_item import InvoiceAppliedCreditNotesItem # noqa: E402, I001 +from .invoice_applied_vendor_credits_item import InvoiceAppliedVendorCreditsItem # noqa: E402, I001 +from .vendor_credit import VendorCredit # noqa: E402, I001 +from .vendor_credit_apply_line_for_invoice import VendorCreditApplyLineForInvoice # noqa: E402, I001 +from .vendor_credit_apply_line_for_invoice_vendor_credit import VendorCreditApplyLineForInvoiceVendorCredit # noqa: E402, I001 +from .vendor_credit_apply_line_for_vendor_credit import VendorCreditApplyLineForVendorCredit # noqa: E402, I001 +from .vendor_credit_apply_line_for_vendor_credit_invoice import VendorCreditApplyLineForVendorCreditInvoice # noqa: E402, I001 + +update_forward_refs( + CreditNoteApplyLineForCreditNote, + CreditNote=CreditNote, + CreditNoteApplyLineForCreditNoteInvoice=CreditNoteApplyLineForCreditNoteInvoice, + CreditNoteApplyLineForInvoice=CreditNoteApplyLineForInvoice, + CreditNoteApplyLineForInvoiceCreditNote=CreditNoteApplyLineForInvoiceCreditNote, + Invoice=Invoice, + InvoiceAppliedCreditNotesItem=InvoiceAppliedCreditNotesItem, + InvoiceAppliedVendorCreditsItem=InvoiceAppliedVendorCreditsItem, + VendorCredit=VendorCredit, + VendorCreditApplyLineForInvoice=VendorCreditApplyLineForInvoice, + VendorCreditApplyLineForInvoiceVendorCredit=VendorCreditApplyLineForInvoiceVendorCredit, + VendorCreditApplyLineForVendorCredit=VendorCreditApplyLineForVendorCredit, + VendorCreditApplyLineForVendorCreditInvoice=VendorCreditApplyLineForVendorCreditInvoice, +) diff --git a/src/merge/resources/accounting/types/credit_note_apply_line_for_credit_note_request.py b/src/merge/resources/accounting/types/credit_note_apply_line_for_credit_note_request.py index 0256e246..c1265fb1 100644 --- a/src/merge/resources/accounting/types/credit_note_apply_line_for_credit_note_request.py +++ b/src/merge/resources/accounting/types/credit_note_apply_line_for_credit_note_request.py @@ -37,8 +37,8 @@ class CreditNoteApplyLineForCreditNoteRequest(UncheckedBaseModel): The amount of the Credit Note applied to the invoice. """ - integration_params: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None - linked_account_params: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None + integration_params: typing.Optional[typing.Dict[str, typing.Any]] = None + linked_account_params: typing.Optional[typing.Dict[str, typing.Any]] = None if IS_PYDANTIC_V2: model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2 @@ -50,12 +50,4 @@ class Config: extra = pydantic.Extra.allow -from .credit_note import CreditNote # noqa: E402, F401, I001 -from .credit_note_apply_line_for_credit_note import CreditNoteApplyLineForCreditNote # noqa: E402, F401, I001 -from .credit_note_apply_line_for_invoice import CreditNoteApplyLineForInvoice # noqa: E402, F401, I001 -from .invoice import Invoice # noqa: E402, F401, I001 -from .vendor_credit import VendorCredit # noqa: E402, F401, I001 -from .vendor_credit_apply_line_for_invoice import VendorCreditApplyLineForInvoice # noqa: E402, F401, I001 -from .vendor_credit_apply_line_for_vendor_credit import VendorCreditApplyLineForVendorCredit # noqa: E402, F401, I001 - update_forward_refs(CreditNoteApplyLineForCreditNoteRequest) diff --git a/src/merge/resources/accounting/types/credit_note_apply_line_for_invoice.py b/src/merge/resources/accounting/types/credit_note_apply_line_for_invoice.py index f56415f9..1cd025c5 100644 --- a/src/merge/resources/accounting/types/credit_note_apply_line_for_invoice.py +++ b/src/merge/resources/accounting/types/credit_note_apply_line_for_invoice.py @@ -61,12 +61,31 @@ class Config: extra = pydantic.Extra.allow -from .credit_note import CreditNote # noqa: E402, F401, I001 -from .credit_note_apply_line_for_credit_note import CreditNoteApplyLineForCreditNote # noqa: E402, F401, I001 -from .invoice import Invoice # noqa: E402, F401, I001 -from .vendor_credit import VendorCredit # noqa: E402, F401, I001 -from .vendor_credit_apply_line_for_invoice import VendorCreditApplyLineForInvoice # noqa: E402, F401, I001 -from .vendor_credit_apply_line_for_vendor_credit import VendorCreditApplyLineForVendorCredit # noqa: E402, F401, I001 -from .credit_note_apply_line_for_invoice_credit_note import CreditNoteApplyLineForInvoiceCreditNote # noqa: E402, F401, I001 - -update_forward_refs(CreditNoteApplyLineForInvoice) +from .credit_note import CreditNote # noqa: E402, I001 +from .credit_note_apply_line_for_credit_note import CreditNoteApplyLineForCreditNote # noqa: E402, I001 +from .credit_note_apply_line_for_credit_note_invoice import CreditNoteApplyLineForCreditNoteInvoice # noqa: E402, I001 +from .credit_note_apply_line_for_invoice_credit_note import CreditNoteApplyLineForInvoiceCreditNote # noqa: E402, I001 +from .invoice import Invoice # noqa: E402, I001 +from .invoice_applied_credit_notes_item import InvoiceAppliedCreditNotesItem # noqa: E402, I001 +from .invoice_applied_vendor_credits_item import InvoiceAppliedVendorCreditsItem # noqa: E402, I001 +from .vendor_credit import VendorCredit # noqa: E402, I001 +from .vendor_credit_apply_line_for_invoice import VendorCreditApplyLineForInvoice # noqa: E402, I001 +from .vendor_credit_apply_line_for_invoice_vendor_credit import VendorCreditApplyLineForInvoiceVendorCredit # noqa: E402, I001 +from .vendor_credit_apply_line_for_vendor_credit import VendorCreditApplyLineForVendorCredit # noqa: E402, I001 +from .vendor_credit_apply_line_for_vendor_credit_invoice import VendorCreditApplyLineForVendorCreditInvoice # noqa: E402, I001 + +update_forward_refs( + CreditNoteApplyLineForInvoice, + CreditNote=CreditNote, + CreditNoteApplyLineForCreditNote=CreditNoteApplyLineForCreditNote, + CreditNoteApplyLineForCreditNoteInvoice=CreditNoteApplyLineForCreditNoteInvoice, + CreditNoteApplyLineForInvoiceCreditNote=CreditNoteApplyLineForInvoiceCreditNote, + Invoice=Invoice, + InvoiceAppliedCreditNotesItem=InvoiceAppliedCreditNotesItem, + InvoiceAppliedVendorCreditsItem=InvoiceAppliedVendorCreditsItem, + VendorCredit=VendorCredit, + VendorCreditApplyLineForInvoice=VendorCreditApplyLineForInvoice, + VendorCreditApplyLineForInvoiceVendorCredit=VendorCreditApplyLineForInvoiceVendorCredit, + VendorCreditApplyLineForVendorCredit=VendorCreditApplyLineForVendorCredit, + VendorCreditApplyLineForVendorCreditInvoice=VendorCreditApplyLineForVendorCreditInvoice, +) diff --git a/src/merge/resources/accounting/types/credit_note_line_item_request.py b/src/merge/resources/accounting/types/credit_note_line_item_request.py index f6e5048b..60da22a5 100644 --- a/src/merge/resources/accounting/types/credit_note_line_item_request.py +++ b/src/merge/resources/accounting/types/credit_note_line_item_request.py @@ -88,8 +88,8 @@ class CreditNoteLineItemRequest(UncheckedBaseModel): """ project: typing.Optional[CreditNoteLineItemRequestProject] = None - integration_params: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None - linked_account_params: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None + integration_params: typing.Optional[typing.Dict[str, typing.Any]] = None + linked_account_params: typing.Optional[typing.Dict[str, typing.Any]] = None if IS_PYDANTIC_V2: model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2 diff --git a/src/merge/resources/accounting/types/credit_note_request.py b/src/merge/resources/accounting/types/credit_note_request.py index 48e28f06..6bbd27a7 100644 --- a/src/merge/resources/accounting/types/credit_note_request.py +++ b/src/merge/resources/accounting/types/credit_note_request.py @@ -419,8 +419,8 @@ class CreditNoteRequest(UncheckedBaseModel): A list of the CreditNote Applied to Lines common models related to a given Credit Note """ - integration_params: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None - linked_account_params: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None + integration_params: typing.Optional[typing.Dict[str, typing.Any]] = None + linked_account_params: typing.Optional[typing.Dict[str, typing.Any]] = None if IS_PYDANTIC_V2: model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2 @@ -432,12 +432,4 @@ class Config: extra = pydantic.Extra.allow -from .credit_note import CreditNote # noqa: E402, F401, I001 -from .credit_note_apply_line_for_credit_note import CreditNoteApplyLineForCreditNote # noqa: E402, F401, I001 -from .credit_note_apply_line_for_invoice import CreditNoteApplyLineForInvoice # noqa: E402, F401, I001 -from .invoice import Invoice # noqa: E402, F401, I001 -from .vendor_credit import VendorCredit # noqa: E402, F401, I001 -from .vendor_credit_apply_line_for_invoice import VendorCreditApplyLineForInvoice # noqa: E402, F401, I001 -from .vendor_credit_apply_line_for_vendor_credit import VendorCreditApplyLineForVendorCredit # noqa: E402, F401, I001 - update_forward_refs(CreditNoteRequest) diff --git a/src/merge/resources/accounting/types/credit_note_response.py b/src/merge/resources/accounting/types/credit_note_response.py index 587bb615..7ba5e9e1 100644 --- a/src/merge/resources/accounting/types/credit_note_response.py +++ b/src/merge/resources/accounting/types/credit_note_response.py @@ -28,12 +28,33 @@ class Config: extra = pydantic.Extra.allow -from .credit_note import CreditNote # noqa: E402, F401, I001 -from .credit_note_apply_line_for_credit_note import CreditNoteApplyLineForCreditNote # noqa: E402, F401, I001 -from .credit_note_apply_line_for_invoice import CreditNoteApplyLineForInvoice # noqa: E402, F401, I001 -from .invoice import Invoice # noqa: E402, F401, I001 -from .vendor_credit import VendorCredit # noqa: E402, F401, I001 -from .vendor_credit_apply_line_for_invoice import VendorCreditApplyLineForInvoice # noqa: E402, F401, I001 -from .vendor_credit_apply_line_for_vendor_credit import VendorCreditApplyLineForVendorCredit # noqa: E402, F401, I001 - -update_forward_refs(CreditNoteResponse) +from .credit_note import CreditNote # noqa: E402, I001 +from .credit_note_apply_line_for_credit_note import CreditNoteApplyLineForCreditNote # noqa: E402, I001 +from .credit_note_apply_line_for_credit_note_invoice import CreditNoteApplyLineForCreditNoteInvoice # noqa: E402, I001 +from .credit_note_apply_line_for_invoice import CreditNoteApplyLineForInvoice # noqa: E402, I001 +from .credit_note_apply_line_for_invoice_credit_note import CreditNoteApplyLineForInvoiceCreditNote # noqa: E402, I001 +from .invoice import Invoice # noqa: E402, I001 +from .invoice_applied_credit_notes_item import InvoiceAppliedCreditNotesItem # noqa: E402, I001 +from .invoice_applied_vendor_credits_item import InvoiceAppliedVendorCreditsItem # noqa: E402, I001 +from .vendor_credit import VendorCredit # noqa: E402, I001 +from .vendor_credit_apply_line_for_invoice import VendorCreditApplyLineForInvoice # noqa: E402, I001 +from .vendor_credit_apply_line_for_invoice_vendor_credit import VendorCreditApplyLineForInvoiceVendorCredit # noqa: E402, I001 +from .vendor_credit_apply_line_for_vendor_credit import VendorCreditApplyLineForVendorCredit # noqa: E402, I001 +from .vendor_credit_apply_line_for_vendor_credit_invoice import VendorCreditApplyLineForVendorCreditInvoice # noqa: E402, I001 + +update_forward_refs( + CreditNoteResponse, + CreditNote=CreditNote, + CreditNoteApplyLineForCreditNote=CreditNoteApplyLineForCreditNote, + CreditNoteApplyLineForCreditNoteInvoice=CreditNoteApplyLineForCreditNoteInvoice, + CreditNoteApplyLineForInvoice=CreditNoteApplyLineForInvoice, + CreditNoteApplyLineForInvoiceCreditNote=CreditNoteApplyLineForInvoiceCreditNote, + Invoice=Invoice, + InvoiceAppliedCreditNotesItem=InvoiceAppliedCreditNotesItem, + InvoiceAppliedVendorCreditsItem=InvoiceAppliedVendorCreditsItem, + VendorCredit=VendorCredit, + VendorCreditApplyLineForInvoice=VendorCreditApplyLineForInvoice, + VendorCreditApplyLineForInvoiceVendorCredit=VendorCreditApplyLineForInvoiceVendorCredit, + VendorCreditApplyLineForVendorCredit=VendorCreditApplyLineForVendorCredit, + VendorCreditApplyLineForVendorCreditInvoice=VendorCreditApplyLineForVendorCreditInvoice, +) diff --git a/src/merge/resources/accounting/types/credit_note_status_enum.py b/src/merge/resources/accounting/types/credit_note_status_enum.py index d0c47958..0cb41c13 100644 --- a/src/merge/resources/accounting/types/credit_note_status_enum.py +++ b/src/merge/resources/accounting/types/credit_note_status_enum.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ....core import enum + T_Result = typing.TypeVar("T_Result") -class CreditNoteStatusEnum(str, enum.Enum): +class CreditNoteStatusEnum(enum.StrEnum): """ * `SUBMITTED` - SUBMITTED * `AUTHORIZED` - AUTHORIZED diff --git a/src/merge/resources/accounting/types/credit_or_debit_enum.py b/src/merge/resources/accounting/types/credit_or_debit_enum.py index defe692e..a6b7c0e0 100644 --- a/src/merge/resources/accounting/types/credit_or_debit_enum.py +++ b/src/merge/resources/accounting/types/credit_or_debit_enum.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ....core import enum + T_Result = typing.TypeVar("T_Result") -class CreditOrDebitEnum(str, enum.Enum): +class CreditOrDebitEnum(enum.StrEnum): """ * `CREDIT` - CREDIT * `DEBIT` - DEBIT diff --git a/src/merge/resources/accounting/types/data_passthrough_request.py b/src/merge/resources/accounting/types/data_passthrough_request.py index 67f3359e..b18d99ae 100644 --- a/src/merge/resources/accounting/types/data_passthrough_request.py +++ b/src/merge/resources/accounting/types/data_passthrough_request.py @@ -41,7 +41,7 @@ class DataPassthroughRequest(UncheckedBaseModel): Pass an array of `MultipartFormField` objects in here instead of using the `data` param if `request_format` is set to `MULTIPART`. """ - headers: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = pydantic.Field(default=None) + headers: typing.Optional[typing.Dict[str, typing.Any]] = pydantic.Field(default=None) """ The headers to use for the request (Merge will handle the account's authorization headers). `Content-Type` header is required for passthrough. Choose content type corresponding to expected format of receiving server. """ diff --git a/src/merge/resources/accounting/types/employee.py b/src/merge/resources/accounting/types/employee.py index aeab0e44..590c2292 100644 --- a/src/merge/resources/accounting/types/employee.py +++ b/src/merge/resources/accounting/types/employee.py @@ -87,7 +87,7 @@ class Employee(UncheckedBaseModel): Indicates whether or not this object has been deleted in the third party platform. Full coverage deletion detection is a premium add-on. Native deletion detection is offered for free with limited coverage. [Learn more](https://docs.merge.dev/integrations/hris/supported-features/). """ - field_mappings: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None + field_mappings: typing.Optional[typing.Dict[str, typing.Any]] = None remote_data: typing.Optional[typing.List[RemoteData]] = None if IS_PYDANTIC_V2: diff --git a/src/merge/resources/accounting/types/enabled_actions_enum.py b/src/merge/resources/accounting/types/enabled_actions_enum.py index 29cf9839..604265f8 100644 --- a/src/merge/resources/accounting/types/enabled_actions_enum.py +++ b/src/merge/resources/accounting/types/enabled_actions_enum.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ....core import enum + T_Result = typing.TypeVar("T_Result") -class EnabledActionsEnum(str, enum.Enum): +class EnabledActionsEnum(enum.StrEnum): """ * `READ` - READ * `WRITE` - WRITE diff --git a/src/merge/resources/accounting/types/encoding_enum.py b/src/merge/resources/accounting/types/encoding_enum.py index 7454647e..aa2aa971 100644 --- a/src/merge/resources/accounting/types/encoding_enum.py +++ b/src/merge/resources/accounting/types/encoding_enum.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ....core import enum + T_Result = typing.TypeVar("T_Result") -class EncodingEnum(str, enum.Enum): +class EncodingEnum(enum.StrEnum): """ * `RAW` - RAW * `BASE64` - BASE64 diff --git a/src/merge/resources/accounting/types/event_type_enum.py b/src/merge/resources/accounting/types/event_type_enum.py index 537cea3f..1c16772d 100644 --- a/src/merge/resources/accounting/types/event_type_enum.py +++ b/src/merge/resources/accounting/types/event_type_enum.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ....core import enum + T_Result = typing.TypeVar("T_Result") -class EventTypeEnum(str, enum.Enum): +class EventTypeEnum(enum.StrEnum): """ * `CREATED_REMOTE_PRODUCTION_API_KEY` - CREATED_REMOTE_PRODUCTION_API_KEY * `DELETED_REMOTE_PRODUCTION_API_KEY` - DELETED_REMOTE_PRODUCTION_API_KEY diff --git a/src/merge/resources/accounting/types/expense.py b/src/merge/resources/accounting/types/expense.py index b75f9af3..2b59f820 100644 --- a/src/merge/resources/accounting/types/expense.py +++ b/src/merge/resources/accounting/types/expense.py @@ -430,7 +430,7 @@ class Expense(UncheckedBaseModel): The accounting period that the Expense was generated in. """ - field_mappings: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None + field_mappings: typing.Optional[typing.Dict[str, typing.Any]] = None remote_data: typing.Optional[typing.List[RemoteData]] = None remote_fields: typing.Optional[typing.List[RemoteField]] = None diff --git a/src/merge/resources/accounting/types/expense_line_request.py b/src/merge/resources/accounting/types/expense_line_request.py index 1a60035c..713284ce 100644 --- a/src/merge/resources/accounting/types/expense_line_request.py +++ b/src/merge/resources/accounting/types/expense_line_request.py @@ -407,8 +407,8 @@ class ExpenseLineRequest(UncheckedBaseModel): Unit price of the item for the expense line. """ - integration_params: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None - linked_account_params: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None + integration_params: typing.Optional[typing.Dict[str, typing.Any]] = None + linked_account_params: typing.Optional[typing.Dict[str, typing.Any]] = None remote_fields: typing.Optional[typing.List[RemoteFieldRequest]] = None if IS_PYDANTIC_V2: diff --git a/src/merge/resources/accounting/types/expense_report.py b/src/merge/resources/accounting/types/expense_report.py index 707c4104..02c370b2 100644 --- a/src/merge/resources/accounting/types/expense_report.py +++ b/src/merge/resources/accounting/types/expense_report.py @@ -416,7 +416,7 @@ class ExpenseReport(UncheckedBaseModel): Indicates whether or not this object has been deleted in the third party platform. Full coverage deletion detection is a premium add-on. Native deletion detection is offered for free with limited coverage. [Learn more](https://docs.merge.dev/integrations/hris/supported-features/). """ - field_mappings: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None + field_mappings: typing.Optional[typing.Dict[str, typing.Any]] = None remote_data: typing.Optional[typing.List[RemoteData]] = None remote_fields: typing.Optional[typing.List[RemoteField]] = None diff --git a/src/merge/resources/accounting/types/expense_report_line_request.py b/src/merge/resources/accounting/types/expense_report_line_request.py index 15817037..68e5c004 100644 --- a/src/merge/resources/accounting/types/expense_report_line_request.py +++ b/src/merge/resources/accounting/types/expense_report_line_request.py @@ -413,8 +413,8 @@ class ExpenseReportLineRequest(UncheckedBaseModel): """ tax_rate: typing.Optional[ExpenseReportLineRequestTaxRate] = None - integration_params: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None - linked_account_params: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None + integration_params: typing.Optional[typing.Dict[str, typing.Any]] = None + linked_account_params: typing.Optional[typing.Dict[str, typing.Any]] = None remote_fields: typing.Optional[typing.List[RemoteFieldRequest]] = None if IS_PYDANTIC_V2: diff --git a/src/merge/resources/accounting/types/expense_report_request.py b/src/merge/resources/accounting/types/expense_report_request.py index b3a7c343..b9812d9c 100644 --- a/src/merge/resources/accounting/types/expense_report_request.py +++ b/src/merge/resources/accounting/types/expense_report_request.py @@ -392,8 +392,8 @@ class ExpenseReportRequest(UncheckedBaseModel): The related tracking categories associated with the expense report """ - integration_params: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None - linked_account_params: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None + integration_params: typing.Optional[typing.Dict[str, typing.Any]] = None + linked_account_params: typing.Optional[typing.Dict[str, typing.Any]] = None remote_fields: typing.Optional[typing.List[RemoteFieldRequest]] = None if IS_PYDANTIC_V2: diff --git a/src/merge/resources/accounting/types/expense_report_status_enum.py b/src/merge/resources/accounting/types/expense_report_status_enum.py index 79e72fd5..b6668b0d 100644 --- a/src/merge/resources/accounting/types/expense_report_status_enum.py +++ b/src/merge/resources/accounting/types/expense_report_status_enum.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ....core import enum + T_Result = typing.TypeVar("T_Result") -class ExpenseReportStatusEnum(str, enum.Enum): +class ExpenseReportStatusEnum(enum.StrEnum): """ * `DRAFT` - DRAFT * `SUBMITTED` - SUBMITTED diff --git a/src/merge/resources/accounting/types/expense_request.py b/src/merge/resources/accounting/types/expense_request.py index f6942f83..6892458c 100644 --- a/src/merge/resources/accounting/types/expense_request.py +++ b/src/merge/resources/accounting/types/expense_request.py @@ -403,8 +403,8 @@ class ExpenseRequest(UncheckedBaseModel): The accounting period that the Expense was generated in. """ - integration_params: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None - linked_account_params: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None + integration_params: typing.Optional[typing.Dict[str, typing.Any]] = None + linked_account_params: typing.Optional[typing.Dict[str, typing.Any]] = None remote_fields: typing.Optional[typing.List[RemoteFieldRequest]] = None if IS_PYDANTIC_V2: diff --git a/src/merge/resources/accounting/types/external_target_field_api_response.py b/src/merge/resources/accounting/types/external_target_field_api_response.py index ae4cf405..f5a8d41c 100644 --- a/src/merge/resources/accounting/types/external_target_field_api_response.py +++ b/src/merge/resources/accounting/types/external_target_field_api_response.py @@ -3,74 +3,152 @@ import typing import pydantic +import typing_extensions from ....core.pydantic_utilities import IS_PYDANTIC_V2 +from ....core.serialization import FieldMetadata from ....core.unchecked_base_model import UncheckedBaseModel from .external_target_field_api import ExternalTargetFieldApi class ExternalTargetFieldApiResponse(UncheckedBaseModel): - account: typing.Optional[typing.List[ExternalTargetFieldApi]] = pydantic.Field(alias="Account", default=None) - accounting_attachment: typing.Optional[typing.List[ExternalTargetFieldApi]] = pydantic.Field( - alias="AccountingAttachment", default=None - ) - balance_sheet: typing.Optional[typing.List[ExternalTargetFieldApi]] = pydantic.Field( - alias="BalanceSheet", default=None - ) - cash_flow_statement: typing.Optional[typing.List[ExternalTargetFieldApi]] = pydantic.Field( - alias="CashFlowStatement", default=None - ) - company_info: typing.Optional[typing.List[ExternalTargetFieldApi]] = pydantic.Field( - alias="CompanyInfo", default=None - ) - contact: typing.Optional[typing.List[ExternalTargetFieldApi]] = pydantic.Field(alias="Contact", default=None) - income_statement: typing.Optional[typing.List[ExternalTargetFieldApi]] = pydantic.Field( - alias="IncomeStatement", default=None - ) - credit_note: typing.Optional[typing.List[ExternalTargetFieldApi]] = pydantic.Field(alias="CreditNote", default=None) - item: typing.Optional[typing.List[ExternalTargetFieldApi]] = pydantic.Field(alias="Item", default=None) - purchase_order: typing.Optional[typing.List[ExternalTargetFieldApi]] = pydantic.Field( - alias="PurchaseOrder", default=None - ) - sales_order: typing.Optional[typing.List[ExternalTargetFieldApi]] = pydantic.Field(alias="SalesOrder", default=None) - item_fulfillment: typing.Optional[typing.List[ExternalTargetFieldApi]] = pydantic.Field( - alias="ItemFulfillment", default=None - ) - expense_report: typing.Optional[typing.List[ExternalTargetFieldApi]] = pydantic.Field( - alias="ExpenseReport", default=None - ) - tracking_category: typing.Optional[typing.List[ExternalTargetFieldApi]] = pydantic.Field( - alias="TrackingCategory", default=None - ) - journal_entry: typing.Optional[typing.List[ExternalTargetFieldApi]] = pydantic.Field( - alias="JournalEntry", default=None - ) - tax_rate: typing.Optional[typing.List[ExternalTargetFieldApi]] = pydantic.Field(alias="TaxRate", default=None) - invoice: typing.Optional[typing.List[ExternalTargetFieldApi]] = pydantic.Field(alias="Invoice", default=None) - payment: typing.Optional[typing.List[ExternalTargetFieldApi]] = pydantic.Field(alias="Payment", default=None) - expense: typing.Optional[typing.List[ExternalTargetFieldApi]] = pydantic.Field(alias="Expense", default=None) - vendor_credit: typing.Optional[typing.List[ExternalTargetFieldApi]] = pydantic.Field( - alias="VendorCredit", default=None - ) - transaction: typing.Optional[typing.List[ExternalTargetFieldApi]] = pydantic.Field( - alias="Transaction", default=None - ) - accounting_period: typing.Optional[typing.List[ExternalTargetFieldApi]] = pydantic.Field( - alias="AccountingPeriod", default=None - ) - general_ledger_transaction: typing.Optional[typing.List[ExternalTargetFieldApi]] = pydantic.Field( - alias="GeneralLedgerTransaction", default=None - ) - bank_feed_account: typing.Optional[typing.List[ExternalTargetFieldApi]] = pydantic.Field( - alias="BankFeedAccount", default=None - ) - employee: typing.Optional[typing.List[ExternalTargetFieldApi]] = pydantic.Field(alias="Employee", default=None) - payment_method: typing.Optional[typing.List[ExternalTargetFieldApi]] = pydantic.Field( - alias="PaymentMethod", default=None - ) - project: typing.Optional[typing.List[ExternalTargetFieldApi]] = pydantic.Field(alias="Project", default=None) - payment_term: typing.Optional[typing.List[ExternalTargetFieldApi]] = pydantic.Field( - alias="PaymentTerm", default=None - ) + account: typing_extensions.Annotated[ + typing.Optional[typing.List[ExternalTargetFieldApi]], + FieldMetadata(alias="Account"), + pydantic.Field(alias="Account"), + ] = None + accounting_attachment: typing_extensions.Annotated[ + typing.Optional[typing.List[ExternalTargetFieldApi]], + FieldMetadata(alias="AccountingAttachment"), + pydantic.Field(alias="AccountingAttachment"), + ] = None + balance_sheet: typing_extensions.Annotated[ + typing.Optional[typing.List[ExternalTargetFieldApi]], + FieldMetadata(alias="BalanceSheet"), + pydantic.Field(alias="BalanceSheet"), + ] = None + cash_flow_statement: typing_extensions.Annotated[ + typing.Optional[typing.List[ExternalTargetFieldApi]], + FieldMetadata(alias="CashFlowStatement"), + pydantic.Field(alias="CashFlowStatement"), + ] = None + company_info: typing_extensions.Annotated[ + typing.Optional[typing.List[ExternalTargetFieldApi]], + FieldMetadata(alias="CompanyInfo"), + pydantic.Field(alias="CompanyInfo"), + ] = None + contact: typing_extensions.Annotated[ + typing.Optional[typing.List[ExternalTargetFieldApi]], + FieldMetadata(alias="Contact"), + pydantic.Field(alias="Contact"), + ] = None + income_statement: typing_extensions.Annotated[ + typing.Optional[typing.List[ExternalTargetFieldApi]], + FieldMetadata(alias="IncomeStatement"), + pydantic.Field(alias="IncomeStatement"), + ] = None + credit_note: typing_extensions.Annotated[ + typing.Optional[typing.List[ExternalTargetFieldApi]], + FieldMetadata(alias="CreditNote"), + pydantic.Field(alias="CreditNote"), + ] = None + item: typing_extensions.Annotated[ + typing.Optional[typing.List[ExternalTargetFieldApi]], FieldMetadata(alias="Item"), pydantic.Field(alias="Item") + ] = None + purchase_order: typing_extensions.Annotated[ + typing.Optional[typing.List[ExternalTargetFieldApi]], + FieldMetadata(alias="PurchaseOrder"), + pydantic.Field(alias="PurchaseOrder"), + ] = None + sales_order: typing_extensions.Annotated[ + typing.Optional[typing.List[ExternalTargetFieldApi]], + FieldMetadata(alias="SalesOrder"), + pydantic.Field(alias="SalesOrder"), + ] = None + item_fulfillment: typing_extensions.Annotated[ + typing.Optional[typing.List[ExternalTargetFieldApi]], + FieldMetadata(alias="ItemFulfillment"), + pydantic.Field(alias="ItemFulfillment"), + ] = None + expense_report: typing_extensions.Annotated[ + typing.Optional[typing.List[ExternalTargetFieldApi]], + FieldMetadata(alias="ExpenseReport"), + pydantic.Field(alias="ExpenseReport"), + ] = None + tracking_category: typing_extensions.Annotated[ + typing.Optional[typing.List[ExternalTargetFieldApi]], + FieldMetadata(alias="TrackingCategory"), + pydantic.Field(alias="TrackingCategory"), + ] = None + journal_entry: typing_extensions.Annotated[ + typing.Optional[typing.List[ExternalTargetFieldApi]], + FieldMetadata(alias="JournalEntry"), + pydantic.Field(alias="JournalEntry"), + ] = None + tax_rate: typing_extensions.Annotated[ + typing.Optional[typing.List[ExternalTargetFieldApi]], + FieldMetadata(alias="TaxRate"), + pydantic.Field(alias="TaxRate"), + ] = None + invoice: typing_extensions.Annotated[ + typing.Optional[typing.List[ExternalTargetFieldApi]], + FieldMetadata(alias="Invoice"), + pydantic.Field(alias="Invoice"), + ] = None + payment: typing_extensions.Annotated[ + typing.Optional[typing.List[ExternalTargetFieldApi]], + FieldMetadata(alias="Payment"), + pydantic.Field(alias="Payment"), + ] = None + expense: typing_extensions.Annotated[ + typing.Optional[typing.List[ExternalTargetFieldApi]], + FieldMetadata(alias="Expense"), + pydantic.Field(alias="Expense"), + ] = None + vendor_credit: typing_extensions.Annotated[ + typing.Optional[typing.List[ExternalTargetFieldApi]], + FieldMetadata(alias="VendorCredit"), + pydantic.Field(alias="VendorCredit"), + ] = None + transaction: typing_extensions.Annotated[ + typing.Optional[typing.List[ExternalTargetFieldApi]], + FieldMetadata(alias="Transaction"), + pydantic.Field(alias="Transaction"), + ] = None + accounting_period: typing_extensions.Annotated[ + typing.Optional[typing.List[ExternalTargetFieldApi]], + FieldMetadata(alias="AccountingPeriod"), + pydantic.Field(alias="AccountingPeriod"), + ] = None + general_ledger_transaction: typing_extensions.Annotated[ + typing.Optional[typing.List[ExternalTargetFieldApi]], + FieldMetadata(alias="GeneralLedgerTransaction"), + pydantic.Field(alias="GeneralLedgerTransaction"), + ] = None + bank_feed_account: typing_extensions.Annotated[ + typing.Optional[typing.List[ExternalTargetFieldApi]], + FieldMetadata(alias="BankFeedAccount"), + pydantic.Field(alias="BankFeedAccount"), + ] = None + employee: typing_extensions.Annotated[ + typing.Optional[typing.List[ExternalTargetFieldApi]], + FieldMetadata(alias="Employee"), + pydantic.Field(alias="Employee"), + ] = None + payment_method: typing_extensions.Annotated[ + typing.Optional[typing.List[ExternalTargetFieldApi]], + FieldMetadata(alias="PaymentMethod"), + pydantic.Field(alias="PaymentMethod"), + ] = None + project: typing_extensions.Annotated[ + typing.Optional[typing.List[ExternalTargetFieldApi]], + FieldMetadata(alias="Project"), + pydantic.Field(alias="Project"), + ] = None + payment_term: typing_extensions.Annotated[ + typing.Optional[typing.List[ExternalTargetFieldApi]], + FieldMetadata(alias="PaymentTerm"), + pydantic.Field(alias="PaymentTerm"), + ] = None if IS_PYDANTIC_V2: model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2 diff --git a/src/merge/resources/accounting/types/feed_status_enum.py b/src/merge/resources/accounting/types/feed_status_enum.py index 91fdfd18..4a787342 100644 --- a/src/merge/resources/accounting/types/feed_status_enum.py +++ b/src/merge/resources/accounting/types/feed_status_enum.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ....core import enum + T_Result = typing.TypeVar("T_Result") -class FeedStatusEnum(str, enum.Enum): +class FeedStatusEnum(enum.StrEnum): """ * `ACTIVE` - ACTIVE * `INACTIVE` - INACTIVE diff --git a/src/merge/resources/accounting/types/field_format_enum.py b/src/merge/resources/accounting/types/field_format_enum.py index 2f6eda2f..26052239 100644 --- a/src/merge/resources/accounting/types/field_format_enum.py +++ b/src/merge/resources/accounting/types/field_format_enum.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ....core import enum + T_Result = typing.TypeVar("T_Result") -class FieldFormatEnum(str, enum.Enum): +class FieldFormatEnum(enum.StrEnum): """ * `string` - string * `number` - number diff --git a/src/merge/resources/accounting/types/field_mapping_api_instance_remote_field.py b/src/merge/resources/accounting/types/field_mapping_api_instance_remote_field.py index 578a2b10..ccd1f990 100644 --- a/src/merge/resources/accounting/types/field_mapping_api_instance_remote_field.py +++ b/src/merge/resources/accounting/types/field_mapping_api_instance_remote_field.py @@ -3,7 +3,9 @@ import typing import pydantic +import typing_extensions from ....core.pydantic_utilities import IS_PYDANTIC_V2 +from ....core.serialization import FieldMetadata from ....core.unchecked_base_model import UncheckedBaseModel from .field_mapping_api_instance_remote_field_remote_endpoint_info import ( FieldMappingApiInstanceRemoteFieldRemoteEndpointInfo, @@ -12,9 +14,9 @@ class FieldMappingApiInstanceRemoteField(UncheckedBaseModel): remote_key_name: typing.Optional[str] = None - schema_: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = pydantic.Field( - alias="schema", default=None - ) + schema_: typing_extensions.Annotated[ + typing.Optional[typing.Dict[str, typing.Any]], FieldMetadata(alias="schema"), pydantic.Field(alias="schema") + ] = None remote_endpoint_info: FieldMappingApiInstanceRemoteFieldRemoteEndpointInfo if IS_PYDANTIC_V2: diff --git a/src/merge/resources/accounting/types/field_mapping_api_instance_response.py b/src/merge/resources/accounting/types/field_mapping_api_instance_response.py index dea44749..c607f3c0 100644 --- a/src/merge/resources/accounting/types/field_mapping_api_instance_response.py +++ b/src/merge/resources/accounting/types/field_mapping_api_instance_response.py @@ -3,78 +3,152 @@ import typing import pydantic +import typing_extensions from ....core.pydantic_utilities import IS_PYDANTIC_V2 +from ....core.serialization import FieldMetadata from ....core.unchecked_base_model import UncheckedBaseModel from .field_mapping_api_instance import FieldMappingApiInstance class FieldMappingApiInstanceResponse(UncheckedBaseModel): - account: typing.Optional[typing.List[FieldMappingApiInstance]] = pydantic.Field(alias="Account", default=None) - accounting_attachment: typing.Optional[typing.List[FieldMappingApiInstance]] = pydantic.Field( - alias="AccountingAttachment", default=None - ) - balance_sheet: typing.Optional[typing.List[FieldMappingApiInstance]] = pydantic.Field( - alias="BalanceSheet", default=None - ) - cash_flow_statement: typing.Optional[typing.List[FieldMappingApiInstance]] = pydantic.Field( - alias="CashFlowStatement", default=None - ) - company_info: typing.Optional[typing.List[FieldMappingApiInstance]] = pydantic.Field( - alias="CompanyInfo", default=None - ) - contact: typing.Optional[typing.List[FieldMappingApiInstance]] = pydantic.Field(alias="Contact", default=None) - income_statement: typing.Optional[typing.List[FieldMappingApiInstance]] = pydantic.Field( - alias="IncomeStatement", default=None - ) - credit_note: typing.Optional[typing.List[FieldMappingApiInstance]] = pydantic.Field( - alias="CreditNote", default=None - ) - item: typing.Optional[typing.List[FieldMappingApiInstance]] = pydantic.Field(alias="Item", default=None) - purchase_order: typing.Optional[typing.List[FieldMappingApiInstance]] = pydantic.Field( - alias="PurchaseOrder", default=None - ) - sales_order: typing.Optional[typing.List[FieldMappingApiInstance]] = pydantic.Field( - alias="SalesOrder", default=None - ) - item_fulfillment: typing.Optional[typing.List[FieldMappingApiInstance]] = pydantic.Field( - alias="ItemFulfillment", default=None - ) - expense_report: typing.Optional[typing.List[FieldMappingApiInstance]] = pydantic.Field( - alias="ExpenseReport", default=None - ) - tracking_category: typing.Optional[typing.List[FieldMappingApiInstance]] = pydantic.Field( - alias="TrackingCategory", default=None - ) - journal_entry: typing.Optional[typing.List[FieldMappingApiInstance]] = pydantic.Field( - alias="JournalEntry", default=None - ) - tax_rate: typing.Optional[typing.List[FieldMappingApiInstance]] = pydantic.Field(alias="TaxRate", default=None) - invoice: typing.Optional[typing.List[FieldMappingApiInstance]] = pydantic.Field(alias="Invoice", default=None) - payment: typing.Optional[typing.List[FieldMappingApiInstance]] = pydantic.Field(alias="Payment", default=None) - expense: typing.Optional[typing.List[FieldMappingApiInstance]] = pydantic.Field(alias="Expense", default=None) - vendor_credit: typing.Optional[typing.List[FieldMappingApiInstance]] = pydantic.Field( - alias="VendorCredit", default=None - ) - transaction: typing.Optional[typing.List[FieldMappingApiInstance]] = pydantic.Field( - alias="Transaction", default=None - ) - accounting_period: typing.Optional[typing.List[FieldMappingApiInstance]] = pydantic.Field( - alias="AccountingPeriod", default=None - ) - general_ledger_transaction: typing.Optional[typing.List[FieldMappingApiInstance]] = pydantic.Field( - alias="GeneralLedgerTransaction", default=None - ) - bank_feed_account: typing.Optional[typing.List[FieldMappingApiInstance]] = pydantic.Field( - alias="BankFeedAccount", default=None - ) - employee: typing.Optional[typing.List[FieldMappingApiInstance]] = pydantic.Field(alias="Employee", default=None) - payment_method: typing.Optional[typing.List[FieldMappingApiInstance]] = pydantic.Field( - alias="PaymentMethod", default=None - ) - project: typing.Optional[typing.List[FieldMappingApiInstance]] = pydantic.Field(alias="Project", default=None) - payment_term: typing.Optional[typing.List[FieldMappingApiInstance]] = pydantic.Field( - alias="PaymentTerm", default=None - ) + account: typing_extensions.Annotated[ + typing.Optional[typing.List[FieldMappingApiInstance]], + FieldMetadata(alias="Account"), + pydantic.Field(alias="Account"), + ] = None + accounting_attachment: typing_extensions.Annotated[ + typing.Optional[typing.List[FieldMappingApiInstance]], + FieldMetadata(alias="AccountingAttachment"), + pydantic.Field(alias="AccountingAttachment"), + ] = None + balance_sheet: typing_extensions.Annotated[ + typing.Optional[typing.List[FieldMappingApiInstance]], + FieldMetadata(alias="BalanceSheet"), + pydantic.Field(alias="BalanceSheet"), + ] = None + cash_flow_statement: typing_extensions.Annotated[ + typing.Optional[typing.List[FieldMappingApiInstance]], + FieldMetadata(alias="CashFlowStatement"), + pydantic.Field(alias="CashFlowStatement"), + ] = None + company_info: typing_extensions.Annotated[ + typing.Optional[typing.List[FieldMappingApiInstance]], + FieldMetadata(alias="CompanyInfo"), + pydantic.Field(alias="CompanyInfo"), + ] = None + contact: typing_extensions.Annotated[ + typing.Optional[typing.List[FieldMappingApiInstance]], + FieldMetadata(alias="Contact"), + pydantic.Field(alias="Contact"), + ] = None + income_statement: typing_extensions.Annotated[ + typing.Optional[typing.List[FieldMappingApiInstance]], + FieldMetadata(alias="IncomeStatement"), + pydantic.Field(alias="IncomeStatement"), + ] = None + credit_note: typing_extensions.Annotated[ + typing.Optional[typing.List[FieldMappingApiInstance]], + FieldMetadata(alias="CreditNote"), + pydantic.Field(alias="CreditNote"), + ] = None + item: typing_extensions.Annotated[ + typing.Optional[typing.List[FieldMappingApiInstance]], FieldMetadata(alias="Item"), pydantic.Field(alias="Item") + ] = None + purchase_order: typing_extensions.Annotated[ + typing.Optional[typing.List[FieldMappingApiInstance]], + FieldMetadata(alias="PurchaseOrder"), + pydantic.Field(alias="PurchaseOrder"), + ] = None + sales_order: typing_extensions.Annotated[ + typing.Optional[typing.List[FieldMappingApiInstance]], + FieldMetadata(alias="SalesOrder"), + pydantic.Field(alias="SalesOrder"), + ] = None + item_fulfillment: typing_extensions.Annotated[ + typing.Optional[typing.List[FieldMappingApiInstance]], + FieldMetadata(alias="ItemFulfillment"), + pydantic.Field(alias="ItemFulfillment"), + ] = None + expense_report: typing_extensions.Annotated[ + typing.Optional[typing.List[FieldMappingApiInstance]], + FieldMetadata(alias="ExpenseReport"), + pydantic.Field(alias="ExpenseReport"), + ] = None + tracking_category: typing_extensions.Annotated[ + typing.Optional[typing.List[FieldMappingApiInstance]], + FieldMetadata(alias="TrackingCategory"), + pydantic.Field(alias="TrackingCategory"), + ] = None + journal_entry: typing_extensions.Annotated[ + typing.Optional[typing.List[FieldMappingApiInstance]], + FieldMetadata(alias="JournalEntry"), + pydantic.Field(alias="JournalEntry"), + ] = None + tax_rate: typing_extensions.Annotated[ + typing.Optional[typing.List[FieldMappingApiInstance]], + FieldMetadata(alias="TaxRate"), + pydantic.Field(alias="TaxRate"), + ] = None + invoice: typing_extensions.Annotated[ + typing.Optional[typing.List[FieldMappingApiInstance]], + FieldMetadata(alias="Invoice"), + pydantic.Field(alias="Invoice"), + ] = None + payment: typing_extensions.Annotated[ + typing.Optional[typing.List[FieldMappingApiInstance]], + FieldMetadata(alias="Payment"), + pydantic.Field(alias="Payment"), + ] = None + expense: typing_extensions.Annotated[ + typing.Optional[typing.List[FieldMappingApiInstance]], + FieldMetadata(alias="Expense"), + pydantic.Field(alias="Expense"), + ] = None + vendor_credit: typing_extensions.Annotated[ + typing.Optional[typing.List[FieldMappingApiInstance]], + FieldMetadata(alias="VendorCredit"), + pydantic.Field(alias="VendorCredit"), + ] = None + transaction: typing_extensions.Annotated[ + typing.Optional[typing.List[FieldMappingApiInstance]], + FieldMetadata(alias="Transaction"), + pydantic.Field(alias="Transaction"), + ] = None + accounting_period: typing_extensions.Annotated[ + typing.Optional[typing.List[FieldMappingApiInstance]], + FieldMetadata(alias="AccountingPeriod"), + pydantic.Field(alias="AccountingPeriod"), + ] = None + general_ledger_transaction: typing_extensions.Annotated[ + typing.Optional[typing.List[FieldMappingApiInstance]], + FieldMetadata(alias="GeneralLedgerTransaction"), + pydantic.Field(alias="GeneralLedgerTransaction"), + ] = None + bank_feed_account: typing_extensions.Annotated[ + typing.Optional[typing.List[FieldMappingApiInstance]], + FieldMetadata(alias="BankFeedAccount"), + pydantic.Field(alias="BankFeedAccount"), + ] = None + employee: typing_extensions.Annotated[ + typing.Optional[typing.List[FieldMappingApiInstance]], + FieldMetadata(alias="Employee"), + pydantic.Field(alias="Employee"), + ] = None + payment_method: typing_extensions.Annotated[ + typing.Optional[typing.List[FieldMappingApiInstance]], + FieldMetadata(alias="PaymentMethod"), + pydantic.Field(alias="PaymentMethod"), + ] = None + project: typing_extensions.Annotated[ + typing.Optional[typing.List[FieldMappingApiInstance]], + FieldMetadata(alias="Project"), + pydantic.Field(alias="Project"), + ] = None + payment_term: typing_extensions.Annotated[ + typing.Optional[typing.List[FieldMappingApiInstance]], + FieldMetadata(alias="PaymentTerm"), + pydantic.Field(alias="PaymentTerm"), + ] = None if IS_PYDANTIC_V2: model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2 diff --git a/src/merge/resources/accounting/types/field_permission_deserializer.py b/src/merge/resources/accounting/types/field_permission_deserializer.py index 1d71ae04..407ed547 100644 --- a/src/merge/resources/accounting/types/field_permission_deserializer.py +++ b/src/merge/resources/accounting/types/field_permission_deserializer.py @@ -8,8 +8,8 @@ class FieldPermissionDeserializer(UncheckedBaseModel): - enabled_fields: typing.Optional[typing.List[typing.Optional[typing.Any]]] = None - disabled_fields: typing.Optional[typing.List[typing.Optional[typing.Any]]] = None + enabled_fields: typing.Optional[typing.List[typing.Any]] = None + disabled_fields: typing.Optional[typing.List[typing.Any]] = None if IS_PYDANTIC_V2: model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2 diff --git a/src/merge/resources/accounting/types/field_permission_deserializer_request.py b/src/merge/resources/accounting/types/field_permission_deserializer_request.py index a4113b46..6680c7d2 100644 --- a/src/merge/resources/accounting/types/field_permission_deserializer_request.py +++ b/src/merge/resources/accounting/types/field_permission_deserializer_request.py @@ -8,8 +8,8 @@ class FieldPermissionDeserializerRequest(UncheckedBaseModel): - enabled_fields: typing.Optional[typing.List[typing.Optional[typing.Any]]] = None - disabled_fields: typing.Optional[typing.List[typing.Optional[typing.Any]]] = None + enabled_fields: typing.Optional[typing.List[typing.Any]] = None + disabled_fields: typing.Optional[typing.List[typing.Any]] = None if IS_PYDANTIC_V2: model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2 diff --git a/src/merge/resources/accounting/types/field_type_enum.py b/src/merge/resources/accounting/types/field_type_enum.py index b99c1309..d3635f4b 100644 --- a/src/merge/resources/accounting/types/field_type_enum.py +++ b/src/merge/resources/accounting/types/field_type_enum.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ....core import enum + T_Result = typing.TypeVar("T_Result") -class FieldTypeEnum(str, enum.Enum): +class FieldTypeEnum(enum.StrEnum): """ * `string` - string * `number` - number diff --git a/src/merge/resources/accounting/types/general_ledger_transaction.py b/src/merge/resources/accounting/types/general_ledger_transaction.py index b2c874fb..81c2c5b8 100644 --- a/src/merge/resources/accounting/types/general_ledger_transaction.py +++ b/src/merge/resources/accounting/types/general_ledger_transaction.py @@ -106,7 +106,7 @@ class GeneralLedgerTransaction(UncheckedBaseModel): Indicates whether or not this object has been deleted in the third party platform. Full coverage deletion detection is a premium add-on. Native deletion detection is offered for free with limited coverage. [Learn more](https://docs.merge.dev/integrations/hris/supported-features/). """ - field_mappings: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None + field_mappings: typing.Optional[typing.Dict[str, typing.Any]] = None remote_data: typing.Optional[typing.List[RemoteData]] = None if IS_PYDANTIC_V2: diff --git a/src/merge/resources/accounting/types/general_ledger_transaction_line.py b/src/merge/resources/accounting/types/general_ledger_transaction_line.py index 41f26593..c5a80beb 100644 --- a/src/merge/resources/accounting/types/general_ledger_transaction_line.py +++ b/src/merge/resources/accounting/types/general_ledger_transaction_line.py @@ -699,7 +699,7 @@ class GeneralLedgerTransactionLine(UncheckedBaseModel): Indicates whether or not this object has been deleted in the third party platform. Full coverage deletion detection is a premium add-on. Native deletion detection is offered for free with limited coverage. [Learn more](https://docs.merge.dev/integrations/hris/supported-features/). """ - field_mappings: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None + field_mappings: typing.Optional[typing.Dict[str, typing.Any]] = None if IS_PYDANTIC_V2: model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2 diff --git a/src/merge/resources/accounting/types/income_statement.py b/src/merge/resources/accounting/types/income_statement.py index 39feb450..4852b7b8 100644 --- a/src/merge/resources/accounting/types/income_statement.py +++ b/src/merge/resources/accounting/types/income_statement.py @@ -394,7 +394,7 @@ class IncomeStatement(UncheckedBaseModel): Indicates whether or not this object has been deleted in the third party platform. Full coverage deletion detection is a premium add-on. Native deletion detection is offered for free with limited coverage. [Learn more](https://docs.merge.dev/integrations/hris/supported-features/). """ - field_mappings: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None + field_mappings: typing.Optional[typing.Dict[str, typing.Any]] = None remote_data: typing.Optional[typing.List[RemoteData]] = None if IS_PYDANTIC_V2: diff --git a/src/merge/resources/accounting/types/invoice.py b/src/merge/resources/accounting/types/invoice.py index 2b060f8f..c402f3a3 100644 --- a/src/merge/resources/accounting/types/invoice.py +++ b/src/merge/resources/accounting/types/invoice.py @@ -515,7 +515,7 @@ class Invoice(UncheckedBaseModel): Indicates whether or not this object has been deleted in the third party platform. Full coverage deletion detection is a premium add-on. Native deletion detection is offered for free with limited coverage. [Learn more](https://docs.merge.dev/integrations/hris/supported-features/). """ - field_mappings: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None + field_mappings: typing.Optional[typing.Dict[str, typing.Any]] = None remote_data: typing.Optional[typing.List[RemoteData]] = None remote_fields: typing.Optional[typing.List[RemoteField]] = None @@ -529,13 +529,31 @@ class Config: extra = pydantic.Extra.allow -from .credit_note import CreditNote # noqa: E402, F401, I001 -from .credit_note_apply_line_for_credit_note import CreditNoteApplyLineForCreditNote # noqa: E402, F401, I001 -from .credit_note_apply_line_for_invoice import CreditNoteApplyLineForInvoice # noqa: E402, F401, I001 -from .vendor_credit import VendorCredit # noqa: E402, F401, I001 -from .vendor_credit_apply_line_for_invoice import VendorCreditApplyLineForInvoice # noqa: E402, F401, I001 -from .vendor_credit_apply_line_for_vendor_credit import VendorCreditApplyLineForVendorCredit # noqa: E402, F401, I001 -from .invoice_applied_credit_notes_item import InvoiceAppliedCreditNotesItem # noqa: E402, F401, I001 -from .invoice_applied_vendor_credits_item import InvoiceAppliedVendorCreditsItem # noqa: E402, F401, I001 - -update_forward_refs(Invoice) +from .credit_note import CreditNote # noqa: E402, I001 +from .credit_note_apply_line_for_credit_note import CreditNoteApplyLineForCreditNote # noqa: E402, I001 +from .credit_note_apply_line_for_credit_note_invoice import CreditNoteApplyLineForCreditNoteInvoice # noqa: E402, I001 +from .credit_note_apply_line_for_invoice import CreditNoteApplyLineForInvoice # noqa: E402, I001 +from .credit_note_apply_line_for_invoice_credit_note import CreditNoteApplyLineForInvoiceCreditNote # noqa: E402, I001 +from .invoice_applied_credit_notes_item import InvoiceAppliedCreditNotesItem # noqa: E402, I001 +from .invoice_applied_vendor_credits_item import InvoiceAppliedVendorCreditsItem # noqa: E402, I001 +from .vendor_credit import VendorCredit # noqa: E402, I001 +from .vendor_credit_apply_line_for_invoice import VendorCreditApplyLineForInvoice # noqa: E402, I001 +from .vendor_credit_apply_line_for_invoice_vendor_credit import VendorCreditApplyLineForInvoiceVendorCredit # noqa: E402, I001 +from .vendor_credit_apply_line_for_vendor_credit import VendorCreditApplyLineForVendorCredit # noqa: E402, I001 +from .vendor_credit_apply_line_for_vendor_credit_invoice import VendorCreditApplyLineForVendorCreditInvoice # noqa: E402, I001 + +update_forward_refs( + Invoice, + CreditNote=CreditNote, + CreditNoteApplyLineForCreditNote=CreditNoteApplyLineForCreditNote, + CreditNoteApplyLineForCreditNoteInvoice=CreditNoteApplyLineForCreditNoteInvoice, + CreditNoteApplyLineForInvoice=CreditNoteApplyLineForInvoice, + CreditNoteApplyLineForInvoiceCreditNote=CreditNoteApplyLineForInvoiceCreditNote, + InvoiceAppliedCreditNotesItem=InvoiceAppliedCreditNotesItem, + InvoiceAppliedVendorCreditsItem=InvoiceAppliedVendorCreditsItem, + VendorCredit=VendorCredit, + VendorCreditApplyLineForInvoice=VendorCreditApplyLineForInvoice, + VendorCreditApplyLineForInvoiceVendorCredit=VendorCreditApplyLineForInvoiceVendorCredit, + VendorCreditApplyLineForVendorCredit=VendorCreditApplyLineForVendorCredit, + VendorCreditApplyLineForVendorCreditInvoice=VendorCreditApplyLineForVendorCreditInvoice, +) diff --git a/src/merge/resources/accounting/types/invoice_line_item.py b/src/merge/resources/accounting/types/invoice_line_item.py index 69b62b87..2198a7b6 100644 --- a/src/merge/resources/accounting/types/invoice_line_item.py +++ b/src/merge/resources/accounting/types/invoice_line_item.py @@ -421,7 +421,7 @@ class InvoiceLineItem(UncheckedBaseModel): Indicates if the line item can be charged to the client/customer. """ - field_mappings: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None + field_mappings: typing.Optional[typing.Dict[str, typing.Any]] = None remote_fields: typing.Optional[typing.List[RemoteField]] = None if IS_PYDANTIC_V2: diff --git a/src/merge/resources/accounting/types/invoice_line_item_request.py b/src/merge/resources/accounting/types/invoice_line_item_request.py index a8468931..c1eb4d1c 100644 --- a/src/merge/resources/accounting/types/invoice_line_item_request.py +++ b/src/merge/resources/accounting/types/invoice_line_item_request.py @@ -404,8 +404,8 @@ class InvoiceLineItemRequest(UncheckedBaseModel): Indicates if the line item can be charged to the client/customer. """ - integration_params: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None - linked_account_params: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None + integration_params: typing.Optional[typing.Dict[str, typing.Any]] = None + linked_account_params: typing.Optional[typing.Dict[str, typing.Any]] = None remote_fields: typing.Optional[typing.List[RemoteFieldRequest]] = None if IS_PYDANTIC_V2: diff --git a/src/merge/resources/accounting/types/invoice_request.py b/src/merge/resources/accounting/types/invoice_request.py index 62b7425c..683ed069 100644 --- a/src/merge/resources/accounting/types/invoice_request.py +++ b/src/merge/resources/accounting/types/invoice_request.py @@ -459,8 +459,8 @@ class InvoiceRequest(UncheckedBaseModel): line_items: typing.Optional[typing.List[InvoiceRequestLineItemsItem]] = None purchase_orders: typing.Optional[typing.List[typing.Optional[InvoiceRequestPurchaseOrdersItem]]] = None - integration_params: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None - linked_account_params: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None + integration_params: typing.Optional[typing.Dict[str, typing.Any]] = None + linked_account_params: typing.Optional[typing.Dict[str, typing.Any]] = None remote_fields: typing.Optional[typing.List[RemoteFieldRequest]] = None if IS_PYDANTIC_V2: diff --git a/src/merge/resources/accounting/types/invoice_response.py b/src/merge/resources/accounting/types/invoice_response.py index ee6e266e..1bfa7c43 100644 --- a/src/merge/resources/accounting/types/invoice_response.py +++ b/src/merge/resources/accounting/types/invoice_response.py @@ -28,12 +28,33 @@ class Config: extra = pydantic.Extra.allow -from .credit_note import CreditNote # noqa: E402, F401, I001 -from .credit_note_apply_line_for_credit_note import CreditNoteApplyLineForCreditNote # noqa: E402, F401, I001 -from .credit_note_apply_line_for_invoice import CreditNoteApplyLineForInvoice # noqa: E402, F401, I001 -from .invoice import Invoice # noqa: E402, F401, I001 -from .vendor_credit import VendorCredit # noqa: E402, F401, I001 -from .vendor_credit_apply_line_for_invoice import VendorCreditApplyLineForInvoice # noqa: E402, F401, I001 -from .vendor_credit_apply_line_for_vendor_credit import VendorCreditApplyLineForVendorCredit # noqa: E402, F401, I001 - -update_forward_refs(InvoiceResponse) +from .credit_note import CreditNote # noqa: E402, I001 +from .credit_note_apply_line_for_credit_note import CreditNoteApplyLineForCreditNote # noqa: E402, I001 +from .credit_note_apply_line_for_credit_note_invoice import CreditNoteApplyLineForCreditNoteInvoice # noqa: E402, I001 +from .credit_note_apply_line_for_invoice import CreditNoteApplyLineForInvoice # noqa: E402, I001 +from .credit_note_apply_line_for_invoice_credit_note import CreditNoteApplyLineForInvoiceCreditNote # noqa: E402, I001 +from .invoice import Invoice # noqa: E402, I001 +from .invoice_applied_credit_notes_item import InvoiceAppliedCreditNotesItem # noqa: E402, I001 +from .invoice_applied_vendor_credits_item import InvoiceAppliedVendorCreditsItem # noqa: E402, I001 +from .vendor_credit import VendorCredit # noqa: E402, I001 +from .vendor_credit_apply_line_for_invoice import VendorCreditApplyLineForInvoice # noqa: E402, I001 +from .vendor_credit_apply_line_for_invoice_vendor_credit import VendorCreditApplyLineForInvoiceVendorCredit # noqa: E402, I001 +from .vendor_credit_apply_line_for_vendor_credit import VendorCreditApplyLineForVendorCredit # noqa: E402, I001 +from .vendor_credit_apply_line_for_vendor_credit_invoice import VendorCreditApplyLineForVendorCreditInvoice # noqa: E402, I001 + +update_forward_refs( + InvoiceResponse, + CreditNote=CreditNote, + CreditNoteApplyLineForCreditNote=CreditNoteApplyLineForCreditNote, + CreditNoteApplyLineForCreditNoteInvoice=CreditNoteApplyLineForCreditNoteInvoice, + CreditNoteApplyLineForInvoice=CreditNoteApplyLineForInvoice, + CreditNoteApplyLineForInvoiceCreditNote=CreditNoteApplyLineForInvoiceCreditNote, + Invoice=Invoice, + InvoiceAppliedCreditNotesItem=InvoiceAppliedCreditNotesItem, + InvoiceAppliedVendorCreditsItem=InvoiceAppliedVendorCreditsItem, + VendorCredit=VendorCredit, + VendorCreditApplyLineForInvoice=VendorCreditApplyLineForInvoice, + VendorCreditApplyLineForInvoiceVendorCredit=VendorCreditApplyLineForInvoiceVendorCredit, + VendorCreditApplyLineForVendorCredit=VendorCreditApplyLineForVendorCredit, + VendorCreditApplyLineForVendorCreditInvoice=VendorCreditApplyLineForVendorCreditInvoice, +) diff --git a/src/merge/resources/accounting/types/invoice_status_enum.py b/src/merge/resources/accounting/types/invoice_status_enum.py index ff3bde31..1e34b6a6 100644 --- a/src/merge/resources/accounting/types/invoice_status_enum.py +++ b/src/merge/resources/accounting/types/invoice_status_enum.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ....core import enum + T_Result = typing.TypeVar("T_Result") -class InvoiceStatusEnum(str, enum.Enum): +class InvoiceStatusEnum(enum.StrEnum): """ * `PAID` - PAID * `DRAFT` - DRAFT diff --git a/src/merge/resources/accounting/types/invoice_type_enum.py b/src/merge/resources/accounting/types/invoice_type_enum.py index 85fcb469..6ab893f7 100644 --- a/src/merge/resources/accounting/types/invoice_type_enum.py +++ b/src/merge/resources/accounting/types/invoice_type_enum.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ....core import enum + T_Result = typing.TypeVar("T_Result") -class InvoiceTypeEnum(str, enum.Enum): +class InvoiceTypeEnum(enum.StrEnum): """ * `ACCOUNTS_RECEIVABLE` - ACCOUNTS_RECEIVABLE * `ACCOUNTS_PAYABLE` - ACCOUNTS_PAYABLE diff --git a/src/merge/resources/accounting/types/issue.py b/src/merge/resources/accounting/types/issue.py index df31be95..5d37505d 100644 --- a/src/merge/resources/accounting/types/issue.py +++ b/src/merge/resources/accounting/types/issue.py @@ -20,7 +20,7 @@ class Issue(UncheckedBaseModel): """ error_description: str - end_user: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None + end_user: typing.Optional[typing.Dict[str, typing.Any]] = None first_incident_time: typing.Optional[dt.datetime] = None last_incident_time: typing.Optional[dt.datetime] = None is_muted: typing.Optional[bool] = None diff --git a/src/merge/resources/accounting/types/issue_status_enum.py b/src/merge/resources/accounting/types/issue_status_enum.py index 57eb9618..30d126bb 100644 --- a/src/merge/resources/accounting/types/issue_status_enum.py +++ b/src/merge/resources/accounting/types/issue_status_enum.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ....core import enum + T_Result = typing.TypeVar("T_Result") -class IssueStatusEnum(str, enum.Enum): +class IssueStatusEnum(enum.StrEnum): """ * `ONGOING` - ONGOING * `RESOLVED` - RESOLVED diff --git a/src/merge/resources/accounting/types/item.py b/src/merge/resources/accounting/types/item.py index d894ccd5..aa6157e2 100644 --- a/src/merge/resources/accounting/types/item.py +++ b/src/merge/resources/accounting/types/item.py @@ -115,7 +115,7 @@ class Item(UncheckedBaseModel): Indicates whether or not this object has been deleted in the third party platform. Full coverage deletion detection is a premium add-on. Native deletion detection is offered for free with limited coverage. [Learn more](https://docs.merge.dev/integrations/hris/supported-features/). """ - field_mappings: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None + field_mappings: typing.Optional[typing.Dict[str, typing.Any]] = None remote_data: typing.Optional[typing.List[RemoteData]] = None if IS_PYDANTIC_V2: diff --git a/src/merge/resources/accounting/types/item_format_enum.py b/src/merge/resources/accounting/types/item_format_enum.py index 6fef7236..6e1e81ce 100644 --- a/src/merge/resources/accounting/types/item_format_enum.py +++ b/src/merge/resources/accounting/types/item_format_enum.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ....core import enum + T_Result = typing.TypeVar("T_Result") -class ItemFormatEnum(str, enum.Enum): +class ItemFormatEnum(enum.StrEnum): """ * `string` - uuid * `number` - url diff --git a/src/merge/resources/accounting/types/item_fulfillment.py b/src/merge/resources/accounting/types/item_fulfillment.py index b61371b8..fce325c0 100644 --- a/src/merge/resources/accounting/types/item_fulfillment.py +++ b/src/merge/resources/accounting/types/item_fulfillment.py @@ -97,7 +97,7 @@ class ItemFulfillment(UncheckedBaseModel): Indicates whether or not this object has been deleted in the third party platform. Full coverage deletion detection is a premium add-on. Native deletion detection is offered for free with limited coverage. [Learn more](https://docs.merge.dev/integrations/hris/supported-features/). """ - field_mappings: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None + field_mappings: typing.Optional[typing.Dict[str, typing.Any]] = None remote_data: typing.Optional[typing.List[RemoteData]] = None remote_fields: typing.Optional[typing.List[RemoteField]] = None diff --git a/src/merge/resources/accounting/types/item_fulfillment_line_request.py b/src/merge/resources/accounting/types/item_fulfillment_line_request.py index a87d536f..48b89c2a 100644 --- a/src/merge/resources/accounting/types/item_fulfillment_line_request.py +++ b/src/merge/resources/accounting/types/item_fulfillment_line_request.py @@ -51,8 +51,8 @@ class ItemFulfillmentLineRequest(UncheckedBaseModel): When the third party's item fulfillment line item was updated. """ - integration_params: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None - linked_account_params: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None + integration_params: typing.Optional[typing.Dict[str, typing.Any]] = None + linked_account_params: typing.Optional[typing.Dict[str, typing.Any]] = None remote_fields: typing.Optional[typing.List[RemoteFieldRequest]] = None if IS_PYDANTIC_V2: diff --git a/src/merge/resources/accounting/types/item_fulfillment_request_request.py b/src/merge/resources/accounting/types/item_fulfillment_request_request.py index 099083f3..62124e26 100644 --- a/src/merge/resources/accounting/types/item_fulfillment_request_request.py +++ b/src/merge/resources/accounting/types/item_fulfillment_request_request.py @@ -60,8 +60,8 @@ class ItemFulfillmentRequestRequest(UncheckedBaseModel): """ lines: typing.Optional[typing.List[ItemFulfillmentRequestRequestLinesItem]] = None - integration_params: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None - linked_account_params: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None + integration_params: typing.Optional[typing.Dict[str, typing.Any]] = None + linked_account_params: typing.Optional[typing.Dict[str, typing.Any]] = None remote_fields: typing.Optional[typing.List[RemoteFieldRequest]] = None if IS_PYDANTIC_V2: diff --git a/src/merge/resources/accounting/types/item_fulfillment_status_enum.py b/src/merge/resources/accounting/types/item_fulfillment_status_enum.py index 8e62c629..6ef28e34 100644 --- a/src/merge/resources/accounting/types/item_fulfillment_status_enum.py +++ b/src/merge/resources/accounting/types/item_fulfillment_status_enum.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ....core import enum + T_Result = typing.TypeVar("T_Result") -class ItemFulfillmentStatusEnum(str, enum.Enum): +class ItemFulfillmentStatusEnum(enum.StrEnum): """ * `DRAFT` - DRAFT * `IN_PROGRESS` - IN_PROGRESS diff --git a/src/merge/resources/accounting/types/item_request_request.py b/src/merge/resources/accounting/types/item_request_request.py index c6080a03..67bca3f9 100644 --- a/src/merge/resources/accounting/types/item_request_request.py +++ b/src/merge/resources/accounting/types/item_request_request.py @@ -82,8 +82,8 @@ class ItemRequestRequest(UncheckedBaseModel): The default sales tax rate for this item. """ - integration_params: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None - linked_account_params: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None + integration_params: typing.Optional[typing.Dict[str, typing.Any]] = None + linked_account_params: typing.Optional[typing.Dict[str, typing.Any]] = None if IS_PYDANTIC_V2: model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2 diff --git a/src/merge/resources/accounting/types/item_type_enum.py b/src/merge/resources/accounting/types/item_type_enum.py index afcc4dd6..f92370d0 100644 --- a/src/merge/resources/accounting/types/item_type_enum.py +++ b/src/merge/resources/accounting/types/item_type_enum.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ....core import enum + T_Result = typing.TypeVar("T_Result") -class ItemTypeEnum(str, enum.Enum): +class ItemTypeEnum(enum.StrEnum): """ * `string` - string * `number` - number diff --git a/src/merge/resources/accounting/types/journal_entry.py b/src/merge/resources/accounting/types/journal_entry.py index 547cb158..647cf0b3 100644 --- a/src/merge/resources/accounting/types/journal_entry.py +++ b/src/merge/resources/accounting/types/journal_entry.py @@ -437,7 +437,7 @@ class JournalEntry(UncheckedBaseModel): When the third party's journal entry was updated. """ - field_mappings: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None + field_mappings: typing.Optional[typing.Dict[str, typing.Any]] = None remote_data: typing.Optional[typing.List[RemoteData]] = None remote_fields: typing.Optional[typing.List[RemoteField]] = None diff --git a/src/merge/resources/accounting/types/journal_entry_request.py b/src/merge/resources/accounting/types/journal_entry_request.py index d00339aa..523a9677 100644 --- a/src/merge/resources/accounting/types/journal_entry_request.py +++ b/src/merge/resources/accounting/types/journal_entry_request.py @@ -384,8 +384,8 @@ class JournalEntryRequest(UncheckedBaseModel): * `POSTED` - POSTED """ - integration_params: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None - linked_account_params: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None + integration_params: typing.Optional[typing.Dict[str, typing.Any]] = None + linked_account_params: typing.Optional[typing.Dict[str, typing.Any]] = None remote_fields: typing.Optional[typing.List[RemoteFieldRequest]] = None if IS_PYDANTIC_V2: diff --git a/src/merge/resources/accounting/types/journal_line_request.py b/src/merge/resources/accounting/types/journal_line_request.py index 05533fa0..20ed4157 100644 --- a/src/merge/resources/accounting/types/journal_line_request.py +++ b/src/merge/resources/accounting/types/journal_line_request.py @@ -377,8 +377,8 @@ class JournalLineRequest(UncheckedBaseModel): The journal line item's exchange rate. """ - integration_params: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None - linked_account_params: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None + integration_params: typing.Optional[typing.Dict[str, typing.Any]] = None + linked_account_params: typing.Optional[typing.Dict[str, typing.Any]] = None remote_fields: typing.Optional[typing.List[RemoteFieldRequest]] = None if IS_PYDANTIC_V2: diff --git a/src/merge/resources/accounting/types/language_enum.py b/src/merge/resources/accounting/types/language_enum.py index 44b693f2..3ff1e9da 100644 --- a/src/merge/resources/accounting/types/language_enum.py +++ b/src/merge/resources/accounting/types/language_enum.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ....core import enum + T_Result = typing.TypeVar("T_Result") -class LanguageEnum(str, enum.Enum): +class LanguageEnum(enum.StrEnum): """ * `en` - en * `de` - de diff --git a/src/merge/resources/accounting/types/last_sync_result_enum.py b/src/merge/resources/accounting/types/last_sync_result_enum.py index ec777ee6..f82505a1 100644 --- a/src/merge/resources/accounting/types/last_sync_result_enum.py +++ b/src/merge/resources/accounting/types/last_sync_result_enum.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ....core import enum + T_Result = typing.TypeVar("T_Result") -class LastSyncResultEnum(str, enum.Enum): +class LastSyncResultEnum(enum.StrEnum): """ * `SYNCING` - SYNCING * `DONE` - DONE diff --git a/src/merge/resources/accounting/types/meta_response.py b/src/merge/resources/accounting/types/meta_response.py index d538cf73..52cc10da 100644 --- a/src/merge/resources/accounting/types/meta_response.py +++ b/src/merge/resources/accounting/types/meta_response.py @@ -9,7 +9,7 @@ class MetaResponse(UncheckedBaseModel): - request_schema: typing.Dict[str, typing.Optional[typing.Any]] + request_schema: typing.Dict[str, typing.Any] status: typing.Optional[LinkedAccountStatus] = None has_conditional_params: bool has_required_linked_account_params: bool diff --git a/src/merge/resources/accounting/types/method_enum.py b/src/merge/resources/accounting/types/method_enum.py index 57bcde10..4c8376dd 100644 --- a/src/merge/resources/accounting/types/method_enum.py +++ b/src/merge/resources/accounting/types/method_enum.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ....core import enum + T_Result = typing.TypeVar("T_Result") -class MethodEnum(str, enum.Enum): +class MethodEnum(enum.StrEnum): """ * `GET` - GET * `OPTIONS` - OPTIONS diff --git a/src/merge/resources/accounting/types/method_type_enum.py b/src/merge/resources/accounting/types/method_type_enum.py index d358511b..6c0e4e60 100644 --- a/src/merge/resources/accounting/types/method_type_enum.py +++ b/src/merge/resources/accounting/types/method_type_enum.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ....core import enum + T_Result = typing.TypeVar("T_Result") -class MethodTypeEnum(str, enum.Enum): +class MethodTypeEnum(enum.StrEnum): """ * `CREDIT_CARD` - CREDIT_CARD * `DEBIT_CARD` - DEBIT_CARD diff --git a/src/merge/resources/accounting/types/paginated_credit_note_list.py b/src/merge/resources/accounting/types/paginated_credit_note_list.py index 4cdc16aa..769ceff0 100644 --- a/src/merge/resources/accounting/types/paginated_credit_note_list.py +++ b/src/merge/resources/accounting/types/paginated_credit_note_list.py @@ -24,12 +24,33 @@ class Config: extra = pydantic.Extra.allow -from .credit_note import CreditNote # noqa: E402, F401, I001 -from .credit_note_apply_line_for_credit_note import CreditNoteApplyLineForCreditNote # noqa: E402, F401, I001 -from .credit_note_apply_line_for_invoice import CreditNoteApplyLineForInvoice # noqa: E402, F401, I001 -from .invoice import Invoice # noqa: E402, F401, I001 -from .vendor_credit import VendorCredit # noqa: E402, F401, I001 -from .vendor_credit_apply_line_for_invoice import VendorCreditApplyLineForInvoice # noqa: E402, F401, I001 -from .vendor_credit_apply_line_for_vendor_credit import VendorCreditApplyLineForVendorCredit # noqa: E402, F401, I001 - -update_forward_refs(PaginatedCreditNoteList) +from .credit_note import CreditNote # noqa: E402, I001 +from .credit_note_apply_line_for_credit_note import CreditNoteApplyLineForCreditNote # noqa: E402, I001 +from .credit_note_apply_line_for_credit_note_invoice import CreditNoteApplyLineForCreditNoteInvoice # noqa: E402, I001 +from .credit_note_apply_line_for_invoice import CreditNoteApplyLineForInvoice # noqa: E402, I001 +from .credit_note_apply_line_for_invoice_credit_note import CreditNoteApplyLineForInvoiceCreditNote # noqa: E402, I001 +from .invoice import Invoice # noqa: E402, I001 +from .invoice_applied_credit_notes_item import InvoiceAppliedCreditNotesItem # noqa: E402, I001 +from .invoice_applied_vendor_credits_item import InvoiceAppliedVendorCreditsItem # noqa: E402, I001 +from .vendor_credit import VendorCredit # noqa: E402, I001 +from .vendor_credit_apply_line_for_invoice import VendorCreditApplyLineForInvoice # noqa: E402, I001 +from .vendor_credit_apply_line_for_invoice_vendor_credit import VendorCreditApplyLineForInvoiceVendorCredit # noqa: E402, I001 +from .vendor_credit_apply_line_for_vendor_credit import VendorCreditApplyLineForVendorCredit # noqa: E402, I001 +from .vendor_credit_apply_line_for_vendor_credit_invoice import VendorCreditApplyLineForVendorCreditInvoice # noqa: E402, I001 + +update_forward_refs( + PaginatedCreditNoteList, + CreditNote=CreditNote, + CreditNoteApplyLineForCreditNote=CreditNoteApplyLineForCreditNote, + CreditNoteApplyLineForCreditNoteInvoice=CreditNoteApplyLineForCreditNoteInvoice, + CreditNoteApplyLineForInvoice=CreditNoteApplyLineForInvoice, + CreditNoteApplyLineForInvoiceCreditNote=CreditNoteApplyLineForInvoiceCreditNote, + Invoice=Invoice, + InvoiceAppliedCreditNotesItem=InvoiceAppliedCreditNotesItem, + InvoiceAppliedVendorCreditsItem=InvoiceAppliedVendorCreditsItem, + VendorCredit=VendorCredit, + VendorCreditApplyLineForInvoice=VendorCreditApplyLineForInvoice, + VendorCreditApplyLineForInvoiceVendorCredit=VendorCreditApplyLineForInvoiceVendorCredit, + VendorCreditApplyLineForVendorCredit=VendorCreditApplyLineForVendorCredit, + VendorCreditApplyLineForVendorCreditInvoice=VendorCreditApplyLineForVendorCreditInvoice, +) diff --git a/src/merge/resources/accounting/types/paginated_invoice_list.py b/src/merge/resources/accounting/types/paginated_invoice_list.py index fd6795d5..5c14b734 100644 --- a/src/merge/resources/accounting/types/paginated_invoice_list.py +++ b/src/merge/resources/accounting/types/paginated_invoice_list.py @@ -24,12 +24,33 @@ class Config: extra = pydantic.Extra.allow -from .credit_note import CreditNote # noqa: E402, F401, I001 -from .credit_note_apply_line_for_credit_note import CreditNoteApplyLineForCreditNote # noqa: E402, F401, I001 -from .credit_note_apply_line_for_invoice import CreditNoteApplyLineForInvoice # noqa: E402, F401, I001 -from .invoice import Invoice # noqa: E402, F401, I001 -from .vendor_credit import VendorCredit # noqa: E402, F401, I001 -from .vendor_credit_apply_line_for_invoice import VendorCreditApplyLineForInvoice # noqa: E402, F401, I001 -from .vendor_credit_apply_line_for_vendor_credit import VendorCreditApplyLineForVendorCredit # noqa: E402, F401, I001 - -update_forward_refs(PaginatedInvoiceList) +from .credit_note import CreditNote # noqa: E402, I001 +from .credit_note_apply_line_for_credit_note import CreditNoteApplyLineForCreditNote # noqa: E402, I001 +from .credit_note_apply_line_for_credit_note_invoice import CreditNoteApplyLineForCreditNoteInvoice # noqa: E402, I001 +from .credit_note_apply_line_for_invoice import CreditNoteApplyLineForInvoice # noqa: E402, I001 +from .credit_note_apply_line_for_invoice_credit_note import CreditNoteApplyLineForInvoiceCreditNote # noqa: E402, I001 +from .invoice import Invoice # noqa: E402, I001 +from .invoice_applied_credit_notes_item import InvoiceAppliedCreditNotesItem # noqa: E402, I001 +from .invoice_applied_vendor_credits_item import InvoiceAppliedVendorCreditsItem # noqa: E402, I001 +from .vendor_credit import VendorCredit # noqa: E402, I001 +from .vendor_credit_apply_line_for_invoice import VendorCreditApplyLineForInvoice # noqa: E402, I001 +from .vendor_credit_apply_line_for_invoice_vendor_credit import VendorCreditApplyLineForInvoiceVendorCredit # noqa: E402, I001 +from .vendor_credit_apply_line_for_vendor_credit import VendorCreditApplyLineForVendorCredit # noqa: E402, I001 +from .vendor_credit_apply_line_for_vendor_credit_invoice import VendorCreditApplyLineForVendorCreditInvoice # noqa: E402, I001 + +update_forward_refs( + PaginatedInvoiceList, + CreditNote=CreditNote, + CreditNoteApplyLineForCreditNote=CreditNoteApplyLineForCreditNote, + CreditNoteApplyLineForCreditNoteInvoice=CreditNoteApplyLineForCreditNoteInvoice, + CreditNoteApplyLineForInvoice=CreditNoteApplyLineForInvoice, + CreditNoteApplyLineForInvoiceCreditNote=CreditNoteApplyLineForInvoiceCreditNote, + Invoice=Invoice, + InvoiceAppliedCreditNotesItem=InvoiceAppliedCreditNotesItem, + InvoiceAppliedVendorCreditsItem=InvoiceAppliedVendorCreditsItem, + VendorCredit=VendorCredit, + VendorCreditApplyLineForInvoice=VendorCreditApplyLineForInvoice, + VendorCreditApplyLineForInvoiceVendorCredit=VendorCreditApplyLineForInvoiceVendorCredit, + VendorCreditApplyLineForVendorCredit=VendorCreditApplyLineForVendorCredit, + VendorCreditApplyLineForVendorCreditInvoice=VendorCreditApplyLineForVendorCreditInvoice, +) diff --git a/src/merge/resources/accounting/types/paginated_vendor_credit_list.py b/src/merge/resources/accounting/types/paginated_vendor_credit_list.py index eb676449..b73ff287 100644 --- a/src/merge/resources/accounting/types/paginated_vendor_credit_list.py +++ b/src/merge/resources/accounting/types/paginated_vendor_credit_list.py @@ -24,12 +24,33 @@ class Config: extra = pydantic.Extra.allow -from .credit_note import CreditNote # noqa: E402, F401, I001 -from .credit_note_apply_line_for_credit_note import CreditNoteApplyLineForCreditNote # noqa: E402, F401, I001 -from .credit_note_apply_line_for_invoice import CreditNoteApplyLineForInvoice # noqa: E402, F401, I001 -from .invoice import Invoice # noqa: E402, F401, I001 -from .vendor_credit import VendorCredit # noqa: E402, F401, I001 -from .vendor_credit_apply_line_for_invoice import VendorCreditApplyLineForInvoice # noqa: E402, F401, I001 -from .vendor_credit_apply_line_for_vendor_credit import VendorCreditApplyLineForVendorCredit # noqa: E402, F401, I001 - -update_forward_refs(PaginatedVendorCreditList) +from .credit_note import CreditNote # noqa: E402, I001 +from .credit_note_apply_line_for_credit_note import CreditNoteApplyLineForCreditNote # noqa: E402, I001 +from .credit_note_apply_line_for_credit_note_invoice import CreditNoteApplyLineForCreditNoteInvoice # noqa: E402, I001 +from .credit_note_apply_line_for_invoice import CreditNoteApplyLineForInvoice # noqa: E402, I001 +from .credit_note_apply_line_for_invoice_credit_note import CreditNoteApplyLineForInvoiceCreditNote # noqa: E402, I001 +from .invoice import Invoice # noqa: E402, I001 +from .invoice_applied_credit_notes_item import InvoiceAppliedCreditNotesItem # noqa: E402, I001 +from .invoice_applied_vendor_credits_item import InvoiceAppliedVendorCreditsItem # noqa: E402, I001 +from .vendor_credit import VendorCredit # noqa: E402, I001 +from .vendor_credit_apply_line_for_invoice import VendorCreditApplyLineForInvoice # noqa: E402, I001 +from .vendor_credit_apply_line_for_invoice_vendor_credit import VendorCreditApplyLineForInvoiceVendorCredit # noqa: E402, I001 +from .vendor_credit_apply_line_for_vendor_credit import VendorCreditApplyLineForVendorCredit # noqa: E402, I001 +from .vendor_credit_apply_line_for_vendor_credit_invoice import VendorCreditApplyLineForVendorCreditInvoice # noqa: E402, I001 + +update_forward_refs( + PaginatedVendorCreditList, + CreditNote=CreditNote, + CreditNoteApplyLineForCreditNote=CreditNoteApplyLineForCreditNote, + CreditNoteApplyLineForCreditNoteInvoice=CreditNoteApplyLineForCreditNoteInvoice, + CreditNoteApplyLineForInvoice=CreditNoteApplyLineForInvoice, + CreditNoteApplyLineForInvoiceCreditNote=CreditNoteApplyLineForInvoiceCreditNote, + Invoice=Invoice, + InvoiceAppliedCreditNotesItem=InvoiceAppliedCreditNotesItem, + InvoiceAppliedVendorCreditsItem=InvoiceAppliedVendorCreditsItem, + VendorCredit=VendorCredit, + VendorCreditApplyLineForInvoice=VendorCreditApplyLineForInvoice, + VendorCreditApplyLineForInvoiceVendorCredit=VendorCreditApplyLineForInvoiceVendorCredit, + VendorCreditApplyLineForVendorCredit=VendorCreditApplyLineForVendorCredit, + VendorCreditApplyLineForVendorCreditInvoice=VendorCreditApplyLineForVendorCreditInvoice, +) diff --git a/src/merge/resources/accounting/types/patched_contact_request.py b/src/merge/resources/accounting/types/patched_contact_request.py index 806df980..fec9779d 100644 --- a/src/merge/resources/accounting/types/patched_contact_request.py +++ b/src/merge/resources/accounting/types/patched_contact_request.py @@ -82,8 +82,8 @@ class PatchedContactRequest(UncheckedBaseModel): `AccountingPhoneNumber` object for the given `Contacts` object. """ - integration_params: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None - linked_account_params: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None + integration_params: typing.Optional[typing.Dict[str, typing.Any]] = None + linked_account_params: typing.Optional[typing.Dict[str, typing.Any]] = None remote_fields: typing.Optional[typing.List[RemoteFieldRequest]] = None if IS_PYDANTIC_V2: diff --git a/src/merge/resources/accounting/types/patched_item_request_request.py b/src/merge/resources/accounting/types/patched_item_request_request.py index 57c95f70..c99820b6 100644 --- a/src/merge/resources/accounting/types/patched_item_request_request.py +++ b/src/merge/resources/accounting/types/patched_item_request_request.py @@ -82,8 +82,8 @@ class PatchedItemRequestRequest(UncheckedBaseModel): The default sales tax rate for this item. """ - integration_params: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None - linked_account_params: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None + integration_params: typing.Optional[typing.Dict[str, typing.Any]] = None + linked_account_params: typing.Optional[typing.Dict[str, typing.Any]] = None if IS_PYDANTIC_V2: model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2 diff --git a/src/merge/resources/accounting/types/patched_payment_request.py b/src/merge/resources/accounting/types/patched_payment_request.py index 19b730f9..2dc3dfc6 100644 --- a/src/merge/resources/accounting/types/patched_payment_request.py +++ b/src/merge/resources/accounting/types/patched_payment_request.py @@ -401,8 +401,8 @@ class PatchedPaymentRequest(UncheckedBaseModel): A list of “Payment Applied to Lines” objects. """ - integration_params: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None - linked_account_params: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None + integration_params: typing.Optional[typing.Dict[str, typing.Any]] = None + linked_account_params: typing.Optional[typing.Dict[str, typing.Any]] = None remote_fields: typing.Optional[typing.List[RemoteFieldRequest]] = None if IS_PYDANTIC_V2: diff --git a/src/merge/resources/accounting/types/patched_vendor_credit_request.py b/src/merge/resources/accounting/types/patched_vendor_credit_request.py index b9ac7532..e2e885dc 100644 --- a/src/merge/resources/accounting/types/patched_vendor_credit_request.py +++ b/src/merge/resources/accounting/types/patched_vendor_credit_request.py @@ -365,8 +365,8 @@ class PatchedVendorCreditRequest(UncheckedBaseModel): """ tracking_categories: typing.Optional[typing.List[PatchedVendorCreditRequestTrackingCategoriesItem]] = None - integration_params: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None - linked_account_params: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None + integration_params: typing.Optional[typing.Dict[str, typing.Any]] = None + linked_account_params: typing.Optional[typing.Dict[str, typing.Any]] = None vendor_credit_url: typing.Optional[str] = pydantic.Field(default=None) """ The 3rd party URL of the vendor credit. diff --git a/src/merge/resources/accounting/types/payment.py b/src/merge/resources/accounting/types/payment.py index 18e5f5fd..a45f3de8 100644 --- a/src/merge/resources/accounting/types/payment.py +++ b/src/merge/resources/accounting/types/payment.py @@ -426,7 +426,7 @@ class Payment(UncheckedBaseModel): Indicates whether or not this object has been deleted in the third party platform. Full coverage deletion detection is a premium add-on. Native deletion detection is offered for free with limited coverage. [Learn more](https://docs.merge.dev/integrations/hris/supported-features/). """ - field_mappings: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None + field_mappings: typing.Optional[typing.Dict[str, typing.Any]] = None remote_data: typing.Optional[typing.List[RemoteData]] = None remote_fields: typing.Optional[typing.List[RemoteField]] = None diff --git a/src/merge/resources/accounting/types/payment_line_item_request.py b/src/merge/resources/accounting/types/payment_line_item_request.py index ecc0e374..a9ec320c 100644 --- a/src/merge/resources/accounting/types/payment_line_item_request.py +++ b/src/merge/resources/accounting/types/payment_line_item_request.py @@ -44,8 +44,8 @@ class PaymentLineItemRequest(UncheckedBaseModel): The type of transaction the payment portion is being applied to. Possible values include: INVOICE, JOURNAL_ENTRY, or CREDIT_NOTE. """ - integration_params: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None - linked_account_params: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None + integration_params: typing.Optional[typing.Dict[str, typing.Any]] = None + linked_account_params: typing.Optional[typing.Dict[str, typing.Any]] = None remote_fields: typing.Optional[typing.List[RemoteFieldRequest]] = None if IS_PYDANTIC_V2: diff --git a/src/merge/resources/accounting/types/payment_method.py b/src/merge/resources/accounting/types/payment_method.py index 4a1239b0..98d4761e 100644 --- a/src/merge/resources/accounting/types/payment_method.py +++ b/src/merge/resources/accounting/types/payment_method.py @@ -67,7 +67,7 @@ class PaymentMethod(UncheckedBaseModel): When the third party's payment method was updated. """ - field_mappings: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None + field_mappings: typing.Optional[typing.Dict[str, typing.Any]] = None remote_data: typing.Optional[typing.List[RemoteData]] = None if IS_PYDANTIC_V2: diff --git a/src/merge/resources/accounting/types/payment_request.py b/src/merge/resources/accounting/types/payment_request.py index 886e0531..ac18bd81 100644 --- a/src/merge/resources/accounting/types/payment_request.py +++ b/src/merge/resources/accounting/types/payment_request.py @@ -399,8 +399,8 @@ class PaymentRequest(UncheckedBaseModel): A list of “Payment Applied to Lines” objects. """ - integration_params: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None - linked_account_params: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None + integration_params: typing.Optional[typing.Dict[str, typing.Any]] = None + linked_account_params: typing.Optional[typing.Dict[str, typing.Any]] = None remote_fields: typing.Optional[typing.List[RemoteFieldRequest]] = None if IS_PYDANTIC_V2: diff --git a/src/merge/resources/accounting/types/payment_term.py b/src/merge/resources/accounting/types/payment_term.py index 3ff34540..e816a55d 100644 --- a/src/merge/resources/accounting/types/payment_term.py +++ b/src/merge/resources/accounting/types/payment_term.py @@ -72,7 +72,7 @@ class PaymentTerm(UncheckedBaseModel): When the third party's payment term was modified. """ - field_mappings: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None + field_mappings: typing.Optional[typing.Dict[str, typing.Any]] = None remote_data: typing.Optional[typing.List[RemoteData]] = None if IS_PYDANTIC_V2: diff --git a/src/merge/resources/accounting/types/payment_type_enum.py b/src/merge/resources/accounting/types/payment_type_enum.py index 6d0a054a..1aa7a85d 100644 --- a/src/merge/resources/accounting/types/payment_type_enum.py +++ b/src/merge/resources/accounting/types/payment_type_enum.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ....core import enum + T_Result = typing.TypeVar("T_Result") -class PaymentTypeEnum(str, enum.Enum): +class PaymentTypeEnum(enum.StrEnum): """ * `ACCOUNTS_PAYABLE` - ACCOUNTS_PAYABLE * `ACCOUNTS_RECEIVABLE` - ACCOUNTS_RECEIVABLE diff --git a/src/merge/resources/accounting/types/posting_status_enum.py b/src/merge/resources/accounting/types/posting_status_enum.py index 95f462bc..a18bed6f 100644 --- a/src/merge/resources/accounting/types/posting_status_enum.py +++ b/src/merge/resources/accounting/types/posting_status_enum.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ....core import enum + T_Result = typing.TypeVar("T_Result") -class PostingStatusEnum(str, enum.Enum): +class PostingStatusEnum(enum.StrEnum): """ * `UNPOSTED` - UNPOSTED * `POSTED` - POSTED diff --git a/src/merge/resources/accounting/types/project.py b/src/merge/resources/accounting/types/project.py index 1bf9cab0..67461ed5 100644 --- a/src/merge/resources/accounting/types/project.py +++ b/src/merge/resources/accounting/types/project.py @@ -63,7 +63,7 @@ class Project(UncheckedBaseModel): The supplier, or customer involved in the project. """ - field_mappings: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None + field_mappings: typing.Optional[typing.Dict[str, typing.Any]] = None remote_data: typing.Optional[typing.List[RemoteData]] = None if IS_PYDANTIC_V2: diff --git a/src/merge/resources/accounting/types/purchase_order.py b/src/merge/resources/accounting/types/purchase_order.py index 2b5bd281..0bf36c69 100644 --- a/src/merge/resources/accounting/types/purchase_order.py +++ b/src/merge/resources/accounting/types/purchase_order.py @@ -457,7 +457,7 @@ class PurchaseOrder(UncheckedBaseModel): Indicates whether or not this object has been deleted in the third party platform. Full coverage deletion detection is a premium add-on. Native deletion detection is offered for free with limited coverage. [Learn more](https://docs.merge.dev/integrations/hris/supported-features/). """ - field_mappings: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None + field_mappings: typing.Optional[typing.Dict[str, typing.Any]] = None remote_data: typing.Optional[typing.List[RemoteData]] = None remote_fields: typing.Optional[typing.List[RemoteField]] = None diff --git a/src/merge/resources/accounting/types/purchase_order_line_item_request.py b/src/merge/resources/accounting/types/purchase_order_line_item_request.py index 964b9e1e..a853800c 100644 --- a/src/merge/resources/accounting/types/purchase_order_line_item_request.py +++ b/src/merge/resources/accounting/types/purchase_order_line_item_request.py @@ -393,8 +393,8 @@ class PurchaseOrderLineItemRequest(UncheckedBaseModel): The company the purchase order line item belongs to. """ - integration_params: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None - linked_account_params: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None + integration_params: typing.Optional[typing.Dict[str, typing.Any]] = None + linked_account_params: typing.Optional[typing.Dict[str, typing.Any]] = None remote_fields: typing.Optional[typing.List[RemoteFieldRequest]] = None if IS_PYDANTIC_V2: diff --git a/src/merge/resources/accounting/types/purchase_order_request.py b/src/merge/resources/accounting/types/purchase_order_request.py index 90890d0c..006fbbb8 100644 --- a/src/merge/resources/accounting/types/purchase_order_request.py +++ b/src/merge/resources/accounting/types/purchase_order_request.py @@ -409,8 +409,8 @@ class PurchaseOrderRequest(UncheckedBaseModel): None ) line_items: typing.Optional[typing.List[PurchaseOrderRequestLineItemsItem]] = None - integration_params: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None - linked_account_params: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None + integration_params: typing.Optional[typing.Dict[str, typing.Any]] = None + linked_account_params: typing.Optional[typing.Dict[str, typing.Any]] = None remote_fields: typing.Optional[typing.List[RemoteFieldRequest]] = None if IS_PYDANTIC_V2: diff --git a/src/merge/resources/accounting/types/purchase_order_status_enum.py b/src/merge/resources/accounting/types/purchase_order_status_enum.py index 1c302dd3..0fefbe95 100644 --- a/src/merge/resources/accounting/types/purchase_order_status_enum.py +++ b/src/merge/resources/accounting/types/purchase_order_status_enum.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ....core import enum + T_Result = typing.TypeVar("T_Result") -class PurchaseOrderStatusEnum(str, enum.Enum): +class PurchaseOrderStatusEnum(enum.StrEnum): """ * `DRAFT` - DRAFT * `SUBMITTED` - SUBMITTED diff --git a/src/merge/resources/accounting/types/remote_data.py b/src/merge/resources/accounting/types/remote_data.py index f34bec80..2026f05a 100644 --- a/src/merge/resources/accounting/types/remote_data.py +++ b/src/merge/resources/accounting/types/remote_data.py @@ -22,7 +22,7 @@ class RemoteData(UncheckedBaseModel): The third-party API path that is being called. """ - data: typing.Optional[typing.Optional[typing.Any]] = pydantic.Field(default=None) + data: typing.Optional[typing.Any] = pydantic.Field(default=None) """ The data returned from the third-party for this object in its original, unnormalized format. """ diff --git a/src/merge/resources/accounting/types/remote_endpoint_info.py b/src/merge/resources/accounting/types/remote_endpoint_info.py index 07ceff6a..ffa70b94 100644 --- a/src/merge/resources/accounting/types/remote_endpoint_info.py +++ b/src/merge/resources/accounting/types/remote_endpoint_info.py @@ -10,7 +10,7 @@ class RemoteEndpointInfo(UncheckedBaseModel): method: str url_path: str - field_traversal_path: typing.List[typing.Optional[typing.Any]] + field_traversal_path: typing.List[typing.Any] if IS_PYDANTIC_V2: model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2 diff --git a/src/merge/resources/accounting/types/remote_field.py b/src/merge/resources/accounting/types/remote_field.py index 1a9272f0..556c69ef 100644 --- a/src/merge/resources/accounting/types/remote_field.py +++ b/src/merge/resources/accounting/types/remote_field.py @@ -10,7 +10,7 @@ class RemoteField(UncheckedBaseModel): remote_field_class: RemoteFieldRemoteFieldClass - value: typing.Optional[typing.Optional[typing.Any]] = None + value: typing.Optional[typing.Any] = None if IS_PYDANTIC_V2: model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2 diff --git a/src/merge/resources/accounting/types/remote_field_api.py b/src/merge/resources/accounting/types/remote_field_api.py index 4c66a23b..79cf45c4 100644 --- a/src/merge/resources/accounting/types/remote_field_api.py +++ b/src/merge/resources/accounting/types/remote_field_api.py @@ -3,7 +3,9 @@ import typing import pydantic +import typing_extensions from ....core.pydantic_utilities import IS_PYDANTIC_V2 +from ....core.serialization import FieldMetadata from ....core.unchecked_base_model import UncheckedBaseModel from .advanced_metadata import AdvancedMetadata from .remote_endpoint_info import RemoteEndpointInfo @@ -11,10 +13,12 @@ class RemoteFieldApi(UncheckedBaseModel): - schema_: typing.Dict[str, typing.Optional[typing.Any]] = pydantic.Field(alias="schema") + schema_: typing_extensions.Annotated[ + typing.Dict[str, typing.Any], FieldMetadata(alias="schema"), pydantic.Field(alias="schema") + ] remote_key_name: str remote_endpoint_info: RemoteEndpointInfo - example_values: typing.Optional[typing.List[typing.Optional[typing.Any]]] = None + example_values: typing.Optional[typing.List[typing.Any]] = None advanced_metadata: typing.Optional[AdvancedMetadata] = None coverage: typing.Optional[RemoteFieldApiCoverage] = None diff --git a/src/merge/resources/accounting/types/remote_field_api_response.py b/src/merge/resources/accounting/types/remote_field_api_response.py index 0eeab3e5..7e866b33 100644 --- a/src/merge/resources/accounting/types/remote_field_api_response.py +++ b/src/merge/resources/accounting/types/remote_field_api_response.py @@ -3,56 +3,136 @@ import typing import pydantic +import typing_extensions from ....core.pydantic_utilities import IS_PYDANTIC_V2 +from ....core.serialization import FieldMetadata from ....core.unchecked_base_model import UncheckedBaseModel from .remote_field_api import RemoteFieldApi class RemoteFieldApiResponse(UncheckedBaseModel): - account: typing.Optional[typing.List[RemoteFieldApi]] = pydantic.Field(alias="Account", default=None) - accounting_attachment: typing.Optional[typing.List[RemoteFieldApi]] = pydantic.Field( - alias="AccountingAttachment", default=None - ) - balance_sheet: typing.Optional[typing.List[RemoteFieldApi]] = pydantic.Field(alias="BalanceSheet", default=None) - cash_flow_statement: typing.Optional[typing.List[RemoteFieldApi]] = pydantic.Field( - alias="CashFlowStatement", default=None - ) - company_info: typing.Optional[typing.List[RemoteFieldApi]] = pydantic.Field(alias="CompanyInfo", default=None) - contact: typing.Optional[typing.List[RemoteFieldApi]] = pydantic.Field(alias="Contact", default=None) - income_statement: typing.Optional[typing.List[RemoteFieldApi]] = pydantic.Field( - alias="IncomeStatement", default=None - ) - credit_note: typing.Optional[typing.List[RemoteFieldApi]] = pydantic.Field(alias="CreditNote", default=None) - item: typing.Optional[typing.List[RemoteFieldApi]] = pydantic.Field(alias="Item", default=None) - purchase_order: typing.Optional[typing.List[RemoteFieldApi]] = pydantic.Field(alias="PurchaseOrder", default=None) - sales_order: typing.Optional[typing.List[RemoteFieldApi]] = pydantic.Field(alias="SalesOrder", default=None) - item_fulfillment: typing.Optional[typing.List[RemoteFieldApi]] = pydantic.Field( - alias="ItemFulfillment", default=None - ) - expense_report: typing.Optional[typing.List[RemoteFieldApi]] = pydantic.Field(alias="ExpenseReport", default=None) - tracking_category: typing.Optional[typing.List[RemoteFieldApi]] = pydantic.Field( - alias="TrackingCategory", default=None - ) - journal_entry: typing.Optional[typing.List[RemoteFieldApi]] = pydantic.Field(alias="JournalEntry", default=None) - tax_rate: typing.Optional[typing.List[RemoteFieldApi]] = pydantic.Field(alias="TaxRate", default=None) - invoice: typing.Optional[typing.List[RemoteFieldApi]] = pydantic.Field(alias="Invoice", default=None) - payment: typing.Optional[typing.List[RemoteFieldApi]] = pydantic.Field(alias="Payment", default=None) - expense: typing.Optional[typing.List[RemoteFieldApi]] = pydantic.Field(alias="Expense", default=None) - vendor_credit: typing.Optional[typing.List[RemoteFieldApi]] = pydantic.Field(alias="VendorCredit", default=None) - transaction: typing.Optional[typing.List[RemoteFieldApi]] = pydantic.Field(alias="Transaction", default=None) - accounting_period: typing.Optional[typing.List[RemoteFieldApi]] = pydantic.Field( - alias="AccountingPeriod", default=None - ) - general_ledger_transaction: typing.Optional[typing.List[RemoteFieldApi]] = pydantic.Field( - alias="GeneralLedgerTransaction", default=None - ) - bank_feed_account: typing.Optional[typing.List[RemoteFieldApi]] = pydantic.Field( - alias="BankFeedAccount", default=None - ) - employee: typing.Optional[typing.List[RemoteFieldApi]] = pydantic.Field(alias="Employee", default=None) - payment_method: typing.Optional[typing.List[RemoteFieldApi]] = pydantic.Field(alias="PaymentMethod", default=None) - project: typing.Optional[typing.List[RemoteFieldApi]] = pydantic.Field(alias="Project", default=None) - payment_term: typing.Optional[typing.List[RemoteFieldApi]] = pydantic.Field(alias="PaymentTerm", default=None) + account: typing_extensions.Annotated[ + typing.Optional[typing.List[RemoteFieldApi]], FieldMetadata(alias="Account"), pydantic.Field(alias="Account") + ] = None + accounting_attachment: typing_extensions.Annotated[ + typing.Optional[typing.List[RemoteFieldApi]], + FieldMetadata(alias="AccountingAttachment"), + pydantic.Field(alias="AccountingAttachment"), + ] = None + balance_sheet: typing_extensions.Annotated[ + typing.Optional[typing.List[RemoteFieldApi]], + FieldMetadata(alias="BalanceSheet"), + pydantic.Field(alias="BalanceSheet"), + ] = None + cash_flow_statement: typing_extensions.Annotated[ + typing.Optional[typing.List[RemoteFieldApi]], + FieldMetadata(alias="CashFlowStatement"), + pydantic.Field(alias="CashFlowStatement"), + ] = None + company_info: typing_extensions.Annotated[ + typing.Optional[typing.List[RemoteFieldApi]], + FieldMetadata(alias="CompanyInfo"), + pydantic.Field(alias="CompanyInfo"), + ] = None + contact: typing_extensions.Annotated[ + typing.Optional[typing.List[RemoteFieldApi]], FieldMetadata(alias="Contact"), pydantic.Field(alias="Contact") + ] = None + income_statement: typing_extensions.Annotated[ + typing.Optional[typing.List[RemoteFieldApi]], + FieldMetadata(alias="IncomeStatement"), + pydantic.Field(alias="IncomeStatement"), + ] = None + credit_note: typing_extensions.Annotated[ + typing.Optional[typing.List[RemoteFieldApi]], + FieldMetadata(alias="CreditNote"), + pydantic.Field(alias="CreditNote"), + ] = None + item: typing_extensions.Annotated[ + typing.Optional[typing.List[RemoteFieldApi]], FieldMetadata(alias="Item"), pydantic.Field(alias="Item") + ] = None + purchase_order: typing_extensions.Annotated[ + typing.Optional[typing.List[RemoteFieldApi]], + FieldMetadata(alias="PurchaseOrder"), + pydantic.Field(alias="PurchaseOrder"), + ] = None + sales_order: typing_extensions.Annotated[ + typing.Optional[typing.List[RemoteFieldApi]], + FieldMetadata(alias="SalesOrder"), + pydantic.Field(alias="SalesOrder"), + ] = None + item_fulfillment: typing_extensions.Annotated[ + typing.Optional[typing.List[RemoteFieldApi]], + FieldMetadata(alias="ItemFulfillment"), + pydantic.Field(alias="ItemFulfillment"), + ] = None + expense_report: typing_extensions.Annotated[ + typing.Optional[typing.List[RemoteFieldApi]], + FieldMetadata(alias="ExpenseReport"), + pydantic.Field(alias="ExpenseReport"), + ] = None + tracking_category: typing_extensions.Annotated[ + typing.Optional[typing.List[RemoteFieldApi]], + FieldMetadata(alias="TrackingCategory"), + pydantic.Field(alias="TrackingCategory"), + ] = None + journal_entry: typing_extensions.Annotated[ + typing.Optional[typing.List[RemoteFieldApi]], + FieldMetadata(alias="JournalEntry"), + pydantic.Field(alias="JournalEntry"), + ] = None + tax_rate: typing_extensions.Annotated[ + typing.Optional[typing.List[RemoteFieldApi]], FieldMetadata(alias="TaxRate"), pydantic.Field(alias="TaxRate") + ] = None + invoice: typing_extensions.Annotated[ + typing.Optional[typing.List[RemoteFieldApi]], FieldMetadata(alias="Invoice"), pydantic.Field(alias="Invoice") + ] = None + payment: typing_extensions.Annotated[ + typing.Optional[typing.List[RemoteFieldApi]], FieldMetadata(alias="Payment"), pydantic.Field(alias="Payment") + ] = None + expense: typing_extensions.Annotated[ + typing.Optional[typing.List[RemoteFieldApi]], FieldMetadata(alias="Expense"), pydantic.Field(alias="Expense") + ] = None + vendor_credit: typing_extensions.Annotated[ + typing.Optional[typing.List[RemoteFieldApi]], + FieldMetadata(alias="VendorCredit"), + pydantic.Field(alias="VendorCredit"), + ] = None + transaction: typing_extensions.Annotated[ + typing.Optional[typing.List[RemoteFieldApi]], + FieldMetadata(alias="Transaction"), + pydantic.Field(alias="Transaction"), + ] = None + accounting_period: typing_extensions.Annotated[ + typing.Optional[typing.List[RemoteFieldApi]], + FieldMetadata(alias="AccountingPeriod"), + pydantic.Field(alias="AccountingPeriod"), + ] = None + general_ledger_transaction: typing_extensions.Annotated[ + typing.Optional[typing.List[RemoteFieldApi]], + FieldMetadata(alias="GeneralLedgerTransaction"), + pydantic.Field(alias="GeneralLedgerTransaction"), + ] = None + bank_feed_account: typing_extensions.Annotated[ + typing.Optional[typing.List[RemoteFieldApi]], + FieldMetadata(alias="BankFeedAccount"), + pydantic.Field(alias="BankFeedAccount"), + ] = None + employee: typing_extensions.Annotated[ + typing.Optional[typing.List[RemoteFieldApi]], FieldMetadata(alias="Employee"), pydantic.Field(alias="Employee") + ] = None + payment_method: typing_extensions.Annotated[ + typing.Optional[typing.List[RemoteFieldApi]], + FieldMetadata(alias="PaymentMethod"), + pydantic.Field(alias="PaymentMethod"), + ] = None + project: typing_extensions.Annotated[ + typing.Optional[typing.List[RemoteFieldApi]], FieldMetadata(alias="Project"), pydantic.Field(alias="Project") + ] = None + payment_term: typing_extensions.Annotated[ + typing.Optional[typing.List[RemoteFieldApi]], + FieldMetadata(alias="PaymentTerm"), + pydantic.Field(alias="PaymentTerm"), + ] = None if IS_PYDANTIC_V2: model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2 diff --git a/src/merge/resources/accounting/types/remote_field_request.py b/src/merge/resources/accounting/types/remote_field_request.py index 69bc39da..e3c6e0fc 100644 --- a/src/merge/resources/accounting/types/remote_field_request.py +++ b/src/merge/resources/accounting/types/remote_field_request.py @@ -10,7 +10,7 @@ class RemoteFieldRequest(UncheckedBaseModel): remote_field_class: RemoteFieldRequestRemoteFieldClass - value: typing.Optional[typing.Optional[typing.Any]] = None + value: typing.Optional[typing.Any] = None if IS_PYDANTIC_V2: model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2 diff --git a/src/merge/resources/accounting/types/remote_response.py b/src/merge/resources/accounting/types/remote_response.py index db01131f..8bc6f905 100644 --- a/src/merge/resources/accounting/types/remote_response.py +++ b/src/merge/resources/accounting/types/remote_response.py @@ -21,10 +21,10 @@ class RemoteResponse(UncheckedBaseModel): method: str path: str status: int - response: typing.Optional[typing.Any] = None - response_headers: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None + response: typing.Any + response_headers: typing.Optional[typing.Dict[str, typing.Any]] = None response_type: typing.Optional[RemoteResponseResponseType] = None - headers: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None + headers: typing.Optional[typing.Dict[str, typing.Any]] = None if IS_PYDANTIC_V2: model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2 diff --git a/src/merge/resources/accounting/types/report_item.py b/src/merge/resources/accounting/types/report_item.py index b217e114..63695ab7 100644 --- a/src/merge/resources/accounting/types/report_item.py +++ b/src/merge/resources/accounting/types/report_item.py @@ -43,7 +43,7 @@ class ReportItem(UncheckedBaseModel): The report item's value. """ - sub_items: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None + sub_items: typing.Optional[typing.Dict[str, typing.Any]] = None company: typing.Optional[str] = pydantic.Field(default=None) """ The company the report item belongs to. diff --git a/src/merge/resources/accounting/types/request_format_enum.py b/src/merge/resources/accounting/types/request_format_enum.py index 21c272f2..b8e2234c 100644 --- a/src/merge/resources/accounting/types/request_format_enum.py +++ b/src/merge/resources/accounting/types/request_format_enum.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ....core import enum + T_Result = typing.TypeVar("T_Result") -class RequestFormatEnum(str, enum.Enum): +class RequestFormatEnum(enum.StrEnum): """ * `JSON` - JSON * `XML` - XML diff --git a/src/merge/resources/accounting/types/response_type_enum.py b/src/merge/resources/accounting/types/response_type_enum.py index ef241302..8a72c2a9 100644 --- a/src/merge/resources/accounting/types/response_type_enum.py +++ b/src/merge/resources/accounting/types/response_type_enum.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ....core import enum + T_Result = typing.TypeVar("T_Result") -class ResponseTypeEnum(str, enum.Enum): +class ResponseTypeEnum(enum.StrEnum): """ * `JSON` - JSON * `BASE64_GZIP` - BASE64_GZIP diff --git a/src/merge/resources/accounting/types/role_enum.py b/src/merge/resources/accounting/types/role_enum.py index 8f2c9b1d..394ec992 100644 --- a/src/merge/resources/accounting/types/role_enum.py +++ b/src/merge/resources/accounting/types/role_enum.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ....core import enum + T_Result = typing.TypeVar("T_Result") -class RoleEnum(str, enum.Enum): +class RoleEnum(enum.StrEnum): """ * `ADMIN` - ADMIN * `DEVELOPER` - DEVELOPER diff --git a/src/merge/resources/accounting/types/sales_order.py b/src/merge/resources/accounting/types/sales_order.py index c7df3bdb..248c0959 100644 --- a/src/merge/resources/accounting/types/sales_order.py +++ b/src/merge/resources/accounting/types/sales_order.py @@ -435,7 +435,7 @@ class SalesOrder(UncheckedBaseModel): Indicates whether or not this object has been deleted in the third party platform. Full coverage deletion detection is a premium add-on. Native deletion detection is offered for free with limited coverage. [Learn more](https://docs.merge.dev/integrations/hris/supported-features/). """ - field_mappings: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None + field_mappings: typing.Optional[typing.Dict[str, typing.Any]] = None remote_data: typing.Optional[typing.List[RemoteData]] = None remote_fields: typing.Optional[typing.List[RemoteField]] = None diff --git a/src/merge/resources/accounting/types/sales_order_line_request.py b/src/merge/resources/accounting/types/sales_order_line_request.py index c6c1589b..8796728a 100644 --- a/src/merge/resources/accounting/types/sales_order_line_request.py +++ b/src/merge/resources/accounting/types/sales_order_line_request.py @@ -71,8 +71,8 @@ class SalesOrderLineRequest(UncheckedBaseModel): When the third party's sales order line item was updated. """ - integration_params: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None - linked_account_params: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None + integration_params: typing.Optional[typing.Dict[str, typing.Any]] = None + linked_account_params: typing.Optional[typing.Dict[str, typing.Any]] = None remote_fields: typing.Optional[typing.List[RemoteFieldRequest]] = None if IS_PYDANTIC_V2: diff --git a/src/merge/resources/accounting/types/sales_order_request_request.py b/src/merge/resources/accounting/types/sales_order_request_request.py index b447a280..c5f6a266 100644 --- a/src/merge/resources/accounting/types/sales_order_request_request.py +++ b/src/merge/resources/accounting/types/sales_order_request_request.py @@ -400,8 +400,8 @@ class SalesOrderRequestRequest(UncheckedBaseModel): """ lines: typing.Optional[typing.List[SalesOrderRequestRequestLinesItem]] = None - integration_params: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None - linked_account_params: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None + integration_params: typing.Optional[typing.Dict[str, typing.Any]] = None + linked_account_params: typing.Optional[typing.Dict[str, typing.Any]] = None remote_fields: typing.Optional[typing.List[RemoteFieldRequest]] = None if IS_PYDANTIC_V2: diff --git a/src/merge/resources/accounting/types/sales_order_status_enum.py b/src/merge/resources/accounting/types/sales_order_status_enum.py index bc23fbb7..06d6fbb0 100644 --- a/src/merge/resources/accounting/types/sales_order_status_enum.py +++ b/src/merge/resources/accounting/types/sales_order_status_enum.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ....core import enum + T_Result = typing.TypeVar("T_Result") -class SalesOrderStatusEnum(str, enum.Enum): +class SalesOrderStatusEnum(enum.StrEnum): """ * `DRAFT` - DRAFT * `PENDING_APPROVAL` - PENDING_APPROVAL diff --git a/src/merge/resources/accounting/types/selective_sync_configurations_usage_enum.py b/src/merge/resources/accounting/types/selective_sync_configurations_usage_enum.py index 9ff43813..e8e318c0 100644 --- a/src/merge/resources/accounting/types/selective_sync_configurations_usage_enum.py +++ b/src/merge/resources/accounting/types/selective_sync_configurations_usage_enum.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ....core import enum + T_Result = typing.TypeVar("T_Result") -class SelectiveSyncConfigurationsUsageEnum(str, enum.Enum): +class SelectiveSyncConfigurationsUsageEnum(enum.StrEnum): """ * `IN_NEXT_SYNC` - IN_NEXT_SYNC * `IN_LAST_SYNC` - IN_LAST_SYNC diff --git a/src/merge/resources/accounting/types/status_7_d_1_enum.py b/src/merge/resources/accounting/types/status_7_d_1_enum.py index 3b21ca93..9d335cd5 100644 --- a/src/merge/resources/accounting/types/status_7_d_1_enum.py +++ b/src/merge/resources/accounting/types/status_7_d_1_enum.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ....core import enum + T_Result = typing.TypeVar("T_Result") -class Status7D1Enum(str, enum.Enum): +class Status7D1Enum(enum.StrEnum): """ * `ACTIVE` - ACTIVE * `ARCHIVED` - ARCHIVED diff --git a/src/merge/resources/accounting/types/status_895_enum.py b/src/merge/resources/accounting/types/status_895_enum.py index b7cba275..ca416191 100644 --- a/src/merge/resources/accounting/types/status_895_enum.py +++ b/src/merge/resources/accounting/types/status_895_enum.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ....core import enum + T_Result = typing.TypeVar("T_Result") -class Status895Enum(str, enum.Enum): +class Status895Enum(enum.StrEnum): """ * `ACTIVE` - ACTIVE * `INACTIVE` - INACTIVE diff --git a/src/merge/resources/accounting/types/status_fd_5_enum.py b/src/merge/resources/accounting/types/status_fd_5_enum.py index d753f77c..6b851a79 100644 --- a/src/merge/resources/accounting/types/status_fd_5_enum.py +++ b/src/merge/resources/accounting/types/status_fd_5_enum.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ....core import enum + T_Result = typing.TypeVar("T_Result") -class StatusFd5Enum(str, enum.Enum): +class StatusFd5Enum(enum.StrEnum): """ * `SYNCING` - SYNCING * `DONE` - DONE diff --git a/src/merge/resources/accounting/types/tax_rate.py b/src/merge/resources/accounting/types/tax_rate.py index 66b673c1..76465810 100644 --- a/src/merge/resources/accounting/types/tax_rate.py +++ b/src/merge/resources/accounting/types/tax_rate.py @@ -91,7 +91,7 @@ class TaxRate(UncheckedBaseModel): Indicates whether or not this object has been deleted in the third party platform. Full coverage deletion detection is a premium add-on. Native deletion detection is offered for free with limited coverage. [Learn more](https://docs.merge.dev/integrations/hris/supported-features/). """ - field_mappings: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None + field_mappings: typing.Optional[typing.Dict[str, typing.Any]] = None remote_data: typing.Optional[typing.List[RemoteData]] = None if IS_PYDANTIC_V2: diff --git a/src/merge/resources/accounting/types/tracking_category.py b/src/merge/resources/accounting/types/tracking_category.py index 19bc0364..cb2efc85 100644 --- a/src/merge/resources/accounting/types/tracking_category.py +++ b/src/merge/resources/accounting/types/tracking_category.py @@ -69,7 +69,7 @@ class TrackingCategory(UncheckedBaseModel): Indicates whether or not this object has been deleted in the third party platform. Full coverage deletion detection is a premium add-on. Native deletion detection is offered for free with limited coverage. [Learn more](https://docs.merge.dev/integrations/hris/supported-features/). """ - field_mappings: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None + field_mappings: typing.Optional[typing.Dict[str, typing.Any]] = None tracking_category_url: typing.Optional[str] = pydantic.Field(default=None) """ The 3rd party URL of the tracking category. diff --git a/src/merge/resources/accounting/types/transaction.py b/src/merge/resources/accounting/types/transaction.py index 6c06bac6..d29d1eab 100644 --- a/src/merge/resources/accounting/types/transaction.py +++ b/src/merge/resources/accounting/types/transaction.py @@ -418,7 +418,7 @@ class Transaction(UncheckedBaseModel): The accounting period that the Transaction was generated in. """ - field_mappings: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None + field_mappings: typing.Optional[typing.Dict[str, typing.Any]] = None remote_data: typing.Optional[typing.List[RemoteData]] = None transaction_url: typing.Optional[str] = pydantic.Field(default=None) """ diff --git a/src/merge/resources/accounting/types/transaction_currency_enum.py b/src/merge/resources/accounting/types/transaction_currency_enum.py index e02cdea7..df2a4f7b 100644 --- a/src/merge/resources/accounting/types/transaction_currency_enum.py +++ b/src/merge/resources/accounting/types/transaction_currency_enum.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ....core import enum + T_Result = typing.TypeVar("T_Result") -class TransactionCurrencyEnum(str, enum.Enum): +class TransactionCurrencyEnum(enum.StrEnum): """ * `XUA` - ADB Unit of Account * `AFN` - Afghan Afghani diff --git a/src/merge/resources/accounting/types/type_2_bb_enum.py b/src/merge/resources/accounting/types/type_2_bb_enum.py index 1506d7c8..90413a9a 100644 --- a/src/merge/resources/accounting/types/type_2_bb_enum.py +++ b/src/merge/resources/accounting/types/type_2_bb_enum.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ....core import enum + T_Result = typing.TypeVar("T_Result") -class Type2BbEnum(str, enum.Enum): +class Type2BbEnum(enum.StrEnum): """ * `INVENTORY` - INVENTORY * `NON_INVENTORY` - NON_INVENTORY diff --git a/src/merge/resources/accounting/types/underlying_transaction_type_enum.py b/src/merge/resources/accounting/types/underlying_transaction_type_enum.py index 924dbedf..711640ae 100644 --- a/src/merge/resources/accounting/types/underlying_transaction_type_enum.py +++ b/src/merge/resources/accounting/types/underlying_transaction_type_enum.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ....core import enum + T_Result = typing.TypeVar("T_Result") -class UnderlyingTransactionTypeEnum(str, enum.Enum): +class UnderlyingTransactionTypeEnum(enum.StrEnum): """ * `INVOICE` - INVOICE * `EXPENSE` - EXPENSE diff --git a/src/merge/resources/accounting/types/vendor_credit.py b/src/merge/resources/accounting/types/vendor_credit.py index d40294e3..c4d3cb0e 100644 --- a/src/merge/resources/accounting/types/vendor_credit.py +++ b/src/merge/resources/accounting/types/vendor_credit.py @@ -409,7 +409,7 @@ class VendorCredit(UncheckedBaseModel): The accounting period that the VendorCredit was generated in. """ - field_mappings: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None + field_mappings: typing.Optional[typing.Dict[str, typing.Any]] = None remote_data: typing.Optional[typing.List[RemoteData]] = None vendor_credit_url: typing.Optional[str] = pydantic.Field(default=None) """ @@ -426,11 +426,31 @@ class Config: extra = pydantic.Extra.allow -from .credit_note import CreditNote # noqa: E402, F401, I001 -from .credit_note_apply_line_for_credit_note import CreditNoteApplyLineForCreditNote # noqa: E402, F401, I001 -from .credit_note_apply_line_for_invoice import CreditNoteApplyLineForInvoice # noqa: E402, F401, I001 -from .invoice import Invoice # noqa: E402, F401, I001 -from .vendor_credit_apply_line_for_invoice import VendorCreditApplyLineForInvoice # noqa: E402, F401, I001 -from .vendor_credit_apply_line_for_vendor_credit import VendorCreditApplyLineForVendorCredit # noqa: E402, F401, I001 +from .credit_note import CreditNote # noqa: E402, I001 +from .credit_note_apply_line_for_credit_note import CreditNoteApplyLineForCreditNote # noqa: E402, I001 +from .credit_note_apply_line_for_credit_note_invoice import CreditNoteApplyLineForCreditNoteInvoice # noqa: E402, I001 +from .credit_note_apply_line_for_invoice import CreditNoteApplyLineForInvoice # noqa: E402, I001 +from .credit_note_apply_line_for_invoice_credit_note import CreditNoteApplyLineForInvoiceCreditNote # noqa: E402, I001 +from .invoice import Invoice # noqa: E402, I001 +from .invoice_applied_credit_notes_item import InvoiceAppliedCreditNotesItem # noqa: E402, I001 +from .invoice_applied_vendor_credits_item import InvoiceAppliedVendorCreditsItem # noqa: E402, I001 +from .vendor_credit_apply_line_for_invoice import VendorCreditApplyLineForInvoice # noqa: E402, I001 +from .vendor_credit_apply_line_for_invoice_vendor_credit import VendorCreditApplyLineForInvoiceVendorCredit # noqa: E402, I001 +from .vendor_credit_apply_line_for_vendor_credit import VendorCreditApplyLineForVendorCredit # noqa: E402, I001 +from .vendor_credit_apply_line_for_vendor_credit_invoice import VendorCreditApplyLineForVendorCreditInvoice # noqa: E402, I001 -update_forward_refs(VendorCredit) +update_forward_refs( + VendorCredit, + CreditNote=CreditNote, + CreditNoteApplyLineForCreditNote=CreditNoteApplyLineForCreditNote, + CreditNoteApplyLineForCreditNoteInvoice=CreditNoteApplyLineForCreditNoteInvoice, + CreditNoteApplyLineForInvoice=CreditNoteApplyLineForInvoice, + CreditNoteApplyLineForInvoiceCreditNote=CreditNoteApplyLineForInvoiceCreditNote, + Invoice=Invoice, + InvoiceAppliedCreditNotesItem=InvoiceAppliedCreditNotesItem, + InvoiceAppliedVendorCreditsItem=InvoiceAppliedVendorCreditsItem, + VendorCreditApplyLineForInvoice=VendorCreditApplyLineForInvoice, + VendorCreditApplyLineForInvoiceVendorCredit=VendorCreditApplyLineForInvoiceVendorCredit, + VendorCreditApplyLineForVendorCredit=VendorCreditApplyLineForVendorCredit, + VendorCreditApplyLineForVendorCreditInvoice=VendorCreditApplyLineForVendorCreditInvoice, +) diff --git a/src/merge/resources/accounting/types/vendor_credit_apply_line_for_invoice.py b/src/merge/resources/accounting/types/vendor_credit_apply_line_for_invoice.py index 83485a9e..fe225272 100644 --- a/src/merge/resources/accounting/types/vendor_credit_apply_line_for_invoice.py +++ b/src/merge/resources/accounting/types/vendor_credit_apply_line_for_invoice.py @@ -61,12 +61,31 @@ class Config: extra = pydantic.Extra.allow -from .credit_note import CreditNote # noqa: E402, F401, I001 -from .credit_note_apply_line_for_credit_note import CreditNoteApplyLineForCreditNote # noqa: E402, F401, I001 -from .credit_note_apply_line_for_invoice import CreditNoteApplyLineForInvoice # noqa: E402, F401, I001 -from .invoice import Invoice # noqa: E402, F401, I001 -from .vendor_credit import VendorCredit # noqa: E402, F401, I001 -from .vendor_credit_apply_line_for_vendor_credit import VendorCreditApplyLineForVendorCredit # noqa: E402, F401, I001 -from .vendor_credit_apply_line_for_invoice_vendor_credit import VendorCreditApplyLineForInvoiceVendorCredit # noqa: E402, F401, I001 - -update_forward_refs(VendorCreditApplyLineForInvoice) +from .credit_note import CreditNote # noqa: E402, I001 +from .credit_note_apply_line_for_credit_note import CreditNoteApplyLineForCreditNote # noqa: E402, I001 +from .credit_note_apply_line_for_credit_note_invoice import CreditNoteApplyLineForCreditNoteInvoice # noqa: E402, I001 +from .credit_note_apply_line_for_invoice import CreditNoteApplyLineForInvoice # noqa: E402, I001 +from .credit_note_apply_line_for_invoice_credit_note import CreditNoteApplyLineForInvoiceCreditNote # noqa: E402, I001 +from .invoice import Invoice # noqa: E402, I001 +from .invoice_applied_credit_notes_item import InvoiceAppliedCreditNotesItem # noqa: E402, I001 +from .invoice_applied_vendor_credits_item import InvoiceAppliedVendorCreditsItem # noqa: E402, I001 +from .vendor_credit import VendorCredit # noqa: E402, I001 +from .vendor_credit_apply_line_for_invoice_vendor_credit import VendorCreditApplyLineForInvoiceVendorCredit # noqa: E402, I001 +from .vendor_credit_apply_line_for_vendor_credit import VendorCreditApplyLineForVendorCredit # noqa: E402, I001 +from .vendor_credit_apply_line_for_vendor_credit_invoice import VendorCreditApplyLineForVendorCreditInvoice # noqa: E402, I001 + +update_forward_refs( + VendorCreditApplyLineForInvoice, + CreditNote=CreditNote, + CreditNoteApplyLineForCreditNote=CreditNoteApplyLineForCreditNote, + CreditNoteApplyLineForCreditNoteInvoice=CreditNoteApplyLineForCreditNoteInvoice, + CreditNoteApplyLineForInvoice=CreditNoteApplyLineForInvoice, + CreditNoteApplyLineForInvoiceCreditNote=CreditNoteApplyLineForInvoiceCreditNote, + Invoice=Invoice, + InvoiceAppliedCreditNotesItem=InvoiceAppliedCreditNotesItem, + InvoiceAppliedVendorCreditsItem=InvoiceAppliedVendorCreditsItem, + VendorCredit=VendorCredit, + VendorCreditApplyLineForInvoiceVendorCredit=VendorCreditApplyLineForInvoiceVendorCredit, + VendorCreditApplyLineForVendorCredit=VendorCreditApplyLineForVendorCredit, + VendorCreditApplyLineForVendorCreditInvoice=VendorCreditApplyLineForVendorCreditInvoice, +) diff --git a/src/merge/resources/accounting/types/vendor_credit_apply_line_for_vendor_credit.py b/src/merge/resources/accounting/types/vendor_credit_apply_line_for_vendor_credit.py index 46a8ae61..84078d19 100644 --- a/src/merge/resources/accounting/types/vendor_credit_apply_line_for_vendor_credit.py +++ b/src/merge/resources/accounting/types/vendor_credit_apply_line_for_vendor_credit.py @@ -61,12 +61,31 @@ class Config: extra = pydantic.Extra.allow -from .credit_note import CreditNote # noqa: E402, F401, I001 -from .credit_note_apply_line_for_credit_note import CreditNoteApplyLineForCreditNote # noqa: E402, F401, I001 -from .credit_note_apply_line_for_invoice import CreditNoteApplyLineForInvoice # noqa: E402, F401, I001 -from .invoice import Invoice # noqa: E402, F401, I001 -from .vendor_credit import VendorCredit # noqa: E402, F401, I001 -from .vendor_credit_apply_line_for_invoice import VendorCreditApplyLineForInvoice # noqa: E402, F401, I001 -from .vendor_credit_apply_line_for_vendor_credit_invoice import VendorCreditApplyLineForVendorCreditInvoice # noqa: E402, F401, I001 - -update_forward_refs(VendorCreditApplyLineForVendorCredit) +from .credit_note import CreditNote # noqa: E402, I001 +from .credit_note_apply_line_for_credit_note import CreditNoteApplyLineForCreditNote # noqa: E402, I001 +from .credit_note_apply_line_for_credit_note_invoice import CreditNoteApplyLineForCreditNoteInvoice # noqa: E402, I001 +from .credit_note_apply_line_for_invoice import CreditNoteApplyLineForInvoice # noqa: E402, I001 +from .credit_note_apply_line_for_invoice_credit_note import CreditNoteApplyLineForInvoiceCreditNote # noqa: E402, I001 +from .invoice import Invoice # noqa: E402, I001 +from .invoice_applied_credit_notes_item import InvoiceAppliedCreditNotesItem # noqa: E402, I001 +from .invoice_applied_vendor_credits_item import InvoiceAppliedVendorCreditsItem # noqa: E402, I001 +from .vendor_credit import VendorCredit # noqa: E402, I001 +from .vendor_credit_apply_line_for_invoice import VendorCreditApplyLineForInvoice # noqa: E402, I001 +from .vendor_credit_apply_line_for_invoice_vendor_credit import VendorCreditApplyLineForInvoiceVendorCredit # noqa: E402, I001 +from .vendor_credit_apply_line_for_vendor_credit_invoice import VendorCreditApplyLineForVendorCreditInvoice # noqa: E402, I001 + +update_forward_refs( + VendorCreditApplyLineForVendorCredit, + CreditNote=CreditNote, + CreditNoteApplyLineForCreditNote=CreditNoteApplyLineForCreditNote, + CreditNoteApplyLineForCreditNoteInvoice=CreditNoteApplyLineForCreditNoteInvoice, + CreditNoteApplyLineForInvoice=CreditNoteApplyLineForInvoice, + CreditNoteApplyLineForInvoiceCreditNote=CreditNoteApplyLineForInvoiceCreditNote, + Invoice=Invoice, + InvoiceAppliedCreditNotesItem=InvoiceAppliedCreditNotesItem, + InvoiceAppliedVendorCreditsItem=InvoiceAppliedVendorCreditsItem, + VendorCredit=VendorCredit, + VendorCreditApplyLineForInvoice=VendorCreditApplyLineForInvoice, + VendorCreditApplyLineForInvoiceVendorCredit=VendorCreditApplyLineForInvoiceVendorCredit, + VendorCreditApplyLineForVendorCreditInvoice=VendorCreditApplyLineForVendorCreditInvoice, +) diff --git a/src/merge/resources/accounting/types/vendor_credit_apply_line_for_vendor_credit_request.py b/src/merge/resources/accounting/types/vendor_credit_apply_line_for_vendor_credit_request.py index 402394d8..fa378d72 100644 --- a/src/merge/resources/accounting/types/vendor_credit_apply_line_for_vendor_credit_request.py +++ b/src/merge/resources/accounting/types/vendor_credit_apply_line_for_vendor_credit_request.py @@ -39,8 +39,8 @@ class VendorCreditApplyLineForVendorCreditRequest(UncheckedBaseModel): The amount of the VendorCredit applied to the invoice. """ - integration_params: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None - linked_account_params: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None + integration_params: typing.Optional[typing.Dict[str, typing.Any]] = None + linked_account_params: typing.Optional[typing.Dict[str, typing.Any]] = None if IS_PYDANTIC_V2: model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2 @@ -52,12 +52,4 @@ class Config: extra = pydantic.Extra.allow -from .credit_note import CreditNote # noqa: E402, F401, I001 -from .credit_note_apply_line_for_credit_note import CreditNoteApplyLineForCreditNote # noqa: E402, F401, I001 -from .credit_note_apply_line_for_invoice import CreditNoteApplyLineForInvoice # noqa: E402, F401, I001 -from .invoice import Invoice # noqa: E402, F401, I001 -from .vendor_credit import VendorCredit # noqa: E402, F401, I001 -from .vendor_credit_apply_line_for_invoice import VendorCreditApplyLineForInvoice # noqa: E402, F401, I001 -from .vendor_credit_apply_line_for_vendor_credit import VendorCreditApplyLineForVendorCredit # noqa: E402, F401, I001 - update_forward_refs(VendorCreditApplyLineForVendorCreditRequest) diff --git a/src/merge/resources/accounting/types/vendor_credit_line_request.py b/src/merge/resources/accounting/types/vendor_credit_line_request.py index c346c7a5..75802427 100644 --- a/src/merge/resources/accounting/types/vendor_credit_line_request.py +++ b/src/merge/resources/accounting/types/vendor_credit_line_request.py @@ -67,8 +67,8 @@ class VendorCreditLineRequest(UncheckedBaseModel): The vendor credit line item's exchange rate. """ - integration_params: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None - linked_account_params: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None + integration_params: typing.Optional[typing.Dict[str, typing.Any]] = None + linked_account_params: typing.Optional[typing.Dict[str, typing.Any]] = None if IS_PYDANTIC_V2: model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2 diff --git a/src/merge/resources/accounting/types/vendor_credit_request.py b/src/merge/resources/accounting/types/vendor_credit_request.py index 12dad306..715fa89d 100644 --- a/src/merge/resources/accounting/types/vendor_credit_request.py +++ b/src/merge/resources/accounting/types/vendor_credit_request.py @@ -386,8 +386,8 @@ class VendorCreditRequest(UncheckedBaseModel): The accounting period that the VendorCredit was generated in. """ - integration_params: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None - linked_account_params: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None + integration_params: typing.Optional[typing.Dict[str, typing.Any]] = None + linked_account_params: typing.Optional[typing.Dict[str, typing.Any]] = None vendor_credit_url: typing.Optional[str] = pydantic.Field(default=None) """ The 3rd party URL of the vendor credit. @@ -403,12 +403,4 @@ class Config: extra = pydantic.Extra.allow -from .credit_note import CreditNote # noqa: E402, F401, I001 -from .credit_note_apply_line_for_credit_note import CreditNoteApplyLineForCreditNote # noqa: E402, F401, I001 -from .credit_note_apply_line_for_invoice import CreditNoteApplyLineForInvoice # noqa: E402, F401, I001 -from .invoice import Invoice # noqa: E402, F401, I001 -from .vendor_credit import VendorCredit # noqa: E402, F401, I001 -from .vendor_credit_apply_line_for_invoice import VendorCreditApplyLineForInvoice # noqa: E402, F401, I001 -from .vendor_credit_apply_line_for_vendor_credit import VendorCreditApplyLineForVendorCredit # noqa: E402, F401, I001 - update_forward_refs(VendorCreditRequest) diff --git a/src/merge/resources/accounting/types/vendor_credit_response.py b/src/merge/resources/accounting/types/vendor_credit_response.py index 9dab6cb4..29705783 100644 --- a/src/merge/resources/accounting/types/vendor_credit_response.py +++ b/src/merge/resources/accounting/types/vendor_credit_response.py @@ -28,12 +28,33 @@ class Config: extra = pydantic.Extra.allow -from .credit_note import CreditNote # noqa: E402, F401, I001 -from .credit_note_apply_line_for_credit_note import CreditNoteApplyLineForCreditNote # noqa: E402, F401, I001 -from .credit_note_apply_line_for_invoice import CreditNoteApplyLineForInvoice # noqa: E402, F401, I001 -from .invoice import Invoice # noqa: E402, F401, I001 -from .vendor_credit import VendorCredit # noqa: E402, F401, I001 -from .vendor_credit_apply_line_for_invoice import VendorCreditApplyLineForInvoice # noqa: E402, F401, I001 -from .vendor_credit_apply_line_for_vendor_credit import VendorCreditApplyLineForVendorCredit # noqa: E402, F401, I001 - -update_forward_refs(VendorCreditResponse) +from .credit_note import CreditNote # noqa: E402, I001 +from .credit_note_apply_line_for_credit_note import CreditNoteApplyLineForCreditNote # noqa: E402, I001 +from .credit_note_apply_line_for_credit_note_invoice import CreditNoteApplyLineForCreditNoteInvoice # noqa: E402, I001 +from .credit_note_apply_line_for_invoice import CreditNoteApplyLineForInvoice # noqa: E402, I001 +from .credit_note_apply_line_for_invoice_credit_note import CreditNoteApplyLineForInvoiceCreditNote # noqa: E402, I001 +from .invoice import Invoice # noqa: E402, I001 +from .invoice_applied_credit_notes_item import InvoiceAppliedCreditNotesItem # noqa: E402, I001 +from .invoice_applied_vendor_credits_item import InvoiceAppliedVendorCreditsItem # noqa: E402, I001 +from .vendor_credit import VendorCredit # noqa: E402, I001 +from .vendor_credit_apply_line_for_invoice import VendorCreditApplyLineForInvoice # noqa: E402, I001 +from .vendor_credit_apply_line_for_invoice_vendor_credit import VendorCreditApplyLineForInvoiceVendorCredit # noqa: E402, I001 +from .vendor_credit_apply_line_for_vendor_credit import VendorCreditApplyLineForVendorCredit # noqa: E402, I001 +from .vendor_credit_apply_line_for_vendor_credit_invoice import VendorCreditApplyLineForVendorCreditInvoice # noqa: E402, I001 + +update_forward_refs( + VendorCreditResponse, + CreditNote=CreditNote, + CreditNoteApplyLineForCreditNote=CreditNoteApplyLineForCreditNote, + CreditNoteApplyLineForCreditNoteInvoice=CreditNoteApplyLineForCreditNoteInvoice, + CreditNoteApplyLineForInvoice=CreditNoteApplyLineForInvoice, + CreditNoteApplyLineForInvoiceCreditNote=CreditNoteApplyLineForInvoiceCreditNote, + Invoice=Invoice, + InvoiceAppliedCreditNotesItem=InvoiceAppliedCreditNotesItem, + InvoiceAppliedVendorCreditsItem=InvoiceAppliedVendorCreditsItem, + VendorCredit=VendorCredit, + VendorCreditApplyLineForInvoice=VendorCreditApplyLineForInvoice, + VendorCreditApplyLineForInvoiceVendorCredit=VendorCreditApplyLineForInvoiceVendorCredit, + VendorCreditApplyLineForVendorCredit=VendorCreditApplyLineForVendorCredit, + VendorCreditApplyLineForVendorCreditInvoice=VendorCreditApplyLineForVendorCreditInvoice, +) diff --git a/src/merge/resources/ats/__init__.py b/src/merge/resources/ats/__init__.py index 53301946..876110f3 100644 --- a/src/merge/resources/ats/__init__.py +++ b/src/merge/resources/ats/__init__.py @@ -590,8 +590,10 @@ def __getattr__(attr_name: str) -> typing.Any: raise AttributeError(f"No {attr_name} found in _dynamic_imports for module name -> {__name__}") try: module = import_module(module_name, __package__) - result = getattr(module, attr_name) - return result + if module_name == f".{attr_name}": + return module + else: + return getattr(module, attr_name) except ImportError as e: raise ImportError(f"Failed to import {attr_name} from {module_name}: {e}") from e except AttributeError as e: diff --git a/src/merge/resources/ats/resources/__init__.py b/src/merge/resources/ats/resources/__init__.py index b07955b7..4d439538 100644 --- a/src/merge/resources/ats/resources/__init__.py +++ b/src/merge/resources/ats/resources/__init__.py @@ -98,39 +98,39 @@ "OffersRetrieveRequestExpandItem": ".offers", "ScorecardsListRequestExpandItem": ".scorecards", "ScorecardsRetrieveRequestExpandItem": ".scorecards", - "account_details": ".", - "account_token": ".", - "activities": ".", - "applications": ".", - "async_passthrough": ".", - "attachments": ".", - "audit_trail": ".", - "available_actions": ".", - "candidates": ".", - "delete_account": ".", - "departments": ".", - "eeocs": ".", - "field_mapping": ".", - "force_resync": ".", - "generate_key": ".", - "interviews": ".", - "issues": ".", - "job_interview_stages": ".", - "job_postings": ".", - "jobs": ".", - "link_token": ".", - "linked_accounts": ".", - "offers": ".", - "offices": ".", - "passthrough": ".", - "regenerate_key": ".", - "reject_reasons": ".", - "scopes": ".", - "scorecards": ".", - "sync_status": ".", - "tags": ".", - "users": ".", - "webhook_receivers": ".", + "account_details": ".account_details", + "account_token": ".account_token", + "activities": ".activities", + "applications": ".applications", + "async_passthrough": ".async_passthrough", + "attachments": ".attachments", + "audit_trail": ".audit_trail", + "available_actions": ".available_actions", + "candidates": ".candidates", + "delete_account": ".delete_account", + "departments": ".departments", + "eeocs": ".eeocs", + "field_mapping": ".field_mapping", + "force_resync": ".force_resync", + "generate_key": ".generate_key", + "interviews": ".interviews", + "issues": ".issues", + "job_interview_stages": ".job_interview_stages", + "job_postings": ".job_postings", + "jobs": ".jobs", + "link_token": ".link_token", + "linked_accounts": ".linked_accounts", + "offers": ".offers", + "offices": ".offices", + "passthrough": ".passthrough", + "regenerate_key": ".regenerate_key", + "reject_reasons": ".reject_reasons", + "scopes": ".scopes", + "scorecards": ".scorecards", + "sync_status": ".sync_status", + "tags": ".tags", + "users": ".users", + "webhook_receivers": ".webhook_receivers", } @@ -140,8 +140,10 @@ def __getattr__(attr_name: str) -> typing.Any: raise AttributeError(f"No {attr_name} found in _dynamic_imports for module name -> {__name__}") try: module = import_module(module_name, __package__) - result = getattr(module, attr_name) - return result + if module_name == f".{attr_name}": + return module + else: + return getattr(module, attr_name) except ImportError as e: raise ImportError(f"Failed to import {attr_name} from {module_name}: {e}") from e except AttributeError as e: diff --git a/src/merge/resources/ats/resources/account_details/raw_client.py b/src/merge/resources/ats/resources/account_details/raw_client.py index 53941b58..1d2fea07 100644 --- a/src/merge/resources/ats/resources/account_details/raw_client.py +++ b/src/merge/resources/ats/resources/account_details/raw_client.py @@ -6,9 +6,11 @@ from .....core.api_error import ApiError from .....core.client_wrapper import AsyncClientWrapper, SyncClientWrapper from .....core.http_response import AsyncHttpResponse, HttpResponse +from .....core.parse_error import ParsingError from .....core.request_options import RequestOptions from .....core.unchecked_base_model import construct_type from ...types.account_details import AccountDetails +from pydantic import ValidationError class RawAccountDetailsClient: @@ -47,6 +49,10 @@ def retrieve(self, *, request_options: typing.Optional[RequestOptions] = None) - _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) @@ -88,4 +94,8 @@ async def retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) diff --git a/src/merge/resources/ats/resources/account_token/raw_client.py b/src/merge/resources/ats/resources/account_token/raw_client.py index 4baf51d2..53fd7c38 100644 --- a/src/merge/resources/ats/resources/account_token/raw_client.py +++ b/src/merge/resources/ats/resources/account_token/raw_client.py @@ -7,10 +7,12 @@ from .....core.client_wrapper import AsyncClientWrapper, SyncClientWrapper from .....core.http_response import AsyncHttpResponse, HttpResponse from .....core.jsonable_encoder import jsonable_encoder +from .....core.parse_error import ParsingError from .....core.request_options import RequestOptions from .....core.unchecked_base_model import construct_type from ...types.account_token import AccountToken from ...types.regenerate_account_token import RegenerateAccountToken +from pydantic import ValidationError class RawAccountTokenClient: @@ -53,6 +55,10 @@ def retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) def regenerate_create( @@ -89,6 +95,10 @@ def regenerate_create( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) @@ -132,6 +142,10 @@ async def retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) async def regenerate_create( @@ -168,4 +182,8 @@ async def regenerate_create( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) diff --git a/src/merge/resources/ats/resources/activities/__init__.py b/src/merge/resources/ats/resources/activities/__init__.py index a365e7bc..2dc1f4da 100644 --- a/src/merge/resources/ats/resources/activities/__init__.py +++ b/src/merge/resources/ats/resources/activities/__init__.py @@ -26,8 +26,10 @@ def __getattr__(attr_name: str) -> typing.Any: raise AttributeError(f"No {attr_name} found in _dynamic_imports for module name -> {__name__}") try: module = import_module(module_name, __package__) - result = getattr(module, attr_name) - return result + if module_name == f".{attr_name}": + return module + else: + return getattr(module, attr_name) except ImportError as e: raise ImportError(f"Failed to import {attr_name} from {module_name}: {e}") from e except AttributeError as e: diff --git a/src/merge/resources/ats/resources/activities/raw_client.py b/src/merge/resources/ats/resources/activities/raw_client.py index d656f6c0..8a26093e 100644 --- a/src/merge/resources/ats/resources/activities/raw_client.py +++ b/src/merge/resources/ats/resources/activities/raw_client.py @@ -9,6 +9,7 @@ from .....core.datetime_utils import serialize_datetime from .....core.http_response import AsyncHttpResponse, HttpResponse from .....core.jsonable_encoder import jsonable_encoder +from .....core.parse_error import ParsingError from .....core.request_options import RequestOptions from .....core.unchecked_base_model import construct_type from ...types.activity import Activity @@ -20,6 +21,7 @@ from .types.activities_list_request_show_enum_origins import ActivitiesListRequestShowEnumOrigins from .types.activities_retrieve_request_remote_fields import ActivitiesRetrieveRequestRemoteFields from .types.activities_retrieve_request_show_enum_origins import ActivitiesRetrieveRequestShowEnumOrigins +from pydantic import ValidationError # this is used as the default value for optional parameters OMIT = typing.cast(typing.Any, ...) @@ -137,6 +139,10 @@ def list( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) def create( @@ -201,6 +207,10 @@ def create( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) def retrieve( @@ -269,6 +279,10 @@ def retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) def meta_post_retrieve( @@ -305,6 +319,10 @@ def meta_post_retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) @@ -420,6 +438,10 @@ async def list( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) async def create( @@ -484,6 +506,10 @@ async def create( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) async def retrieve( @@ -552,6 +578,10 @@ async def retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) async def meta_post_retrieve( @@ -588,4 +618,8 @@ async def meta_post_retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) diff --git a/src/merge/resources/ats/resources/activities/types/__init__.py b/src/merge/resources/ats/resources/activities/types/__init__.py index 319b7dae..742468b0 100644 --- a/src/merge/resources/ats/resources/activities/types/__init__.py +++ b/src/merge/resources/ats/resources/activities/types/__init__.py @@ -24,8 +24,10 @@ def __getattr__(attr_name: str) -> typing.Any: raise AttributeError(f"No {attr_name} found in _dynamic_imports for module name -> {__name__}") try: module = import_module(module_name, __package__) - result = getattr(module, attr_name) - return result + if module_name == f".{attr_name}": + return module + else: + return getattr(module, attr_name) except ImportError as e: raise ImportError(f"Failed to import {attr_name} from {module_name}: {e}") from e except AttributeError as e: diff --git a/src/merge/resources/ats/resources/activities/types/activities_list_request_remote_fields.py b/src/merge/resources/ats/resources/activities/types/activities_list_request_remote_fields.py index bd203f38..695bb3e9 100644 --- a/src/merge/resources/ats/resources/activities/types/activities_list_request_remote_fields.py +++ b/src/merge/resources/ats/resources/activities/types/activities_list_request_remote_fields.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ......core import enum + T_Result = typing.TypeVar("T_Result") -class ActivitiesListRequestRemoteFields(str, enum.Enum): +class ActivitiesListRequestRemoteFields(enum.StrEnum): ACTIVITY_TYPE = "activity_type" ACTIVITY_TYPE_VISIBILITY = "activity_type,visibility" VISIBILITY = "visibility" diff --git a/src/merge/resources/ats/resources/activities/types/activities_list_request_show_enum_origins.py b/src/merge/resources/ats/resources/activities/types/activities_list_request_show_enum_origins.py index c38d72ac..06052ece 100644 --- a/src/merge/resources/ats/resources/activities/types/activities_list_request_show_enum_origins.py +++ b/src/merge/resources/ats/resources/activities/types/activities_list_request_show_enum_origins.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ......core import enum + T_Result = typing.TypeVar("T_Result") -class ActivitiesListRequestShowEnumOrigins(str, enum.Enum): +class ActivitiesListRequestShowEnumOrigins(enum.StrEnum): ACTIVITY_TYPE = "activity_type" ACTIVITY_TYPE_VISIBILITY = "activity_type,visibility" VISIBILITY = "visibility" diff --git a/src/merge/resources/ats/resources/activities/types/activities_retrieve_request_remote_fields.py b/src/merge/resources/ats/resources/activities/types/activities_retrieve_request_remote_fields.py index 3290370e..232f2611 100644 --- a/src/merge/resources/ats/resources/activities/types/activities_retrieve_request_remote_fields.py +++ b/src/merge/resources/ats/resources/activities/types/activities_retrieve_request_remote_fields.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ......core import enum + T_Result = typing.TypeVar("T_Result") -class ActivitiesRetrieveRequestRemoteFields(str, enum.Enum): +class ActivitiesRetrieveRequestRemoteFields(enum.StrEnum): ACTIVITY_TYPE = "activity_type" ACTIVITY_TYPE_VISIBILITY = "activity_type,visibility" VISIBILITY = "visibility" diff --git a/src/merge/resources/ats/resources/activities/types/activities_retrieve_request_show_enum_origins.py b/src/merge/resources/ats/resources/activities/types/activities_retrieve_request_show_enum_origins.py index 26439eb1..f00fad5b 100644 --- a/src/merge/resources/ats/resources/activities/types/activities_retrieve_request_show_enum_origins.py +++ b/src/merge/resources/ats/resources/activities/types/activities_retrieve_request_show_enum_origins.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ......core import enum + T_Result = typing.TypeVar("T_Result") -class ActivitiesRetrieveRequestShowEnumOrigins(str, enum.Enum): +class ActivitiesRetrieveRequestShowEnumOrigins(enum.StrEnum): ACTIVITY_TYPE = "activity_type" ACTIVITY_TYPE_VISIBILITY = "activity_type,visibility" VISIBILITY = "visibility" diff --git a/src/merge/resources/ats/resources/applications/__init__.py b/src/merge/resources/ats/resources/applications/__init__.py index e7b1622c..15079471 100644 --- a/src/merge/resources/ats/resources/applications/__init__.py +++ b/src/merge/resources/ats/resources/applications/__init__.py @@ -19,8 +19,10 @@ def __getattr__(attr_name: str) -> typing.Any: raise AttributeError(f"No {attr_name} found in _dynamic_imports for module name -> {__name__}") try: module = import_module(module_name, __package__) - result = getattr(module, attr_name) - return result + if module_name == f".{attr_name}": + return module + else: + return getattr(module, attr_name) except ImportError as e: raise ImportError(f"Failed to import {attr_name} from {module_name}: {e}") from e except AttributeError as e: diff --git a/src/merge/resources/ats/resources/applications/raw_client.py b/src/merge/resources/ats/resources/applications/raw_client.py index 25d21918..d6b6923d 100644 --- a/src/merge/resources/ats/resources/applications/raw_client.py +++ b/src/merge/resources/ats/resources/applications/raw_client.py @@ -9,6 +9,7 @@ from .....core.datetime_utils import serialize_datetime from .....core.http_response import AsyncHttpResponse, HttpResponse from .....core.jsonable_encoder import jsonable_encoder +from .....core.parse_error import ParsingError from .....core.request_options import RequestOptions from .....core.unchecked_base_model import construct_type from ...types.application import Application @@ -18,6 +19,7 @@ from ...types.paginated_application_list import PaginatedApplicationList from .types.applications_list_request_expand_item import ApplicationsListRequestExpandItem from .types.applications_retrieve_request_expand_item import ApplicationsRetrieveRequestExpandItem +from pydantic import ValidationError # this is used as the default value for optional parameters OMIT = typing.cast(typing.Any, ...) @@ -152,6 +154,10 @@ def list( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) def create( @@ -219,6 +225,10 @@ def create( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) def retrieve( @@ -279,6 +289,10 @@ def retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) def change_stage_create( @@ -347,6 +361,10 @@ def change_stage_create( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) def meta_post_retrieve( @@ -392,6 +410,10 @@ def meta_post_retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) @@ -524,6 +546,10 @@ async def list( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) async def create( @@ -591,6 +617,10 @@ async def create( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) async def retrieve( @@ -651,6 +681,10 @@ async def retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) async def change_stage_create( @@ -719,6 +753,10 @@ async def change_stage_create( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) async def meta_post_retrieve( @@ -764,4 +802,8 @@ async def meta_post_retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) diff --git a/src/merge/resources/ats/resources/applications/types/__init__.py b/src/merge/resources/ats/resources/applications/types/__init__.py index 35c9fbb8..f0f8736a 100644 --- a/src/merge/resources/ats/resources/applications/types/__init__.py +++ b/src/merge/resources/ats/resources/applications/types/__init__.py @@ -20,8 +20,10 @@ def __getattr__(attr_name: str) -> typing.Any: raise AttributeError(f"No {attr_name} found in _dynamic_imports for module name -> {__name__}") try: module = import_module(module_name, __package__) - result = getattr(module, attr_name) - return result + if module_name == f".{attr_name}": + return module + else: + return getattr(module, attr_name) except ImportError as e: raise ImportError(f"Failed to import {attr_name} from {module_name}: {e}") from e except AttributeError as e: diff --git a/src/merge/resources/ats/resources/applications/types/applications_list_request_expand_item.py b/src/merge/resources/ats/resources/applications/types/applications_list_request_expand_item.py index 3c9011af..f6b31056 100644 --- a/src/merge/resources/ats/resources/applications/types/applications_list_request_expand_item.py +++ b/src/merge/resources/ats/resources/applications/types/applications_list_request_expand_item.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ......core import enum + T_Result = typing.TypeVar("T_Result") -class ApplicationsListRequestExpandItem(str, enum.Enum): +class ApplicationsListRequestExpandItem(enum.StrEnum): CANDIDATE = "candidate" CREDITED_TO = "credited_to" CURRENT_STAGE = "current_stage" diff --git a/src/merge/resources/ats/resources/applications/types/applications_retrieve_request_expand_item.py b/src/merge/resources/ats/resources/applications/types/applications_retrieve_request_expand_item.py index 19a3f612..7b621443 100644 --- a/src/merge/resources/ats/resources/applications/types/applications_retrieve_request_expand_item.py +++ b/src/merge/resources/ats/resources/applications/types/applications_retrieve_request_expand_item.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ......core import enum + T_Result = typing.TypeVar("T_Result") -class ApplicationsRetrieveRequestExpandItem(str, enum.Enum): +class ApplicationsRetrieveRequestExpandItem(enum.StrEnum): CANDIDATE = "candidate" CREDITED_TO = "credited_to" CURRENT_STAGE = "current_stage" diff --git a/src/merge/resources/ats/resources/async_passthrough/__init__.py b/src/merge/resources/ats/resources/async_passthrough/__init__.py index 375c7953..11090986 100644 --- a/src/merge/resources/ats/resources/async_passthrough/__init__.py +++ b/src/merge/resources/ats/resources/async_passthrough/__init__.py @@ -16,8 +16,10 @@ def __getattr__(attr_name: str) -> typing.Any: raise AttributeError(f"No {attr_name} found in _dynamic_imports for module name -> {__name__}") try: module = import_module(module_name, __package__) - result = getattr(module, attr_name) - return result + if module_name == f".{attr_name}": + return module + else: + return getattr(module, attr_name) except ImportError as e: raise ImportError(f"Failed to import {attr_name} from {module_name}: {e}") from e except AttributeError as e: diff --git a/src/merge/resources/ats/resources/async_passthrough/raw_client.py b/src/merge/resources/ats/resources/async_passthrough/raw_client.py index e5c894c1..7a733e18 100644 --- a/src/merge/resources/ats/resources/async_passthrough/raw_client.py +++ b/src/merge/resources/ats/resources/async_passthrough/raw_client.py @@ -7,11 +7,13 @@ from .....core.client_wrapper import AsyncClientWrapper, SyncClientWrapper from .....core.http_response import AsyncHttpResponse, HttpResponse from .....core.jsonable_encoder import jsonable_encoder +from .....core.parse_error import ParsingError from .....core.request_options import RequestOptions from .....core.unchecked_base_model import construct_type from ...types.async_passthrough_reciept import AsyncPassthroughReciept from ...types.data_passthrough_request import DataPassthroughRequest from .types.async_passthrough_retrieve_response import AsyncPassthroughRetrieveResponse +from pydantic import ValidationError # this is used as the default value for optional parameters OMIT = typing.cast(typing.Any, ...) @@ -62,6 +64,10 @@ def create( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) def retrieve( @@ -100,6 +106,10 @@ def retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) @@ -148,6 +158,10 @@ async def create( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) async def retrieve( @@ -186,4 +200,8 @@ async def retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) diff --git a/src/merge/resources/ats/resources/async_passthrough/types/__init__.py b/src/merge/resources/ats/resources/async_passthrough/types/__init__.py index f6e9bec9..dc335400 100644 --- a/src/merge/resources/ats/resources/async_passthrough/types/__init__.py +++ b/src/merge/resources/ats/resources/async_passthrough/types/__init__.py @@ -16,8 +16,10 @@ def __getattr__(attr_name: str) -> typing.Any: raise AttributeError(f"No {attr_name} found in _dynamic_imports for module name -> {__name__}") try: module = import_module(module_name, __package__) - result = getattr(module, attr_name) - return result + if module_name == f".{attr_name}": + return module + else: + return getattr(module, attr_name) except ImportError as e: raise ImportError(f"Failed to import {attr_name} from {module_name}: {e}") from e except AttributeError as e: diff --git a/src/merge/resources/ats/resources/attachments/raw_client.py b/src/merge/resources/ats/resources/attachments/raw_client.py index a0e48daf..147ba265 100644 --- a/src/merge/resources/ats/resources/attachments/raw_client.py +++ b/src/merge/resources/ats/resources/attachments/raw_client.py @@ -9,6 +9,7 @@ from .....core.datetime_utils import serialize_datetime from .....core.http_response import AsyncHttpResponse, HttpResponse from .....core.jsonable_encoder import jsonable_encoder +from .....core.parse_error import ParsingError from .....core.request_options import RequestOptions from .....core.unchecked_base_model import construct_type from ...types.attachment import Attachment @@ -16,6 +17,7 @@ from ...types.attachment_response import AttachmentResponse from ...types.meta_response import MetaResponse from ...types.paginated_attachment_list import PaginatedAttachmentList +from pydantic import ValidationError # this is used as the default value for optional parameters OMIT = typing.cast(typing.Any, ...) @@ -135,6 +137,10 @@ def list( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) def create( @@ -199,6 +205,10 @@ def create( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) def retrieve( @@ -269,6 +279,10 @@ def retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) def meta_post_retrieve( @@ -305,6 +319,10 @@ def meta_post_retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) @@ -422,6 +440,10 @@ async def list( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) async def create( @@ -486,6 +508,10 @@ async def create( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) async def retrieve( @@ -556,6 +582,10 @@ async def retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) async def meta_post_retrieve( @@ -592,4 +622,8 @@ async def meta_post_retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) diff --git a/src/merge/resources/ats/resources/audit_trail/raw_client.py b/src/merge/resources/ats/resources/audit_trail/raw_client.py index 888a9a67..bfa31482 100644 --- a/src/merge/resources/ats/resources/audit_trail/raw_client.py +++ b/src/merge/resources/ats/resources/audit_trail/raw_client.py @@ -6,9 +6,11 @@ from .....core.api_error import ApiError from .....core.client_wrapper import AsyncClientWrapper, SyncClientWrapper from .....core.http_response import AsyncHttpResponse, HttpResponse +from .....core.parse_error import ParsingError from .....core.request_options import RequestOptions from .....core.unchecked_base_model import construct_type from ...types.paginated_audit_log_event_list import PaginatedAuditLogEventList +from pydantic import ValidationError class RawAuditTrailClient: @@ -83,6 +85,10 @@ def list( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) @@ -158,4 +164,8 @@ async def list( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) diff --git a/src/merge/resources/ats/resources/available_actions/raw_client.py b/src/merge/resources/ats/resources/available_actions/raw_client.py index 6157a71b..6d0a7134 100644 --- a/src/merge/resources/ats/resources/available_actions/raw_client.py +++ b/src/merge/resources/ats/resources/available_actions/raw_client.py @@ -6,9 +6,11 @@ from .....core.api_error import ApiError from .....core.client_wrapper import AsyncClientWrapper, SyncClientWrapper from .....core.http_response import AsyncHttpResponse, HttpResponse +from .....core.parse_error import ParsingError from .....core.request_options import RequestOptions from .....core.unchecked_base_model import construct_type from ...types.available_actions import AvailableActions +from pydantic import ValidationError class RawAvailableActionsClient: @@ -47,6 +49,10 @@ def retrieve(self, *, request_options: typing.Optional[RequestOptions] = None) - _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) @@ -88,4 +94,8 @@ async def retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) diff --git a/src/merge/resources/ats/resources/candidates/__init__.py b/src/merge/resources/ats/resources/candidates/__init__.py index 7a95f560..ccec300c 100644 --- a/src/merge/resources/ats/resources/candidates/__init__.py +++ b/src/merge/resources/ats/resources/candidates/__init__.py @@ -19,8 +19,10 @@ def __getattr__(attr_name: str) -> typing.Any: raise AttributeError(f"No {attr_name} found in _dynamic_imports for module name -> {__name__}") try: module = import_module(module_name, __package__) - result = getattr(module, attr_name) - return result + if module_name == f".{attr_name}": + return module + else: + return getattr(module, attr_name) except ImportError as e: raise ImportError(f"Failed to import {attr_name} from {module_name}: {e}") from e except AttributeError as e: diff --git a/src/merge/resources/ats/resources/candidates/raw_client.py b/src/merge/resources/ats/resources/candidates/raw_client.py index d6a134ff..b2766059 100644 --- a/src/merge/resources/ats/resources/candidates/raw_client.py +++ b/src/merge/resources/ats/resources/candidates/raw_client.py @@ -9,6 +9,7 @@ from .....core.datetime_utils import serialize_datetime from .....core.http_response import AsyncHttpResponse, HttpResponse from .....core.jsonable_encoder import jsonable_encoder +from .....core.parse_error import ParsingError from .....core.request_options import RequestOptions from .....core.unchecked_base_model import construct_type from ...types.candidate import Candidate @@ -20,6 +21,7 @@ from ...types.patched_candidate_request import PatchedCandidateRequest from .types.candidates_list_request_expand_item import CandidatesListRequestExpandItem from .types.candidates_retrieve_request_expand_item import CandidatesRetrieveRequestExpandItem +from pydantic import ValidationError # this is used as the default value for optional parameters OMIT = typing.cast(typing.Any, ...) @@ -144,6 +146,10 @@ def list( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) def create( @@ -208,6 +214,10 @@ def create( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) def retrieve( @@ -268,6 +278,10 @@ def retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) def partial_update( @@ -335,6 +349,10 @@ def partial_update( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) def ignore_create( @@ -376,6 +394,10 @@ def ignore_create( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) def meta_patch_retrieve( @@ -414,6 +436,10 @@ def meta_patch_retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) def meta_post_retrieve( @@ -450,6 +476,10 @@ def meta_post_retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) @@ -572,6 +602,10 @@ async def list( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) async def create( @@ -636,6 +670,10 @@ async def create( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) async def retrieve( @@ -696,6 +734,10 @@ async def retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) async def partial_update( @@ -763,6 +805,10 @@ async def partial_update( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) async def ignore_create( @@ -804,6 +850,10 @@ async def ignore_create( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) async def meta_patch_retrieve( @@ -842,6 +892,10 @@ async def meta_patch_retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) async def meta_post_retrieve( @@ -878,4 +932,8 @@ async def meta_post_retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) diff --git a/src/merge/resources/ats/resources/candidates/types/__init__.py b/src/merge/resources/ats/resources/candidates/types/__init__.py index 1d2180eb..fc851f9e 100644 --- a/src/merge/resources/ats/resources/candidates/types/__init__.py +++ b/src/merge/resources/ats/resources/candidates/types/__init__.py @@ -20,8 +20,10 @@ def __getattr__(attr_name: str) -> typing.Any: raise AttributeError(f"No {attr_name} found in _dynamic_imports for module name -> {__name__}") try: module = import_module(module_name, __package__) - result = getattr(module, attr_name) - return result + if module_name == f".{attr_name}": + return module + else: + return getattr(module, attr_name) except ImportError as e: raise ImportError(f"Failed to import {attr_name} from {module_name}: {e}") from e except AttributeError as e: diff --git a/src/merge/resources/ats/resources/candidates/types/candidates_list_request_expand_item.py b/src/merge/resources/ats/resources/candidates/types/candidates_list_request_expand_item.py index 94d1c115..c441608e 100644 --- a/src/merge/resources/ats/resources/candidates/types/candidates_list_request_expand_item.py +++ b/src/merge/resources/ats/resources/candidates/types/candidates_list_request_expand_item.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ......core import enum + T_Result = typing.TypeVar("T_Result") -class CandidatesListRequestExpandItem(str, enum.Enum): +class CandidatesListRequestExpandItem(enum.StrEnum): APPLICATIONS = "applications" ATTACHMENTS = "attachments" diff --git a/src/merge/resources/ats/resources/candidates/types/candidates_retrieve_request_expand_item.py b/src/merge/resources/ats/resources/candidates/types/candidates_retrieve_request_expand_item.py index 8e68683e..dc017179 100644 --- a/src/merge/resources/ats/resources/candidates/types/candidates_retrieve_request_expand_item.py +++ b/src/merge/resources/ats/resources/candidates/types/candidates_retrieve_request_expand_item.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ......core import enum + T_Result = typing.TypeVar("T_Result") -class CandidatesRetrieveRequestExpandItem(str, enum.Enum): +class CandidatesRetrieveRequestExpandItem(enum.StrEnum): APPLICATIONS = "applications" ATTACHMENTS = "attachments" diff --git a/src/merge/resources/ats/resources/delete_account/raw_client.py b/src/merge/resources/ats/resources/delete_account/raw_client.py index e9752440..eaf097c0 100644 --- a/src/merge/resources/ats/resources/delete_account/raw_client.py +++ b/src/merge/resources/ats/resources/delete_account/raw_client.py @@ -6,7 +6,9 @@ from .....core.api_error import ApiError from .....core.client_wrapper import AsyncClientWrapper, SyncClientWrapper from .....core.http_response import AsyncHttpResponse, HttpResponse +from .....core.parse_error import ParsingError from .....core.request_options import RequestOptions +from pydantic import ValidationError class RawDeleteAccountClient: @@ -37,6 +39,10 @@ def delete(self, *, request_options: typing.Optional[RequestOptions] = None) -> _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) @@ -68,4 +74,8 @@ async def delete(self, *, request_options: typing.Optional[RequestOptions] = Non _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) diff --git a/src/merge/resources/ats/resources/departments/raw_client.py b/src/merge/resources/ats/resources/departments/raw_client.py index 3e6908a0..bf6f1c5d 100644 --- a/src/merge/resources/ats/resources/departments/raw_client.py +++ b/src/merge/resources/ats/resources/departments/raw_client.py @@ -9,10 +9,12 @@ from .....core.datetime_utils import serialize_datetime from .....core.http_response import AsyncHttpResponse, HttpResponse from .....core.jsonable_encoder import jsonable_encoder +from .....core.parse_error import ParsingError from .....core.request_options import RequestOptions from .....core.unchecked_base_model import construct_type from ...types.department import Department from ...types.paginated_department_list import PaginatedDepartmentList +from pydantic import ValidationError class RawDepartmentsClient: @@ -107,6 +109,10 @@ def list( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) def retrieve( @@ -160,6 +166,10 @@ def retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) @@ -255,6 +265,10 @@ async def list( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) async def retrieve( @@ -308,4 +322,8 @@ async def retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) diff --git a/src/merge/resources/ats/resources/eeocs/__init__.py b/src/merge/resources/ats/resources/eeocs/__init__.py index 76956393..2a3b290e 100644 --- a/src/merge/resources/ats/resources/eeocs/__init__.py +++ b/src/merge/resources/ats/resources/eeocs/__init__.py @@ -26,8 +26,10 @@ def __getattr__(attr_name: str) -> typing.Any: raise AttributeError(f"No {attr_name} found in _dynamic_imports for module name -> {__name__}") try: module = import_module(module_name, __package__) - result = getattr(module, attr_name) - return result + if module_name == f".{attr_name}": + return module + else: + return getattr(module, attr_name) except ImportError as e: raise ImportError(f"Failed to import {attr_name} from {module_name}: {e}") from e except AttributeError as e: diff --git a/src/merge/resources/ats/resources/eeocs/raw_client.py b/src/merge/resources/ats/resources/eeocs/raw_client.py index a48c785f..7d9af62d 100644 --- a/src/merge/resources/ats/resources/eeocs/raw_client.py +++ b/src/merge/resources/ats/resources/eeocs/raw_client.py @@ -9,6 +9,7 @@ from .....core.datetime_utils import serialize_datetime from .....core.http_response import AsyncHttpResponse, HttpResponse from .....core.jsonable_encoder import jsonable_encoder +from .....core.parse_error import ParsingError from .....core.request_options import RequestOptions from .....core.unchecked_base_model import construct_type from ...types.eeoc import Eeoc @@ -17,6 +18,7 @@ from .types.eeocs_list_request_show_enum_origins import EeocsListRequestShowEnumOrigins from .types.eeocs_retrieve_request_remote_fields import EeocsRetrieveRequestRemoteFields from .types.eeocs_retrieve_request_show_enum_origins import EeocsRetrieveRequestShowEnumOrigins +from pydantic import ValidationError class RawEeocsClient: @@ -133,6 +135,10 @@ def list( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) def retrieve( @@ -203,6 +209,10 @@ def retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) @@ -320,6 +330,10 @@ async def list( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) async def retrieve( @@ -390,4 +404,8 @@ async def retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) diff --git a/src/merge/resources/ats/resources/eeocs/types/__init__.py b/src/merge/resources/ats/resources/eeocs/types/__init__.py index 31361448..404eaa28 100644 --- a/src/merge/resources/ats/resources/eeocs/types/__init__.py +++ b/src/merge/resources/ats/resources/eeocs/types/__init__.py @@ -24,8 +24,10 @@ def __getattr__(attr_name: str) -> typing.Any: raise AttributeError(f"No {attr_name} found in _dynamic_imports for module name -> {__name__}") try: module = import_module(module_name, __package__) - result = getattr(module, attr_name) - return result + if module_name == f".{attr_name}": + return module + else: + return getattr(module, attr_name) except ImportError as e: raise ImportError(f"Failed to import {attr_name} from {module_name}: {e}") from e except AttributeError as e: diff --git a/src/merge/resources/ats/resources/eeocs/types/eeocs_list_request_remote_fields.py b/src/merge/resources/ats/resources/eeocs/types/eeocs_list_request_remote_fields.py index 97aa5294..1ee913c8 100644 --- a/src/merge/resources/ats/resources/eeocs/types/eeocs_list_request_remote_fields.py +++ b/src/merge/resources/ats/resources/eeocs/types/eeocs_list_request_remote_fields.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ......core import enum + T_Result = typing.TypeVar("T_Result") -class EeocsListRequestRemoteFields(str, enum.Enum): +class EeocsListRequestRemoteFields(enum.StrEnum): DISABILITY_STATUS = "disability_status" DISABILITY_STATUS_GENDER = "disability_status,gender" DISABILITY_STATUS_GENDER_RACE = "disability_status,gender,race" diff --git a/src/merge/resources/ats/resources/eeocs/types/eeocs_list_request_show_enum_origins.py b/src/merge/resources/ats/resources/eeocs/types/eeocs_list_request_show_enum_origins.py index 0955f416..a8d16e09 100644 --- a/src/merge/resources/ats/resources/eeocs/types/eeocs_list_request_show_enum_origins.py +++ b/src/merge/resources/ats/resources/eeocs/types/eeocs_list_request_show_enum_origins.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ......core import enum + T_Result = typing.TypeVar("T_Result") -class EeocsListRequestShowEnumOrigins(str, enum.Enum): +class EeocsListRequestShowEnumOrigins(enum.StrEnum): DISABILITY_STATUS = "disability_status" DISABILITY_STATUS_GENDER = "disability_status,gender" DISABILITY_STATUS_GENDER_RACE = "disability_status,gender,race" diff --git a/src/merge/resources/ats/resources/eeocs/types/eeocs_retrieve_request_remote_fields.py b/src/merge/resources/ats/resources/eeocs/types/eeocs_retrieve_request_remote_fields.py index 7c69e5bc..ee01f87e 100644 --- a/src/merge/resources/ats/resources/eeocs/types/eeocs_retrieve_request_remote_fields.py +++ b/src/merge/resources/ats/resources/eeocs/types/eeocs_retrieve_request_remote_fields.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ......core import enum + T_Result = typing.TypeVar("T_Result") -class EeocsRetrieveRequestRemoteFields(str, enum.Enum): +class EeocsRetrieveRequestRemoteFields(enum.StrEnum): DISABILITY_STATUS = "disability_status" DISABILITY_STATUS_GENDER = "disability_status,gender" DISABILITY_STATUS_GENDER_RACE = "disability_status,gender,race" diff --git a/src/merge/resources/ats/resources/eeocs/types/eeocs_retrieve_request_show_enum_origins.py b/src/merge/resources/ats/resources/eeocs/types/eeocs_retrieve_request_show_enum_origins.py index 6ee784a3..2a12865d 100644 --- a/src/merge/resources/ats/resources/eeocs/types/eeocs_retrieve_request_show_enum_origins.py +++ b/src/merge/resources/ats/resources/eeocs/types/eeocs_retrieve_request_show_enum_origins.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ......core import enum + T_Result = typing.TypeVar("T_Result") -class EeocsRetrieveRequestShowEnumOrigins(str, enum.Enum): +class EeocsRetrieveRequestShowEnumOrigins(enum.StrEnum): DISABILITY_STATUS = "disability_status" DISABILITY_STATUS_GENDER = "disability_status,gender" DISABILITY_STATUS_GENDER_RACE = "disability_status,gender,race" diff --git a/src/merge/resources/ats/resources/field_mapping/client.py b/src/merge/resources/ats/resources/field_mapping/client.py index a85d2668..0a3bfa2c 100644 --- a/src/merge/resources/ats/resources/field_mapping/client.py +++ b/src/merge/resources/ats/resources/field_mapping/client.py @@ -73,7 +73,7 @@ def field_mappings_create( *, target_field_name: str, target_field_description: str, - remote_field_traversal_path: typing.Sequence[typing.Optional[typing.Any]], + remote_field_traversal_path: typing.Sequence[typing.Any], remote_method: str, remote_url_path: str, common_model_name: str, @@ -92,7 +92,7 @@ def field_mappings_create( target_field_description : str The description of the target field you want this remote field to map to. - remote_field_traversal_path : typing.Sequence[typing.Optional[typing.Any]] + remote_field_traversal_path : typing.Sequence[typing.Any] The field traversal path of the remote field listed when you hit the GET /remote-fields endpoint. remote_method : str @@ -187,7 +187,7 @@ def field_mappings_partial_update( field_mapping_id: str, *, remote_data_iteration_count: typing.Optional[int] = None, - remote_field_traversal_path: typing.Optional[typing.Sequence[typing.Optional[typing.Any]]] = OMIT, + remote_field_traversal_path: typing.Optional[typing.Sequence[typing.Any]] = OMIT, remote_method: typing.Optional[str] = OMIT, remote_url_path: typing.Optional[str] = OMIT, jmes_path: typing.Optional[str] = OMIT, @@ -203,7 +203,7 @@ def field_mappings_partial_update( remote_data_iteration_count : typing.Optional[int] Number of common model instances to iterate through when fetching remote data for field mappings. Defaults to 250 if not provided. - remote_field_traversal_path : typing.Optional[typing.Sequence[typing.Optional[typing.Any]]] + remote_field_traversal_path : typing.Optional[typing.Sequence[typing.Any]] The field traversal path of the remote field listed when you hit the GET /remote-fields endpoint. remote_method : typing.Optional[str] @@ -388,7 +388,7 @@ async def field_mappings_create( *, target_field_name: str, target_field_description: str, - remote_field_traversal_path: typing.Sequence[typing.Optional[typing.Any]], + remote_field_traversal_path: typing.Sequence[typing.Any], remote_method: str, remote_url_path: str, common_model_name: str, @@ -407,7 +407,7 @@ async def field_mappings_create( target_field_description : str The description of the target field you want this remote field to map to. - remote_field_traversal_path : typing.Sequence[typing.Optional[typing.Any]] + remote_field_traversal_path : typing.Sequence[typing.Any] The field traversal path of the remote field listed when you hit the GET /remote-fields endpoint. remote_method : str @@ -518,7 +518,7 @@ async def field_mappings_partial_update( field_mapping_id: str, *, remote_data_iteration_count: typing.Optional[int] = None, - remote_field_traversal_path: typing.Optional[typing.Sequence[typing.Optional[typing.Any]]] = OMIT, + remote_field_traversal_path: typing.Optional[typing.Sequence[typing.Any]] = OMIT, remote_method: typing.Optional[str] = OMIT, remote_url_path: typing.Optional[str] = OMIT, jmes_path: typing.Optional[str] = OMIT, @@ -534,7 +534,7 @@ async def field_mappings_partial_update( remote_data_iteration_count : typing.Optional[int] Number of common model instances to iterate through when fetching remote data for field mappings. Defaults to 250 if not provided. - remote_field_traversal_path : typing.Optional[typing.Sequence[typing.Optional[typing.Any]]] + remote_field_traversal_path : typing.Optional[typing.Sequence[typing.Any]] The field traversal path of the remote field listed when you hit the GET /remote-fields endpoint. remote_method : typing.Optional[str] diff --git a/src/merge/resources/ats/resources/field_mapping/raw_client.py b/src/merge/resources/ats/resources/field_mapping/raw_client.py index f2f2eb3e..19f5924b 100644 --- a/src/merge/resources/ats/resources/field_mapping/raw_client.py +++ b/src/merge/resources/ats/resources/field_mapping/raw_client.py @@ -7,12 +7,14 @@ from .....core.client_wrapper import AsyncClientWrapper, SyncClientWrapper from .....core.http_response import AsyncHttpResponse, HttpResponse from .....core.jsonable_encoder import jsonable_encoder +from .....core.parse_error import ParsingError from .....core.request_options import RequestOptions from .....core.unchecked_base_model import construct_type from ...types.external_target_field_api_response import ExternalTargetFieldApiResponse from ...types.field_mapping_api_instance_response import FieldMappingApiInstanceResponse from ...types.field_mapping_instance_response import FieldMappingInstanceResponse from ...types.remote_field_api_response import RemoteFieldApiResponse +from pydantic import ValidationError # this is used as the default value for optional parameters OMIT = typing.cast(typing.Any, ...) @@ -65,6 +67,10 @@ def field_mappings_retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) def field_mappings_create( @@ -72,7 +78,7 @@ def field_mappings_create( *, target_field_name: str, target_field_description: str, - remote_field_traversal_path: typing.Sequence[typing.Optional[typing.Any]], + remote_field_traversal_path: typing.Sequence[typing.Any], remote_method: str, remote_url_path: str, common_model_name: str, @@ -91,7 +97,7 @@ def field_mappings_create( target_field_description : str The description of the target field you want this remote field to map to. - remote_field_traversal_path : typing.Sequence[typing.Optional[typing.Any]] + remote_field_traversal_path : typing.Sequence[typing.Any] The field traversal path of the remote field listed when you hit the GET /remote-fields endpoint. remote_method : str @@ -151,6 +157,10 @@ def field_mappings_create( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) def field_mappings_destroy( @@ -189,6 +199,10 @@ def field_mappings_destroy( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) def field_mappings_partial_update( @@ -196,7 +210,7 @@ def field_mappings_partial_update( field_mapping_id: str, *, remote_data_iteration_count: typing.Optional[int] = None, - remote_field_traversal_path: typing.Optional[typing.Sequence[typing.Optional[typing.Any]]] = OMIT, + remote_field_traversal_path: typing.Optional[typing.Sequence[typing.Any]] = OMIT, remote_method: typing.Optional[str] = OMIT, remote_url_path: typing.Optional[str] = OMIT, jmes_path: typing.Optional[str] = OMIT, @@ -212,7 +226,7 @@ def field_mappings_partial_update( remote_data_iteration_count : typing.Optional[int] Number of common model instances to iterate through when fetching remote data for field mappings. Defaults to 250 if not provided. - remote_field_traversal_path : typing.Optional[typing.Sequence[typing.Optional[typing.Any]]] + remote_field_traversal_path : typing.Optional[typing.Sequence[typing.Any]] The field traversal path of the remote field listed when you hit the GET /remote-fields endpoint. remote_method : typing.Optional[str] @@ -263,6 +277,10 @@ def field_mappings_partial_update( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) def remote_fields_retrieve( @@ -313,6 +331,10 @@ def remote_fields_retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) def target_fields_retrieve( @@ -349,6 +371,10 @@ def target_fields_retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) @@ -399,6 +425,10 @@ async def field_mappings_retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) async def field_mappings_create( @@ -406,7 +436,7 @@ async def field_mappings_create( *, target_field_name: str, target_field_description: str, - remote_field_traversal_path: typing.Sequence[typing.Optional[typing.Any]], + remote_field_traversal_path: typing.Sequence[typing.Any], remote_method: str, remote_url_path: str, common_model_name: str, @@ -425,7 +455,7 @@ async def field_mappings_create( target_field_description : str The description of the target field you want this remote field to map to. - remote_field_traversal_path : typing.Sequence[typing.Optional[typing.Any]] + remote_field_traversal_path : typing.Sequence[typing.Any] The field traversal path of the remote field listed when you hit the GET /remote-fields endpoint. remote_method : str @@ -485,6 +515,10 @@ async def field_mappings_create( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) async def field_mappings_destroy( @@ -523,6 +557,10 @@ async def field_mappings_destroy( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) async def field_mappings_partial_update( @@ -530,7 +568,7 @@ async def field_mappings_partial_update( field_mapping_id: str, *, remote_data_iteration_count: typing.Optional[int] = None, - remote_field_traversal_path: typing.Optional[typing.Sequence[typing.Optional[typing.Any]]] = OMIT, + remote_field_traversal_path: typing.Optional[typing.Sequence[typing.Any]] = OMIT, remote_method: typing.Optional[str] = OMIT, remote_url_path: typing.Optional[str] = OMIT, jmes_path: typing.Optional[str] = OMIT, @@ -546,7 +584,7 @@ async def field_mappings_partial_update( remote_data_iteration_count : typing.Optional[int] Number of common model instances to iterate through when fetching remote data for field mappings. Defaults to 250 if not provided. - remote_field_traversal_path : typing.Optional[typing.Sequence[typing.Optional[typing.Any]]] + remote_field_traversal_path : typing.Optional[typing.Sequence[typing.Any]] The field traversal path of the remote field listed when you hit the GET /remote-fields endpoint. remote_method : typing.Optional[str] @@ -597,6 +635,10 @@ async def field_mappings_partial_update( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) async def remote_fields_retrieve( @@ -647,6 +689,10 @@ async def remote_fields_retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) async def target_fields_retrieve( @@ -683,4 +729,8 @@ async def target_fields_retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) diff --git a/src/merge/resources/ats/resources/force_resync/raw_client.py b/src/merge/resources/ats/resources/force_resync/raw_client.py index 49601e04..dd2c15f7 100644 --- a/src/merge/resources/ats/resources/force_resync/raw_client.py +++ b/src/merge/resources/ats/resources/force_resync/raw_client.py @@ -6,9 +6,11 @@ from .....core.api_error import ApiError from .....core.client_wrapper import AsyncClientWrapper, SyncClientWrapper from .....core.http_response import AsyncHttpResponse, HttpResponse +from .....core.parse_error import ParsingError from .....core.request_options import RequestOptions from .....core.unchecked_base_model import construct_type from ...types.sync_status import SyncStatus +from pydantic import ValidationError class RawForceResyncClient: @@ -49,6 +51,10 @@ def sync_status_resync_create( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) @@ -90,4 +96,8 @@ async def sync_status_resync_create( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) diff --git a/src/merge/resources/ats/resources/generate_key/raw_client.py b/src/merge/resources/ats/resources/generate_key/raw_client.py index 91614905..bde4e05c 100644 --- a/src/merge/resources/ats/resources/generate_key/raw_client.py +++ b/src/merge/resources/ats/resources/generate_key/raw_client.py @@ -6,9 +6,11 @@ from .....core.api_error import ApiError from .....core.client_wrapper import AsyncClientWrapper, SyncClientWrapper from .....core.http_response import AsyncHttpResponse, HttpResponse +from .....core.parse_error import ParsingError from .....core.request_options import RequestOptions from .....core.unchecked_base_model import construct_type from ...types.remote_key import RemoteKey +from pydantic import ValidationError # this is used as the default value for optional parameters OMIT = typing.cast(typing.Any, ...) @@ -60,6 +62,10 @@ def create(self, *, name: str, request_options: typing.Optional[RequestOptions] _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) @@ -111,4 +117,8 @@ async def create( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) diff --git a/src/merge/resources/ats/resources/interviews/__init__.py b/src/merge/resources/ats/resources/interviews/__init__.py index 2cff90b8..7864a9ff 100644 --- a/src/merge/resources/ats/resources/interviews/__init__.py +++ b/src/merge/resources/ats/resources/interviews/__init__.py @@ -19,8 +19,10 @@ def __getattr__(attr_name: str) -> typing.Any: raise AttributeError(f"No {attr_name} found in _dynamic_imports for module name -> {__name__}") try: module = import_module(module_name, __package__) - result = getattr(module, attr_name) - return result + if module_name == f".{attr_name}": + return module + else: + return getattr(module, attr_name) except ImportError as e: raise ImportError(f"Failed to import {attr_name} from {module_name}: {e}") from e except AttributeError as e: diff --git a/src/merge/resources/ats/resources/interviews/raw_client.py b/src/merge/resources/ats/resources/interviews/raw_client.py index 054bd55f..6d2fab82 100644 --- a/src/merge/resources/ats/resources/interviews/raw_client.py +++ b/src/merge/resources/ats/resources/interviews/raw_client.py @@ -9,6 +9,7 @@ from .....core.datetime_utils import serialize_datetime from .....core.http_response import AsyncHttpResponse, HttpResponse from .....core.jsonable_encoder import jsonable_encoder +from .....core.parse_error import ParsingError from .....core.request_options import RequestOptions from .....core.unchecked_base_model import construct_type from ...types.meta_response import MetaResponse @@ -18,6 +19,7 @@ from ...types.scheduled_interview_response import ScheduledInterviewResponse from .types.interviews_list_request_expand_item import InterviewsListRequestExpandItem from .types.interviews_retrieve_request_expand_item import InterviewsRetrieveRequestExpandItem +from pydantic import ValidationError # this is used as the default value for optional parameters OMIT = typing.cast(typing.Any, ...) @@ -152,6 +154,10 @@ def list( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) def create( @@ -216,6 +222,10 @@ def create( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) def retrieve( @@ -286,6 +296,10 @@ def retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) def meta_post_retrieve( @@ -322,6 +336,10 @@ def meta_post_retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) @@ -454,6 +472,10 @@ async def list( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) async def create( @@ -518,6 +540,10 @@ async def create( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) async def retrieve( @@ -588,6 +614,10 @@ async def retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) async def meta_post_retrieve( @@ -624,4 +654,8 @@ async def meta_post_retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) diff --git a/src/merge/resources/ats/resources/interviews/types/__init__.py b/src/merge/resources/ats/resources/interviews/types/__init__.py index bec156d5..bab1bd37 100644 --- a/src/merge/resources/ats/resources/interviews/types/__init__.py +++ b/src/merge/resources/ats/resources/interviews/types/__init__.py @@ -20,8 +20,10 @@ def __getattr__(attr_name: str) -> typing.Any: raise AttributeError(f"No {attr_name} found in _dynamic_imports for module name -> {__name__}") try: module = import_module(module_name, __package__) - result = getattr(module, attr_name) - return result + if module_name == f".{attr_name}": + return module + else: + return getattr(module, attr_name) except ImportError as e: raise ImportError(f"Failed to import {attr_name} from {module_name}: {e}") from e except AttributeError as e: diff --git a/src/merge/resources/ats/resources/interviews/types/interviews_list_request_expand_item.py b/src/merge/resources/ats/resources/interviews/types/interviews_list_request_expand_item.py index a0dcc590..3644f53e 100644 --- a/src/merge/resources/ats/resources/interviews/types/interviews_list_request_expand_item.py +++ b/src/merge/resources/ats/resources/interviews/types/interviews_list_request_expand_item.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ......core import enum + T_Result = typing.TypeVar("T_Result") -class InterviewsListRequestExpandItem(str, enum.Enum): +class InterviewsListRequestExpandItem(enum.StrEnum): APPLICATION = "application" INTERVIEWERS = "interviewers" JOB_INTERVIEW_STAGE = "job_interview_stage" diff --git a/src/merge/resources/ats/resources/interviews/types/interviews_retrieve_request_expand_item.py b/src/merge/resources/ats/resources/interviews/types/interviews_retrieve_request_expand_item.py index c3433115..35cb4a9a 100644 --- a/src/merge/resources/ats/resources/interviews/types/interviews_retrieve_request_expand_item.py +++ b/src/merge/resources/ats/resources/interviews/types/interviews_retrieve_request_expand_item.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ......core import enum + T_Result = typing.TypeVar("T_Result") -class InterviewsRetrieveRequestExpandItem(str, enum.Enum): +class InterviewsRetrieveRequestExpandItem(enum.StrEnum): APPLICATION = "application" INTERVIEWERS = "interviewers" JOB_INTERVIEW_STAGE = "job_interview_stage" diff --git a/src/merge/resources/ats/resources/issues/__init__.py b/src/merge/resources/ats/resources/issues/__init__.py index 3ca1094b..45b33fe1 100644 --- a/src/merge/resources/ats/resources/issues/__init__.py +++ b/src/merge/resources/ats/resources/issues/__init__.py @@ -16,8 +16,10 @@ def __getattr__(attr_name: str) -> typing.Any: raise AttributeError(f"No {attr_name} found in _dynamic_imports for module name -> {__name__}") try: module = import_module(module_name, __package__) - result = getattr(module, attr_name) - return result + if module_name == f".{attr_name}": + return module + else: + return getattr(module, attr_name) except ImportError as e: raise ImportError(f"Failed to import {attr_name} from {module_name}: {e}") from e except AttributeError as e: diff --git a/src/merge/resources/ats/resources/issues/raw_client.py b/src/merge/resources/ats/resources/issues/raw_client.py index 634bcd60..f4b9a716 100644 --- a/src/merge/resources/ats/resources/issues/raw_client.py +++ b/src/merge/resources/ats/resources/issues/raw_client.py @@ -9,11 +9,13 @@ from .....core.datetime_utils import serialize_datetime from .....core.http_response import AsyncHttpResponse, HttpResponse from .....core.jsonable_encoder import jsonable_encoder +from .....core.parse_error import ParsingError from .....core.request_options import RequestOptions from .....core.unchecked_base_model import construct_type from ...types.issue import Issue from ...types.paginated_issue_list import PaginatedIssueList from .types.issues_list_request_status import IssuesListRequestStatus +from pydantic import ValidationError class RawIssuesClient: @@ -136,6 +138,10 @@ def list( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) def retrieve(self, id: str, *, request_options: typing.Optional[RequestOptions] = None) -> HttpResponse[Issue]: @@ -172,6 +178,10 @@ def retrieve(self, id: str, *, request_options: typing.Optional[RequestOptions] _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) @@ -295,6 +305,10 @@ async def list( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) async def retrieve( @@ -333,4 +347,8 @@ async def retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) diff --git a/src/merge/resources/ats/resources/issues/types/__init__.py b/src/merge/resources/ats/resources/issues/types/__init__.py index 88fbf977..5e097583 100644 --- a/src/merge/resources/ats/resources/issues/types/__init__.py +++ b/src/merge/resources/ats/resources/issues/types/__init__.py @@ -16,8 +16,10 @@ def __getattr__(attr_name: str) -> typing.Any: raise AttributeError(f"No {attr_name} found in _dynamic_imports for module name -> {__name__}") try: module = import_module(module_name, __package__) - result = getattr(module, attr_name) - return result + if module_name == f".{attr_name}": + return module + else: + return getattr(module, attr_name) except ImportError as e: raise ImportError(f"Failed to import {attr_name} from {module_name}: {e}") from e except AttributeError as e: diff --git a/src/merge/resources/ats/resources/issues/types/issues_list_request_status.py b/src/merge/resources/ats/resources/issues/types/issues_list_request_status.py index 2bd3521e..a61afdd0 100644 --- a/src/merge/resources/ats/resources/issues/types/issues_list_request_status.py +++ b/src/merge/resources/ats/resources/issues/types/issues_list_request_status.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ......core import enum + T_Result = typing.TypeVar("T_Result") -class IssuesListRequestStatus(str, enum.Enum): +class IssuesListRequestStatus(enum.StrEnum): ONGOING = "ONGOING" RESOLVED = "RESOLVED" diff --git a/src/merge/resources/ats/resources/job_interview_stages/raw_client.py b/src/merge/resources/ats/resources/job_interview_stages/raw_client.py index ff780c1a..6159651a 100644 --- a/src/merge/resources/ats/resources/job_interview_stages/raw_client.py +++ b/src/merge/resources/ats/resources/job_interview_stages/raw_client.py @@ -9,10 +9,12 @@ from .....core.datetime_utils import serialize_datetime from .....core.http_response import AsyncHttpResponse, HttpResponse from .....core.jsonable_encoder import jsonable_encoder +from .....core.parse_error import ParsingError from .....core.request_options import RequestOptions from .....core.unchecked_base_model import construct_type from ...types.job_interview_stage import JobInterviewStage from ...types.paginated_job_interview_stage_list import PaginatedJobInterviewStageList +from pydantic import ValidationError class RawJobInterviewStagesClient: @@ -117,6 +119,10 @@ def list( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) def retrieve( @@ -175,6 +181,10 @@ def retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) @@ -280,6 +290,10 @@ async def list( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) async def retrieve( @@ -338,4 +352,8 @@ async def retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) diff --git a/src/merge/resources/ats/resources/job_postings/__init__.py b/src/merge/resources/ats/resources/job_postings/__init__.py index 64d6e432..8b507898 100644 --- a/src/merge/resources/ats/resources/job_postings/__init__.py +++ b/src/merge/resources/ats/resources/job_postings/__init__.py @@ -16,8 +16,10 @@ def __getattr__(attr_name: str) -> typing.Any: raise AttributeError(f"No {attr_name} found in _dynamic_imports for module name -> {__name__}") try: module = import_module(module_name, __package__) - result = getattr(module, attr_name) - return result + if module_name == f".{attr_name}": + return module + else: + return getattr(module, attr_name) except ImportError as e: raise ImportError(f"Failed to import {attr_name} from {module_name}: {e}") from e except AttributeError as e: diff --git a/src/merge/resources/ats/resources/job_postings/raw_client.py b/src/merge/resources/ats/resources/job_postings/raw_client.py index 9ee3e898..54a4d1f9 100644 --- a/src/merge/resources/ats/resources/job_postings/raw_client.py +++ b/src/merge/resources/ats/resources/job_postings/raw_client.py @@ -9,11 +9,13 @@ from .....core.datetime_utils import serialize_datetime from .....core.http_response import AsyncHttpResponse, HttpResponse from .....core.jsonable_encoder import jsonable_encoder +from .....core.parse_error import ParsingError from .....core.request_options import RequestOptions from .....core.unchecked_base_model import construct_type from ...types.job_posting import JobPosting from ...types.paginated_job_posting_list import PaginatedJobPostingList from .types.job_postings_list_request_status import JobPostingsListRequestStatus +from pydantic import ValidationError class RawJobPostingsClient: @@ -124,6 +126,10 @@ def list( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) def retrieve( @@ -182,6 +188,10 @@ def retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) @@ -293,6 +303,10 @@ async def list( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) async def retrieve( @@ -351,4 +365,8 @@ async def retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) diff --git a/src/merge/resources/ats/resources/job_postings/types/__init__.py b/src/merge/resources/ats/resources/job_postings/types/__init__.py index 1e05a87a..efa5767c 100644 --- a/src/merge/resources/ats/resources/job_postings/types/__init__.py +++ b/src/merge/resources/ats/resources/job_postings/types/__init__.py @@ -16,8 +16,10 @@ def __getattr__(attr_name: str) -> typing.Any: raise AttributeError(f"No {attr_name} found in _dynamic_imports for module name -> {__name__}") try: module = import_module(module_name, __package__) - result = getattr(module, attr_name) - return result + if module_name == f".{attr_name}": + return module + else: + return getattr(module, attr_name) except ImportError as e: raise ImportError(f"Failed to import {attr_name} from {module_name}: {e}") from e except AttributeError as e: diff --git a/src/merge/resources/ats/resources/job_postings/types/job_postings_list_request_status.py b/src/merge/resources/ats/resources/job_postings/types/job_postings_list_request_status.py index adbba7ee..9fd4568a 100644 --- a/src/merge/resources/ats/resources/job_postings/types/job_postings_list_request_status.py +++ b/src/merge/resources/ats/resources/job_postings/types/job_postings_list_request_status.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ......core import enum + T_Result = typing.TypeVar("T_Result") -class JobPostingsListRequestStatus(str, enum.Enum): +class JobPostingsListRequestStatus(enum.StrEnum): CLOSED = "CLOSED" DRAFT = "DRAFT" INTERNAL = "INTERNAL" diff --git a/src/merge/resources/ats/resources/jobs/__init__.py b/src/merge/resources/ats/resources/jobs/__init__.py index 4feabeec..2a6dca06 100644 --- a/src/merge/resources/ats/resources/jobs/__init__.py +++ b/src/merge/resources/ats/resources/jobs/__init__.py @@ -26,8 +26,10 @@ def __getattr__(attr_name: str) -> typing.Any: raise AttributeError(f"No {attr_name} found in _dynamic_imports for module name -> {__name__}") try: module = import_module(module_name, __package__) - result = getattr(module, attr_name) - return result + if module_name == f".{attr_name}": + return module + else: + return getattr(module, attr_name) except ImportError as e: raise ImportError(f"Failed to import {attr_name} from {module_name}: {e}") from e except AttributeError as e: diff --git a/src/merge/resources/ats/resources/jobs/raw_client.py b/src/merge/resources/ats/resources/jobs/raw_client.py index 8ab585b2..ade5b0fc 100644 --- a/src/merge/resources/ats/resources/jobs/raw_client.py +++ b/src/merge/resources/ats/resources/jobs/raw_client.py @@ -9,6 +9,7 @@ from .....core.datetime_utils import serialize_datetime from .....core.http_response import AsyncHttpResponse, HttpResponse from .....core.jsonable_encoder import jsonable_encoder +from .....core.parse_error import ParsingError from .....core.request_options import RequestOptions from .....core.unchecked_base_model import construct_type from ...types.job import Job @@ -18,6 +19,7 @@ from .types.jobs_list_request_status import JobsListRequestStatus from .types.jobs_retrieve_request_expand_item import JobsRetrieveRequestExpandItem from .types.jobs_screening_questions_list_request_expand_item import JobsScreeningQuestionsListRequestExpandItem +from pydantic import ValidationError class RawJobsClient: @@ -150,6 +152,10 @@ def list( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) def retrieve( @@ -220,6 +226,10 @@ def retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) def screening_questions_list( @@ -298,6 +308,10 @@ def screening_questions_list( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) @@ -431,6 +445,10 @@ async def list( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) async def retrieve( @@ -501,6 +519,10 @@ async def retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) async def screening_questions_list( @@ -579,4 +601,8 @@ async def screening_questions_list( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) diff --git a/src/merge/resources/ats/resources/jobs/types/__init__.py b/src/merge/resources/ats/resources/jobs/types/__init__.py index 00482c7a..42ed96d8 100644 --- a/src/merge/resources/ats/resources/jobs/types/__init__.py +++ b/src/merge/resources/ats/resources/jobs/types/__init__.py @@ -24,8 +24,10 @@ def __getattr__(attr_name: str) -> typing.Any: raise AttributeError(f"No {attr_name} found in _dynamic_imports for module name -> {__name__}") try: module = import_module(module_name, __package__) - result = getattr(module, attr_name) - return result + if module_name == f".{attr_name}": + return module + else: + return getattr(module, attr_name) except ImportError as e: raise ImportError(f"Failed to import {attr_name} from {module_name}: {e}") from e except AttributeError as e: diff --git a/src/merge/resources/ats/resources/jobs/types/jobs_list_request_expand_item.py b/src/merge/resources/ats/resources/jobs/types/jobs_list_request_expand_item.py index 65a316a6..80754c3d 100644 --- a/src/merge/resources/ats/resources/jobs/types/jobs_list_request_expand_item.py +++ b/src/merge/resources/ats/resources/jobs/types/jobs_list_request_expand_item.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ......core import enum + T_Result = typing.TypeVar("T_Result") -class JobsListRequestExpandItem(str, enum.Enum): +class JobsListRequestExpandItem(enum.StrEnum): DEPARTMENTS = "departments" HIRING_MANAGERS = "hiring_managers" JOB_POSTINGS = "job_postings" diff --git a/src/merge/resources/ats/resources/jobs/types/jobs_list_request_status.py b/src/merge/resources/ats/resources/jobs/types/jobs_list_request_status.py index 08fec15e..54e576e5 100644 --- a/src/merge/resources/ats/resources/jobs/types/jobs_list_request_status.py +++ b/src/merge/resources/ats/resources/jobs/types/jobs_list_request_status.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ......core import enum + T_Result = typing.TypeVar("T_Result") -class JobsListRequestStatus(str, enum.Enum): +class JobsListRequestStatus(enum.StrEnum): ARCHIVED = "ARCHIVED" CLOSED = "CLOSED" DRAFT = "DRAFT" diff --git a/src/merge/resources/ats/resources/jobs/types/jobs_retrieve_request_expand_item.py b/src/merge/resources/ats/resources/jobs/types/jobs_retrieve_request_expand_item.py index 5826fa06..2b08f67e 100644 --- a/src/merge/resources/ats/resources/jobs/types/jobs_retrieve_request_expand_item.py +++ b/src/merge/resources/ats/resources/jobs/types/jobs_retrieve_request_expand_item.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ......core import enum + T_Result = typing.TypeVar("T_Result") -class JobsRetrieveRequestExpandItem(str, enum.Enum): +class JobsRetrieveRequestExpandItem(enum.StrEnum): DEPARTMENTS = "departments" HIRING_MANAGERS = "hiring_managers" JOB_POSTINGS = "job_postings" diff --git a/src/merge/resources/ats/resources/jobs/types/jobs_screening_questions_list_request_expand_item.py b/src/merge/resources/ats/resources/jobs/types/jobs_screening_questions_list_request_expand_item.py index e4ec2b29..6fc38fc8 100644 --- a/src/merge/resources/ats/resources/jobs/types/jobs_screening_questions_list_request_expand_item.py +++ b/src/merge/resources/ats/resources/jobs/types/jobs_screening_questions_list_request_expand_item.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ......core import enum + T_Result = typing.TypeVar("T_Result") -class JobsScreeningQuestionsListRequestExpandItem(str, enum.Enum): +class JobsScreeningQuestionsListRequestExpandItem(enum.StrEnum): JOB = "job" OPTIONS = "options" diff --git a/src/merge/resources/ats/resources/link_token/__init__.py b/src/merge/resources/ats/resources/link_token/__init__.py index 3bad6adf..15700960 100644 --- a/src/merge/resources/ats/resources/link_token/__init__.py +++ b/src/merge/resources/ats/resources/link_token/__init__.py @@ -16,8 +16,10 @@ def __getattr__(attr_name: str) -> typing.Any: raise AttributeError(f"No {attr_name} found in _dynamic_imports for module name -> {__name__}") try: module = import_module(module_name, __package__) - result = getattr(module, attr_name) - return result + if module_name == f".{attr_name}": + return module + else: + return getattr(module, attr_name) except ImportError as e: raise ImportError(f"Failed to import {attr_name} from {module_name}: {e}") from e except AttributeError as e: diff --git a/src/merge/resources/ats/resources/link_token/client.py b/src/merge/resources/ats/resources/link_token/client.py index dabb5108..7684469d 100644 --- a/src/merge/resources/ats/resources/link_token/client.py +++ b/src/merge/resources/ats/resources/link_token/client.py @@ -47,7 +47,7 @@ def create( ] = OMIT, language: typing.Optional[EndUserDetailsRequestLanguage] = OMIT, are_syncs_disabled: typing.Optional[bool] = OMIT, - integration_specific_config: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = OMIT, + integration_specific_config: typing.Optional[typing.Dict[str, typing.Any]] = OMIT, request_options: typing.Optional[RequestOptions] = None, ) -> LinkToken: """ @@ -94,7 +94,7 @@ def create( are_syncs_disabled : typing.Optional[bool] The boolean that indicates whether initial, periodic, and force syncs will be disabled. - integration_specific_config : typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] + integration_specific_config : typing.Optional[typing.Dict[str, typing.Any]] A JSON object containing integration-specific configuration options. request_options : typing.Optional[RequestOptions] @@ -172,7 +172,7 @@ async def create( ] = OMIT, language: typing.Optional[EndUserDetailsRequestLanguage] = OMIT, are_syncs_disabled: typing.Optional[bool] = OMIT, - integration_specific_config: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = OMIT, + integration_specific_config: typing.Optional[typing.Dict[str, typing.Any]] = OMIT, request_options: typing.Optional[RequestOptions] = None, ) -> LinkToken: """ @@ -219,7 +219,7 @@ async def create( are_syncs_disabled : typing.Optional[bool] The boolean that indicates whether initial, periodic, and force syncs will be disabled. - integration_specific_config : typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] + integration_specific_config : typing.Optional[typing.Dict[str, typing.Any]] A JSON object containing integration-specific configuration options. request_options : typing.Optional[RequestOptions] diff --git a/src/merge/resources/ats/resources/link_token/raw_client.py b/src/merge/resources/ats/resources/link_token/raw_client.py index 28b931bb..c6be03b6 100644 --- a/src/merge/resources/ats/resources/link_token/raw_client.py +++ b/src/merge/resources/ats/resources/link_token/raw_client.py @@ -6,6 +6,7 @@ from .....core.api_error import ApiError from .....core.client_wrapper import AsyncClientWrapper, SyncClientWrapper from .....core.http_response import AsyncHttpResponse, HttpResponse +from .....core.parse_error import ParsingError from .....core.request_options import RequestOptions from .....core.unchecked_base_model import construct_type from ...types.categories_enum import CategoriesEnum @@ -13,6 +14,7 @@ from ...types.individual_common_model_scope_deserializer_request import IndividualCommonModelScopeDeserializerRequest from ...types.link_token import LinkToken from .types.end_user_details_request_language import EndUserDetailsRequestLanguage +from pydantic import ValidationError # this is used as the default value for optional parameters OMIT = typing.cast(typing.Any, ...) @@ -39,7 +41,7 @@ def create( ] = OMIT, language: typing.Optional[EndUserDetailsRequestLanguage] = OMIT, are_syncs_disabled: typing.Optional[bool] = OMIT, - integration_specific_config: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = OMIT, + integration_specific_config: typing.Optional[typing.Dict[str, typing.Any]] = OMIT, request_options: typing.Optional[RequestOptions] = None, ) -> HttpResponse[LinkToken]: """ @@ -86,7 +88,7 @@ def create( are_syncs_disabled : typing.Optional[bool] The boolean that indicates whether initial, periodic, and force syncs will be disabled. - integration_specific_config : typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] + integration_specific_config : typing.Optional[typing.Dict[str, typing.Any]] A JSON object containing integration-specific configuration options. request_options : typing.Optional[RequestOptions] @@ -134,6 +136,10 @@ def create( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) @@ -158,7 +164,7 @@ async def create( ] = OMIT, language: typing.Optional[EndUserDetailsRequestLanguage] = OMIT, are_syncs_disabled: typing.Optional[bool] = OMIT, - integration_specific_config: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = OMIT, + integration_specific_config: typing.Optional[typing.Dict[str, typing.Any]] = OMIT, request_options: typing.Optional[RequestOptions] = None, ) -> AsyncHttpResponse[LinkToken]: """ @@ -205,7 +211,7 @@ async def create( are_syncs_disabled : typing.Optional[bool] The boolean that indicates whether initial, periodic, and force syncs will be disabled. - integration_specific_config : typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] + integration_specific_config : typing.Optional[typing.Dict[str, typing.Any]] A JSON object containing integration-specific configuration options. request_options : typing.Optional[RequestOptions] @@ -253,4 +259,8 @@ async def create( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) diff --git a/src/merge/resources/ats/resources/link_token/types/__init__.py b/src/merge/resources/ats/resources/link_token/types/__init__.py index e9a7d3b9..dad2a14a 100644 --- a/src/merge/resources/ats/resources/link_token/types/__init__.py +++ b/src/merge/resources/ats/resources/link_token/types/__init__.py @@ -16,8 +16,10 @@ def __getattr__(attr_name: str) -> typing.Any: raise AttributeError(f"No {attr_name} found in _dynamic_imports for module name -> {__name__}") try: module = import_module(module_name, __package__) - result = getattr(module, attr_name) - return result + if module_name == f".{attr_name}": + return module + else: + return getattr(module, attr_name) except ImportError as e: raise ImportError(f"Failed to import {attr_name} from {module_name}: {e}") from e except AttributeError as e: diff --git a/src/merge/resources/ats/resources/linked_accounts/__init__.py b/src/merge/resources/ats/resources/linked_accounts/__init__.py index 0b9e42b4..12e213b7 100644 --- a/src/merge/resources/ats/resources/linked_accounts/__init__.py +++ b/src/merge/resources/ats/resources/linked_accounts/__init__.py @@ -16,8 +16,10 @@ def __getattr__(attr_name: str) -> typing.Any: raise AttributeError(f"No {attr_name} found in _dynamic_imports for module name -> {__name__}") try: module = import_module(module_name, __package__) - result = getattr(module, attr_name) - return result + if module_name == f".{attr_name}": + return module + else: + return getattr(module, attr_name) except ImportError as e: raise ImportError(f"Failed to import {attr_name} from {module_name}: {e}") from e except AttributeError as e: diff --git a/src/merge/resources/ats/resources/linked_accounts/raw_client.py b/src/merge/resources/ats/resources/linked_accounts/raw_client.py index 24f3b5ac..a2246068 100644 --- a/src/merge/resources/ats/resources/linked_accounts/raw_client.py +++ b/src/merge/resources/ats/resources/linked_accounts/raw_client.py @@ -6,10 +6,12 @@ from .....core.api_error import ApiError from .....core.client_wrapper import AsyncClientWrapper, SyncClientWrapper from .....core.http_response import AsyncHttpResponse, HttpResponse +from .....core.parse_error import ParsingError from .....core.request_options import RequestOptions from .....core.unchecked_base_model import construct_type from ...types.paginated_account_details_and_actions_list import PaginatedAccountDetailsAndActionsList from .types.linked_accounts_list_request_category import LinkedAccountsListRequestCategory +from pydantic import ValidationError class RawLinkedAccountsClient: @@ -126,6 +128,10 @@ def list( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) @@ -243,4 +249,8 @@ async def list( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) diff --git a/src/merge/resources/ats/resources/linked_accounts/types/__init__.py b/src/merge/resources/ats/resources/linked_accounts/types/__init__.py index a28f38cc..a884db6a 100644 --- a/src/merge/resources/ats/resources/linked_accounts/types/__init__.py +++ b/src/merge/resources/ats/resources/linked_accounts/types/__init__.py @@ -18,8 +18,10 @@ def __getattr__(attr_name: str) -> typing.Any: raise AttributeError(f"No {attr_name} found in _dynamic_imports for module name -> {__name__}") try: module = import_module(module_name, __package__) - result = getattr(module, attr_name) - return result + if module_name == f".{attr_name}": + return module + else: + return getattr(module, attr_name) except ImportError as e: raise ImportError(f"Failed to import {attr_name} from {module_name}: {e}") from e except AttributeError as e: diff --git a/src/merge/resources/ats/resources/linked_accounts/types/linked_accounts_list_request_category.py b/src/merge/resources/ats/resources/linked_accounts/types/linked_accounts_list_request_category.py index bd873ea8..ce04d1de 100644 --- a/src/merge/resources/ats/resources/linked_accounts/types/linked_accounts_list_request_category.py +++ b/src/merge/resources/ats/resources/linked_accounts/types/linked_accounts_list_request_category.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ......core import enum + T_Result = typing.TypeVar("T_Result") -class LinkedAccountsListRequestCategory(str, enum.Enum): +class LinkedAccountsListRequestCategory(enum.StrEnum): ACCOUNTING = "accounting" ATS = "ats" CRM = "crm" diff --git a/src/merge/resources/ats/resources/offers/__init__.py b/src/merge/resources/ats/resources/offers/__init__.py index 3eeed634..92239f7d 100644 --- a/src/merge/resources/ats/resources/offers/__init__.py +++ b/src/merge/resources/ats/resources/offers/__init__.py @@ -20,8 +20,10 @@ def __getattr__(attr_name: str) -> typing.Any: raise AttributeError(f"No {attr_name} found in _dynamic_imports for module name -> {__name__}") try: module = import_module(module_name, __package__) - result = getattr(module, attr_name) - return result + if module_name == f".{attr_name}": + return module + else: + return getattr(module, attr_name) except ImportError as e: raise ImportError(f"Failed to import {attr_name} from {module_name}: {e}") from e except AttributeError as e: diff --git a/src/merge/resources/ats/resources/offers/raw_client.py b/src/merge/resources/ats/resources/offers/raw_client.py index 5b9282ae..821d9c1b 100644 --- a/src/merge/resources/ats/resources/offers/raw_client.py +++ b/src/merge/resources/ats/resources/offers/raw_client.py @@ -9,6 +9,7 @@ from .....core.datetime_utils import serialize_datetime from .....core.http_response import AsyncHttpResponse, HttpResponse from .....core.jsonable_encoder import jsonable_encoder +from .....core.parse_error import ParsingError from .....core.request_options import RequestOptions from .....core.unchecked_base_model import construct_type from ...types.offer import Offer @@ -16,6 +17,7 @@ from .types.offers_list_request_expand_item import OffersListRequestExpandItem from .types.offers_list_request_status import OffersListRequestStatus from .types.offers_retrieve_request_expand_item import OffersRetrieveRequestExpandItem +from pydantic import ValidationError class RawOffersClient: @@ -152,6 +154,10 @@ def list( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) def retrieve( @@ -222,6 +228,10 @@ def retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) @@ -359,6 +369,10 @@ async def list( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) async def retrieve( @@ -429,4 +443,8 @@ async def retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) diff --git a/src/merge/resources/ats/resources/offers/types/__init__.py b/src/merge/resources/ats/resources/offers/types/__init__.py index 64f2772b..ccbd015d 100644 --- a/src/merge/resources/ats/resources/offers/types/__init__.py +++ b/src/merge/resources/ats/resources/offers/types/__init__.py @@ -22,8 +22,10 @@ def __getattr__(attr_name: str) -> typing.Any: raise AttributeError(f"No {attr_name} found in _dynamic_imports for module name -> {__name__}") try: module = import_module(module_name, __package__) - result = getattr(module, attr_name) - return result + if module_name == f".{attr_name}": + return module + else: + return getattr(module, attr_name) except ImportError as e: raise ImportError(f"Failed to import {attr_name} from {module_name}: {e}") from e except AttributeError as e: diff --git a/src/merge/resources/ats/resources/offers/types/offers_list_request_expand_item.py b/src/merge/resources/ats/resources/offers/types/offers_list_request_expand_item.py index 8b386364..224335cb 100644 --- a/src/merge/resources/ats/resources/offers/types/offers_list_request_expand_item.py +++ b/src/merge/resources/ats/resources/offers/types/offers_list_request_expand_item.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ......core import enum + T_Result = typing.TypeVar("T_Result") -class OffersListRequestExpandItem(str, enum.Enum): +class OffersListRequestExpandItem(enum.StrEnum): APPLICATION = "application" CREATOR = "creator" diff --git a/src/merge/resources/ats/resources/offers/types/offers_list_request_status.py b/src/merge/resources/ats/resources/offers/types/offers_list_request_status.py index 8b23c596..075c30a2 100644 --- a/src/merge/resources/ats/resources/offers/types/offers_list_request_status.py +++ b/src/merge/resources/ats/resources/offers/types/offers_list_request_status.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ......core import enum + T_Result = typing.TypeVar("T_Result") -class OffersListRequestStatus(str, enum.Enum): +class OffersListRequestStatus(enum.StrEnum): APPROVAL_SENT = "APPROVAL-SENT" APPROVED = "APPROVED" DENIED = "DENIED" diff --git a/src/merge/resources/ats/resources/offers/types/offers_retrieve_request_expand_item.py b/src/merge/resources/ats/resources/offers/types/offers_retrieve_request_expand_item.py index d65095df..b7802a05 100644 --- a/src/merge/resources/ats/resources/offers/types/offers_retrieve_request_expand_item.py +++ b/src/merge/resources/ats/resources/offers/types/offers_retrieve_request_expand_item.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ......core import enum + T_Result = typing.TypeVar("T_Result") -class OffersRetrieveRequestExpandItem(str, enum.Enum): +class OffersRetrieveRequestExpandItem(enum.StrEnum): APPLICATION = "application" CREATOR = "creator" diff --git a/src/merge/resources/ats/resources/offices/raw_client.py b/src/merge/resources/ats/resources/offices/raw_client.py index 7c6d528b..1eab9fbe 100644 --- a/src/merge/resources/ats/resources/offices/raw_client.py +++ b/src/merge/resources/ats/resources/offices/raw_client.py @@ -9,10 +9,12 @@ from .....core.datetime_utils import serialize_datetime from .....core.http_response import AsyncHttpResponse, HttpResponse from .....core.jsonable_encoder import jsonable_encoder +from .....core.parse_error import ParsingError from .....core.request_options import RequestOptions from .....core.unchecked_base_model import construct_type from ...types.office import Office from ...types.paginated_office_list import PaginatedOfficeList +from pydantic import ValidationError class RawOfficesClient: @@ -107,6 +109,10 @@ def list( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) def retrieve( @@ -160,6 +166,10 @@ def retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) @@ -255,6 +265,10 @@ async def list( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) async def retrieve( @@ -308,4 +322,8 @@ async def retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) diff --git a/src/merge/resources/ats/resources/passthrough/raw_client.py b/src/merge/resources/ats/resources/passthrough/raw_client.py index 610aae4f..41a4ffd4 100644 --- a/src/merge/resources/ats/resources/passthrough/raw_client.py +++ b/src/merge/resources/ats/resources/passthrough/raw_client.py @@ -6,10 +6,12 @@ from .....core.api_error import ApiError from .....core.client_wrapper import AsyncClientWrapper, SyncClientWrapper from .....core.http_response import AsyncHttpResponse, HttpResponse +from .....core.parse_error import ParsingError from .....core.request_options import RequestOptions from .....core.unchecked_base_model import construct_type from ...types.data_passthrough_request import DataPassthroughRequest from ...types.remote_response import RemoteResponse +from pydantic import ValidationError # this is used as the default value for optional parameters OMIT = typing.cast(typing.Any, ...) @@ -60,6 +62,10 @@ def create( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) @@ -108,4 +114,8 @@ async def create( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) diff --git a/src/merge/resources/ats/resources/regenerate_key/raw_client.py b/src/merge/resources/ats/resources/regenerate_key/raw_client.py index 7c563aa6..9f16e2e6 100644 --- a/src/merge/resources/ats/resources/regenerate_key/raw_client.py +++ b/src/merge/resources/ats/resources/regenerate_key/raw_client.py @@ -6,9 +6,11 @@ from .....core.api_error import ApiError from .....core.client_wrapper import AsyncClientWrapper, SyncClientWrapper from .....core.http_response import AsyncHttpResponse, HttpResponse +from .....core.parse_error import ParsingError from .....core.request_options import RequestOptions from .....core.unchecked_base_model import construct_type from ...types.remote_key import RemoteKey +from pydantic import ValidationError # this is used as the default value for optional parameters OMIT = typing.cast(typing.Any, ...) @@ -60,6 +62,10 @@ def create(self, *, name: str, request_options: typing.Optional[RequestOptions] _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) @@ -111,4 +117,8 @@ async def create( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) diff --git a/src/merge/resources/ats/resources/reject_reasons/raw_client.py b/src/merge/resources/ats/resources/reject_reasons/raw_client.py index 036206c8..eeb836f9 100644 --- a/src/merge/resources/ats/resources/reject_reasons/raw_client.py +++ b/src/merge/resources/ats/resources/reject_reasons/raw_client.py @@ -9,10 +9,12 @@ from .....core.datetime_utils import serialize_datetime from .....core.http_response import AsyncHttpResponse, HttpResponse from .....core.jsonable_encoder import jsonable_encoder +from .....core.parse_error import ParsingError from .....core.request_options import RequestOptions from .....core.unchecked_base_model import construct_type from ...types.paginated_reject_reason_list import PaginatedRejectReasonList from ...types.reject_reason import RejectReason +from pydantic import ValidationError class RawRejectReasonsClient: @@ -107,6 +109,10 @@ def list( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) def retrieve( @@ -160,6 +166,10 @@ def retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) @@ -255,6 +265,10 @@ async def list( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) async def retrieve( @@ -308,4 +322,8 @@ async def retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) diff --git a/src/merge/resources/ats/resources/scopes/raw_client.py b/src/merge/resources/ats/resources/scopes/raw_client.py index 498b5489..0c35b97b 100644 --- a/src/merge/resources/ats/resources/scopes/raw_client.py +++ b/src/merge/resources/ats/resources/scopes/raw_client.py @@ -6,10 +6,12 @@ from .....core.api_error import ApiError from .....core.client_wrapper import AsyncClientWrapper, SyncClientWrapper from .....core.http_response import AsyncHttpResponse, HttpResponse +from .....core.parse_error import ParsingError from .....core.request_options import RequestOptions from .....core.unchecked_base_model import construct_type from ...types.common_model_scope_api import CommonModelScopeApi from ...types.individual_common_model_scope_deserializer_request import IndividualCommonModelScopeDeserializerRequest +from pydantic import ValidationError # this is used as the default value for optional parameters OMIT = typing.cast(typing.Any, ...) @@ -53,6 +55,10 @@ def default_scopes_retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) def linked_account_scopes_retrieve( @@ -89,6 +95,10 @@ def linked_account_scopes_retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) def linked_account_scopes_create( @@ -138,6 +148,10 @@ def linked_account_scopes_create( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) @@ -179,6 +193,10 @@ async def default_scopes_retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) async def linked_account_scopes_retrieve( @@ -215,6 +233,10 @@ async def linked_account_scopes_retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) async def linked_account_scopes_create( @@ -264,4 +286,8 @@ async def linked_account_scopes_create( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) diff --git a/src/merge/resources/ats/resources/scorecards/__init__.py b/src/merge/resources/ats/resources/scorecards/__init__.py index bb2567f6..c3022c4b 100644 --- a/src/merge/resources/ats/resources/scorecards/__init__.py +++ b/src/merge/resources/ats/resources/scorecards/__init__.py @@ -19,8 +19,10 @@ def __getattr__(attr_name: str) -> typing.Any: raise AttributeError(f"No {attr_name} found in _dynamic_imports for module name -> {__name__}") try: module = import_module(module_name, __package__) - result = getattr(module, attr_name) - return result + if module_name == f".{attr_name}": + return module + else: + return getattr(module, attr_name) except ImportError as e: raise ImportError(f"Failed to import {attr_name} from {module_name}: {e}") from e except AttributeError as e: diff --git a/src/merge/resources/ats/resources/scorecards/raw_client.py b/src/merge/resources/ats/resources/scorecards/raw_client.py index bde15ffa..4fd78976 100644 --- a/src/merge/resources/ats/resources/scorecards/raw_client.py +++ b/src/merge/resources/ats/resources/scorecards/raw_client.py @@ -9,12 +9,14 @@ from .....core.datetime_utils import serialize_datetime from .....core.http_response import AsyncHttpResponse, HttpResponse from .....core.jsonable_encoder import jsonable_encoder +from .....core.parse_error import ParsingError from .....core.request_options import RequestOptions from .....core.unchecked_base_model import construct_type from ...types.paginated_scorecard_list import PaginatedScorecardList from ...types.scorecard import Scorecard from .types.scorecards_list_request_expand_item import ScorecardsListRequestExpandItem from .types.scorecards_retrieve_request_expand_item import ScorecardsRetrieveRequestExpandItem +from pydantic import ValidationError class RawScorecardsClient: @@ -141,6 +143,10 @@ def list( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) def retrieve( @@ -211,6 +217,10 @@ def retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) @@ -338,6 +348,10 @@ async def list( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) async def retrieve( @@ -408,4 +422,8 @@ async def retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) diff --git a/src/merge/resources/ats/resources/scorecards/types/__init__.py b/src/merge/resources/ats/resources/scorecards/types/__init__.py index d4ba55ae..3ae8464b 100644 --- a/src/merge/resources/ats/resources/scorecards/types/__init__.py +++ b/src/merge/resources/ats/resources/scorecards/types/__init__.py @@ -20,8 +20,10 @@ def __getattr__(attr_name: str) -> typing.Any: raise AttributeError(f"No {attr_name} found in _dynamic_imports for module name -> {__name__}") try: module = import_module(module_name, __package__) - result = getattr(module, attr_name) - return result + if module_name == f".{attr_name}": + return module + else: + return getattr(module, attr_name) except ImportError as e: raise ImportError(f"Failed to import {attr_name} from {module_name}: {e}") from e except AttributeError as e: diff --git a/src/merge/resources/ats/resources/scorecards/types/scorecards_list_request_expand_item.py b/src/merge/resources/ats/resources/scorecards/types/scorecards_list_request_expand_item.py index 2c0dbca4..e8830dc1 100644 --- a/src/merge/resources/ats/resources/scorecards/types/scorecards_list_request_expand_item.py +++ b/src/merge/resources/ats/resources/scorecards/types/scorecards_list_request_expand_item.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ......core import enum + T_Result = typing.TypeVar("T_Result") -class ScorecardsListRequestExpandItem(str, enum.Enum): +class ScorecardsListRequestExpandItem(enum.StrEnum): APPLICATION = "application" INTERVIEW = "interview" INTERVIEWER = "interviewer" diff --git a/src/merge/resources/ats/resources/scorecards/types/scorecards_retrieve_request_expand_item.py b/src/merge/resources/ats/resources/scorecards/types/scorecards_retrieve_request_expand_item.py index 76a28f62..151ba65e 100644 --- a/src/merge/resources/ats/resources/scorecards/types/scorecards_retrieve_request_expand_item.py +++ b/src/merge/resources/ats/resources/scorecards/types/scorecards_retrieve_request_expand_item.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ......core import enum + T_Result = typing.TypeVar("T_Result") -class ScorecardsRetrieveRequestExpandItem(str, enum.Enum): +class ScorecardsRetrieveRequestExpandItem(enum.StrEnum): APPLICATION = "application" INTERVIEW = "interview" INTERVIEWER = "interviewer" diff --git a/src/merge/resources/ats/resources/sync_status/raw_client.py b/src/merge/resources/ats/resources/sync_status/raw_client.py index 6425060a..a287d52f 100644 --- a/src/merge/resources/ats/resources/sync_status/raw_client.py +++ b/src/merge/resources/ats/resources/sync_status/raw_client.py @@ -6,9 +6,11 @@ from .....core.api_error import ApiError from .....core.client_wrapper import AsyncClientWrapper, SyncClientWrapper from .....core.http_response import AsyncHttpResponse, HttpResponse +from .....core.parse_error import ParsingError from .....core.request_options import RequestOptions from .....core.unchecked_base_model import construct_type from ...types.paginated_sync_status_list import PaginatedSyncStatusList +from pydantic import ValidationError class RawSyncStatusClient: @@ -63,6 +65,10 @@ def list( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) @@ -118,4 +124,8 @@ async def list( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) diff --git a/src/merge/resources/ats/resources/tags/raw_client.py b/src/merge/resources/ats/resources/tags/raw_client.py index a6f0fb92..2becad1d 100644 --- a/src/merge/resources/ats/resources/tags/raw_client.py +++ b/src/merge/resources/ats/resources/tags/raw_client.py @@ -8,9 +8,11 @@ from .....core.client_wrapper import AsyncClientWrapper, SyncClientWrapper from .....core.datetime_utils import serialize_datetime from .....core.http_response import AsyncHttpResponse, HttpResponse +from .....core.parse_error import ParsingError from .....core.request_options import RequestOptions from .....core.unchecked_base_model import construct_type from ...types.paginated_tag_list import PaginatedTagList +from pydantic import ValidationError class RawTagsClient: @@ -105,6 +107,10 @@ def list( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) @@ -200,4 +206,8 @@ async def list( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) diff --git a/src/merge/resources/ats/resources/users/raw_client.py b/src/merge/resources/ats/resources/users/raw_client.py index 363fd65e..7b80551a 100644 --- a/src/merge/resources/ats/resources/users/raw_client.py +++ b/src/merge/resources/ats/resources/users/raw_client.py @@ -9,10 +9,12 @@ from .....core.datetime_utils import serialize_datetime from .....core.http_response import AsyncHttpResponse, HttpResponse from .....core.jsonable_encoder import jsonable_encoder +from .....core.parse_error import ParsingError from .....core.request_options import RequestOptions from .....core.unchecked_base_model import construct_type from ...types.paginated_remote_user_list import PaginatedRemoteUserList from ...types.remote_user import RemoteUser +from pydantic import ValidationError class RawUsersClient: @@ -122,6 +124,10 @@ def list( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) def retrieve( @@ -185,6 +191,10 @@ def retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) @@ -295,6 +305,10 @@ async def list( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) async def retrieve( @@ -358,4 +372,8 @@ async def retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) diff --git a/src/merge/resources/ats/resources/webhook_receivers/raw_client.py b/src/merge/resources/ats/resources/webhook_receivers/raw_client.py index 0df96f9e..abfd719b 100644 --- a/src/merge/resources/ats/resources/webhook_receivers/raw_client.py +++ b/src/merge/resources/ats/resources/webhook_receivers/raw_client.py @@ -6,9 +6,11 @@ from .....core.api_error import ApiError from .....core.client_wrapper import AsyncClientWrapper, SyncClientWrapper from .....core.http_response import AsyncHttpResponse, HttpResponse +from .....core.parse_error import ParsingError from .....core.request_options import RequestOptions from .....core.unchecked_base_model import construct_type from ...types.webhook_receiver import WebhookReceiver +from pydantic import ValidationError # this is used as the default value for optional parameters OMIT = typing.cast(typing.Any, ...) @@ -52,6 +54,10 @@ def list( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) def create( @@ -108,6 +114,10 @@ def create( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) @@ -149,6 +159,10 @@ async def list( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) async def create( @@ -205,4 +219,8 @@ async def create( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) diff --git a/src/merge/resources/ats/types/__init__.py b/src/merge/resources/ats/types/__init__.py index bd98b22f..1d4d2145 100644 --- a/src/merge/resources/ats/types/__init__.py +++ b/src/merge/resources/ats/types/__init__.py @@ -466,8 +466,10 @@ def __getattr__(attr_name: str) -> typing.Any: raise AttributeError(f"No {attr_name} found in _dynamic_imports for module name -> {__name__}") try: module = import_module(module_name, __package__) - result = getattr(module, attr_name) - return result + if module_name == f".{attr_name}": + return module + else: + return getattr(module, attr_name) except ImportError as e: raise ImportError(f"Failed to import {attr_name} from {module_name}: {e}") from e except AttributeError as e: diff --git a/src/merge/resources/ats/types/access_role_enum.py b/src/merge/resources/ats/types/access_role_enum.py index fc75b705..9bae7f25 100644 --- a/src/merge/resources/ats/types/access_role_enum.py +++ b/src/merge/resources/ats/types/access_role_enum.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ....core import enum + T_Result = typing.TypeVar("T_Result") -class AccessRoleEnum(str, enum.Enum): +class AccessRoleEnum(enum.StrEnum): """ * `SUPER_ADMIN` - SUPER_ADMIN * `ADMIN` - ADMIN diff --git a/src/merge/resources/ats/types/account_details_and_actions.py b/src/merge/resources/ats/types/account_details_and_actions.py index 93c874ed..cbf29cb3 100644 --- a/src/merge/resources/ats/types/account_details_and_actions.py +++ b/src/merge/resources/ats/types/account_details_and_actions.py @@ -42,7 +42,7 @@ class AccountDetailsAndActions(UncheckedBaseModel): integration: typing.Optional[AccountDetailsAndActionsIntegration] = None account_type: str completed_at: dt.datetime - integration_specific_fields: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None + integration_specific_fields: typing.Optional[typing.Dict[str, typing.Any]] = None if IS_PYDANTIC_V2: model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2 diff --git a/src/merge/resources/ats/types/account_details_and_actions_status_enum.py b/src/merge/resources/ats/types/account_details_and_actions_status_enum.py index df37f582..b9ae9efc 100644 --- a/src/merge/resources/ats/types/account_details_and_actions_status_enum.py +++ b/src/merge/resources/ats/types/account_details_and_actions_status_enum.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ....core import enum + T_Result = typing.TypeVar("T_Result") -class AccountDetailsAndActionsStatusEnum(str, enum.Enum): +class AccountDetailsAndActionsStatusEnum(enum.StrEnum): """ * `COMPLETE` - COMPLETE * `INCOMPLETE` - INCOMPLETE diff --git a/src/merge/resources/ats/types/account_integration.py b/src/merge/resources/ats/types/account_integration.py index ef8b260d..7bc872ca 100644 --- a/src/merge/resources/ats/types/account_integration.py +++ b/src/merge/resources/ats/types/account_integration.py @@ -40,9 +40,7 @@ class AccountIntegration(UncheckedBaseModel): """ slug: typing.Optional[str] = None - api_endpoints_to_documentation_urls: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = ( - pydantic.Field(default=None) - ) + api_endpoints_to_documentation_urls: typing.Optional[typing.Dict[str, typing.Any]] = pydantic.Field(default=None) """ Mapping of API endpoints to documentation urls for support. Example: {'GET': [['/common-model-scopes', 'https://docs.merge.dev/accounting/common-model-scopes/#common_model_scopes_retrieve'],['/common-model-actions', 'https://docs.merge.dev/accounting/common-model-actions/#common_model_actions_retrieve']], 'POST': []} """ @@ -52,7 +50,7 @@ class AccountIntegration(UncheckedBaseModel): Setup guide URL for third party webhook creation. Exposed in Merge Docs. """ - category_beta_status: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = pydantic.Field(default=None) + category_beta_status: typing.Optional[typing.Dict[str, typing.Any]] = pydantic.Field(default=None) """ Category or categories this integration is in beta status for. """ diff --git a/src/merge/resources/ats/types/activity.py b/src/merge/resources/ats/types/activity.py index 3a794363..06e9b9a5 100644 --- a/src/merge/resources/ats/types/activity.py +++ b/src/merge/resources/ats/types/activity.py @@ -81,7 +81,7 @@ class Activity(UncheckedBaseModel): Indicates whether or not this object has been deleted in the third party platform. Full coverage deletion detection is a premium add-on. Native deletion detection is offered for free with limited coverage. [Learn more](https://docs.merge.dev/integrations/hris/supported-features/). """ - field_mappings: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None + field_mappings: typing.Optional[typing.Dict[str, typing.Any]] = None remote_data: typing.Optional[typing.List[RemoteData]] = None if IS_PYDANTIC_V2: diff --git a/src/merge/resources/ats/types/activity_request.py b/src/merge/resources/ats/types/activity_request.py index 5a6a4f30..d83b44f2 100644 --- a/src/merge/resources/ats/types/activity_request.py +++ b/src/merge/resources/ats/types/activity_request.py @@ -53,8 +53,8 @@ class ActivityRequest(UncheckedBaseModel): """ candidate: typing.Optional[str] = None - integration_params: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None - linked_account_params: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None + integration_params: typing.Optional[typing.Dict[str, typing.Any]] = None + linked_account_params: typing.Optional[typing.Dict[str, typing.Any]] = None if IS_PYDANTIC_V2: model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2 diff --git a/src/merge/resources/ats/types/activity_type_enum.py b/src/merge/resources/ats/types/activity_type_enum.py index 1ce3bf63..08f00f8d 100644 --- a/src/merge/resources/ats/types/activity_type_enum.py +++ b/src/merge/resources/ats/types/activity_type_enum.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ....core import enum + T_Result = typing.TypeVar("T_Result") -class ActivityTypeEnum(str, enum.Enum): +class ActivityTypeEnum(enum.StrEnum): """ * `NOTE` - NOTE * `EMAIL` - EMAIL diff --git a/src/merge/resources/ats/types/advanced_metadata.py b/src/merge/resources/ats/types/advanced_metadata.py index 60b5d072..aef64bb3 100644 --- a/src/merge/resources/ats/types/advanced_metadata.py +++ b/src/merge/resources/ats/types/advanced_metadata.py @@ -13,7 +13,7 @@ class AdvancedMetadata(UncheckedBaseModel): description: typing.Optional[str] = None is_required: typing.Optional[bool] = None is_custom: typing.Optional[bool] = None - field_choices: typing.Optional[typing.List[typing.Optional[typing.Any]]] = None + field_choices: typing.Optional[typing.List[typing.Any]] = None if IS_PYDANTIC_V2: model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2 diff --git a/src/merge/resources/ats/types/application.py b/src/merge/resources/ats/types/application.py index 3353858a..716dee2c 100644 --- a/src/merge/resources/ats/types/application.py +++ b/src/merge/resources/ats/types/application.py @@ -89,7 +89,7 @@ class Application(UncheckedBaseModel): Indicates whether or not this object has been deleted in the third party platform. Full coverage deletion detection is a premium add-on. Native deletion detection is offered for free with limited coverage. [Learn more](https://docs.merge.dev/integrations/hris/supported-features/). """ - field_mappings: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None + field_mappings: typing.Optional[typing.Dict[str, typing.Any]] = None remote_data: typing.Optional[typing.List[RemoteData]] = None if IS_PYDANTIC_V2: @@ -102,11 +102,19 @@ class Config: extra = pydantic.Extra.allow -from .candidate import Candidate # noqa: E402, F401, I001 -from .job import Job # noqa: E402, F401, I001 -from .job_posting import JobPosting # noqa: E402, F401, I001 -from .offer import Offer # noqa: E402, F401, I001 -from .application_candidate import ApplicationCandidate # noqa: E402, F401, I001 -from .application_offers_item import ApplicationOffersItem # noqa: E402, F401, I001 - -update_forward_refs(Application) +from .application_candidate import ApplicationCandidate # noqa: E402, I001 +from .application_offers_item import ApplicationOffersItem # noqa: E402, I001 +from .candidate import Candidate # noqa: E402, I001 +from .candidate_applications_item import CandidateApplicationsItem # noqa: E402, I001 +from .offer import Offer # noqa: E402, I001 +from .offer_application import OfferApplication # noqa: E402, I001 + +update_forward_refs( + Application, + ApplicationCandidate=ApplicationCandidate, + ApplicationOffersItem=ApplicationOffersItem, + Candidate=Candidate, + CandidateApplicationsItem=CandidateApplicationsItem, + Offer=Offer, + OfferApplication=OfferApplication, +) diff --git a/src/merge/resources/ats/types/application_request.py b/src/merge/resources/ats/types/application_request.py index 5c75afbb..5eaa0293 100644 --- a/src/merge/resources/ats/types/application_request.py +++ b/src/merge/resources/ats/types/application_request.py @@ -70,8 +70,8 @@ class ApplicationRequest(UncheckedBaseModel): """ remote_template_id: typing.Optional[str] = None - integration_params: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None - linked_account_params: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None + integration_params: typing.Optional[typing.Dict[str, typing.Any]] = None + linked_account_params: typing.Optional[typing.Dict[str, typing.Any]] = None if IS_PYDANTIC_V2: model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2 @@ -83,10 +83,4 @@ class Config: extra = pydantic.Extra.allow -from .application import Application # noqa: E402, F401, I001 -from .candidate import Candidate # noqa: E402, F401, I001 -from .job import Job # noqa: E402, F401, I001 -from .job_posting import JobPosting # noqa: E402, F401, I001 -from .offer import Offer # noqa: E402, F401, I001 - update_forward_refs(ApplicationRequest) diff --git a/src/merge/resources/ats/types/application_response.py b/src/merge/resources/ats/types/application_response.py index ba7953b7..ce5849f3 100644 --- a/src/merge/resources/ats/types/application_response.py +++ b/src/merge/resources/ats/types/application_response.py @@ -28,10 +28,21 @@ class Config: extra = pydantic.Extra.allow -from .application import Application # noqa: E402, F401, I001 -from .candidate import Candidate # noqa: E402, F401, I001 -from .job import Job # noqa: E402, F401, I001 -from .job_posting import JobPosting # noqa: E402, F401, I001 -from .offer import Offer # noqa: E402, F401, I001 - -update_forward_refs(ApplicationResponse) +from .application import Application # noqa: E402, I001 +from .application_candidate import ApplicationCandidate # noqa: E402, I001 +from .application_offers_item import ApplicationOffersItem # noqa: E402, I001 +from .candidate import Candidate # noqa: E402, I001 +from .candidate_applications_item import CandidateApplicationsItem # noqa: E402, I001 +from .offer import Offer # noqa: E402, I001 +from .offer_application import OfferApplication # noqa: E402, I001 + +update_forward_refs( + ApplicationResponse, + Application=Application, + ApplicationCandidate=ApplicationCandidate, + ApplicationOffersItem=ApplicationOffersItem, + Candidate=Candidate, + CandidateApplicationsItem=CandidateApplicationsItem, + Offer=Offer, + OfferApplication=OfferApplication, +) diff --git a/src/merge/resources/ats/types/attachment.py b/src/merge/resources/ats/types/attachment.py index 8e988378..e6d5bc98 100644 --- a/src/merge/resources/ats/types/attachment.py +++ b/src/merge/resources/ats/types/attachment.py @@ -65,7 +65,7 @@ class Attachment(UncheckedBaseModel): Indicates whether or not this object has been deleted in the third party platform. Full coverage deletion detection is a premium add-on. Native deletion detection is offered for free with limited coverage. [Learn more](https://docs.merge.dev/integrations/hris/supported-features/). """ - field_mappings: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None + field_mappings: typing.Optional[typing.Dict[str, typing.Any]] = None remote_data: typing.Optional[typing.List[RemoteData]] = None if IS_PYDANTIC_V2: diff --git a/src/merge/resources/ats/types/attachment_request.py b/src/merge/resources/ats/types/attachment_request.py index 55ebdfff..024d0d10 100644 --- a/src/merge/resources/ats/types/attachment_request.py +++ b/src/merge/resources/ats/types/attachment_request.py @@ -42,8 +42,8 @@ class AttachmentRequest(UncheckedBaseModel): * `OTHER` - OTHER """ - integration_params: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None - linked_account_params: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None + integration_params: typing.Optional[typing.Dict[str, typing.Any]] = None + linked_account_params: typing.Optional[typing.Dict[str, typing.Any]] = None if IS_PYDANTIC_V2: model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2 diff --git a/src/merge/resources/ats/types/attachment_type_enum.py b/src/merge/resources/ats/types/attachment_type_enum.py index 51124af9..dfadb4b5 100644 --- a/src/merge/resources/ats/types/attachment_type_enum.py +++ b/src/merge/resources/ats/types/attachment_type_enum.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ....core import enum + T_Result = typing.TypeVar("T_Result") -class AttachmentTypeEnum(str, enum.Enum): +class AttachmentTypeEnum(enum.StrEnum): """ * `RESUME` - RESUME * `COVER_LETTER` - COVER_LETTER diff --git a/src/merge/resources/ats/types/candidate.py b/src/merge/resources/ats/types/candidate.py index 071e4a1e..3beefa38 100644 --- a/src/merge/resources/ats/types/candidate.py +++ b/src/merge/resources/ats/types/candidate.py @@ -115,7 +115,7 @@ class Candidate(UncheckedBaseModel): Indicates whether or not this object has been deleted in the third party platform. Full coverage deletion detection is a premium add-on. Native deletion detection is offered for free with limited coverage. [Learn more](https://docs.merge.dev/integrations/hris/supported-features/). """ - field_mappings: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None + field_mappings: typing.Optional[typing.Dict[str, typing.Any]] = None remote_data: typing.Optional[typing.List[RemoteData]] = None if IS_PYDANTIC_V2: @@ -128,10 +128,19 @@ class Config: extra = pydantic.Extra.allow -from .application import Application # noqa: E402, F401, I001 -from .job import Job # noqa: E402, F401, I001 -from .job_posting import JobPosting # noqa: E402, F401, I001 -from .offer import Offer # noqa: E402, F401, I001 -from .candidate_applications_item import CandidateApplicationsItem # noqa: E402, F401, I001 - -update_forward_refs(Candidate) +from .application import Application # noqa: E402, I001 +from .application_candidate import ApplicationCandidate # noqa: E402, I001 +from .application_offers_item import ApplicationOffersItem # noqa: E402, I001 +from .candidate_applications_item import CandidateApplicationsItem # noqa: E402, I001 +from .offer import Offer # noqa: E402, I001 +from .offer_application import OfferApplication # noqa: E402, I001 + +update_forward_refs( + Candidate, + Application=Application, + ApplicationCandidate=ApplicationCandidate, + ApplicationOffersItem=ApplicationOffersItem, + CandidateApplicationsItem=CandidateApplicationsItem, + Offer=Offer, + OfferApplication=OfferApplication, +) diff --git a/src/merge/resources/ats/types/candidate_request.py b/src/merge/resources/ats/types/candidate_request.py index a7b112b9..91df6664 100644 --- a/src/merge/resources/ats/types/candidate_request.py +++ b/src/merge/resources/ats/types/candidate_request.py @@ -87,8 +87,8 @@ class CandidateRequest(UncheckedBaseModel): """ remote_template_id: typing.Optional[str] = None - integration_params: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None - linked_account_params: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None + integration_params: typing.Optional[typing.Dict[str, typing.Any]] = None + linked_account_params: typing.Optional[typing.Dict[str, typing.Any]] = None if IS_PYDANTIC_V2: model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2 @@ -100,10 +100,4 @@ class Config: extra = pydantic.Extra.allow -from .application import Application # noqa: E402, F401, I001 -from .candidate import Candidate # noqa: E402, F401, I001 -from .job import Job # noqa: E402, F401, I001 -from .job_posting import JobPosting # noqa: E402, F401, I001 -from .offer import Offer # noqa: E402, F401, I001 - update_forward_refs(CandidateRequest) diff --git a/src/merge/resources/ats/types/candidate_response.py b/src/merge/resources/ats/types/candidate_response.py index 2bb8b8cc..a2389631 100644 --- a/src/merge/resources/ats/types/candidate_response.py +++ b/src/merge/resources/ats/types/candidate_response.py @@ -28,10 +28,21 @@ class Config: extra = pydantic.Extra.allow -from .application import Application # noqa: E402, F401, I001 -from .candidate import Candidate # noqa: E402, F401, I001 -from .job import Job # noqa: E402, F401, I001 -from .job_posting import JobPosting # noqa: E402, F401, I001 -from .offer import Offer # noqa: E402, F401, I001 - -update_forward_refs(CandidateResponse) +from .application import Application # noqa: E402, I001 +from .application_candidate import ApplicationCandidate # noqa: E402, I001 +from .application_offers_item import ApplicationOffersItem # noqa: E402, I001 +from .candidate import Candidate # noqa: E402, I001 +from .candidate_applications_item import CandidateApplicationsItem # noqa: E402, I001 +from .offer import Offer # noqa: E402, I001 +from .offer_application import OfferApplication # noqa: E402, I001 + +update_forward_refs( + CandidateResponse, + Application=Application, + ApplicationCandidate=ApplicationCandidate, + ApplicationOffersItem=ApplicationOffersItem, + Candidate=Candidate, + CandidateApplicationsItem=CandidateApplicationsItem, + Offer=Offer, + OfferApplication=OfferApplication, +) diff --git a/src/merge/resources/ats/types/categories_enum.py b/src/merge/resources/ats/types/categories_enum.py index 3f2dc5a9..82308151 100644 --- a/src/merge/resources/ats/types/categories_enum.py +++ b/src/merge/resources/ats/types/categories_enum.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ....core import enum + T_Result = typing.TypeVar("T_Result") -class CategoriesEnum(str, enum.Enum): +class CategoriesEnum(enum.StrEnum): """ * `hris` - hris * `ats` - ats diff --git a/src/merge/resources/ats/types/category_enum.py b/src/merge/resources/ats/types/category_enum.py index d37e48f5..9a2fa8c7 100644 --- a/src/merge/resources/ats/types/category_enum.py +++ b/src/merge/resources/ats/types/category_enum.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ....core import enum + T_Result = typing.TypeVar("T_Result") -class CategoryEnum(str, enum.Enum): +class CategoryEnum(enum.StrEnum): """ * `hris` - hris * `ats` - ats diff --git a/src/merge/resources/ats/types/data_passthrough_request.py b/src/merge/resources/ats/types/data_passthrough_request.py index c9f0a799..df3af029 100644 --- a/src/merge/resources/ats/types/data_passthrough_request.py +++ b/src/merge/resources/ats/types/data_passthrough_request.py @@ -41,7 +41,7 @@ class DataPassthroughRequest(UncheckedBaseModel): Pass an array of `MultipartFormField` objects in here instead of using the `data` param if `request_format` is set to `MULTIPART`. """ - headers: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = pydantic.Field(default=None) + headers: typing.Optional[typing.Dict[str, typing.Any]] = pydantic.Field(default=None) """ The headers to use for the request (Merge will handle the account's authorization headers). `Content-Type` header is required for passthrough. Choose content type corresponding to expected format of receiving server. """ diff --git a/src/merge/resources/ats/types/department.py b/src/merge/resources/ats/types/department.py index 7098c001..0eac0de1 100644 --- a/src/merge/resources/ats/types/department.py +++ b/src/merge/resources/ats/types/department.py @@ -44,7 +44,7 @@ class Department(UncheckedBaseModel): Indicates whether or not this object has been deleted in the third party platform. Full coverage deletion detection is a premium add-on. Native deletion detection is offered for free with limited coverage. [Learn more](https://docs.merge.dev/integrations/hris/supported-features/). """ - field_mappings: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None + field_mappings: typing.Optional[typing.Dict[str, typing.Any]] = None remote_data: typing.Optional[typing.List[RemoteData]] = None if IS_PYDANTIC_V2: diff --git a/src/merge/resources/ats/types/disability_status_enum.py b/src/merge/resources/ats/types/disability_status_enum.py index e0987cfe..faf2bf27 100644 --- a/src/merge/resources/ats/types/disability_status_enum.py +++ b/src/merge/resources/ats/types/disability_status_enum.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ....core import enum + T_Result = typing.TypeVar("T_Result") -class DisabilityStatusEnum(str, enum.Enum): +class DisabilityStatusEnum(enum.StrEnum): """ * `YES_I_HAVE_A_DISABILITY_OR_PREVIOUSLY_HAD_A_DISABILITY` - YES_I_HAVE_A_DISABILITY_OR_PREVIOUSLY_HAD_A_DISABILITY * `NO_I_DONT_HAVE_A_DISABILITY` - NO_I_DONT_HAVE_A_DISABILITY diff --git a/src/merge/resources/ats/types/eeoc.py b/src/merge/resources/ats/types/eeoc.py index dbdae892..dbf8abce 100644 --- a/src/merge/resources/ats/types/eeoc.py +++ b/src/merge/resources/ats/types/eeoc.py @@ -99,7 +99,7 @@ class Eeoc(UncheckedBaseModel): Indicates whether or not this object has been deleted in the third party platform. Full coverage deletion detection is a premium add-on. Native deletion detection is offered for free with limited coverage. [Learn more](https://docs.merge.dev/integrations/hris/supported-features/). """ - field_mappings: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None + field_mappings: typing.Optional[typing.Dict[str, typing.Any]] = None remote_data: typing.Optional[typing.List[RemoteData]] = None if IS_PYDANTIC_V2: @@ -112,10 +112,4 @@ class Config: extra = pydantic.Extra.allow -from .application import Application # noqa: E402, F401, I001 -from .candidate import Candidate # noqa: E402, F401, I001 -from .job import Job # noqa: E402, F401, I001 -from .job_posting import JobPosting # noqa: E402, F401, I001 -from .offer import Offer # noqa: E402, F401, I001 - update_forward_refs(Eeoc) diff --git a/src/merge/resources/ats/types/email_address_request.py b/src/merge/resources/ats/types/email_address_request.py index 7bd79d2c..2a000845 100644 --- a/src/merge/resources/ats/types/email_address_request.py +++ b/src/merge/resources/ats/types/email_address_request.py @@ -31,8 +31,8 @@ class EmailAddressRequest(UncheckedBaseModel): * `OTHER` - OTHER """ - integration_params: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None - linked_account_params: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None + integration_params: typing.Optional[typing.Dict[str, typing.Any]] = None + linked_account_params: typing.Optional[typing.Dict[str, typing.Any]] = None if IS_PYDANTIC_V2: model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2 diff --git a/src/merge/resources/ats/types/email_address_type_enum.py b/src/merge/resources/ats/types/email_address_type_enum.py index dd6b141e..dde90799 100644 --- a/src/merge/resources/ats/types/email_address_type_enum.py +++ b/src/merge/resources/ats/types/email_address_type_enum.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ....core import enum + T_Result = typing.TypeVar("T_Result") -class EmailAddressTypeEnum(str, enum.Enum): +class EmailAddressTypeEnum(enum.StrEnum): """ * `PERSONAL` - PERSONAL * `WORK` - WORK diff --git a/src/merge/resources/ats/types/enabled_actions_enum.py b/src/merge/resources/ats/types/enabled_actions_enum.py index 29cf9839..604265f8 100644 --- a/src/merge/resources/ats/types/enabled_actions_enum.py +++ b/src/merge/resources/ats/types/enabled_actions_enum.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ....core import enum + T_Result = typing.TypeVar("T_Result") -class EnabledActionsEnum(str, enum.Enum): +class EnabledActionsEnum(enum.StrEnum): """ * `READ` - READ * `WRITE` - WRITE diff --git a/src/merge/resources/ats/types/encoding_enum.py b/src/merge/resources/ats/types/encoding_enum.py index 7454647e..aa2aa971 100644 --- a/src/merge/resources/ats/types/encoding_enum.py +++ b/src/merge/resources/ats/types/encoding_enum.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ....core import enum + T_Result = typing.TypeVar("T_Result") -class EncodingEnum(str, enum.Enum): +class EncodingEnum(enum.StrEnum): """ * `RAW` - RAW * `BASE64` - BASE64 diff --git a/src/merge/resources/ats/types/event_type_enum.py b/src/merge/resources/ats/types/event_type_enum.py index 537cea3f..1c16772d 100644 --- a/src/merge/resources/ats/types/event_type_enum.py +++ b/src/merge/resources/ats/types/event_type_enum.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ....core import enum + T_Result = typing.TypeVar("T_Result") -class EventTypeEnum(str, enum.Enum): +class EventTypeEnum(enum.StrEnum): """ * `CREATED_REMOTE_PRODUCTION_API_KEY` - CREATED_REMOTE_PRODUCTION_API_KEY * `DELETED_REMOTE_PRODUCTION_API_KEY` - DELETED_REMOTE_PRODUCTION_API_KEY diff --git a/src/merge/resources/ats/types/external_target_field_api_response.py b/src/merge/resources/ats/types/external_target_field_api_response.py index 2f4ac0fc..768bb05d 100644 --- a/src/merge/resources/ats/types/external_target_field_api_response.py +++ b/src/merge/resources/ats/types/external_target_field_api_response.py @@ -3,36 +3,88 @@ import typing import pydantic +import typing_extensions from ....core.pydantic_utilities import IS_PYDANTIC_V2 +from ....core.serialization import FieldMetadata from ....core.unchecked_base_model import UncheckedBaseModel from .external_target_field_api import ExternalTargetFieldApi class ExternalTargetFieldApiResponse(UncheckedBaseModel): - activity: typing.Optional[typing.List[ExternalTargetFieldApi]] = pydantic.Field(alias="Activity", default=None) - application: typing.Optional[typing.List[ExternalTargetFieldApi]] = pydantic.Field( - alias="Application", default=None - ) - attachment: typing.Optional[typing.List[ExternalTargetFieldApi]] = pydantic.Field(alias="Attachment", default=None) - candidate: typing.Optional[typing.List[ExternalTargetFieldApi]] = pydantic.Field(alias="Candidate", default=None) - department: typing.Optional[typing.List[ExternalTargetFieldApi]] = pydantic.Field(alias="Department", default=None) - eeoc: typing.Optional[typing.List[ExternalTargetFieldApi]] = pydantic.Field(alias="EEOC", default=None) - scheduled_interview: typing.Optional[typing.List[ExternalTargetFieldApi]] = pydantic.Field( - alias="ScheduledInterview", default=None - ) - job: typing.Optional[typing.List[ExternalTargetFieldApi]] = pydantic.Field(alias="Job", default=None) - job_posting: typing.Optional[typing.List[ExternalTargetFieldApi]] = pydantic.Field(alias="JobPosting", default=None) - job_interview_stage: typing.Optional[typing.List[ExternalTargetFieldApi]] = pydantic.Field( - alias="JobInterviewStage", default=None - ) - offer: typing.Optional[typing.List[ExternalTargetFieldApi]] = pydantic.Field(alias="Offer", default=None) - office: typing.Optional[typing.List[ExternalTargetFieldApi]] = pydantic.Field(alias="Office", default=None) - reject_reason: typing.Optional[typing.List[ExternalTargetFieldApi]] = pydantic.Field( - alias="RejectReason", default=None - ) - scorecard: typing.Optional[typing.List[ExternalTargetFieldApi]] = pydantic.Field(alias="Scorecard", default=None) - tag: typing.Optional[typing.List[ExternalTargetFieldApi]] = pydantic.Field(alias="Tag", default=None) - remote_user: typing.Optional[typing.List[ExternalTargetFieldApi]] = pydantic.Field(alias="RemoteUser", default=None) + activity: typing_extensions.Annotated[ + typing.Optional[typing.List[ExternalTargetFieldApi]], + FieldMetadata(alias="Activity"), + pydantic.Field(alias="Activity"), + ] = None + application: typing_extensions.Annotated[ + typing.Optional[typing.List[ExternalTargetFieldApi]], + FieldMetadata(alias="Application"), + pydantic.Field(alias="Application"), + ] = None + attachment: typing_extensions.Annotated[ + typing.Optional[typing.List[ExternalTargetFieldApi]], + FieldMetadata(alias="Attachment"), + pydantic.Field(alias="Attachment"), + ] = None + candidate: typing_extensions.Annotated[ + typing.Optional[typing.List[ExternalTargetFieldApi]], + FieldMetadata(alias="Candidate"), + pydantic.Field(alias="Candidate"), + ] = None + department: typing_extensions.Annotated[ + typing.Optional[typing.List[ExternalTargetFieldApi]], + FieldMetadata(alias="Department"), + pydantic.Field(alias="Department"), + ] = None + eeoc: typing_extensions.Annotated[ + typing.Optional[typing.List[ExternalTargetFieldApi]], FieldMetadata(alias="EEOC"), pydantic.Field(alias="EEOC") + ] = None + scheduled_interview: typing_extensions.Annotated[ + typing.Optional[typing.List[ExternalTargetFieldApi]], + FieldMetadata(alias="ScheduledInterview"), + pydantic.Field(alias="ScheduledInterview"), + ] = None + job: typing_extensions.Annotated[ + typing.Optional[typing.List[ExternalTargetFieldApi]], FieldMetadata(alias="Job"), pydantic.Field(alias="Job") + ] = None + job_posting: typing_extensions.Annotated[ + typing.Optional[typing.List[ExternalTargetFieldApi]], + FieldMetadata(alias="JobPosting"), + pydantic.Field(alias="JobPosting"), + ] = None + job_interview_stage: typing_extensions.Annotated[ + typing.Optional[typing.List[ExternalTargetFieldApi]], + FieldMetadata(alias="JobInterviewStage"), + pydantic.Field(alias="JobInterviewStage"), + ] = None + offer: typing_extensions.Annotated[ + typing.Optional[typing.List[ExternalTargetFieldApi]], + FieldMetadata(alias="Offer"), + pydantic.Field(alias="Offer"), + ] = None + office: typing_extensions.Annotated[ + typing.Optional[typing.List[ExternalTargetFieldApi]], + FieldMetadata(alias="Office"), + pydantic.Field(alias="Office"), + ] = None + reject_reason: typing_extensions.Annotated[ + typing.Optional[typing.List[ExternalTargetFieldApi]], + FieldMetadata(alias="RejectReason"), + pydantic.Field(alias="RejectReason"), + ] = None + scorecard: typing_extensions.Annotated[ + typing.Optional[typing.List[ExternalTargetFieldApi]], + FieldMetadata(alias="Scorecard"), + pydantic.Field(alias="Scorecard"), + ] = None + tag: typing_extensions.Annotated[ + typing.Optional[typing.List[ExternalTargetFieldApi]], FieldMetadata(alias="Tag"), pydantic.Field(alias="Tag") + ] = None + remote_user: typing_extensions.Annotated[ + typing.Optional[typing.List[ExternalTargetFieldApi]], + FieldMetadata(alias="RemoteUser"), + pydantic.Field(alias="RemoteUser"), + ] = None if IS_PYDANTIC_V2: model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2 diff --git a/src/merge/resources/ats/types/field_mapping_api_instance_remote_field.py b/src/merge/resources/ats/types/field_mapping_api_instance_remote_field.py index 578a2b10..ccd1f990 100644 --- a/src/merge/resources/ats/types/field_mapping_api_instance_remote_field.py +++ b/src/merge/resources/ats/types/field_mapping_api_instance_remote_field.py @@ -3,7 +3,9 @@ import typing import pydantic +import typing_extensions from ....core.pydantic_utilities import IS_PYDANTIC_V2 +from ....core.serialization import FieldMetadata from ....core.unchecked_base_model import UncheckedBaseModel from .field_mapping_api_instance_remote_field_remote_endpoint_info import ( FieldMappingApiInstanceRemoteFieldRemoteEndpointInfo, @@ -12,9 +14,9 @@ class FieldMappingApiInstanceRemoteField(UncheckedBaseModel): remote_key_name: typing.Optional[str] = None - schema_: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = pydantic.Field( - alias="schema", default=None - ) + schema_: typing_extensions.Annotated[ + typing.Optional[typing.Dict[str, typing.Any]], FieldMetadata(alias="schema"), pydantic.Field(alias="schema") + ] = None remote_endpoint_info: FieldMappingApiInstanceRemoteFieldRemoteEndpointInfo if IS_PYDANTIC_V2: diff --git a/src/merge/resources/ats/types/field_mapping_api_instance_response.py b/src/merge/resources/ats/types/field_mapping_api_instance_response.py index 65d4f96c..7e46bd00 100644 --- a/src/merge/resources/ats/types/field_mapping_api_instance_response.py +++ b/src/merge/resources/ats/types/field_mapping_api_instance_response.py @@ -3,40 +3,88 @@ import typing import pydantic +import typing_extensions from ....core.pydantic_utilities import IS_PYDANTIC_V2 +from ....core.serialization import FieldMetadata from ....core.unchecked_base_model import UncheckedBaseModel from .field_mapping_api_instance import FieldMappingApiInstance class FieldMappingApiInstanceResponse(UncheckedBaseModel): - activity: typing.Optional[typing.List[FieldMappingApiInstance]] = pydantic.Field(alias="Activity", default=None) - application: typing.Optional[typing.List[FieldMappingApiInstance]] = pydantic.Field( - alias="Application", default=None - ) - attachment: typing.Optional[typing.List[FieldMappingApiInstance]] = pydantic.Field(alias="Attachment", default=None) - candidate: typing.Optional[typing.List[FieldMappingApiInstance]] = pydantic.Field(alias="Candidate", default=None) - department: typing.Optional[typing.List[FieldMappingApiInstance]] = pydantic.Field(alias="Department", default=None) - eeoc: typing.Optional[typing.List[FieldMappingApiInstance]] = pydantic.Field(alias="EEOC", default=None) - scheduled_interview: typing.Optional[typing.List[FieldMappingApiInstance]] = pydantic.Field( - alias="ScheduledInterview", default=None - ) - job: typing.Optional[typing.List[FieldMappingApiInstance]] = pydantic.Field(alias="Job", default=None) - job_posting: typing.Optional[typing.List[FieldMappingApiInstance]] = pydantic.Field( - alias="JobPosting", default=None - ) - job_interview_stage: typing.Optional[typing.List[FieldMappingApiInstance]] = pydantic.Field( - alias="JobInterviewStage", default=None - ) - offer: typing.Optional[typing.List[FieldMappingApiInstance]] = pydantic.Field(alias="Offer", default=None) - office: typing.Optional[typing.List[FieldMappingApiInstance]] = pydantic.Field(alias="Office", default=None) - reject_reason: typing.Optional[typing.List[FieldMappingApiInstance]] = pydantic.Field( - alias="RejectReason", default=None - ) - scorecard: typing.Optional[typing.List[FieldMappingApiInstance]] = pydantic.Field(alias="Scorecard", default=None) - tag: typing.Optional[typing.List[FieldMappingApiInstance]] = pydantic.Field(alias="Tag", default=None) - remote_user: typing.Optional[typing.List[FieldMappingApiInstance]] = pydantic.Field( - alias="RemoteUser", default=None - ) + activity: typing_extensions.Annotated[ + typing.Optional[typing.List[FieldMappingApiInstance]], + FieldMetadata(alias="Activity"), + pydantic.Field(alias="Activity"), + ] = None + application: typing_extensions.Annotated[ + typing.Optional[typing.List[FieldMappingApiInstance]], + FieldMetadata(alias="Application"), + pydantic.Field(alias="Application"), + ] = None + attachment: typing_extensions.Annotated[ + typing.Optional[typing.List[FieldMappingApiInstance]], + FieldMetadata(alias="Attachment"), + pydantic.Field(alias="Attachment"), + ] = None + candidate: typing_extensions.Annotated[ + typing.Optional[typing.List[FieldMappingApiInstance]], + FieldMetadata(alias="Candidate"), + pydantic.Field(alias="Candidate"), + ] = None + department: typing_extensions.Annotated[ + typing.Optional[typing.List[FieldMappingApiInstance]], + FieldMetadata(alias="Department"), + pydantic.Field(alias="Department"), + ] = None + eeoc: typing_extensions.Annotated[ + typing.Optional[typing.List[FieldMappingApiInstance]], FieldMetadata(alias="EEOC"), pydantic.Field(alias="EEOC") + ] = None + scheduled_interview: typing_extensions.Annotated[ + typing.Optional[typing.List[FieldMappingApiInstance]], + FieldMetadata(alias="ScheduledInterview"), + pydantic.Field(alias="ScheduledInterview"), + ] = None + job: typing_extensions.Annotated[ + typing.Optional[typing.List[FieldMappingApiInstance]], FieldMetadata(alias="Job"), pydantic.Field(alias="Job") + ] = None + job_posting: typing_extensions.Annotated[ + typing.Optional[typing.List[FieldMappingApiInstance]], + FieldMetadata(alias="JobPosting"), + pydantic.Field(alias="JobPosting"), + ] = None + job_interview_stage: typing_extensions.Annotated[ + typing.Optional[typing.List[FieldMappingApiInstance]], + FieldMetadata(alias="JobInterviewStage"), + pydantic.Field(alias="JobInterviewStage"), + ] = None + offer: typing_extensions.Annotated[ + typing.Optional[typing.List[FieldMappingApiInstance]], + FieldMetadata(alias="Offer"), + pydantic.Field(alias="Offer"), + ] = None + office: typing_extensions.Annotated[ + typing.Optional[typing.List[FieldMappingApiInstance]], + FieldMetadata(alias="Office"), + pydantic.Field(alias="Office"), + ] = None + reject_reason: typing_extensions.Annotated[ + typing.Optional[typing.List[FieldMappingApiInstance]], + FieldMetadata(alias="RejectReason"), + pydantic.Field(alias="RejectReason"), + ] = None + scorecard: typing_extensions.Annotated[ + typing.Optional[typing.List[FieldMappingApiInstance]], + FieldMetadata(alias="Scorecard"), + pydantic.Field(alias="Scorecard"), + ] = None + tag: typing_extensions.Annotated[ + typing.Optional[typing.List[FieldMappingApiInstance]], FieldMetadata(alias="Tag"), pydantic.Field(alias="Tag") + ] = None + remote_user: typing_extensions.Annotated[ + typing.Optional[typing.List[FieldMappingApiInstance]], + FieldMetadata(alias="RemoteUser"), + pydantic.Field(alias="RemoteUser"), + ] = None if IS_PYDANTIC_V2: model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2 diff --git a/src/merge/resources/ats/types/field_permission_deserializer.py b/src/merge/resources/ats/types/field_permission_deserializer.py index 1d71ae04..407ed547 100644 --- a/src/merge/resources/ats/types/field_permission_deserializer.py +++ b/src/merge/resources/ats/types/field_permission_deserializer.py @@ -8,8 +8,8 @@ class FieldPermissionDeserializer(UncheckedBaseModel): - enabled_fields: typing.Optional[typing.List[typing.Optional[typing.Any]]] = None - disabled_fields: typing.Optional[typing.List[typing.Optional[typing.Any]]] = None + enabled_fields: typing.Optional[typing.List[typing.Any]] = None + disabled_fields: typing.Optional[typing.List[typing.Any]] = None if IS_PYDANTIC_V2: model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2 diff --git a/src/merge/resources/ats/types/field_permission_deserializer_request.py b/src/merge/resources/ats/types/field_permission_deserializer_request.py index a4113b46..6680c7d2 100644 --- a/src/merge/resources/ats/types/field_permission_deserializer_request.py +++ b/src/merge/resources/ats/types/field_permission_deserializer_request.py @@ -8,8 +8,8 @@ class FieldPermissionDeserializerRequest(UncheckedBaseModel): - enabled_fields: typing.Optional[typing.List[typing.Optional[typing.Any]]] = None - disabled_fields: typing.Optional[typing.List[typing.Optional[typing.Any]]] = None + enabled_fields: typing.Optional[typing.List[typing.Any]] = None + disabled_fields: typing.Optional[typing.List[typing.Any]] = None if IS_PYDANTIC_V2: model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2 diff --git a/src/merge/resources/ats/types/gender_enum.py b/src/merge/resources/ats/types/gender_enum.py index 26393a8b..786aa010 100644 --- a/src/merge/resources/ats/types/gender_enum.py +++ b/src/merge/resources/ats/types/gender_enum.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ....core import enum + T_Result = typing.TypeVar("T_Result") -class GenderEnum(str, enum.Enum): +class GenderEnum(enum.StrEnum): """ * `MALE` - MALE * `FEMALE` - FEMALE diff --git a/src/merge/resources/ats/types/issue.py b/src/merge/resources/ats/types/issue.py index df31be95..5d37505d 100644 --- a/src/merge/resources/ats/types/issue.py +++ b/src/merge/resources/ats/types/issue.py @@ -20,7 +20,7 @@ class Issue(UncheckedBaseModel): """ error_description: str - end_user: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None + end_user: typing.Optional[typing.Dict[str, typing.Any]] = None first_incident_time: typing.Optional[dt.datetime] = None last_incident_time: typing.Optional[dt.datetime] = None is_muted: typing.Optional[bool] = None diff --git a/src/merge/resources/ats/types/issue_status_enum.py b/src/merge/resources/ats/types/issue_status_enum.py index 57eb9618..30d126bb 100644 --- a/src/merge/resources/ats/types/issue_status_enum.py +++ b/src/merge/resources/ats/types/issue_status_enum.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ....core import enum + T_Result = typing.TypeVar("T_Result") -class IssueStatusEnum(str, enum.Enum): +class IssueStatusEnum(enum.StrEnum): """ * `ONGOING` - ONGOING * `RESOLVED` - RESOLVED diff --git a/src/merge/resources/ats/types/job.py b/src/merge/resources/ats/types/job.py index 389cd697..35df81c0 100644 --- a/src/merge/resources/ats/types/job.py +++ b/src/merge/resources/ats/types/job.py @@ -124,7 +124,7 @@ class Job(UncheckedBaseModel): Indicates whether or not this object has been deleted in the third party platform. Full coverage deletion detection is a premium add-on. Native deletion detection is offered for free with limited coverage. [Learn more](https://docs.merge.dev/integrations/hris/supported-features/). """ - field_mappings: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None + field_mappings: typing.Optional[typing.Dict[str, typing.Any]] = None remote_data: typing.Optional[typing.List[RemoteData]] = None if IS_PYDANTIC_V2: @@ -137,7 +137,8 @@ class Config: extra = pydantic.Extra.allow -from .job_posting import JobPosting # noqa: E402, F401, I001 -from .job_job_postings_item import JobJobPostingsItem # noqa: E402, F401, I001 +from .job_job_postings_item import JobJobPostingsItem # noqa: E402, I001 +from .job_posting import JobPosting # noqa: E402, I001 +from .job_posting_job import JobPostingJob # noqa: E402, I001 -update_forward_refs(Job) +update_forward_refs(Job, JobJobPostingsItem=JobJobPostingsItem, JobPosting=JobPosting, JobPostingJob=JobPostingJob) diff --git a/src/merge/resources/ats/types/job_interview_stage.py b/src/merge/resources/ats/types/job_interview_stage.py index 7e09aca8..e17d37fd 100644 --- a/src/merge/resources/ats/types/job_interview_stage.py +++ b/src/merge/resources/ats/types/job_interview_stage.py @@ -57,7 +57,7 @@ class JobInterviewStage(UncheckedBaseModel): Indicates whether or not this object has been deleted in the third party platform. Full coverage deletion detection is a premium add-on. Native deletion detection is offered for free with limited coverage. [Learn more](https://docs.merge.dev/integrations/hris/supported-features/). """ - field_mappings: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None + field_mappings: typing.Optional[typing.Dict[str, typing.Any]] = None remote_data: typing.Optional[typing.List[RemoteData]] = None if IS_PYDANTIC_V2: @@ -70,7 +70,4 @@ class Config: extra = pydantic.Extra.allow -from .job import Job # noqa: E402, F401, I001 -from .job_posting import JobPosting # noqa: E402, F401, I001 - update_forward_refs(JobInterviewStage) diff --git a/src/merge/resources/ats/types/job_posting.py b/src/merge/resources/ats/types/job_posting.py index a43467d8..533b1b2c 100644 --- a/src/merge/resources/ats/types/job_posting.py +++ b/src/merge/resources/ats/types/job_posting.py @@ -89,7 +89,7 @@ class JobPosting(UncheckedBaseModel): Indicates whether or not this object has been deleted in the third party platform. Full coverage deletion detection is a premium add-on. Native deletion detection is offered for free with limited coverage. [Learn more](https://docs.merge.dev/integrations/hris/supported-features/). """ - field_mappings: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None + field_mappings: typing.Optional[typing.Dict[str, typing.Any]] = None remote_data: typing.Optional[typing.List[RemoteData]] = None if IS_PYDANTIC_V2: @@ -102,7 +102,8 @@ class Config: extra = pydantic.Extra.allow -from .job import Job # noqa: E402, F401, I001 -from .job_posting_job import JobPostingJob # noqa: E402, F401, I001 +from .job import Job # noqa: E402, I001 +from .job_job_postings_item import JobJobPostingsItem # noqa: E402, I001 +from .job_posting_job import JobPostingJob # noqa: E402, I001 -update_forward_refs(JobPosting) +update_forward_refs(JobPosting, Job=Job, JobJobPostingsItem=JobJobPostingsItem, JobPostingJob=JobPostingJob) diff --git a/src/merge/resources/ats/types/job_posting_status_enum.py b/src/merge/resources/ats/types/job_posting_status_enum.py index 92f45ae4..3642c40e 100644 --- a/src/merge/resources/ats/types/job_posting_status_enum.py +++ b/src/merge/resources/ats/types/job_posting_status_enum.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ....core import enum + T_Result = typing.TypeVar("T_Result") -class JobPostingStatusEnum(str, enum.Enum): +class JobPostingStatusEnum(enum.StrEnum): """ * `PUBLISHED` - PUBLISHED * `CLOSED` - CLOSED diff --git a/src/merge/resources/ats/types/job_status_enum.py b/src/merge/resources/ats/types/job_status_enum.py index eda892ce..3c717fba 100644 --- a/src/merge/resources/ats/types/job_status_enum.py +++ b/src/merge/resources/ats/types/job_status_enum.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ....core import enum + T_Result = typing.TypeVar("T_Result") -class JobStatusEnum(str, enum.Enum): +class JobStatusEnum(enum.StrEnum): """ * `OPEN` - OPEN * `CLOSED` - CLOSED diff --git a/src/merge/resources/ats/types/job_type_enum.py b/src/merge/resources/ats/types/job_type_enum.py index 6de04249..ac9c2dad 100644 --- a/src/merge/resources/ats/types/job_type_enum.py +++ b/src/merge/resources/ats/types/job_type_enum.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ....core import enum + T_Result = typing.TypeVar("T_Result") -class JobTypeEnum(str, enum.Enum): +class JobTypeEnum(enum.StrEnum): """ * `POSTING` - POSTING * `REQUISITION` - REQUISITION diff --git a/src/merge/resources/ats/types/language_enum.py b/src/merge/resources/ats/types/language_enum.py index 44b693f2..3ff1e9da 100644 --- a/src/merge/resources/ats/types/language_enum.py +++ b/src/merge/resources/ats/types/language_enum.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ....core import enum + T_Result = typing.TypeVar("T_Result") -class LanguageEnum(str, enum.Enum): +class LanguageEnum(enum.StrEnum): """ * `en` - en * `de` - de diff --git a/src/merge/resources/ats/types/last_sync_result_enum.py b/src/merge/resources/ats/types/last_sync_result_enum.py index ec777ee6..f82505a1 100644 --- a/src/merge/resources/ats/types/last_sync_result_enum.py +++ b/src/merge/resources/ats/types/last_sync_result_enum.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ....core import enum + T_Result = typing.TypeVar("T_Result") -class LastSyncResultEnum(str, enum.Enum): +class LastSyncResultEnum(enum.StrEnum): """ * `SYNCING` - SYNCING * `DONE` - DONE diff --git a/src/merge/resources/ats/types/meta_response.py b/src/merge/resources/ats/types/meta_response.py index caa2c831..0da37619 100644 --- a/src/merge/resources/ats/types/meta_response.py +++ b/src/merge/resources/ats/types/meta_response.py @@ -9,8 +9,8 @@ class MetaResponse(UncheckedBaseModel): - request_schema: typing.Dict[str, typing.Optional[typing.Any]] - remote_field_classes: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None + request_schema: typing.Dict[str, typing.Any] + remote_field_classes: typing.Optional[typing.Dict[str, typing.Any]] = None status: typing.Optional[LinkedAccountStatus] = None has_conditional_params: bool has_required_linked_account_params: bool diff --git a/src/merge/resources/ats/types/method_enum.py b/src/merge/resources/ats/types/method_enum.py index 57bcde10..4c8376dd 100644 --- a/src/merge/resources/ats/types/method_enum.py +++ b/src/merge/resources/ats/types/method_enum.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ....core import enum + T_Result = typing.TypeVar("T_Result") -class MethodEnum(str, enum.Enum): +class MethodEnum(enum.StrEnum): """ * `GET` - GET * `OPTIONS` - OPTIONS diff --git a/src/merge/resources/ats/types/offer.py b/src/merge/resources/ats/types/offer.py index a41e1f18..a9f85ba7 100644 --- a/src/merge/resources/ats/types/offer.py +++ b/src/merge/resources/ats/types/offer.py @@ -88,7 +88,7 @@ class Offer(UncheckedBaseModel): Indicates whether or not this object has been deleted in the third party platform. Full coverage deletion detection is a premium add-on. Native deletion detection is offered for free with limited coverage. [Learn more](https://docs.merge.dev/integrations/hris/supported-features/). """ - field_mappings: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None + field_mappings: typing.Optional[typing.Dict[str, typing.Any]] = None remote_data: typing.Optional[typing.List[RemoteData]] = None if IS_PYDANTIC_V2: @@ -101,10 +101,19 @@ class Config: extra = pydantic.Extra.allow -from .application import Application # noqa: E402, F401, I001 -from .candidate import Candidate # noqa: E402, F401, I001 -from .job import Job # noqa: E402, F401, I001 -from .job_posting import JobPosting # noqa: E402, F401, I001 -from .offer_application import OfferApplication # noqa: E402, F401, I001 - -update_forward_refs(Offer) +from .application import Application # noqa: E402, I001 +from .application_candidate import ApplicationCandidate # noqa: E402, I001 +from .application_offers_item import ApplicationOffersItem # noqa: E402, I001 +from .candidate import Candidate # noqa: E402, I001 +from .candidate_applications_item import CandidateApplicationsItem # noqa: E402, I001 +from .offer_application import OfferApplication # noqa: E402, I001 + +update_forward_refs( + Offer, + Application=Application, + ApplicationCandidate=ApplicationCandidate, + ApplicationOffersItem=ApplicationOffersItem, + Candidate=Candidate, + CandidateApplicationsItem=CandidateApplicationsItem, + OfferApplication=OfferApplication, +) diff --git a/src/merge/resources/ats/types/offer_status_enum.py b/src/merge/resources/ats/types/offer_status_enum.py index 1650d47f..d9a3b52b 100644 --- a/src/merge/resources/ats/types/offer_status_enum.py +++ b/src/merge/resources/ats/types/offer_status_enum.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ....core import enum + T_Result = typing.TypeVar("T_Result") -class OfferStatusEnum(str, enum.Enum): +class OfferStatusEnum(enum.StrEnum): """ * `DRAFT` - DRAFT * `APPROVAL-SENT` - APPROVAL-SENT diff --git a/src/merge/resources/ats/types/office.py b/src/merge/resources/ats/types/office.py index 120980d2..636b5293 100644 --- a/src/merge/resources/ats/types/office.py +++ b/src/merge/resources/ats/types/office.py @@ -49,7 +49,7 @@ class Office(UncheckedBaseModel): Indicates whether or not this object has been deleted in the third party platform. Full coverage deletion detection is a premium add-on. Native deletion detection is offered for free with limited coverage. [Learn more](https://docs.merge.dev/integrations/hris/supported-features/). """ - field_mappings: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None + field_mappings: typing.Optional[typing.Dict[str, typing.Any]] = None remote_data: typing.Optional[typing.List[RemoteData]] = None if IS_PYDANTIC_V2: diff --git a/src/merge/resources/ats/types/overall_recommendation_enum.py b/src/merge/resources/ats/types/overall_recommendation_enum.py index 66aa9223..d99db237 100644 --- a/src/merge/resources/ats/types/overall_recommendation_enum.py +++ b/src/merge/resources/ats/types/overall_recommendation_enum.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ....core import enum + T_Result = typing.TypeVar("T_Result") -class OverallRecommendationEnum(str, enum.Enum): +class OverallRecommendationEnum(enum.StrEnum): """ * `DEFINITELY_NO` - DEFINITELY_NO * `NO` - NO diff --git a/src/merge/resources/ats/types/paginated_application_list.py b/src/merge/resources/ats/types/paginated_application_list.py index 3ae4a8c3..a612892d 100644 --- a/src/merge/resources/ats/types/paginated_application_list.py +++ b/src/merge/resources/ats/types/paginated_application_list.py @@ -24,10 +24,21 @@ class Config: extra = pydantic.Extra.allow -from .application import Application # noqa: E402, F401, I001 -from .candidate import Candidate # noqa: E402, F401, I001 -from .job import Job # noqa: E402, F401, I001 -from .job_posting import JobPosting # noqa: E402, F401, I001 -from .offer import Offer # noqa: E402, F401, I001 - -update_forward_refs(PaginatedApplicationList) +from .application import Application # noqa: E402, I001 +from .application_candidate import ApplicationCandidate # noqa: E402, I001 +from .application_offers_item import ApplicationOffersItem # noqa: E402, I001 +from .candidate import Candidate # noqa: E402, I001 +from .candidate_applications_item import CandidateApplicationsItem # noqa: E402, I001 +from .offer import Offer # noqa: E402, I001 +from .offer_application import OfferApplication # noqa: E402, I001 + +update_forward_refs( + PaginatedApplicationList, + Application=Application, + ApplicationCandidate=ApplicationCandidate, + ApplicationOffersItem=ApplicationOffersItem, + Candidate=Candidate, + CandidateApplicationsItem=CandidateApplicationsItem, + Offer=Offer, + OfferApplication=OfferApplication, +) diff --git a/src/merge/resources/ats/types/paginated_candidate_list.py b/src/merge/resources/ats/types/paginated_candidate_list.py index 5ecf773c..6e9f8cee 100644 --- a/src/merge/resources/ats/types/paginated_candidate_list.py +++ b/src/merge/resources/ats/types/paginated_candidate_list.py @@ -24,10 +24,21 @@ class Config: extra = pydantic.Extra.allow -from .application import Application # noqa: E402, F401, I001 -from .candidate import Candidate # noqa: E402, F401, I001 -from .job import Job # noqa: E402, F401, I001 -from .job_posting import JobPosting # noqa: E402, F401, I001 -from .offer import Offer # noqa: E402, F401, I001 - -update_forward_refs(PaginatedCandidateList) +from .application import Application # noqa: E402, I001 +from .application_candidate import ApplicationCandidate # noqa: E402, I001 +from .application_offers_item import ApplicationOffersItem # noqa: E402, I001 +from .candidate import Candidate # noqa: E402, I001 +from .candidate_applications_item import CandidateApplicationsItem # noqa: E402, I001 +from .offer import Offer # noqa: E402, I001 +from .offer_application import OfferApplication # noqa: E402, I001 + +update_forward_refs( + PaginatedCandidateList, + Application=Application, + ApplicationCandidate=ApplicationCandidate, + ApplicationOffersItem=ApplicationOffersItem, + Candidate=Candidate, + CandidateApplicationsItem=CandidateApplicationsItem, + Offer=Offer, + OfferApplication=OfferApplication, +) diff --git a/src/merge/resources/ats/types/paginated_eeoc_list.py b/src/merge/resources/ats/types/paginated_eeoc_list.py index 0073b706..f64b7ec9 100644 --- a/src/merge/resources/ats/types/paginated_eeoc_list.py +++ b/src/merge/resources/ats/types/paginated_eeoc_list.py @@ -25,10 +25,4 @@ class Config: extra = pydantic.Extra.allow -from .application import Application # noqa: E402, F401, I001 -from .candidate import Candidate # noqa: E402, F401, I001 -from .job import Job # noqa: E402, F401, I001 -from .job_posting import JobPosting # noqa: E402, F401, I001 -from .offer import Offer # noqa: E402, F401, I001 - update_forward_refs(PaginatedEeocList) diff --git a/src/merge/resources/ats/types/paginated_job_interview_stage_list.py b/src/merge/resources/ats/types/paginated_job_interview_stage_list.py index 204fb1a7..a7c04308 100644 --- a/src/merge/resources/ats/types/paginated_job_interview_stage_list.py +++ b/src/merge/resources/ats/types/paginated_job_interview_stage_list.py @@ -25,7 +25,4 @@ class Config: extra = pydantic.Extra.allow -from .job import Job # noqa: E402, F401, I001 -from .job_posting import JobPosting # noqa: E402, F401, I001 - update_forward_refs(PaginatedJobInterviewStageList) diff --git a/src/merge/resources/ats/types/paginated_job_list.py b/src/merge/resources/ats/types/paginated_job_list.py index c949837c..c90b9d65 100644 --- a/src/merge/resources/ats/types/paginated_job_list.py +++ b/src/merge/resources/ats/types/paginated_job_list.py @@ -24,7 +24,11 @@ class Config: extra = pydantic.Extra.allow -from .job import Job # noqa: E402, F401, I001 -from .job_posting import JobPosting # noqa: E402, F401, I001 - -update_forward_refs(PaginatedJobList) +from .job import Job # noqa: E402, I001 +from .job_job_postings_item import JobJobPostingsItem # noqa: E402, I001 +from .job_posting import JobPosting # noqa: E402, I001 +from .job_posting_job import JobPostingJob # noqa: E402, I001 + +update_forward_refs( + PaginatedJobList, Job=Job, JobJobPostingsItem=JobJobPostingsItem, JobPosting=JobPosting, JobPostingJob=JobPostingJob +) diff --git a/src/merge/resources/ats/types/paginated_job_posting_list.py b/src/merge/resources/ats/types/paginated_job_posting_list.py index f80a22f8..12a21419 100644 --- a/src/merge/resources/ats/types/paginated_job_posting_list.py +++ b/src/merge/resources/ats/types/paginated_job_posting_list.py @@ -24,7 +24,15 @@ class Config: extra = pydantic.Extra.allow -from .job import Job # noqa: E402, F401, I001 -from .job_posting import JobPosting # noqa: E402, F401, I001 - -update_forward_refs(PaginatedJobPostingList) +from .job import Job # noqa: E402, I001 +from .job_job_postings_item import JobJobPostingsItem # noqa: E402, I001 +from .job_posting import JobPosting # noqa: E402, I001 +from .job_posting_job import JobPostingJob # noqa: E402, I001 + +update_forward_refs( + PaginatedJobPostingList, + Job=Job, + JobJobPostingsItem=JobJobPostingsItem, + JobPosting=JobPosting, + JobPostingJob=JobPostingJob, +) diff --git a/src/merge/resources/ats/types/paginated_offer_list.py b/src/merge/resources/ats/types/paginated_offer_list.py index b7575abc..f3849d84 100644 --- a/src/merge/resources/ats/types/paginated_offer_list.py +++ b/src/merge/resources/ats/types/paginated_offer_list.py @@ -24,10 +24,21 @@ class Config: extra = pydantic.Extra.allow -from .application import Application # noqa: E402, F401, I001 -from .candidate import Candidate # noqa: E402, F401, I001 -from .job import Job # noqa: E402, F401, I001 -from .job_posting import JobPosting # noqa: E402, F401, I001 -from .offer import Offer # noqa: E402, F401, I001 - -update_forward_refs(PaginatedOfferList) +from .application import Application # noqa: E402, I001 +from .application_candidate import ApplicationCandidate # noqa: E402, I001 +from .application_offers_item import ApplicationOffersItem # noqa: E402, I001 +from .candidate import Candidate # noqa: E402, I001 +from .candidate_applications_item import CandidateApplicationsItem # noqa: E402, I001 +from .offer import Offer # noqa: E402, I001 +from .offer_application import OfferApplication # noqa: E402, I001 + +update_forward_refs( + PaginatedOfferList, + Application=Application, + ApplicationCandidate=ApplicationCandidate, + ApplicationOffersItem=ApplicationOffersItem, + Candidate=Candidate, + CandidateApplicationsItem=CandidateApplicationsItem, + Offer=Offer, + OfferApplication=OfferApplication, +) diff --git a/src/merge/resources/ats/types/paginated_scheduled_interview_list.py b/src/merge/resources/ats/types/paginated_scheduled_interview_list.py index 193baa45..d8951726 100644 --- a/src/merge/resources/ats/types/paginated_scheduled_interview_list.py +++ b/src/merge/resources/ats/types/paginated_scheduled_interview_list.py @@ -25,10 +25,4 @@ class Config: extra = pydantic.Extra.allow -from .application import Application # noqa: E402, F401, I001 -from .candidate import Candidate # noqa: E402, F401, I001 -from .job import Job # noqa: E402, F401, I001 -from .job_posting import JobPosting # noqa: E402, F401, I001 -from .offer import Offer # noqa: E402, F401, I001 - update_forward_refs(PaginatedScheduledInterviewList) diff --git a/src/merge/resources/ats/types/paginated_scorecard_list.py b/src/merge/resources/ats/types/paginated_scorecard_list.py index e8bf292c..004784b6 100644 --- a/src/merge/resources/ats/types/paginated_scorecard_list.py +++ b/src/merge/resources/ats/types/paginated_scorecard_list.py @@ -25,10 +25,4 @@ class Config: extra = pydantic.Extra.allow -from .application import Application # noqa: E402, F401, I001 -from .candidate import Candidate # noqa: E402, F401, I001 -from .job import Job # noqa: E402, F401, I001 -from .job_posting import JobPosting # noqa: E402, F401, I001 -from .offer import Offer # noqa: E402, F401, I001 - update_forward_refs(PaginatedScorecardList) diff --git a/src/merge/resources/ats/types/paginated_screening_question_list.py b/src/merge/resources/ats/types/paginated_screening_question_list.py index 2455ae4f..4ef8eb40 100644 --- a/src/merge/resources/ats/types/paginated_screening_question_list.py +++ b/src/merge/resources/ats/types/paginated_screening_question_list.py @@ -25,7 +25,4 @@ class Config: extra = pydantic.Extra.allow -from .job import Job # noqa: E402, F401, I001 -from .job_posting import JobPosting # noqa: E402, F401, I001 - update_forward_refs(PaginatedScreeningQuestionList) diff --git a/src/merge/resources/ats/types/patched_candidate_request.py b/src/merge/resources/ats/types/patched_candidate_request.py index 4f2bdfc8..c2a23fa2 100644 --- a/src/merge/resources/ats/types/patched_candidate_request.py +++ b/src/merge/resources/ats/types/patched_candidate_request.py @@ -83,8 +83,8 @@ class PatchedCandidateRequest(UncheckedBaseModel): """ remote_template_id: typing.Optional[str] = None - integration_params: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None - linked_account_params: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None + integration_params: typing.Optional[typing.Dict[str, typing.Any]] = None + linked_account_params: typing.Optional[typing.Dict[str, typing.Any]] = None if IS_PYDANTIC_V2: model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2 @@ -96,10 +96,4 @@ class Config: extra = pydantic.Extra.allow -from .application import Application # noqa: E402, F401, I001 -from .candidate import Candidate # noqa: E402, F401, I001 -from .job import Job # noqa: E402, F401, I001 -from .job_posting import JobPosting # noqa: E402, F401, I001 -from .offer import Offer # noqa: E402, F401, I001 - update_forward_refs(PatchedCandidateRequest) diff --git a/src/merge/resources/ats/types/phone_number_request.py b/src/merge/resources/ats/types/phone_number_request.py index aa54db17..b500f228 100644 --- a/src/merge/resources/ats/types/phone_number_request.py +++ b/src/merge/resources/ats/types/phone_number_request.py @@ -33,8 +33,8 @@ class PhoneNumberRequest(UncheckedBaseModel): * `OTHER` - OTHER """ - integration_params: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None - linked_account_params: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None + integration_params: typing.Optional[typing.Dict[str, typing.Any]] = None + linked_account_params: typing.Optional[typing.Dict[str, typing.Any]] = None if IS_PYDANTIC_V2: model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2 diff --git a/src/merge/resources/ats/types/phone_number_type_enum.py b/src/merge/resources/ats/types/phone_number_type_enum.py index 5fa42f3c..d3335353 100644 --- a/src/merge/resources/ats/types/phone_number_type_enum.py +++ b/src/merge/resources/ats/types/phone_number_type_enum.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ....core import enum + T_Result = typing.TypeVar("T_Result") -class PhoneNumberTypeEnum(str, enum.Enum): +class PhoneNumberTypeEnum(enum.StrEnum): """ * `HOME` - HOME * `WORK` - WORK diff --git a/src/merge/resources/ats/types/race_enum.py b/src/merge/resources/ats/types/race_enum.py index 98d37f9d..c1fbdd81 100644 --- a/src/merge/resources/ats/types/race_enum.py +++ b/src/merge/resources/ats/types/race_enum.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ....core import enum + T_Result = typing.TypeVar("T_Result") -class RaceEnum(str, enum.Enum): +class RaceEnum(enum.StrEnum): """ * `AMERICAN_INDIAN_OR_ALASKAN_NATIVE` - AMERICAN_INDIAN_OR_ALASKAN_NATIVE * `ASIAN` - ASIAN diff --git a/src/merge/resources/ats/types/reason_enum.py b/src/merge/resources/ats/types/reason_enum.py index ea6ba5b6..77c6e96c 100644 --- a/src/merge/resources/ats/types/reason_enum.py +++ b/src/merge/resources/ats/types/reason_enum.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ....core import enum + T_Result = typing.TypeVar("T_Result") -class ReasonEnum(str, enum.Enum): +class ReasonEnum(enum.StrEnum): """ * `GENERAL_CUSTOMER_REQUEST` - GENERAL_CUSTOMER_REQUEST * `GDPR` - GDPR diff --git a/src/merge/resources/ats/types/reject_reason.py b/src/merge/resources/ats/types/reject_reason.py index 7f2d533e..f1373b41 100644 --- a/src/merge/resources/ats/types/reject_reason.py +++ b/src/merge/resources/ats/types/reject_reason.py @@ -44,7 +44,7 @@ class RejectReason(UncheckedBaseModel): Indicates whether or not this object has been deleted in the third party platform. Full coverage deletion detection is a premium add-on. Native deletion detection is offered for free with limited coverage. [Learn more](https://docs.merge.dev/integrations/hris/supported-features/). """ - field_mappings: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None + field_mappings: typing.Optional[typing.Dict[str, typing.Any]] = None remote_data: typing.Optional[typing.List[RemoteData]] = None if IS_PYDANTIC_V2: diff --git a/src/merge/resources/ats/types/remote_data.py b/src/merge/resources/ats/types/remote_data.py index f34bec80..2026f05a 100644 --- a/src/merge/resources/ats/types/remote_data.py +++ b/src/merge/resources/ats/types/remote_data.py @@ -22,7 +22,7 @@ class RemoteData(UncheckedBaseModel): The third-party API path that is being called. """ - data: typing.Optional[typing.Optional[typing.Any]] = pydantic.Field(default=None) + data: typing.Optional[typing.Any] = pydantic.Field(default=None) """ The data returned from the third-party for this object in its original, unnormalized format. """ diff --git a/src/merge/resources/ats/types/remote_endpoint_info.py b/src/merge/resources/ats/types/remote_endpoint_info.py index 07ceff6a..ffa70b94 100644 --- a/src/merge/resources/ats/types/remote_endpoint_info.py +++ b/src/merge/resources/ats/types/remote_endpoint_info.py @@ -10,7 +10,7 @@ class RemoteEndpointInfo(UncheckedBaseModel): method: str url_path: str - field_traversal_path: typing.List[typing.Optional[typing.Any]] + field_traversal_path: typing.List[typing.Any] if IS_PYDANTIC_V2: model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2 diff --git a/src/merge/resources/ats/types/remote_field_api.py b/src/merge/resources/ats/types/remote_field_api.py index 4c66a23b..79cf45c4 100644 --- a/src/merge/resources/ats/types/remote_field_api.py +++ b/src/merge/resources/ats/types/remote_field_api.py @@ -3,7 +3,9 @@ import typing import pydantic +import typing_extensions from ....core.pydantic_utilities import IS_PYDANTIC_V2 +from ....core.serialization import FieldMetadata from ....core.unchecked_base_model import UncheckedBaseModel from .advanced_metadata import AdvancedMetadata from .remote_endpoint_info import RemoteEndpointInfo @@ -11,10 +13,12 @@ class RemoteFieldApi(UncheckedBaseModel): - schema_: typing.Dict[str, typing.Optional[typing.Any]] = pydantic.Field(alias="schema") + schema_: typing_extensions.Annotated[ + typing.Dict[str, typing.Any], FieldMetadata(alias="schema"), pydantic.Field(alias="schema") + ] remote_key_name: str remote_endpoint_info: RemoteEndpointInfo - example_values: typing.Optional[typing.List[typing.Optional[typing.Any]]] = None + example_values: typing.Optional[typing.List[typing.Any]] = None advanced_metadata: typing.Optional[AdvancedMetadata] = None coverage: typing.Optional[RemoteFieldApiCoverage] = None diff --git a/src/merge/resources/ats/types/remote_field_api_response.py b/src/merge/resources/ats/types/remote_field_api_response.py index 3d3e79f5..d1f1f481 100644 --- a/src/merge/resources/ats/types/remote_field_api_response.py +++ b/src/merge/resources/ats/types/remote_field_api_response.py @@ -3,32 +3,82 @@ import typing import pydantic +import typing_extensions from ....core.pydantic_utilities import IS_PYDANTIC_V2 +from ....core.serialization import FieldMetadata from ....core.unchecked_base_model import UncheckedBaseModel from .remote_field_api import RemoteFieldApi class RemoteFieldApiResponse(UncheckedBaseModel): - activity: typing.Optional[typing.List[RemoteFieldApi]] = pydantic.Field(alias="Activity", default=None) - application: typing.Optional[typing.List[RemoteFieldApi]] = pydantic.Field(alias="Application", default=None) - attachment: typing.Optional[typing.List[RemoteFieldApi]] = pydantic.Field(alias="Attachment", default=None) - candidate: typing.Optional[typing.List[RemoteFieldApi]] = pydantic.Field(alias="Candidate", default=None) - department: typing.Optional[typing.List[RemoteFieldApi]] = pydantic.Field(alias="Department", default=None) - eeoc: typing.Optional[typing.List[RemoteFieldApi]] = pydantic.Field(alias="EEOC", default=None) - scheduled_interview: typing.Optional[typing.List[RemoteFieldApi]] = pydantic.Field( - alias="ScheduledInterview", default=None - ) - job: typing.Optional[typing.List[RemoteFieldApi]] = pydantic.Field(alias="Job", default=None) - job_posting: typing.Optional[typing.List[RemoteFieldApi]] = pydantic.Field(alias="JobPosting", default=None) - job_interview_stage: typing.Optional[typing.List[RemoteFieldApi]] = pydantic.Field( - alias="JobInterviewStage", default=None - ) - offer: typing.Optional[typing.List[RemoteFieldApi]] = pydantic.Field(alias="Offer", default=None) - office: typing.Optional[typing.List[RemoteFieldApi]] = pydantic.Field(alias="Office", default=None) - reject_reason: typing.Optional[typing.List[RemoteFieldApi]] = pydantic.Field(alias="RejectReason", default=None) - scorecard: typing.Optional[typing.List[RemoteFieldApi]] = pydantic.Field(alias="Scorecard", default=None) - tag: typing.Optional[typing.List[RemoteFieldApi]] = pydantic.Field(alias="Tag", default=None) - remote_user: typing.Optional[typing.List[RemoteFieldApi]] = pydantic.Field(alias="RemoteUser", default=None) + activity: typing_extensions.Annotated[ + typing.Optional[typing.List[RemoteFieldApi]], FieldMetadata(alias="Activity"), pydantic.Field(alias="Activity") + ] = None + application: typing_extensions.Annotated[ + typing.Optional[typing.List[RemoteFieldApi]], + FieldMetadata(alias="Application"), + pydantic.Field(alias="Application"), + ] = None + attachment: typing_extensions.Annotated[ + typing.Optional[typing.List[RemoteFieldApi]], + FieldMetadata(alias="Attachment"), + pydantic.Field(alias="Attachment"), + ] = None + candidate: typing_extensions.Annotated[ + typing.Optional[typing.List[RemoteFieldApi]], + FieldMetadata(alias="Candidate"), + pydantic.Field(alias="Candidate"), + ] = None + department: typing_extensions.Annotated[ + typing.Optional[typing.List[RemoteFieldApi]], + FieldMetadata(alias="Department"), + pydantic.Field(alias="Department"), + ] = None + eeoc: typing_extensions.Annotated[ + typing.Optional[typing.List[RemoteFieldApi]], FieldMetadata(alias="EEOC"), pydantic.Field(alias="EEOC") + ] = None + scheduled_interview: typing_extensions.Annotated[ + typing.Optional[typing.List[RemoteFieldApi]], + FieldMetadata(alias="ScheduledInterview"), + pydantic.Field(alias="ScheduledInterview"), + ] = None + job: typing_extensions.Annotated[ + typing.Optional[typing.List[RemoteFieldApi]], FieldMetadata(alias="Job"), pydantic.Field(alias="Job") + ] = None + job_posting: typing_extensions.Annotated[ + typing.Optional[typing.List[RemoteFieldApi]], + FieldMetadata(alias="JobPosting"), + pydantic.Field(alias="JobPosting"), + ] = None + job_interview_stage: typing_extensions.Annotated[ + typing.Optional[typing.List[RemoteFieldApi]], + FieldMetadata(alias="JobInterviewStage"), + pydantic.Field(alias="JobInterviewStage"), + ] = None + offer: typing_extensions.Annotated[ + typing.Optional[typing.List[RemoteFieldApi]], FieldMetadata(alias="Offer"), pydantic.Field(alias="Offer") + ] = None + office: typing_extensions.Annotated[ + typing.Optional[typing.List[RemoteFieldApi]], FieldMetadata(alias="Office"), pydantic.Field(alias="Office") + ] = None + reject_reason: typing_extensions.Annotated[ + typing.Optional[typing.List[RemoteFieldApi]], + FieldMetadata(alias="RejectReason"), + pydantic.Field(alias="RejectReason"), + ] = None + scorecard: typing_extensions.Annotated[ + typing.Optional[typing.List[RemoteFieldApi]], + FieldMetadata(alias="Scorecard"), + pydantic.Field(alias="Scorecard"), + ] = None + tag: typing_extensions.Annotated[ + typing.Optional[typing.List[RemoteFieldApi]], FieldMetadata(alias="Tag"), pydantic.Field(alias="Tag") + ] = None + remote_user: typing_extensions.Annotated[ + typing.Optional[typing.List[RemoteFieldApi]], + FieldMetadata(alias="RemoteUser"), + pydantic.Field(alias="RemoteUser"), + ] = None if IS_PYDANTIC_V2: model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2 diff --git a/src/merge/resources/ats/types/remote_response.py b/src/merge/resources/ats/types/remote_response.py index db01131f..8bc6f905 100644 --- a/src/merge/resources/ats/types/remote_response.py +++ b/src/merge/resources/ats/types/remote_response.py @@ -21,10 +21,10 @@ class RemoteResponse(UncheckedBaseModel): method: str path: str status: int - response: typing.Optional[typing.Any] = None - response_headers: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None + response: typing.Any + response_headers: typing.Optional[typing.Dict[str, typing.Any]] = None response_type: typing.Optional[RemoteResponseResponseType] = None - headers: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None + headers: typing.Optional[typing.Dict[str, typing.Any]] = None if IS_PYDANTIC_V2: model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2 diff --git a/src/merge/resources/ats/types/remote_user.py b/src/merge/resources/ats/types/remote_user.py index de6ec49a..fe56da6f 100644 --- a/src/merge/resources/ats/types/remote_user.py +++ b/src/merge/resources/ats/types/remote_user.py @@ -76,7 +76,7 @@ class RemoteUser(UncheckedBaseModel): Indicates whether or not this object has been deleted in the third party platform. Full coverage deletion detection is a premium add-on. Native deletion detection is offered for free with limited coverage. [Learn more](https://docs.merge.dev/integrations/hris/supported-features/). """ - field_mappings: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None + field_mappings: typing.Optional[typing.Dict[str, typing.Any]] = None remote_data: typing.Optional[typing.List[RemoteData]] = None if IS_PYDANTIC_V2: diff --git a/src/merge/resources/ats/types/request_format_enum.py b/src/merge/resources/ats/types/request_format_enum.py index 21c272f2..b8e2234c 100644 --- a/src/merge/resources/ats/types/request_format_enum.py +++ b/src/merge/resources/ats/types/request_format_enum.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ....core import enum + T_Result = typing.TypeVar("T_Result") -class RequestFormatEnum(str, enum.Enum): +class RequestFormatEnum(enum.StrEnum): """ * `JSON` - JSON * `XML` - XML diff --git a/src/merge/resources/ats/types/response_type_enum.py b/src/merge/resources/ats/types/response_type_enum.py index ef241302..8a72c2a9 100644 --- a/src/merge/resources/ats/types/response_type_enum.py +++ b/src/merge/resources/ats/types/response_type_enum.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ....core import enum + T_Result = typing.TypeVar("T_Result") -class ResponseTypeEnum(str, enum.Enum): +class ResponseTypeEnum(enum.StrEnum): """ * `JSON` - JSON * `BASE64_GZIP` - BASE64_GZIP diff --git a/src/merge/resources/ats/types/role_enum.py b/src/merge/resources/ats/types/role_enum.py index 8f2c9b1d..394ec992 100644 --- a/src/merge/resources/ats/types/role_enum.py +++ b/src/merge/resources/ats/types/role_enum.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ....core import enum + T_Result = typing.TypeVar("T_Result") -class RoleEnum(str, enum.Enum): +class RoleEnum(enum.StrEnum): """ * `ADMIN` - ADMIN * `DEVELOPER` - DEVELOPER diff --git a/src/merge/resources/ats/types/scheduled_interview.py b/src/merge/resources/ats/types/scheduled_interview.py index 68029b8f..5000e479 100644 --- a/src/merge/resources/ats/types/scheduled_interview.py +++ b/src/merge/resources/ats/types/scheduled_interview.py @@ -102,7 +102,7 @@ class ScheduledInterview(UncheckedBaseModel): Indicates whether or not this object has been deleted in the third party platform. Full coverage deletion detection is a premium add-on. Native deletion detection is offered for free with limited coverage. [Learn more](https://docs.merge.dev/integrations/hris/supported-features/). """ - field_mappings: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None + field_mappings: typing.Optional[typing.Dict[str, typing.Any]] = None remote_data: typing.Optional[typing.List[RemoteData]] = None if IS_PYDANTIC_V2: @@ -115,10 +115,4 @@ class Config: extra = pydantic.Extra.allow -from .application import Application # noqa: E402, F401, I001 -from .candidate import Candidate # noqa: E402, F401, I001 -from .job import Job # noqa: E402, F401, I001 -from .job_posting import JobPosting # noqa: E402, F401, I001 -from .offer import Offer # noqa: E402, F401, I001 - update_forward_refs(ScheduledInterview) diff --git a/src/merge/resources/ats/types/scheduled_interview_request.py b/src/merge/resources/ats/types/scheduled_interview_request.py index 34e03ee7..a5d19c49 100644 --- a/src/merge/resources/ats/types/scheduled_interview_request.py +++ b/src/merge/resources/ats/types/scheduled_interview_request.py @@ -70,8 +70,8 @@ class ScheduledInterviewRequest(UncheckedBaseModel): * `COMPLETE` - COMPLETE """ - integration_params: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None - linked_account_params: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None + integration_params: typing.Optional[typing.Dict[str, typing.Any]] = None + linked_account_params: typing.Optional[typing.Dict[str, typing.Any]] = None if IS_PYDANTIC_V2: model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2 @@ -83,10 +83,4 @@ class Config: extra = pydantic.Extra.allow -from .application import Application # noqa: E402, F401, I001 -from .candidate import Candidate # noqa: E402, F401, I001 -from .job import Job # noqa: E402, F401, I001 -from .job_posting import JobPosting # noqa: E402, F401, I001 -from .offer import Offer # noqa: E402, F401, I001 - update_forward_refs(ScheduledInterviewRequest) diff --git a/src/merge/resources/ats/types/scheduled_interview_response.py b/src/merge/resources/ats/types/scheduled_interview_response.py index 13022119..3a62a42f 100644 --- a/src/merge/resources/ats/types/scheduled_interview_response.py +++ b/src/merge/resources/ats/types/scheduled_interview_response.py @@ -29,10 +29,4 @@ class Config: extra = pydantic.Extra.allow -from .application import Application # noqa: E402, F401, I001 -from .candidate import Candidate # noqa: E402, F401, I001 -from .job import Job # noqa: E402, F401, I001 -from .job_posting import JobPosting # noqa: E402, F401, I001 -from .offer import Offer # noqa: E402, F401, I001 - update_forward_refs(ScheduledInterviewResponse) diff --git a/src/merge/resources/ats/types/scheduled_interview_status_enum.py b/src/merge/resources/ats/types/scheduled_interview_status_enum.py index 5ca38557..b6b5de0b 100644 --- a/src/merge/resources/ats/types/scheduled_interview_status_enum.py +++ b/src/merge/resources/ats/types/scheduled_interview_status_enum.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ....core import enum + T_Result = typing.TypeVar("T_Result") -class ScheduledInterviewStatusEnum(str, enum.Enum): +class ScheduledInterviewStatusEnum(enum.StrEnum): """ * `SCHEDULED` - SCHEDULED * `AWAITING_FEEDBACK` - AWAITING_FEEDBACK diff --git a/src/merge/resources/ats/types/scorecard.py b/src/merge/resources/ats/types/scorecard.py index b2863185..dbefd368 100644 --- a/src/merge/resources/ats/types/scorecard.py +++ b/src/merge/resources/ats/types/scorecard.py @@ -81,7 +81,7 @@ class Scorecard(UncheckedBaseModel): Indicates whether or not this object has been deleted in the third party platform. Full coverage deletion detection is a premium add-on. Native deletion detection is offered for free with limited coverage. [Learn more](https://docs.merge.dev/integrations/hris/supported-features/). """ - field_mappings: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None + field_mappings: typing.Optional[typing.Dict[str, typing.Any]] = None remote_data: typing.Optional[typing.List[RemoteData]] = None if IS_PYDANTIC_V2: @@ -94,10 +94,4 @@ class Config: extra = pydantic.Extra.allow -from .application import Application # noqa: E402, F401, I001 -from .candidate import Candidate # noqa: E402, F401, I001 -from .job import Job # noqa: E402, F401, I001 -from .job_posting import JobPosting # noqa: E402, F401, I001 -from .offer import Offer # noqa: E402, F401, I001 - update_forward_refs(Scorecard) diff --git a/src/merge/resources/ats/types/screening_question.py b/src/merge/resources/ats/types/screening_question.py index a55d7622..2e91a0a2 100644 --- a/src/merge/resources/ats/types/screening_question.py +++ b/src/merge/resources/ats/types/screening_question.py @@ -89,7 +89,4 @@ class Config: extra = pydantic.Extra.allow -from .job import Job # noqa: E402, F401, I001 -from .job_posting import JobPosting # noqa: E402, F401, I001 - update_forward_refs(ScreeningQuestion) diff --git a/src/merge/resources/ats/types/screening_question_answer.py b/src/merge/resources/ats/types/screening_question_answer.py index 83c26ecf..af61919b 100644 --- a/src/merge/resources/ats/types/screening_question_answer.py +++ b/src/merge/resources/ats/types/screening_question_answer.py @@ -62,7 +62,4 @@ class Config: extra = pydantic.Extra.allow -from .job import Job # noqa: E402, F401, I001 -from .job_posting import JobPosting # noqa: E402, F401, I001 - update_forward_refs(ScreeningQuestionAnswer) diff --git a/src/merge/resources/ats/types/screening_question_answer_request.py b/src/merge/resources/ats/types/screening_question_answer_request.py index 21910969..fd777f12 100644 --- a/src/merge/resources/ats/types/screening_question_answer_request.py +++ b/src/merge/resources/ats/types/screening_question_answer_request.py @@ -35,8 +35,8 @@ class ScreeningQuestionAnswerRequest(UncheckedBaseModel): The candidate’s response to the screening question. """ - integration_params: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None - linked_account_params: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None + integration_params: typing.Optional[typing.Dict[str, typing.Any]] = None + linked_account_params: typing.Optional[typing.Dict[str, typing.Any]] = None if IS_PYDANTIC_V2: model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2 @@ -48,7 +48,4 @@ class Config: extra = pydantic.Extra.allow -from .job import Job # noqa: E402, F401, I001 -from .job_posting import JobPosting # noqa: E402, F401, I001 - update_forward_refs(ScreeningQuestionAnswerRequest) diff --git a/src/merge/resources/ats/types/screening_question_type_enum.py b/src/merge/resources/ats/types/screening_question_type_enum.py index ba2fd9d8..656bff13 100644 --- a/src/merge/resources/ats/types/screening_question_type_enum.py +++ b/src/merge/resources/ats/types/screening_question_type_enum.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ....core import enum + T_Result = typing.TypeVar("T_Result") -class ScreeningQuestionTypeEnum(str, enum.Enum): +class ScreeningQuestionTypeEnum(enum.StrEnum): """ * `DATE` - DATE * `FILE` - FILE diff --git a/src/merge/resources/ats/types/selective_sync_configurations_usage_enum.py b/src/merge/resources/ats/types/selective_sync_configurations_usage_enum.py index 9ff43813..e8e318c0 100644 --- a/src/merge/resources/ats/types/selective_sync_configurations_usage_enum.py +++ b/src/merge/resources/ats/types/selective_sync_configurations_usage_enum.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ....core import enum + T_Result = typing.TypeVar("T_Result") -class SelectiveSyncConfigurationsUsageEnum(str, enum.Enum): +class SelectiveSyncConfigurationsUsageEnum(enum.StrEnum): """ * `IN_NEXT_SYNC` - IN_NEXT_SYNC * `IN_LAST_SYNC` - IN_LAST_SYNC diff --git a/src/merge/resources/ats/types/status_fd_5_enum.py b/src/merge/resources/ats/types/status_fd_5_enum.py index d753f77c..6b851a79 100644 --- a/src/merge/resources/ats/types/status_fd_5_enum.py +++ b/src/merge/resources/ats/types/status_fd_5_enum.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ....core import enum + T_Result = typing.TypeVar("T_Result") -class StatusFd5Enum(str, enum.Enum): +class StatusFd5Enum(enum.StrEnum): """ * `SYNCING` - SYNCING * `DONE` - DONE diff --git a/src/merge/resources/ats/types/tag.py b/src/merge/resources/ats/types/tag.py index 6d73f731..944d771d 100644 --- a/src/merge/resources/ats/types/tag.py +++ b/src/merge/resources/ats/types/tag.py @@ -42,8 +42,8 @@ class Tag(UncheckedBaseModel): Indicates whether or not this object has been deleted in the third party platform. Full coverage deletion detection is a premium add-on. Native deletion detection is offered for free with limited coverage. [Learn more](https://docs.merge.dev/integrations/hris/supported-features/). """ - field_mappings: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None - remote_data: typing.Optional[typing.List[typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]]]] = None + field_mappings: typing.Optional[typing.Dict[str, typing.Any]] = None + remote_data: typing.Optional[typing.List[typing.Optional[typing.Dict[str, typing.Any]]]] = None if IS_PYDANTIC_V2: model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2 diff --git a/src/merge/resources/ats/types/url_request.py b/src/merge/resources/ats/types/url_request.py index 292911d8..fab9639c 100644 --- a/src/merge/resources/ats/types/url_request.py +++ b/src/merge/resources/ats/types/url_request.py @@ -35,8 +35,8 @@ class UrlRequest(UncheckedBaseModel): * `JOB_POSTING` - JOB_POSTING """ - integration_params: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None - linked_account_params: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None + integration_params: typing.Optional[typing.Dict[str, typing.Any]] = None + linked_account_params: typing.Optional[typing.Dict[str, typing.Any]] = None if IS_PYDANTIC_V2: model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2 diff --git a/src/merge/resources/ats/types/url_type_enum.py b/src/merge/resources/ats/types/url_type_enum.py index 7e29213d..a622a3e0 100644 --- a/src/merge/resources/ats/types/url_type_enum.py +++ b/src/merge/resources/ats/types/url_type_enum.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ....core import enum + T_Result = typing.TypeVar("T_Result") -class UrlTypeEnum(str, enum.Enum): +class UrlTypeEnum(enum.StrEnum): """ * `PERSONAL` - PERSONAL * `COMPANY` - COMPANY diff --git a/src/merge/resources/ats/types/veteran_status_enum.py b/src/merge/resources/ats/types/veteran_status_enum.py index 92685dd7..14972771 100644 --- a/src/merge/resources/ats/types/veteran_status_enum.py +++ b/src/merge/resources/ats/types/veteran_status_enum.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ....core import enum + T_Result = typing.TypeVar("T_Result") -class VeteranStatusEnum(str, enum.Enum): +class VeteranStatusEnum(enum.StrEnum): """ * `I_AM_NOT_A_PROTECTED_VETERAN` - I_AM_NOT_A_PROTECTED_VETERAN * `I_IDENTIFY_AS_ONE_OR_MORE_OF_THE_CLASSIFICATIONS_OF_A_PROTECTED_VETERAN` - I_IDENTIFY_AS_ONE_OR_MORE_OF_THE_CLASSIFICATIONS_OF_A_PROTECTED_VETERAN diff --git a/src/merge/resources/ats/types/visibility_enum.py b/src/merge/resources/ats/types/visibility_enum.py index efcaafb7..d28c6ffb 100644 --- a/src/merge/resources/ats/types/visibility_enum.py +++ b/src/merge/resources/ats/types/visibility_enum.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ....core import enum + T_Result = typing.TypeVar("T_Result") -class VisibilityEnum(str, enum.Enum): +class VisibilityEnum(enum.StrEnum): """ * `ADMIN_ONLY` - ADMIN_ONLY * `PUBLIC` - PUBLIC diff --git a/src/merge/resources/calendar/__init__.py b/src/merge/resources/calendar/__init__.py index a375ea5c..21bd54bd 100644 --- a/src/merge/resources/calendar/__init__.py +++ b/src/merge/resources/calendar/__init__.py @@ -312,8 +312,10 @@ def __getattr__(attr_name: str) -> typing.Any: raise AttributeError(f"No {attr_name} found in _dynamic_imports for module name -> {__name__}") try: module = import_module(module_name, __package__) - result = getattr(module, attr_name) - return result + if module_name == f".{attr_name}": + return module + else: + return getattr(module, attr_name) except ImportError as e: raise ImportError(f"Failed to import {attr_name} from {module_name}: {e}") from e except AttributeError as e: diff --git a/src/merge/resources/calendar/resources/__init__.py b/src/merge/resources/calendar/resources/__init__.py index 9022a9e2..0d641660 100644 --- a/src/merge/resources/calendar/resources/__init__.py +++ b/src/merge/resources/calendar/resources/__init__.py @@ -53,28 +53,28 @@ "GroupsRetrieveRequestExpandItem": ".groups", "IssuesListRequestStatus": ".issues", "LinkedAccountsListRequestCategory": ".linked_accounts", - "account_details": ".", - "account_token": ".", - "async_passthrough": ".", - "audit_trail": ".", - "available_actions": ".", - "calendars": ".", - "delete_account": ".", - "events": ".", - "field_mapping": ".", - "force_resync": ".", - "generate_key": ".", - "groups": ".", - "issues": ".", - "link_token": ".", - "linked_accounts": ".", - "passthrough": ".", - "regenerate_key": ".", - "scopes": ".", - "series": ".", - "sync_status": ".", - "users": ".", - "webhook_receivers": ".", + "account_details": ".account_details", + "account_token": ".account_token", + "async_passthrough": ".async_passthrough", + "audit_trail": ".audit_trail", + "available_actions": ".available_actions", + "calendars": ".calendars", + "delete_account": ".delete_account", + "events": ".events", + "field_mapping": ".field_mapping", + "force_resync": ".force_resync", + "generate_key": ".generate_key", + "groups": ".groups", + "issues": ".issues", + "link_token": ".link_token", + "linked_accounts": ".linked_accounts", + "passthrough": ".passthrough", + "regenerate_key": ".regenerate_key", + "scopes": ".scopes", + "series": ".series", + "sync_status": ".sync_status", + "users": ".users", + "webhook_receivers": ".webhook_receivers", } @@ -84,8 +84,10 @@ def __getattr__(attr_name: str) -> typing.Any: raise AttributeError(f"No {attr_name} found in _dynamic_imports for module name -> {__name__}") try: module = import_module(module_name, __package__) - result = getattr(module, attr_name) - return result + if module_name == f".{attr_name}": + return module + else: + return getattr(module, attr_name) except ImportError as e: raise ImportError(f"Failed to import {attr_name} from {module_name}: {e}") from e except AttributeError as e: diff --git a/src/merge/resources/calendar/resources/account_details/raw_client.py b/src/merge/resources/calendar/resources/account_details/raw_client.py index 07d61c08..f2f4ca12 100644 --- a/src/merge/resources/calendar/resources/account_details/raw_client.py +++ b/src/merge/resources/calendar/resources/account_details/raw_client.py @@ -6,9 +6,11 @@ from .....core.api_error import ApiError from .....core.client_wrapper import AsyncClientWrapper, SyncClientWrapper from .....core.http_response import AsyncHttpResponse, HttpResponse +from .....core.parse_error import ParsingError from .....core.request_options import RequestOptions from .....core.unchecked_base_model import construct_type from ...types.account_details import AccountDetails +from pydantic import ValidationError class RawAccountDetailsClient: @@ -47,6 +49,10 @@ def retrieve(self, *, request_options: typing.Optional[RequestOptions] = None) - _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) @@ -88,4 +94,8 @@ async def retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) diff --git a/src/merge/resources/calendar/resources/account_token/raw_client.py b/src/merge/resources/calendar/resources/account_token/raw_client.py index 3dc72af9..9f973434 100644 --- a/src/merge/resources/calendar/resources/account_token/raw_client.py +++ b/src/merge/resources/calendar/resources/account_token/raw_client.py @@ -7,10 +7,12 @@ from .....core.client_wrapper import AsyncClientWrapper, SyncClientWrapper from .....core.http_response import AsyncHttpResponse, HttpResponse from .....core.jsonable_encoder import jsonable_encoder +from .....core.parse_error import ParsingError from .....core.request_options import RequestOptions from .....core.unchecked_base_model import construct_type from ...types.account_token import AccountToken from ...types.regenerate_account_token import RegenerateAccountToken +from pydantic import ValidationError class RawAccountTokenClient: @@ -53,6 +55,10 @@ def retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) def regenerate_create( @@ -89,6 +95,10 @@ def regenerate_create( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) @@ -132,6 +142,10 @@ async def retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) async def regenerate_create( @@ -168,4 +182,8 @@ async def regenerate_create( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) diff --git a/src/merge/resources/calendar/resources/async_passthrough/__init__.py b/src/merge/resources/calendar/resources/async_passthrough/__init__.py index 375c7953..11090986 100644 --- a/src/merge/resources/calendar/resources/async_passthrough/__init__.py +++ b/src/merge/resources/calendar/resources/async_passthrough/__init__.py @@ -16,8 +16,10 @@ def __getattr__(attr_name: str) -> typing.Any: raise AttributeError(f"No {attr_name} found in _dynamic_imports for module name -> {__name__}") try: module = import_module(module_name, __package__) - result = getattr(module, attr_name) - return result + if module_name == f".{attr_name}": + return module + else: + return getattr(module, attr_name) except ImportError as e: raise ImportError(f"Failed to import {attr_name} from {module_name}: {e}") from e except AttributeError as e: diff --git a/src/merge/resources/calendar/resources/async_passthrough/raw_client.py b/src/merge/resources/calendar/resources/async_passthrough/raw_client.py index f8789f33..4ca8a20f 100644 --- a/src/merge/resources/calendar/resources/async_passthrough/raw_client.py +++ b/src/merge/resources/calendar/resources/async_passthrough/raw_client.py @@ -7,11 +7,13 @@ from .....core.client_wrapper import AsyncClientWrapper, SyncClientWrapper from .....core.http_response import AsyncHttpResponse, HttpResponse from .....core.jsonable_encoder import jsonable_encoder +from .....core.parse_error import ParsingError from .....core.request_options import RequestOptions from .....core.unchecked_base_model import construct_type from ...types.async_passthrough_reciept import AsyncPassthroughReciept from ...types.data_passthrough_request import DataPassthroughRequest from .types.async_passthrough_retrieve_response import AsyncPassthroughRetrieveResponse +from pydantic import ValidationError # this is used as the default value for optional parameters OMIT = typing.cast(typing.Any, ...) @@ -62,6 +64,10 @@ def create( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) def retrieve( @@ -100,6 +106,10 @@ def retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) @@ -148,6 +158,10 @@ async def create( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) async def retrieve( @@ -186,4 +200,8 @@ async def retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) diff --git a/src/merge/resources/calendar/resources/async_passthrough/types/__init__.py b/src/merge/resources/calendar/resources/async_passthrough/types/__init__.py index f6e9bec9..dc335400 100644 --- a/src/merge/resources/calendar/resources/async_passthrough/types/__init__.py +++ b/src/merge/resources/calendar/resources/async_passthrough/types/__init__.py @@ -16,8 +16,10 @@ def __getattr__(attr_name: str) -> typing.Any: raise AttributeError(f"No {attr_name} found in _dynamic_imports for module name -> {__name__}") try: module = import_module(module_name, __package__) - result = getattr(module, attr_name) - return result + if module_name == f".{attr_name}": + return module + else: + return getattr(module, attr_name) except ImportError as e: raise ImportError(f"Failed to import {attr_name} from {module_name}: {e}") from e except AttributeError as e: diff --git a/src/merge/resources/calendar/resources/audit_trail/raw_client.py b/src/merge/resources/calendar/resources/audit_trail/raw_client.py index 4933dc8c..b777cd99 100644 --- a/src/merge/resources/calendar/resources/audit_trail/raw_client.py +++ b/src/merge/resources/calendar/resources/audit_trail/raw_client.py @@ -6,9 +6,11 @@ from .....core.api_error import ApiError from .....core.client_wrapper import AsyncClientWrapper, SyncClientWrapper from .....core.http_response import AsyncHttpResponse, HttpResponse +from .....core.parse_error import ParsingError from .....core.request_options import RequestOptions from .....core.unchecked_base_model import construct_type from ...types.paginated_audit_log_event_list import PaginatedAuditLogEventList +from pydantic import ValidationError class RawAuditTrailClient: @@ -83,6 +85,10 @@ def list( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) @@ -158,4 +164,8 @@ async def list( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) diff --git a/src/merge/resources/calendar/resources/available_actions/raw_client.py b/src/merge/resources/calendar/resources/available_actions/raw_client.py index f8163766..3d003126 100644 --- a/src/merge/resources/calendar/resources/available_actions/raw_client.py +++ b/src/merge/resources/calendar/resources/available_actions/raw_client.py @@ -6,9 +6,11 @@ from .....core.api_error import ApiError from .....core.client_wrapper import AsyncClientWrapper, SyncClientWrapper from .....core.http_response import AsyncHttpResponse, HttpResponse +from .....core.parse_error import ParsingError from .....core.request_options import RequestOptions from .....core.unchecked_base_model import construct_type from ...types.available_actions import AvailableActions +from pydantic import ValidationError class RawAvailableActionsClient: @@ -47,6 +49,10 @@ def retrieve(self, *, request_options: typing.Optional[RequestOptions] = None) - _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) @@ -88,4 +94,8 @@ async def retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) diff --git a/src/merge/resources/calendar/resources/calendars/__init__.py b/src/merge/resources/calendar/resources/calendars/__init__.py index 76b4783e..9cf2210a 100644 --- a/src/merge/resources/calendar/resources/calendars/__init__.py +++ b/src/merge/resources/calendar/resources/calendars/__init__.py @@ -16,8 +16,10 @@ def __getattr__(attr_name: str) -> typing.Any: raise AttributeError(f"No {attr_name} found in _dynamic_imports for module name -> {__name__}") try: module = import_module(module_name, __package__) - result = getattr(module, attr_name) - return result + if module_name == f".{attr_name}": + return module + else: + return getattr(module, attr_name) except ImportError as e: raise ImportError(f"Failed to import {attr_name} from {module_name}: {e}") from e except AttributeError as e: diff --git a/src/merge/resources/calendar/resources/calendars/raw_client.py b/src/merge/resources/calendar/resources/calendars/raw_client.py index 3e3f95a9..ad96a01e 100644 --- a/src/merge/resources/calendar/resources/calendars/raw_client.py +++ b/src/merge/resources/calendar/resources/calendars/raw_client.py @@ -9,11 +9,13 @@ from .....core.datetime_utils import serialize_datetime from .....core.http_response import AsyncHttpResponse, HttpResponse from .....core.jsonable_encoder import jsonable_encoder +from .....core.parse_error import ParsingError from .....core.request_options import RequestOptions from .....core.unchecked_base_model import construct_type from ...types.calendar import Calendar from ...types.paginated_calendar_list import PaginatedCalendarList from .types.calendars_list_request_type import CalendarsListRequestType +from pydantic import ValidationError class RawCalendarsClient: @@ -130,6 +132,10 @@ def list( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) def retrieve( @@ -190,6 +196,10 @@ def retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) @@ -307,6 +317,10 @@ async def list( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) async def retrieve( @@ -367,4 +381,8 @@ async def retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) diff --git a/src/merge/resources/calendar/resources/calendars/types/__init__.py b/src/merge/resources/calendar/resources/calendars/types/__init__.py index 3926b304..e64930ea 100644 --- a/src/merge/resources/calendar/resources/calendars/types/__init__.py +++ b/src/merge/resources/calendar/resources/calendars/types/__init__.py @@ -16,8 +16,10 @@ def __getattr__(attr_name: str) -> typing.Any: raise AttributeError(f"No {attr_name} found in _dynamic_imports for module name -> {__name__}") try: module = import_module(module_name, __package__) - result = getattr(module, attr_name) - return result + if module_name == f".{attr_name}": + return module + else: + return getattr(module, attr_name) except ImportError as e: raise ImportError(f"Failed to import {attr_name} from {module_name}: {e}") from e except AttributeError as e: diff --git a/src/merge/resources/calendar/resources/calendars/types/calendars_list_request_type.py b/src/merge/resources/calendar/resources/calendars/types/calendars_list_request_type.py index d0de07b1..fadb1f7f 100644 --- a/src/merge/resources/calendar/resources/calendars/types/calendars_list_request_type.py +++ b/src/merge/resources/calendar/resources/calendars/types/calendars_list_request_type.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ......core import enum + T_Result = typing.TypeVar("T_Result") -class CalendarsListRequestType(str, enum.Enum): +class CalendarsListRequestType(enum.StrEnum): EMPTY = "" PERSONAL = "PERSONAL" SHARED = "SHARED" diff --git a/src/merge/resources/calendar/resources/delete_account/raw_client.py b/src/merge/resources/calendar/resources/delete_account/raw_client.py index 2a7d6c14..5af135be 100644 --- a/src/merge/resources/calendar/resources/delete_account/raw_client.py +++ b/src/merge/resources/calendar/resources/delete_account/raw_client.py @@ -6,7 +6,9 @@ from .....core.api_error import ApiError from .....core.client_wrapper import AsyncClientWrapper, SyncClientWrapper from .....core.http_response import AsyncHttpResponse, HttpResponse +from .....core.parse_error import ParsingError from .....core.request_options import RequestOptions +from pydantic import ValidationError class RawDeleteAccountClient: @@ -37,6 +39,10 @@ def delete(self, *, request_options: typing.Optional[RequestOptions] = None) -> _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) @@ -68,4 +74,8 @@ async def delete(self, *, request_options: typing.Optional[RequestOptions] = Non _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) diff --git a/src/merge/resources/calendar/resources/events/__init__.py b/src/merge/resources/calendar/resources/events/__init__.py index 5281b077..fb0a961d 100644 --- a/src/merge/resources/calendar/resources/events/__init__.py +++ b/src/merge/resources/calendar/resources/events/__init__.py @@ -20,8 +20,10 @@ def __getattr__(attr_name: str) -> typing.Any: raise AttributeError(f"No {attr_name} found in _dynamic_imports for module name -> {__name__}") try: module = import_module(module_name, __package__) - result = getattr(module, attr_name) - return result + if module_name == f".{attr_name}": + return module + else: + return getattr(module, attr_name) except ImportError as e: raise ImportError(f"Failed to import {attr_name} from {module_name}: {e}") from e except AttributeError as e: diff --git a/src/merge/resources/calendar/resources/events/raw_client.py b/src/merge/resources/calendar/resources/events/raw_client.py index 5fbebbc2..2d674b06 100644 --- a/src/merge/resources/calendar/resources/events/raw_client.py +++ b/src/merge/resources/calendar/resources/events/raw_client.py @@ -9,6 +9,7 @@ from .....core.datetime_utils import serialize_datetime from .....core.http_response import AsyncHttpResponse, HttpResponse from .....core.jsonable_encoder import jsonable_encoder +from .....core.parse_error import ParsingError from .....core.request_options import RequestOptions from .....core.unchecked_base_model import construct_type from ...types.event import Event @@ -18,6 +19,7 @@ from .types.events_invitees_list_request_expand_item import EventsInviteesListRequestExpandItem from .types.events_list_request_expand_item import EventsListRequestExpandItem from .types.events_retrieve_request_expand_item import EventsRetrieveRequestExpandItem +from pydantic import ValidationError class RawEventsClient: @@ -159,6 +161,10 @@ def list( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) def invitees_list( @@ -234,6 +240,10 @@ def invitees_list( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) def locations_list( @@ -307,6 +317,10 @@ def locations_list( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) def retrieve( @@ -367,6 +381,10 @@ def retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) @@ -509,6 +527,10 @@ async def list( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) async def invitees_list( @@ -584,6 +606,10 @@ async def invitees_list( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) async def locations_list( @@ -657,6 +683,10 @@ async def locations_list( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) async def retrieve( @@ -717,4 +747,8 @@ async def retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) diff --git a/src/merge/resources/calendar/resources/events/types/__init__.py b/src/merge/resources/calendar/resources/events/types/__init__.py index cef851bc..393c2f92 100644 --- a/src/merge/resources/calendar/resources/events/types/__init__.py +++ b/src/merge/resources/calendar/resources/events/types/__init__.py @@ -22,8 +22,10 @@ def __getattr__(attr_name: str) -> typing.Any: raise AttributeError(f"No {attr_name} found in _dynamic_imports for module name -> {__name__}") try: module = import_module(module_name, __package__) - result = getattr(module, attr_name) - return result + if module_name == f".{attr_name}": + return module + else: + return getattr(module, attr_name) except ImportError as e: raise ImportError(f"Failed to import {attr_name} from {module_name}: {e}") from e except AttributeError as e: diff --git a/src/merge/resources/calendar/resources/events/types/events_invitees_list_request_expand_item.py b/src/merge/resources/calendar/resources/events/types/events_invitees_list_request_expand_item.py index 8db9dfad..9544e737 100644 --- a/src/merge/resources/calendar/resources/events/types/events_invitees_list_request_expand_item.py +++ b/src/merge/resources/calendar/resources/events/types/events_invitees_list_request_expand_item.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ......core import enum + T_Result = typing.TypeVar("T_Result") -class EventsInviteesListRequestExpandItem(str, enum.Enum): +class EventsInviteesListRequestExpandItem(enum.StrEnum): EVENT = "event" GROUP = "group" USER = "user" diff --git a/src/merge/resources/calendar/resources/events/types/events_list_request_expand_item.py b/src/merge/resources/calendar/resources/events/types/events_list_request_expand_item.py index 6fc1651b..37eae6f4 100644 --- a/src/merge/resources/calendar/resources/events/types/events_list_request_expand_item.py +++ b/src/merge/resources/calendar/resources/events/types/events_list_request_expand_item.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ......core import enum + T_Result = typing.TypeVar("T_Result") -class EventsListRequestExpandItem(str, enum.Enum): +class EventsListRequestExpandItem(enum.StrEnum): CALENDAR = "calendar" INVITEES = "invitees" LOCATIONS = "locations" diff --git a/src/merge/resources/calendar/resources/events/types/events_retrieve_request_expand_item.py b/src/merge/resources/calendar/resources/events/types/events_retrieve_request_expand_item.py index 09b908d3..04c2ac5a 100644 --- a/src/merge/resources/calendar/resources/events/types/events_retrieve_request_expand_item.py +++ b/src/merge/resources/calendar/resources/events/types/events_retrieve_request_expand_item.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ......core import enum + T_Result = typing.TypeVar("T_Result") -class EventsRetrieveRequestExpandItem(str, enum.Enum): +class EventsRetrieveRequestExpandItem(enum.StrEnum): CALENDAR = "calendar" INVITEES = "invitees" LOCATIONS = "locations" diff --git a/src/merge/resources/calendar/resources/field_mapping/client.py b/src/merge/resources/calendar/resources/field_mapping/client.py index 5686f87d..0c6be1b7 100644 --- a/src/merge/resources/calendar/resources/field_mapping/client.py +++ b/src/merge/resources/calendar/resources/field_mapping/client.py @@ -71,7 +71,7 @@ def field_mappings_retrieve( def field_mappings_create( self, *, - remote_field_traversal_path: typing.Sequence[typing.Optional[typing.Any]], + remote_field_traversal_path: typing.Sequence[typing.Any], remote_method: str, remote_url_path: str, common_model_name: str, @@ -90,7 +90,7 @@ def field_mappings_create( Parameters ---------- - remote_field_traversal_path : typing.Sequence[typing.Optional[typing.Any]] + remote_field_traversal_path : typing.Sequence[typing.Any] The field traversal path of the remote field listed when you hit the GET /remote-fields endpoint. remote_method : str @@ -206,7 +206,7 @@ def field_mappings_partial_update( field_mapping_id: str, *, remote_data_iteration_count: typing.Optional[int] = None, - remote_field_traversal_path: typing.Optional[typing.Sequence[typing.Optional[typing.Any]]] = OMIT, + remote_field_traversal_path: typing.Optional[typing.Sequence[typing.Any]] = OMIT, remote_method: typing.Optional[str] = OMIT, remote_url_path: typing.Optional[str] = OMIT, jmes_path: typing.Optional[str] = OMIT, @@ -223,7 +223,7 @@ def field_mappings_partial_update( remote_data_iteration_count : typing.Optional[int] Number of common model instances to iterate through when fetching remote data for field mappings. Defaults to 250 if not provided. - remote_field_traversal_path : typing.Optional[typing.Sequence[typing.Optional[typing.Any]]] + remote_field_traversal_path : typing.Optional[typing.Sequence[typing.Any]] The field traversal path of the remote field listed when you hit the GET /remote-fields endpoint. remote_method : typing.Optional[str] @@ -458,7 +458,7 @@ async def main() -> None: async def field_mappings_create( self, *, - remote_field_traversal_path: typing.Sequence[typing.Optional[typing.Any]], + remote_field_traversal_path: typing.Sequence[typing.Any], remote_method: str, remote_url_path: str, common_model_name: str, @@ -477,7 +477,7 @@ async def field_mappings_create( Parameters ---------- - remote_field_traversal_path : typing.Sequence[typing.Optional[typing.Any]] + remote_field_traversal_path : typing.Sequence[typing.Any] The field traversal path of the remote field listed when you hit the GET /remote-fields endpoint. remote_method : str @@ -609,7 +609,7 @@ async def field_mappings_partial_update( field_mapping_id: str, *, remote_data_iteration_count: typing.Optional[int] = None, - remote_field_traversal_path: typing.Optional[typing.Sequence[typing.Optional[typing.Any]]] = OMIT, + remote_field_traversal_path: typing.Optional[typing.Sequence[typing.Any]] = OMIT, remote_method: typing.Optional[str] = OMIT, remote_url_path: typing.Optional[str] = OMIT, jmes_path: typing.Optional[str] = OMIT, @@ -626,7 +626,7 @@ async def field_mappings_partial_update( remote_data_iteration_count : typing.Optional[int] Number of common model instances to iterate through when fetching remote data for field mappings. Defaults to 250 if not provided. - remote_field_traversal_path : typing.Optional[typing.Sequence[typing.Optional[typing.Any]]] + remote_field_traversal_path : typing.Optional[typing.Sequence[typing.Any]] The field traversal path of the remote field listed when you hit the GET /remote-fields endpoint. remote_method : typing.Optional[str] diff --git a/src/merge/resources/calendar/resources/field_mapping/raw_client.py b/src/merge/resources/calendar/resources/field_mapping/raw_client.py index a3f76da6..619d4d10 100644 --- a/src/merge/resources/calendar/resources/field_mapping/raw_client.py +++ b/src/merge/resources/calendar/resources/field_mapping/raw_client.py @@ -7,12 +7,14 @@ from .....core.client_wrapper import AsyncClientWrapper, SyncClientWrapper from .....core.http_response import AsyncHttpResponse, HttpResponse from .....core.jsonable_encoder import jsonable_encoder +from .....core.parse_error import ParsingError from .....core.request_options import RequestOptions from .....core.unchecked_base_model import construct_type from ...types.external_target_field_api_response import ExternalTargetFieldApiResponse from ...types.field_mapping_api_instance_response import FieldMappingApiInstanceResponse from ...types.field_mapping_instance_response import FieldMappingInstanceResponse from ...types.remote_field_api_response import RemoteFieldApiResponse +from pydantic import ValidationError # this is used as the default value for optional parameters OMIT = typing.cast(typing.Any, ...) @@ -65,12 +67,16 @@ def field_mappings_retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) def field_mappings_create( self, *, - remote_field_traversal_path: typing.Sequence[typing.Optional[typing.Any]], + remote_field_traversal_path: typing.Sequence[typing.Any], remote_method: str, remote_url_path: str, common_model_name: str, @@ -89,7 +95,7 @@ def field_mappings_create( Parameters ---------- - remote_field_traversal_path : typing.Sequence[typing.Optional[typing.Any]] + remote_field_traversal_path : typing.Sequence[typing.Any] The field traversal path of the remote field listed when you hit the GET /remote-fields endpoint. remote_method : str @@ -171,6 +177,10 @@ def field_mappings_create( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) def field_mappings_destroy( @@ -209,6 +219,10 @@ def field_mappings_destroy( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) def field_mappings_partial_update( @@ -216,7 +230,7 @@ def field_mappings_partial_update( field_mapping_id: str, *, remote_data_iteration_count: typing.Optional[int] = None, - remote_field_traversal_path: typing.Optional[typing.Sequence[typing.Optional[typing.Any]]] = OMIT, + remote_field_traversal_path: typing.Optional[typing.Sequence[typing.Any]] = OMIT, remote_method: typing.Optional[str] = OMIT, remote_url_path: typing.Optional[str] = OMIT, jmes_path: typing.Optional[str] = OMIT, @@ -233,7 +247,7 @@ def field_mappings_partial_update( remote_data_iteration_count : typing.Optional[int] Number of common model instances to iterate through when fetching remote data for field mappings. Defaults to 250 if not provided. - remote_field_traversal_path : typing.Optional[typing.Sequence[typing.Optional[typing.Any]]] + remote_field_traversal_path : typing.Optional[typing.Sequence[typing.Any]] The field traversal path of the remote field listed when you hit the GET /remote-fields endpoint. remote_method : typing.Optional[str] @@ -288,6 +302,10 @@ def field_mappings_partial_update( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) def remote_fields_retrieve( @@ -338,6 +356,10 @@ def remote_fields_retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) def target_fields_retrieve( @@ -374,6 +396,10 @@ def target_fields_retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) def target_fields_create( @@ -433,6 +459,10 @@ def target_fields_create( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) @@ -483,12 +513,16 @@ async def field_mappings_retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) async def field_mappings_create( self, *, - remote_field_traversal_path: typing.Sequence[typing.Optional[typing.Any]], + remote_field_traversal_path: typing.Sequence[typing.Any], remote_method: str, remote_url_path: str, common_model_name: str, @@ -507,7 +541,7 @@ async def field_mappings_create( Parameters ---------- - remote_field_traversal_path : typing.Sequence[typing.Optional[typing.Any]] + remote_field_traversal_path : typing.Sequence[typing.Any] The field traversal path of the remote field listed when you hit the GET /remote-fields endpoint. remote_method : str @@ -589,6 +623,10 @@ async def field_mappings_create( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) async def field_mappings_destroy( @@ -627,6 +665,10 @@ async def field_mappings_destroy( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) async def field_mappings_partial_update( @@ -634,7 +676,7 @@ async def field_mappings_partial_update( field_mapping_id: str, *, remote_data_iteration_count: typing.Optional[int] = None, - remote_field_traversal_path: typing.Optional[typing.Sequence[typing.Optional[typing.Any]]] = OMIT, + remote_field_traversal_path: typing.Optional[typing.Sequence[typing.Any]] = OMIT, remote_method: typing.Optional[str] = OMIT, remote_url_path: typing.Optional[str] = OMIT, jmes_path: typing.Optional[str] = OMIT, @@ -651,7 +693,7 @@ async def field_mappings_partial_update( remote_data_iteration_count : typing.Optional[int] Number of common model instances to iterate through when fetching remote data for field mappings. Defaults to 250 if not provided. - remote_field_traversal_path : typing.Optional[typing.Sequence[typing.Optional[typing.Any]]] + remote_field_traversal_path : typing.Optional[typing.Sequence[typing.Any]] The field traversal path of the remote field listed when you hit the GET /remote-fields endpoint. remote_method : typing.Optional[str] @@ -706,6 +748,10 @@ async def field_mappings_partial_update( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) async def remote_fields_retrieve( @@ -756,6 +802,10 @@ async def remote_fields_retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) async def target_fields_retrieve( @@ -792,6 +842,10 @@ async def target_fields_retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) async def target_fields_create( @@ -851,4 +905,8 @@ async def target_fields_create( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) diff --git a/src/merge/resources/calendar/resources/force_resync/raw_client.py b/src/merge/resources/calendar/resources/force_resync/raw_client.py index 170a57e3..c5a72081 100644 --- a/src/merge/resources/calendar/resources/force_resync/raw_client.py +++ b/src/merge/resources/calendar/resources/force_resync/raw_client.py @@ -6,9 +6,11 @@ from .....core.api_error import ApiError from .....core.client_wrapper import AsyncClientWrapper, SyncClientWrapper from .....core.http_response import AsyncHttpResponse, HttpResponse +from .....core.parse_error import ParsingError from .....core.request_options import RequestOptions from .....core.unchecked_base_model import construct_type from ...types.sync_status import SyncStatus +from pydantic import ValidationError class RawForceResyncClient: @@ -49,6 +51,10 @@ def sync_status_resync_create( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) @@ -90,4 +96,8 @@ async def sync_status_resync_create( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) diff --git a/src/merge/resources/calendar/resources/generate_key/raw_client.py b/src/merge/resources/calendar/resources/generate_key/raw_client.py index 2e397101..c749b52c 100644 --- a/src/merge/resources/calendar/resources/generate_key/raw_client.py +++ b/src/merge/resources/calendar/resources/generate_key/raw_client.py @@ -6,9 +6,11 @@ from .....core.api_error import ApiError from .....core.client_wrapper import AsyncClientWrapper, SyncClientWrapper from .....core.http_response import AsyncHttpResponse, HttpResponse +from .....core.parse_error import ParsingError from .....core.request_options import RequestOptions from .....core.unchecked_base_model import construct_type from ...types.remote_key import RemoteKey +from pydantic import ValidationError # this is used as the default value for optional parameters OMIT = typing.cast(typing.Any, ...) @@ -60,6 +62,10 @@ def create(self, *, name: str, request_options: typing.Optional[RequestOptions] _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) @@ -111,4 +117,8 @@ async def create( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) diff --git a/src/merge/resources/calendar/resources/groups/__init__.py b/src/merge/resources/calendar/resources/groups/__init__.py index c42a8d2e..833b79cd 100644 --- a/src/merge/resources/calendar/resources/groups/__init__.py +++ b/src/merge/resources/calendar/resources/groups/__init__.py @@ -19,8 +19,10 @@ def __getattr__(attr_name: str) -> typing.Any: raise AttributeError(f"No {attr_name} found in _dynamic_imports for module name -> {__name__}") try: module = import_module(module_name, __package__) - result = getattr(module, attr_name) - return result + if module_name == f".{attr_name}": + return module + else: + return getattr(module, attr_name) except ImportError as e: raise ImportError(f"Failed to import {attr_name} from {module_name}: {e}") from e except AttributeError as e: diff --git a/src/merge/resources/calendar/resources/groups/raw_client.py b/src/merge/resources/calendar/resources/groups/raw_client.py index 34a418d3..722c639a 100644 --- a/src/merge/resources/calendar/resources/groups/raw_client.py +++ b/src/merge/resources/calendar/resources/groups/raw_client.py @@ -9,12 +9,14 @@ from .....core.datetime_utils import serialize_datetime from .....core.http_response import AsyncHttpResponse, HttpResponse from .....core.jsonable_encoder import jsonable_encoder +from .....core.parse_error import ParsingError from .....core.request_options import RequestOptions from .....core.unchecked_base_model import construct_type from ...types.group import Group from ...types.paginated_group_list import PaginatedGroupList from .types.groups_list_request_expand_item import GroupsListRequestExpandItem from .types.groups_retrieve_request_expand_item import GroupsRetrieveRequestExpandItem +from pydantic import ValidationError class RawGroupsClient: @@ -136,6 +138,10 @@ def list( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) def retrieve( @@ -196,6 +202,10 @@ def retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) @@ -318,6 +328,10 @@ async def list( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) async def retrieve( @@ -378,4 +392,8 @@ async def retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) diff --git a/src/merge/resources/calendar/resources/groups/types/__init__.py b/src/merge/resources/calendar/resources/groups/types/__init__.py index 9f5d7290..1ac662da 100644 --- a/src/merge/resources/calendar/resources/groups/types/__init__.py +++ b/src/merge/resources/calendar/resources/groups/types/__init__.py @@ -20,8 +20,10 @@ def __getattr__(attr_name: str) -> typing.Any: raise AttributeError(f"No {attr_name} found in _dynamic_imports for module name -> {__name__}") try: module = import_module(module_name, __package__) - result = getattr(module, attr_name) - return result + if module_name == f".{attr_name}": + return module + else: + return getattr(module, attr_name) except ImportError as e: raise ImportError(f"Failed to import {attr_name} from {module_name}: {e}") from e except AttributeError as e: diff --git a/src/merge/resources/calendar/resources/groups/types/groups_list_request_expand_item.py b/src/merge/resources/calendar/resources/groups/types/groups_list_request_expand_item.py index 7e74c3cc..b3402014 100644 --- a/src/merge/resources/calendar/resources/groups/types/groups_list_request_expand_item.py +++ b/src/merge/resources/calendar/resources/groups/types/groups_list_request_expand_item.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ......core import enum + T_Result = typing.TypeVar("T_Result") -class GroupsListRequestExpandItem(str, enum.Enum): +class GroupsListRequestExpandItem(enum.StrEnum): CHILD_GROUPS = "child_groups" USERS = "users" diff --git a/src/merge/resources/calendar/resources/groups/types/groups_retrieve_request_expand_item.py b/src/merge/resources/calendar/resources/groups/types/groups_retrieve_request_expand_item.py index 4843d494..2d5c0147 100644 --- a/src/merge/resources/calendar/resources/groups/types/groups_retrieve_request_expand_item.py +++ b/src/merge/resources/calendar/resources/groups/types/groups_retrieve_request_expand_item.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ......core import enum + T_Result = typing.TypeVar("T_Result") -class GroupsRetrieveRequestExpandItem(str, enum.Enum): +class GroupsRetrieveRequestExpandItem(enum.StrEnum): CHILD_GROUPS = "child_groups" USERS = "users" diff --git a/src/merge/resources/calendar/resources/issues/__init__.py b/src/merge/resources/calendar/resources/issues/__init__.py index 3ca1094b..45b33fe1 100644 --- a/src/merge/resources/calendar/resources/issues/__init__.py +++ b/src/merge/resources/calendar/resources/issues/__init__.py @@ -16,8 +16,10 @@ def __getattr__(attr_name: str) -> typing.Any: raise AttributeError(f"No {attr_name} found in _dynamic_imports for module name -> {__name__}") try: module = import_module(module_name, __package__) - result = getattr(module, attr_name) - return result + if module_name == f".{attr_name}": + return module + else: + return getattr(module, attr_name) except ImportError as e: raise ImportError(f"Failed to import {attr_name} from {module_name}: {e}") from e except AttributeError as e: diff --git a/src/merge/resources/calendar/resources/issues/raw_client.py b/src/merge/resources/calendar/resources/issues/raw_client.py index 34099c4f..421f1b8b 100644 --- a/src/merge/resources/calendar/resources/issues/raw_client.py +++ b/src/merge/resources/calendar/resources/issues/raw_client.py @@ -9,11 +9,13 @@ from .....core.datetime_utils import serialize_datetime from .....core.http_response import AsyncHttpResponse, HttpResponse from .....core.jsonable_encoder import jsonable_encoder +from .....core.parse_error import ParsingError from .....core.request_options import RequestOptions from .....core.unchecked_base_model import construct_type from ...types.issue import Issue from ...types.paginated_issue_list import PaginatedIssueList from .types.issues_list_request_status import IssuesListRequestStatus +from pydantic import ValidationError class RawIssuesClient: @@ -133,6 +135,10 @@ def list( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) def retrieve(self, id: str, *, request_options: typing.Optional[RequestOptions] = None) -> HttpResponse[Issue]: @@ -169,6 +175,10 @@ def retrieve(self, id: str, *, request_options: typing.Optional[RequestOptions] _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) @@ -289,6 +299,10 @@ async def list( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) async def retrieve( @@ -327,4 +341,8 @@ async def retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) diff --git a/src/merge/resources/calendar/resources/issues/types/__init__.py b/src/merge/resources/calendar/resources/issues/types/__init__.py index 88fbf977..5e097583 100644 --- a/src/merge/resources/calendar/resources/issues/types/__init__.py +++ b/src/merge/resources/calendar/resources/issues/types/__init__.py @@ -16,8 +16,10 @@ def __getattr__(attr_name: str) -> typing.Any: raise AttributeError(f"No {attr_name} found in _dynamic_imports for module name -> {__name__}") try: module = import_module(module_name, __package__) - result = getattr(module, attr_name) - return result + if module_name == f".{attr_name}": + return module + else: + return getattr(module, attr_name) except ImportError as e: raise ImportError(f"Failed to import {attr_name} from {module_name}: {e}") from e except AttributeError as e: diff --git a/src/merge/resources/calendar/resources/issues/types/issues_list_request_status.py b/src/merge/resources/calendar/resources/issues/types/issues_list_request_status.py index 2bd3521e..a61afdd0 100644 --- a/src/merge/resources/calendar/resources/issues/types/issues_list_request_status.py +++ b/src/merge/resources/calendar/resources/issues/types/issues_list_request_status.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ......core import enum + T_Result = typing.TypeVar("T_Result") -class IssuesListRequestStatus(str, enum.Enum): +class IssuesListRequestStatus(enum.StrEnum): ONGOING = "ONGOING" RESOLVED = "RESOLVED" diff --git a/src/merge/resources/calendar/resources/link_token/__init__.py b/src/merge/resources/calendar/resources/link_token/__init__.py index be8c3839..834918c1 100644 --- a/src/merge/resources/calendar/resources/link_token/__init__.py +++ b/src/merge/resources/calendar/resources/link_token/__init__.py @@ -19,8 +19,10 @@ def __getattr__(attr_name: str) -> typing.Any: raise AttributeError(f"No {attr_name} found in _dynamic_imports for module name -> {__name__}") try: module = import_module(module_name, __package__) - result = getattr(module, attr_name) - return result + if module_name == f".{attr_name}": + return module + else: + return getattr(module, attr_name) except ImportError as e: raise ImportError(f"Failed to import {attr_name} from {module_name}: {e}") from e except AttributeError as e: diff --git a/src/merge/resources/calendar/resources/link_token/client.py b/src/merge/resources/calendar/resources/link_token/client.py index fc022fb8..ebe227a9 100644 --- a/src/merge/resources/calendar/resources/link_token/client.py +++ b/src/merge/resources/calendar/resources/link_token/client.py @@ -50,7 +50,7 @@ def create( ] = OMIT, language: typing.Optional[EndUserDetailsRequestLanguage] = OMIT, are_syncs_disabled: typing.Optional[bool] = OMIT, - integration_specific_config: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = OMIT, + integration_specific_config: typing.Optional[typing.Dict[str, typing.Any]] = OMIT, completed_account_initial_screen: typing.Optional[EndUserDetailsRequestCompletedAccountInitialScreen] = OMIT, linked_destination_id: typing.Optional[str] = OMIT, credential_id: typing.Optional[str] = OMIT, @@ -98,7 +98,7 @@ def create( are_syncs_disabled : typing.Optional[bool] The boolean that indicates whether initial, periodic, and force syncs will be disabled. - integration_specific_config : typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] + integration_specific_config : typing.Optional[typing.Dict[str, typing.Any]] A JSON object containing integration-specific configuration options. completed_account_initial_screen : typing.Optional[EndUserDetailsRequestCompletedAccountInitialScreen] @@ -192,7 +192,7 @@ async def create( ] = OMIT, language: typing.Optional[EndUserDetailsRequestLanguage] = OMIT, are_syncs_disabled: typing.Optional[bool] = OMIT, - integration_specific_config: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = OMIT, + integration_specific_config: typing.Optional[typing.Dict[str, typing.Any]] = OMIT, completed_account_initial_screen: typing.Optional[EndUserDetailsRequestCompletedAccountInitialScreen] = OMIT, linked_destination_id: typing.Optional[str] = OMIT, credential_id: typing.Optional[str] = OMIT, @@ -240,7 +240,7 @@ async def create( are_syncs_disabled : typing.Optional[bool] The boolean that indicates whether initial, periodic, and force syncs will be disabled. - integration_specific_config : typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] + integration_specific_config : typing.Optional[typing.Dict[str, typing.Any]] A JSON object containing integration-specific configuration options. completed_account_initial_screen : typing.Optional[EndUserDetailsRequestCompletedAccountInitialScreen] diff --git a/src/merge/resources/calendar/resources/link_token/raw_client.py b/src/merge/resources/calendar/resources/link_token/raw_client.py index e8f9ad02..80e491ba 100644 --- a/src/merge/resources/calendar/resources/link_token/raw_client.py +++ b/src/merge/resources/calendar/resources/link_token/raw_client.py @@ -6,6 +6,7 @@ from .....core.api_error import ApiError from .....core.client_wrapper import AsyncClientWrapper, SyncClientWrapper from .....core.http_response import AsyncHttpResponse, HttpResponse +from .....core.parse_error import ParsingError from .....core.request_options import RequestOptions from .....core.unchecked_base_model import construct_type from ...types.categories_enum import CategoriesEnum @@ -16,6 +17,7 @@ EndUserDetailsRequestCompletedAccountInitialScreen, ) from .types.end_user_details_request_language import EndUserDetailsRequestLanguage +from pydantic import ValidationError # this is used as the default value for optional parameters OMIT = typing.cast(typing.Any, ...) @@ -42,7 +44,7 @@ def create( ] = OMIT, language: typing.Optional[EndUserDetailsRequestLanguage] = OMIT, are_syncs_disabled: typing.Optional[bool] = OMIT, - integration_specific_config: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = OMIT, + integration_specific_config: typing.Optional[typing.Dict[str, typing.Any]] = OMIT, completed_account_initial_screen: typing.Optional[EndUserDetailsRequestCompletedAccountInitialScreen] = OMIT, linked_destination_id: typing.Optional[str] = OMIT, credential_id: typing.Optional[str] = OMIT, @@ -90,7 +92,7 @@ def create( are_syncs_disabled : typing.Optional[bool] The boolean that indicates whether initial, periodic, and force syncs will be disabled. - integration_specific_config : typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] + integration_specific_config : typing.Optional[typing.Dict[str, typing.Any]] A JSON object containing integration-specific configuration options. completed_account_initial_screen : typing.Optional[EndUserDetailsRequestCompletedAccountInitialScreen] @@ -154,6 +156,10 @@ def create( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) @@ -178,7 +184,7 @@ async def create( ] = OMIT, language: typing.Optional[EndUserDetailsRequestLanguage] = OMIT, are_syncs_disabled: typing.Optional[bool] = OMIT, - integration_specific_config: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = OMIT, + integration_specific_config: typing.Optional[typing.Dict[str, typing.Any]] = OMIT, completed_account_initial_screen: typing.Optional[EndUserDetailsRequestCompletedAccountInitialScreen] = OMIT, linked_destination_id: typing.Optional[str] = OMIT, credential_id: typing.Optional[str] = OMIT, @@ -226,7 +232,7 @@ async def create( are_syncs_disabled : typing.Optional[bool] The boolean that indicates whether initial, periodic, and force syncs will be disabled. - integration_specific_config : typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] + integration_specific_config : typing.Optional[typing.Dict[str, typing.Any]] A JSON object containing integration-specific configuration options. completed_account_initial_screen : typing.Optional[EndUserDetailsRequestCompletedAccountInitialScreen] @@ -290,4 +296,8 @@ async def create( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) diff --git a/src/merge/resources/calendar/resources/link_token/types/__init__.py b/src/merge/resources/calendar/resources/link_token/types/__init__.py index 55cc1d4e..1846dfb1 100644 --- a/src/merge/resources/calendar/resources/link_token/types/__init__.py +++ b/src/merge/resources/calendar/resources/link_token/types/__init__.py @@ -22,8 +22,10 @@ def __getattr__(attr_name: str) -> typing.Any: raise AttributeError(f"No {attr_name} found in _dynamic_imports for module name -> {__name__}") try: module = import_module(module_name, __package__) - result = getattr(module, attr_name) - return result + if module_name == f".{attr_name}": + return module + else: + return getattr(module, attr_name) except ImportError as e: raise ImportError(f"Failed to import {attr_name} from {module_name}: {e}") from e except AttributeError as e: diff --git a/src/merge/resources/calendar/resources/linked_accounts/__init__.py b/src/merge/resources/calendar/resources/linked_accounts/__init__.py index 0b9e42b4..12e213b7 100644 --- a/src/merge/resources/calendar/resources/linked_accounts/__init__.py +++ b/src/merge/resources/calendar/resources/linked_accounts/__init__.py @@ -16,8 +16,10 @@ def __getattr__(attr_name: str) -> typing.Any: raise AttributeError(f"No {attr_name} found in _dynamic_imports for module name -> {__name__}") try: module = import_module(module_name, __package__) - result = getattr(module, attr_name) - return result + if module_name == f".{attr_name}": + return module + else: + return getattr(module, attr_name) except ImportError as e: raise ImportError(f"Failed to import {attr_name} from {module_name}: {e}") from e except AttributeError as e: diff --git a/src/merge/resources/calendar/resources/linked_accounts/raw_client.py b/src/merge/resources/calendar/resources/linked_accounts/raw_client.py index 252ab5d0..f7055de9 100644 --- a/src/merge/resources/calendar/resources/linked_accounts/raw_client.py +++ b/src/merge/resources/calendar/resources/linked_accounts/raw_client.py @@ -7,11 +7,13 @@ from .....core.client_wrapper import AsyncClientWrapper, SyncClientWrapper from .....core.http_response import AsyncHttpResponse, HttpResponse from .....core.jsonable_encoder import jsonable_encoder +from .....core.parse_error import ParsingError from .....core.request_options import RequestOptions from .....core.unchecked_base_model import construct_type from ...types.linked_account_patch_response import LinkedAccountPatchResponse from ...types.paginated_account_details_and_actions_list import PaginatedAccountDetailsAndActionsList from .types.linked_accounts_list_request_category import LinkedAccountsListRequestCategory +from pydantic import ValidationError # this is used as the default value for optional parameters OMIT = typing.cast(typing.Any, ...) @@ -123,6 +125,10 @@ def list( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) def partial_update( @@ -174,6 +180,10 @@ def partial_update( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) @@ -283,6 +293,10 @@ async def list( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) async def partial_update( @@ -334,4 +348,8 @@ async def partial_update( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) diff --git a/src/merge/resources/calendar/resources/linked_accounts/types/__init__.py b/src/merge/resources/calendar/resources/linked_accounts/types/__init__.py index a28f38cc..a884db6a 100644 --- a/src/merge/resources/calendar/resources/linked_accounts/types/__init__.py +++ b/src/merge/resources/calendar/resources/linked_accounts/types/__init__.py @@ -18,8 +18,10 @@ def __getattr__(attr_name: str) -> typing.Any: raise AttributeError(f"No {attr_name} found in _dynamic_imports for module name -> {__name__}") try: module = import_module(module_name, __package__) - result = getattr(module, attr_name) - return result + if module_name == f".{attr_name}": + return module + else: + return getattr(module, attr_name) except ImportError as e: raise ImportError(f"Failed to import {attr_name} from {module_name}: {e}") from e except AttributeError as e: diff --git a/src/merge/resources/calendar/resources/linked_accounts/types/linked_accounts_list_request_category.py b/src/merge/resources/calendar/resources/linked_accounts/types/linked_accounts_list_request_category.py index 97df0150..035ed972 100644 --- a/src/merge/resources/calendar/resources/linked_accounts/types/linked_accounts_list_request_category.py +++ b/src/merge/resources/calendar/resources/linked_accounts/types/linked_accounts_list_request_category.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ......core import enum + T_Result = typing.TypeVar("T_Result") -class LinkedAccountsListRequestCategory(str, enum.Enum): +class LinkedAccountsListRequestCategory(enum.StrEnum): ACCOUNTING = "accounting" ATS = "ats" CHAT = "chat" diff --git a/src/merge/resources/calendar/resources/passthrough/raw_client.py b/src/merge/resources/calendar/resources/passthrough/raw_client.py index 7d4701a3..808ab3a5 100644 --- a/src/merge/resources/calendar/resources/passthrough/raw_client.py +++ b/src/merge/resources/calendar/resources/passthrough/raw_client.py @@ -6,10 +6,12 @@ from .....core.api_error import ApiError from .....core.client_wrapper import AsyncClientWrapper, SyncClientWrapper from .....core.http_response import AsyncHttpResponse, HttpResponse +from .....core.parse_error import ParsingError from .....core.request_options import RequestOptions from .....core.unchecked_base_model import construct_type from ...types.data_passthrough_request import DataPassthroughRequest from ...types.remote_response import RemoteResponse +from pydantic import ValidationError # this is used as the default value for optional parameters OMIT = typing.cast(typing.Any, ...) @@ -60,6 +62,10 @@ def create( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) @@ -108,4 +114,8 @@ async def create( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) diff --git a/src/merge/resources/calendar/resources/regenerate_key/raw_client.py b/src/merge/resources/calendar/resources/regenerate_key/raw_client.py index fa185f01..2cd89102 100644 --- a/src/merge/resources/calendar/resources/regenerate_key/raw_client.py +++ b/src/merge/resources/calendar/resources/regenerate_key/raw_client.py @@ -6,9 +6,11 @@ from .....core.api_error import ApiError from .....core.client_wrapper import AsyncClientWrapper, SyncClientWrapper from .....core.http_response import AsyncHttpResponse, HttpResponse +from .....core.parse_error import ParsingError from .....core.request_options import RequestOptions from .....core.unchecked_base_model import construct_type from ...types.remote_key import RemoteKey +from pydantic import ValidationError # this is used as the default value for optional parameters OMIT = typing.cast(typing.Any, ...) @@ -60,6 +62,10 @@ def create(self, *, name: str, request_options: typing.Optional[RequestOptions] _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) @@ -111,4 +117,8 @@ async def create( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) diff --git a/src/merge/resources/calendar/resources/scopes/raw_client.py b/src/merge/resources/calendar/resources/scopes/raw_client.py index a9d45363..454e01fb 100644 --- a/src/merge/resources/calendar/resources/scopes/raw_client.py +++ b/src/merge/resources/calendar/resources/scopes/raw_client.py @@ -6,10 +6,12 @@ from .....core.api_error import ApiError from .....core.client_wrapper import AsyncClientWrapper, SyncClientWrapper from .....core.http_response import AsyncHttpResponse, HttpResponse +from .....core.parse_error import ParsingError from .....core.request_options import RequestOptions from .....core.unchecked_base_model import construct_type from ...types.common_model_scope_api import CommonModelScopeApi from ...types.individual_common_model_scope_deserializer_request import IndividualCommonModelScopeDeserializerRequest +from pydantic import ValidationError # this is used as the default value for optional parameters OMIT = typing.cast(typing.Any, ...) @@ -53,6 +55,10 @@ def default_scopes_retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) def linked_account_scopes_retrieve( @@ -89,6 +95,10 @@ def linked_account_scopes_retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) def linked_account_scopes_create( @@ -138,6 +148,10 @@ def linked_account_scopes_create( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) @@ -179,6 +193,10 @@ async def default_scopes_retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) async def linked_account_scopes_retrieve( @@ -215,6 +233,10 @@ async def linked_account_scopes_retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) async def linked_account_scopes_create( @@ -264,4 +286,8 @@ async def linked_account_scopes_create( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) diff --git a/src/merge/resources/calendar/resources/series/raw_client.py b/src/merge/resources/calendar/resources/series/raw_client.py index b8bd8af1..aedc1cfd 100644 --- a/src/merge/resources/calendar/resources/series/raw_client.py +++ b/src/merge/resources/calendar/resources/series/raw_client.py @@ -9,10 +9,12 @@ from .....core.datetime_utils import serialize_datetime from .....core.http_response import AsyncHttpResponse, HttpResponse from .....core.jsonable_encoder import jsonable_encoder +from .....core.parse_error import ParsingError from .....core.request_options import RequestOptions from .....core.unchecked_base_model import construct_type from ...types.paginated_series_list import PaginatedSeriesList from ...types.series import Series +from pydantic import ValidationError class RawSeriesClient: @@ -134,6 +136,10 @@ def list( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) def retrieve( @@ -194,6 +200,10 @@ def retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) @@ -316,6 +326,10 @@ async def list( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) async def retrieve( @@ -376,4 +390,8 @@ async def retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) diff --git a/src/merge/resources/calendar/resources/sync_status/raw_client.py b/src/merge/resources/calendar/resources/sync_status/raw_client.py index 8cd4755d..60e09c81 100644 --- a/src/merge/resources/calendar/resources/sync_status/raw_client.py +++ b/src/merge/resources/calendar/resources/sync_status/raw_client.py @@ -6,9 +6,11 @@ from .....core.api_error import ApiError from .....core.client_wrapper import AsyncClientWrapper, SyncClientWrapper from .....core.http_response import AsyncHttpResponse, HttpResponse +from .....core.parse_error import ParsingError from .....core.request_options import RequestOptions from .....core.unchecked_base_model import construct_type from ...types.paginated_sync_status_list import PaginatedSyncStatusList +from pydantic import ValidationError class RawSyncStatusClient: @@ -63,6 +65,10 @@ def list( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) @@ -118,4 +124,8 @@ async def list( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) diff --git a/src/merge/resources/calendar/resources/users/raw_client.py b/src/merge/resources/calendar/resources/users/raw_client.py index fa1e1d88..77de9afe 100644 --- a/src/merge/resources/calendar/resources/users/raw_client.py +++ b/src/merge/resources/calendar/resources/users/raw_client.py @@ -9,10 +9,12 @@ from .....core.datetime_utils import serialize_datetime from .....core.http_response import AsyncHttpResponse, HttpResponse from .....core.jsonable_encoder import jsonable_encoder +from .....core.parse_error import ParsingError from .....core.request_options import RequestOptions from .....core.unchecked_base_model import construct_type from ...types.paginated_user_list import PaginatedUserList from ...types.user import User +from pydantic import ValidationError class RawUsersClient: @@ -124,6 +126,10 @@ def list( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) def retrieve( @@ -184,6 +190,10 @@ def retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) @@ -296,6 +306,10 @@ async def list( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) async def retrieve( @@ -356,4 +370,8 @@ async def retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) diff --git a/src/merge/resources/calendar/resources/webhook_receivers/raw_client.py b/src/merge/resources/calendar/resources/webhook_receivers/raw_client.py index fb945786..524ee72a 100644 --- a/src/merge/resources/calendar/resources/webhook_receivers/raw_client.py +++ b/src/merge/resources/calendar/resources/webhook_receivers/raw_client.py @@ -6,9 +6,11 @@ from .....core.api_error import ApiError from .....core.client_wrapper import AsyncClientWrapper, SyncClientWrapper from .....core.http_response import AsyncHttpResponse, HttpResponse +from .....core.parse_error import ParsingError from .....core.request_options import RequestOptions from .....core.unchecked_base_model import construct_type from ...types.webhook_receiver import WebhookReceiver +from pydantic import ValidationError # this is used as the default value for optional parameters OMIT = typing.cast(typing.Any, ...) @@ -52,6 +54,10 @@ def list( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) def create( @@ -108,6 +114,10 @@ def create( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) @@ -149,6 +159,10 @@ async def list( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) async def create( @@ -205,4 +219,8 @@ async def create( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) diff --git a/src/merge/resources/calendar/types/__init__.py b/src/merge/resources/calendar/types/__init__.py index 7863e434..a45668f0 100644 --- a/src/merge/resources/calendar/types/__init__.py +++ b/src/merge/resources/calendar/types/__init__.py @@ -244,8 +244,10 @@ def __getattr__(attr_name: str) -> typing.Any: raise AttributeError(f"No {attr_name} found in _dynamic_imports for module name -> {__name__}") try: module = import_module(module_name, __package__) - result = getattr(module, attr_name) - return result + if module_name == f".{attr_name}": + return module + else: + return getattr(module, attr_name) except ImportError as e: raise ImportError(f"Failed to import {attr_name} from {module_name}: {e}") from e except AttributeError as e: diff --git a/src/merge/resources/calendar/types/account_details_and_actions.py b/src/merge/resources/calendar/types/account_details_and_actions.py index 93c874ed..cbf29cb3 100644 --- a/src/merge/resources/calendar/types/account_details_and_actions.py +++ b/src/merge/resources/calendar/types/account_details_and_actions.py @@ -42,7 +42,7 @@ class AccountDetailsAndActions(UncheckedBaseModel): integration: typing.Optional[AccountDetailsAndActionsIntegration] = None account_type: str completed_at: dt.datetime - integration_specific_fields: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None + integration_specific_fields: typing.Optional[typing.Dict[str, typing.Any]] = None if IS_PYDANTIC_V2: model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2 diff --git a/src/merge/resources/calendar/types/account_details_and_actions_status_enum.py b/src/merge/resources/calendar/types/account_details_and_actions_status_enum.py index 0701a829..323189b4 100644 --- a/src/merge/resources/calendar/types/account_details_and_actions_status_enum.py +++ b/src/merge/resources/calendar/types/account_details_and_actions_status_enum.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ....core import enum + T_Result = typing.TypeVar("T_Result") -class AccountDetailsAndActionsStatusEnum(str, enum.Enum): +class AccountDetailsAndActionsStatusEnum(enum.StrEnum): COMPLETE = "COMPLETE" INCOMPLETE = "INCOMPLETE" RELINK_NEEDED = "RELINK_NEEDED" diff --git a/src/merge/resources/calendar/types/account_integration.py b/src/merge/resources/calendar/types/account_integration.py index ef8b260d..7bc872ca 100644 --- a/src/merge/resources/calendar/types/account_integration.py +++ b/src/merge/resources/calendar/types/account_integration.py @@ -40,9 +40,7 @@ class AccountIntegration(UncheckedBaseModel): """ slug: typing.Optional[str] = None - api_endpoints_to_documentation_urls: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = ( - pydantic.Field(default=None) - ) + api_endpoints_to_documentation_urls: typing.Optional[typing.Dict[str, typing.Any]] = pydantic.Field(default=None) """ Mapping of API endpoints to documentation urls for support. Example: {'GET': [['/common-model-scopes', 'https://docs.merge.dev/accounting/common-model-scopes/#common_model_scopes_retrieve'],['/common-model-actions', 'https://docs.merge.dev/accounting/common-model-actions/#common_model_actions_retrieve']], 'POST': []} """ @@ -52,7 +50,7 @@ class AccountIntegration(UncheckedBaseModel): Setup guide URL for third party webhook creation. Exposed in Merge Docs. """ - category_beta_status: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = pydantic.Field(default=None) + category_beta_status: typing.Optional[typing.Dict[str, typing.Any]] = pydantic.Field(default=None) """ Category or categories this integration is in beta status for. """ diff --git a/src/merge/resources/calendar/types/advanced_metadata.py b/src/merge/resources/calendar/types/advanced_metadata.py index 60b5d072..aef64bb3 100644 --- a/src/merge/resources/calendar/types/advanced_metadata.py +++ b/src/merge/resources/calendar/types/advanced_metadata.py @@ -13,7 +13,7 @@ class AdvancedMetadata(UncheckedBaseModel): description: typing.Optional[str] = None is_required: typing.Optional[bool] = None is_custom: typing.Optional[bool] = None - field_choices: typing.Optional[typing.List[typing.Optional[typing.Any]]] = None + field_choices: typing.Optional[typing.List[typing.Any]] = None if IS_PYDANTIC_V2: model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2 diff --git a/src/merge/resources/calendar/types/availability_status_enum.py b/src/merge/resources/calendar/types/availability_status_enum.py index a9fa8980..21a409d8 100644 --- a/src/merge/resources/calendar/types/availability_status_enum.py +++ b/src/merge/resources/calendar/types/availability_status_enum.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ....core import enum + T_Result = typing.TypeVar("T_Result") -class AvailabilityStatusEnum(str, enum.Enum): +class AvailabilityStatusEnum(enum.StrEnum): FREE = "FREE" BUSY = "BUSY" OUT_OF_OFFICE = "OUT_OF_OFFICE" diff --git a/src/merge/resources/calendar/types/calendar_field_mappings.py b/src/merge/resources/calendar/types/calendar_field_mappings.py index f2fef070..37c701c4 100644 --- a/src/merge/resources/calendar/types/calendar_field_mappings.py +++ b/src/merge/resources/calendar/types/calendar_field_mappings.py @@ -8,8 +8,8 @@ class CalendarFieldMappings(UncheckedBaseModel): - organization_defined_targets: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None - linked_account_defined_targets: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None + organization_defined_targets: typing.Optional[typing.Dict[str, typing.Any]] = None + linked_account_defined_targets: typing.Optional[typing.Dict[str, typing.Any]] = None if IS_PYDANTIC_V2: model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2 diff --git a/src/merge/resources/calendar/types/calendar_type_enum.py b/src/merge/resources/calendar/types/calendar_type_enum.py index 2ffef4f6..84339657 100644 --- a/src/merge/resources/calendar/types/calendar_type_enum.py +++ b/src/merge/resources/calendar/types/calendar_type_enum.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ....core import enum + T_Result = typing.TypeVar("T_Result") -class CalendarTypeEnum(str, enum.Enum): +class CalendarTypeEnum(enum.StrEnum): PERSONAL = "PERSONAL" SHARED = "SHARED" diff --git a/src/merge/resources/calendar/types/categories_enum.py b/src/merge/resources/calendar/types/categories_enum.py index b6575458..f92febf4 100644 --- a/src/merge/resources/calendar/types/categories_enum.py +++ b/src/merge/resources/calendar/types/categories_enum.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ....core import enum + T_Result = typing.TypeVar("T_Result") -class CategoriesEnum(str, enum.Enum): +class CategoriesEnum(enum.StrEnum): HRIS = "hris" ATS = "ats" ACCOUNTING = "accounting" diff --git a/src/merge/resources/calendar/types/category_enum.py b/src/merge/resources/calendar/types/category_enum.py index 4ee2f4e4..ac0be82b 100644 --- a/src/merge/resources/calendar/types/category_enum.py +++ b/src/merge/resources/calendar/types/category_enum.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ....core import enum + T_Result = typing.TypeVar("T_Result") -class CategoryEnum(str, enum.Enum): +class CategoryEnum(enum.StrEnum): HRIS = "hris" ATS = "ats" ACCOUNTING = "accounting" diff --git a/src/merge/resources/calendar/types/data_passthrough_request.py b/src/merge/resources/calendar/types/data_passthrough_request.py index 5a60bfb6..d8d42b8d 100644 --- a/src/merge/resources/calendar/types/data_passthrough_request.py +++ b/src/merge/resources/calendar/types/data_passthrough_request.py @@ -41,7 +41,7 @@ class DataPassthroughRequest(UncheckedBaseModel): Pass an array of `MultipartFormField` objects in here instead of using the `data` param if `request_format` is set to `MULTIPART`. """ - headers: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = pydantic.Field(default=None) + headers: typing.Optional[typing.Dict[str, typing.Any]] = pydantic.Field(default=None) """ The headers to use for the request (Merge will handle the account's authorization headers). `Content-Type` header is required for passthrough. Choose content type corresponding to expected format of receiving server. """ diff --git a/src/merge/resources/calendar/types/effective_role_enum.py b/src/merge/resources/calendar/types/effective_role_enum.py index c0f90e36..c71d0303 100644 --- a/src/merge/resources/calendar/types/effective_role_enum.py +++ b/src/merge/resources/calendar/types/effective_role_enum.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ....core import enum + T_Result = typing.TypeVar("T_Result") -class EffectiveRoleEnum(str, enum.Enum): +class EffectiveRoleEnum(enum.StrEnum): OWNER = "OWNER" FULL_READ = "FULL_READ" TITLE_READ = "TITLE_READ" diff --git a/src/merge/resources/calendar/types/enabled_actions_enum.py b/src/merge/resources/calendar/types/enabled_actions_enum.py index cb19286a..ded7aa80 100644 --- a/src/merge/resources/calendar/types/enabled_actions_enum.py +++ b/src/merge/resources/calendar/types/enabled_actions_enum.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ....core import enum + T_Result = typing.TypeVar("T_Result") -class EnabledActionsEnum(str, enum.Enum): +class EnabledActionsEnum(enum.StrEnum): READ = "READ" WRITE = "WRITE" diff --git a/src/merge/resources/calendar/types/encoding_enum.py b/src/merge/resources/calendar/types/encoding_enum.py index 7d4b8977..27686241 100644 --- a/src/merge/resources/calendar/types/encoding_enum.py +++ b/src/merge/resources/calendar/types/encoding_enum.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ....core import enum + T_Result = typing.TypeVar("T_Result") -class EncodingEnum(str, enum.Enum): +class EncodingEnum(enum.StrEnum): RAW = "RAW" BASE_64 = "BASE64" GZIP_BASE_64 = "GZIP_BASE64" diff --git a/src/merge/resources/calendar/types/event_field_mappings.py b/src/merge/resources/calendar/types/event_field_mappings.py index c267cb1d..24e45520 100644 --- a/src/merge/resources/calendar/types/event_field_mappings.py +++ b/src/merge/resources/calendar/types/event_field_mappings.py @@ -8,8 +8,8 @@ class EventFieldMappings(UncheckedBaseModel): - organization_defined_targets: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None - linked_account_defined_targets: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None + organization_defined_targets: typing.Optional[typing.Dict[str, typing.Any]] = None + linked_account_defined_targets: typing.Optional[typing.Dict[str, typing.Any]] = None if IS_PYDANTIC_V2: model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2 diff --git a/src/merge/resources/calendar/types/event_type_enum.py b/src/merge/resources/calendar/types/event_type_enum.py index a04b9681..42ce9abb 100644 --- a/src/merge/resources/calendar/types/event_type_enum.py +++ b/src/merge/resources/calendar/types/event_type_enum.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ....core import enum + T_Result = typing.TypeVar("T_Result") -class EventTypeEnum(str, enum.Enum): +class EventTypeEnum(enum.StrEnum): CREATED_REMOTE_PRODUCTION_API_KEY = "CREATED_REMOTE_PRODUCTION_API_KEY" DELETED_REMOTE_PRODUCTION_API_KEY = "DELETED_REMOTE_PRODUCTION_API_KEY" CREATED_TEST_API_KEY = "CREATED_TEST_API_KEY" diff --git a/src/merge/resources/calendar/types/external_target_field_api_response.py b/src/merge/resources/calendar/types/external_target_field_api_response.py index 1ec7a83f..6b9965fa 100644 --- a/src/merge/resources/calendar/types/external_target_field_api_response.py +++ b/src/merge/resources/calendar/types/external_target_field_api_response.py @@ -3,17 +3,37 @@ import typing import pydantic +import typing_extensions from ....core.pydantic_utilities import IS_PYDANTIC_V2 +from ....core.serialization import FieldMetadata from ....core.unchecked_base_model import UncheckedBaseModel from .external_target_field_api import ExternalTargetFieldApi class ExternalTargetFieldApiResponse(UncheckedBaseModel): - calendar: typing.Optional[typing.List[ExternalTargetFieldApi]] = pydantic.Field(alias="Calendar", default=None) - user: typing.Optional[typing.List[ExternalTargetFieldApi]] = pydantic.Field(alias="User", default=None) - group: typing.Optional[typing.List[ExternalTargetFieldApi]] = pydantic.Field(alias="Group", default=None) - series: typing.Optional[typing.List[ExternalTargetFieldApi]] = pydantic.Field(alias="Series", default=None) - event: typing.Optional[typing.List[ExternalTargetFieldApi]] = pydantic.Field(alias="Event", default=None) + calendar: typing_extensions.Annotated[ + typing.Optional[typing.List[ExternalTargetFieldApi]], + FieldMetadata(alias="Calendar"), + pydantic.Field(alias="Calendar"), + ] = None + user: typing_extensions.Annotated[ + typing.Optional[typing.List[ExternalTargetFieldApi]], FieldMetadata(alias="User"), pydantic.Field(alias="User") + ] = None + group: typing_extensions.Annotated[ + typing.Optional[typing.List[ExternalTargetFieldApi]], + FieldMetadata(alias="Group"), + pydantic.Field(alias="Group"), + ] = None + series: typing_extensions.Annotated[ + typing.Optional[typing.List[ExternalTargetFieldApi]], + FieldMetadata(alias="Series"), + pydantic.Field(alias="Series"), + ] = None + event: typing_extensions.Annotated[ + typing.Optional[typing.List[ExternalTargetFieldApi]], + FieldMetadata(alias="Event"), + pydantic.Field(alias="Event"), + ] = None if IS_PYDANTIC_V2: model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2 diff --git a/src/merge/resources/calendar/types/field_mapping_api_instance_remote_field.py b/src/merge/resources/calendar/types/field_mapping_api_instance_remote_field.py index 578a2b10..ccd1f990 100644 --- a/src/merge/resources/calendar/types/field_mapping_api_instance_remote_field.py +++ b/src/merge/resources/calendar/types/field_mapping_api_instance_remote_field.py @@ -3,7 +3,9 @@ import typing import pydantic +import typing_extensions from ....core.pydantic_utilities import IS_PYDANTIC_V2 +from ....core.serialization import FieldMetadata from ....core.unchecked_base_model import UncheckedBaseModel from .field_mapping_api_instance_remote_field_remote_endpoint_info import ( FieldMappingApiInstanceRemoteFieldRemoteEndpointInfo, @@ -12,9 +14,9 @@ class FieldMappingApiInstanceRemoteField(UncheckedBaseModel): remote_key_name: typing.Optional[str] = None - schema_: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = pydantic.Field( - alias="schema", default=None - ) + schema_: typing_extensions.Annotated[ + typing.Optional[typing.Dict[str, typing.Any]], FieldMetadata(alias="schema"), pydantic.Field(alias="schema") + ] = None remote_endpoint_info: FieldMappingApiInstanceRemoteFieldRemoteEndpointInfo if IS_PYDANTIC_V2: diff --git a/src/merge/resources/calendar/types/field_mapping_api_instance_response.py b/src/merge/resources/calendar/types/field_mapping_api_instance_response.py index 7c251f62..c93db208 100644 --- a/src/merge/resources/calendar/types/field_mapping_api_instance_response.py +++ b/src/merge/resources/calendar/types/field_mapping_api_instance_response.py @@ -3,17 +3,37 @@ import typing import pydantic +import typing_extensions from ....core.pydantic_utilities import IS_PYDANTIC_V2 +from ....core.serialization import FieldMetadata from ....core.unchecked_base_model import UncheckedBaseModel from .field_mapping_api_instance import FieldMappingApiInstance class FieldMappingApiInstanceResponse(UncheckedBaseModel): - calendar: typing.Optional[typing.List[FieldMappingApiInstance]] = pydantic.Field(alias="Calendar", default=None) - user: typing.Optional[typing.List[FieldMappingApiInstance]] = pydantic.Field(alias="User", default=None) - group: typing.Optional[typing.List[FieldMappingApiInstance]] = pydantic.Field(alias="Group", default=None) - series: typing.Optional[typing.List[FieldMappingApiInstance]] = pydantic.Field(alias="Series", default=None) - event: typing.Optional[typing.List[FieldMappingApiInstance]] = pydantic.Field(alias="Event", default=None) + calendar: typing_extensions.Annotated[ + typing.Optional[typing.List[FieldMappingApiInstance]], + FieldMetadata(alias="Calendar"), + pydantic.Field(alias="Calendar"), + ] = None + user: typing_extensions.Annotated[ + typing.Optional[typing.List[FieldMappingApiInstance]], FieldMetadata(alias="User"), pydantic.Field(alias="User") + ] = None + group: typing_extensions.Annotated[ + typing.Optional[typing.List[FieldMappingApiInstance]], + FieldMetadata(alias="Group"), + pydantic.Field(alias="Group"), + ] = None + series: typing_extensions.Annotated[ + typing.Optional[typing.List[FieldMappingApiInstance]], + FieldMetadata(alias="Series"), + pydantic.Field(alias="Series"), + ] = None + event: typing_extensions.Annotated[ + typing.Optional[typing.List[FieldMappingApiInstance]], + FieldMetadata(alias="Event"), + pydantic.Field(alias="Event"), + ] = None if IS_PYDANTIC_V2: model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2 diff --git a/src/merge/resources/calendar/types/field_permission_deserializer.py b/src/merge/resources/calendar/types/field_permission_deserializer.py index 1d71ae04..407ed547 100644 --- a/src/merge/resources/calendar/types/field_permission_deserializer.py +++ b/src/merge/resources/calendar/types/field_permission_deserializer.py @@ -8,8 +8,8 @@ class FieldPermissionDeserializer(UncheckedBaseModel): - enabled_fields: typing.Optional[typing.List[typing.Optional[typing.Any]]] = None - disabled_fields: typing.Optional[typing.List[typing.Optional[typing.Any]]] = None + enabled_fields: typing.Optional[typing.List[typing.Any]] = None + disabled_fields: typing.Optional[typing.List[typing.Any]] = None if IS_PYDANTIC_V2: model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2 diff --git a/src/merge/resources/calendar/types/field_permission_deserializer_request.py b/src/merge/resources/calendar/types/field_permission_deserializer_request.py index a4113b46..6680c7d2 100644 --- a/src/merge/resources/calendar/types/field_permission_deserializer_request.py +++ b/src/merge/resources/calendar/types/field_permission_deserializer_request.py @@ -8,8 +8,8 @@ class FieldPermissionDeserializerRequest(UncheckedBaseModel): - enabled_fields: typing.Optional[typing.List[typing.Optional[typing.Any]]] = None - disabled_fields: typing.Optional[typing.List[typing.Optional[typing.Any]]] = None + enabled_fields: typing.Optional[typing.List[typing.Any]] = None + disabled_fields: typing.Optional[typing.List[typing.Any]] = None if IS_PYDANTIC_V2: model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2 diff --git a/src/merge/resources/calendar/types/group_field_mappings.py b/src/merge/resources/calendar/types/group_field_mappings.py index 3be990d2..eaef7341 100644 --- a/src/merge/resources/calendar/types/group_field_mappings.py +++ b/src/merge/resources/calendar/types/group_field_mappings.py @@ -8,8 +8,8 @@ class GroupFieldMappings(UncheckedBaseModel): - organization_defined_targets: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None - linked_account_defined_targets: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None + organization_defined_targets: typing.Optional[typing.Dict[str, typing.Any]] = None + linked_account_defined_targets: typing.Optional[typing.Dict[str, typing.Any]] = None if IS_PYDANTIC_V2: model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2 diff --git a/src/merge/resources/calendar/types/issue.py b/src/merge/resources/calendar/types/issue.py index 8f1027ca..ab038c54 100644 --- a/src/merge/resources/calendar/types/issue.py +++ b/src/merge/resources/calendar/types/issue.py @@ -17,7 +17,7 @@ class Issue(UncheckedBaseModel): """ error_description: str - end_user: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None + end_user: typing.Optional[typing.Dict[str, typing.Any]] = None first_incident_time: typing.Optional[dt.datetime] = None last_incident_time: typing.Optional[dt.datetime] = None is_muted: typing.Optional[bool] = None diff --git a/src/merge/resources/calendar/types/issue_status_enum.py b/src/merge/resources/calendar/types/issue_status_enum.py index d75e26e2..932ae51c 100644 --- a/src/merge/resources/calendar/types/issue_status_enum.py +++ b/src/merge/resources/calendar/types/issue_status_enum.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ....core import enum + T_Result = typing.TypeVar("T_Result") -class IssueStatusEnum(str, enum.Enum): +class IssueStatusEnum(enum.StrEnum): ONGOING = "ONGOING" RESOLVED = "RESOLVED" diff --git a/src/merge/resources/calendar/types/language_enum.py b/src/merge/resources/calendar/types/language_enum.py index 19f87fe0..16d6cd0e 100644 --- a/src/merge/resources/calendar/types/language_enum.py +++ b/src/merge/resources/calendar/types/language_enum.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ....core import enum + T_Result = typing.TypeVar("T_Result") -class LanguageEnum(str, enum.Enum): +class LanguageEnum(enum.StrEnum): EN = "en" DE = "de" diff --git a/src/merge/resources/calendar/types/last_sync_result_enum.py b/src/merge/resources/calendar/types/last_sync_result_enum.py index 52ecd845..5cb86bc3 100644 --- a/src/merge/resources/calendar/types/last_sync_result_enum.py +++ b/src/merge/resources/calendar/types/last_sync_result_enum.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ....core import enum + T_Result = typing.TypeVar("T_Result") -class LastSyncResultEnum(str, enum.Enum): +class LastSyncResultEnum(enum.StrEnum): SYNCING = "SYNCING" DONE = "DONE" FAILED = "FAILED" diff --git a/src/merge/resources/calendar/types/location_type_enum.py b/src/merge/resources/calendar/types/location_type_enum.py index c762b0b7..de160978 100644 --- a/src/merge/resources/calendar/types/location_type_enum.py +++ b/src/merge/resources/calendar/types/location_type_enum.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ....core import enum + T_Result = typing.TypeVar("T_Result") -class LocationTypeEnum(str, enum.Enum): +class LocationTypeEnum(enum.StrEnum): PHYSICAL = "PHYSICAL" VIRTUAL = "VIRTUAL" UNKNOWN = "UNKNOWN" diff --git a/src/merge/resources/calendar/types/method_enum.py b/src/merge/resources/calendar/types/method_enum.py index 73d2556f..45c9f89e 100644 --- a/src/merge/resources/calendar/types/method_enum.py +++ b/src/merge/resources/calendar/types/method_enum.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ....core import enum + T_Result = typing.TypeVar("T_Result") -class MethodEnum(str, enum.Enum): +class MethodEnum(enum.StrEnum): GET = "GET" OPTIONS = "OPTIONS" HEAD = "HEAD" diff --git a/src/merge/resources/calendar/types/permission_field_mappings.py b/src/merge/resources/calendar/types/permission_field_mappings.py index 9c2804c2..0672b491 100644 --- a/src/merge/resources/calendar/types/permission_field_mappings.py +++ b/src/merge/resources/calendar/types/permission_field_mappings.py @@ -8,8 +8,8 @@ class PermissionFieldMappings(UncheckedBaseModel): - organization_defined_targets: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None - linked_account_defined_targets: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None + organization_defined_targets: typing.Optional[typing.Dict[str, typing.Any]] = None + linked_account_defined_targets: typing.Optional[typing.Dict[str, typing.Any]] = None if IS_PYDANTIC_V2: model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2 diff --git a/src/merge/resources/calendar/types/permission_type_enum.py b/src/merge/resources/calendar/types/permission_type_enum.py index 26e823f5..2247aba0 100644 --- a/src/merge/resources/calendar/types/permission_type_enum.py +++ b/src/merge/resources/calendar/types/permission_type_enum.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ....core import enum + T_Result = typing.TypeVar("T_Result") -class PermissionTypeEnum(str, enum.Enum): +class PermissionTypeEnum(enum.StrEnum): USER = "USER" GROUP = "GROUP" COMPANY = "COMPANY" diff --git a/src/merge/resources/calendar/types/remote_data.py b/src/merge/resources/calendar/types/remote_data.py index f34bec80..2026f05a 100644 --- a/src/merge/resources/calendar/types/remote_data.py +++ b/src/merge/resources/calendar/types/remote_data.py @@ -22,7 +22,7 @@ class RemoteData(UncheckedBaseModel): The third-party API path that is being called. """ - data: typing.Optional[typing.Optional[typing.Any]] = pydantic.Field(default=None) + data: typing.Optional[typing.Any] = pydantic.Field(default=None) """ The data returned from the third-party for this object in its original, unnormalized format. """ diff --git a/src/merge/resources/calendar/types/remote_endpoint_info.py b/src/merge/resources/calendar/types/remote_endpoint_info.py index 07ceff6a..ffa70b94 100644 --- a/src/merge/resources/calendar/types/remote_endpoint_info.py +++ b/src/merge/resources/calendar/types/remote_endpoint_info.py @@ -10,7 +10,7 @@ class RemoteEndpointInfo(UncheckedBaseModel): method: str url_path: str - field_traversal_path: typing.List[typing.Optional[typing.Any]] + field_traversal_path: typing.List[typing.Any] if IS_PYDANTIC_V2: model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2 diff --git a/src/merge/resources/calendar/types/remote_field_api.py b/src/merge/resources/calendar/types/remote_field_api.py index 0756bfc3..5f2c2ab1 100644 --- a/src/merge/resources/calendar/types/remote_field_api.py +++ b/src/merge/resources/calendar/types/remote_field_api.py @@ -3,7 +3,9 @@ import typing import pydantic +import typing_extensions from ....core.pydantic_utilities import IS_PYDANTIC_V2 +from ....core.serialization import FieldMetadata from ....core.unchecked_base_model import UncheckedBaseModel from .remote_endpoint_info import RemoteEndpointInfo from .remote_field_api_advanced_metadata import RemoteFieldApiAdvancedMetadata @@ -11,10 +13,12 @@ class RemoteFieldApi(UncheckedBaseModel): - schema_: typing.Dict[str, typing.Optional[typing.Any]] = pydantic.Field(alias="schema") + schema_: typing_extensions.Annotated[ + typing.Dict[str, typing.Any], FieldMetadata(alias="schema"), pydantic.Field(alias="schema") + ] remote_key_name: str remote_endpoint_info: RemoteEndpointInfo - example_values: typing.Optional[typing.List[typing.Optional[typing.Any]]] = None + example_values: typing.Optional[typing.List[typing.Any]] = None advanced_metadata: typing.Optional[RemoteFieldApiAdvancedMetadata] = None coverage: typing.Optional[RemoteFieldApiCoverage] = None diff --git a/src/merge/resources/calendar/types/remote_field_api_response.py b/src/merge/resources/calendar/types/remote_field_api_response.py index 654ea3bf..02acdf17 100644 --- a/src/merge/resources/calendar/types/remote_field_api_response.py +++ b/src/merge/resources/calendar/types/remote_field_api_response.py @@ -3,17 +3,29 @@ import typing import pydantic +import typing_extensions from ....core.pydantic_utilities import IS_PYDANTIC_V2 +from ....core.serialization import FieldMetadata from ....core.unchecked_base_model import UncheckedBaseModel from .remote_field_api import RemoteFieldApi class RemoteFieldApiResponse(UncheckedBaseModel): - calendar: typing.Optional[typing.List[RemoteFieldApi]] = pydantic.Field(alias="Calendar", default=None) - user: typing.Optional[typing.List[RemoteFieldApi]] = pydantic.Field(alias="User", default=None) - group: typing.Optional[typing.List[RemoteFieldApi]] = pydantic.Field(alias="Group", default=None) - series: typing.Optional[typing.List[RemoteFieldApi]] = pydantic.Field(alias="Series", default=None) - event: typing.Optional[typing.List[RemoteFieldApi]] = pydantic.Field(alias="Event", default=None) + calendar: typing_extensions.Annotated[ + typing.Optional[typing.List[RemoteFieldApi]], FieldMetadata(alias="Calendar"), pydantic.Field(alias="Calendar") + ] = None + user: typing_extensions.Annotated[ + typing.Optional[typing.List[RemoteFieldApi]], FieldMetadata(alias="User"), pydantic.Field(alias="User") + ] = None + group: typing_extensions.Annotated[ + typing.Optional[typing.List[RemoteFieldApi]], FieldMetadata(alias="Group"), pydantic.Field(alias="Group") + ] = None + series: typing_extensions.Annotated[ + typing.Optional[typing.List[RemoteFieldApi]], FieldMetadata(alias="Series"), pydantic.Field(alias="Series") + ] = None + event: typing_extensions.Annotated[ + typing.Optional[typing.List[RemoteFieldApi]], FieldMetadata(alias="Event"), pydantic.Field(alias="Event") + ] = None if IS_PYDANTIC_V2: model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2 diff --git a/src/merge/resources/calendar/types/remote_response.py b/src/merge/resources/calendar/types/remote_response.py index db01131f..8bc6f905 100644 --- a/src/merge/resources/calendar/types/remote_response.py +++ b/src/merge/resources/calendar/types/remote_response.py @@ -21,10 +21,10 @@ class RemoteResponse(UncheckedBaseModel): method: str path: str status: int - response: typing.Optional[typing.Any] = None - response_headers: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None + response: typing.Any + response_headers: typing.Optional[typing.Dict[str, typing.Any]] = None response_type: typing.Optional[RemoteResponseResponseType] = None - headers: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None + headers: typing.Optional[typing.Dict[str, typing.Any]] = None if IS_PYDANTIC_V2: model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2 diff --git a/src/merge/resources/calendar/types/request_format_enum.py b/src/merge/resources/calendar/types/request_format_enum.py index 70ecd9bb..711b2df8 100644 --- a/src/merge/resources/calendar/types/request_format_enum.py +++ b/src/merge/resources/calendar/types/request_format_enum.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ....core import enum + T_Result = typing.TypeVar("T_Result") -class RequestFormatEnum(str, enum.Enum): +class RequestFormatEnum(enum.StrEnum): JSON = "JSON" XML = "XML" MULTIPART = "MULTIPART" diff --git a/src/merge/resources/calendar/types/response_type_enum.py b/src/merge/resources/calendar/types/response_type_enum.py index 23b6bb5b..ce3f3d04 100644 --- a/src/merge/resources/calendar/types/response_type_enum.py +++ b/src/merge/resources/calendar/types/response_type_enum.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ....core import enum + T_Result = typing.TypeVar("T_Result") -class ResponseTypeEnum(str, enum.Enum): +class ResponseTypeEnum(enum.StrEnum): JSON = "JSON" BASE_64_GZIP = "BASE64_GZIP" diff --git a/src/merge/resources/calendar/types/role_enum.py b/src/merge/resources/calendar/types/role_enum.py index c97de31f..752d2454 100644 --- a/src/merge/resources/calendar/types/role_enum.py +++ b/src/merge/resources/calendar/types/role_enum.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ....core import enum + T_Result = typing.TypeVar("T_Result") -class RoleEnum(str, enum.Enum): +class RoleEnum(enum.StrEnum): ADMIN = "ADMIN" DEVELOPER = "DEVELOPER" MEMBER = "MEMBER" diff --git a/src/merge/resources/calendar/types/roles_enum.py b/src/merge/resources/calendar/types/roles_enum.py index b746d32d..a1df27d8 100644 --- a/src/merge/resources/calendar/types/roles_enum.py +++ b/src/merge/resources/calendar/types/roles_enum.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ....core import enum + T_Result = typing.TypeVar("T_Result") -class RolesEnum(str, enum.Enum): +class RolesEnum(enum.StrEnum): OWNER = "OWNER" FULL_READ = "FULL_READ" TITLE_READ = "TITLE_READ" diff --git a/src/merge/resources/calendar/types/rsvp_enum.py b/src/merge/resources/calendar/types/rsvp_enum.py index 4720d3bd..9e5b2e57 100644 --- a/src/merge/resources/calendar/types/rsvp_enum.py +++ b/src/merge/resources/calendar/types/rsvp_enum.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ....core import enum + T_Result = typing.TypeVar("T_Result") -class RsvpEnum(str, enum.Enum): +class RsvpEnum(enum.StrEnum): YES = "YES" NO = "NO" MAYBE = "MAYBE" diff --git a/src/merge/resources/calendar/types/selective_sync_configurations_usage_enum.py b/src/merge/resources/calendar/types/selective_sync_configurations_usage_enum.py index 7b486b59..953775e9 100644 --- a/src/merge/resources/calendar/types/selective_sync_configurations_usage_enum.py +++ b/src/merge/resources/calendar/types/selective_sync_configurations_usage_enum.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ....core import enum + T_Result = typing.TypeVar("T_Result") -class SelectiveSyncConfigurationsUsageEnum(str, enum.Enum): +class SelectiveSyncConfigurationsUsageEnum(enum.StrEnum): IN_NEXT_SYNC = "IN_NEXT_SYNC" IN_LAST_SYNC = "IN_LAST_SYNC" diff --git a/src/merge/resources/calendar/types/series_field_mappings.py b/src/merge/resources/calendar/types/series_field_mappings.py index cefa8bd8..b04051cd 100644 --- a/src/merge/resources/calendar/types/series_field_mappings.py +++ b/src/merge/resources/calendar/types/series_field_mappings.py @@ -8,8 +8,8 @@ class SeriesFieldMappings(UncheckedBaseModel): - organization_defined_targets: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None - linked_account_defined_targets: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None + organization_defined_targets: typing.Optional[typing.Dict[str, typing.Any]] = None + linked_account_defined_targets: typing.Optional[typing.Dict[str, typing.Any]] = None if IS_PYDANTIC_V2: model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2 diff --git a/src/merge/resources/calendar/types/status_fd_5_enum.py b/src/merge/resources/calendar/types/status_fd_5_enum.py index 3bf97afd..52c212e4 100644 --- a/src/merge/resources/calendar/types/status_fd_5_enum.py +++ b/src/merge/resources/calendar/types/status_fd_5_enum.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ....core import enum + T_Result = typing.TypeVar("T_Result") -class StatusFd5Enum(str, enum.Enum): +class StatusFd5Enum(enum.StrEnum): SYNCING = "SYNCING" DONE = "DONE" FAILED = "FAILED" diff --git a/src/merge/resources/calendar/types/user_field_mappings.py b/src/merge/resources/calendar/types/user_field_mappings.py index 374935d7..6a27272a 100644 --- a/src/merge/resources/calendar/types/user_field_mappings.py +++ b/src/merge/resources/calendar/types/user_field_mappings.py @@ -8,8 +8,8 @@ class UserFieldMappings(UncheckedBaseModel): - organization_defined_targets: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None - linked_account_defined_targets: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None + organization_defined_targets: typing.Optional[typing.Dict[str, typing.Any]] = None + linked_account_defined_targets: typing.Optional[typing.Dict[str, typing.Any]] = None if IS_PYDANTIC_V2: model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2 diff --git a/src/merge/resources/chat/__init__.py b/src/merge/resources/chat/__init__.py index d4abb34d..5233cf52 100644 --- a/src/merge/resources/chat/__init__.py +++ b/src/merge/resources/chat/__init__.py @@ -276,8 +276,10 @@ def __getattr__(attr_name: str) -> typing.Any: raise AttributeError(f"No {attr_name} found in _dynamic_imports for module name -> {__name__}") try: module = import_module(module_name, __package__) - result = getattr(module, attr_name) - return result + if module_name == f".{attr_name}": + return module + else: + return getattr(module, attr_name) except ImportError as e: raise ImportError(f"Failed to import {attr_name} from {module_name}: {e}") from e except AttributeError as e: diff --git a/src/merge/resources/chat/resources/__init__.py b/src/merge/resources/chat/resources/__init__.py index f6813ae8..6e20dd4e 100644 --- a/src/merge/resources/chat/resources/__init__.py +++ b/src/merge/resources/chat/resources/__init__.py @@ -44,27 +44,27 @@ "LinkedAccountsListRequestCategory": ".linked_accounts", "MessagesListRequestOrderBy": ".messages", "MessagesRepliesListRequestOrderBy": ".messages", - "account_details": ".", - "account_token": ".", - "async_passthrough": ".", - "audit_trail": ".", - "available_actions": ".", - "conversations": ".", - "delete_account": ".", - "field_mapping": ".", - "force_resync": ".", - "generate_key": ".", - "groups": ".", - "issues": ".", - "link_token": ".", - "linked_accounts": ".", - "messages": ".", - "passthrough": ".", - "regenerate_key": ".", - "scopes": ".", - "sync_status": ".", - "users": ".", - "webhook_receivers": ".", + "account_details": ".account_details", + "account_token": ".account_token", + "async_passthrough": ".async_passthrough", + "audit_trail": ".audit_trail", + "available_actions": ".available_actions", + "conversations": ".conversations", + "delete_account": ".delete_account", + "field_mapping": ".field_mapping", + "force_resync": ".force_resync", + "generate_key": ".generate_key", + "groups": ".groups", + "issues": ".issues", + "link_token": ".link_token", + "linked_accounts": ".linked_accounts", + "messages": ".messages", + "passthrough": ".passthrough", + "regenerate_key": ".regenerate_key", + "scopes": ".scopes", + "sync_status": ".sync_status", + "users": ".users", + "webhook_receivers": ".webhook_receivers", } @@ -74,8 +74,10 @@ def __getattr__(attr_name: str) -> typing.Any: raise AttributeError(f"No {attr_name} found in _dynamic_imports for module name -> {__name__}") try: module = import_module(module_name, __package__) - result = getattr(module, attr_name) - return result + if module_name == f".{attr_name}": + return module + else: + return getattr(module, attr_name) except ImportError as e: raise ImportError(f"Failed to import {attr_name} from {module_name}: {e}") from e except AttributeError as e: diff --git a/src/merge/resources/chat/resources/account_details/raw_client.py b/src/merge/resources/chat/resources/account_details/raw_client.py index 4ea5e641..c68691bd 100644 --- a/src/merge/resources/chat/resources/account_details/raw_client.py +++ b/src/merge/resources/chat/resources/account_details/raw_client.py @@ -6,9 +6,11 @@ from .....core.api_error import ApiError from .....core.client_wrapper import AsyncClientWrapper, SyncClientWrapper from .....core.http_response import AsyncHttpResponse, HttpResponse +from .....core.parse_error import ParsingError from .....core.request_options import RequestOptions from .....core.unchecked_base_model import construct_type from ...types.account_details import AccountDetails +from pydantic import ValidationError class RawAccountDetailsClient: @@ -47,6 +49,10 @@ def retrieve(self, *, request_options: typing.Optional[RequestOptions] = None) - _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) @@ -88,4 +94,8 @@ async def retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) diff --git a/src/merge/resources/chat/resources/account_token/raw_client.py b/src/merge/resources/chat/resources/account_token/raw_client.py index 6f6a4c1b..784bd67e 100644 --- a/src/merge/resources/chat/resources/account_token/raw_client.py +++ b/src/merge/resources/chat/resources/account_token/raw_client.py @@ -7,10 +7,12 @@ from .....core.client_wrapper import AsyncClientWrapper, SyncClientWrapper from .....core.http_response import AsyncHttpResponse, HttpResponse from .....core.jsonable_encoder import jsonable_encoder +from .....core.parse_error import ParsingError from .....core.request_options import RequestOptions from .....core.unchecked_base_model import construct_type from ...types.account_token import AccountToken from ...types.regenerate_account_token import RegenerateAccountToken +from pydantic import ValidationError class RawAccountTokenClient: @@ -53,6 +55,10 @@ def retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) def regenerate_create( @@ -89,6 +95,10 @@ def regenerate_create( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) @@ -132,6 +142,10 @@ async def retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) async def regenerate_create( @@ -168,4 +182,8 @@ async def regenerate_create( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) diff --git a/src/merge/resources/chat/resources/async_passthrough/__init__.py b/src/merge/resources/chat/resources/async_passthrough/__init__.py index 375c7953..11090986 100644 --- a/src/merge/resources/chat/resources/async_passthrough/__init__.py +++ b/src/merge/resources/chat/resources/async_passthrough/__init__.py @@ -16,8 +16,10 @@ def __getattr__(attr_name: str) -> typing.Any: raise AttributeError(f"No {attr_name} found in _dynamic_imports for module name -> {__name__}") try: module = import_module(module_name, __package__) - result = getattr(module, attr_name) - return result + if module_name == f".{attr_name}": + return module + else: + return getattr(module, attr_name) except ImportError as e: raise ImportError(f"Failed to import {attr_name} from {module_name}: {e}") from e except AttributeError as e: diff --git a/src/merge/resources/chat/resources/async_passthrough/raw_client.py b/src/merge/resources/chat/resources/async_passthrough/raw_client.py index 37006b02..31d5f415 100644 --- a/src/merge/resources/chat/resources/async_passthrough/raw_client.py +++ b/src/merge/resources/chat/resources/async_passthrough/raw_client.py @@ -7,11 +7,13 @@ from .....core.client_wrapper import AsyncClientWrapper, SyncClientWrapper from .....core.http_response import AsyncHttpResponse, HttpResponse from .....core.jsonable_encoder import jsonable_encoder +from .....core.parse_error import ParsingError from .....core.request_options import RequestOptions from .....core.unchecked_base_model import construct_type from ...types.async_passthrough_reciept import AsyncPassthroughReciept from ...types.data_passthrough_request import DataPassthroughRequest from .types.async_passthrough_retrieve_response import AsyncPassthroughRetrieveResponse +from pydantic import ValidationError # this is used as the default value for optional parameters OMIT = typing.cast(typing.Any, ...) @@ -62,6 +64,10 @@ def create( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) def retrieve( @@ -100,6 +106,10 @@ def retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) @@ -148,6 +158,10 @@ async def create( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) async def retrieve( @@ -186,4 +200,8 @@ async def retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) diff --git a/src/merge/resources/chat/resources/async_passthrough/types/__init__.py b/src/merge/resources/chat/resources/async_passthrough/types/__init__.py index f6e9bec9..dc335400 100644 --- a/src/merge/resources/chat/resources/async_passthrough/types/__init__.py +++ b/src/merge/resources/chat/resources/async_passthrough/types/__init__.py @@ -16,8 +16,10 @@ def __getattr__(attr_name: str) -> typing.Any: raise AttributeError(f"No {attr_name} found in _dynamic_imports for module name -> {__name__}") try: module = import_module(module_name, __package__) - result = getattr(module, attr_name) - return result + if module_name == f".{attr_name}": + return module + else: + return getattr(module, attr_name) except ImportError as e: raise ImportError(f"Failed to import {attr_name} from {module_name}: {e}") from e except AttributeError as e: diff --git a/src/merge/resources/chat/resources/audit_trail/raw_client.py b/src/merge/resources/chat/resources/audit_trail/raw_client.py index 3e5f7e89..b65aa7dc 100644 --- a/src/merge/resources/chat/resources/audit_trail/raw_client.py +++ b/src/merge/resources/chat/resources/audit_trail/raw_client.py @@ -6,9 +6,11 @@ from .....core.api_error import ApiError from .....core.client_wrapper import AsyncClientWrapper, SyncClientWrapper from .....core.http_response import AsyncHttpResponse, HttpResponse +from .....core.parse_error import ParsingError from .....core.request_options import RequestOptions from .....core.unchecked_base_model import construct_type from ...types.paginated_audit_log_event_list import PaginatedAuditLogEventList +from pydantic import ValidationError class RawAuditTrailClient: @@ -83,6 +85,10 @@ def list( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) @@ -158,4 +164,8 @@ async def list( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) diff --git a/src/merge/resources/chat/resources/available_actions/raw_client.py b/src/merge/resources/chat/resources/available_actions/raw_client.py index ba47baf7..06b87c07 100644 --- a/src/merge/resources/chat/resources/available_actions/raw_client.py +++ b/src/merge/resources/chat/resources/available_actions/raw_client.py @@ -6,9 +6,11 @@ from .....core.api_error import ApiError from .....core.client_wrapper import AsyncClientWrapper, SyncClientWrapper from .....core.http_response import AsyncHttpResponse, HttpResponse +from .....core.parse_error import ParsingError from .....core.request_options import RequestOptions from .....core.unchecked_base_model import construct_type from ...types.available_actions import AvailableActions +from pydantic import ValidationError class RawAvailableActionsClient: @@ -47,6 +49,10 @@ def retrieve(self, *, request_options: typing.Optional[RequestOptions] = None) - _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) @@ -88,4 +94,8 @@ async def retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) diff --git a/src/merge/resources/chat/resources/conversations/__init__.py b/src/merge/resources/chat/resources/conversations/__init__.py index 8d7d65e4..c79f7259 100644 --- a/src/merge/resources/chat/resources/conversations/__init__.py +++ b/src/merge/resources/chat/resources/conversations/__init__.py @@ -16,8 +16,10 @@ def __getattr__(attr_name: str) -> typing.Any: raise AttributeError(f"No {attr_name} found in _dynamic_imports for module name -> {__name__}") try: module = import_module(module_name, __package__) - result = getattr(module, attr_name) - return result + if module_name == f".{attr_name}": + return module + else: + return getattr(module, attr_name) except ImportError as e: raise ImportError(f"Failed to import {attr_name} from {module_name}: {e}") from e except AttributeError as e: diff --git a/src/merge/resources/chat/resources/conversations/raw_client.py b/src/merge/resources/chat/resources/conversations/raw_client.py index 06539a5c..d0d4ad22 100644 --- a/src/merge/resources/chat/resources/conversations/raw_client.py +++ b/src/merge/resources/chat/resources/conversations/raw_client.py @@ -9,12 +9,14 @@ from .....core.datetime_utils import serialize_datetime from .....core.http_response import AsyncHttpResponse, HttpResponse from .....core.jsonable_encoder import jsonable_encoder +from .....core.parse_error import ParsingError from .....core.request_options import RequestOptions from .....core.unchecked_base_model import construct_type from ...types.conversation import Conversation from ...types.paginated_conversation_list import PaginatedConversationList from ...types.paginated_member_list import PaginatedMemberList from .types.conversations_members_list_request_expand_item import ConversationsMembersListRequestExpandItem +from pydantic import ValidationError class RawConversationsClient: @@ -116,6 +118,10 @@ def list( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) def members_list( @@ -193,6 +199,10 @@ def members_list( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) def retrieve( @@ -253,6 +263,10 @@ def retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) @@ -355,6 +369,10 @@ async def list( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) async def members_list( @@ -432,6 +450,10 @@ async def members_list( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) async def retrieve( @@ -492,4 +514,8 @@ async def retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) diff --git a/src/merge/resources/chat/resources/conversations/types/__init__.py b/src/merge/resources/chat/resources/conversations/types/__init__.py index 0975cccc..ba58ab50 100644 --- a/src/merge/resources/chat/resources/conversations/types/__init__.py +++ b/src/merge/resources/chat/resources/conversations/types/__init__.py @@ -18,8 +18,10 @@ def __getattr__(attr_name: str) -> typing.Any: raise AttributeError(f"No {attr_name} found in _dynamic_imports for module name -> {__name__}") try: module = import_module(module_name, __package__) - result = getattr(module, attr_name) - return result + if module_name == f".{attr_name}": + return module + else: + return getattr(module, attr_name) except ImportError as e: raise ImportError(f"Failed to import {attr_name} from {module_name}: {e}") from e except AttributeError as e: diff --git a/src/merge/resources/chat/resources/conversations/types/conversations_members_list_request_expand_item.py b/src/merge/resources/chat/resources/conversations/types/conversations_members_list_request_expand_item.py index 4f3e1c40..bc04d712 100644 --- a/src/merge/resources/chat/resources/conversations/types/conversations_members_list_request_expand_item.py +++ b/src/merge/resources/chat/resources/conversations/types/conversations_members_list_request_expand_item.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ......core import enum + T_Result = typing.TypeVar("T_Result") -class ConversationsMembersListRequestExpandItem(str, enum.Enum): +class ConversationsMembersListRequestExpandItem(enum.StrEnum): GROUP = "group" USER = "user" diff --git a/src/merge/resources/chat/resources/delete_account/raw_client.py b/src/merge/resources/chat/resources/delete_account/raw_client.py index 67cfa096..6c073957 100644 --- a/src/merge/resources/chat/resources/delete_account/raw_client.py +++ b/src/merge/resources/chat/resources/delete_account/raw_client.py @@ -6,7 +6,9 @@ from .....core.api_error import ApiError from .....core.client_wrapper import AsyncClientWrapper, SyncClientWrapper from .....core.http_response import AsyncHttpResponse, HttpResponse +from .....core.parse_error import ParsingError from .....core.request_options import RequestOptions +from pydantic import ValidationError class RawDeleteAccountClient: @@ -37,6 +39,10 @@ def delete(self, *, request_options: typing.Optional[RequestOptions] = None) -> _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) @@ -68,4 +74,8 @@ async def delete(self, *, request_options: typing.Optional[RequestOptions] = Non _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) diff --git a/src/merge/resources/chat/resources/field_mapping/client.py b/src/merge/resources/chat/resources/field_mapping/client.py index 4d2d1b3b..540e78fa 100644 --- a/src/merge/resources/chat/resources/field_mapping/client.py +++ b/src/merge/resources/chat/resources/field_mapping/client.py @@ -71,7 +71,7 @@ def field_mappings_retrieve( def field_mappings_create( self, *, - remote_field_traversal_path: typing.Sequence[typing.Optional[typing.Any]], + remote_field_traversal_path: typing.Sequence[typing.Any], remote_method: str, remote_url_path: str, common_model_name: str, @@ -90,7 +90,7 @@ def field_mappings_create( Parameters ---------- - remote_field_traversal_path : typing.Sequence[typing.Optional[typing.Any]] + remote_field_traversal_path : typing.Sequence[typing.Any] The field traversal path of the remote field listed when you hit the GET /remote-fields endpoint. remote_method : str @@ -206,7 +206,7 @@ def field_mappings_partial_update( field_mapping_id: str, *, remote_data_iteration_count: typing.Optional[int] = None, - remote_field_traversal_path: typing.Optional[typing.Sequence[typing.Optional[typing.Any]]] = OMIT, + remote_field_traversal_path: typing.Optional[typing.Sequence[typing.Any]] = OMIT, remote_method: typing.Optional[str] = OMIT, remote_url_path: typing.Optional[str] = OMIT, jmes_path: typing.Optional[str] = OMIT, @@ -223,7 +223,7 @@ def field_mappings_partial_update( remote_data_iteration_count : typing.Optional[int] Number of common model instances to iterate through when fetching remote data for field mappings. Defaults to 250 if not provided. - remote_field_traversal_path : typing.Optional[typing.Sequence[typing.Optional[typing.Any]]] + remote_field_traversal_path : typing.Optional[typing.Sequence[typing.Any]] The field traversal path of the remote field listed when you hit the GET /remote-fields endpoint. remote_method : typing.Optional[str] @@ -458,7 +458,7 @@ async def main() -> None: async def field_mappings_create( self, *, - remote_field_traversal_path: typing.Sequence[typing.Optional[typing.Any]], + remote_field_traversal_path: typing.Sequence[typing.Any], remote_method: str, remote_url_path: str, common_model_name: str, @@ -477,7 +477,7 @@ async def field_mappings_create( Parameters ---------- - remote_field_traversal_path : typing.Sequence[typing.Optional[typing.Any]] + remote_field_traversal_path : typing.Sequence[typing.Any] The field traversal path of the remote field listed when you hit the GET /remote-fields endpoint. remote_method : str @@ -609,7 +609,7 @@ async def field_mappings_partial_update( field_mapping_id: str, *, remote_data_iteration_count: typing.Optional[int] = None, - remote_field_traversal_path: typing.Optional[typing.Sequence[typing.Optional[typing.Any]]] = OMIT, + remote_field_traversal_path: typing.Optional[typing.Sequence[typing.Any]] = OMIT, remote_method: typing.Optional[str] = OMIT, remote_url_path: typing.Optional[str] = OMIT, jmes_path: typing.Optional[str] = OMIT, @@ -626,7 +626,7 @@ async def field_mappings_partial_update( remote_data_iteration_count : typing.Optional[int] Number of common model instances to iterate through when fetching remote data for field mappings. Defaults to 250 if not provided. - remote_field_traversal_path : typing.Optional[typing.Sequence[typing.Optional[typing.Any]]] + remote_field_traversal_path : typing.Optional[typing.Sequence[typing.Any]] The field traversal path of the remote field listed when you hit the GET /remote-fields endpoint. remote_method : typing.Optional[str] diff --git a/src/merge/resources/chat/resources/field_mapping/raw_client.py b/src/merge/resources/chat/resources/field_mapping/raw_client.py index 013b2577..8a51a044 100644 --- a/src/merge/resources/chat/resources/field_mapping/raw_client.py +++ b/src/merge/resources/chat/resources/field_mapping/raw_client.py @@ -7,12 +7,14 @@ from .....core.client_wrapper import AsyncClientWrapper, SyncClientWrapper from .....core.http_response import AsyncHttpResponse, HttpResponse from .....core.jsonable_encoder import jsonable_encoder +from .....core.parse_error import ParsingError from .....core.request_options import RequestOptions from .....core.unchecked_base_model import construct_type from ...types.external_target_field_api_response import ExternalTargetFieldApiResponse from ...types.field_mapping_api_instance_response import FieldMappingApiInstanceResponse from ...types.field_mapping_instance_response import FieldMappingInstanceResponse from ...types.remote_field_api_response import RemoteFieldApiResponse +from pydantic import ValidationError # this is used as the default value for optional parameters OMIT = typing.cast(typing.Any, ...) @@ -65,12 +67,16 @@ def field_mappings_retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) def field_mappings_create( self, *, - remote_field_traversal_path: typing.Sequence[typing.Optional[typing.Any]], + remote_field_traversal_path: typing.Sequence[typing.Any], remote_method: str, remote_url_path: str, common_model_name: str, @@ -89,7 +95,7 @@ def field_mappings_create( Parameters ---------- - remote_field_traversal_path : typing.Sequence[typing.Optional[typing.Any]] + remote_field_traversal_path : typing.Sequence[typing.Any] The field traversal path of the remote field listed when you hit the GET /remote-fields endpoint. remote_method : str @@ -171,6 +177,10 @@ def field_mappings_create( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) def field_mappings_destroy( @@ -209,6 +219,10 @@ def field_mappings_destroy( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) def field_mappings_partial_update( @@ -216,7 +230,7 @@ def field_mappings_partial_update( field_mapping_id: str, *, remote_data_iteration_count: typing.Optional[int] = None, - remote_field_traversal_path: typing.Optional[typing.Sequence[typing.Optional[typing.Any]]] = OMIT, + remote_field_traversal_path: typing.Optional[typing.Sequence[typing.Any]] = OMIT, remote_method: typing.Optional[str] = OMIT, remote_url_path: typing.Optional[str] = OMIT, jmes_path: typing.Optional[str] = OMIT, @@ -233,7 +247,7 @@ def field_mappings_partial_update( remote_data_iteration_count : typing.Optional[int] Number of common model instances to iterate through when fetching remote data for field mappings. Defaults to 250 if not provided. - remote_field_traversal_path : typing.Optional[typing.Sequence[typing.Optional[typing.Any]]] + remote_field_traversal_path : typing.Optional[typing.Sequence[typing.Any]] The field traversal path of the remote field listed when you hit the GET /remote-fields endpoint. remote_method : typing.Optional[str] @@ -288,6 +302,10 @@ def field_mappings_partial_update( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) def remote_fields_retrieve( @@ -338,6 +356,10 @@ def remote_fields_retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) def target_fields_retrieve( @@ -374,6 +396,10 @@ def target_fields_retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) def target_fields_create( @@ -433,6 +459,10 @@ def target_fields_create( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) @@ -483,12 +513,16 @@ async def field_mappings_retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) async def field_mappings_create( self, *, - remote_field_traversal_path: typing.Sequence[typing.Optional[typing.Any]], + remote_field_traversal_path: typing.Sequence[typing.Any], remote_method: str, remote_url_path: str, common_model_name: str, @@ -507,7 +541,7 @@ async def field_mappings_create( Parameters ---------- - remote_field_traversal_path : typing.Sequence[typing.Optional[typing.Any]] + remote_field_traversal_path : typing.Sequence[typing.Any] The field traversal path of the remote field listed when you hit the GET /remote-fields endpoint. remote_method : str @@ -589,6 +623,10 @@ async def field_mappings_create( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) async def field_mappings_destroy( @@ -627,6 +665,10 @@ async def field_mappings_destroy( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) async def field_mappings_partial_update( @@ -634,7 +676,7 @@ async def field_mappings_partial_update( field_mapping_id: str, *, remote_data_iteration_count: typing.Optional[int] = None, - remote_field_traversal_path: typing.Optional[typing.Sequence[typing.Optional[typing.Any]]] = OMIT, + remote_field_traversal_path: typing.Optional[typing.Sequence[typing.Any]] = OMIT, remote_method: typing.Optional[str] = OMIT, remote_url_path: typing.Optional[str] = OMIT, jmes_path: typing.Optional[str] = OMIT, @@ -651,7 +693,7 @@ async def field_mappings_partial_update( remote_data_iteration_count : typing.Optional[int] Number of common model instances to iterate through when fetching remote data for field mappings. Defaults to 250 if not provided. - remote_field_traversal_path : typing.Optional[typing.Sequence[typing.Optional[typing.Any]]] + remote_field_traversal_path : typing.Optional[typing.Sequence[typing.Any]] The field traversal path of the remote field listed when you hit the GET /remote-fields endpoint. remote_method : typing.Optional[str] @@ -706,6 +748,10 @@ async def field_mappings_partial_update( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) async def remote_fields_retrieve( @@ -756,6 +802,10 @@ async def remote_fields_retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) async def target_fields_retrieve( @@ -792,6 +842,10 @@ async def target_fields_retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) async def target_fields_create( @@ -851,4 +905,8 @@ async def target_fields_create( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) diff --git a/src/merge/resources/chat/resources/force_resync/raw_client.py b/src/merge/resources/chat/resources/force_resync/raw_client.py index 76da107a..5d80f3c9 100644 --- a/src/merge/resources/chat/resources/force_resync/raw_client.py +++ b/src/merge/resources/chat/resources/force_resync/raw_client.py @@ -6,9 +6,11 @@ from .....core.api_error import ApiError from .....core.client_wrapper import AsyncClientWrapper, SyncClientWrapper from .....core.http_response import AsyncHttpResponse, HttpResponse +from .....core.parse_error import ParsingError from .....core.request_options import RequestOptions from .....core.unchecked_base_model import construct_type from ...types.sync_status import SyncStatus +from pydantic import ValidationError class RawForceResyncClient: @@ -49,6 +51,10 @@ def sync_status_resync_create( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) @@ -90,4 +96,8 @@ async def sync_status_resync_create( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) diff --git a/src/merge/resources/chat/resources/generate_key/raw_client.py b/src/merge/resources/chat/resources/generate_key/raw_client.py index 869fcbb1..514a4c58 100644 --- a/src/merge/resources/chat/resources/generate_key/raw_client.py +++ b/src/merge/resources/chat/resources/generate_key/raw_client.py @@ -6,9 +6,11 @@ from .....core.api_error import ApiError from .....core.client_wrapper import AsyncClientWrapper, SyncClientWrapper from .....core.http_response import AsyncHttpResponse, HttpResponse +from .....core.parse_error import ParsingError from .....core.request_options import RequestOptions from .....core.unchecked_base_model import construct_type from ...types.remote_key import RemoteKey +from pydantic import ValidationError # this is used as the default value for optional parameters OMIT = typing.cast(typing.Any, ...) @@ -60,6 +62,10 @@ def create(self, *, name: str, request_options: typing.Optional[RequestOptions] _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) @@ -111,4 +117,8 @@ async def create( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) diff --git a/src/merge/resources/chat/resources/groups/raw_client.py b/src/merge/resources/chat/resources/groups/raw_client.py index 7f8da74c..3e40f8f0 100644 --- a/src/merge/resources/chat/resources/groups/raw_client.py +++ b/src/merge/resources/chat/resources/groups/raw_client.py @@ -9,10 +9,12 @@ from .....core.datetime_utils import serialize_datetime from .....core.http_response import AsyncHttpResponse, HttpResponse from .....core.jsonable_encoder import jsonable_encoder +from .....core.parse_error import ParsingError from .....core.request_options import RequestOptions from .....core.unchecked_base_model import construct_type from ...types.group import Group from ...types.paginated_group_list import PaginatedGroupList +from pydantic import ValidationError class RawGroupsClient: @@ -112,6 +114,10 @@ def list( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) def retrieve( @@ -170,6 +176,10 @@ def retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) @@ -270,6 +280,10 @@ async def list( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) async def retrieve( @@ -328,4 +342,8 @@ async def retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) diff --git a/src/merge/resources/chat/resources/issues/__init__.py b/src/merge/resources/chat/resources/issues/__init__.py index 3ca1094b..45b33fe1 100644 --- a/src/merge/resources/chat/resources/issues/__init__.py +++ b/src/merge/resources/chat/resources/issues/__init__.py @@ -16,8 +16,10 @@ def __getattr__(attr_name: str) -> typing.Any: raise AttributeError(f"No {attr_name} found in _dynamic_imports for module name -> {__name__}") try: module = import_module(module_name, __package__) - result = getattr(module, attr_name) - return result + if module_name == f".{attr_name}": + return module + else: + return getattr(module, attr_name) except ImportError as e: raise ImportError(f"Failed to import {attr_name} from {module_name}: {e}") from e except AttributeError as e: diff --git a/src/merge/resources/chat/resources/issues/raw_client.py b/src/merge/resources/chat/resources/issues/raw_client.py index 63c9e88f..b4c5d47f 100644 --- a/src/merge/resources/chat/resources/issues/raw_client.py +++ b/src/merge/resources/chat/resources/issues/raw_client.py @@ -9,11 +9,13 @@ from .....core.datetime_utils import serialize_datetime from .....core.http_response import AsyncHttpResponse, HttpResponse from .....core.jsonable_encoder import jsonable_encoder +from .....core.parse_error import ParsingError from .....core.request_options import RequestOptions from .....core.unchecked_base_model import construct_type from ...types.issue import Issue from ...types.paginated_issue_list import PaginatedIssueList from .types.issues_list_request_status import IssuesListRequestStatus +from pydantic import ValidationError class RawIssuesClient: @@ -133,6 +135,10 @@ def list( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) def retrieve(self, id: str, *, request_options: typing.Optional[RequestOptions] = None) -> HttpResponse[Issue]: @@ -169,6 +175,10 @@ def retrieve(self, id: str, *, request_options: typing.Optional[RequestOptions] _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) @@ -289,6 +299,10 @@ async def list( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) async def retrieve( @@ -327,4 +341,8 @@ async def retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) diff --git a/src/merge/resources/chat/resources/issues/types/__init__.py b/src/merge/resources/chat/resources/issues/types/__init__.py index 88fbf977..5e097583 100644 --- a/src/merge/resources/chat/resources/issues/types/__init__.py +++ b/src/merge/resources/chat/resources/issues/types/__init__.py @@ -16,8 +16,10 @@ def __getattr__(attr_name: str) -> typing.Any: raise AttributeError(f"No {attr_name} found in _dynamic_imports for module name -> {__name__}") try: module = import_module(module_name, __package__) - result = getattr(module, attr_name) - return result + if module_name == f".{attr_name}": + return module + else: + return getattr(module, attr_name) except ImportError as e: raise ImportError(f"Failed to import {attr_name} from {module_name}: {e}") from e except AttributeError as e: diff --git a/src/merge/resources/chat/resources/issues/types/issues_list_request_status.py b/src/merge/resources/chat/resources/issues/types/issues_list_request_status.py index 2bd3521e..a61afdd0 100644 --- a/src/merge/resources/chat/resources/issues/types/issues_list_request_status.py +++ b/src/merge/resources/chat/resources/issues/types/issues_list_request_status.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ......core import enum + T_Result = typing.TypeVar("T_Result") -class IssuesListRequestStatus(str, enum.Enum): +class IssuesListRequestStatus(enum.StrEnum): ONGOING = "ONGOING" RESOLVED = "RESOLVED" diff --git a/src/merge/resources/chat/resources/link_token/__init__.py b/src/merge/resources/chat/resources/link_token/__init__.py index be8c3839..834918c1 100644 --- a/src/merge/resources/chat/resources/link_token/__init__.py +++ b/src/merge/resources/chat/resources/link_token/__init__.py @@ -19,8 +19,10 @@ def __getattr__(attr_name: str) -> typing.Any: raise AttributeError(f"No {attr_name} found in _dynamic_imports for module name -> {__name__}") try: module = import_module(module_name, __package__) - result = getattr(module, attr_name) - return result + if module_name == f".{attr_name}": + return module + else: + return getattr(module, attr_name) except ImportError as e: raise ImportError(f"Failed to import {attr_name} from {module_name}: {e}") from e except AttributeError as e: diff --git a/src/merge/resources/chat/resources/link_token/client.py b/src/merge/resources/chat/resources/link_token/client.py index 9751cd83..012e3a93 100644 --- a/src/merge/resources/chat/resources/link_token/client.py +++ b/src/merge/resources/chat/resources/link_token/client.py @@ -50,7 +50,7 @@ def create( ] = OMIT, language: typing.Optional[EndUserDetailsRequestLanguage] = OMIT, are_syncs_disabled: typing.Optional[bool] = OMIT, - integration_specific_config: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = OMIT, + integration_specific_config: typing.Optional[typing.Dict[str, typing.Any]] = OMIT, completed_account_initial_screen: typing.Optional[EndUserDetailsRequestCompletedAccountInitialScreen] = OMIT, linked_destination_id: typing.Optional[str] = OMIT, credential_id: typing.Optional[str] = OMIT, @@ -97,7 +97,7 @@ def create( are_syncs_disabled : typing.Optional[bool] The boolean that indicates whether initial, periodic, and force syncs will be disabled. - integration_specific_config : typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] + integration_specific_config : typing.Optional[typing.Dict[str, typing.Any]] A JSON object containing integration-specific configuration options. completed_account_initial_screen : typing.Optional[EndUserDetailsRequestCompletedAccountInitialScreen] @@ -187,7 +187,7 @@ async def create( ] = OMIT, language: typing.Optional[EndUserDetailsRequestLanguage] = OMIT, are_syncs_disabled: typing.Optional[bool] = OMIT, - integration_specific_config: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = OMIT, + integration_specific_config: typing.Optional[typing.Dict[str, typing.Any]] = OMIT, completed_account_initial_screen: typing.Optional[EndUserDetailsRequestCompletedAccountInitialScreen] = OMIT, linked_destination_id: typing.Optional[str] = OMIT, credential_id: typing.Optional[str] = OMIT, @@ -234,7 +234,7 @@ async def create( are_syncs_disabled : typing.Optional[bool] The boolean that indicates whether initial, periodic, and force syncs will be disabled. - integration_specific_config : typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] + integration_specific_config : typing.Optional[typing.Dict[str, typing.Any]] A JSON object containing integration-specific configuration options. completed_account_initial_screen : typing.Optional[EndUserDetailsRequestCompletedAccountInitialScreen] diff --git a/src/merge/resources/chat/resources/link_token/raw_client.py b/src/merge/resources/chat/resources/link_token/raw_client.py index edf6f602..5126dc69 100644 --- a/src/merge/resources/chat/resources/link_token/raw_client.py +++ b/src/merge/resources/chat/resources/link_token/raw_client.py @@ -6,6 +6,7 @@ from .....core.api_error import ApiError from .....core.client_wrapper import AsyncClientWrapper, SyncClientWrapper from .....core.http_response import AsyncHttpResponse, HttpResponse +from .....core.parse_error import ParsingError from .....core.request_options import RequestOptions from .....core.unchecked_base_model import construct_type from ...types.categories_enum import CategoriesEnum @@ -16,6 +17,7 @@ EndUserDetailsRequestCompletedAccountInitialScreen, ) from .types.end_user_details_request_language import EndUserDetailsRequestLanguage +from pydantic import ValidationError # this is used as the default value for optional parameters OMIT = typing.cast(typing.Any, ...) @@ -42,7 +44,7 @@ def create( ] = OMIT, language: typing.Optional[EndUserDetailsRequestLanguage] = OMIT, are_syncs_disabled: typing.Optional[bool] = OMIT, - integration_specific_config: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = OMIT, + integration_specific_config: typing.Optional[typing.Dict[str, typing.Any]] = OMIT, completed_account_initial_screen: typing.Optional[EndUserDetailsRequestCompletedAccountInitialScreen] = OMIT, linked_destination_id: typing.Optional[str] = OMIT, credential_id: typing.Optional[str] = OMIT, @@ -89,7 +91,7 @@ def create( are_syncs_disabled : typing.Optional[bool] The boolean that indicates whether initial, periodic, and force syncs will be disabled. - integration_specific_config : typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] + integration_specific_config : typing.Optional[typing.Dict[str, typing.Any]] A JSON object containing integration-specific configuration options. completed_account_initial_screen : typing.Optional[EndUserDetailsRequestCompletedAccountInitialScreen] @@ -149,6 +151,10 @@ def create( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) @@ -173,7 +179,7 @@ async def create( ] = OMIT, language: typing.Optional[EndUserDetailsRequestLanguage] = OMIT, are_syncs_disabled: typing.Optional[bool] = OMIT, - integration_specific_config: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = OMIT, + integration_specific_config: typing.Optional[typing.Dict[str, typing.Any]] = OMIT, completed_account_initial_screen: typing.Optional[EndUserDetailsRequestCompletedAccountInitialScreen] = OMIT, linked_destination_id: typing.Optional[str] = OMIT, credential_id: typing.Optional[str] = OMIT, @@ -220,7 +226,7 @@ async def create( are_syncs_disabled : typing.Optional[bool] The boolean that indicates whether initial, periodic, and force syncs will be disabled. - integration_specific_config : typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] + integration_specific_config : typing.Optional[typing.Dict[str, typing.Any]] A JSON object containing integration-specific configuration options. completed_account_initial_screen : typing.Optional[EndUserDetailsRequestCompletedAccountInitialScreen] @@ -280,4 +286,8 @@ async def create( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) diff --git a/src/merge/resources/chat/resources/link_token/types/__init__.py b/src/merge/resources/chat/resources/link_token/types/__init__.py index 55cc1d4e..1846dfb1 100644 --- a/src/merge/resources/chat/resources/link_token/types/__init__.py +++ b/src/merge/resources/chat/resources/link_token/types/__init__.py @@ -22,8 +22,10 @@ def __getattr__(attr_name: str) -> typing.Any: raise AttributeError(f"No {attr_name} found in _dynamic_imports for module name -> {__name__}") try: module = import_module(module_name, __package__) - result = getattr(module, attr_name) - return result + if module_name == f".{attr_name}": + return module + else: + return getattr(module, attr_name) except ImportError as e: raise ImportError(f"Failed to import {attr_name} from {module_name}: {e}") from e except AttributeError as e: diff --git a/src/merge/resources/chat/resources/linked_accounts/__init__.py b/src/merge/resources/chat/resources/linked_accounts/__init__.py index 0b9e42b4..12e213b7 100644 --- a/src/merge/resources/chat/resources/linked_accounts/__init__.py +++ b/src/merge/resources/chat/resources/linked_accounts/__init__.py @@ -16,8 +16,10 @@ def __getattr__(attr_name: str) -> typing.Any: raise AttributeError(f"No {attr_name} found in _dynamic_imports for module name -> {__name__}") try: module = import_module(module_name, __package__) - result = getattr(module, attr_name) - return result + if module_name == f".{attr_name}": + return module + else: + return getattr(module, attr_name) except ImportError as e: raise ImportError(f"Failed to import {attr_name} from {module_name}: {e}") from e except AttributeError as e: diff --git a/src/merge/resources/chat/resources/linked_accounts/raw_client.py b/src/merge/resources/chat/resources/linked_accounts/raw_client.py index dc0b1eb3..2ec47496 100644 --- a/src/merge/resources/chat/resources/linked_accounts/raw_client.py +++ b/src/merge/resources/chat/resources/linked_accounts/raw_client.py @@ -6,10 +6,12 @@ from .....core.api_error import ApiError from .....core.client_wrapper import AsyncClientWrapper, SyncClientWrapper from .....core.http_response import AsyncHttpResponse, HttpResponse +from .....core.parse_error import ParsingError from .....core.request_options import RequestOptions from .....core.unchecked_base_model import construct_type from ...types.paginated_account_details_and_actions_list import PaginatedAccountDetailsAndActionsList from .types.linked_accounts_list_request_category import LinkedAccountsListRequestCategory +from pydantic import ValidationError class RawLinkedAccountsClient: @@ -118,6 +120,10 @@ def list( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) @@ -227,4 +233,8 @@ async def list( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) diff --git a/src/merge/resources/chat/resources/linked_accounts/types/__init__.py b/src/merge/resources/chat/resources/linked_accounts/types/__init__.py index a28f38cc..a884db6a 100644 --- a/src/merge/resources/chat/resources/linked_accounts/types/__init__.py +++ b/src/merge/resources/chat/resources/linked_accounts/types/__init__.py @@ -18,8 +18,10 @@ def __getattr__(attr_name: str) -> typing.Any: raise AttributeError(f"No {attr_name} found in _dynamic_imports for module name -> {__name__}") try: module = import_module(module_name, __package__) - result = getattr(module, attr_name) - return result + if module_name == f".{attr_name}": + return module + else: + return getattr(module, attr_name) except ImportError as e: raise ImportError(f"Failed to import {attr_name} from {module_name}: {e}") from e except AttributeError as e: diff --git a/src/merge/resources/chat/resources/linked_accounts/types/linked_accounts_list_request_category.py b/src/merge/resources/chat/resources/linked_accounts/types/linked_accounts_list_request_category.py index 97df0150..035ed972 100644 --- a/src/merge/resources/chat/resources/linked_accounts/types/linked_accounts_list_request_category.py +++ b/src/merge/resources/chat/resources/linked_accounts/types/linked_accounts_list_request_category.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ......core import enum + T_Result = typing.TypeVar("T_Result") -class LinkedAccountsListRequestCategory(str, enum.Enum): +class LinkedAccountsListRequestCategory(enum.StrEnum): ACCOUNTING = "accounting" ATS = "ats" CHAT = "chat" diff --git a/src/merge/resources/chat/resources/messages/__init__.py b/src/merge/resources/chat/resources/messages/__init__.py index 07bbf100..5cac946e 100644 --- a/src/merge/resources/chat/resources/messages/__init__.py +++ b/src/merge/resources/chat/resources/messages/__init__.py @@ -19,8 +19,10 @@ def __getattr__(attr_name: str) -> typing.Any: raise AttributeError(f"No {attr_name} found in _dynamic_imports for module name -> {__name__}") try: module = import_module(module_name, __package__) - result = getattr(module, attr_name) - return result + if module_name == f".{attr_name}": + return module + else: + return getattr(module, attr_name) except ImportError as e: raise ImportError(f"Failed to import {attr_name} from {module_name}: {e}") from e except AttributeError as e: diff --git a/src/merge/resources/chat/resources/messages/raw_client.py b/src/merge/resources/chat/resources/messages/raw_client.py index ef732e06..890e5fef 100644 --- a/src/merge/resources/chat/resources/messages/raw_client.py +++ b/src/merge/resources/chat/resources/messages/raw_client.py @@ -9,12 +9,14 @@ from .....core.datetime_utils import serialize_datetime from .....core.http_response import AsyncHttpResponse, HttpResponse from .....core.jsonable_encoder import jsonable_encoder +from .....core.parse_error import ParsingError from .....core.request_options import RequestOptions from .....core.unchecked_base_model import construct_type from ...types.message import Message from ...types.paginated_message_list import PaginatedMessageList from .types.messages_list_request_order_by import MessagesListRequestOrderBy from .types.messages_replies_list_request_order_by import MessagesRepliesListRequestOrderBy +from pydantic import ValidationError class RawMessagesClient: @@ -124,6 +126,10 @@ def list( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) def retrieve( @@ -177,6 +183,10 @@ def retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) def replies_list( @@ -250,6 +260,10 @@ def replies_list( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) @@ -360,6 +374,10 @@ async def list( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) async def retrieve( @@ -413,6 +431,10 @@ async def retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) async def replies_list( @@ -486,4 +508,8 @@ async def replies_list( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) diff --git a/src/merge/resources/chat/resources/messages/types/__init__.py b/src/merge/resources/chat/resources/messages/types/__init__.py index fac1eeff..9c656760 100644 --- a/src/merge/resources/chat/resources/messages/types/__init__.py +++ b/src/merge/resources/chat/resources/messages/types/__init__.py @@ -20,8 +20,10 @@ def __getattr__(attr_name: str) -> typing.Any: raise AttributeError(f"No {attr_name} found in _dynamic_imports for module name -> {__name__}") try: module = import_module(module_name, __package__) - result = getattr(module, attr_name) - return result + if module_name == f".{attr_name}": + return module + else: + return getattr(module, attr_name) except ImportError as e: raise ImportError(f"Failed to import {attr_name} from {module_name}: {e}") from e except AttributeError as e: diff --git a/src/merge/resources/chat/resources/messages/types/messages_list_request_order_by.py b/src/merge/resources/chat/resources/messages/types/messages_list_request_order_by.py index f10d0646..077b81d0 100644 --- a/src/merge/resources/chat/resources/messages/types/messages_list_request_order_by.py +++ b/src/merge/resources/chat/resources/messages/types/messages_list_request_order_by.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ......core import enum + T_Result = typing.TypeVar("T_Result") -class MessagesListRequestOrderBy(str, enum.Enum): +class MessagesListRequestOrderBy(enum.StrEnum): REMOTE_CREATED_AT_DESCENDING = "-remote_created_at" REMOTE_CREATED_AT_ASCENDING = "remote_created_at" diff --git a/src/merge/resources/chat/resources/messages/types/messages_replies_list_request_order_by.py b/src/merge/resources/chat/resources/messages/types/messages_replies_list_request_order_by.py index 6b8df524..4af5801d 100644 --- a/src/merge/resources/chat/resources/messages/types/messages_replies_list_request_order_by.py +++ b/src/merge/resources/chat/resources/messages/types/messages_replies_list_request_order_by.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ......core import enum + T_Result = typing.TypeVar("T_Result") -class MessagesRepliesListRequestOrderBy(str, enum.Enum): +class MessagesRepliesListRequestOrderBy(enum.StrEnum): REMOTE_CREATED_AT_DESCENDING = "-remote_created_at" REMOTE_CREATED_AT_ASCENDING = "remote_created_at" diff --git a/src/merge/resources/chat/resources/passthrough/raw_client.py b/src/merge/resources/chat/resources/passthrough/raw_client.py index d87bb971..54b8d924 100644 --- a/src/merge/resources/chat/resources/passthrough/raw_client.py +++ b/src/merge/resources/chat/resources/passthrough/raw_client.py @@ -6,10 +6,12 @@ from .....core.api_error import ApiError from .....core.client_wrapper import AsyncClientWrapper, SyncClientWrapper from .....core.http_response import AsyncHttpResponse, HttpResponse +from .....core.parse_error import ParsingError from .....core.request_options import RequestOptions from .....core.unchecked_base_model import construct_type from ...types.data_passthrough_request import DataPassthroughRequest from ...types.remote_response import RemoteResponse +from pydantic import ValidationError # this is used as the default value for optional parameters OMIT = typing.cast(typing.Any, ...) @@ -60,6 +62,10 @@ def create( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) @@ -108,4 +114,8 @@ async def create( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) diff --git a/src/merge/resources/chat/resources/regenerate_key/raw_client.py b/src/merge/resources/chat/resources/regenerate_key/raw_client.py index 55fed130..f81d301b 100644 --- a/src/merge/resources/chat/resources/regenerate_key/raw_client.py +++ b/src/merge/resources/chat/resources/regenerate_key/raw_client.py @@ -6,9 +6,11 @@ from .....core.api_error import ApiError from .....core.client_wrapper import AsyncClientWrapper, SyncClientWrapper from .....core.http_response import AsyncHttpResponse, HttpResponse +from .....core.parse_error import ParsingError from .....core.request_options import RequestOptions from .....core.unchecked_base_model import construct_type from ...types.remote_key import RemoteKey +from pydantic import ValidationError # this is used as the default value for optional parameters OMIT = typing.cast(typing.Any, ...) @@ -60,6 +62,10 @@ def create(self, *, name: str, request_options: typing.Optional[RequestOptions] _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) @@ -111,4 +117,8 @@ async def create( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) diff --git a/src/merge/resources/chat/resources/scopes/raw_client.py b/src/merge/resources/chat/resources/scopes/raw_client.py index 5b80be62..480f72c3 100644 --- a/src/merge/resources/chat/resources/scopes/raw_client.py +++ b/src/merge/resources/chat/resources/scopes/raw_client.py @@ -6,10 +6,12 @@ from .....core.api_error import ApiError from .....core.client_wrapper import AsyncClientWrapper, SyncClientWrapper from .....core.http_response import AsyncHttpResponse, HttpResponse +from .....core.parse_error import ParsingError from .....core.request_options import RequestOptions from .....core.unchecked_base_model import construct_type from ...types.common_model_scope_api import CommonModelScopeApi from ...types.individual_common_model_scope_deserializer_request import IndividualCommonModelScopeDeserializerRequest +from pydantic import ValidationError # this is used as the default value for optional parameters OMIT = typing.cast(typing.Any, ...) @@ -53,6 +55,10 @@ def default_scopes_retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) def linked_account_scopes_retrieve( @@ -89,6 +95,10 @@ def linked_account_scopes_retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) def linked_account_scopes_create( @@ -138,6 +148,10 @@ def linked_account_scopes_create( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) @@ -179,6 +193,10 @@ async def default_scopes_retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) async def linked_account_scopes_retrieve( @@ -215,6 +233,10 @@ async def linked_account_scopes_retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) async def linked_account_scopes_create( @@ -264,4 +286,8 @@ async def linked_account_scopes_create( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) diff --git a/src/merge/resources/chat/resources/sync_status/raw_client.py b/src/merge/resources/chat/resources/sync_status/raw_client.py index 2e94b022..898e7186 100644 --- a/src/merge/resources/chat/resources/sync_status/raw_client.py +++ b/src/merge/resources/chat/resources/sync_status/raw_client.py @@ -6,9 +6,11 @@ from .....core.api_error import ApiError from .....core.client_wrapper import AsyncClientWrapper, SyncClientWrapper from .....core.http_response import AsyncHttpResponse, HttpResponse +from .....core.parse_error import ParsingError from .....core.request_options import RequestOptions from .....core.unchecked_base_model import construct_type from ...types.paginated_sync_status_list import PaginatedSyncStatusList +from pydantic import ValidationError class RawSyncStatusClient: @@ -63,6 +65,10 @@ def list( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) @@ -118,4 +124,8 @@ async def list( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) diff --git a/src/merge/resources/chat/resources/users/raw_client.py b/src/merge/resources/chat/resources/users/raw_client.py index dae7b212..f2468a66 100644 --- a/src/merge/resources/chat/resources/users/raw_client.py +++ b/src/merge/resources/chat/resources/users/raw_client.py @@ -9,10 +9,12 @@ from .....core.datetime_utils import serialize_datetime from .....core.http_response import AsyncHttpResponse, HttpResponse from .....core.jsonable_encoder import jsonable_encoder +from .....core.parse_error import ParsingError from .....core.request_options import RequestOptions from .....core.unchecked_base_model import construct_type from ...types.paginated_user_list import PaginatedUserList from ...types.user import User +from pydantic import ValidationError class RawUsersClient: @@ -114,6 +116,10 @@ def list( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) def retrieve( @@ -174,6 +180,10 @@ def retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) @@ -276,6 +286,10 @@ async def list( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) async def retrieve( @@ -336,4 +350,8 @@ async def retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) diff --git a/src/merge/resources/chat/resources/webhook_receivers/raw_client.py b/src/merge/resources/chat/resources/webhook_receivers/raw_client.py index 56ad6750..a39ce3aa 100644 --- a/src/merge/resources/chat/resources/webhook_receivers/raw_client.py +++ b/src/merge/resources/chat/resources/webhook_receivers/raw_client.py @@ -6,9 +6,11 @@ from .....core.api_error import ApiError from .....core.client_wrapper import AsyncClientWrapper, SyncClientWrapper from .....core.http_response import AsyncHttpResponse, HttpResponse +from .....core.parse_error import ParsingError from .....core.request_options import RequestOptions from .....core.unchecked_base_model import construct_type from ...types.webhook_receiver import WebhookReceiver +from pydantic import ValidationError # this is used as the default value for optional parameters OMIT = typing.cast(typing.Any, ...) @@ -52,6 +54,10 @@ def list( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) def create( @@ -108,6 +114,10 @@ def create( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) @@ -149,6 +159,10 @@ async def list( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) async def create( @@ -205,4 +219,8 @@ async def create( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) diff --git a/src/merge/resources/chat/types/__init__.py b/src/merge/resources/chat/types/__init__.py index ce79b882..559764ef 100644 --- a/src/merge/resources/chat/types/__init__.py +++ b/src/merge/resources/chat/types/__init__.py @@ -216,8 +216,10 @@ def __getattr__(attr_name: str) -> typing.Any: raise AttributeError(f"No {attr_name} found in _dynamic_imports for module name -> {__name__}") try: module = import_module(module_name, __package__) - result = getattr(module, attr_name) - return result + if module_name == f".{attr_name}": + return module + else: + return getattr(module, attr_name) except ImportError as e: raise ImportError(f"Failed to import {attr_name} from {module_name}: {e}") from e except AttributeError as e: diff --git a/src/merge/resources/chat/types/account_details_and_actions.py b/src/merge/resources/chat/types/account_details_and_actions.py index 93c874ed..cbf29cb3 100644 --- a/src/merge/resources/chat/types/account_details_and_actions.py +++ b/src/merge/resources/chat/types/account_details_and_actions.py @@ -42,7 +42,7 @@ class AccountDetailsAndActions(UncheckedBaseModel): integration: typing.Optional[AccountDetailsAndActionsIntegration] = None account_type: str completed_at: dt.datetime - integration_specific_fields: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None + integration_specific_fields: typing.Optional[typing.Dict[str, typing.Any]] = None if IS_PYDANTIC_V2: model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2 diff --git a/src/merge/resources/chat/types/account_details_and_actions_status_enum.py b/src/merge/resources/chat/types/account_details_and_actions_status_enum.py index 0701a829..323189b4 100644 --- a/src/merge/resources/chat/types/account_details_and_actions_status_enum.py +++ b/src/merge/resources/chat/types/account_details_and_actions_status_enum.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ....core import enum + T_Result = typing.TypeVar("T_Result") -class AccountDetailsAndActionsStatusEnum(str, enum.Enum): +class AccountDetailsAndActionsStatusEnum(enum.StrEnum): COMPLETE = "COMPLETE" INCOMPLETE = "INCOMPLETE" RELINK_NEEDED = "RELINK_NEEDED" diff --git a/src/merge/resources/chat/types/account_integration.py b/src/merge/resources/chat/types/account_integration.py index ef8b260d..7bc872ca 100644 --- a/src/merge/resources/chat/types/account_integration.py +++ b/src/merge/resources/chat/types/account_integration.py @@ -40,9 +40,7 @@ class AccountIntegration(UncheckedBaseModel): """ slug: typing.Optional[str] = None - api_endpoints_to_documentation_urls: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = ( - pydantic.Field(default=None) - ) + api_endpoints_to_documentation_urls: typing.Optional[typing.Dict[str, typing.Any]] = pydantic.Field(default=None) """ Mapping of API endpoints to documentation urls for support. Example: {'GET': [['/common-model-scopes', 'https://docs.merge.dev/accounting/common-model-scopes/#common_model_scopes_retrieve'],['/common-model-actions', 'https://docs.merge.dev/accounting/common-model-actions/#common_model_actions_retrieve']], 'POST': []} """ @@ -52,7 +50,7 @@ class AccountIntegration(UncheckedBaseModel): Setup guide URL for third party webhook creation. Exposed in Merge Docs. """ - category_beta_status: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = pydantic.Field(default=None) + category_beta_status: typing.Optional[typing.Dict[str, typing.Any]] = pydantic.Field(default=None) """ Category or categories this integration is in beta status for. """ diff --git a/src/merge/resources/chat/types/advanced_metadata.py b/src/merge/resources/chat/types/advanced_metadata.py index 60b5d072..aef64bb3 100644 --- a/src/merge/resources/chat/types/advanced_metadata.py +++ b/src/merge/resources/chat/types/advanced_metadata.py @@ -13,7 +13,7 @@ class AdvancedMetadata(UncheckedBaseModel): description: typing.Optional[str] = None is_required: typing.Optional[bool] = None is_custom: typing.Optional[bool] = None - field_choices: typing.Optional[typing.List[typing.Optional[typing.Any]]] = None + field_choices: typing.Optional[typing.List[typing.Any]] = None if IS_PYDANTIC_V2: model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2 diff --git a/src/merge/resources/chat/types/categories_enum.py b/src/merge/resources/chat/types/categories_enum.py index b6575458..f92febf4 100644 --- a/src/merge/resources/chat/types/categories_enum.py +++ b/src/merge/resources/chat/types/categories_enum.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ....core import enum + T_Result = typing.TypeVar("T_Result") -class CategoriesEnum(str, enum.Enum): +class CategoriesEnum(enum.StrEnum): HRIS = "hris" ATS = "ats" ACCOUNTING = "accounting" diff --git a/src/merge/resources/chat/types/category_enum.py b/src/merge/resources/chat/types/category_enum.py index 4ee2f4e4..ac0be82b 100644 --- a/src/merge/resources/chat/types/category_enum.py +++ b/src/merge/resources/chat/types/category_enum.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ....core import enum + T_Result = typing.TypeVar("T_Result") -class CategoryEnum(str, enum.Enum): +class CategoryEnum(enum.StrEnum): HRIS = "hris" ATS = "ats" ACCOUNTING = "accounting" diff --git a/src/merge/resources/chat/types/conversation.py b/src/merge/resources/chat/types/conversation.py index 9f6bddfe..bd62405a 100644 --- a/src/merge/resources/chat/types/conversation.py +++ b/src/merge/resources/chat/types/conversation.py @@ -89,7 +89,4 @@ class Config: extra = pydantic.Extra.allow -from .group import Group # noqa: E402, F401, I001 -from .user import User # noqa: E402, F401, I001 - update_forward_refs(Conversation) diff --git a/src/merge/resources/chat/types/conversation_field_mappings.py b/src/merge/resources/chat/types/conversation_field_mappings.py index 21a8d43e..92da0643 100644 --- a/src/merge/resources/chat/types/conversation_field_mappings.py +++ b/src/merge/resources/chat/types/conversation_field_mappings.py @@ -8,8 +8,8 @@ class ConversationFieldMappings(UncheckedBaseModel): - organization_defined_targets: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None - linked_account_defined_targets: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None + organization_defined_targets: typing.Optional[typing.Dict[str, typing.Any]] = None + linked_account_defined_targets: typing.Optional[typing.Dict[str, typing.Any]] = None if IS_PYDANTIC_V2: model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2 diff --git a/src/merge/resources/chat/types/data_passthrough_request.py b/src/merge/resources/chat/types/data_passthrough_request.py index 5a60bfb6..d8d42b8d 100644 --- a/src/merge/resources/chat/types/data_passthrough_request.py +++ b/src/merge/resources/chat/types/data_passthrough_request.py @@ -41,7 +41,7 @@ class DataPassthroughRequest(UncheckedBaseModel): Pass an array of `MultipartFormField` objects in here instead of using the `data` param if `request_format` is set to `MULTIPART`. """ - headers: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = pydantic.Field(default=None) + headers: typing.Optional[typing.Dict[str, typing.Any]] = pydantic.Field(default=None) """ The headers to use for the request (Merge will handle the account's authorization headers). `Content-Type` header is required for passthrough. Choose content type corresponding to expected format of receiving server. """ diff --git a/src/merge/resources/chat/types/enabled_actions_enum.py b/src/merge/resources/chat/types/enabled_actions_enum.py index cb19286a..ded7aa80 100644 --- a/src/merge/resources/chat/types/enabled_actions_enum.py +++ b/src/merge/resources/chat/types/enabled_actions_enum.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ....core import enum + T_Result = typing.TypeVar("T_Result") -class EnabledActionsEnum(str, enum.Enum): +class EnabledActionsEnum(enum.StrEnum): READ = "READ" WRITE = "WRITE" diff --git a/src/merge/resources/chat/types/encoding_enum.py b/src/merge/resources/chat/types/encoding_enum.py index 7d4b8977..27686241 100644 --- a/src/merge/resources/chat/types/encoding_enum.py +++ b/src/merge/resources/chat/types/encoding_enum.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ....core import enum + T_Result = typing.TypeVar("T_Result") -class EncodingEnum(str, enum.Enum): +class EncodingEnum(enum.StrEnum): RAW = "RAW" BASE_64 = "BASE64" GZIP_BASE_64 = "GZIP_BASE64" diff --git a/src/merge/resources/chat/types/event_type_enum.py b/src/merge/resources/chat/types/event_type_enum.py index a04b9681..42ce9abb 100644 --- a/src/merge/resources/chat/types/event_type_enum.py +++ b/src/merge/resources/chat/types/event_type_enum.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ....core import enum + T_Result = typing.TypeVar("T_Result") -class EventTypeEnum(str, enum.Enum): +class EventTypeEnum(enum.StrEnum): CREATED_REMOTE_PRODUCTION_API_KEY = "CREATED_REMOTE_PRODUCTION_API_KEY" DELETED_REMOTE_PRODUCTION_API_KEY = "DELETED_REMOTE_PRODUCTION_API_KEY" CREATED_TEST_API_KEY = "CREATED_TEST_API_KEY" diff --git a/src/merge/resources/chat/types/external_target_field_api_response.py b/src/merge/resources/chat/types/external_target_field_api_response.py index 624d13ef..cc584be6 100644 --- a/src/merge/resources/chat/types/external_target_field_api_response.py +++ b/src/merge/resources/chat/types/external_target_field_api_response.py @@ -3,18 +3,32 @@ import typing import pydantic +import typing_extensions from ....core.pydantic_utilities import IS_PYDANTIC_V2 +from ....core.serialization import FieldMetadata from ....core.unchecked_base_model import UncheckedBaseModel from .external_target_field_api import ExternalTargetFieldApi class ExternalTargetFieldApiResponse(UncheckedBaseModel): - user: typing.Optional[typing.List[ExternalTargetFieldApi]] = pydantic.Field(alias="User", default=None) - group: typing.Optional[typing.List[ExternalTargetFieldApi]] = pydantic.Field(alias="Group", default=None) - conversation: typing.Optional[typing.List[ExternalTargetFieldApi]] = pydantic.Field( - alias="Conversation", default=None - ) - member: typing.Optional[typing.List[ExternalTargetFieldApi]] = pydantic.Field(alias="Member", default=None) + user: typing_extensions.Annotated[ + typing.Optional[typing.List[ExternalTargetFieldApi]], FieldMetadata(alias="User"), pydantic.Field(alias="User") + ] = None + group: typing_extensions.Annotated[ + typing.Optional[typing.List[ExternalTargetFieldApi]], + FieldMetadata(alias="Group"), + pydantic.Field(alias="Group"), + ] = None + conversation: typing_extensions.Annotated[ + typing.Optional[typing.List[ExternalTargetFieldApi]], + FieldMetadata(alias="Conversation"), + pydantic.Field(alias="Conversation"), + ] = None + member: typing_extensions.Annotated[ + typing.Optional[typing.List[ExternalTargetFieldApi]], + FieldMetadata(alias="Member"), + pydantic.Field(alias="Member"), + ] = None if IS_PYDANTIC_V2: model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2 diff --git a/src/merge/resources/chat/types/field_mapping_api_instance_remote_field.py b/src/merge/resources/chat/types/field_mapping_api_instance_remote_field.py index 578a2b10..ccd1f990 100644 --- a/src/merge/resources/chat/types/field_mapping_api_instance_remote_field.py +++ b/src/merge/resources/chat/types/field_mapping_api_instance_remote_field.py @@ -3,7 +3,9 @@ import typing import pydantic +import typing_extensions from ....core.pydantic_utilities import IS_PYDANTIC_V2 +from ....core.serialization import FieldMetadata from ....core.unchecked_base_model import UncheckedBaseModel from .field_mapping_api_instance_remote_field_remote_endpoint_info import ( FieldMappingApiInstanceRemoteFieldRemoteEndpointInfo, @@ -12,9 +14,9 @@ class FieldMappingApiInstanceRemoteField(UncheckedBaseModel): remote_key_name: typing.Optional[str] = None - schema_: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = pydantic.Field( - alias="schema", default=None - ) + schema_: typing_extensions.Annotated[ + typing.Optional[typing.Dict[str, typing.Any]], FieldMetadata(alias="schema"), pydantic.Field(alias="schema") + ] = None remote_endpoint_info: FieldMappingApiInstanceRemoteFieldRemoteEndpointInfo if IS_PYDANTIC_V2: diff --git a/src/merge/resources/chat/types/field_mapping_api_instance_response.py b/src/merge/resources/chat/types/field_mapping_api_instance_response.py index ebded9e9..a514be8f 100644 --- a/src/merge/resources/chat/types/field_mapping_api_instance_response.py +++ b/src/merge/resources/chat/types/field_mapping_api_instance_response.py @@ -3,18 +3,32 @@ import typing import pydantic +import typing_extensions from ....core.pydantic_utilities import IS_PYDANTIC_V2 +from ....core.serialization import FieldMetadata from ....core.unchecked_base_model import UncheckedBaseModel from .field_mapping_api_instance import FieldMappingApiInstance class FieldMappingApiInstanceResponse(UncheckedBaseModel): - user: typing.Optional[typing.List[FieldMappingApiInstance]] = pydantic.Field(alias="User", default=None) - group: typing.Optional[typing.List[FieldMappingApiInstance]] = pydantic.Field(alias="Group", default=None) - conversation: typing.Optional[typing.List[FieldMappingApiInstance]] = pydantic.Field( - alias="Conversation", default=None - ) - member: typing.Optional[typing.List[FieldMappingApiInstance]] = pydantic.Field(alias="Member", default=None) + user: typing_extensions.Annotated[ + typing.Optional[typing.List[FieldMappingApiInstance]], FieldMetadata(alias="User"), pydantic.Field(alias="User") + ] = None + group: typing_extensions.Annotated[ + typing.Optional[typing.List[FieldMappingApiInstance]], + FieldMetadata(alias="Group"), + pydantic.Field(alias="Group"), + ] = None + conversation: typing_extensions.Annotated[ + typing.Optional[typing.List[FieldMappingApiInstance]], + FieldMetadata(alias="Conversation"), + pydantic.Field(alias="Conversation"), + ] = None + member: typing_extensions.Annotated[ + typing.Optional[typing.List[FieldMappingApiInstance]], + FieldMetadata(alias="Member"), + pydantic.Field(alias="Member"), + ] = None if IS_PYDANTIC_V2: model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2 diff --git a/src/merge/resources/chat/types/field_permission_deserializer.py b/src/merge/resources/chat/types/field_permission_deserializer.py index 1d71ae04..407ed547 100644 --- a/src/merge/resources/chat/types/field_permission_deserializer.py +++ b/src/merge/resources/chat/types/field_permission_deserializer.py @@ -8,8 +8,8 @@ class FieldPermissionDeserializer(UncheckedBaseModel): - enabled_fields: typing.Optional[typing.List[typing.Optional[typing.Any]]] = None - disabled_fields: typing.Optional[typing.List[typing.Optional[typing.Any]]] = None + enabled_fields: typing.Optional[typing.List[typing.Any]] = None + disabled_fields: typing.Optional[typing.List[typing.Any]] = None if IS_PYDANTIC_V2: model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2 diff --git a/src/merge/resources/chat/types/field_permission_deserializer_request.py b/src/merge/resources/chat/types/field_permission_deserializer_request.py index a4113b46..6680c7d2 100644 --- a/src/merge/resources/chat/types/field_permission_deserializer_request.py +++ b/src/merge/resources/chat/types/field_permission_deserializer_request.py @@ -8,8 +8,8 @@ class FieldPermissionDeserializerRequest(UncheckedBaseModel): - enabled_fields: typing.Optional[typing.List[typing.Optional[typing.Any]]] = None - disabled_fields: typing.Optional[typing.List[typing.Optional[typing.Any]]] = None + enabled_fields: typing.Optional[typing.List[typing.Any]] = None + disabled_fields: typing.Optional[typing.List[typing.Any]] = None if IS_PYDANTIC_V2: model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2 diff --git a/src/merge/resources/chat/types/group.py b/src/merge/resources/chat/types/group.py index b0ab11f4..8535053c 100644 --- a/src/merge/resources/chat/types/group.py +++ b/src/merge/resources/chat/types/group.py @@ -71,7 +71,8 @@ class Config: extra = pydantic.Extra.allow -from .user import User # noqa: E402, F401, I001 -from .group_users_item import GroupUsersItem # noqa: E402, F401, I001 +from .group_users_item import GroupUsersItem # noqa: E402, I001 +from .user import User # noqa: E402, I001 +from .user_groups_item import UserGroupsItem # noqa: E402, I001 -update_forward_refs(Group) +update_forward_refs(Group, GroupUsersItem=GroupUsersItem, User=User, UserGroupsItem=UserGroupsItem) diff --git a/src/merge/resources/chat/types/group_field_mappings.py b/src/merge/resources/chat/types/group_field_mappings.py index 3be990d2..eaef7341 100644 --- a/src/merge/resources/chat/types/group_field_mappings.py +++ b/src/merge/resources/chat/types/group_field_mappings.py @@ -8,8 +8,8 @@ class GroupFieldMappings(UncheckedBaseModel): - organization_defined_targets: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None - linked_account_defined_targets: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None + organization_defined_targets: typing.Optional[typing.Dict[str, typing.Any]] = None + linked_account_defined_targets: typing.Optional[typing.Dict[str, typing.Any]] = None if IS_PYDANTIC_V2: model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2 diff --git a/src/merge/resources/chat/types/issue.py b/src/merge/resources/chat/types/issue.py index 8f1027ca..ab038c54 100644 --- a/src/merge/resources/chat/types/issue.py +++ b/src/merge/resources/chat/types/issue.py @@ -17,7 +17,7 @@ class Issue(UncheckedBaseModel): """ error_description: str - end_user: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None + end_user: typing.Optional[typing.Dict[str, typing.Any]] = None first_incident_time: typing.Optional[dt.datetime] = None last_incident_time: typing.Optional[dt.datetime] = None is_muted: typing.Optional[bool] = None diff --git a/src/merge/resources/chat/types/issue_status_enum.py b/src/merge/resources/chat/types/issue_status_enum.py index d75e26e2..932ae51c 100644 --- a/src/merge/resources/chat/types/issue_status_enum.py +++ b/src/merge/resources/chat/types/issue_status_enum.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ....core import enum + T_Result = typing.TypeVar("T_Result") -class IssueStatusEnum(str, enum.Enum): +class IssueStatusEnum(enum.StrEnum): ONGOING = "ONGOING" RESOLVED = "RESOLVED" diff --git a/src/merge/resources/chat/types/language_enum.py b/src/merge/resources/chat/types/language_enum.py index 19f87fe0..16d6cd0e 100644 --- a/src/merge/resources/chat/types/language_enum.py +++ b/src/merge/resources/chat/types/language_enum.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ....core import enum + T_Result = typing.TypeVar("T_Result") -class LanguageEnum(str, enum.Enum): +class LanguageEnum(enum.StrEnum): EN = "en" DE = "de" diff --git a/src/merge/resources/chat/types/last_sync_result_enum.py b/src/merge/resources/chat/types/last_sync_result_enum.py index 52ecd845..5cb86bc3 100644 --- a/src/merge/resources/chat/types/last_sync_result_enum.py +++ b/src/merge/resources/chat/types/last_sync_result_enum.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ....core import enum + T_Result = typing.TypeVar("T_Result") -class LastSyncResultEnum(str, enum.Enum): +class LastSyncResultEnum(enum.StrEnum): SYNCING = "SYNCING" DONE = "DONE" FAILED = "FAILED" diff --git a/src/merge/resources/chat/types/member.py b/src/merge/resources/chat/types/member.py index 97acdd53..03078dea 100644 --- a/src/merge/resources/chat/types/member.py +++ b/src/merge/resources/chat/types/member.py @@ -83,7 +83,4 @@ class Config: extra = pydantic.Extra.allow -from .group import Group # noqa: E402, F401, I001 -from .user import User # noqa: E402, F401, I001 - update_forward_refs(Member) diff --git a/src/merge/resources/chat/types/member_field_mappings.py b/src/merge/resources/chat/types/member_field_mappings.py index a102d18d..1e15b6f5 100644 --- a/src/merge/resources/chat/types/member_field_mappings.py +++ b/src/merge/resources/chat/types/member_field_mappings.py @@ -8,8 +8,8 @@ class MemberFieldMappings(UncheckedBaseModel): - organization_defined_targets: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None - linked_account_defined_targets: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None + organization_defined_targets: typing.Optional[typing.Dict[str, typing.Any]] = None + linked_account_defined_targets: typing.Optional[typing.Dict[str, typing.Any]] = None if IS_PYDANTIC_V2: model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2 diff --git a/src/merge/resources/chat/types/method_enum.py b/src/merge/resources/chat/types/method_enum.py index 73d2556f..45c9f89e 100644 --- a/src/merge/resources/chat/types/method_enum.py +++ b/src/merge/resources/chat/types/method_enum.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ....core import enum + T_Result = typing.TypeVar("T_Result") -class MethodEnum(str, enum.Enum): +class MethodEnum(enum.StrEnum): GET = "GET" OPTIONS = "OPTIONS" HEAD = "HEAD" diff --git a/src/merge/resources/chat/types/paginated_conversation_list.py b/src/merge/resources/chat/types/paginated_conversation_list.py index 3b95e565..70fad94a 100644 --- a/src/merge/resources/chat/types/paginated_conversation_list.py +++ b/src/merge/resources/chat/types/paginated_conversation_list.py @@ -25,7 +25,4 @@ class Config: extra = pydantic.Extra.allow -from .group import Group # noqa: E402, F401, I001 -from .user import User # noqa: E402, F401, I001 - update_forward_refs(PaginatedConversationList) diff --git a/src/merge/resources/chat/types/paginated_group_list.py b/src/merge/resources/chat/types/paginated_group_list.py index 1405b628..3e46b774 100644 --- a/src/merge/resources/chat/types/paginated_group_list.py +++ b/src/merge/resources/chat/types/paginated_group_list.py @@ -24,7 +24,11 @@ class Config: extra = pydantic.Extra.allow -from .group import Group # noqa: E402, F401, I001 -from .user import User # noqa: E402, F401, I001 - -update_forward_refs(PaginatedGroupList) +from .group import Group # noqa: E402, I001 +from .group_users_item import GroupUsersItem # noqa: E402, I001 +from .user import User # noqa: E402, I001 +from .user_groups_item import UserGroupsItem # noqa: E402, I001 + +update_forward_refs( + PaginatedGroupList, Group=Group, GroupUsersItem=GroupUsersItem, User=User, UserGroupsItem=UserGroupsItem +) diff --git a/src/merge/resources/chat/types/paginated_member_list.py b/src/merge/resources/chat/types/paginated_member_list.py index d3071471..5e83e6a1 100644 --- a/src/merge/resources/chat/types/paginated_member_list.py +++ b/src/merge/resources/chat/types/paginated_member_list.py @@ -25,7 +25,4 @@ class Config: extra = pydantic.Extra.allow -from .group import Group # noqa: E402, F401, I001 -from .user import User # noqa: E402, F401, I001 - update_forward_refs(PaginatedMemberList) diff --git a/src/merge/resources/chat/types/paginated_user_list.py b/src/merge/resources/chat/types/paginated_user_list.py index b7efd863..ff3ad345 100644 --- a/src/merge/resources/chat/types/paginated_user_list.py +++ b/src/merge/resources/chat/types/paginated_user_list.py @@ -24,7 +24,11 @@ class Config: extra = pydantic.Extra.allow -from .group import Group # noqa: E402, F401, I001 -from .user import User # noqa: E402, F401, I001 - -update_forward_refs(PaginatedUserList) +from .group import Group # noqa: E402, I001 +from .group_users_item import GroupUsersItem # noqa: E402, I001 +from .user import User # noqa: E402, I001 +from .user_groups_item import UserGroupsItem # noqa: E402, I001 + +update_forward_refs( + PaginatedUserList, Group=Group, GroupUsersItem=GroupUsersItem, User=User, UserGroupsItem=UserGroupsItem +) diff --git a/src/merge/resources/chat/types/remote_data.py b/src/merge/resources/chat/types/remote_data.py index f34bec80..2026f05a 100644 --- a/src/merge/resources/chat/types/remote_data.py +++ b/src/merge/resources/chat/types/remote_data.py @@ -22,7 +22,7 @@ class RemoteData(UncheckedBaseModel): The third-party API path that is being called. """ - data: typing.Optional[typing.Optional[typing.Any]] = pydantic.Field(default=None) + data: typing.Optional[typing.Any] = pydantic.Field(default=None) """ The data returned from the third-party for this object in its original, unnormalized format. """ diff --git a/src/merge/resources/chat/types/remote_endpoint_info.py b/src/merge/resources/chat/types/remote_endpoint_info.py index 07ceff6a..ffa70b94 100644 --- a/src/merge/resources/chat/types/remote_endpoint_info.py +++ b/src/merge/resources/chat/types/remote_endpoint_info.py @@ -10,7 +10,7 @@ class RemoteEndpointInfo(UncheckedBaseModel): method: str url_path: str - field_traversal_path: typing.List[typing.Optional[typing.Any]] + field_traversal_path: typing.List[typing.Any] if IS_PYDANTIC_V2: model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2 diff --git a/src/merge/resources/chat/types/remote_field_api.py b/src/merge/resources/chat/types/remote_field_api.py index 0756bfc3..5f2c2ab1 100644 --- a/src/merge/resources/chat/types/remote_field_api.py +++ b/src/merge/resources/chat/types/remote_field_api.py @@ -3,7 +3,9 @@ import typing import pydantic +import typing_extensions from ....core.pydantic_utilities import IS_PYDANTIC_V2 +from ....core.serialization import FieldMetadata from ....core.unchecked_base_model import UncheckedBaseModel from .remote_endpoint_info import RemoteEndpointInfo from .remote_field_api_advanced_metadata import RemoteFieldApiAdvancedMetadata @@ -11,10 +13,12 @@ class RemoteFieldApi(UncheckedBaseModel): - schema_: typing.Dict[str, typing.Optional[typing.Any]] = pydantic.Field(alias="schema") + schema_: typing_extensions.Annotated[ + typing.Dict[str, typing.Any], FieldMetadata(alias="schema"), pydantic.Field(alias="schema") + ] remote_key_name: str remote_endpoint_info: RemoteEndpointInfo - example_values: typing.Optional[typing.List[typing.Optional[typing.Any]]] = None + example_values: typing.Optional[typing.List[typing.Any]] = None advanced_metadata: typing.Optional[RemoteFieldApiAdvancedMetadata] = None coverage: typing.Optional[RemoteFieldApiCoverage] = None diff --git a/src/merge/resources/chat/types/remote_field_api_response.py b/src/merge/resources/chat/types/remote_field_api_response.py index 7e47f247..ffedf99e 100644 --- a/src/merge/resources/chat/types/remote_field_api_response.py +++ b/src/merge/resources/chat/types/remote_field_api_response.py @@ -3,16 +3,28 @@ import typing import pydantic +import typing_extensions from ....core.pydantic_utilities import IS_PYDANTIC_V2 +from ....core.serialization import FieldMetadata from ....core.unchecked_base_model import UncheckedBaseModel from .remote_field_api import RemoteFieldApi class RemoteFieldApiResponse(UncheckedBaseModel): - user: typing.Optional[typing.List[RemoteFieldApi]] = pydantic.Field(alias="User", default=None) - group: typing.Optional[typing.List[RemoteFieldApi]] = pydantic.Field(alias="Group", default=None) - conversation: typing.Optional[typing.List[RemoteFieldApi]] = pydantic.Field(alias="Conversation", default=None) - member: typing.Optional[typing.List[RemoteFieldApi]] = pydantic.Field(alias="Member", default=None) + user: typing_extensions.Annotated[ + typing.Optional[typing.List[RemoteFieldApi]], FieldMetadata(alias="User"), pydantic.Field(alias="User") + ] = None + group: typing_extensions.Annotated[ + typing.Optional[typing.List[RemoteFieldApi]], FieldMetadata(alias="Group"), pydantic.Field(alias="Group") + ] = None + conversation: typing_extensions.Annotated[ + typing.Optional[typing.List[RemoteFieldApi]], + FieldMetadata(alias="Conversation"), + pydantic.Field(alias="Conversation"), + ] = None + member: typing_extensions.Annotated[ + typing.Optional[typing.List[RemoteFieldApi]], FieldMetadata(alias="Member"), pydantic.Field(alias="Member") + ] = None if IS_PYDANTIC_V2: model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2 diff --git a/src/merge/resources/chat/types/remote_response.py b/src/merge/resources/chat/types/remote_response.py index db01131f..8bc6f905 100644 --- a/src/merge/resources/chat/types/remote_response.py +++ b/src/merge/resources/chat/types/remote_response.py @@ -21,10 +21,10 @@ class RemoteResponse(UncheckedBaseModel): method: str path: str status: int - response: typing.Optional[typing.Any] = None - response_headers: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None + response: typing.Any + response_headers: typing.Optional[typing.Dict[str, typing.Any]] = None response_type: typing.Optional[RemoteResponseResponseType] = None - headers: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None + headers: typing.Optional[typing.Dict[str, typing.Any]] = None if IS_PYDANTIC_V2: model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2 diff --git a/src/merge/resources/chat/types/request_format_enum.py b/src/merge/resources/chat/types/request_format_enum.py index 70ecd9bb..711b2df8 100644 --- a/src/merge/resources/chat/types/request_format_enum.py +++ b/src/merge/resources/chat/types/request_format_enum.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ....core import enum + T_Result = typing.TypeVar("T_Result") -class RequestFormatEnum(str, enum.Enum): +class RequestFormatEnum(enum.StrEnum): JSON = "JSON" XML = "XML" MULTIPART = "MULTIPART" diff --git a/src/merge/resources/chat/types/response_type_enum.py b/src/merge/resources/chat/types/response_type_enum.py index 23b6bb5b..ce3f3d04 100644 --- a/src/merge/resources/chat/types/response_type_enum.py +++ b/src/merge/resources/chat/types/response_type_enum.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ....core import enum + T_Result = typing.TypeVar("T_Result") -class ResponseTypeEnum(str, enum.Enum): +class ResponseTypeEnum(enum.StrEnum): JSON = "JSON" BASE_64_GZIP = "BASE64_GZIP" diff --git a/src/merge/resources/chat/types/role_enum.py b/src/merge/resources/chat/types/role_enum.py index c97de31f..752d2454 100644 --- a/src/merge/resources/chat/types/role_enum.py +++ b/src/merge/resources/chat/types/role_enum.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ....core import enum + T_Result = typing.TypeVar("T_Result") -class RoleEnum(str, enum.Enum): +class RoleEnum(enum.StrEnum): ADMIN = "ADMIN" DEVELOPER = "DEVELOPER" MEMBER = "MEMBER" diff --git a/src/merge/resources/chat/types/selective_sync_configurations_usage_enum.py b/src/merge/resources/chat/types/selective_sync_configurations_usage_enum.py index 7b486b59..953775e9 100644 --- a/src/merge/resources/chat/types/selective_sync_configurations_usage_enum.py +++ b/src/merge/resources/chat/types/selective_sync_configurations_usage_enum.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ....core import enum + T_Result = typing.TypeVar("T_Result") -class SelectiveSyncConfigurationsUsageEnum(str, enum.Enum): +class SelectiveSyncConfigurationsUsageEnum(enum.StrEnum): IN_NEXT_SYNC = "IN_NEXT_SYNC" IN_LAST_SYNC = "IN_LAST_SYNC" diff --git a/src/merge/resources/chat/types/status_fd_5_enum.py b/src/merge/resources/chat/types/status_fd_5_enum.py index 3bf97afd..52c212e4 100644 --- a/src/merge/resources/chat/types/status_fd_5_enum.py +++ b/src/merge/resources/chat/types/status_fd_5_enum.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ....core import enum + T_Result = typing.TypeVar("T_Result") -class StatusFd5Enum(str, enum.Enum): +class StatusFd5Enum(enum.StrEnum): SYNCING = "SYNCING" DONE = "DONE" FAILED = "FAILED" diff --git a/src/merge/resources/chat/types/type_enum.py b/src/merge/resources/chat/types/type_enum.py index 4ae2cabe..d569bf79 100644 --- a/src/merge/resources/chat/types/type_enum.py +++ b/src/merge/resources/chat/types/type_enum.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ....core import enum + T_Result = typing.TypeVar("T_Result") -class TypeEnum(str, enum.Enum): +class TypeEnum(enum.StrEnum): PRIVATE_INTERNAL = "PRIVATE_INTERNAL" PRIVATE_EXTERNAL = "PRIVATE_EXTERNAL" PUBLIC_INTERNAL = "PUBLIC_INTERNAL" diff --git a/src/merge/resources/chat/types/user.py b/src/merge/resources/chat/types/user.py index 4c08fc66..7c7cc901 100644 --- a/src/merge/resources/chat/types/user.py +++ b/src/merge/resources/chat/types/user.py @@ -97,7 +97,8 @@ class Config: extra = pydantic.Extra.allow -from .group import Group # noqa: E402, F401, I001 -from .user_groups_item import UserGroupsItem # noqa: E402, F401, I001 +from .group import Group # noqa: E402, I001 +from .group_users_item import GroupUsersItem # noqa: E402, I001 +from .user_groups_item import UserGroupsItem # noqa: E402, I001 -update_forward_refs(User) +update_forward_refs(User, Group=Group, GroupUsersItem=GroupUsersItem, UserGroupsItem=UserGroupsItem) diff --git a/src/merge/resources/chat/types/user_field_mappings.py b/src/merge/resources/chat/types/user_field_mappings.py index 374935d7..6a27272a 100644 --- a/src/merge/resources/chat/types/user_field_mappings.py +++ b/src/merge/resources/chat/types/user_field_mappings.py @@ -8,8 +8,8 @@ class UserFieldMappings(UncheckedBaseModel): - organization_defined_targets: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None - linked_account_defined_targets: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None + organization_defined_targets: typing.Optional[typing.Dict[str, typing.Any]] = None + linked_account_defined_targets: typing.Optional[typing.Dict[str, typing.Any]] = None if IS_PYDANTIC_V2: model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2 diff --git a/src/merge/resources/crm/__init__.py b/src/merge/resources/crm/__init__.py index 07d3d95a..7381a0d1 100644 --- a/src/merge/resources/crm/__init__.py +++ b/src/merge/resources/crm/__init__.py @@ -600,8 +600,10 @@ def __getattr__(attr_name: str) -> typing.Any: raise AttributeError(f"No {attr_name} found in _dynamic_imports for module name -> {__name__}") try: module = import_module(module_name, __package__) - result = getattr(module, attr_name) - return result + if module_name == f".{attr_name}": + return module + else: + return getattr(module, attr_name) except ImportError as e: raise ImportError(f"Failed to import {attr_name} from {module_name}: {e}") from e except AttributeError as e: diff --git a/src/merge/resources/crm/resources/__init__.py b/src/merge/resources/crm/resources/__init__.py index c7752e72..7eda442f 100644 --- a/src/merge/resources/crm/resources/__init__.py +++ b/src/merge/resources/crm/resources/__init__.py @@ -71,37 +71,37 @@ "OpportunitiesRetrieveRequestExpandItem": ".opportunities", "TasksListRequestExpandItem": ".tasks", "TasksRetrieveRequestExpandItem": ".tasks", - "account_details": ".", - "account_token": ".", - "accounts": ".", - "association_types": ".", - "associations": ".", - "async_passthrough": ".", - "audit_trail": ".", - "available_actions": ".", - "contacts": ".", - "custom_object_classes": ".", - "custom_objects": ".", - "delete_account": ".", - "engagement_types": ".", - "engagements": ".", - "field_mapping": ".", - "force_resync": ".", - "generate_key": ".", - "issues": ".", - "leads": ".", - "link_token": ".", - "linked_accounts": ".", - "notes": ".", - "opportunities": ".", - "passthrough": ".", - "regenerate_key": ".", - "scopes": ".", - "stages": ".", - "sync_status": ".", - "tasks": ".", - "users": ".", - "webhook_receivers": ".", + "account_details": ".account_details", + "account_token": ".account_token", + "accounts": ".accounts", + "association_types": ".association_types", + "associations": ".associations", + "async_passthrough": ".async_passthrough", + "audit_trail": ".audit_trail", + "available_actions": ".available_actions", + "contacts": ".contacts", + "custom_object_classes": ".custom_object_classes", + "custom_objects": ".custom_objects", + "delete_account": ".delete_account", + "engagement_types": ".engagement_types", + "engagements": ".engagements", + "field_mapping": ".field_mapping", + "force_resync": ".force_resync", + "generate_key": ".generate_key", + "issues": ".issues", + "leads": ".leads", + "link_token": ".link_token", + "linked_accounts": ".linked_accounts", + "notes": ".notes", + "opportunities": ".opportunities", + "passthrough": ".passthrough", + "regenerate_key": ".regenerate_key", + "scopes": ".scopes", + "stages": ".stages", + "sync_status": ".sync_status", + "tasks": ".tasks", + "users": ".users", + "webhook_receivers": ".webhook_receivers", } @@ -111,8 +111,10 @@ def __getattr__(attr_name: str) -> typing.Any: raise AttributeError(f"No {attr_name} found in _dynamic_imports for module name -> {__name__}") try: module = import_module(module_name, __package__) - result = getattr(module, attr_name) - return result + if module_name == f".{attr_name}": + return module + else: + return getattr(module, attr_name) except ImportError as e: raise ImportError(f"Failed to import {attr_name} from {module_name}: {e}") from e except AttributeError as e: diff --git a/src/merge/resources/crm/resources/account_details/raw_client.py b/src/merge/resources/crm/resources/account_details/raw_client.py index 3f119c05..ea9b7ba4 100644 --- a/src/merge/resources/crm/resources/account_details/raw_client.py +++ b/src/merge/resources/crm/resources/account_details/raw_client.py @@ -6,9 +6,11 @@ from .....core.api_error import ApiError from .....core.client_wrapper import AsyncClientWrapper, SyncClientWrapper from .....core.http_response import AsyncHttpResponse, HttpResponse +from .....core.parse_error import ParsingError from .....core.request_options import RequestOptions from .....core.unchecked_base_model import construct_type from ...types.account_details import AccountDetails +from pydantic import ValidationError class RawAccountDetailsClient: @@ -47,6 +49,10 @@ def retrieve(self, *, request_options: typing.Optional[RequestOptions] = None) - _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) @@ -88,4 +94,8 @@ async def retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) diff --git a/src/merge/resources/crm/resources/account_token/raw_client.py b/src/merge/resources/crm/resources/account_token/raw_client.py index c7cb3d38..d0828e72 100644 --- a/src/merge/resources/crm/resources/account_token/raw_client.py +++ b/src/merge/resources/crm/resources/account_token/raw_client.py @@ -7,10 +7,12 @@ from .....core.client_wrapper import AsyncClientWrapper, SyncClientWrapper from .....core.http_response import AsyncHttpResponse, HttpResponse from .....core.jsonable_encoder import jsonable_encoder +from .....core.parse_error import ParsingError from .....core.request_options import RequestOptions from .....core.unchecked_base_model import construct_type from ...types.account_token import AccountToken from ...types.regenerate_account_token import RegenerateAccountToken +from pydantic import ValidationError class RawAccountTokenClient: @@ -53,6 +55,10 @@ def retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) def regenerate_create( @@ -89,6 +95,10 @@ def regenerate_create( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) @@ -132,6 +142,10 @@ async def retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) async def regenerate_create( @@ -168,4 +182,8 @@ async def regenerate_create( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) diff --git a/src/merge/resources/crm/resources/accounts/raw_client.py b/src/merge/resources/crm/resources/accounts/raw_client.py index e070f3c0..18f5199b 100644 --- a/src/merge/resources/crm/resources/accounts/raw_client.py +++ b/src/merge/resources/crm/resources/accounts/raw_client.py @@ -9,6 +9,7 @@ from .....core.datetime_utils import serialize_datetime from .....core.http_response import AsyncHttpResponse, HttpResponse from .....core.jsonable_encoder import jsonable_encoder +from .....core.parse_error import ParsingError from .....core.request_options import RequestOptions from .....core.unchecked_base_model import construct_type from ...types.account import Account @@ -18,6 +19,7 @@ from ...types.paginated_account_list import PaginatedAccountList from ...types.paginated_remote_field_class_list import PaginatedRemoteFieldClassList from ...types.patched_account_request import PatchedAccountRequest +from pydantic import ValidationError # this is used as the default value for optional parameters OMIT = typing.cast(typing.Any, ...) @@ -135,6 +137,10 @@ def list( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) def create( @@ -195,6 +201,10 @@ def create( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) def retrieve( @@ -258,6 +268,10 @@ def retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) def partial_update( @@ -321,6 +335,10 @@ def partial_update( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) def meta_patch_retrieve( @@ -359,6 +377,10 @@ def meta_patch_retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) def meta_post_retrieve( @@ -395,6 +417,10 @@ def meta_post_retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) def remote_field_classes_list( @@ -475,6 +501,10 @@ def remote_field_classes_list( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) @@ -590,6 +620,10 @@ async def list( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) async def create( @@ -650,6 +684,10 @@ async def create( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) async def retrieve( @@ -713,6 +751,10 @@ async def retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) async def partial_update( @@ -776,6 +818,10 @@ async def partial_update( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) async def meta_patch_retrieve( @@ -814,6 +860,10 @@ async def meta_patch_retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) async def meta_post_retrieve( @@ -850,6 +900,10 @@ async def meta_post_retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) async def remote_field_classes_list( @@ -930,4 +984,8 @@ async def remote_field_classes_list( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) diff --git a/src/merge/resources/crm/resources/association_types/raw_client.py b/src/merge/resources/crm/resources/association_types/raw_client.py index 666675d2..39684d52 100644 --- a/src/merge/resources/crm/resources/association_types/raw_client.py +++ b/src/merge/resources/crm/resources/association_types/raw_client.py @@ -9,6 +9,7 @@ from .....core.datetime_utils import serialize_datetime from .....core.http_response import AsyncHttpResponse, HttpResponse from .....core.jsonable_encoder import jsonable_encoder +from .....core.parse_error import ParsingError from .....core.request_options import RequestOptions from .....core.unchecked_base_model import construct_type from ...types.association_type import AssociationType @@ -16,6 +17,7 @@ from ...types.crm_association_type_response import CrmAssociationTypeResponse from ...types.meta_response import MetaResponse from ...types.paginated_association_type_list import PaginatedAssociationTypeList +from pydantic import ValidationError # this is used as the default value for optional parameters OMIT = typing.cast(typing.Any, ...) @@ -125,6 +127,10 @@ def custom_object_classes_association_types_list( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) def custom_object_classes_association_types_create( @@ -188,6 +194,10 @@ def custom_object_classes_association_types_create( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) def custom_object_classes_association_types_retrieve( @@ -253,6 +263,10 @@ def custom_object_classes_association_types_retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) def custom_object_classes_association_types_meta_post_retrieve( @@ -291,6 +305,10 @@ def custom_object_classes_association_types_meta_post_retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) @@ -398,6 +416,10 @@ async def custom_object_classes_association_types_list( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) async def custom_object_classes_association_types_create( @@ -461,6 +483,10 @@ async def custom_object_classes_association_types_create( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) async def custom_object_classes_association_types_retrieve( @@ -526,6 +552,10 @@ async def custom_object_classes_association_types_retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) async def custom_object_classes_association_types_meta_post_retrieve( @@ -564,4 +594,8 @@ async def custom_object_classes_association_types_meta_post_retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) diff --git a/src/merge/resources/crm/resources/associations/raw_client.py b/src/merge/resources/crm/resources/associations/raw_client.py index 7ebdb493..98053db5 100644 --- a/src/merge/resources/crm/resources/associations/raw_client.py +++ b/src/merge/resources/crm/resources/associations/raw_client.py @@ -9,10 +9,12 @@ from .....core.datetime_utils import serialize_datetime from .....core.http_response import AsyncHttpResponse, HttpResponse from .....core.jsonable_encoder import jsonable_encoder +from .....core.parse_error import ParsingError from .....core.request_options import RequestOptions from .....core.unchecked_base_model import construct_type from ...types.association import Association from ...types.paginated_association_list import PaginatedAssociationList +from pydantic import ValidationError class RawAssociationsClient: @@ -125,6 +127,10 @@ def custom_object_classes_custom_objects_associations_list( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) def custom_object_classes_custom_objects_associations_update( @@ -190,6 +196,10 @@ def custom_object_classes_custom_objects_associations_update( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) @@ -303,6 +313,10 @@ async def custom_object_classes_custom_objects_associations_list( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) async def custom_object_classes_custom_objects_associations_update( @@ -368,4 +382,8 @@ async def custom_object_classes_custom_objects_associations_update( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) diff --git a/src/merge/resources/crm/resources/async_passthrough/__init__.py b/src/merge/resources/crm/resources/async_passthrough/__init__.py index 375c7953..11090986 100644 --- a/src/merge/resources/crm/resources/async_passthrough/__init__.py +++ b/src/merge/resources/crm/resources/async_passthrough/__init__.py @@ -16,8 +16,10 @@ def __getattr__(attr_name: str) -> typing.Any: raise AttributeError(f"No {attr_name} found in _dynamic_imports for module name -> {__name__}") try: module = import_module(module_name, __package__) - result = getattr(module, attr_name) - return result + if module_name == f".{attr_name}": + return module + else: + return getattr(module, attr_name) except ImportError as e: raise ImportError(f"Failed to import {attr_name} from {module_name}: {e}") from e except AttributeError as e: diff --git a/src/merge/resources/crm/resources/async_passthrough/raw_client.py b/src/merge/resources/crm/resources/async_passthrough/raw_client.py index cfcc8c38..8c22295e 100644 --- a/src/merge/resources/crm/resources/async_passthrough/raw_client.py +++ b/src/merge/resources/crm/resources/async_passthrough/raw_client.py @@ -7,11 +7,13 @@ from .....core.client_wrapper import AsyncClientWrapper, SyncClientWrapper from .....core.http_response import AsyncHttpResponse, HttpResponse from .....core.jsonable_encoder import jsonable_encoder +from .....core.parse_error import ParsingError from .....core.request_options import RequestOptions from .....core.unchecked_base_model import construct_type from ...types.async_passthrough_reciept import AsyncPassthroughReciept from ...types.data_passthrough_request import DataPassthroughRequest from .types.async_passthrough_retrieve_response import AsyncPassthroughRetrieveResponse +from pydantic import ValidationError # this is used as the default value for optional parameters OMIT = typing.cast(typing.Any, ...) @@ -62,6 +64,10 @@ def create( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) def retrieve( @@ -100,6 +106,10 @@ def retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) @@ -148,6 +158,10 @@ async def create( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) async def retrieve( @@ -186,4 +200,8 @@ async def retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) diff --git a/src/merge/resources/crm/resources/async_passthrough/types/__init__.py b/src/merge/resources/crm/resources/async_passthrough/types/__init__.py index f6e9bec9..dc335400 100644 --- a/src/merge/resources/crm/resources/async_passthrough/types/__init__.py +++ b/src/merge/resources/crm/resources/async_passthrough/types/__init__.py @@ -16,8 +16,10 @@ def __getattr__(attr_name: str) -> typing.Any: raise AttributeError(f"No {attr_name} found in _dynamic_imports for module name -> {__name__}") try: module = import_module(module_name, __package__) - result = getattr(module, attr_name) - return result + if module_name == f".{attr_name}": + return module + else: + return getattr(module, attr_name) except ImportError as e: raise ImportError(f"Failed to import {attr_name} from {module_name}: {e}") from e except AttributeError as e: diff --git a/src/merge/resources/crm/resources/audit_trail/raw_client.py b/src/merge/resources/crm/resources/audit_trail/raw_client.py index fa5db2d4..f1c38b35 100644 --- a/src/merge/resources/crm/resources/audit_trail/raw_client.py +++ b/src/merge/resources/crm/resources/audit_trail/raw_client.py @@ -6,9 +6,11 @@ from .....core.api_error import ApiError from .....core.client_wrapper import AsyncClientWrapper, SyncClientWrapper from .....core.http_response import AsyncHttpResponse, HttpResponse +from .....core.parse_error import ParsingError from .....core.request_options import RequestOptions from .....core.unchecked_base_model import construct_type from ...types.paginated_audit_log_event_list import PaginatedAuditLogEventList +from pydantic import ValidationError class RawAuditTrailClient: @@ -83,6 +85,10 @@ def list( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) @@ -158,4 +164,8 @@ async def list( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) diff --git a/src/merge/resources/crm/resources/available_actions/raw_client.py b/src/merge/resources/crm/resources/available_actions/raw_client.py index 43d6bb17..65b3cdea 100644 --- a/src/merge/resources/crm/resources/available_actions/raw_client.py +++ b/src/merge/resources/crm/resources/available_actions/raw_client.py @@ -6,9 +6,11 @@ from .....core.api_error import ApiError from .....core.client_wrapper import AsyncClientWrapper, SyncClientWrapper from .....core.http_response import AsyncHttpResponse, HttpResponse +from .....core.parse_error import ParsingError from .....core.request_options import RequestOptions from .....core.unchecked_base_model import construct_type from ...types.available_actions import AvailableActions +from pydantic import ValidationError class RawAvailableActionsClient: @@ -47,6 +49,10 @@ def retrieve(self, *, request_options: typing.Optional[RequestOptions] = None) - _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) @@ -88,4 +94,8 @@ async def retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) diff --git a/src/merge/resources/crm/resources/contacts/__init__.py b/src/merge/resources/crm/resources/contacts/__init__.py index 2c1bb6ab..a361a8ca 100644 --- a/src/merge/resources/crm/resources/contacts/__init__.py +++ b/src/merge/resources/crm/resources/contacts/__init__.py @@ -19,8 +19,10 @@ def __getattr__(attr_name: str) -> typing.Any: raise AttributeError(f"No {attr_name} found in _dynamic_imports for module name -> {__name__}") try: module = import_module(module_name, __package__) - result = getattr(module, attr_name) - return result + if module_name == f".{attr_name}": + return module + else: + return getattr(module, attr_name) except ImportError as e: raise ImportError(f"Failed to import {attr_name} from {module_name}: {e}") from e except AttributeError as e: diff --git a/src/merge/resources/crm/resources/contacts/raw_client.py b/src/merge/resources/crm/resources/contacts/raw_client.py index 6af7dc7a..ac4c2dd8 100644 --- a/src/merge/resources/crm/resources/contacts/raw_client.py +++ b/src/merge/resources/crm/resources/contacts/raw_client.py @@ -9,6 +9,7 @@ from .....core.datetime_utils import serialize_datetime from .....core.http_response import AsyncHttpResponse, HttpResponse from .....core.jsonable_encoder import jsonable_encoder +from .....core.parse_error import ParsingError from .....core.request_options import RequestOptions from .....core.unchecked_base_model import construct_type from ...types.contact import Contact @@ -21,6 +22,7 @@ from ...types.patched_contact_request import PatchedContactRequest from .types.contacts_list_request_expand_item import ContactsListRequestExpandItem from .types.contacts_retrieve_request_expand_item import ContactsRetrieveRequestExpandItem +from pydantic import ValidationError # this is used as the default value for optional parameters OMIT = typing.cast(typing.Any, ...) @@ -145,6 +147,10 @@ def list( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) def create( @@ -205,6 +211,10 @@ def create( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) def retrieve( @@ -270,6 +280,10 @@ def retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) def partial_update( @@ -333,6 +347,10 @@ def partial_update( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) def ignore_create( @@ -374,6 +392,10 @@ def ignore_create( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) def meta_patch_retrieve( @@ -412,6 +434,10 @@ def meta_patch_retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) def meta_post_retrieve( @@ -448,6 +474,10 @@ def meta_post_retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) def remote_field_classes_list( @@ -528,6 +558,10 @@ def remote_field_classes_list( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) @@ -650,6 +684,10 @@ async def list( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) async def create( @@ -710,6 +748,10 @@ async def create( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) async def retrieve( @@ -775,6 +817,10 @@ async def retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) async def partial_update( @@ -838,6 +884,10 @@ async def partial_update( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) async def ignore_create( @@ -879,6 +929,10 @@ async def ignore_create( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) async def meta_patch_retrieve( @@ -917,6 +971,10 @@ async def meta_patch_retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) async def meta_post_retrieve( @@ -953,6 +1011,10 @@ async def meta_post_retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) async def remote_field_classes_list( @@ -1033,4 +1095,8 @@ async def remote_field_classes_list( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) diff --git a/src/merge/resources/crm/resources/contacts/types/__init__.py b/src/merge/resources/crm/resources/contacts/types/__init__.py index 45a632d4..0aa692b4 100644 --- a/src/merge/resources/crm/resources/contacts/types/__init__.py +++ b/src/merge/resources/crm/resources/contacts/types/__init__.py @@ -20,8 +20,10 @@ def __getattr__(attr_name: str) -> typing.Any: raise AttributeError(f"No {attr_name} found in _dynamic_imports for module name -> {__name__}") try: module = import_module(module_name, __package__) - result = getattr(module, attr_name) - return result + if module_name == f".{attr_name}": + return module + else: + return getattr(module, attr_name) except ImportError as e: raise ImportError(f"Failed to import {attr_name} from {module_name}: {e}") from e except AttributeError as e: diff --git a/src/merge/resources/crm/resources/contacts/types/contacts_list_request_expand_item.py b/src/merge/resources/crm/resources/contacts/types/contacts_list_request_expand_item.py index 535fbae5..3d519c2a 100644 --- a/src/merge/resources/crm/resources/contacts/types/contacts_list_request_expand_item.py +++ b/src/merge/resources/crm/resources/contacts/types/contacts_list_request_expand_item.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ......core import enum + T_Result = typing.TypeVar("T_Result") -class ContactsListRequestExpandItem(str, enum.Enum): +class ContactsListRequestExpandItem(enum.StrEnum): ACCOUNT = "account" OWNER = "owner" diff --git a/src/merge/resources/crm/resources/contacts/types/contacts_retrieve_request_expand_item.py b/src/merge/resources/crm/resources/contacts/types/contacts_retrieve_request_expand_item.py index bacd3801..206fba86 100644 --- a/src/merge/resources/crm/resources/contacts/types/contacts_retrieve_request_expand_item.py +++ b/src/merge/resources/crm/resources/contacts/types/contacts_retrieve_request_expand_item.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ......core import enum + T_Result = typing.TypeVar("T_Result") -class ContactsRetrieveRequestExpandItem(str, enum.Enum): +class ContactsRetrieveRequestExpandItem(enum.StrEnum): ACCOUNT = "account" OWNER = "owner" diff --git a/src/merge/resources/crm/resources/custom_object_classes/raw_client.py b/src/merge/resources/crm/resources/custom_object_classes/raw_client.py index 2e56fb9c..6bede609 100644 --- a/src/merge/resources/crm/resources/custom_object_classes/raw_client.py +++ b/src/merge/resources/crm/resources/custom_object_classes/raw_client.py @@ -9,10 +9,12 @@ from .....core.datetime_utils import serialize_datetime from .....core.http_response import AsyncHttpResponse, HttpResponse from .....core.jsonable_encoder import jsonable_encoder +from .....core.parse_error import ParsingError from .....core.request_options import RequestOptions from .....core.unchecked_base_model import construct_type from ...types.custom_object_class import CustomObjectClass from ...types.paginated_custom_object_class_list import PaginatedCustomObjectClassList +from pydantic import ValidationError class RawCustomObjectClassesClient: @@ -114,6 +116,10 @@ def list( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) def retrieve( @@ -174,6 +180,10 @@ def retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) @@ -276,6 +286,10 @@ async def list( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) async def retrieve( @@ -336,4 +350,8 @@ async def retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) diff --git a/src/merge/resources/crm/resources/custom_objects/raw_client.py b/src/merge/resources/crm/resources/custom_objects/raw_client.py index e9591c5e..fd38ba59 100644 --- a/src/merge/resources/crm/resources/custom_objects/raw_client.py +++ b/src/merge/resources/crm/resources/custom_objects/raw_client.py @@ -9,6 +9,7 @@ from .....core.datetime_utils import serialize_datetime from .....core.http_response import AsyncHttpResponse, HttpResponse from .....core.jsonable_encoder import jsonable_encoder +from .....core.parse_error import ParsingError from .....core.request_options import RequestOptions from .....core.unchecked_base_model import construct_type from ...types.crm_custom_object_response import CrmCustomObjectResponse @@ -17,6 +18,7 @@ from ...types.meta_response import MetaResponse from ...types.paginated_custom_object_list import PaginatedCustomObjectList from ...types.paginated_remote_field_class_list import PaginatedRemoteFieldClassList +from pydantic import ValidationError # this is used as the default value for optional parameters OMIT = typing.cast(typing.Any, ...) @@ -122,6 +124,10 @@ def custom_object_classes_custom_objects_list( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) def custom_object_classes_custom_objects_create( @@ -185,6 +191,10 @@ def custom_object_classes_custom_objects_create( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) def custom_object_classes_custom_objects_retrieve( @@ -246,6 +256,10 @@ def custom_object_classes_custom_objects_retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) def custom_object_classes_custom_objects_meta_post_retrieve( @@ -284,6 +298,10 @@ def custom_object_classes_custom_objects_meta_post_retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) def custom_object_classes_custom_objects_remote_field_classes_list( @@ -364,6 +382,10 @@ def custom_object_classes_custom_objects_remote_field_classes_list( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) @@ -467,6 +489,10 @@ async def custom_object_classes_custom_objects_list( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) async def custom_object_classes_custom_objects_create( @@ -530,6 +556,10 @@ async def custom_object_classes_custom_objects_create( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) async def custom_object_classes_custom_objects_retrieve( @@ -591,6 +621,10 @@ async def custom_object_classes_custom_objects_retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) async def custom_object_classes_custom_objects_meta_post_retrieve( @@ -629,6 +663,10 @@ async def custom_object_classes_custom_objects_meta_post_retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) async def custom_object_classes_custom_objects_remote_field_classes_list( @@ -709,4 +747,8 @@ async def custom_object_classes_custom_objects_remote_field_classes_list( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) diff --git a/src/merge/resources/crm/resources/delete_account/raw_client.py b/src/merge/resources/crm/resources/delete_account/raw_client.py index ea9a0ba6..aea32dba 100644 --- a/src/merge/resources/crm/resources/delete_account/raw_client.py +++ b/src/merge/resources/crm/resources/delete_account/raw_client.py @@ -6,7 +6,9 @@ from .....core.api_error import ApiError from .....core.client_wrapper import AsyncClientWrapper, SyncClientWrapper from .....core.http_response import AsyncHttpResponse, HttpResponse +from .....core.parse_error import ParsingError from .....core.request_options import RequestOptions +from pydantic import ValidationError class RawDeleteAccountClient: @@ -37,6 +39,10 @@ def delete(self, *, request_options: typing.Optional[RequestOptions] = None) -> _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) @@ -68,4 +74,8 @@ async def delete(self, *, request_options: typing.Optional[RequestOptions] = Non _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) diff --git a/src/merge/resources/crm/resources/engagement_types/raw_client.py b/src/merge/resources/crm/resources/engagement_types/raw_client.py index 420333d6..83b7adf9 100644 --- a/src/merge/resources/crm/resources/engagement_types/raw_client.py +++ b/src/merge/resources/crm/resources/engagement_types/raw_client.py @@ -9,11 +9,13 @@ from .....core.datetime_utils import serialize_datetime from .....core.http_response import AsyncHttpResponse, HttpResponse from .....core.jsonable_encoder import jsonable_encoder +from .....core.parse_error import ParsingError from .....core.request_options import RequestOptions from .....core.unchecked_base_model import construct_type from ...types.engagement_type import EngagementType from ...types.paginated_engagement_type_list import PaginatedEngagementTypeList from ...types.paginated_remote_field_class_list import PaginatedRemoteFieldClassList +from pydantic import ValidationError class RawEngagementTypesClient: @@ -113,6 +115,10 @@ def list( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) def retrieve( @@ -171,6 +177,10 @@ def retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) def remote_field_classes_list( @@ -251,6 +261,10 @@ def remote_field_classes_list( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) @@ -351,6 +365,10 @@ async def list( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) async def retrieve( @@ -409,6 +427,10 @@ async def retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) async def remote_field_classes_list( @@ -489,4 +511,8 @@ async def remote_field_classes_list( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) diff --git a/src/merge/resources/crm/resources/engagements/__init__.py b/src/merge/resources/crm/resources/engagements/__init__.py index 26d23f3e..526c1c1a 100644 --- a/src/merge/resources/crm/resources/engagements/__init__.py +++ b/src/merge/resources/crm/resources/engagements/__init__.py @@ -19,8 +19,10 @@ def __getattr__(attr_name: str) -> typing.Any: raise AttributeError(f"No {attr_name} found in _dynamic_imports for module name -> {__name__}") try: module = import_module(module_name, __package__) - result = getattr(module, attr_name) - return result + if module_name == f".{attr_name}": + return module + else: + return getattr(module, attr_name) except ImportError as e: raise ImportError(f"Failed to import {attr_name} from {module_name}: {e}") from e except AttributeError as e: diff --git a/src/merge/resources/crm/resources/engagements/raw_client.py b/src/merge/resources/crm/resources/engagements/raw_client.py index d119a9c7..5927521e 100644 --- a/src/merge/resources/crm/resources/engagements/raw_client.py +++ b/src/merge/resources/crm/resources/engagements/raw_client.py @@ -9,6 +9,7 @@ from .....core.datetime_utils import serialize_datetime from .....core.http_response import AsyncHttpResponse, HttpResponse from .....core.jsonable_encoder import jsonable_encoder +from .....core.parse_error import ParsingError from .....core.request_options import RequestOptions from .....core.unchecked_base_model import construct_type from ...types.engagement import Engagement @@ -20,6 +21,7 @@ from ...types.patched_engagement_request import PatchedEngagementRequest from .types.engagements_list_request_expand_item import EngagementsListRequestExpandItem from .types.engagements_retrieve_request_expand_item import EngagementsRetrieveRequestExpandItem +from pydantic import ValidationError # this is used as the default value for optional parameters OMIT = typing.cast(typing.Any, ...) @@ -139,6 +141,10 @@ def list( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) def create( @@ -199,6 +205,10 @@ def create( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) def retrieve( @@ -264,6 +274,10 @@ def retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) def partial_update( @@ -327,6 +341,10 @@ def partial_update( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) def meta_patch_retrieve( @@ -365,6 +383,10 @@ def meta_patch_retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) def meta_post_retrieve( @@ -401,6 +423,10 @@ def meta_post_retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) def remote_field_classes_list( @@ -481,6 +507,10 @@ def remote_field_classes_list( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) @@ -598,6 +628,10 @@ async def list( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) async def create( @@ -658,6 +692,10 @@ async def create( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) async def retrieve( @@ -723,6 +761,10 @@ async def retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) async def partial_update( @@ -786,6 +828,10 @@ async def partial_update( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) async def meta_patch_retrieve( @@ -824,6 +870,10 @@ async def meta_patch_retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) async def meta_post_retrieve( @@ -860,6 +910,10 @@ async def meta_post_retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) async def remote_field_classes_list( @@ -940,4 +994,8 @@ async def remote_field_classes_list( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) diff --git a/src/merge/resources/crm/resources/engagements/types/__init__.py b/src/merge/resources/crm/resources/engagements/types/__init__.py index 8bcded71..95555c3d 100644 --- a/src/merge/resources/crm/resources/engagements/types/__init__.py +++ b/src/merge/resources/crm/resources/engagements/types/__init__.py @@ -20,8 +20,10 @@ def __getattr__(attr_name: str) -> typing.Any: raise AttributeError(f"No {attr_name} found in _dynamic_imports for module name -> {__name__}") try: module = import_module(module_name, __package__) - result = getattr(module, attr_name) - return result + if module_name == f".{attr_name}": + return module + else: + return getattr(module, attr_name) except ImportError as e: raise ImportError(f"Failed to import {attr_name} from {module_name}: {e}") from e except AttributeError as e: diff --git a/src/merge/resources/crm/resources/engagements/types/engagements_list_request_expand_item.py b/src/merge/resources/crm/resources/engagements/types/engagements_list_request_expand_item.py index 436161b5..e7bba1c4 100644 --- a/src/merge/resources/crm/resources/engagements/types/engagements_list_request_expand_item.py +++ b/src/merge/resources/crm/resources/engagements/types/engagements_list_request_expand_item.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ......core import enum + T_Result = typing.TypeVar("T_Result") -class EngagementsListRequestExpandItem(str, enum.Enum): +class EngagementsListRequestExpandItem(enum.StrEnum): ACCOUNT = "account" CONTACTS = "contacts" ENGAGEMENT_TYPE = "engagement_type" diff --git a/src/merge/resources/crm/resources/engagements/types/engagements_retrieve_request_expand_item.py b/src/merge/resources/crm/resources/engagements/types/engagements_retrieve_request_expand_item.py index 1232f6e3..4546651f 100644 --- a/src/merge/resources/crm/resources/engagements/types/engagements_retrieve_request_expand_item.py +++ b/src/merge/resources/crm/resources/engagements/types/engagements_retrieve_request_expand_item.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ......core import enum + T_Result = typing.TypeVar("T_Result") -class EngagementsRetrieveRequestExpandItem(str, enum.Enum): +class EngagementsRetrieveRequestExpandItem(enum.StrEnum): ACCOUNT = "account" CONTACTS = "contacts" ENGAGEMENT_TYPE = "engagement_type" diff --git a/src/merge/resources/crm/resources/field_mapping/client.py b/src/merge/resources/crm/resources/field_mapping/client.py index 6dc22cea..c83f9f5e 100644 --- a/src/merge/resources/crm/resources/field_mapping/client.py +++ b/src/merge/resources/crm/resources/field_mapping/client.py @@ -73,7 +73,7 @@ def field_mappings_create( *, target_field_name: str, target_field_description: str, - remote_field_traversal_path: typing.Sequence[typing.Optional[typing.Any]], + remote_field_traversal_path: typing.Sequence[typing.Any], remote_method: str, remote_url_path: str, common_model_name: str, @@ -93,7 +93,7 @@ def field_mappings_create( target_field_description : str The description of the target field you want this remote field to map to. - remote_field_traversal_path : typing.Sequence[typing.Optional[typing.Any]] + remote_field_traversal_path : typing.Sequence[typing.Any] The field traversal path of the remote field listed when you hit the GET /remote-fields endpoint. remote_method : str @@ -193,7 +193,7 @@ def field_mappings_partial_update( field_mapping_id: str, *, remote_data_iteration_count: typing.Optional[int] = None, - remote_field_traversal_path: typing.Optional[typing.Sequence[typing.Optional[typing.Any]]] = OMIT, + remote_field_traversal_path: typing.Optional[typing.Sequence[typing.Any]] = OMIT, remote_method: typing.Optional[str] = OMIT, remote_url_path: typing.Optional[str] = OMIT, jmes_path: typing.Optional[str] = OMIT, @@ -209,7 +209,7 @@ def field_mappings_partial_update( remote_data_iteration_count : typing.Optional[int] Number of common model instances to iterate through when fetching remote data for field mappings. Defaults to 250 if not provided. - remote_field_traversal_path : typing.Optional[typing.Sequence[typing.Optional[typing.Any]]] + remote_field_traversal_path : typing.Optional[typing.Sequence[typing.Any]] The field traversal path of the remote field listed when you hit the GET /remote-fields endpoint. remote_method : typing.Optional[str] @@ -394,7 +394,7 @@ async def field_mappings_create( *, target_field_name: str, target_field_description: str, - remote_field_traversal_path: typing.Sequence[typing.Optional[typing.Any]], + remote_field_traversal_path: typing.Sequence[typing.Any], remote_method: str, remote_url_path: str, common_model_name: str, @@ -414,7 +414,7 @@ async def field_mappings_create( target_field_description : str The description of the target field you want this remote field to map to. - remote_field_traversal_path : typing.Sequence[typing.Optional[typing.Any]] + remote_field_traversal_path : typing.Sequence[typing.Any] The field traversal path of the remote field listed when you hit the GET /remote-fields endpoint. remote_method : str @@ -530,7 +530,7 @@ async def field_mappings_partial_update( field_mapping_id: str, *, remote_data_iteration_count: typing.Optional[int] = None, - remote_field_traversal_path: typing.Optional[typing.Sequence[typing.Optional[typing.Any]]] = OMIT, + remote_field_traversal_path: typing.Optional[typing.Sequence[typing.Any]] = OMIT, remote_method: typing.Optional[str] = OMIT, remote_url_path: typing.Optional[str] = OMIT, jmes_path: typing.Optional[str] = OMIT, @@ -546,7 +546,7 @@ async def field_mappings_partial_update( remote_data_iteration_count : typing.Optional[int] Number of common model instances to iterate through when fetching remote data for field mappings. Defaults to 250 if not provided. - remote_field_traversal_path : typing.Optional[typing.Sequence[typing.Optional[typing.Any]]] + remote_field_traversal_path : typing.Optional[typing.Sequence[typing.Any]] The field traversal path of the remote field listed when you hit the GET /remote-fields endpoint. remote_method : typing.Optional[str] diff --git a/src/merge/resources/crm/resources/field_mapping/raw_client.py b/src/merge/resources/crm/resources/field_mapping/raw_client.py index 0d5652ee..60ea9245 100644 --- a/src/merge/resources/crm/resources/field_mapping/raw_client.py +++ b/src/merge/resources/crm/resources/field_mapping/raw_client.py @@ -7,12 +7,14 @@ from .....core.client_wrapper import AsyncClientWrapper, SyncClientWrapper from .....core.http_response import AsyncHttpResponse, HttpResponse from .....core.jsonable_encoder import jsonable_encoder +from .....core.parse_error import ParsingError from .....core.request_options import RequestOptions from .....core.unchecked_base_model import construct_type from ...types.external_target_field_api_response import ExternalTargetFieldApiResponse from ...types.field_mapping_api_instance_response import FieldMappingApiInstanceResponse from ...types.field_mapping_instance_response import FieldMappingInstanceResponse from ...types.remote_field_api_response import RemoteFieldApiResponse +from pydantic import ValidationError # this is used as the default value for optional parameters OMIT = typing.cast(typing.Any, ...) @@ -65,6 +67,10 @@ def field_mappings_retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) def field_mappings_create( @@ -72,7 +78,7 @@ def field_mappings_create( *, target_field_name: str, target_field_description: str, - remote_field_traversal_path: typing.Sequence[typing.Optional[typing.Any]], + remote_field_traversal_path: typing.Sequence[typing.Any], remote_method: str, remote_url_path: str, common_model_name: str, @@ -92,7 +98,7 @@ def field_mappings_create( target_field_description : str The description of the target field you want this remote field to map to. - remote_field_traversal_path : typing.Sequence[typing.Optional[typing.Any]] + remote_field_traversal_path : typing.Sequence[typing.Any] The field traversal path of the remote field listed when you hit the GET /remote-fields endpoint. remote_method : str @@ -156,6 +162,10 @@ def field_mappings_create( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) def field_mappings_destroy( @@ -194,6 +204,10 @@ def field_mappings_destroy( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) def field_mappings_partial_update( @@ -201,7 +215,7 @@ def field_mappings_partial_update( field_mapping_id: str, *, remote_data_iteration_count: typing.Optional[int] = None, - remote_field_traversal_path: typing.Optional[typing.Sequence[typing.Optional[typing.Any]]] = OMIT, + remote_field_traversal_path: typing.Optional[typing.Sequence[typing.Any]] = OMIT, remote_method: typing.Optional[str] = OMIT, remote_url_path: typing.Optional[str] = OMIT, jmes_path: typing.Optional[str] = OMIT, @@ -217,7 +231,7 @@ def field_mappings_partial_update( remote_data_iteration_count : typing.Optional[int] Number of common model instances to iterate through when fetching remote data for field mappings. Defaults to 250 if not provided. - remote_field_traversal_path : typing.Optional[typing.Sequence[typing.Optional[typing.Any]]] + remote_field_traversal_path : typing.Optional[typing.Sequence[typing.Any]] The field traversal path of the remote field listed when you hit the GET /remote-fields endpoint. remote_method : typing.Optional[str] @@ -268,6 +282,10 @@ def field_mappings_partial_update( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) def remote_fields_retrieve( @@ -318,6 +336,10 @@ def remote_fields_retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) def target_fields_retrieve( @@ -354,6 +376,10 @@ def target_fields_retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) @@ -404,6 +430,10 @@ async def field_mappings_retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) async def field_mappings_create( @@ -411,7 +441,7 @@ async def field_mappings_create( *, target_field_name: str, target_field_description: str, - remote_field_traversal_path: typing.Sequence[typing.Optional[typing.Any]], + remote_field_traversal_path: typing.Sequence[typing.Any], remote_method: str, remote_url_path: str, common_model_name: str, @@ -431,7 +461,7 @@ async def field_mappings_create( target_field_description : str The description of the target field you want this remote field to map to. - remote_field_traversal_path : typing.Sequence[typing.Optional[typing.Any]] + remote_field_traversal_path : typing.Sequence[typing.Any] The field traversal path of the remote field listed when you hit the GET /remote-fields endpoint. remote_method : str @@ -495,6 +525,10 @@ async def field_mappings_create( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) async def field_mappings_destroy( @@ -533,6 +567,10 @@ async def field_mappings_destroy( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) async def field_mappings_partial_update( @@ -540,7 +578,7 @@ async def field_mappings_partial_update( field_mapping_id: str, *, remote_data_iteration_count: typing.Optional[int] = None, - remote_field_traversal_path: typing.Optional[typing.Sequence[typing.Optional[typing.Any]]] = OMIT, + remote_field_traversal_path: typing.Optional[typing.Sequence[typing.Any]] = OMIT, remote_method: typing.Optional[str] = OMIT, remote_url_path: typing.Optional[str] = OMIT, jmes_path: typing.Optional[str] = OMIT, @@ -556,7 +594,7 @@ async def field_mappings_partial_update( remote_data_iteration_count : typing.Optional[int] Number of common model instances to iterate through when fetching remote data for field mappings. Defaults to 250 if not provided. - remote_field_traversal_path : typing.Optional[typing.Sequence[typing.Optional[typing.Any]]] + remote_field_traversal_path : typing.Optional[typing.Sequence[typing.Any]] The field traversal path of the remote field listed when you hit the GET /remote-fields endpoint. remote_method : typing.Optional[str] @@ -607,6 +645,10 @@ async def field_mappings_partial_update( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) async def remote_fields_retrieve( @@ -657,6 +699,10 @@ async def remote_fields_retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) async def target_fields_retrieve( @@ -693,4 +739,8 @@ async def target_fields_retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) diff --git a/src/merge/resources/crm/resources/force_resync/raw_client.py b/src/merge/resources/crm/resources/force_resync/raw_client.py index 7f58564f..99b5cb01 100644 --- a/src/merge/resources/crm/resources/force_resync/raw_client.py +++ b/src/merge/resources/crm/resources/force_resync/raw_client.py @@ -6,9 +6,11 @@ from .....core.api_error import ApiError from .....core.client_wrapper import AsyncClientWrapper, SyncClientWrapper from .....core.http_response import AsyncHttpResponse, HttpResponse +from .....core.parse_error import ParsingError from .....core.request_options import RequestOptions from .....core.unchecked_base_model import construct_type from ...types.sync_status import SyncStatus +from pydantic import ValidationError class RawForceResyncClient: @@ -49,6 +51,10 @@ def sync_status_resync_create( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) @@ -90,4 +96,8 @@ async def sync_status_resync_create( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) diff --git a/src/merge/resources/crm/resources/generate_key/raw_client.py b/src/merge/resources/crm/resources/generate_key/raw_client.py index 9e1ed9cd..cdd41e16 100644 --- a/src/merge/resources/crm/resources/generate_key/raw_client.py +++ b/src/merge/resources/crm/resources/generate_key/raw_client.py @@ -6,9 +6,11 @@ from .....core.api_error import ApiError from .....core.client_wrapper import AsyncClientWrapper, SyncClientWrapper from .....core.http_response import AsyncHttpResponse, HttpResponse +from .....core.parse_error import ParsingError from .....core.request_options import RequestOptions from .....core.unchecked_base_model import construct_type from ...types.remote_key import RemoteKey +from pydantic import ValidationError # this is used as the default value for optional parameters OMIT = typing.cast(typing.Any, ...) @@ -60,6 +62,10 @@ def create(self, *, name: str, request_options: typing.Optional[RequestOptions] _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) @@ -111,4 +117,8 @@ async def create( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) diff --git a/src/merge/resources/crm/resources/issues/__init__.py b/src/merge/resources/crm/resources/issues/__init__.py index 3ca1094b..45b33fe1 100644 --- a/src/merge/resources/crm/resources/issues/__init__.py +++ b/src/merge/resources/crm/resources/issues/__init__.py @@ -16,8 +16,10 @@ def __getattr__(attr_name: str) -> typing.Any: raise AttributeError(f"No {attr_name} found in _dynamic_imports for module name -> {__name__}") try: module = import_module(module_name, __package__) - result = getattr(module, attr_name) - return result + if module_name == f".{attr_name}": + return module + else: + return getattr(module, attr_name) except ImportError as e: raise ImportError(f"Failed to import {attr_name} from {module_name}: {e}") from e except AttributeError as e: diff --git a/src/merge/resources/crm/resources/issues/raw_client.py b/src/merge/resources/crm/resources/issues/raw_client.py index 8a9bdd39..e1c80471 100644 --- a/src/merge/resources/crm/resources/issues/raw_client.py +++ b/src/merge/resources/crm/resources/issues/raw_client.py @@ -9,11 +9,13 @@ from .....core.datetime_utils import serialize_datetime from .....core.http_response import AsyncHttpResponse, HttpResponse from .....core.jsonable_encoder import jsonable_encoder +from .....core.parse_error import ParsingError from .....core.request_options import RequestOptions from .....core.unchecked_base_model import construct_type from ...types.issue import Issue from ...types.paginated_issue_list import PaginatedIssueList from .types.issues_list_request_status import IssuesListRequestStatus +from pydantic import ValidationError class RawIssuesClient: @@ -136,6 +138,10 @@ def list( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) def retrieve(self, id: str, *, request_options: typing.Optional[RequestOptions] = None) -> HttpResponse[Issue]: @@ -172,6 +178,10 @@ def retrieve(self, id: str, *, request_options: typing.Optional[RequestOptions] _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) @@ -295,6 +305,10 @@ async def list( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) async def retrieve( @@ -333,4 +347,8 @@ async def retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) diff --git a/src/merge/resources/crm/resources/issues/types/__init__.py b/src/merge/resources/crm/resources/issues/types/__init__.py index 88fbf977..5e097583 100644 --- a/src/merge/resources/crm/resources/issues/types/__init__.py +++ b/src/merge/resources/crm/resources/issues/types/__init__.py @@ -16,8 +16,10 @@ def __getattr__(attr_name: str) -> typing.Any: raise AttributeError(f"No {attr_name} found in _dynamic_imports for module name -> {__name__}") try: module = import_module(module_name, __package__) - result = getattr(module, attr_name) - return result + if module_name == f".{attr_name}": + return module + else: + return getattr(module, attr_name) except ImportError as e: raise ImportError(f"Failed to import {attr_name} from {module_name}: {e}") from e except AttributeError as e: diff --git a/src/merge/resources/crm/resources/issues/types/issues_list_request_status.py b/src/merge/resources/crm/resources/issues/types/issues_list_request_status.py index 2bd3521e..a61afdd0 100644 --- a/src/merge/resources/crm/resources/issues/types/issues_list_request_status.py +++ b/src/merge/resources/crm/resources/issues/types/issues_list_request_status.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ......core import enum + T_Result = typing.TypeVar("T_Result") -class IssuesListRequestStatus(str, enum.Enum): +class IssuesListRequestStatus(enum.StrEnum): ONGOING = "ONGOING" RESOLVED = "RESOLVED" diff --git a/src/merge/resources/crm/resources/leads/__init__.py b/src/merge/resources/crm/resources/leads/__init__.py index d12cf119..d7d10fed 100644 --- a/src/merge/resources/crm/resources/leads/__init__.py +++ b/src/merge/resources/crm/resources/leads/__init__.py @@ -19,8 +19,10 @@ def __getattr__(attr_name: str) -> typing.Any: raise AttributeError(f"No {attr_name} found in _dynamic_imports for module name -> {__name__}") try: module = import_module(module_name, __package__) - result = getattr(module, attr_name) - return result + if module_name == f".{attr_name}": + return module + else: + return getattr(module, attr_name) except ImportError as e: raise ImportError(f"Failed to import {attr_name} from {module_name}: {e}") from e except AttributeError as e: diff --git a/src/merge/resources/crm/resources/leads/raw_client.py b/src/merge/resources/crm/resources/leads/raw_client.py index 28c69dfc..0d6770cd 100644 --- a/src/merge/resources/crm/resources/leads/raw_client.py +++ b/src/merge/resources/crm/resources/leads/raw_client.py @@ -9,6 +9,7 @@ from .....core.datetime_utils import serialize_datetime from .....core.http_response import AsyncHttpResponse, HttpResponse from .....core.jsonable_encoder import jsonable_encoder +from .....core.parse_error import ParsingError from .....core.request_options import RequestOptions from .....core.unchecked_base_model import construct_type from ...types.lead import Lead @@ -19,6 +20,7 @@ from ...types.paginated_remote_field_class_list import PaginatedRemoteFieldClassList from .types.leads_list_request_expand_item import LeadsListRequestExpandItem from .types.leads_retrieve_request_expand_item import LeadsRetrieveRequestExpandItem +from pydantic import ValidationError # this is used as the default value for optional parameters OMIT = typing.cast(typing.Any, ...) @@ -153,6 +155,10 @@ def list( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) def create( @@ -213,6 +219,10 @@ def create( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) def retrieve( @@ -278,6 +288,10 @@ def retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) def meta_post_retrieve( @@ -314,6 +328,10 @@ def meta_post_retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) def remote_field_classes_list( @@ -394,6 +412,10 @@ def remote_field_classes_list( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) @@ -526,6 +548,10 @@ async def list( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) async def create( @@ -586,6 +612,10 @@ async def create( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) async def retrieve( @@ -651,6 +681,10 @@ async def retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) async def meta_post_retrieve( @@ -687,6 +721,10 @@ async def meta_post_retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) async def remote_field_classes_list( @@ -767,4 +805,8 @@ async def remote_field_classes_list( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) diff --git a/src/merge/resources/crm/resources/leads/types/__init__.py b/src/merge/resources/crm/resources/leads/types/__init__.py index d3af6e19..7109ede0 100644 --- a/src/merge/resources/crm/resources/leads/types/__init__.py +++ b/src/merge/resources/crm/resources/leads/types/__init__.py @@ -20,8 +20,10 @@ def __getattr__(attr_name: str) -> typing.Any: raise AttributeError(f"No {attr_name} found in _dynamic_imports for module name -> {__name__}") try: module = import_module(module_name, __package__) - result = getattr(module, attr_name) - return result + if module_name == f".{attr_name}": + return module + else: + return getattr(module, attr_name) except ImportError as e: raise ImportError(f"Failed to import {attr_name} from {module_name}: {e}") from e except AttributeError as e: diff --git a/src/merge/resources/crm/resources/leads/types/leads_list_request_expand_item.py b/src/merge/resources/crm/resources/leads/types/leads_list_request_expand_item.py index 386fe5db..59042f2f 100644 --- a/src/merge/resources/crm/resources/leads/types/leads_list_request_expand_item.py +++ b/src/merge/resources/crm/resources/leads/types/leads_list_request_expand_item.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ......core import enum + T_Result = typing.TypeVar("T_Result") -class LeadsListRequestExpandItem(str, enum.Enum): +class LeadsListRequestExpandItem(enum.StrEnum): CONVERTED_ACCOUNT = "converted_account" CONVERTED_CONTACT = "converted_contact" OWNER = "owner" diff --git a/src/merge/resources/crm/resources/leads/types/leads_retrieve_request_expand_item.py b/src/merge/resources/crm/resources/leads/types/leads_retrieve_request_expand_item.py index 19c71587..40ce9a16 100644 --- a/src/merge/resources/crm/resources/leads/types/leads_retrieve_request_expand_item.py +++ b/src/merge/resources/crm/resources/leads/types/leads_retrieve_request_expand_item.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ......core import enum + T_Result = typing.TypeVar("T_Result") -class LeadsRetrieveRequestExpandItem(str, enum.Enum): +class LeadsRetrieveRequestExpandItem(enum.StrEnum): CONVERTED_ACCOUNT = "converted_account" CONVERTED_CONTACT = "converted_contact" OWNER = "owner" diff --git a/src/merge/resources/crm/resources/link_token/__init__.py b/src/merge/resources/crm/resources/link_token/__init__.py index 3bad6adf..15700960 100644 --- a/src/merge/resources/crm/resources/link_token/__init__.py +++ b/src/merge/resources/crm/resources/link_token/__init__.py @@ -16,8 +16,10 @@ def __getattr__(attr_name: str) -> typing.Any: raise AttributeError(f"No {attr_name} found in _dynamic_imports for module name -> {__name__}") try: module = import_module(module_name, __package__) - result = getattr(module, attr_name) - return result + if module_name == f".{attr_name}": + return module + else: + return getattr(module, attr_name) except ImportError as e: raise ImportError(f"Failed to import {attr_name} from {module_name}: {e}") from e except AttributeError as e: diff --git a/src/merge/resources/crm/resources/link_token/client.py b/src/merge/resources/crm/resources/link_token/client.py index 92a78722..f67093b7 100644 --- a/src/merge/resources/crm/resources/link_token/client.py +++ b/src/merge/resources/crm/resources/link_token/client.py @@ -47,7 +47,7 @@ def create( ] = OMIT, language: typing.Optional[EndUserDetailsRequestLanguage] = OMIT, are_syncs_disabled: typing.Optional[bool] = OMIT, - integration_specific_config: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = OMIT, + integration_specific_config: typing.Optional[typing.Dict[str, typing.Any]] = OMIT, request_options: typing.Optional[RequestOptions] = None, ) -> LinkToken: """ @@ -94,7 +94,7 @@ def create( are_syncs_disabled : typing.Optional[bool] The boolean that indicates whether initial, periodic, and force syncs will be disabled. - integration_specific_config : typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] + integration_specific_config : typing.Optional[typing.Dict[str, typing.Any]] A JSON object containing integration-specific configuration options. request_options : typing.Optional[RequestOptions] @@ -172,7 +172,7 @@ async def create( ] = OMIT, language: typing.Optional[EndUserDetailsRequestLanguage] = OMIT, are_syncs_disabled: typing.Optional[bool] = OMIT, - integration_specific_config: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = OMIT, + integration_specific_config: typing.Optional[typing.Dict[str, typing.Any]] = OMIT, request_options: typing.Optional[RequestOptions] = None, ) -> LinkToken: """ @@ -219,7 +219,7 @@ async def create( are_syncs_disabled : typing.Optional[bool] The boolean that indicates whether initial, periodic, and force syncs will be disabled. - integration_specific_config : typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] + integration_specific_config : typing.Optional[typing.Dict[str, typing.Any]] A JSON object containing integration-specific configuration options. request_options : typing.Optional[RequestOptions] diff --git a/src/merge/resources/crm/resources/link_token/raw_client.py b/src/merge/resources/crm/resources/link_token/raw_client.py index 0c829e1d..7d72b03c 100644 --- a/src/merge/resources/crm/resources/link_token/raw_client.py +++ b/src/merge/resources/crm/resources/link_token/raw_client.py @@ -6,6 +6,7 @@ from .....core.api_error import ApiError from .....core.client_wrapper import AsyncClientWrapper, SyncClientWrapper from .....core.http_response import AsyncHttpResponse, HttpResponse +from .....core.parse_error import ParsingError from .....core.request_options import RequestOptions from .....core.unchecked_base_model import construct_type from ...types.categories_enum import CategoriesEnum @@ -13,6 +14,7 @@ from ...types.individual_common_model_scope_deserializer_request import IndividualCommonModelScopeDeserializerRequest from ...types.link_token import LinkToken from .types.end_user_details_request_language import EndUserDetailsRequestLanguage +from pydantic import ValidationError # this is used as the default value for optional parameters OMIT = typing.cast(typing.Any, ...) @@ -39,7 +41,7 @@ def create( ] = OMIT, language: typing.Optional[EndUserDetailsRequestLanguage] = OMIT, are_syncs_disabled: typing.Optional[bool] = OMIT, - integration_specific_config: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = OMIT, + integration_specific_config: typing.Optional[typing.Dict[str, typing.Any]] = OMIT, request_options: typing.Optional[RequestOptions] = None, ) -> HttpResponse[LinkToken]: """ @@ -86,7 +88,7 @@ def create( are_syncs_disabled : typing.Optional[bool] The boolean that indicates whether initial, periodic, and force syncs will be disabled. - integration_specific_config : typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] + integration_specific_config : typing.Optional[typing.Dict[str, typing.Any]] A JSON object containing integration-specific configuration options. request_options : typing.Optional[RequestOptions] @@ -134,6 +136,10 @@ def create( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) @@ -158,7 +164,7 @@ async def create( ] = OMIT, language: typing.Optional[EndUserDetailsRequestLanguage] = OMIT, are_syncs_disabled: typing.Optional[bool] = OMIT, - integration_specific_config: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = OMIT, + integration_specific_config: typing.Optional[typing.Dict[str, typing.Any]] = OMIT, request_options: typing.Optional[RequestOptions] = None, ) -> AsyncHttpResponse[LinkToken]: """ @@ -205,7 +211,7 @@ async def create( are_syncs_disabled : typing.Optional[bool] The boolean that indicates whether initial, periodic, and force syncs will be disabled. - integration_specific_config : typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] + integration_specific_config : typing.Optional[typing.Dict[str, typing.Any]] A JSON object containing integration-specific configuration options. request_options : typing.Optional[RequestOptions] @@ -253,4 +259,8 @@ async def create( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) diff --git a/src/merge/resources/crm/resources/link_token/types/__init__.py b/src/merge/resources/crm/resources/link_token/types/__init__.py index e9a7d3b9..dad2a14a 100644 --- a/src/merge/resources/crm/resources/link_token/types/__init__.py +++ b/src/merge/resources/crm/resources/link_token/types/__init__.py @@ -16,8 +16,10 @@ def __getattr__(attr_name: str) -> typing.Any: raise AttributeError(f"No {attr_name} found in _dynamic_imports for module name -> {__name__}") try: module = import_module(module_name, __package__) - result = getattr(module, attr_name) - return result + if module_name == f".{attr_name}": + return module + else: + return getattr(module, attr_name) except ImportError as e: raise ImportError(f"Failed to import {attr_name} from {module_name}: {e}") from e except AttributeError as e: diff --git a/src/merge/resources/crm/resources/linked_accounts/__init__.py b/src/merge/resources/crm/resources/linked_accounts/__init__.py index 0b9e42b4..12e213b7 100644 --- a/src/merge/resources/crm/resources/linked_accounts/__init__.py +++ b/src/merge/resources/crm/resources/linked_accounts/__init__.py @@ -16,8 +16,10 @@ def __getattr__(attr_name: str) -> typing.Any: raise AttributeError(f"No {attr_name} found in _dynamic_imports for module name -> {__name__}") try: module = import_module(module_name, __package__) - result = getattr(module, attr_name) - return result + if module_name == f".{attr_name}": + return module + else: + return getattr(module, attr_name) except ImportError as e: raise ImportError(f"Failed to import {attr_name} from {module_name}: {e}") from e except AttributeError as e: diff --git a/src/merge/resources/crm/resources/linked_accounts/raw_client.py b/src/merge/resources/crm/resources/linked_accounts/raw_client.py index 443e75e0..c1481bac 100644 --- a/src/merge/resources/crm/resources/linked_accounts/raw_client.py +++ b/src/merge/resources/crm/resources/linked_accounts/raw_client.py @@ -6,10 +6,12 @@ from .....core.api_error import ApiError from .....core.client_wrapper import AsyncClientWrapper, SyncClientWrapper from .....core.http_response import AsyncHttpResponse, HttpResponse +from .....core.parse_error import ParsingError from .....core.request_options import RequestOptions from .....core.unchecked_base_model import construct_type from ...types.paginated_account_details_and_actions_list import PaginatedAccountDetailsAndActionsList from .types.linked_accounts_list_request_category import LinkedAccountsListRequestCategory +from pydantic import ValidationError class RawLinkedAccountsClient: @@ -126,6 +128,10 @@ def list( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) @@ -243,4 +249,8 @@ async def list( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) diff --git a/src/merge/resources/crm/resources/linked_accounts/types/__init__.py b/src/merge/resources/crm/resources/linked_accounts/types/__init__.py index a28f38cc..a884db6a 100644 --- a/src/merge/resources/crm/resources/linked_accounts/types/__init__.py +++ b/src/merge/resources/crm/resources/linked_accounts/types/__init__.py @@ -18,8 +18,10 @@ def __getattr__(attr_name: str) -> typing.Any: raise AttributeError(f"No {attr_name} found in _dynamic_imports for module name -> {__name__}") try: module = import_module(module_name, __package__) - result = getattr(module, attr_name) - return result + if module_name == f".{attr_name}": + return module + else: + return getattr(module, attr_name) except ImportError as e: raise ImportError(f"Failed to import {attr_name} from {module_name}: {e}") from e except AttributeError as e: diff --git a/src/merge/resources/crm/resources/linked_accounts/types/linked_accounts_list_request_category.py b/src/merge/resources/crm/resources/linked_accounts/types/linked_accounts_list_request_category.py index bd873ea8..ce04d1de 100644 --- a/src/merge/resources/crm/resources/linked_accounts/types/linked_accounts_list_request_category.py +++ b/src/merge/resources/crm/resources/linked_accounts/types/linked_accounts_list_request_category.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ......core import enum + T_Result = typing.TypeVar("T_Result") -class LinkedAccountsListRequestCategory(str, enum.Enum): +class LinkedAccountsListRequestCategory(enum.StrEnum): ACCOUNTING = "accounting" ATS = "ats" CRM = "crm" diff --git a/src/merge/resources/crm/resources/notes/__init__.py b/src/merge/resources/crm/resources/notes/__init__.py index 00283fd0..2c436175 100644 --- a/src/merge/resources/crm/resources/notes/__init__.py +++ b/src/merge/resources/crm/resources/notes/__init__.py @@ -19,8 +19,10 @@ def __getattr__(attr_name: str) -> typing.Any: raise AttributeError(f"No {attr_name} found in _dynamic_imports for module name -> {__name__}") try: module = import_module(module_name, __package__) - result = getattr(module, attr_name) - return result + if module_name == f".{attr_name}": + return module + else: + return getattr(module, attr_name) except ImportError as e: raise ImportError(f"Failed to import {attr_name} from {module_name}: {e}") from e except AttributeError as e: diff --git a/src/merge/resources/crm/resources/notes/raw_client.py b/src/merge/resources/crm/resources/notes/raw_client.py index 5e3618c4..07e14bb7 100644 --- a/src/merge/resources/crm/resources/notes/raw_client.py +++ b/src/merge/resources/crm/resources/notes/raw_client.py @@ -9,6 +9,7 @@ from .....core.datetime_utils import serialize_datetime from .....core.http_response import AsyncHttpResponse, HttpResponse from .....core.jsonable_encoder import jsonable_encoder +from .....core.parse_error import ParsingError from .....core.request_options import RequestOptions from .....core.unchecked_base_model import construct_type from ...types.meta_response import MetaResponse @@ -19,6 +20,7 @@ from ...types.paginated_remote_field_class_list import PaginatedRemoteFieldClassList from .types.notes_list_request_expand_item import NotesListRequestExpandItem from .types.notes_retrieve_request_expand_item import NotesRetrieveRequestExpandItem +from pydantic import ValidationError # this is used as the default value for optional parameters OMIT = typing.cast(typing.Any, ...) @@ -148,6 +150,10 @@ def list( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) def create( @@ -208,6 +214,10 @@ def create( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) def retrieve( @@ -273,6 +283,10 @@ def retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) def meta_post_retrieve( @@ -309,6 +323,10 @@ def meta_post_retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) def remote_field_classes_list( @@ -389,6 +407,10 @@ def remote_field_classes_list( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) @@ -516,6 +538,10 @@ async def list( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) async def create( @@ -576,6 +602,10 @@ async def create( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) async def retrieve( @@ -641,6 +671,10 @@ async def retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) async def meta_post_retrieve( @@ -677,6 +711,10 @@ async def meta_post_retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) async def remote_field_classes_list( @@ -757,4 +795,8 @@ async def remote_field_classes_list( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) diff --git a/src/merge/resources/crm/resources/notes/types/__init__.py b/src/merge/resources/crm/resources/notes/types/__init__.py index ccddadf7..ff841cff 100644 --- a/src/merge/resources/crm/resources/notes/types/__init__.py +++ b/src/merge/resources/crm/resources/notes/types/__init__.py @@ -20,8 +20,10 @@ def __getattr__(attr_name: str) -> typing.Any: raise AttributeError(f"No {attr_name} found in _dynamic_imports for module name -> {__name__}") try: module = import_module(module_name, __package__) - result = getattr(module, attr_name) - return result + if module_name == f".{attr_name}": + return module + else: + return getattr(module, attr_name) except ImportError as e: raise ImportError(f"Failed to import {attr_name} from {module_name}: {e}") from e except AttributeError as e: diff --git a/src/merge/resources/crm/resources/notes/types/notes_list_request_expand_item.py b/src/merge/resources/crm/resources/notes/types/notes_list_request_expand_item.py index b062d7bf..87864ee3 100644 --- a/src/merge/resources/crm/resources/notes/types/notes_list_request_expand_item.py +++ b/src/merge/resources/crm/resources/notes/types/notes_list_request_expand_item.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ......core import enum + T_Result = typing.TypeVar("T_Result") -class NotesListRequestExpandItem(str, enum.Enum): +class NotesListRequestExpandItem(enum.StrEnum): ACCOUNT = "account" CONTACT = "contact" OPPORTUNITY = "opportunity" diff --git a/src/merge/resources/crm/resources/notes/types/notes_retrieve_request_expand_item.py b/src/merge/resources/crm/resources/notes/types/notes_retrieve_request_expand_item.py index 3680c443..ef0bbdae 100644 --- a/src/merge/resources/crm/resources/notes/types/notes_retrieve_request_expand_item.py +++ b/src/merge/resources/crm/resources/notes/types/notes_retrieve_request_expand_item.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ......core import enum + T_Result = typing.TypeVar("T_Result") -class NotesRetrieveRequestExpandItem(str, enum.Enum): +class NotesRetrieveRequestExpandItem(enum.StrEnum): ACCOUNT = "account" CONTACT = "contact" OPPORTUNITY = "opportunity" diff --git a/src/merge/resources/crm/resources/opportunities/__init__.py b/src/merge/resources/crm/resources/opportunities/__init__.py index 2768275c..ce948f15 100644 --- a/src/merge/resources/crm/resources/opportunities/__init__.py +++ b/src/merge/resources/crm/resources/opportunities/__init__.py @@ -24,8 +24,10 @@ def __getattr__(attr_name: str) -> typing.Any: raise AttributeError(f"No {attr_name} found in _dynamic_imports for module name -> {__name__}") try: module = import_module(module_name, __package__) - result = getattr(module, attr_name) - return result + if module_name == f".{attr_name}": + return module + else: + return getattr(module, attr_name) except ImportError as e: raise ImportError(f"Failed to import {attr_name} from {module_name}: {e}") from e except AttributeError as e: diff --git a/src/merge/resources/crm/resources/opportunities/raw_client.py b/src/merge/resources/crm/resources/opportunities/raw_client.py index 857ce6ea..26a5ceff 100644 --- a/src/merge/resources/crm/resources/opportunities/raw_client.py +++ b/src/merge/resources/crm/resources/opportunities/raw_client.py @@ -9,6 +9,7 @@ from .....core.datetime_utils import serialize_datetime from .....core.http_response import AsyncHttpResponse, HttpResponse from .....core.jsonable_encoder import jsonable_encoder +from .....core.parse_error import ParsingError from .....core.request_options import RequestOptions from .....core.unchecked_base_model import construct_type from ...types.meta_response import MetaResponse @@ -21,6 +22,7 @@ from .types.opportunities_list_request_expand_item import OpportunitiesListRequestExpandItem from .types.opportunities_list_request_status import OpportunitiesListRequestStatus from .types.opportunities_retrieve_request_expand_item import OpportunitiesRetrieveRequestExpandItem +from pydantic import ValidationError # this is used as the default value for optional parameters OMIT = typing.cast(typing.Any, ...) @@ -171,6 +173,10 @@ def list( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) def create( @@ -231,6 +237,10 @@ def create( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) def retrieve( @@ -308,6 +318,10 @@ def retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) def partial_update( @@ -371,6 +385,10 @@ def partial_update( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) def meta_patch_retrieve( @@ -409,6 +427,10 @@ def meta_patch_retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) def meta_post_retrieve( @@ -445,6 +467,10 @@ def meta_post_retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) def remote_field_classes_list( @@ -525,6 +551,10 @@ def remote_field_classes_list( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) @@ -673,6 +703,10 @@ async def list( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) async def create( @@ -733,6 +767,10 @@ async def create( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) async def retrieve( @@ -810,6 +848,10 @@ async def retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) async def partial_update( @@ -873,6 +915,10 @@ async def partial_update( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) async def meta_patch_retrieve( @@ -911,6 +957,10 @@ async def meta_patch_retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) async def meta_post_retrieve( @@ -947,6 +997,10 @@ async def meta_post_retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) async def remote_field_classes_list( @@ -1027,4 +1081,8 @@ async def remote_field_classes_list( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) diff --git a/src/merge/resources/crm/resources/opportunities/types/__init__.py b/src/merge/resources/crm/resources/opportunities/types/__init__.py index 1de02ea6..0c0a80d6 100644 --- a/src/merge/resources/crm/resources/opportunities/types/__init__.py +++ b/src/merge/resources/crm/resources/opportunities/types/__init__.py @@ -22,8 +22,10 @@ def __getattr__(attr_name: str) -> typing.Any: raise AttributeError(f"No {attr_name} found in _dynamic_imports for module name -> {__name__}") try: module = import_module(module_name, __package__) - result = getattr(module, attr_name) - return result + if module_name == f".{attr_name}": + return module + else: + return getattr(module, attr_name) except ImportError as e: raise ImportError(f"Failed to import {attr_name} from {module_name}: {e}") from e except AttributeError as e: diff --git a/src/merge/resources/crm/resources/opportunities/types/opportunities_list_request_expand_item.py b/src/merge/resources/crm/resources/opportunities/types/opportunities_list_request_expand_item.py index f8c1e8ce..4bb31b73 100644 --- a/src/merge/resources/crm/resources/opportunities/types/opportunities_list_request_expand_item.py +++ b/src/merge/resources/crm/resources/opportunities/types/opportunities_list_request_expand_item.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ......core import enum + T_Result = typing.TypeVar("T_Result") -class OpportunitiesListRequestExpandItem(str, enum.Enum): +class OpportunitiesListRequestExpandItem(enum.StrEnum): ACCOUNT = "account" OWNER = "owner" STAGE = "stage" diff --git a/src/merge/resources/crm/resources/opportunities/types/opportunities_list_request_status.py b/src/merge/resources/crm/resources/opportunities/types/opportunities_list_request_status.py index e194cf42..3d11a529 100644 --- a/src/merge/resources/crm/resources/opportunities/types/opportunities_list_request_status.py +++ b/src/merge/resources/crm/resources/opportunities/types/opportunities_list_request_status.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ......core import enum + T_Result = typing.TypeVar("T_Result") -class OpportunitiesListRequestStatus(str, enum.Enum): +class OpportunitiesListRequestStatus(enum.StrEnum): LOST = "LOST" OPEN = "OPEN" WON = "WON" diff --git a/src/merge/resources/crm/resources/opportunities/types/opportunities_retrieve_request_expand_item.py b/src/merge/resources/crm/resources/opportunities/types/opportunities_retrieve_request_expand_item.py index 68e8adfa..fb843ba5 100644 --- a/src/merge/resources/crm/resources/opportunities/types/opportunities_retrieve_request_expand_item.py +++ b/src/merge/resources/crm/resources/opportunities/types/opportunities_retrieve_request_expand_item.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ......core import enum + T_Result = typing.TypeVar("T_Result") -class OpportunitiesRetrieveRequestExpandItem(str, enum.Enum): +class OpportunitiesRetrieveRequestExpandItem(enum.StrEnum): ACCOUNT = "account" OWNER = "owner" STAGE = "stage" diff --git a/src/merge/resources/crm/resources/passthrough/raw_client.py b/src/merge/resources/crm/resources/passthrough/raw_client.py index 82732697..2950cf58 100644 --- a/src/merge/resources/crm/resources/passthrough/raw_client.py +++ b/src/merge/resources/crm/resources/passthrough/raw_client.py @@ -6,10 +6,12 @@ from .....core.api_error import ApiError from .....core.client_wrapper import AsyncClientWrapper, SyncClientWrapper from .....core.http_response import AsyncHttpResponse, HttpResponse +from .....core.parse_error import ParsingError from .....core.request_options import RequestOptions from .....core.unchecked_base_model import construct_type from ...types.data_passthrough_request import DataPassthroughRequest from ...types.remote_response import RemoteResponse +from pydantic import ValidationError # this is used as the default value for optional parameters OMIT = typing.cast(typing.Any, ...) @@ -60,6 +62,10 @@ def create( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) @@ -108,4 +114,8 @@ async def create( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) diff --git a/src/merge/resources/crm/resources/regenerate_key/raw_client.py b/src/merge/resources/crm/resources/regenerate_key/raw_client.py index 2c036af9..6549bd3b 100644 --- a/src/merge/resources/crm/resources/regenerate_key/raw_client.py +++ b/src/merge/resources/crm/resources/regenerate_key/raw_client.py @@ -6,9 +6,11 @@ from .....core.api_error import ApiError from .....core.client_wrapper import AsyncClientWrapper, SyncClientWrapper from .....core.http_response import AsyncHttpResponse, HttpResponse +from .....core.parse_error import ParsingError from .....core.request_options import RequestOptions from .....core.unchecked_base_model import construct_type from ...types.remote_key import RemoteKey +from pydantic import ValidationError # this is used as the default value for optional parameters OMIT = typing.cast(typing.Any, ...) @@ -60,6 +62,10 @@ def create(self, *, name: str, request_options: typing.Optional[RequestOptions] _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) @@ -111,4 +117,8 @@ async def create( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) diff --git a/src/merge/resources/crm/resources/scopes/raw_client.py b/src/merge/resources/crm/resources/scopes/raw_client.py index 39fc9689..cbafb67a 100644 --- a/src/merge/resources/crm/resources/scopes/raw_client.py +++ b/src/merge/resources/crm/resources/scopes/raw_client.py @@ -6,10 +6,12 @@ from .....core.api_error import ApiError from .....core.client_wrapper import AsyncClientWrapper, SyncClientWrapper from .....core.http_response import AsyncHttpResponse, HttpResponse +from .....core.parse_error import ParsingError from .....core.request_options import RequestOptions from .....core.unchecked_base_model import construct_type from ...types.common_model_scope_api import CommonModelScopeApi from ...types.individual_common_model_scope_deserializer_request import IndividualCommonModelScopeDeserializerRequest +from pydantic import ValidationError # this is used as the default value for optional parameters OMIT = typing.cast(typing.Any, ...) @@ -53,6 +55,10 @@ def default_scopes_retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) def linked_account_scopes_retrieve( @@ -89,6 +95,10 @@ def linked_account_scopes_retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) def linked_account_scopes_create( @@ -138,6 +148,10 @@ def linked_account_scopes_create( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) @@ -179,6 +193,10 @@ async def default_scopes_retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) async def linked_account_scopes_retrieve( @@ -215,6 +233,10 @@ async def linked_account_scopes_retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) async def linked_account_scopes_create( @@ -264,4 +286,8 @@ async def linked_account_scopes_create( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) diff --git a/src/merge/resources/crm/resources/stages/raw_client.py b/src/merge/resources/crm/resources/stages/raw_client.py index 040973cc..4e2d5006 100644 --- a/src/merge/resources/crm/resources/stages/raw_client.py +++ b/src/merge/resources/crm/resources/stages/raw_client.py @@ -9,11 +9,13 @@ from .....core.datetime_utils import serialize_datetime from .....core.http_response import AsyncHttpResponse, HttpResponse from .....core.jsonable_encoder import jsonable_encoder +from .....core.parse_error import ParsingError from .....core.request_options import RequestOptions from .....core.unchecked_base_model import construct_type from ...types.paginated_remote_field_class_list import PaginatedRemoteFieldClassList from ...types.paginated_stage_list import PaginatedStageList from ...types.stage import Stage +from pydantic import ValidationError class RawStagesClient: @@ -113,6 +115,10 @@ def list( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) def retrieve( @@ -171,6 +177,10 @@ def retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) def remote_field_classes_list( @@ -251,6 +261,10 @@ def remote_field_classes_list( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) @@ -351,6 +365,10 @@ async def list( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) async def retrieve( @@ -409,6 +427,10 @@ async def retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) async def remote_field_classes_list( @@ -489,4 +511,8 @@ async def remote_field_classes_list( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) diff --git a/src/merge/resources/crm/resources/sync_status/raw_client.py b/src/merge/resources/crm/resources/sync_status/raw_client.py index d93258e4..6b9b3214 100644 --- a/src/merge/resources/crm/resources/sync_status/raw_client.py +++ b/src/merge/resources/crm/resources/sync_status/raw_client.py @@ -6,9 +6,11 @@ from .....core.api_error import ApiError from .....core.client_wrapper import AsyncClientWrapper, SyncClientWrapper from .....core.http_response import AsyncHttpResponse, HttpResponse +from .....core.parse_error import ParsingError from .....core.request_options import RequestOptions from .....core.unchecked_base_model import construct_type from ...types.paginated_sync_status_list import PaginatedSyncStatusList +from pydantic import ValidationError class RawSyncStatusClient: @@ -63,6 +65,10 @@ def list( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) @@ -118,4 +124,8 @@ async def list( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) diff --git a/src/merge/resources/crm/resources/tasks/__init__.py b/src/merge/resources/crm/resources/tasks/__init__.py index bbae5eef..7677ff28 100644 --- a/src/merge/resources/crm/resources/tasks/__init__.py +++ b/src/merge/resources/crm/resources/tasks/__init__.py @@ -19,8 +19,10 @@ def __getattr__(attr_name: str) -> typing.Any: raise AttributeError(f"No {attr_name} found in _dynamic_imports for module name -> {__name__}") try: module = import_module(module_name, __package__) - result = getattr(module, attr_name) - return result + if module_name == f".{attr_name}": + return module + else: + return getattr(module, attr_name) except ImportError as e: raise ImportError(f"Failed to import {attr_name} from {module_name}: {e}") from e except AttributeError as e: diff --git a/src/merge/resources/crm/resources/tasks/raw_client.py b/src/merge/resources/crm/resources/tasks/raw_client.py index 6510826e..35dfb5e6 100644 --- a/src/merge/resources/crm/resources/tasks/raw_client.py +++ b/src/merge/resources/crm/resources/tasks/raw_client.py @@ -9,6 +9,7 @@ from .....core.datetime_utils import serialize_datetime from .....core.http_response import AsyncHttpResponse, HttpResponse from .....core.jsonable_encoder import jsonable_encoder +from .....core.parse_error import ParsingError from .....core.request_options import RequestOptions from .....core.unchecked_base_model import construct_type from ...types.meta_response import MetaResponse @@ -20,6 +21,7 @@ from ...types.task_response import TaskResponse from .types.tasks_list_request_expand_item import TasksListRequestExpandItem from .types.tasks_retrieve_request_expand_item import TasksRetrieveRequestExpandItem +from pydantic import ValidationError # this is used as the default value for optional parameters OMIT = typing.cast(typing.Any, ...) @@ -129,6 +131,10 @@ def list( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) def create( @@ -189,6 +195,10 @@ def create( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) def retrieve( @@ -254,6 +264,10 @@ def retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) def partial_update( @@ -317,6 +331,10 @@ def partial_update( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) def meta_patch_retrieve( @@ -355,6 +373,10 @@ def meta_patch_retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) def meta_post_retrieve( @@ -391,6 +413,10 @@ def meta_post_retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) def remote_field_classes_list( @@ -471,6 +497,10 @@ def remote_field_classes_list( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) @@ -578,6 +608,10 @@ async def list( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) async def create( @@ -638,6 +672,10 @@ async def create( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) async def retrieve( @@ -703,6 +741,10 @@ async def retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) async def partial_update( @@ -766,6 +808,10 @@ async def partial_update( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) async def meta_patch_retrieve( @@ -804,6 +850,10 @@ async def meta_patch_retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) async def meta_post_retrieve( @@ -840,6 +890,10 @@ async def meta_post_retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) async def remote_field_classes_list( @@ -920,4 +974,8 @@ async def remote_field_classes_list( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) diff --git a/src/merge/resources/crm/resources/tasks/types/__init__.py b/src/merge/resources/crm/resources/tasks/types/__init__.py index 9395dcba..47590abf 100644 --- a/src/merge/resources/crm/resources/tasks/types/__init__.py +++ b/src/merge/resources/crm/resources/tasks/types/__init__.py @@ -20,8 +20,10 @@ def __getattr__(attr_name: str) -> typing.Any: raise AttributeError(f"No {attr_name} found in _dynamic_imports for module name -> {__name__}") try: module = import_module(module_name, __package__) - result = getattr(module, attr_name) - return result + if module_name == f".{attr_name}": + return module + else: + return getattr(module, attr_name) except ImportError as e: raise ImportError(f"Failed to import {attr_name} from {module_name}: {e}") from e except AttributeError as e: diff --git a/src/merge/resources/crm/resources/tasks/types/tasks_list_request_expand_item.py b/src/merge/resources/crm/resources/tasks/types/tasks_list_request_expand_item.py index 67e914f9..54a6ffe9 100644 --- a/src/merge/resources/crm/resources/tasks/types/tasks_list_request_expand_item.py +++ b/src/merge/resources/crm/resources/tasks/types/tasks_list_request_expand_item.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ......core import enum + T_Result = typing.TypeVar("T_Result") -class TasksListRequestExpandItem(str, enum.Enum): +class TasksListRequestExpandItem(enum.StrEnum): ACCOUNT = "account" CONTACT = "contact" OPPORTUNITY = "opportunity" diff --git a/src/merge/resources/crm/resources/tasks/types/tasks_retrieve_request_expand_item.py b/src/merge/resources/crm/resources/tasks/types/tasks_retrieve_request_expand_item.py index c1c1f294..dd682992 100644 --- a/src/merge/resources/crm/resources/tasks/types/tasks_retrieve_request_expand_item.py +++ b/src/merge/resources/crm/resources/tasks/types/tasks_retrieve_request_expand_item.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ......core import enum + T_Result = typing.TypeVar("T_Result") -class TasksRetrieveRequestExpandItem(str, enum.Enum): +class TasksRetrieveRequestExpandItem(enum.StrEnum): ACCOUNT = "account" CONTACT = "contact" OPPORTUNITY = "opportunity" diff --git a/src/merge/resources/crm/resources/users/raw_client.py b/src/merge/resources/crm/resources/users/raw_client.py index 40698bc6..dcb0a585 100644 --- a/src/merge/resources/crm/resources/users/raw_client.py +++ b/src/merge/resources/crm/resources/users/raw_client.py @@ -9,12 +9,14 @@ from .....core.datetime_utils import serialize_datetime from .....core.http_response import AsyncHttpResponse, HttpResponse from .....core.jsonable_encoder import jsonable_encoder +from .....core.parse_error import ParsingError from .....core.request_options import RequestOptions from .....core.unchecked_base_model import construct_type from ...types.ignore_common_model_request import IgnoreCommonModelRequest from ...types.paginated_remote_field_class_list import PaginatedRemoteFieldClassList from ...types.paginated_user_list import PaginatedUserList from ...types.user import User +from pydantic import ValidationError # this is used as the default value for optional parameters OMIT = typing.cast(typing.Any, ...) @@ -122,6 +124,10 @@ def list( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) def retrieve( @@ -180,6 +186,10 @@ def retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) def ignore_create( @@ -221,6 +231,10 @@ def ignore_create( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) def remote_field_classes_list( @@ -301,6 +315,10 @@ def remote_field_classes_list( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) @@ -406,6 +424,10 @@ async def list( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) async def retrieve( @@ -464,6 +486,10 @@ async def retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) async def ignore_create( @@ -505,6 +531,10 @@ async def ignore_create( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) async def remote_field_classes_list( @@ -585,4 +615,8 @@ async def remote_field_classes_list( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) diff --git a/src/merge/resources/crm/resources/webhook_receivers/raw_client.py b/src/merge/resources/crm/resources/webhook_receivers/raw_client.py index fed0c538..5a4fe5da 100644 --- a/src/merge/resources/crm/resources/webhook_receivers/raw_client.py +++ b/src/merge/resources/crm/resources/webhook_receivers/raw_client.py @@ -6,9 +6,11 @@ from .....core.api_error import ApiError from .....core.client_wrapper import AsyncClientWrapper, SyncClientWrapper from .....core.http_response import AsyncHttpResponse, HttpResponse +from .....core.parse_error import ParsingError from .....core.request_options import RequestOptions from .....core.unchecked_base_model import construct_type from ...types.webhook_receiver import WebhookReceiver +from pydantic import ValidationError # this is used as the default value for optional parameters OMIT = typing.cast(typing.Any, ...) @@ -52,6 +54,10 @@ def list( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) def create( @@ -108,6 +114,10 @@ def create( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) @@ -149,6 +159,10 @@ async def list( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) async def create( @@ -205,4 +219,8 @@ async def create( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) diff --git a/src/merge/resources/crm/types/__init__.py b/src/merge/resources/crm/types/__init__.py index 45eaff6a..2f1acbbb 100644 --- a/src/merge/resources/crm/types/__init__.py +++ b/src/merge/resources/crm/types/__init__.py @@ -506,8 +506,10 @@ def __getattr__(attr_name: str) -> typing.Any: raise AttributeError(f"No {attr_name} found in _dynamic_imports for module name -> {__name__}") try: module = import_module(module_name, __package__) - result = getattr(module, attr_name) - return result + if module_name == f".{attr_name}": + return module + else: + return getattr(module, attr_name) except ImportError as e: raise ImportError(f"Failed to import {attr_name} from {module_name}: {e}") from e except AttributeError as e: diff --git a/src/merge/resources/crm/types/account.py b/src/merge/resources/crm/types/account.py index a76e2b6f..20e073e5 100644 --- a/src/merge/resources/crm/types/account.py +++ b/src/merge/resources/crm/types/account.py @@ -90,7 +90,7 @@ class Account(UncheckedBaseModel): Indicates whether or not this object has been deleted in the third party platform. Full coverage deletion detection is a premium add-on. Native deletion detection is offered for free with limited coverage. [Learn more](https://docs.merge.dev/integrations/hris/supported-features/). """ - field_mappings: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None + field_mappings: typing.Optional[typing.Dict[str, typing.Any]] = None remote_data: typing.Optional[typing.List[RemoteData]] = None remote_fields: typing.Optional[typing.List[RemoteField]] = None diff --git a/src/merge/resources/crm/types/account_details_and_actions.py b/src/merge/resources/crm/types/account_details_and_actions.py index 93c874ed..cbf29cb3 100644 --- a/src/merge/resources/crm/types/account_details_and_actions.py +++ b/src/merge/resources/crm/types/account_details_and_actions.py @@ -42,7 +42,7 @@ class AccountDetailsAndActions(UncheckedBaseModel): integration: typing.Optional[AccountDetailsAndActionsIntegration] = None account_type: str completed_at: dt.datetime - integration_specific_fields: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None + integration_specific_fields: typing.Optional[typing.Dict[str, typing.Any]] = None if IS_PYDANTIC_V2: model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2 diff --git a/src/merge/resources/crm/types/account_details_and_actions_status_enum.py b/src/merge/resources/crm/types/account_details_and_actions_status_enum.py index df37f582..b9ae9efc 100644 --- a/src/merge/resources/crm/types/account_details_and_actions_status_enum.py +++ b/src/merge/resources/crm/types/account_details_and_actions_status_enum.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ....core import enum + T_Result = typing.TypeVar("T_Result") -class AccountDetailsAndActionsStatusEnum(str, enum.Enum): +class AccountDetailsAndActionsStatusEnum(enum.StrEnum): """ * `COMPLETE` - COMPLETE * `INCOMPLETE` - INCOMPLETE diff --git a/src/merge/resources/crm/types/account_integration.py b/src/merge/resources/crm/types/account_integration.py index ef8b260d..7bc872ca 100644 --- a/src/merge/resources/crm/types/account_integration.py +++ b/src/merge/resources/crm/types/account_integration.py @@ -40,9 +40,7 @@ class AccountIntegration(UncheckedBaseModel): """ slug: typing.Optional[str] = None - api_endpoints_to_documentation_urls: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = ( - pydantic.Field(default=None) - ) + api_endpoints_to_documentation_urls: typing.Optional[typing.Dict[str, typing.Any]] = pydantic.Field(default=None) """ Mapping of API endpoints to documentation urls for support. Example: {'GET': [['/common-model-scopes', 'https://docs.merge.dev/accounting/common-model-scopes/#common_model_scopes_retrieve'],['/common-model-actions', 'https://docs.merge.dev/accounting/common-model-actions/#common_model_actions_retrieve']], 'POST': []} """ @@ -52,7 +50,7 @@ class AccountIntegration(UncheckedBaseModel): Setup guide URL for third party webhook creation. Exposed in Merge Docs. """ - category_beta_status: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = pydantic.Field(default=None) + category_beta_status: typing.Optional[typing.Dict[str, typing.Any]] = pydantic.Field(default=None) """ Category or categories this integration is in beta status for. """ diff --git a/src/merge/resources/crm/types/account_request.py b/src/merge/resources/crm/types/account_request.py index 0f7fc493..0560ebb3 100644 --- a/src/merge/resources/crm/types/account_request.py +++ b/src/merge/resources/crm/types/account_request.py @@ -56,8 +56,8 @@ class AccountRequest(UncheckedBaseModel): The last date (either most recent or furthest in the future) of when an activity occurs in an account. """ - integration_params: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None - linked_account_params: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None + integration_params: typing.Optional[typing.Dict[str, typing.Any]] = None + linked_account_params: typing.Optional[typing.Dict[str, typing.Any]] = None remote_fields: typing.Optional[typing.List[RemoteFieldRequest]] = None if IS_PYDANTIC_V2: diff --git a/src/merge/resources/crm/types/activity_type_enum.py b/src/merge/resources/crm/types/activity_type_enum.py index f6cf5846..bb665b9a 100644 --- a/src/merge/resources/crm/types/activity_type_enum.py +++ b/src/merge/resources/crm/types/activity_type_enum.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ....core import enum + T_Result = typing.TypeVar("T_Result") -class ActivityTypeEnum(str, enum.Enum): +class ActivityTypeEnum(enum.StrEnum): """ * `CALL` - CALL * `MEETING` - MEETING diff --git a/src/merge/resources/crm/types/address_request.py b/src/merge/resources/crm/types/address_request.py index 6ae6189e..55b1fedf 100644 --- a/src/merge/resources/crm/types/address_request.py +++ b/src/merge/resources/crm/types/address_request.py @@ -306,8 +306,8 @@ class AddressRequest(UncheckedBaseModel): * `SHIPPING` - SHIPPING """ - integration_params: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None - linked_account_params: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None + integration_params: typing.Optional[typing.Dict[str, typing.Any]] = None + linked_account_params: typing.Optional[typing.Dict[str, typing.Any]] = None if IS_PYDANTIC_V2: model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2 diff --git a/src/merge/resources/crm/types/address_type_enum.py b/src/merge/resources/crm/types/address_type_enum.py index 69be620b..397f768d 100644 --- a/src/merge/resources/crm/types/address_type_enum.py +++ b/src/merge/resources/crm/types/address_type_enum.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ....core import enum + T_Result = typing.TypeVar("T_Result") -class AddressTypeEnum(str, enum.Enum): +class AddressTypeEnum(enum.StrEnum): """ * `BILLING` - BILLING * `SHIPPING` - SHIPPING diff --git a/src/merge/resources/crm/types/advanced_metadata.py b/src/merge/resources/crm/types/advanced_metadata.py index 60b5d072..aef64bb3 100644 --- a/src/merge/resources/crm/types/advanced_metadata.py +++ b/src/merge/resources/crm/types/advanced_metadata.py @@ -13,7 +13,7 @@ class AdvancedMetadata(UncheckedBaseModel): description: typing.Optional[str] = None is_required: typing.Optional[bool] = None is_custom: typing.Optional[bool] = None - field_choices: typing.Optional[typing.List[typing.Optional[typing.Any]]] = None + field_choices: typing.Optional[typing.List[typing.Any]] = None if IS_PYDANTIC_V2: model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2 diff --git a/src/merge/resources/crm/types/association_type.py b/src/merge/resources/crm/types/association_type.py index e71d63b3..877f36ba 100644 --- a/src/merge/resources/crm/types/association_type.py +++ b/src/merge/resources/crm/types/association_type.py @@ -35,7 +35,7 @@ class AssociationType(UncheckedBaseModel): The datetime that this object was modified by Merge. """ - source_object_class: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = pydantic.Field(default=None) + source_object_class: typing.Optional[typing.Dict[str, typing.Any]] = pydantic.Field(default=None) """ The class of the source object (Custom Object or Common Model) for the association type. """ diff --git a/src/merge/resources/crm/types/cardinality_enum.py b/src/merge/resources/crm/types/cardinality_enum.py index d15b96fe..793a52ca 100644 --- a/src/merge/resources/crm/types/cardinality_enum.py +++ b/src/merge/resources/crm/types/cardinality_enum.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ....core import enum + T_Result = typing.TypeVar("T_Result") -class CardinalityEnum(str, enum.Enum): +class CardinalityEnum(enum.StrEnum): """ * `ONE_TO_ONE` - ONE_TO_ONE * `MANY_TO_ONE` - MANY_TO_ONE diff --git a/src/merge/resources/crm/types/categories_enum.py b/src/merge/resources/crm/types/categories_enum.py index 3f2dc5a9..82308151 100644 --- a/src/merge/resources/crm/types/categories_enum.py +++ b/src/merge/resources/crm/types/categories_enum.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ....core import enum + T_Result = typing.TypeVar("T_Result") -class CategoriesEnum(str, enum.Enum): +class CategoriesEnum(enum.StrEnum): """ * `hris` - hris * `ats` - ats diff --git a/src/merge/resources/crm/types/category_enum.py b/src/merge/resources/crm/types/category_enum.py index d37e48f5..9a2fa8c7 100644 --- a/src/merge/resources/crm/types/category_enum.py +++ b/src/merge/resources/crm/types/category_enum.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ....core import enum + T_Result = typing.TypeVar("T_Result") -class CategoryEnum(str, enum.Enum): +class CategoryEnum(enum.StrEnum): """ * `hris` - hris * `ats` - ats diff --git a/src/merge/resources/crm/types/contact.py b/src/merge/resources/crm/types/contact.py index d5b7019a..3829b700 100644 --- a/src/merge/resources/crm/types/contact.py +++ b/src/merge/resources/crm/types/contact.py @@ -78,7 +78,7 @@ class Contact(UncheckedBaseModel): Indicates whether or not this object has been deleted in the third party platform. Full coverage deletion detection is a premium add-on. Native deletion detection is offered for free with limited coverage. [Learn more](https://docs.merge.dev/integrations/hris/supported-features/). """ - field_mappings: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None + field_mappings: typing.Optional[typing.Dict[str, typing.Any]] = None remote_data: typing.Optional[typing.List[RemoteData]] = None remote_fields: typing.Optional[typing.List[RemoteField]] = None diff --git a/src/merge/resources/crm/types/contact_request.py b/src/merge/resources/crm/types/contact_request.py index 12849554..2570ed7c 100644 --- a/src/merge/resources/crm/types/contact_request.py +++ b/src/merge/resources/crm/types/contact_request.py @@ -51,8 +51,8 @@ class ContactRequest(UncheckedBaseModel): When the contact's last activity occurred. """ - integration_params: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None - linked_account_params: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None + integration_params: typing.Optional[typing.Dict[str, typing.Any]] = None + linked_account_params: typing.Optional[typing.Dict[str, typing.Any]] = None remote_fields: typing.Optional[typing.List[RemoteFieldRequest]] = None if IS_PYDANTIC_V2: diff --git a/src/merge/resources/crm/types/country_enum.py b/src/merge/resources/crm/types/country_enum.py index a631e320..f2dd1f87 100644 --- a/src/merge/resources/crm/types/country_enum.py +++ b/src/merge/resources/crm/types/country_enum.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ....core import enum + T_Result = typing.TypeVar("T_Result") -class CountryEnum(str, enum.Enum): +class CountryEnum(enum.StrEnum): """ * `AF` - Afghanistan * `AX` - Åland Islands diff --git a/src/merge/resources/crm/types/custom_object.py b/src/merge/resources/crm/types/custom_object.py index 8f61f187..d4621387 100644 --- a/src/merge/resources/crm/types/custom_object.py +++ b/src/merge/resources/crm/types/custom_object.py @@ -39,7 +39,7 @@ class CustomObject(UncheckedBaseModel): The custom object class the custom object record belongs to. """ - fields: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = pydantic.Field(default=None) + fields: typing.Optional[typing.Dict[str, typing.Any]] = pydantic.Field(default=None) """ The fields and values contained within the custom object record. """ diff --git a/src/merge/resources/crm/types/custom_object_class.py b/src/merge/resources/crm/types/custom_object_class.py index 988806de..b0479973 100644 --- a/src/merge/resources/crm/types/custom_object_class.py +++ b/src/merge/resources/crm/types/custom_object_class.py @@ -42,9 +42,7 @@ class CustomObjectClass(UncheckedBaseModel): """ fields: typing.Optional[typing.List[CustomObjectClassFieldsItem]] = None - association_types: typing.Optional[typing.List[typing.Dict[str, typing.Optional[typing.Any]]]] = pydantic.Field( - default=None - ) + association_types: typing.Optional[typing.List[typing.Dict[str, typing.Any]]] = pydantic.Field(default=None) """ The types of associations with other models that the custom object class can have. """ diff --git a/src/merge/resources/crm/types/custom_object_request.py b/src/merge/resources/crm/types/custom_object_request.py index 012650f9..b5d526da 100644 --- a/src/merge/resources/crm/types/custom_object_request.py +++ b/src/merge/resources/crm/types/custom_object_request.py @@ -8,9 +8,9 @@ class CustomObjectRequest(UncheckedBaseModel): - fields: typing.Dict[str, typing.Optional[typing.Any]] - integration_params: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None - linked_account_params: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None + fields: typing.Dict[str, typing.Any] + integration_params: typing.Optional[typing.Dict[str, typing.Any]] = None + linked_account_params: typing.Optional[typing.Dict[str, typing.Any]] = None if IS_PYDANTIC_V2: model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2 diff --git a/src/merge/resources/crm/types/data_passthrough_request.py b/src/merge/resources/crm/types/data_passthrough_request.py index c9f0a799..df3af029 100644 --- a/src/merge/resources/crm/types/data_passthrough_request.py +++ b/src/merge/resources/crm/types/data_passthrough_request.py @@ -41,7 +41,7 @@ class DataPassthroughRequest(UncheckedBaseModel): Pass an array of `MultipartFormField` objects in here instead of using the `data` param if `request_format` is set to `MULTIPART`. """ - headers: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = pydantic.Field(default=None) + headers: typing.Optional[typing.Dict[str, typing.Any]] = pydantic.Field(default=None) """ The headers to use for the request (Merge will handle the account's authorization headers). `Content-Type` header is required for passthrough. Choose content type corresponding to expected format of receiving server. """ diff --git a/src/merge/resources/crm/types/direction_enum.py b/src/merge/resources/crm/types/direction_enum.py index 07c93ea6..94a809c9 100644 --- a/src/merge/resources/crm/types/direction_enum.py +++ b/src/merge/resources/crm/types/direction_enum.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ....core import enum + T_Result = typing.TypeVar("T_Result") -class DirectionEnum(str, enum.Enum): +class DirectionEnum(enum.StrEnum): """ * `INBOUND` - INBOUND * `OUTBOUND` - OUTBOUND diff --git a/src/merge/resources/crm/types/email_address_request.py b/src/merge/resources/crm/types/email_address_request.py index ae878e00..0633cce6 100644 --- a/src/merge/resources/crm/types/email_address_request.py +++ b/src/merge/resources/crm/types/email_address_request.py @@ -26,8 +26,8 @@ class EmailAddressRequest(UncheckedBaseModel): The email address's type. """ - integration_params: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None - linked_account_params: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None + integration_params: typing.Optional[typing.Dict[str, typing.Any]] = None + linked_account_params: typing.Optional[typing.Dict[str, typing.Any]] = None if IS_PYDANTIC_V2: model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2 diff --git a/src/merge/resources/crm/types/enabled_actions_enum.py b/src/merge/resources/crm/types/enabled_actions_enum.py index 29cf9839..604265f8 100644 --- a/src/merge/resources/crm/types/enabled_actions_enum.py +++ b/src/merge/resources/crm/types/enabled_actions_enum.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ....core import enum + T_Result = typing.TypeVar("T_Result") -class EnabledActionsEnum(str, enum.Enum): +class EnabledActionsEnum(enum.StrEnum): """ * `READ` - READ * `WRITE` - WRITE diff --git a/src/merge/resources/crm/types/encoding_enum.py b/src/merge/resources/crm/types/encoding_enum.py index 7454647e..aa2aa971 100644 --- a/src/merge/resources/crm/types/encoding_enum.py +++ b/src/merge/resources/crm/types/encoding_enum.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ....core import enum + T_Result = typing.TypeVar("T_Result") -class EncodingEnum(str, enum.Enum): +class EncodingEnum(enum.StrEnum): """ * `RAW` - RAW * `BASE64` - BASE64 diff --git a/src/merge/resources/crm/types/engagement.py b/src/merge/resources/crm/types/engagement.py index 4a351907..e149fd8b 100644 --- a/src/merge/resources/crm/types/engagement.py +++ b/src/merge/resources/crm/types/engagement.py @@ -89,7 +89,7 @@ class Engagement(UncheckedBaseModel): Indicates whether or not this object has been deleted in the third party platform. Full coverage deletion detection is a premium add-on. Native deletion detection is offered for free with limited coverage. [Learn more](https://docs.merge.dev/integrations/hris/supported-features/). """ - field_mappings: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None + field_mappings: typing.Optional[typing.Dict[str, typing.Any]] = None remote_data: typing.Optional[typing.List[RemoteData]] = None remote_fields: typing.Optional[typing.List[RemoteField]] = None diff --git a/src/merge/resources/crm/types/engagement_request.py b/src/merge/resources/crm/types/engagement_request.py index 682149c2..6f161e98 100644 --- a/src/merge/resources/crm/types/engagement_request.py +++ b/src/merge/resources/crm/types/engagement_request.py @@ -67,8 +67,8 @@ class EngagementRequest(UncheckedBaseModel): """ contacts: typing.Optional[typing.List[typing.Optional[EngagementRequestContactsItem]]] = None - integration_params: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None - linked_account_params: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None + integration_params: typing.Optional[typing.Dict[str, typing.Any]] = None + linked_account_params: typing.Optional[typing.Dict[str, typing.Any]] = None remote_fields: typing.Optional[typing.List[RemoteFieldRequest]] = None if IS_PYDANTIC_V2: diff --git a/src/merge/resources/crm/types/event_type_enum.py b/src/merge/resources/crm/types/event_type_enum.py index 537cea3f..1c16772d 100644 --- a/src/merge/resources/crm/types/event_type_enum.py +++ b/src/merge/resources/crm/types/event_type_enum.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ....core import enum + T_Result = typing.TypeVar("T_Result") -class EventTypeEnum(str, enum.Enum): +class EventTypeEnum(enum.StrEnum): """ * `CREATED_REMOTE_PRODUCTION_API_KEY` - CREATED_REMOTE_PRODUCTION_API_KEY * `DELETED_REMOTE_PRODUCTION_API_KEY` - DELETED_REMOTE_PRODUCTION_API_KEY diff --git a/src/merge/resources/crm/types/external_target_field_api_response.py b/src/merge/resources/crm/types/external_target_field_api_response.py index 8613e032..be9db5e9 100644 --- a/src/merge/resources/crm/types/external_target_field_api_response.py +++ b/src/merge/resources/crm/types/external_target_field_api_response.py @@ -3,23 +3,51 @@ import typing import pydantic +import typing_extensions from ....core.pydantic_utilities import IS_PYDANTIC_V2 +from ....core.serialization import FieldMetadata from ....core.unchecked_base_model import UncheckedBaseModel from .external_target_field_api import ExternalTargetFieldApi class ExternalTargetFieldApiResponse(UncheckedBaseModel): - account: typing.Optional[typing.List[ExternalTargetFieldApi]] = pydantic.Field(alias="Account", default=None) - contact: typing.Optional[typing.List[ExternalTargetFieldApi]] = pydantic.Field(alias="Contact", default=None) - lead: typing.Optional[typing.List[ExternalTargetFieldApi]] = pydantic.Field(alias="Lead", default=None) - note: typing.Optional[typing.List[ExternalTargetFieldApi]] = pydantic.Field(alias="Note", default=None) - opportunity: typing.Optional[typing.List[ExternalTargetFieldApi]] = pydantic.Field( - alias="Opportunity", default=None - ) - stage: typing.Optional[typing.List[ExternalTargetFieldApi]] = pydantic.Field(alias="Stage", default=None) - user: typing.Optional[typing.List[ExternalTargetFieldApi]] = pydantic.Field(alias="User", default=None) - task: typing.Optional[typing.List[ExternalTargetFieldApi]] = pydantic.Field(alias="Task", default=None) - engagement: typing.Optional[typing.List[ExternalTargetFieldApi]] = pydantic.Field(alias="Engagement", default=None) + account: typing_extensions.Annotated[ + typing.Optional[typing.List[ExternalTargetFieldApi]], + FieldMetadata(alias="Account"), + pydantic.Field(alias="Account"), + ] = None + contact: typing_extensions.Annotated[ + typing.Optional[typing.List[ExternalTargetFieldApi]], + FieldMetadata(alias="Contact"), + pydantic.Field(alias="Contact"), + ] = None + lead: typing_extensions.Annotated[ + typing.Optional[typing.List[ExternalTargetFieldApi]], FieldMetadata(alias="Lead"), pydantic.Field(alias="Lead") + ] = None + note: typing_extensions.Annotated[ + typing.Optional[typing.List[ExternalTargetFieldApi]], FieldMetadata(alias="Note"), pydantic.Field(alias="Note") + ] = None + opportunity: typing_extensions.Annotated[ + typing.Optional[typing.List[ExternalTargetFieldApi]], + FieldMetadata(alias="Opportunity"), + pydantic.Field(alias="Opportunity"), + ] = None + stage: typing_extensions.Annotated[ + typing.Optional[typing.List[ExternalTargetFieldApi]], + FieldMetadata(alias="Stage"), + pydantic.Field(alias="Stage"), + ] = None + user: typing_extensions.Annotated[ + typing.Optional[typing.List[ExternalTargetFieldApi]], FieldMetadata(alias="User"), pydantic.Field(alias="User") + ] = None + task: typing_extensions.Annotated[ + typing.Optional[typing.List[ExternalTargetFieldApi]], FieldMetadata(alias="Task"), pydantic.Field(alias="Task") + ] = None + engagement: typing_extensions.Annotated[ + typing.Optional[typing.List[ExternalTargetFieldApi]], + FieldMetadata(alias="Engagement"), + pydantic.Field(alias="Engagement"), + ] = None if IS_PYDANTIC_V2: model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2 diff --git a/src/merge/resources/crm/types/field_format_enum.py b/src/merge/resources/crm/types/field_format_enum.py index 2f6eda2f..26052239 100644 --- a/src/merge/resources/crm/types/field_format_enum.py +++ b/src/merge/resources/crm/types/field_format_enum.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ....core import enum + T_Result = typing.TypeVar("T_Result") -class FieldFormatEnum(str, enum.Enum): +class FieldFormatEnum(enum.StrEnum): """ * `string` - string * `number` - number diff --git a/src/merge/resources/crm/types/field_mapping_api_instance_remote_field.py b/src/merge/resources/crm/types/field_mapping_api_instance_remote_field.py index 578a2b10..ccd1f990 100644 --- a/src/merge/resources/crm/types/field_mapping_api_instance_remote_field.py +++ b/src/merge/resources/crm/types/field_mapping_api_instance_remote_field.py @@ -3,7 +3,9 @@ import typing import pydantic +import typing_extensions from ....core.pydantic_utilities import IS_PYDANTIC_V2 +from ....core.serialization import FieldMetadata from ....core.unchecked_base_model import UncheckedBaseModel from .field_mapping_api_instance_remote_field_remote_endpoint_info import ( FieldMappingApiInstanceRemoteFieldRemoteEndpointInfo, @@ -12,9 +14,9 @@ class FieldMappingApiInstanceRemoteField(UncheckedBaseModel): remote_key_name: typing.Optional[str] = None - schema_: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = pydantic.Field( - alias="schema", default=None - ) + schema_: typing_extensions.Annotated[ + typing.Optional[typing.Dict[str, typing.Any]], FieldMetadata(alias="schema"), pydantic.Field(alias="schema") + ] = None remote_endpoint_info: FieldMappingApiInstanceRemoteFieldRemoteEndpointInfo if IS_PYDANTIC_V2: diff --git a/src/merge/resources/crm/types/field_mapping_api_instance_response.py b/src/merge/resources/crm/types/field_mapping_api_instance_response.py index 83c33ca6..c03cc878 100644 --- a/src/merge/resources/crm/types/field_mapping_api_instance_response.py +++ b/src/merge/resources/crm/types/field_mapping_api_instance_response.py @@ -3,23 +3,51 @@ import typing import pydantic +import typing_extensions from ....core.pydantic_utilities import IS_PYDANTIC_V2 +from ....core.serialization import FieldMetadata from ....core.unchecked_base_model import UncheckedBaseModel from .field_mapping_api_instance import FieldMappingApiInstance class FieldMappingApiInstanceResponse(UncheckedBaseModel): - account: typing.Optional[typing.List[FieldMappingApiInstance]] = pydantic.Field(alias="Account", default=None) - contact: typing.Optional[typing.List[FieldMappingApiInstance]] = pydantic.Field(alias="Contact", default=None) - lead: typing.Optional[typing.List[FieldMappingApiInstance]] = pydantic.Field(alias="Lead", default=None) - note: typing.Optional[typing.List[FieldMappingApiInstance]] = pydantic.Field(alias="Note", default=None) - opportunity: typing.Optional[typing.List[FieldMappingApiInstance]] = pydantic.Field( - alias="Opportunity", default=None - ) - stage: typing.Optional[typing.List[FieldMappingApiInstance]] = pydantic.Field(alias="Stage", default=None) - user: typing.Optional[typing.List[FieldMappingApiInstance]] = pydantic.Field(alias="User", default=None) - task: typing.Optional[typing.List[FieldMappingApiInstance]] = pydantic.Field(alias="Task", default=None) - engagement: typing.Optional[typing.List[FieldMappingApiInstance]] = pydantic.Field(alias="Engagement", default=None) + account: typing_extensions.Annotated[ + typing.Optional[typing.List[FieldMappingApiInstance]], + FieldMetadata(alias="Account"), + pydantic.Field(alias="Account"), + ] = None + contact: typing_extensions.Annotated[ + typing.Optional[typing.List[FieldMappingApiInstance]], + FieldMetadata(alias="Contact"), + pydantic.Field(alias="Contact"), + ] = None + lead: typing_extensions.Annotated[ + typing.Optional[typing.List[FieldMappingApiInstance]], FieldMetadata(alias="Lead"), pydantic.Field(alias="Lead") + ] = None + note: typing_extensions.Annotated[ + typing.Optional[typing.List[FieldMappingApiInstance]], FieldMetadata(alias="Note"), pydantic.Field(alias="Note") + ] = None + opportunity: typing_extensions.Annotated[ + typing.Optional[typing.List[FieldMappingApiInstance]], + FieldMetadata(alias="Opportunity"), + pydantic.Field(alias="Opportunity"), + ] = None + stage: typing_extensions.Annotated[ + typing.Optional[typing.List[FieldMappingApiInstance]], + FieldMetadata(alias="Stage"), + pydantic.Field(alias="Stage"), + ] = None + user: typing_extensions.Annotated[ + typing.Optional[typing.List[FieldMappingApiInstance]], FieldMetadata(alias="User"), pydantic.Field(alias="User") + ] = None + task: typing_extensions.Annotated[ + typing.Optional[typing.List[FieldMappingApiInstance]], FieldMetadata(alias="Task"), pydantic.Field(alias="Task") + ] = None + engagement: typing_extensions.Annotated[ + typing.Optional[typing.List[FieldMappingApiInstance]], + FieldMetadata(alias="Engagement"), + pydantic.Field(alias="Engagement"), + ] = None if IS_PYDANTIC_V2: model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2 diff --git a/src/merge/resources/crm/types/field_permission_deserializer.py b/src/merge/resources/crm/types/field_permission_deserializer.py index 1d71ae04..407ed547 100644 --- a/src/merge/resources/crm/types/field_permission_deserializer.py +++ b/src/merge/resources/crm/types/field_permission_deserializer.py @@ -8,8 +8,8 @@ class FieldPermissionDeserializer(UncheckedBaseModel): - enabled_fields: typing.Optional[typing.List[typing.Optional[typing.Any]]] = None - disabled_fields: typing.Optional[typing.List[typing.Optional[typing.Any]]] = None + enabled_fields: typing.Optional[typing.List[typing.Any]] = None + disabled_fields: typing.Optional[typing.List[typing.Any]] = None if IS_PYDANTIC_V2: model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2 diff --git a/src/merge/resources/crm/types/field_permission_deserializer_request.py b/src/merge/resources/crm/types/field_permission_deserializer_request.py index a4113b46..6680c7d2 100644 --- a/src/merge/resources/crm/types/field_permission_deserializer_request.py +++ b/src/merge/resources/crm/types/field_permission_deserializer_request.py @@ -8,8 +8,8 @@ class FieldPermissionDeserializerRequest(UncheckedBaseModel): - enabled_fields: typing.Optional[typing.List[typing.Optional[typing.Any]]] = None - disabled_fields: typing.Optional[typing.List[typing.Optional[typing.Any]]] = None + enabled_fields: typing.Optional[typing.List[typing.Any]] = None + disabled_fields: typing.Optional[typing.List[typing.Any]] = None if IS_PYDANTIC_V2: model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2 diff --git a/src/merge/resources/crm/types/field_type_enum.py b/src/merge/resources/crm/types/field_type_enum.py index b99c1309..d3635f4b 100644 --- a/src/merge/resources/crm/types/field_type_enum.py +++ b/src/merge/resources/crm/types/field_type_enum.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ....core import enum + T_Result = typing.TypeVar("T_Result") -class FieldTypeEnum(str, enum.Enum): +class FieldTypeEnum(enum.StrEnum): """ * `string` - string * `number` - number diff --git a/src/merge/resources/crm/types/issue.py b/src/merge/resources/crm/types/issue.py index df31be95..5d37505d 100644 --- a/src/merge/resources/crm/types/issue.py +++ b/src/merge/resources/crm/types/issue.py @@ -20,7 +20,7 @@ class Issue(UncheckedBaseModel): """ error_description: str - end_user: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None + end_user: typing.Optional[typing.Dict[str, typing.Any]] = None first_incident_time: typing.Optional[dt.datetime] = None last_incident_time: typing.Optional[dt.datetime] = None is_muted: typing.Optional[bool] = None diff --git a/src/merge/resources/crm/types/issue_status_enum.py b/src/merge/resources/crm/types/issue_status_enum.py index 57eb9618..30d126bb 100644 --- a/src/merge/resources/crm/types/issue_status_enum.py +++ b/src/merge/resources/crm/types/issue_status_enum.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ....core import enum + T_Result = typing.TypeVar("T_Result") -class IssueStatusEnum(str, enum.Enum): +class IssueStatusEnum(enum.StrEnum): """ * `ONGOING` - ONGOING * `RESOLVED` - RESOLVED diff --git a/src/merge/resources/crm/types/item_format_enum.py b/src/merge/resources/crm/types/item_format_enum.py index 6fef7236..6e1e81ce 100644 --- a/src/merge/resources/crm/types/item_format_enum.py +++ b/src/merge/resources/crm/types/item_format_enum.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ....core import enum + T_Result = typing.TypeVar("T_Result") -class ItemFormatEnum(str, enum.Enum): +class ItemFormatEnum(enum.StrEnum): """ * `string` - uuid * `number` - url diff --git a/src/merge/resources/crm/types/item_type_enum.py b/src/merge/resources/crm/types/item_type_enum.py index afcc4dd6..f92370d0 100644 --- a/src/merge/resources/crm/types/item_type_enum.py +++ b/src/merge/resources/crm/types/item_type_enum.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ....core import enum + T_Result = typing.TypeVar("T_Result") -class ItemTypeEnum(str, enum.Enum): +class ItemTypeEnum(enum.StrEnum): """ * `string` - string * `number` - number diff --git a/src/merge/resources/crm/types/language_enum.py b/src/merge/resources/crm/types/language_enum.py index 44b693f2..3ff1e9da 100644 --- a/src/merge/resources/crm/types/language_enum.py +++ b/src/merge/resources/crm/types/language_enum.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ....core import enum + T_Result = typing.TypeVar("T_Result") -class LanguageEnum(str, enum.Enum): +class LanguageEnum(enum.StrEnum): """ * `en` - en * `de` - de diff --git a/src/merge/resources/crm/types/last_sync_result_enum.py b/src/merge/resources/crm/types/last_sync_result_enum.py index ec777ee6..f82505a1 100644 --- a/src/merge/resources/crm/types/last_sync_result_enum.py +++ b/src/merge/resources/crm/types/last_sync_result_enum.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ....core import enum + T_Result = typing.TypeVar("T_Result") -class LastSyncResultEnum(str, enum.Enum): +class LastSyncResultEnum(enum.StrEnum): """ * `SYNCING` - SYNCING * `DONE` - DONE diff --git a/src/merge/resources/crm/types/lead.py b/src/merge/resources/crm/types/lead.py index a588e0bb..45803fff 100644 --- a/src/merge/resources/crm/types/lead.py +++ b/src/merge/resources/crm/types/lead.py @@ -115,7 +115,7 @@ class Lead(UncheckedBaseModel): Indicates whether or not this object has been deleted in the third party platform. Full coverage deletion detection is a premium add-on. Native deletion detection is offered for free with limited coverage. [Learn more](https://docs.merge.dev/integrations/hris/supported-features/). """ - field_mappings: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None + field_mappings: typing.Optional[typing.Dict[str, typing.Any]] = None remote_data: typing.Optional[typing.List[RemoteData]] = None remote_fields: typing.Optional[typing.List[RemoteField]] = None diff --git a/src/merge/resources/crm/types/lead_request.py b/src/merge/resources/crm/types/lead_request.py index f2cb290a..fc3db849 100644 --- a/src/merge/resources/crm/types/lead_request.py +++ b/src/merge/resources/crm/types/lead_request.py @@ -72,8 +72,8 @@ class LeadRequest(UncheckedBaseModel): The account of the converted lead. """ - integration_params: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None - linked_account_params: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None + integration_params: typing.Optional[typing.Dict[str, typing.Any]] = None + linked_account_params: typing.Optional[typing.Dict[str, typing.Any]] = None remote_fields: typing.Optional[typing.List[RemoteFieldRequest]] = None if IS_PYDANTIC_V2: diff --git a/src/merge/resources/crm/types/lead_status_enum.py b/src/merge/resources/crm/types/lead_status_enum.py index 31069a59..f14b8010 100644 --- a/src/merge/resources/crm/types/lead_status_enum.py +++ b/src/merge/resources/crm/types/lead_status_enum.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ....core import enum + T_Result = typing.TypeVar("T_Result") -class LeadStatusEnum(str, enum.Enum): +class LeadStatusEnum(enum.StrEnum): """ * `OPEN` - OPEN * `CLOSED` - CLOSED diff --git a/src/merge/resources/crm/types/meta_response.py b/src/merge/resources/crm/types/meta_response.py index caa2c831..0da37619 100644 --- a/src/merge/resources/crm/types/meta_response.py +++ b/src/merge/resources/crm/types/meta_response.py @@ -9,8 +9,8 @@ class MetaResponse(UncheckedBaseModel): - request_schema: typing.Dict[str, typing.Optional[typing.Any]] - remote_field_classes: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None + request_schema: typing.Dict[str, typing.Any] + remote_field_classes: typing.Optional[typing.Dict[str, typing.Any]] = None status: typing.Optional[LinkedAccountStatus] = None has_conditional_params: bool has_required_linked_account_params: bool diff --git a/src/merge/resources/crm/types/method_enum.py b/src/merge/resources/crm/types/method_enum.py index 57bcde10..4c8376dd 100644 --- a/src/merge/resources/crm/types/method_enum.py +++ b/src/merge/resources/crm/types/method_enum.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ....core import enum + T_Result = typing.TypeVar("T_Result") -class MethodEnum(str, enum.Enum): +class MethodEnum(enum.StrEnum): """ * `GET` - GET * `OPTIONS` - OPTIONS diff --git a/src/merge/resources/crm/types/note.py b/src/merge/resources/crm/types/note.py index 06410996..6e529029 100644 --- a/src/merge/resources/crm/types/note.py +++ b/src/merge/resources/crm/types/note.py @@ -79,7 +79,7 @@ class Note(UncheckedBaseModel): Indicates whether or not this object has been deleted in the third party platform. Full coverage deletion detection is a premium add-on. Native deletion detection is offered for free with limited coverage. [Learn more](https://docs.merge.dev/integrations/hris/supported-features/). """ - field_mappings: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None + field_mappings: typing.Optional[typing.Dict[str, typing.Any]] = None remote_data: typing.Optional[typing.List[RemoteData]] = None remote_fields: typing.Optional[typing.List[RemoteField]] = None diff --git a/src/merge/resources/crm/types/note_request.py b/src/merge/resources/crm/types/note_request.py index 7e9b1186..16fc6220 100644 --- a/src/merge/resources/crm/types/note_request.py +++ b/src/merge/resources/crm/types/note_request.py @@ -46,8 +46,8 @@ class NoteRequest(UncheckedBaseModel): The note's opportunity. """ - integration_params: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None - linked_account_params: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None + integration_params: typing.Optional[typing.Dict[str, typing.Any]] = None + linked_account_params: typing.Optional[typing.Dict[str, typing.Any]] = None remote_fields: typing.Optional[typing.List[RemoteFieldRequest]] = None if IS_PYDANTIC_V2: diff --git a/src/merge/resources/crm/types/opportunity.py b/src/merge/resources/crm/types/opportunity.py index 681c24e0..424ef76c 100644 --- a/src/merge/resources/crm/types/opportunity.py +++ b/src/merge/resources/crm/types/opportunity.py @@ -98,7 +98,7 @@ class Opportunity(UncheckedBaseModel): Indicates whether or not this object has been deleted in the third party platform. Full coverage deletion detection is a premium add-on. Native deletion detection is offered for free with limited coverage. [Learn more](https://docs.merge.dev/integrations/hris/supported-features/). """ - field_mappings: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None + field_mappings: typing.Optional[typing.Dict[str, typing.Any]] = None remote_data: typing.Optional[typing.List[RemoteData]] = None remote_fields: typing.Optional[typing.List[RemoteField]] = None diff --git a/src/merge/resources/crm/types/opportunity_request.py b/src/merge/resources/crm/types/opportunity_request.py index d39733e5..85733a75 100644 --- a/src/merge/resources/crm/types/opportunity_request.py +++ b/src/merge/resources/crm/types/opportunity_request.py @@ -71,8 +71,8 @@ class OpportunityRequest(UncheckedBaseModel): When the opportunity was closed. """ - integration_params: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None - linked_account_params: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None + integration_params: typing.Optional[typing.Dict[str, typing.Any]] = None + linked_account_params: typing.Optional[typing.Dict[str, typing.Any]] = None remote_fields: typing.Optional[typing.List[RemoteFieldRequest]] = None if IS_PYDANTIC_V2: diff --git a/src/merge/resources/crm/types/opportunity_status_enum.py b/src/merge/resources/crm/types/opportunity_status_enum.py index b07f8a0a..cea777e9 100644 --- a/src/merge/resources/crm/types/opportunity_status_enum.py +++ b/src/merge/resources/crm/types/opportunity_status_enum.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ....core import enum + T_Result = typing.TypeVar("T_Result") -class OpportunityStatusEnum(str, enum.Enum): +class OpportunityStatusEnum(enum.StrEnum): """ * `OPEN` - OPEN * `WON` - WON diff --git a/src/merge/resources/crm/types/origin_type_enum.py b/src/merge/resources/crm/types/origin_type_enum.py index e9ac3c11..18a6a736 100644 --- a/src/merge/resources/crm/types/origin_type_enum.py +++ b/src/merge/resources/crm/types/origin_type_enum.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ....core import enum + T_Result = typing.TypeVar("T_Result") -class OriginTypeEnum(str, enum.Enum): +class OriginTypeEnum(enum.StrEnum): """ * `CUSTOM_OBJECT` - CUSTOM_OBJECT * `COMMON_MODEL` - COMMON_MODEL diff --git a/src/merge/resources/crm/types/patched_account_request.py b/src/merge/resources/crm/types/patched_account_request.py index 00aa39a4..0b41ddf2 100644 --- a/src/merge/resources/crm/types/patched_account_request.py +++ b/src/merge/resources/crm/types/patched_account_request.py @@ -56,8 +56,8 @@ class PatchedAccountRequest(UncheckedBaseModel): The last date (either most recent or furthest in the future) of when an activity occurs in an account. """ - integration_params: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None - linked_account_params: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None + integration_params: typing.Optional[typing.Dict[str, typing.Any]] = None + linked_account_params: typing.Optional[typing.Dict[str, typing.Any]] = None remote_fields: typing.Optional[typing.List[RemoteFieldRequest]] = None if IS_PYDANTIC_V2: diff --git a/src/merge/resources/crm/types/patched_contact_request.py b/src/merge/resources/crm/types/patched_contact_request.py index 54125162..18f25a50 100644 --- a/src/merge/resources/crm/types/patched_contact_request.py +++ b/src/merge/resources/crm/types/patched_contact_request.py @@ -51,8 +51,8 @@ class PatchedContactRequest(UncheckedBaseModel): When the contact's last activity occurred. """ - integration_params: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None - linked_account_params: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None + integration_params: typing.Optional[typing.Dict[str, typing.Any]] = None + linked_account_params: typing.Optional[typing.Dict[str, typing.Any]] = None remote_fields: typing.Optional[typing.List[RemoteFieldRequest]] = None if IS_PYDANTIC_V2: diff --git a/src/merge/resources/crm/types/patched_engagement_request.py b/src/merge/resources/crm/types/patched_engagement_request.py index 2f38009d..84d080a8 100644 --- a/src/merge/resources/crm/types/patched_engagement_request.py +++ b/src/merge/resources/crm/types/patched_engagement_request.py @@ -67,8 +67,8 @@ class PatchedEngagementRequest(UncheckedBaseModel): """ contacts: typing.Optional[typing.List[PatchedEngagementRequestContactsItem]] = None - integration_params: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None - linked_account_params: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None + integration_params: typing.Optional[typing.Dict[str, typing.Any]] = None + linked_account_params: typing.Optional[typing.Dict[str, typing.Any]] = None remote_fields: typing.Optional[typing.List[RemoteFieldRequest]] = None if IS_PYDANTIC_V2: diff --git a/src/merge/resources/crm/types/patched_opportunity_request.py b/src/merge/resources/crm/types/patched_opportunity_request.py index eb65aa70..6cb928bd 100644 --- a/src/merge/resources/crm/types/patched_opportunity_request.py +++ b/src/merge/resources/crm/types/patched_opportunity_request.py @@ -71,8 +71,8 @@ class PatchedOpportunityRequest(UncheckedBaseModel): When the opportunity was closed. """ - integration_params: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None - linked_account_params: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None + integration_params: typing.Optional[typing.Dict[str, typing.Any]] = None + linked_account_params: typing.Optional[typing.Dict[str, typing.Any]] = None remote_fields: typing.Optional[typing.List[RemoteFieldRequest]] = None if IS_PYDANTIC_V2: diff --git a/src/merge/resources/crm/types/patched_task_request.py b/src/merge/resources/crm/types/patched_task_request.py index bc94a919..18db7d3c 100644 --- a/src/merge/resources/crm/types/patched_task_request.py +++ b/src/merge/resources/crm/types/patched_task_request.py @@ -71,8 +71,8 @@ class PatchedTaskRequest(UncheckedBaseModel): * `CLOSED` - CLOSED """ - integration_params: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None - linked_account_params: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None + integration_params: typing.Optional[typing.Dict[str, typing.Any]] = None + linked_account_params: typing.Optional[typing.Dict[str, typing.Any]] = None remote_fields: typing.Optional[typing.List[RemoteFieldRequest]] = None if IS_PYDANTIC_V2: diff --git a/src/merge/resources/crm/types/phone_number_request.py b/src/merge/resources/crm/types/phone_number_request.py index c70332b1..5a865a6b 100644 --- a/src/merge/resources/crm/types/phone_number_request.py +++ b/src/merge/resources/crm/types/phone_number_request.py @@ -26,8 +26,8 @@ class PhoneNumberRequest(UncheckedBaseModel): The phone number's type. """ - integration_params: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None - linked_account_params: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None + integration_params: typing.Optional[typing.Dict[str, typing.Any]] = None + linked_account_params: typing.Optional[typing.Dict[str, typing.Any]] = None if IS_PYDANTIC_V2: model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2 diff --git a/src/merge/resources/crm/types/reason_enum.py b/src/merge/resources/crm/types/reason_enum.py index ea6ba5b6..77c6e96c 100644 --- a/src/merge/resources/crm/types/reason_enum.py +++ b/src/merge/resources/crm/types/reason_enum.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ....core import enum + T_Result = typing.TypeVar("T_Result") -class ReasonEnum(str, enum.Enum): +class ReasonEnum(enum.StrEnum): """ * `GENERAL_CUSTOMER_REQUEST` - GENERAL_CUSTOMER_REQUEST * `GDPR` - GDPR diff --git a/src/merge/resources/crm/types/remote_data.py b/src/merge/resources/crm/types/remote_data.py index f34bec80..2026f05a 100644 --- a/src/merge/resources/crm/types/remote_data.py +++ b/src/merge/resources/crm/types/remote_data.py @@ -22,7 +22,7 @@ class RemoteData(UncheckedBaseModel): The third-party API path that is being called. """ - data: typing.Optional[typing.Optional[typing.Any]] = pydantic.Field(default=None) + data: typing.Optional[typing.Any] = pydantic.Field(default=None) """ The data returned from the third-party for this object in its original, unnormalized format. """ diff --git a/src/merge/resources/crm/types/remote_endpoint_info.py b/src/merge/resources/crm/types/remote_endpoint_info.py index 07ceff6a..ffa70b94 100644 --- a/src/merge/resources/crm/types/remote_endpoint_info.py +++ b/src/merge/resources/crm/types/remote_endpoint_info.py @@ -10,7 +10,7 @@ class RemoteEndpointInfo(UncheckedBaseModel): method: str url_path: str - field_traversal_path: typing.List[typing.Optional[typing.Any]] + field_traversal_path: typing.List[typing.Any] if IS_PYDANTIC_V2: model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2 diff --git a/src/merge/resources/crm/types/remote_field.py b/src/merge/resources/crm/types/remote_field.py index 1a9272f0..556c69ef 100644 --- a/src/merge/resources/crm/types/remote_field.py +++ b/src/merge/resources/crm/types/remote_field.py @@ -10,7 +10,7 @@ class RemoteField(UncheckedBaseModel): remote_field_class: RemoteFieldRemoteFieldClass - value: typing.Optional[typing.Optional[typing.Any]] = None + value: typing.Optional[typing.Any] = None if IS_PYDANTIC_V2: model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2 diff --git a/src/merge/resources/crm/types/remote_field_api.py b/src/merge/resources/crm/types/remote_field_api.py index 4c66a23b..79cf45c4 100644 --- a/src/merge/resources/crm/types/remote_field_api.py +++ b/src/merge/resources/crm/types/remote_field_api.py @@ -3,7 +3,9 @@ import typing import pydantic +import typing_extensions from ....core.pydantic_utilities import IS_PYDANTIC_V2 +from ....core.serialization import FieldMetadata from ....core.unchecked_base_model import UncheckedBaseModel from .advanced_metadata import AdvancedMetadata from .remote_endpoint_info import RemoteEndpointInfo @@ -11,10 +13,12 @@ class RemoteFieldApi(UncheckedBaseModel): - schema_: typing.Dict[str, typing.Optional[typing.Any]] = pydantic.Field(alias="schema") + schema_: typing_extensions.Annotated[ + typing.Dict[str, typing.Any], FieldMetadata(alias="schema"), pydantic.Field(alias="schema") + ] remote_key_name: str remote_endpoint_info: RemoteEndpointInfo - example_values: typing.Optional[typing.List[typing.Optional[typing.Any]]] = None + example_values: typing.Optional[typing.List[typing.Any]] = None advanced_metadata: typing.Optional[AdvancedMetadata] = None coverage: typing.Optional[RemoteFieldApiCoverage] = None diff --git a/src/merge/resources/crm/types/remote_field_api_response.py b/src/merge/resources/crm/types/remote_field_api_response.py index 070cb10e..343a3da7 100644 --- a/src/merge/resources/crm/types/remote_field_api_response.py +++ b/src/merge/resources/crm/types/remote_field_api_response.py @@ -3,21 +3,45 @@ import typing import pydantic +import typing_extensions from ....core.pydantic_utilities import IS_PYDANTIC_V2 +from ....core.serialization import FieldMetadata from ....core.unchecked_base_model import UncheckedBaseModel from .remote_field_api import RemoteFieldApi class RemoteFieldApiResponse(UncheckedBaseModel): - account: typing.Optional[typing.List[RemoteFieldApi]] = pydantic.Field(alias="Account", default=None) - contact: typing.Optional[typing.List[RemoteFieldApi]] = pydantic.Field(alias="Contact", default=None) - lead: typing.Optional[typing.List[RemoteFieldApi]] = pydantic.Field(alias="Lead", default=None) - note: typing.Optional[typing.List[RemoteFieldApi]] = pydantic.Field(alias="Note", default=None) - opportunity: typing.Optional[typing.List[RemoteFieldApi]] = pydantic.Field(alias="Opportunity", default=None) - stage: typing.Optional[typing.List[RemoteFieldApi]] = pydantic.Field(alias="Stage", default=None) - user: typing.Optional[typing.List[RemoteFieldApi]] = pydantic.Field(alias="User", default=None) - task: typing.Optional[typing.List[RemoteFieldApi]] = pydantic.Field(alias="Task", default=None) - engagement: typing.Optional[typing.List[RemoteFieldApi]] = pydantic.Field(alias="Engagement", default=None) + account: typing_extensions.Annotated[ + typing.Optional[typing.List[RemoteFieldApi]], FieldMetadata(alias="Account"), pydantic.Field(alias="Account") + ] = None + contact: typing_extensions.Annotated[ + typing.Optional[typing.List[RemoteFieldApi]], FieldMetadata(alias="Contact"), pydantic.Field(alias="Contact") + ] = None + lead: typing_extensions.Annotated[ + typing.Optional[typing.List[RemoteFieldApi]], FieldMetadata(alias="Lead"), pydantic.Field(alias="Lead") + ] = None + note: typing_extensions.Annotated[ + typing.Optional[typing.List[RemoteFieldApi]], FieldMetadata(alias="Note"), pydantic.Field(alias="Note") + ] = None + opportunity: typing_extensions.Annotated[ + typing.Optional[typing.List[RemoteFieldApi]], + FieldMetadata(alias="Opportunity"), + pydantic.Field(alias="Opportunity"), + ] = None + stage: typing_extensions.Annotated[ + typing.Optional[typing.List[RemoteFieldApi]], FieldMetadata(alias="Stage"), pydantic.Field(alias="Stage") + ] = None + user: typing_extensions.Annotated[ + typing.Optional[typing.List[RemoteFieldApi]], FieldMetadata(alias="User"), pydantic.Field(alias="User") + ] = None + task: typing_extensions.Annotated[ + typing.Optional[typing.List[RemoteFieldApi]], FieldMetadata(alias="Task"), pydantic.Field(alias="Task") + ] = None + engagement: typing_extensions.Annotated[ + typing.Optional[typing.List[RemoteFieldApi]], + FieldMetadata(alias="Engagement"), + pydantic.Field(alias="Engagement"), + ] = None if IS_PYDANTIC_V2: model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2 diff --git a/src/merge/resources/crm/types/remote_field_class_field_choices_item.py b/src/merge/resources/crm/types/remote_field_class_field_choices_item.py index 9003f782..0b1a5faa 100644 --- a/src/merge/resources/crm/types/remote_field_class_field_choices_item.py +++ b/src/merge/resources/crm/types/remote_field_class_field_choices_item.py @@ -8,7 +8,7 @@ class RemoteFieldClassFieldChoicesItem(UncheckedBaseModel): - value: typing.Optional[typing.Optional[typing.Any]] = None + value: typing.Optional[typing.Any] = None display_name: typing.Optional[str] = None if IS_PYDANTIC_V2: diff --git a/src/merge/resources/crm/types/remote_field_class_for_custom_object_class_field_choices_item.py b/src/merge/resources/crm/types/remote_field_class_for_custom_object_class_field_choices_item.py index 930a4866..f5b8f9b4 100644 --- a/src/merge/resources/crm/types/remote_field_class_for_custom_object_class_field_choices_item.py +++ b/src/merge/resources/crm/types/remote_field_class_for_custom_object_class_field_choices_item.py @@ -8,7 +8,7 @@ class RemoteFieldClassForCustomObjectClassFieldChoicesItem(UncheckedBaseModel): - value: typing.Optional[typing.Optional[typing.Any]] = None + value: typing.Optional[typing.Any] = None display_name: typing.Optional[str] = None if IS_PYDANTIC_V2: diff --git a/src/merge/resources/crm/types/remote_field_request.py b/src/merge/resources/crm/types/remote_field_request.py index 69bc39da..e3c6e0fc 100644 --- a/src/merge/resources/crm/types/remote_field_request.py +++ b/src/merge/resources/crm/types/remote_field_request.py @@ -10,7 +10,7 @@ class RemoteFieldRequest(UncheckedBaseModel): remote_field_class: RemoteFieldRequestRemoteFieldClass - value: typing.Optional[typing.Optional[typing.Any]] = None + value: typing.Optional[typing.Any] = None if IS_PYDANTIC_V2: model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2 diff --git a/src/merge/resources/crm/types/remote_response.py b/src/merge/resources/crm/types/remote_response.py index db01131f..8bc6f905 100644 --- a/src/merge/resources/crm/types/remote_response.py +++ b/src/merge/resources/crm/types/remote_response.py @@ -21,10 +21,10 @@ class RemoteResponse(UncheckedBaseModel): method: str path: str status: int - response: typing.Optional[typing.Any] = None - response_headers: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None + response: typing.Any + response_headers: typing.Optional[typing.Dict[str, typing.Any]] = None response_type: typing.Optional[RemoteResponseResponseType] = None - headers: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None + headers: typing.Optional[typing.Dict[str, typing.Any]] = None if IS_PYDANTIC_V2: model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2 diff --git a/src/merge/resources/crm/types/request_format_enum.py b/src/merge/resources/crm/types/request_format_enum.py index 21c272f2..b8e2234c 100644 --- a/src/merge/resources/crm/types/request_format_enum.py +++ b/src/merge/resources/crm/types/request_format_enum.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ....core import enum + T_Result = typing.TypeVar("T_Result") -class RequestFormatEnum(str, enum.Enum): +class RequestFormatEnum(enum.StrEnum): """ * `JSON` - JSON * `XML` - XML diff --git a/src/merge/resources/crm/types/response_type_enum.py b/src/merge/resources/crm/types/response_type_enum.py index ef241302..8a72c2a9 100644 --- a/src/merge/resources/crm/types/response_type_enum.py +++ b/src/merge/resources/crm/types/response_type_enum.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ....core import enum + T_Result = typing.TypeVar("T_Result") -class ResponseTypeEnum(str, enum.Enum): +class ResponseTypeEnum(enum.StrEnum): """ * `JSON` - JSON * `BASE64_GZIP` - BASE64_GZIP diff --git a/src/merge/resources/crm/types/role_enum.py b/src/merge/resources/crm/types/role_enum.py index 8f2c9b1d..394ec992 100644 --- a/src/merge/resources/crm/types/role_enum.py +++ b/src/merge/resources/crm/types/role_enum.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ....core import enum + T_Result = typing.TypeVar("T_Result") -class RoleEnum(str, enum.Enum): +class RoleEnum(enum.StrEnum): """ * `ADMIN` - ADMIN * `DEVELOPER` - DEVELOPER diff --git a/src/merge/resources/crm/types/selective_sync_configurations_usage_enum.py b/src/merge/resources/crm/types/selective_sync_configurations_usage_enum.py index 9ff43813..e8e318c0 100644 --- a/src/merge/resources/crm/types/selective_sync_configurations_usage_enum.py +++ b/src/merge/resources/crm/types/selective_sync_configurations_usage_enum.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ....core import enum + T_Result = typing.TypeVar("T_Result") -class SelectiveSyncConfigurationsUsageEnum(str, enum.Enum): +class SelectiveSyncConfigurationsUsageEnum(enum.StrEnum): """ * `IN_NEXT_SYNC` - IN_NEXT_SYNC * `IN_LAST_SYNC` - IN_LAST_SYNC diff --git a/src/merge/resources/crm/types/stage.py b/src/merge/resources/crm/types/stage.py index 8e16e6df..15ff1510 100644 --- a/src/merge/resources/crm/types/stage.py +++ b/src/merge/resources/crm/types/stage.py @@ -45,7 +45,7 @@ class Stage(UncheckedBaseModel): Indicates whether or not this object has been deleted in the third party platform. Full coverage deletion detection is a premium add-on. Native deletion detection is offered for free with limited coverage. [Learn more](https://docs.merge.dev/integrations/hris/supported-features/). """ - field_mappings: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None + field_mappings: typing.Optional[typing.Dict[str, typing.Any]] = None remote_data: typing.Optional[typing.List[RemoteData]] = None remote_fields: typing.Optional[typing.List[RemoteField]] = None diff --git a/src/merge/resources/crm/types/status_fd_5_enum.py b/src/merge/resources/crm/types/status_fd_5_enum.py index d753f77c..6b851a79 100644 --- a/src/merge/resources/crm/types/status_fd_5_enum.py +++ b/src/merge/resources/crm/types/status_fd_5_enum.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ....core import enum + T_Result = typing.TypeVar("T_Result") -class StatusFd5Enum(str, enum.Enum): +class StatusFd5Enum(enum.StrEnum): """ * `SYNCING` - SYNCING * `DONE` - DONE diff --git a/src/merge/resources/crm/types/task.py b/src/merge/resources/crm/types/task.py index 8e26f590..4a03d421 100644 --- a/src/merge/resources/crm/types/task.py +++ b/src/merge/resources/crm/types/task.py @@ -93,7 +93,7 @@ class Task(UncheckedBaseModel): Indicates whether or not this object has been deleted in the third party platform. Full coverage deletion detection is a premium add-on. Native deletion detection is offered for free with limited coverage. [Learn more](https://docs.merge.dev/integrations/hris/supported-features/). """ - field_mappings: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None + field_mappings: typing.Optional[typing.Dict[str, typing.Any]] = None remote_data: typing.Optional[typing.List[RemoteData]] = None remote_fields: typing.Optional[typing.List[RemoteField]] = None diff --git a/src/merge/resources/crm/types/task_request.py b/src/merge/resources/crm/types/task_request.py index a0eb4cb5..a3202808 100644 --- a/src/merge/resources/crm/types/task_request.py +++ b/src/merge/resources/crm/types/task_request.py @@ -71,8 +71,8 @@ class TaskRequest(UncheckedBaseModel): * `CLOSED` - CLOSED """ - integration_params: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None - linked_account_params: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None + integration_params: typing.Optional[typing.Dict[str, typing.Any]] = None + linked_account_params: typing.Optional[typing.Dict[str, typing.Any]] = None remote_fields: typing.Optional[typing.List[RemoteFieldRequest]] = None if IS_PYDANTIC_V2: diff --git a/src/merge/resources/crm/types/task_status_enum.py b/src/merge/resources/crm/types/task_status_enum.py index aec134f1..e9a3ad8d 100644 --- a/src/merge/resources/crm/types/task_status_enum.py +++ b/src/merge/resources/crm/types/task_status_enum.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ....core import enum + T_Result = typing.TypeVar("T_Result") -class TaskStatusEnum(str, enum.Enum): +class TaskStatusEnum(enum.StrEnum): """ * `OPEN` - OPEN * `CLOSED` - CLOSED diff --git a/src/merge/resources/crm/types/user.py b/src/merge/resources/crm/types/user.py index cc585c10..4c28a278 100644 --- a/src/merge/resources/crm/types/user.py +++ b/src/merge/resources/crm/types/user.py @@ -55,7 +55,7 @@ class User(UncheckedBaseModel): Indicates whether or not this object has been deleted in the third party platform. Full coverage deletion detection is a premium add-on. Native deletion detection is offered for free with limited coverage. [Learn more](https://docs.merge.dev/integrations/hris/supported-features/). """ - field_mappings: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None + field_mappings: typing.Optional[typing.Dict[str, typing.Any]] = None remote_data: typing.Optional[typing.List[RemoteData]] = None remote_fields: typing.Optional[typing.List[RemoteField]] = None diff --git a/src/merge/resources/email/__init__.py b/src/merge/resources/email/__init__.py index 94abbf81..371f7209 100644 --- a/src/merge/resources/email/__init__.py +++ b/src/merge/resources/email/__init__.py @@ -308,8 +308,10 @@ def __getattr__(attr_name: str) -> typing.Any: raise AttributeError(f"No {attr_name} found in _dynamic_imports for module name -> {__name__}") try: module = import_module(module_name, __package__) - result = getattr(module, attr_name) - return result + if module_name == f".{attr_name}": + return module + else: + return getattr(module, attr_name) except ImportError as e: raise ImportError(f"Failed to import {attr_name} from {module_name}: {e}") from e except AttributeError as e: diff --git a/src/merge/resources/email/resources/__init__.py b/src/merge/resources/email/resources/__init__.py index 37ecb5e6..f2510c2c 100644 --- a/src/merge/resources/email/resources/__init__.py +++ b/src/merge/resources/email/resources/__init__.py @@ -59,29 +59,29 @@ "MessagesRetrieveRequestExpandItem": ".messages", "UsersListRequestExpandItem": ".users", "UsersRetrieveRequestExpandItem": ".users", - "account_details": ".", - "account_token": ".", - "async_passthrough": ".", - "audit_trail": ".", - "available_actions": ".", - "delete_account": ".", - "email_addresses": ".", - "field_mapping": ".", - "folders": ".", - "force_resync": ".", - "generate_key": ".", - "groups": ".", - "issues": ".", - "link_token": ".", - "linked_accounts": ".", - "mailboxes": ".", - "messages": ".", - "passthrough": ".", - "regenerate_key": ".", - "scopes": ".", - "sync_status": ".", - "users": ".", - "webhook_receivers": ".", + "account_details": ".account_details", + "account_token": ".account_token", + "async_passthrough": ".async_passthrough", + "audit_trail": ".audit_trail", + "available_actions": ".available_actions", + "delete_account": ".delete_account", + "email_addresses": ".email_addresses", + "field_mapping": ".field_mapping", + "folders": ".folders", + "force_resync": ".force_resync", + "generate_key": ".generate_key", + "groups": ".groups", + "issues": ".issues", + "link_token": ".link_token", + "linked_accounts": ".linked_accounts", + "mailboxes": ".mailboxes", + "messages": ".messages", + "passthrough": ".passthrough", + "regenerate_key": ".regenerate_key", + "scopes": ".scopes", + "sync_status": ".sync_status", + "users": ".users", + "webhook_receivers": ".webhook_receivers", } @@ -91,8 +91,10 @@ def __getattr__(attr_name: str) -> typing.Any: raise AttributeError(f"No {attr_name} found in _dynamic_imports for module name -> {__name__}") try: module = import_module(module_name, __package__) - result = getattr(module, attr_name) - return result + if module_name == f".{attr_name}": + return module + else: + return getattr(module, attr_name) except ImportError as e: raise ImportError(f"Failed to import {attr_name} from {module_name}: {e}") from e except AttributeError as e: diff --git a/src/merge/resources/email/resources/account_details/raw_client.py b/src/merge/resources/email/resources/account_details/raw_client.py index 9918bc2a..691ec939 100644 --- a/src/merge/resources/email/resources/account_details/raw_client.py +++ b/src/merge/resources/email/resources/account_details/raw_client.py @@ -6,9 +6,11 @@ from .....core.api_error import ApiError from .....core.client_wrapper import AsyncClientWrapper, SyncClientWrapper from .....core.http_response import AsyncHttpResponse, HttpResponse +from .....core.parse_error import ParsingError from .....core.request_options import RequestOptions from .....core.unchecked_base_model import construct_type from ...types.account_details import AccountDetails +from pydantic import ValidationError class RawAccountDetailsClient: @@ -47,6 +49,10 @@ def retrieve(self, *, request_options: typing.Optional[RequestOptions] = None) - _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) @@ -88,4 +94,8 @@ async def retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) diff --git a/src/merge/resources/email/resources/account_token/raw_client.py b/src/merge/resources/email/resources/account_token/raw_client.py index 7370a253..cc67f124 100644 --- a/src/merge/resources/email/resources/account_token/raw_client.py +++ b/src/merge/resources/email/resources/account_token/raw_client.py @@ -7,10 +7,12 @@ from .....core.client_wrapper import AsyncClientWrapper, SyncClientWrapper from .....core.http_response import AsyncHttpResponse, HttpResponse from .....core.jsonable_encoder import jsonable_encoder +from .....core.parse_error import ParsingError from .....core.request_options import RequestOptions from .....core.unchecked_base_model import construct_type from ...types.account_token import AccountToken from ...types.regenerate_account_token import RegenerateAccountToken +from pydantic import ValidationError class RawAccountTokenClient: @@ -53,6 +55,10 @@ def retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) def regenerate_create( @@ -89,6 +95,10 @@ def regenerate_create( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) @@ -132,6 +142,10 @@ async def retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) async def regenerate_create( @@ -168,4 +182,8 @@ async def regenerate_create( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) diff --git a/src/merge/resources/email/resources/async_passthrough/__init__.py b/src/merge/resources/email/resources/async_passthrough/__init__.py index 375c7953..11090986 100644 --- a/src/merge/resources/email/resources/async_passthrough/__init__.py +++ b/src/merge/resources/email/resources/async_passthrough/__init__.py @@ -16,8 +16,10 @@ def __getattr__(attr_name: str) -> typing.Any: raise AttributeError(f"No {attr_name} found in _dynamic_imports for module name -> {__name__}") try: module = import_module(module_name, __package__) - result = getattr(module, attr_name) - return result + if module_name == f".{attr_name}": + return module + else: + return getattr(module, attr_name) except ImportError as e: raise ImportError(f"Failed to import {attr_name} from {module_name}: {e}") from e except AttributeError as e: diff --git a/src/merge/resources/email/resources/async_passthrough/raw_client.py b/src/merge/resources/email/resources/async_passthrough/raw_client.py index 7787eb3c..78ba6106 100644 --- a/src/merge/resources/email/resources/async_passthrough/raw_client.py +++ b/src/merge/resources/email/resources/async_passthrough/raw_client.py @@ -7,11 +7,13 @@ from .....core.client_wrapper import AsyncClientWrapper, SyncClientWrapper from .....core.http_response import AsyncHttpResponse, HttpResponse from .....core.jsonable_encoder import jsonable_encoder +from .....core.parse_error import ParsingError from .....core.request_options import RequestOptions from .....core.unchecked_base_model import construct_type from ...types.async_passthrough_reciept import AsyncPassthroughReciept from ...types.data_passthrough_request import DataPassthroughRequest from .types.async_passthrough_retrieve_response import AsyncPassthroughRetrieveResponse +from pydantic import ValidationError # this is used as the default value for optional parameters OMIT = typing.cast(typing.Any, ...) @@ -62,6 +64,10 @@ def create( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) def retrieve( @@ -100,6 +106,10 @@ def retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) @@ -148,6 +158,10 @@ async def create( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) async def retrieve( @@ -186,4 +200,8 @@ async def retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) diff --git a/src/merge/resources/email/resources/async_passthrough/types/__init__.py b/src/merge/resources/email/resources/async_passthrough/types/__init__.py index f6e9bec9..dc335400 100644 --- a/src/merge/resources/email/resources/async_passthrough/types/__init__.py +++ b/src/merge/resources/email/resources/async_passthrough/types/__init__.py @@ -16,8 +16,10 @@ def __getattr__(attr_name: str) -> typing.Any: raise AttributeError(f"No {attr_name} found in _dynamic_imports for module name -> {__name__}") try: module = import_module(module_name, __package__) - result = getattr(module, attr_name) - return result + if module_name == f".{attr_name}": + return module + else: + return getattr(module, attr_name) except ImportError as e: raise ImportError(f"Failed to import {attr_name} from {module_name}: {e}") from e except AttributeError as e: diff --git a/src/merge/resources/email/resources/audit_trail/raw_client.py b/src/merge/resources/email/resources/audit_trail/raw_client.py index 79332f47..1a797538 100644 --- a/src/merge/resources/email/resources/audit_trail/raw_client.py +++ b/src/merge/resources/email/resources/audit_trail/raw_client.py @@ -6,9 +6,11 @@ from .....core.api_error import ApiError from .....core.client_wrapper import AsyncClientWrapper, SyncClientWrapper from .....core.http_response import AsyncHttpResponse, HttpResponse +from .....core.parse_error import ParsingError from .....core.request_options import RequestOptions from .....core.unchecked_base_model import construct_type from ...types.paginated_audit_log_event_list import PaginatedAuditLogEventList +from pydantic import ValidationError class RawAuditTrailClient: @@ -83,6 +85,10 @@ def list( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) @@ -158,4 +164,8 @@ async def list( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) diff --git a/src/merge/resources/email/resources/available_actions/raw_client.py b/src/merge/resources/email/resources/available_actions/raw_client.py index ca72efd1..220670ce 100644 --- a/src/merge/resources/email/resources/available_actions/raw_client.py +++ b/src/merge/resources/email/resources/available_actions/raw_client.py @@ -6,9 +6,11 @@ from .....core.api_error import ApiError from .....core.client_wrapper import AsyncClientWrapper, SyncClientWrapper from .....core.http_response import AsyncHttpResponse, HttpResponse +from .....core.parse_error import ParsingError from .....core.request_options import RequestOptions from .....core.unchecked_base_model import construct_type from ...types.available_actions import AvailableActions +from pydantic import ValidationError class RawAvailableActionsClient: @@ -47,6 +49,10 @@ def retrieve(self, *, request_options: typing.Optional[RequestOptions] = None) - _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) @@ -88,4 +94,8 @@ async def retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) diff --git a/src/merge/resources/email/resources/delete_account/raw_client.py b/src/merge/resources/email/resources/delete_account/raw_client.py index c49a9b44..96439a3e 100644 --- a/src/merge/resources/email/resources/delete_account/raw_client.py +++ b/src/merge/resources/email/resources/delete_account/raw_client.py @@ -6,7 +6,9 @@ from .....core.api_error import ApiError from .....core.client_wrapper import AsyncClientWrapper, SyncClientWrapper from .....core.http_response import AsyncHttpResponse, HttpResponse +from .....core.parse_error import ParsingError from .....core.request_options import RequestOptions +from pydantic import ValidationError class RawDeleteAccountClient: @@ -37,6 +39,10 @@ def delete(self, *, request_options: typing.Optional[RequestOptions] = None) -> _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) @@ -68,4 +74,8 @@ async def delete(self, *, request_options: typing.Optional[RequestOptions] = Non _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) diff --git a/src/merge/resources/email/resources/email_addresses/__init__.py b/src/merge/resources/email/resources/email_addresses/__init__.py index 081f4b52..cb66b97b 100644 --- a/src/merge/resources/email/resources/email_addresses/__init__.py +++ b/src/merge/resources/email/resources/email_addresses/__init__.py @@ -19,8 +19,10 @@ def __getattr__(attr_name: str) -> typing.Any: raise AttributeError(f"No {attr_name} found in _dynamic_imports for module name -> {__name__}") try: module = import_module(module_name, __package__) - result = getattr(module, attr_name) - return result + if module_name == f".{attr_name}": + return module + else: + return getattr(module, attr_name) except ImportError as e: raise ImportError(f"Failed to import {attr_name} from {module_name}: {e}") from e except AttributeError as e: diff --git a/src/merge/resources/email/resources/email_addresses/raw_client.py b/src/merge/resources/email/resources/email_addresses/raw_client.py index ca6713d8..052043ab 100644 --- a/src/merge/resources/email/resources/email_addresses/raw_client.py +++ b/src/merge/resources/email/resources/email_addresses/raw_client.py @@ -9,12 +9,14 @@ from .....core.datetime_utils import serialize_datetime from .....core.http_response import AsyncHttpResponse, HttpResponse from .....core.jsonable_encoder import jsonable_encoder +from .....core.parse_error import ParsingError from .....core.request_options import RequestOptions from .....core.unchecked_base_model import construct_type from ...types.email_address import EmailAddress from ...types.paginated_email_address_list import PaginatedEmailAddressList from .types.email_addresses_list_request_expand_item import EmailAddressesListRequestExpandItem from .types.email_addresses_retrieve_request_expand_item import EmailAddressesRetrieveRequestExpandItem +from pydantic import ValidationError class RawEmailAddressesClient: @@ -121,6 +123,10 @@ def list( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) def retrieve( @@ -183,6 +189,10 @@ def retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) @@ -290,6 +300,10 @@ async def list( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) async def retrieve( @@ -352,4 +366,8 @@ async def retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) diff --git a/src/merge/resources/email/resources/email_addresses/types/__init__.py b/src/merge/resources/email/resources/email_addresses/types/__init__.py index bb0ec1ee..80ab1f09 100644 --- a/src/merge/resources/email/resources/email_addresses/types/__init__.py +++ b/src/merge/resources/email/resources/email_addresses/types/__init__.py @@ -20,8 +20,10 @@ def __getattr__(attr_name: str) -> typing.Any: raise AttributeError(f"No {attr_name} found in _dynamic_imports for module name -> {__name__}") try: module = import_module(module_name, __package__) - result = getattr(module, attr_name) - return result + if module_name == f".{attr_name}": + return module + else: + return getattr(module, attr_name) except ImportError as e: raise ImportError(f"Failed to import {attr_name} from {module_name}: {e}") from e except AttributeError as e: diff --git a/src/merge/resources/email/resources/email_addresses/types/email_addresses_list_request_expand_item.py b/src/merge/resources/email/resources/email_addresses/types/email_addresses_list_request_expand_item.py index 2046a0d1..603eb214 100644 --- a/src/merge/resources/email/resources/email_addresses/types/email_addresses_list_request_expand_item.py +++ b/src/merge/resources/email/resources/email_addresses/types/email_addresses_list_request_expand_item.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ......core import enum + T_Result = typing.TypeVar("T_Result") -class EmailAddressesListRequestExpandItem(str, enum.Enum): +class EmailAddressesListRequestExpandItem(enum.StrEnum): GROUPS = "groups" MAILBOXES = "mailboxes" USERS = "users" diff --git a/src/merge/resources/email/resources/email_addresses/types/email_addresses_retrieve_request_expand_item.py b/src/merge/resources/email/resources/email_addresses/types/email_addresses_retrieve_request_expand_item.py index f50edc8c..80f24fbd 100644 --- a/src/merge/resources/email/resources/email_addresses/types/email_addresses_retrieve_request_expand_item.py +++ b/src/merge/resources/email/resources/email_addresses/types/email_addresses_retrieve_request_expand_item.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ......core import enum + T_Result = typing.TypeVar("T_Result") -class EmailAddressesRetrieveRequestExpandItem(str, enum.Enum): +class EmailAddressesRetrieveRequestExpandItem(enum.StrEnum): GROUPS = "groups" MAILBOXES = "mailboxes" USERS = "users" diff --git a/src/merge/resources/email/resources/field_mapping/client.py b/src/merge/resources/email/resources/field_mapping/client.py index 65f4eb02..5963313c 100644 --- a/src/merge/resources/email/resources/field_mapping/client.py +++ b/src/merge/resources/email/resources/field_mapping/client.py @@ -71,7 +71,7 @@ def field_mappings_retrieve( def field_mappings_create( self, *, - remote_field_traversal_path: typing.Sequence[typing.Optional[typing.Any]], + remote_field_traversal_path: typing.Sequence[typing.Any], remote_method: str, remote_url_path: str, common_model_name: str, @@ -90,7 +90,7 @@ def field_mappings_create( Parameters ---------- - remote_field_traversal_path : typing.Sequence[typing.Optional[typing.Any]] + remote_field_traversal_path : typing.Sequence[typing.Any] The field traversal path of the remote field listed when you hit the GET /remote-fields endpoint. remote_method : str @@ -206,7 +206,7 @@ def field_mappings_partial_update( field_mapping_id: str, *, remote_data_iteration_count: typing.Optional[int] = None, - remote_field_traversal_path: typing.Optional[typing.Sequence[typing.Optional[typing.Any]]] = OMIT, + remote_field_traversal_path: typing.Optional[typing.Sequence[typing.Any]] = OMIT, remote_method: typing.Optional[str] = OMIT, remote_url_path: typing.Optional[str] = OMIT, jmes_path: typing.Optional[str] = OMIT, @@ -223,7 +223,7 @@ def field_mappings_partial_update( remote_data_iteration_count : typing.Optional[int] Number of common model instances to iterate through when fetching remote data for field mappings. Defaults to 250 if not provided. - remote_field_traversal_path : typing.Optional[typing.Sequence[typing.Optional[typing.Any]]] + remote_field_traversal_path : typing.Optional[typing.Sequence[typing.Any]] The field traversal path of the remote field listed when you hit the GET /remote-fields endpoint. remote_method : typing.Optional[str] @@ -458,7 +458,7 @@ async def main() -> None: async def field_mappings_create( self, *, - remote_field_traversal_path: typing.Sequence[typing.Optional[typing.Any]], + remote_field_traversal_path: typing.Sequence[typing.Any], remote_method: str, remote_url_path: str, common_model_name: str, @@ -477,7 +477,7 @@ async def field_mappings_create( Parameters ---------- - remote_field_traversal_path : typing.Sequence[typing.Optional[typing.Any]] + remote_field_traversal_path : typing.Sequence[typing.Any] The field traversal path of the remote field listed when you hit the GET /remote-fields endpoint. remote_method : str @@ -609,7 +609,7 @@ async def field_mappings_partial_update( field_mapping_id: str, *, remote_data_iteration_count: typing.Optional[int] = None, - remote_field_traversal_path: typing.Optional[typing.Sequence[typing.Optional[typing.Any]]] = OMIT, + remote_field_traversal_path: typing.Optional[typing.Sequence[typing.Any]] = OMIT, remote_method: typing.Optional[str] = OMIT, remote_url_path: typing.Optional[str] = OMIT, jmes_path: typing.Optional[str] = OMIT, @@ -626,7 +626,7 @@ async def field_mappings_partial_update( remote_data_iteration_count : typing.Optional[int] Number of common model instances to iterate through when fetching remote data for field mappings. Defaults to 250 if not provided. - remote_field_traversal_path : typing.Optional[typing.Sequence[typing.Optional[typing.Any]]] + remote_field_traversal_path : typing.Optional[typing.Sequence[typing.Any]] The field traversal path of the remote field listed when you hit the GET /remote-fields endpoint. remote_method : typing.Optional[str] diff --git a/src/merge/resources/email/resources/field_mapping/raw_client.py b/src/merge/resources/email/resources/field_mapping/raw_client.py index 6c6a6db6..f4acdf12 100644 --- a/src/merge/resources/email/resources/field_mapping/raw_client.py +++ b/src/merge/resources/email/resources/field_mapping/raw_client.py @@ -7,12 +7,14 @@ from .....core.client_wrapper import AsyncClientWrapper, SyncClientWrapper from .....core.http_response import AsyncHttpResponse, HttpResponse from .....core.jsonable_encoder import jsonable_encoder +from .....core.parse_error import ParsingError from .....core.request_options import RequestOptions from .....core.unchecked_base_model import construct_type from ...types.external_target_field_api_response import ExternalTargetFieldApiResponse from ...types.field_mapping_api_instance_response import FieldMappingApiInstanceResponse from ...types.field_mapping_instance_response import FieldMappingInstanceResponse from ...types.remote_field_api_response import RemoteFieldApiResponse +from pydantic import ValidationError # this is used as the default value for optional parameters OMIT = typing.cast(typing.Any, ...) @@ -65,12 +67,16 @@ def field_mappings_retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) def field_mappings_create( self, *, - remote_field_traversal_path: typing.Sequence[typing.Optional[typing.Any]], + remote_field_traversal_path: typing.Sequence[typing.Any], remote_method: str, remote_url_path: str, common_model_name: str, @@ -89,7 +95,7 @@ def field_mappings_create( Parameters ---------- - remote_field_traversal_path : typing.Sequence[typing.Optional[typing.Any]] + remote_field_traversal_path : typing.Sequence[typing.Any] The field traversal path of the remote field listed when you hit the GET /remote-fields endpoint. remote_method : str @@ -171,6 +177,10 @@ def field_mappings_create( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) def field_mappings_destroy( @@ -209,6 +219,10 @@ def field_mappings_destroy( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) def field_mappings_partial_update( @@ -216,7 +230,7 @@ def field_mappings_partial_update( field_mapping_id: str, *, remote_data_iteration_count: typing.Optional[int] = None, - remote_field_traversal_path: typing.Optional[typing.Sequence[typing.Optional[typing.Any]]] = OMIT, + remote_field_traversal_path: typing.Optional[typing.Sequence[typing.Any]] = OMIT, remote_method: typing.Optional[str] = OMIT, remote_url_path: typing.Optional[str] = OMIT, jmes_path: typing.Optional[str] = OMIT, @@ -233,7 +247,7 @@ def field_mappings_partial_update( remote_data_iteration_count : typing.Optional[int] Number of common model instances to iterate through when fetching remote data for field mappings. Defaults to 250 if not provided. - remote_field_traversal_path : typing.Optional[typing.Sequence[typing.Optional[typing.Any]]] + remote_field_traversal_path : typing.Optional[typing.Sequence[typing.Any]] The field traversal path of the remote field listed when you hit the GET /remote-fields endpoint. remote_method : typing.Optional[str] @@ -288,6 +302,10 @@ def field_mappings_partial_update( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) def remote_fields_retrieve( @@ -338,6 +356,10 @@ def remote_fields_retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) def target_fields_retrieve( @@ -374,6 +396,10 @@ def target_fields_retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) def target_fields_create( @@ -433,6 +459,10 @@ def target_fields_create( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) @@ -483,12 +513,16 @@ async def field_mappings_retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) async def field_mappings_create( self, *, - remote_field_traversal_path: typing.Sequence[typing.Optional[typing.Any]], + remote_field_traversal_path: typing.Sequence[typing.Any], remote_method: str, remote_url_path: str, common_model_name: str, @@ -507,7 +541,7 @@ async def field_mappings_create( Parameters ---------- - remote_field_traversal_path : typing.Sequence[typing.Optional[typing.Any]] + remote_field_traversal_path : typing.Sequence[typing.Any] The field traversal path of the remote field listed when you hit the GET /remote-fields endpoint. remote_method : str @@ -589,6 +623,10 @@ async def field_mappings_create( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) async def field_mappings_destroy( @@ -627,6 +665,10 @@ async def field_mappings_destroy( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) async def field_mappings_partial_update( @@ -634,7 +676,7 @@ async def field_mappings_partial_update( field_mapping_id: str, *, remote_data_iteration_count: typing.Optional[int] = None, - remote_field_traversal_path: typing.Optional[typing.Sequence[typing.Optional[typing.Any]]] = OMIT, + remote_field_traversal_path: typing.Optional[typing.Sequence[typing.Any]] = OMIT, remote_method: typing.Optional[str] = OMIT, remote_url_path: typing.Optional[str] = OMIT, jmes_path: typing.Optional[str] = OMIT, @@ -651,7 +693,7 @@ async def field_mappings_partial_update( remote_data_iteration_count : typing.Optional[int] Number of common model instances to iterate through when fetching remote data for field mappings. Defaults to 250 if not provided. - remote_field_traversal_path : typing.Optional[typing.Sequence[typing.Optional[typing.Any]]] + remote_field_traversal_path : typing.Optional[typing.Sequence[typing.Any]] The field traversal path of the remote field listed when you hit the GET /remote-fields endpoint. remote_method : typing.Optional[str] @@ -706,6 +748,10 @@ async def field_mappings_partial_update( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) async def remote_fields_retrieve( @@ -756,6 +802,10 @@ async def remote_fields_retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) async def target_fields_retrieve( @@ -792,6 +842,10 @@ async def target_fields_retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) async def target_fields_create( @@ -851,4 +905,8 @@ async def target_fields_create( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) diff --git a/src/merge/resources/email/resources/folders/__init__.py b/src/merge/resources/email/resources/folders/__init__.py index b9307deb..f06c1413 100644 --- a/src/merge/resources/email/resources/folders/__init__.py +++ b/src/merge/resources/email/resources/folders/__init__.py @@ -19,8 +19,10 @@ def __getattr__(attr_name: str) -> typing.Any: raise AttributeError(f"No {attr_name} found in _dynamic_imports for module name -> {__name__}") try: module = import_module(module_name, __package__) - result = getattr(module, attr_name) - return result + if module_name == f".{attr_name}": + return module + else: + return getattr(module, attr_name) except ImportError as e: raise ImportError(f"Failed to import {attr_name} from {module_name}: {e}") from e except AttributeError as e: diff --git a/src/merge/resources/email/resources/folders/raw_client.py b/src/merge/resources/email/resources/folders/raw_client.py index aea22255..cdfa456c 100644 --- a/src/merge/resources/email/resources/folders/raw_client.py +++ b/src/merge/resources/email/resources/folders/raw_client.py @@ -9,12 +9,14 @@ from .....core.datetime_utils import serialize_datetime from .....core.http_response import AsyncHttpResponse, HttpResponse from .....core.jsonable_encoder import jsonable_encoder +from .....core.parse_error import ParsingError from .....core.request_options import RequestOptions from .....core.unchecked_base_model import construct_type from ...types.folder import Folder from ...types.paginated_folder_list import PaginatedFolderList from .types.folders_list_request_expand_item import FoldersListRequestExpandItem from .types.folders_retrieve_request_expand_item import FoldersRetrieveRequestExpandItem +from pydantic import ValidationError class RawFoldersClient: @@ -121,6 +123,10 @@ def list( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) def retrieve( @@ -181,6 +187,10 @@ def retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) @@ -288,6 +298,10 @@ async def list( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) async def retrieve( @@ -348,4 +362,8 @@ async def retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) diff --git a/src/merge/resources/email/resources/folders/types/__init__.py b/src/merge/resources/email/resources/folders/types/__init__.py index 064c3b61..45f03559 100644 --- a/src/merge/resources/email/resources/folders/types/__init__.py +++ b/src/merge/resources/email/resources/folders/types/__init__.py @@ -20,8 +20,10 @@ def __getattr__(attr_name: str) -> typing.Any: raise AttributeError(f"No {attr_name} found in _dynamic_imports for module name -> {__name__}") try: module = import_module(module_name, __package__) - result = getattr(module, attr_name) - return result + if module_name == f".{attr_name}": + return module + else: + return getattr(module, attr_name) except ImportError as e: raise ImportError(f"Failed to import {attr_name} from {module_name}: {e}") from e except AttributeError as e: diff --git a/src/merge/resources/email/resources/folders/types/folders_list_request_expand_item.py b/src/merge/resources/email/resources/folders/types/folders_list_request_expand_item.py index 910989fe..f15198aa 100644 --- a/src/merge/resources/email/resources/folders/types/folders_list_request_expand_item.py +++ b/src/merge/resources/email/resources/folders/types/folders_list_request_expand_item.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ......core import enum + T_Result = typing.TypeVar("T_Result") -class FoldersListRequestExpandItem(str, enum.Enum): +class FoldersListRequestExpandItem(enum.StrEnum): MAILBOXES = "mailboxes" PARENT_FOLDER = "parent_folder" PERMISSIONS = "permissions" diff --git a/src/merge/resources/email/resources/folders/types/folders_retrieve_request_expand_item.py b/src/merge/resources/email/resources/folders/types/folders_retrieve_request_expand_item.py index ee0b2375..e1520806 100644 --- a/src/merge/resources/email/resources/folders/types/folders_retrieve_request_expand_item.py +++ b/src/merge/resources/email/resources/folders/types/folders_retrieve_request_expand_item.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ......core import enum + T_Result = typing.TypeVar("T_Result") -class FoldersRetrieveRequestExpandItem(str, enum.Enum): +class FoldersRetrieveRequestExpandItem(enum.StrEnum): MAILBOXES = "mailboxes" PARENT_FOLDER = "parent_folder" PERMISSIONS = "permissions" diff --git a/src/merge/resources/email/resources/force_resync/raw_client.py b/src/merge/resources/email/resources/force_resync/raw_client.py index 4f83160a..2e12f69e 100644 --- a/src/merge/resources/email/resources/force_resync/raw_client.py +++ b/src/merge/resources/email/resources/force_resync/raw_client.py @@ -6,9 +6,11 @@ from .....core.api_error import ApiError from .....core.client_wrapper import AsyncClientWrapper, SyncClientWrapper from .....core.http_response import AsyncHttpResponse, HttpResponse +from .....core.parse_error import ParsingError from .....core.request_options import RequestOptions from .....core.unchecked_base_model import construct_type from ...types.sync_status import SyncStatus +from pydantic import ValidationError class RawForceResyncClient: @@ -49,6 +51,10 @@ def sync_status_resync_create( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) @@ -90,4 +96,8 @@ async def sync_status_resync_create( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) diff --git a/src/merge/resources/email/resources/generate_key/raw_client.py b/src/merge/resources/email/resources/generate_key/raw_client.py index 3bb8c0a2..832f9f2b 100644 --- a/src/merge/resources/email/resources/generate_key/raw_client.py +++ b/src/merge/resources/email/resources/generate_key/raw_client.py @@ -6,9 +6,11 @@ from .....core.api_error import ApiError from .....core.client_wrapper import AsyncClientWrapper, SyncClientWrapper from .....core.http_response import AsyncHttpResponse, HttpResponse +from .....core.parse_error import ParsingError from .....core.request_options import RequestOptions from .....core.unchecked_base_model import construct_type from ...types.remote_key import RemoteKey +from pydantic import ValidationError # this is used as the default value for optional parameters OMIT = typing.cast(typing.Any, ...) @@ -60,6 +62,10 @@ def create(self, *, name: str, request_options: typing.Optional[RequestOptions] _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) @@ -111,4 +117,8 @@ async def create( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) diff --git a/src/merge/resources/email/resources/groups/__init__.py b/src/merge/resources/email/resources/groups/__init__.py index c42a8d2e..833b79cd 100644 --- a/src/merge/resources/email/resources/groups/__init__.py +++ b/src/merge/resources/email/resources/groups/__init__.py @@ -19,8 +19,10 @@ def __getattr__(attr_name: str) -> typing.Any: raise AttributeError(f"No {attr_name} found in _dynamic_imports for module name -> {__name__}") try: module = import_module(module_name, __package__) - result = getattr(module, attr_name) - return result + if module_name == f".{attr_name}": + return module + else: + return getattr(module, attr_name) except ImportError as e: raise ImportError(f"Failed to import {attr_name} from {module_name}: {e}") from e except AttributeError as e: diff --git a/src/merge/resources/email/resources/groups/raw_client.py b/src/merge/resources/email/resources/groups/raw_client.py index c9d2e089..ae94566d 100644 --- a/src/merge/resources/email/resources/groups/raw_client.py +++ b/src/merge/resources/email/resources/groups/raw_client.py @@ -9,12 +9,14 @@ from .....core.datetime_utils import serialize_datetime from .....core.http_response import AsyncHttpResponse, HttpResponse from .....core.jsonable_encoder import jsonable_encoder +from .....core.parse_error import ParsingError from .....core.request_options import RequestOptions from .....core.unchecked_base_model import construct_type from ...types.group import Group from ...types.paginated_group_list import PaginatedGroupList from .types.groups_list_request_expand_item import GroupsListRequestExpandItem from .types.groups_retrieve_request_expand_item import GroupsRetrieveRequestExpandItem +from pydantic import ValidationError class RawGroupsClient: @@ -121,6 +123,10 @@ def list( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) def retrieve( @@ -181,6 +187,10 @@ def retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) @@ -288,6 +298,10 @@ async def list( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) async def retrieve( @@ -348,4 +362,8 @@ async def retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) diff --git a/src/merge/resources/email/resources/groups/types/__init__.py b/src/merge/resources/email/resources/groups/types/__init__.py index 9f5d7290..1ac662da 100644 --- a/src/merge/resources/email/resources/groups/types/__init__.py +++ b/src/merge/resources/email/resources/groups/types/__init__.py @@ -20,8 +20,10 @@ def __getattr__(attr_name: str) -> typing.Any: raise AttributeError(f"No {attr_name} found in _dynamic_imports for module name -> {__name__}") try: module = import_module(module_name, __package__) - result = getattr(module, attr_name) - return result + if module_name == f".{attr_name}": + return module + else: + return getattr(module, attr_name) except ImportError as e: raise ImportError(f"Failed to import {attr_name} from {module_name}: {e}") from e except AttributeError as e: diff --git a/src/merge/resources/email/resources/groups/types/groups_list_request_expand_item.py b/src/merge/resources/email/resources/groups/types/groups_list_request_expand_item.py index cf07a4eb..ce3c0403 100644 --- a/src/merge/resources/email/resources/groups/types/groups_list_request_expand_item.py +++ b/src/merge/resources/email/resources/groups/types/groups_list_request_expand_item.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ......core import enum + T_Result = typing.TypeVar("T_Result") -class GroupsListRequestExpandItem(str, enum.Enum): +class GroupsListRequestExpandItem(enum.StrEnum): EMAIL_ADDRESSES = "email_addresses" MAILBOXES = "mailboxes" USERS = "users" diff --git a/src/merge/resources/email/resources/groups/types/groups_retrieve_request_expand_item.py b/src/merge/resources/email/resources/groups/types/groups_retrieve_request_expand_item.py index f1536887..6d0c616e 100644 --- a/src/merge/resources/email/resources/groups/types/groups_retrieve_request_expand_item.py +++ b/src/merge/resources/email/resources/groups/types/groups_retrieve_request_expand_item.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ......core import enum + T_Result = typing.TypeVar("T_Result") -class GroupsRetrieveRequestExpandItem(str, enum.Enum): +class GroupsRetrieveRequestExpandItem(enum.StrEnum): EMAIL_ADDRESSES = "email_addresses" MAILBOXES = "mailboxes" USERS = "users" diff --git a/src/merge/resources/email/resources/issues/__init__.py b/src/merge/resources/email/resources/issues/__init__.py index 3ca1094b..45b33fe1 100644 --- a/src/merge/resources/email/resources/issues/__init__.py +++ b/src/merge/resources/email/resources/issues/__init__.py @@ -16,8 +16,10 @@ def __getattr__(attr_name: str) -> typing.Any: raise AttributeError(f"No {attr_name} found in _dynamic_imports for module name -> {__name__}") try: module = import_module(module_name, __package__) - result = getattr(module, attr_name) - return result + if module_name == f".{attr_name}": + return module + else: + return getattr(module, attr_name) except ImportError as e: raise ImportError(f"Failed to import {attr_name} from {module_name}: {e}") from e except AttributeError as e: diff --git a/src/merge/resources/email/resources/issues/raw_client.py b/src/merge/resources/email/resources/issues/raw_client.py index d35888c2..069c6264 100644 --- a/src/merge/resources/email/resources/issues/raw_client.py +++ b/src/merge/resources/email/resources/issues/raw_client.py @@ -9,11 +9,13 @@ from .....core.datetime_utils import serialize_datetime from .....core.http_response import AsyncHttpResponse, HttpResponse from .....core.jsonable_encoder import jsonable_encoder +from .....core.parse_error import ParsingError from .....core.request_options import RequestOptions from .....core.unchecked_base_model import construct_type from ...types.issue import Issue from ...types.paginated_issue_list import PaginatedIssueList from .types.issues_list_request_status import IssuesListRequestStatus +from pydantic import ValidationError class RawIssuesClient: @@ -133,6 +135,10 @@ def list( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) def retrieve(self, id: str, *, request_options: typing.Optional[RequestOptions] = None) -> HttpResponse[Issue]: @@ -169,6 +175,10 @@ def retrieve(self, id: str, *, request_options: typing.Optional[RequestOptions] _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) @@ -289,6 +299,10 @@ async def list( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) async def retrieve( @@ -327,4 +341,8 @@ async def retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) diff --git a/src/merge/resources/email/resources/issues/types/__init__.py b/src/merge/resources/email/resources/issues/types/__init__.py index 88fbf977..5e097583 100644 --- a/src/merge/resources/email/resources/issues/types/__init__.py +++ b/src/merge/resources/email/resources/issues/types/__init__.py @@ -16,8 +16,10 @@ def __getattr__(attr_name: str) -> typing.Any: raise AttributeError(f"No {attr_name} found in _dynamic_imports for module name -> {__name__}") try: module = import_module(module_name, __package__) - result = getattr(module, attr_name) - return result + if module_name == f".{attr_name}": + return module + else: + return getattr(module, attr_name) except ImportError as e: raise ImportError(f"Failed to import {attr_name} from {module_name}: {e}") from e except AttributeError as e: diff --git a/src/merge/resources/email/resources/issues/types/issues_list_request_status.py b/src/merge/resources/email/resources/issues/types/issues_list_request_status.py index 2bd3521e..a61afdd0 100644 --- a/src/merge/resources/email/resources/issues/types/issues_list_request_status.py +++ b/src/merge/resources/email/resources/issues/types/issues_list_request_status.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ......core import enum + T_Result = typing.TypeVar("T_Result") -class IssuesListRequestStatus(str, enum.Enum): +class IssuesListRequestStatus(enum.StrEnum): ONGOING = "ONGOING" RESOLVED = "RESOLVED" diff --git a/src/merge/resources/email/resources/link_token/__init__.py b/src/merge/resources/email/resources/link_token/__init__.py index be8c3839..834918c1 100644 --- a/src/merge/resources/email/resources/link_token/__init__.py +++ b/src/merge/resources/email/resources/link_token/__init__.py @@ -19,8 +19,10 @@ def __getattr__(attr_name: str) -> typing.Any: raise AttributeError(f"No {attr_name} found in _dynamic_imports for module name -> {__name__}") try: module = import_module(module_name, __package__) - result = getattr(module, attr_name) - return result + if module_name == f".{attr_name}": + return module + else: + return getattr(module, attr_name) except ImportError as e: raise ImportError(f"Failed to import {attr_name} from {module_name}: {e}") from e except AttributeError as e: diff --git a/src/merge/resources/email/resources/link_token/client.py b/src/merge/resources/email/resources/link_token/client.py index 7a5a930b..0a17999e 100644 --- a/src/merge/resources/email/resources/link_token/client.py +++ b/src/merge/resources/email/resources/link_token/client.py @@ -50,7 +50,7 @@ def create( ] = OMIT, language: typing.Optional[EndUserDetailsRequestLanguage] = OMIT, are_syncs_disabled: typing.Optional[bool] = OMIT, - integration_specific_config: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = OMIT, + integration_specific_config: typing.Optional[typing.Dict[str, typing.Any]] = OMIT, completed_account_initial_screen: typing.Optional[EndUserDetailsRequestCompletedAccountInitialScreen] = OMIT, linked_destination_id: typing.Optional[str] = OMIT, credential_id: typing.Optional[str] = OMIT, @@ -97,7 +97,7 @@ def create( are_syncs_disabled : typing.Optional[bool] The boolean that indicates whether initial, periodic, and force syncs will be disabled. - integration_specific_config : typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] + integration_specific_config : typing.Optional[typing.Dict[str, typing.Any]] A JSON object containing integration-specific configuration options. completed_account_initial_screen : typing.Optional[EndUserDetailsRequestCompletedAccountInitialScreen] @@ -187,7 +187,7 @@ async def create( ] = OMIT, language: typing.Optional[EndUserDetailsRequestLanguage] = OMIT, are_syncs_disabled: typing.Optional[bool] = OMIT, - integration_specific_config: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = OMIT, + integration_specific_config: typing.Optional[typing.Dict[str, typing.Any]] = OMIT, completed_account_initial_screen: typing.Optional[EndUserDetailsRequestCompletedAccountInitialScreen] = OMIT, linked_destination_id: typing.Optional[str] = OMIT, credential_id: typing.Optional[str] = OMIT, @@ -234,7 +234,7 @@ async def create( are_syncs_disabled : typing.Optional[bool] The boolean that indicates whether initial, periodic, and force syncs will be disabled. - integration_specific_config : typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] + integration_specific_config : typing.Optional[typing.Dict[str, typing.Any]] A JSON object containing integration-specific configuration options. completed_account_initial_screen : typing.Optional[EndUserDetailsRequestCompletedAccountInitialScreen] diff --git a/src/merge/resources/email/resources/link_token/raw_client.py b/src/merge/resources/email/resources/link_token/raw_client.py index c7f57dea..b7fc7396 100644 --- a/src/merge/resources/email/resources/link_token/raw_client.py +++ b/src/merge/resources/email/resources/link_token/raw_client.py @@ -6,6 +6,7 @@ from .....core.api_error import ApiError from .....core.client_wrapper import AsyncClientWrapper, SyncClientWrapper from .....core.http_response import AsyncHttpResponse, HttpResponse +from .....core.parse_error import ParsingError from .....core.request_options import RequestOptions from .....core.unchecked_base_model import construct_type from ...types.categories_enum import CategoriesEnum @@ -16,6 +17,7 @@ EndUserDetailsRequestCompletedAccountInitialScreen, ) from .types.end_user_details_request_language import EndUserDetailsRequestLanguage +from pydantic import ValidationError # this is used as the default value for optional parameters OMIT = typing.cast(typing.Any, ...) @@ -42,7 +44,7 @@ def create( ] = OMIT, language: typing.Optional[EndUserDetailsRequestLanguage] = OMIT, are_syncs_disabled: typing.Optional[bool] = OMIT, - integration_specific_config: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = OMIT, + integration_specific_config: typing.Optional[typing.Dict[str, typing.Any]] = OMIT, completed_account_initial_screen: typing.Optional[EndUserDetailsRequestCompletedAccountInitialScreen] = OMIT, linked_destination_id: typing.Optional[str] = OMIT, credential_id: typing.Optional[str] = OMIT, @@ -89,7 +91,7 @@ def create( are_syncs_disabled : typing.Optional[bool] The boolean that indicates whether initial, periodic, and force syncs will be disabled. - integration_specific_config : typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] + integration_specific_config : typing.Optional[typing.Dict[str, typing.Any]] A JSON object containing integration-specific configuration options. completed_account_initial_screen : typing.Optional[EndUserDetailsRequestCompletedAccountInitialScreen] @@ -149,6 +151,10 @@ def create( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) @@ -173,7 +179,7 @@ async def create( ] = OMIT, language: typing.Optional[EndUserDetailsRequestLanguage] = OMIT, are_syncs_disabled: typing.Optional[bool] = OMIT, - integration_specific_config: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = OMIT, + integration_specific_config: typing.Optional[typing.Dict[str, typing.Any]] = OMIT, completed_account_initial_screen: typing.Optional[EndUserDetailsRequestCompletedAccountInitialScreen] = OMIT, linked_destination_id: typing.Optional[str] = OMIT, credential_id: typing.Optional[str] = OMIT, @@ -220,7 +226,7 @@ async def create( are_syncs_disabled : typing.Optional[bool] The boolean that indicates whether initial, periodic, and force syncs will be disabled. - integration_specific_config : typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] + integration_specific_config : typing.Optional[typing.Dict[str, typing.Any]] A JSON object containing integration-specific configuration options. completed_account_initial_screen : typing.Optional[EndUserDetailsRequestCompletedAccountInitialScreen] @@ -280,4 +286,8 @@ async def create( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) diff --git a/src/merge/resources/email/resources/link_token/types/__init__.py b/src/merge/resources/email/resources/link_token/types/__init__.py index 55cc1d4e..1846dfb1 100644 --- a/src/merge/resources/email/resources/link_token/types/__init__.py +++ b/src/merge/resources/email/resources/link_token/types/__init__.py @@ -22,8 +22,10 @@ def __getattr__(attr_name: str) -> typing.Any: raise AttributeError(f"No {attr_name} found in _dynamic_imports for module name -> {__name__}") try: module = import_module(module_name, __package__) - result = getattr(module, attr_name) - return result + if module_name == f".{attr_name}": + return module + else: + return getattr(module, attr_name) except ImportError as e: raise ImportError(f"Failed to import {attr_name} from {module_name}: {e}") from e except AttributeError as e: diff --git a/src/merge/resources/email/resources/linked_accounts/__init__.py b/src/merge/resources/email/resources/linked_accounts/__init__.py index 0b9e42b4..12e213b7 100644 --- a/src/merge/resources/email/resources/linked_accounts/__init__.py +++ b/src/merge/resources/email/resources/linked_accounts/__init__.py @@ -16,8 +16,10 @@ def __getattr__(attr_name: str) -> typing.Any: raise AttributeError(f"No {attr_name} found in _dynamic_imports for module name -> {__name__}") try: module = import_module(module_name, __package__) - result = getattr(module, attr_name) - return result + if module_name == f".{attr_name}": + return module + else: + return getattr(module, attr_name) except ImportError as e: raise ImportError(f"Failed to import {attr_name} from {module_name}: {e}") from e except AttributeError as e: diff --git a/src/merge/resources/email/resources/linked_accounts/raw_client.py b/src/merge/resources/email/resources/linked_accounts/raw_client.py index a72a3011..aeea3262 100644 --- a/src/merge/resources/email/resources/linked_accounts/raw_client.py +++ b/src/merge/resources/email/resources/linked_accounts/raw_client.py @@ -6,10 +6,12 @@ from .....core.api_error import ApiError from .....core.client_wrapper import AsyncClientWrapper, SyncClientWrapper from .....core.http_response import AsyncHttpResponse, HttpResponse +from .....core.parse_error import ParsingError from .....core.request_options import RequestOptions from .....core.unchecked_base_model import construct_type from ...types.paginated_account_details_and_actions_list import PaginatedAccountDetailsAndActionsList from .types.linked_accounts_list_request_category import LinkedAccountsListRequestCategory +from pydantic import ValidationError class RawLinkedAccountsClient: @@ -118,6 +120,10 @@ def list( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) @@ -227,4 +233,8 @@ async def list( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) diff --git a/src/merge/resources/email/resources/linked_accounts/types/__init__.py b/src/merge/resources/email/resources/linked_accounts/types/__init__.py index a28f38cc..a884db6a 100644 --- a/src/merge/resources/email/resources/linked_accounts/types/__init__.py +++ b/src/merge/resources/email/resources/linked_accounts/types/__init__.py @@ -18,8 +18,10 @@ def __getattr__(attr_name: str) -> typing.Any: raise AttributeError(f"No {attr_name} found in _dynamic_imports for module name -> {__name__}") try: module = import_module(module_name, __package__) - result = getattr(module, attr_name) - return result + if module_name == f".{attr_name}": + return module + else: + return getattr(module, attr_name) except ImportError as e: raise ImportError(f"Failed to import {attr_name} from {module_name}: {e}") from e except AttributeError as e: diff --git a/src/merge/resources/email/resources/linked_accounts/types/linked_accounts_list_request_category.py b/src/merge/resources/email/resources/linked_accounts/types/linked_accounts_list_request_category.py index 97df0150..035ed972 100644 --- a/src/merge/resources/email/resources/linked_accounts/types/linked_accounts_list_request_category.py +++ b/src/merge/resources/email/resources/linked_accounts/types/linked_accounts_list_request_category.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ......core import enum + T_Result = typing.TypeVar("T_Result") -class LinkedAccountsListRequestCategory(str, enum.Enum): +class LinkedAccountsListRequestCategory(enum.StrEnum): ACCOUNTING = "accounting" ATS = "ats" CHAT = "chat" diff --git a/src/merge/resources/email/resources/mailboxes/__init__.py b/src/merge/resources/email/resources/mailboxes/__init__.py index 471992c1..4cbcf768 100644 --- a/src/merge/resources/email/resources/mailboxes/__init__.py +++ b/src/merge/resources/email/resources/mailboxes/__init__.py @@ -19,8 +19,10 @@ def __getattr__(attr_name: str) -> typing.Any: raise AttributeError(f"No {attr_name} found in _dynamic_imports for module name -> {__name__}") try: module = import_module(module_name, __package__) - result = getattr(module, attr_name) - return result + if module_name == f".{attr_name}": + return module + else: + return getattr(module, attr_name) except ImportError as e: raise ImportError(f"Failed to import {attr_name} from {module_name}: {e}") from e except AttributeError as e: diff --git a/src/merge/resources/email/resources/mailboxes/raw_client.py b/src/merge/resources/email/resources/mailboxes/raw_client.py index 4088242a..3bd3514d 100644 --- a/src/merge/resources/email/resources/mailboxes/raw_client.py +++ b/src/merge/resources/email/resources/mailboxes/raw_client.py @@ -9,12 +9,14 @@ from .....core.datetime_utils import serialize_datetime from .....core.http_response import AsyncHttpResponse, HttpResponse from .....core.jsonable_encoder import jsonable_encoder +from .....core.parse_error import ParsingError from .....core.request_options import RequestOptions from .....core.unchecked_base_model import construct_type from ...types.mailbox import Mailbox from ...types.paginated_mailbox_list import PaginatedMailboxList from .types.mailboxes_list_request_expand_item import MailboxesListRequestExpandItem from .types.mailboxes_retrieve_request_expand_item import MailboxesRetrieveRequestExpandItem +from pydantic import ValidationError class RawMailboxesClient: @@ -136,6 +138,10 @@ def list( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) def retrieve( @@ -206,6 +212,10 @@ def retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) @@ -328,6 +338,10 @@ async def list( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) async def retrieve( @@ -398,4 +412,8 @@ async def retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) diff --git a/src/merge/resources/email/resources/mailboxes/types/__init__.py b/src/merge/resources/email/resources/mailboxes/types/__init__.py index bcefde2a..0484fe8d 100644 --- a/src/merge/resources/email/resources/mailboxes/types/__init__.py +++ b/src/merge/resources/email/resources/mailboxes/types/__init__.py @@ -20,8 +20,10 @@ def __getattr__(attr_name: str) -> typing.Any: raise AttributeError(f"No {attr_name} found in _dynamic_imports for module name -> {__name__}") try: module = import_module(module_name, __package__) - result = getattr(module, attr_name) - return result + if module_name == f".{attr_name}": + return module + else: + return getattr(module, attr_name) except ImportError as e: raise ImportError(f"Failed to import {attr_name} from {module_name}: {e}") from e except AttributeError as e: diff --git a/src/merge/resources/email/resources/mailboxes/types/mailboxes_list_request_expand_item.py b/src/merge/resources/email/resources/mailboxes/types/mailboxes_list_request_expand_item.py index c8fd2ae9..231620ac 100644 --- a/src/merge/resources/email/resources/mailboxes/types/mailboxes_list_request_expand_item.py +++ b/src/merge/resources/email/resources/mailboxes/types/mailboxes_list_request_expand_item.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ......core import enum + T_Result = typing.TypeVar("T_Result") -class MailboxesListRequestExpandItem(str, enum.Enum): +class MailboxesListRequestExpandItem(enum.StrEnum): ALIAS_EMAIL_ADDRESSES = "alias_email_addresses" FOLDERS = "folders" GROUPS = "groups" diff --git a/src/merge/resources/email/resources/mailboxes/types/mailboxes_retrieve_request_expand_item.py b/src/merge/resources/email/resources/mailboxes/types/mailboxes_retrieve_request_expand_item.py index 93612e43..862c8f1e 100644 --- a/src/merge/resources/email/resources/mailboxes/types/mailboxes_retrieve_request_expand_item.py +++ b/src/merge/resources/email/resources/mailboxes/types/mailboxes_retrieve_request_expand_item.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ......core import enum + T_Result = typing.TypeVar("T_Result") -class MailboxesRetrieveRequestExpandItem(str, enum.Enum): +class MailboxesRetrieveRequestExpandItem(enum.StrEnum): ALIAS_EMAIL_ADDRESSES = "alias_email_addresses" FOLDERS = "folders" GROUPS = "groups" diff --git a/src/merge/resources/email/resources/messages/__init__.py b/src/merge/resources/email/resources/messages/__init__.py index 73c7847d..eb16711b 100644 --- a/src/merge/resources/email/resources/messages/__init__.py +++ b/src/merge/resources/email/resources/messages/__init__.py @@ -19,8 +19,10 @@ def __getattr__(attr_name: str) -> typing.Any: raise AttributeError(f"No {attr_name} found in _dynamic_imports for module name -> {__name__}") try: module = import_module(module_name, __package__) - result = getattr(module, attr_name) - return result + if module_name == f".{attr_name}": + return module + else: + return getattr(module, attr_name) except ImportError as e: raise ImportError(f"Failed to import {attr_name} from {module_name}: {e}") from e except AttributeError as e: diff --git a/src/merge/resources/email/resources/messages/raw_client.py b/src/merge/resources/email/resources/messages/raw_client.py index 8e53635d..becb841a 100644 --- a/src/merge/resources/email/resources/messages/raw_client.py +++ b/src/merge/resources/email/resources/messages/raw_client.py @@ -9,12 +9,14 @@ from .....core.datetime_utils import serialize_datetime from .....core.http_response import AsyncHttpResponse, HttpResponse from .....core.jsonable_encoder import jsonable_encoder +from .....core.parse_error import ParsingError from .....core.request_options import RequestOptions from .....core.unchecked_base_model import construct_type from ...types.message import Message from ...types.paginated_message_list import PaginatedMessageList from .types.messages_list_request_expand_item import MessagesListRequestExpandItem from .types.messages_retrieve_request_expand_item import MessagesRetrieveRequestExpandItem +from pydantic import ValidationError class RawMessagesClient: @@ -146,6 +148,10 @@ def list( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) def retrieve( @@ -206,6 +212,10 @@ def retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) @@ -338,6 +348,10 @@ async def list( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) async def retrieve( @@ -398,4 +412,8 @@ async def retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) diff --git a/src/merge/resources/email/resources/messages/types/__init__.py b/src/merge/resources/email/resources/messages/types/__init__.py index ad26b1b4..23d1fc2e 100644 --- a/src/merge/resources/email/resources/messages/types/__init__.py +++ b/src/merge/resources/email/resources/messages/types/__init__.py @@ -20,8 +20,10 @@ def __getattr__(attr_name: str) -> typing.Any: raise AttributeError(f"No {attr_name} found in _dynamic_imports for module name -> {__name__}") try: module = import_module(module_name, __package__) - result = getattr(module, attr_name) - return result + if module_name == f".{attr_name}": + return module + else: + return getattr(module, attr_name) except ImportError as e: raise ImportError(f"Failed to import {attr_name} from {module_name}: {e}") from e except AttributeError as e: diff --git a/src/merge/resources/email/resources/messages/types/messages_list_request_expand_item.py b/src/merge/resources/email/resources/messages/types/messages_list_request_expand_item.py index 3db2be07..582c631d 100644 --- a/src/merge/resources/email/resources/messages/types/messages_list_request_expand_item.py +++ b/src/merge/resources/email/resources/messages/types/messages_list_request_expand_item.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ......core import enum + T_Result = typing.TypeVar("T_Result") -class MessagesListRequestExpandItem(str, enum.Enum): +class MessagesListRequestExpandItem(enum.StrEnum): BCC = "bcc" CC = "cc" FOLDERS = "folders" diff --git a/src/merge/resources/email/resources/messages/types/messages_retrieve_request_expand_item.py b/src/merge/resources/email/resources/messages/types/messages_retrieve_request_expand_item.py index e321b86f..6e80e466 100644 --- a/src/merge/resources/email/resources/messages/types/messages_retrieve_request_expand_item.py +++ b/src/merge/resources/email/resources/messages/types/messages_retrieve_request_expand_item.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ......core import enum + T_Result = typing.TypeVar("T_Result") -class MessagesRetrieveRequestExpandItem(str, enum.Enum): +class MessagesRetrieveRequestExpandItem(enum.StrEnum): BCC = "bcc" CC = "cc" FOLDERS = "folders" diff --git a/src/merge/resources/email/resources/passthrough/raw_client.py b/src/merge/resources/email/resources/passthrough/raw_client.py index b3a38470..648fac51 100644 --- a/src/merge/resources/email/resources/passthrough/raw_client.py +++ b/src/merge/resources/email/resources/passthrough/raw_client.py @@ -6,10 +6,12 @@ from .....core.api_error import ApiError from .....core.client_wrapper import AsyncClientWrapper, SyncClientWrapper from .....core.http_response import AsyncHttpResponse, HttpResponse +from .....core.parse_error import ParsingError from .....core.request_options import RequestOptions from .....core.unchecked_base_model import construct_type from ...types.data_passthrough_request import DataPassthroughRequest from ...types.remote_response import RemoteResponse +from pydantic import ValidationError # this is used as the default value for optional parameters OMIT = typing.cast(typing.Any, ...) @@ -60,6 +62,10 @@ def create( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) @@ -108,4 +114,8 @@ async def create( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) diff --git a/src/merge/resources/email/resources/regenerate_key/raw_client.py b/src/merge/resources/email/resources/regenerate_key/raw_client.py index 95a929dc..eb07281f 100644 --- a/src/merge/resources/email/resources/regenerate_key/raw_client.py +++ b/src/merge/resources/email/resources/regenerate_key/raw_client.py @@ -6,9 +6,11 @@ from .....core.api_error import ApiError from .....core.client_wrapper import AsyncClientWrapper, SyncClientWrapper from .....core.http_response import AsyncHttpResponse, HttpResponse +from .....core.parse_error import ParsingError from .....core.request_options import RequestOptions from .....core.unchecked_base_model import construct_type from ...types.remote_key import RemoteKey +from pydantic import ValidationError # this is used as the default value for optional parameters OMIT = typing.cast(typing.Any, ...) @@ -60,6 +62,10 @@ def create(self, *, name: str, request_options: typing.Optional[RequestOptions] _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) @@ -111,4 +117,8 @@ async def create( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) diff --git a/src/merge/resources/email/resources/scopes/raw_client.py b/src/merge/resources/email/resources/scopes/raw_client.py index 06ed7503..466ce64b 100644 --- a/src/merge/resources/email/resources/scopes/raw_client.py +++ b/src/merge/resources/email/resources/scopes/raw_client.py @@ -6,10 +6,12 @@ from .....core.api_error import ApiError from .....core.client_wrapper import AsyncClientWrapper, SyncClientWrapper from .....core.http_response import AsyncHttpResponse, HttpResponse +from .....core.parse_error import ParsingError from .....core.request_options import RequestOptions from .....core.unchecked_base_model import construct_type from ...types.common_model_scope_api import CommonModelScopeApi from ...types.individual_common_model_scope_deserializer_request import IndividualCommonModelScopeDeserializerRequest +from pydantic import ValidationError # this is used as the default value for optional parameters OMIT = typing.cast(typing.Any, ...) @@ -53,6 +55,10 @@ def default_scopes_retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) def linked_account_scopes_retrieve( @@ -89,6 +95,10 @@ def linked_account_scopes_retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) def linked_account_scopes_create( @@ -138,6 +148,10 @@ def linked_account_scopes_create( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) @@ -179,6 +193,10 @@ async def default_scopes_retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) async def linked_account_scopes_retrieve( @@ -215,6 +233,10 @@ async def linked_account_scopes_retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) async def linked_account_scopes_create( @@ -264,4 +286,8 @@ async def linked_account_scopes_create( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) diff --git a/src/merge/resources/email/resources/sync_status/raw_client.py b/src/merge/resources/email/resources/sync_status/raw_client.py index 3bcee066..0883370d 100644 --- a/src/merge/resources/email/resources/sync_status/raw_client.py +++ b/src/merge/resources/email/resources/sync_status/raw_client.py @@ -6,9 +6,11 @@ from .....core.api_error import ApiError from .....core.client_wrapper import AsyncClientWrapper, SyncClientWrapper from .....core.http_response import AsyncHttpResponse, HttpResponse +from .....core.parse_error import ParsingError from .....core.request_options import RequestOptions from .....core.unchecked_base_model import construct_type from ...types.paginated_sync_status_list import PaginatedSyncStatusList +from pydantic import ValidationError class RawSyncStatusClient: @@ -63,6 +65,10 @@ def list( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) @@ -118,4 +124,8 @@ async def list( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) diff --git a/src/merge/resources/email/resources/users/__init__.py b/src/merge/resources/email/resources/users/__init__.py index 8e4fa9ff..47b3e9a5 100644 --- a/src/merge/resources/email/resources/users/__init__.py +++ b/src/merge/resources/email/resources/users/__init__.py @@ -19,8 +19,10 @@ def __getattr__(attr_name: str) -> typing.Any: raise AttributeError(f"No {attr_name} found in _dynamic_imports for module name -> {__name__}") try: module = import_module(module_name, __package__) - result = getattr(module, attr_name) - return result + if module_name == f".{attr_name}": + return module + else: + return getattr(module, attr_name) except ImportError as e: raise ImportError(f"Failed to import {attr_name} from {module_name}: {e}") from e except AttributeError as e: diff --git a/src/merge/resources/email/resources/users/raw_client.py b/src/merge/resources/email/resources/users/raw_client.py index fbee541a..fade2a62 100644 --- a/src/merge/resources/email/resources/users/raw_client.py +++ b/src/merge/resources/email/resources/users/raw_client.py @@ -9,12 +9,14 @@ from .....core.datetime_utils import serialize_datetime from .....core.http_response import AsyncHttpResponse, HttpResponse from .....core.jsonable_encoder import jsonable_encoder +from .....core.parse_error import ParsingError from .....core.request_options import RequestOptions from .....core.unchecked_base_model import construct_type from ...types.paginated_user_list import PaginatedUserList from ...types.user import User from .types.users_list_request_expand_item import UsersListRequestExpandItem from .types.users_retrieve_request_expand_item import UsersRetrieveRequestExpandItem +from pydantic import ValidationError class RawUsersClient: @@ -141,6 +143,10 @@ def list( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) def retrieve( @@ -211,6 +217,10 @@ def retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) @@ -338,6 +348,10 @@ async def list( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) async def retrieve( @@ -408,4 +422,8 @@ async def retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) diff --git a/src/merge/resources/email/resources/users/types/__init__.py b/src/merge/resources/email/resources/users/types/__init__.py index e7ba722e..ae62b2c8 100644 --- a/src/merge/resources/email/resources/users/types/__init__.py +++ b/src/merge/resources/email/resources/users/types/__init__.py @@ -20,8 +20,10 @@ def __getattr__(attr_name: str) -> typing.Any: raise AttributeError(f"No {attr_name} found in _dynamic_imports for module name -> {__name__}") try: module = import_module(module_name, __package__) - result = getattr(module, attr_name) - return result + if module_name == f".{attr_name}": + return module + else: + return getattr(module, attr_name) except ImportError as e: raise ImportError(f"Failed to import {attr_name} from {module_name}: {e}") from e except AttributeError as e: diff --git a/src/merge/resources/email/resources/users/types/users_list_request_expand_item.py b/src/merge/resources/email/resources/users/types/users_list_request_expand_item.py index 353a5fff..44b4fb1c 100644 --- a/src/merge/resources/email/resources/users/types/users_list_request_expand_item.py +++ b/src/merge/resources/email/resources/users/types/users_list_request_expand_item.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ......core import enum + T_Result = typing.TypeVar("T_Result") -class UsersListRequestExpandItem(str, enum.Enum): +class UsersListRequestExpandItem(enum.StrEnum): EMAIL_ADDRESSES = "email_addresses" GROUPS = "groups" MAILBOXES = "mailboxes" diff --git a/src/merge/resources/email/resources/users/types/users_retrieve_request_expand_item.py b/src/merge/resources/email/resources/users/types/users_retrieve_request_expand_item.py index 52907ee6..aa5020c5 100644 --- a/src/merge/resources/email/resources/users/types/users_retrieve_request_expand_item.py +++ b/src/merge/resources/email/resources/users/types/users_retrieve_request_expand_item.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ......core import enum + T_Result = typing.TypeVar("T_Result") -class UsersRetrieveRequestExpandItem(str, enum.Enum): +class UsersRetrieveRequestExpandItem(enum.StrEnum): EMAIL_ADDRESSES = "email_addresses" GROUPS = "groups" MAILBOXES = "mailboxes" diff --git a/src/merge/resources/email/resources/webhook_receivers/raw_client.py b/src/merge/resources/email/resources/webhook_receivers/raw_client.py index 78c33981..7377d320 100644 --- a/src/merge/resources/email/resources/webhook_receivers/raw_client.py +++ b/src/merge/resources/email/resources/webhook_receivers/raw_client.py @@ -6,9 +6,11 @@ from .....core.api_error import ApiError from .....core.client_wrapper import AsyncClientWrapper, SyncClientWrapper from .....core.http_response import AsyncHttpResponse, HttpResponse +from .....core.parse_error import ParsingError from .....core.request_options import RequestOptions from .....core.unchecked_base_model import construct_type from ...types.webhook_receiver import WebhookReceiver +from pydantic import ValidationError # this is used as the default value for optional parameters OMIT = typing.cast(typing.Any, ...) @@ -52,6 +54,10 @@ def list( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) def create( @@ -108,6 +114,10 @@ def create( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) @@ -149,6 +159,10 @@ async def list( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) async def create( @@ -205,4 +219,8 @@ async def create( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) diff --git a/src/merge/resources/email/types/__init__.py b/src/merge/resources/email/types/__init__.py index 0a3239df..f0dd08c1 100644 --- a/src/merge/resources/email/types/__init__.py +++ b/src/merge/resources/email/types/__init__.py @@ -226,8 +226,10 @@ def __getattr__(attr_name: str) -> typing.Any: raise AttributeError(f"No {attr_name} found in _dynamic_imports for module name -> {__name__}") try: module = import_module(module_name, __package__) - result = getattr(module, attr_name) - return result + if module_name == f".{attr_name}": + return module + else: + return getattr(module, attr_name) except ImportError as e: raise ImportError(f"Failed to import {attr_name} from {module_name}: {e}") from e except AttributeError as e: diff --git a/src/merge/resources/email/types/account_details_and_actions.py b/src/merge/resources/email/types/account_details_and_actions.py index 93c874ed..cbf29cb3 100644 --- a/src/merge/resources/email/types/account_details_and_actions.py +++ b/src/merge/resources/email/types/account_details_and_actions.py @@ -42,7 +42,7 @@ class AccountDetailsAndActions(UncheckedBaseModel): integration: typing.Optional[AccountDetailsAndActionsIntegration] = None account_type: str completed_at: dt.datetime - integration_specific_fields: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None + integration_specific_fields: typing.Optional[typing.Dict[str, typing.Any]] = None if IS_PYDANTIC_V2: model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2 diff --git a/src/merge/resources/email/types/account_details_and_actions_status_enum.py b/src/merge/resources/email/types/account_details_and_actions_status_enum.py index 0701a829..323189b4 100644 --- a/src/merge/resources/email/types/account_details_and_actions_status_enum.py +++ b/src/merge/resources/email/types/account_details_and_actions_status_enum.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ....core import enum + T_Result = typing.TypeVar("T_Result") -class AccountDetailsAndActionsStatusEnum(str, enum.Enum): +class AccountDetailsAndActionsStatusEnum(enum.StrEnum): COMPLETE = "COMPLETE" INCOMPLETE = "INCOMPLETE" RELINK_NEEDED = "RELINK_NEEDED" diff --git a/src/merge/resources/email/types/account_integration.py b/src/merge/resources/email/types/account_integration.py index ef8b260d..7bc872ca 100644 --- a/src/merge/resources/email/types/account_integration.py +++ b/src/merge/resources/email/types/account_integration.py @@ -40,9 +40,7 @@ class AccountIntegration(UncheckedBaseModel): """ slug: typing.Optional[str] = None - api_endpoints_to_documentation_urls: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = ( - pydantic.Field(default=None) - ) + api_endpoints_to_documentation_urls: typing.Optional[typing.Dict[str, typing.Any]] = pydantic.Field(default=None) """ Mapping of API endpoints to documentation urls for support. Example: {'GET': [['/common-model-scopes', 'https://docs.merge.dev/accounting/common-model-scopes/#common_model_scopes_retrieve'],['/common-model-actions', 'https://docs.merge.dev/accounting/common-model-actions/#common_model_actions_retrieve']], 'POST': []} """ @@ -52,7 +50,7 @@ class AccountIntegration(UncheckedBaseModel): Setup guide URL for third party webhook creation. Exposed in Merge Docs. """ - category_beta_status: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = pydantic.Field(default=None) + category_beta_status: typing.Optional[typing.Dict[str, typing.Any]] = pydantic.Field(default=None) """ Category or categories this integration is in beta status for. """ diff --git a/src/merge/resources/email/types/advanced_metadata.py b/src/merge/resources/email/types/advanced_metadata.py index 60b5d072..aef64bb3 100644 --- a/src/merge/resources/email/types/advanced_metadata.py +++ b/src/merge/resources/email/types/advanced_metadata.py @@ -13,7 +13,7 @@ class AdvancedMetadata(UncheckedBaseModel): description: typing.Optional[str] = None is_required: typing.Optional[bool] = None is_custom: typing.Optional[bool] = None - field_choices: typing.Optional[typing.List[typing.Optional[typing.Any]]] = None + field_choices: typing.Optional[typing.List[typing.Any]] = None if IS_PYDANTIC_V2: model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2 diff --git a/src/merge/resources/email/types/categories_enum.py b/src/merge/resources/email/types/categories_enum.py index b6575458..f92febf4 100644 --- a/src/merge/resources/email/types/categories_enum.py +++ b/src/merge/resources/email/types/categories_enum.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ....core import enum + T_Result = typing.TypeVar("T_Result") -class CategoriesEnum(str, enum.Enum): +class CategoriesEnum(enum.StrEnum): HRIS = "hris" ATS = "ats" ACCOUNTING = "accounting" diff --git a/src/merge/resources/email/types/category_enum.py b/src/merge/resources/email/types/category_enum.py index 4ee2f4e4..ac0be82b 100644 --- a/src/merge/resources/email/types/category_enum.py +++ b/src/merge/resources/email/types/category_enum.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ....core import enum + T_Result = typing.TypeVar("T_Result") -class CategoryEnum(str, enum.Enum): +class CategoryEnum(enum.StrEnum): HRIS = "hris" ATS = "ats" ACCOUNTING = "accounting" diff --git a/src/merge/resources/email/types/data_passthrough_request.py b/src/merge/resources/email/types/data_passthrough_request.py index 5a60bfb6..d8d42b8d 100644 --- a/src/merge/resources/email/types/data_passthrough_request.py +++ b/src/merge/resources/email/types/data_passthrough_request.py @@ -41,7 +41,7 @@ class DataPassthroughRequest(UncheckedBaseModel): Pass an array of `MultipartFormField` objects in here instead of using the `data` param if `request_format` is set to `MULTIPART`. """ - headers: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = pydantic.Field(default=None) + headers: typing.Optional[typing.Dict[str, typing.Any]] = pydantic.Field(default=None) """ The headers to use for the request (Merge will handle the account's authorization headers). `Content-Type` header is required for passthrough. Choose content type corresponding to expected format of receiving server. """ diff --git a/src/merge/resources/email/types/effect_enum.py b/src/merge/resources/email/types/effect_enum.py index 781c7ad5..54f59897 100644 --- a/src/merge/resources/email/types/effect_enum.py +++ b/src/merge/resources/email/types/effect_enum.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ....core import enum + T_Result = typing.TypeVar("T_Result") -class EffectEnum(str, enum.Enum): +class EffectEnum(enum.StrEnum): ALLOWED = "ALLOWED" DENIED = "DENIED" INHERITED = "INHERITED" diff --git a/src/merge/resources/email/types/email_address_field_mappings.py b/src/merge/resources/email/types/email_address_field_mappings.py index 29175058..fb4772bd 100644 --- a/src/merge/resources/email/types/email_address_field_mappings.py +++ b/src/merge/resources/email/types/email_address_field_mappings.py @@ -8,8 +8,8 @@ class EmailAddressFieldMappings(UncheckedBaseModel): - organization_defined_targets: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None - linked_account_defined_targets: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None + organization_defined_targets: typing.Optional[typing.Dict[str, typing.Any]] = None + linked_account_defined_targets: typing.Optional[typing.Dict[str, typing.Any]] = None if IS_PYDANTIC_V2: model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2 diff --git a/src/merge/resources/email/types/enabled_actions_enum.py b/src/merge/resources/email/types/enabled_actions_enum.py index cb19286a..ded7aa80 100644 --- a/src/merge/resources/email/types/enabled_actions_enum.py +++ b/src/merge/resources/email/types/enabled_actions_enum.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ....core import enum + T_Result = typing.TypeVar("T_Result") -class EnabledActionsEnum(str, enum.Enum): +class EnabledActionsEnum(enum.StrEnum): READ = "READ" WRITE = "WRITE" diff --git a/src/merge/resources/email/types/encoding_enum.py b/src/merge/resources/email/types/encoding_enum.py index 7d4b8977..27686241 100644 --- a/src/merge/resources/email/types/encoding_enum.py +++ b/src/merge/resources/email/types/encoding_enum.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ....core import enum + T_Result = typing.TypeVar("T_Result") -class EncodingEnum(str, enum.Enum): +class EncodingEnum(enum.StrEnum): RAW = "RAW" BASE_64 = "BASE64" GZIP_BASE_64 = "GZIP_BASE64" diff --git a/src/merge/resources/email/types/event_type_enum.py b/src/merge/resources/email/types/event_type_enum.py index a04b9681..42ce9abb 100644 --- a/src/merge/resources/email/types/event_type_enum.py +++ b/src/merge/resources/email/types/event_type_enum.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ....core import enum + T_Result = typing.TypeVar("T_Result") -class EventTypeEnum(str, enum.Enum): +class EventTypeEnum(enum.StrEnum): CREATED_REMOTE_PRODUCTION_API_KEY = "CREATED_REMOTE_PRODUCTION_API_KEY" DELETED_REMOTE_PRODUCTION_API_KEY = "DELETED_REMOTE_PRODUCTION_API_KEY" CREATED_TEST_API_KEY = "CREATED_TEST_API_KEY" diff --git a/src/merge/resources/email/types/external_target_field_api_response.py b/src/merge/resources/email/types/external_target_field_api_response.py index 280fa60a..8d5a6e5f 100644 --- a/src/merge/resources/email/types/external_target_field_api_response.py +++ b/src/merge/resources/email/types/external_target_field_api_response.py @@ -3,19 +3,37 @@ import typing import pydantic +import typing_extensions from ....core.pydantic_utilities import IS_PYDANTIC_V2 +from ....core.serialization import FieldMetadata from ....core.unchecked_base_model import UncheckedBaseModel from .external_target_field_api import ExternalTargetFieldApi class ExternalTargetFieldApiResponse(UncheckedBaseModel): - user: typing.Optional[typing.List[ExternalTargetFieldApi]] = pydantic.Field(alias="User", default=None) - group: typing.Optional[typing.List[ExternalTargetFieldApi]] = pydantic.Field(alias="Group", default=None) - mailbox: typing.Optional[typing.List[ExternalTargetFieldApi]] = pydantic.Field(alias="Mailbox", default=None) - folder: typing.Optional[typing.List[ExternalTargetFieldApi]] = pydantic.Field(alias="Folder", default=None) - email_address: typing.Optional[typing.List[ExternalTargetFieldApi]] = pydantic.Field( - alias="EmailAddress", default=None - ) + user: typing_extensions.Annotated[ + typing.Optional[typing.List[ExternalTargetFieldApi]], FieldMetadata(alias="User"), pydantic.Field(alias="User") + ] = None + group: typing_extensions.Annotated[ + typing.Optional[typing.List[ExternalTargetFieldApi]], + FieldMetadata(alias="Group"), + pydantic.Field(alias="Group"), + ] = None + mailbox: typing_extensions.Annotated[ + typing.Optional[typing.List[ExternalTargetFieldApi]], + FieldMetadata(alias="Mailbox"), + pydantic.Field(alias="Mailbox"), + ] = None + folder: typing_extensions.Annotated[ + typing.Optional[typing.List[ExternalTargetFieldApi]], + FieldMetadata(alias="Folder"), + pydantic.Field(alias="Folder"), + ] = None + email_address: typing_extensions.Annotated[ + typing.Optional[typing.List[ExternalTargetFieldApi]], + FieldMetadata(alias="EmailAddress"), + pydantic.Field(alias="EmailAddress"), + ] = None if IS_PYDANTIC_V2: model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2 diff --git a/src/merge/resources/email/types/field_mapping_api_instance_remote_field.py b/src/merge/resources/email/types/field_mapping_api_instance_remote_field.py index 578a2b10..ccd1f990 100644 --- a/src/merge/resources/email/types/field_mapping_api_instance_remote_field.py +++ b/src/merge/resources/email/types/field_mapping_api_instance_remote_field.py @@ -3,7 +3,9 @@ import typing import pydantic +import typing_extensions from ....core.pydantic_utilities import IS_PYDANTIC_V2 +from ....core.serialization import FieldMetadata from ....core.unchecked_base_model import UncheckedBaseModel from .field_mapping_api_instance_remote_field_remote_endpoint_info import ( FieldMappingApiInstanceRemoteFieldRemoteEndpointInfo, @@ -12,9 +14,9 @@ class FieldMappingApiInstanceRemoteField(UncheckedBaseModel): remote_key_name: typing.Optional[str] = None - schema_: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = pydantic.Field( - alias="schema", default=None - ) + schema_: typing_extensions.Annotated[ + typing.Optional[typing.Dict[str, typing.Any]], FieldMetadata(alias="schema"), pydantic.Field(alias="schema") + ] = None remote_endpoint_info: FieldMappingApiInstanceRemoteFieldRemoteEndpointInfo if IS_PYDANTIC_V2: diff --git a/src/merge/resources/email/types/field_mapping_api_instance_response.py b/src/merge/resources/email/types/field_mapping_api_instance_response.py index c3c882de..f2486560 100644 --- a/src/merge/resources/email/types/field_mapping_api_instance_response.py +++ b/src/merge/resources/email/types/field_mapping_api_instance_response.py @@ -3,19 +3,37 @@ import typing import pydantic +import typing_extensions from ....core.pydantic_utilities import IS_PYDANTIC_V2 +from ....core.serialization import FieldMetadata from ....core.unchecked_base_model import UncheckedBaseModel from .field_mapping_api_instance import FieldMappingApiInstance class FieldMappingApiInstanceResponse(UncheckedBaseModel): - user: typing.Optional[typing.List[FieldMappingApiInstance]] = pydantic.Field(alias="User", default=None) - group: typing.Optional[typing.List[FieldMappingApiInstance]] = pydantic.Field(alias="Group", default=None) - mailbox: typing.Optional[typing.List[FieldMappingApiInstance]] = pydantic.Field(alias="Mailbox", default=None) - folder: typing.Optional[typing.List[FieldMappingApiInstance]] = pydantic.Field(alias="Folder", default=None) - email_address: typing.Optional[typing.List[FieldMappingApiInstance]] = pydantic.Field( - alias="EmailAddress", default=None - ) + user: typing_extensions.Annotated[ + typing.Optional[typing.List[FieldMappingApiInstance]], FieldMetadata(alias="User"), pydantic.Field(alias="User") + ] = None + group: typing_extensions.Annotated[ + typing.Optional[typing.List[FieldMappingApiInstance]], + FieldMetadata(alias="Group"), + pydantic.Field(alias="Group"), + ] = None + mailbox: typing_extensions.Annotated[ + typing.Optional[typing.List[FieldMappingApiInstance]], + FieldMetadata(alias="Mailbox"), + pydantic.Field(alias="Mailbox"), + ] = None + folder: typing_extensions.Annotated[ + typing.Optional[typing.List[FieldMappingApiInstance]], + FieldMetadata(alias="Folder"), + pydantic.Field(alias="Folder"), + ] = None + email_address: typing_extensions.Annotated[ + typing.Optional[typing.List[FieldMappingApiInstance]], + FieldMetadata(alias="EmailAddress"), + pydantic.Field(alias="EmailAddress"), + ] = None if IS_PYDANTIC_V2: model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2 diff --git a/src/merge/resources/email/types/field_permission_deserializer.py b/src/merge/resources/email/types/field_permission_deserializer.py index 1d71ae04..407ed547 100644 --- a/src/merge/resources/email/types/field_permission_deserializer.py +++ b/src/merge/resources/email/types/field_permission_deserializer.py @@ -8,8 +8,8 @@ class FieldPermissionDeserializer(UncheckedBaseModel): - enabled_fields: typing.Optional[typing.List[typing.Optional[typing.Any]]] = None - disabled_fields: typing.Optional[typing.List[typing.Optional[typing.Any]]] = None + enabled_fields: typing.Optional[typing.List[typing.Any]] = None + disabled_fields: typing.Optional[typing.List[typing.Any]] = None if IS_PYDANTIC_V2: model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2 diff --git a/src/merge/resources/email/types/field_permission_deserializer_request.py b/src/merge/resources/email/types/field_permission_deserializer_request.py index a4113b46..6680c7d2 100644 --- a/src/merge/resources/email/types/field_permission_deserializer_request.py +++ b/src/merge/resources/email/types/field_permission_deserializer_request.py @@ -8,8 +8,8 @@ class FieldPermissionDeserializerRequest(UncheckedBaseModel): - enabled_fields: typing.Optional[typing.List[typing.Optional[typing.Any]]] = None - disabled_fields: typing.Optional[typing.List[typing.Optional[typing.Any]]] = None + enabled_fields: typing.Optional[typing.List[typing.Any]] = None + disabled_fields: typing.Optional[typing.List[typing.Any]] = None if IS_PYDANTIC_V2: model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2 diff --git a/src/merge/resources/email/types/folder_field_mappings.py b/src/merge/resources/email/types/folder_field_mappings.py index b55828f8..0cfc4123 100644 --- a/src/merge/resources/email/types/folder_field_mappings.py +++ b/src/merge/resources/email/types/folder_field_mappings.py @@ -8,8 +8,8 @@ class FolderFieldMappings(UncheckedBaseModel): - organization_defined_targets: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None - linked_account_defined_targets: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None + organization_defined_targets: typing.Optional[typing.Dict[str, typing.Any]] = None + linked_account_defined_targets: typing.Optional[typing.Dict[str, typing.Any]] = None if IS_PYDANTIC_V2: model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2 diff --git a/src/merge/resources/email/types/group_field_mappings.py b/src/merge/resources/email/types/group_field_mappings.py index 3be990d2..eaef7341 100644 --- a/src/merge/resources/email/types/group_field_mappings.py +++ b/src/merge/resources/email/types/group_field_mappings.py @@ -8,8 +8,8 @@ class GroupFieldMappings(UncheckedBaseModel): - organization_defined_targets: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None - linked_account_defined_targets: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None + organization_defined_targets: typing.Optional[typing.Dict[str, typing.Any]] = None + linked_account_defined_targets: typing.Optional[typing.Dict[str, typing.Any]] = None if IS_PYDANTIC_V2: model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2 diff --git a/src/merge/resources/email/types/issue.py b/src/merge/resources/email/types/issue.py index 8f1027ca..ab038c54 100644 --- a/src/merge/resources/email/types/issue.py +++ b/src/merge/resources/email/types/issue.py @@ -17,7 +17,7 @@ class Issue(UncheckedBaseModel): """ error_description: str - end_user: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None + end_user: typing.Optional[typing.Dict[str, typing.Any]] = None first_incident_time: typing.Optional[dt.datetime] = None last_incident_time: typing.Optional[dt.datetime] = None is_muted: typing.Optional[bool] = None diff --git a/src/merge/resources/email/types/issue_status_enum.py b/src/merge/resources/email/types/issue_status_enum.py index d75e26e2..932ae51c 100644 --- a/src/merge/resources/email/types/issue_status_enum.py +++ b/src/merge/resources/email/types/issue_status_enum.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ....core import enum + T_Result = typing.TypeVar("T_Result") -class IssueStatusEnum(str, enum.Enum): +class IssueStatusEnum(enum.StrEnum): ONGOING = "ONGOING" RESOLVED = "RESOLVED" diff --git a/src/merge/resources/email/types/language_enum.py b/src/merge/resources/email/types/language_enum.py index 19f87fe0..16d6cd0e 100644 --- a/src/merge/resources/email/types/language_enum.py +++ b/src/merge/resources/email/types/language_enum.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ....core import enum + T_Result = typing.TypeVar("T_Result") -class LanguageEnum(str, enum.Enum): +class LanguageEnum(enum.StrEnum): EN = "en" DE = "de" diff --git a/src/merge/resources/email/types/last_sync_result_enum.py b/src/merge/resources/email/types/last_sync_result_enum.py index 52ecd845..5cb86bc3 100644 --- a/src/merge/resources/email/types/last_sync_result_enum.py +++ b/src/merge/resources/email/types/last_sync_result_enum.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ....core import enum + T_Result = typing.TypeVar("T_Result") -class LastSyncResultEnum(str, enum.Enum): +class LastSyncResultEnum(enum.StrEnum): SYNCING = "SYNCING" DONE = "DONE" FAILED = "FAILED" diff --git a/src/merge/resources/email/types/mailbox_field_mappings.py b/src/merge/resources/email/types/mailbox_field_mappings.py index 7ecc9cf7..1228768b 100644 --- a/src/merge/resources/email/types/mailbox_field_mappings.py +++ b/src/merge/resources/email/types/mailbox_field_mappings.py @@ -8,8 +8,8 @@ class MailboxFieldMappings(UncheckedBaseModel): - organization_defined_targets: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None - linked_account_defined_targets: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None + organization_defined_targets: typing.Optional[typing.Dict[str, typing.Any]] = None + linked_account_defined_targets: typing.Optional[typing.Dict[str, typing.Any]] = None if IS_PYDANTIC_V2: model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2 diff --git a/src/merge/resources/email/types/mailbox_type_enum.py b/src/merge/resources/email/types/mailbox_type_enum.py index 80c1883a..9daffed5 100644 --- a/src/merge/resources/email/types/mailbox_type_enum.py +++ b/src/merge/resources/email/types/mailbox_type_enum.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ....core import enum + T_Result = typing.TypeVar("T_Result") -class MailboxTypeEnum(str, enum.Enum): +class MailboxTypeEnum(enum.StrEnum): USER = "USER" SHARED = "SHARED" diff --git a/src/merge/resources/email/types/method_enum.py b/src/merge/resources/email/types/method_enum.py index 73d2556f..45c9f89e 100644 --- a/src/merge/resources/email/types/method_enum.py +++ b/src/merge/resources/email/types/method_enum.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ....core import enum + T_Result = typing.TypeVar("T_Result") -class MethodEnum(str, enum.Enum): +class MethodEnum(enum.StrEnum): GET = "GET" OPTIONS = "OPTIONS" HEAD = "HEAD" diff --git a/src/merge/resources/email/types/permission_field_mappings.py b/src/merge/resources/email/types/permission_field_mappings.py index 9c2804c2..0672b491 100644 --- a/src/merge/resources/email/types/permission_field_mappings.py +++ b/src/merge/resources/email/types/permission_field_mappings.py @@ -8,8 +8,8 @@ class PermissionFieldMappings(UncheckedBaseModel): - organization_defined_targets: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None - linked_account_defined_targets: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None + organization_defined_targets: typing.Optional[typing.Dict[str, typing.Any]] = None + linked_account_defined_targets: typing.Optional[typing.Dict[str, typing.Any]] = None if IS_PYDANTIC_V2: model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2 diff --git a/src/merge/resources/email/types/remote_data.py b/src/merge/resources/email/types/remote_data.py index f34bec80..2026f05a 100644 --- a/src/merge/resources/email/types/remote_data.py +++ b/src/merge/resources/email/types/remote_data.py @@ -22,7 +22,7 @@ class RemoteData(UncheckedBaseModel): The third-party API path that is being called. """ - data: typing.Optional[typing.Optional[typing.Any]] = pydantic.Field(default=None) + data: typing.Optional[typing.Any] = pydantic.Field(default=None) """ The data returned from the third-party for this object in its original, unnormalized format. """ diff --git a/src/merge/resources/email/types/remote_endpoint_info.py b/src/merge/resources/email/types/remote_endpoint_info.py index 07ceff6a..ffa70b94 100644 --- a/src/merge/resources/email/types/remote_endpoint_info.py +++ b/src/merge/resources/email/types/remote_endpoint_info.py @@ -10,7 +10,7 @@ class RemoteEndpointInfo(UncheckedBaseModel): method: str url_path: str - field_traversal_path: typing.List[typing.Optional[typing.Any]] + field_traversal_path: typing.List[typing.Any] if IS_PYDANTIC_V2: model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2 diff --git a/src/merge/resources/email/types/remote_field_api.py b/src/merge/resources/email/types/remote_field_api.py index 0756bfc3..5f2c2ab1 100644 --- a/src/merge/resources/email/types/remote_field_api.py +++ b/src/merge/resources/email/types/remote_field_api.py @@ -3,7 +3,9 @@ import typing import pydantic +import typing_extensions from ....core.pydantic_utilities import IS_PYDANTIC_V2 +from ....core.serialization import FieldMetadata from ....core.unchecked_base_model import UncheckedBaseModel from .remote_endpoint_info import RemoteEndpointInfo from .remote_field_api_advanced_metadata import RemoteFieldApiAdvancedMetadata @@ -11,10 +13,12 @@ class RemoteFieldApi(UncheckedBaseModel): - schema_: typing.Dict[str, typing.Optional[typing.Any]] = pydantic.Field(alias="schema") + schema_: typing_extensions.Annotated[ + typing.Dict[str, typing.Any], FieldMetadata(alias="schema"), pydantic.Field(alias="schema") + ] remote_key_name: str remote_endpoint_info: RemoteEndpointInfo - example_values: typing.Optional[typing.List[typing.Optional[typing.Any]]] = None + example_values: typing.Optional[typing.List[typing.Any]] = None advanced_metadata: typing.Optional[RemoteFieldApiAdvancedMetadata] = None coverage: typing.Optional[RemoteFieldApiCoverage] = None diff --git a/src/merge/resources/email/types/remote_field_api_response.py b/src/merge/resources/email/types/remote_field_api_response.py index 523e5892..c6ca352f 100644 --- a/src/merge/resources/email/types/remote_field_api_response.py +++ b/src/merge/resources/email/types/remote_field_api_response.py @@ -3,17 +3,31 @@ import typing import pydantic +import typing_extensions from ....core.pydantic_utilities import IS_PYDANTIC_V2 +from ....core.serialization import FieldMetadata from ....core.unchecked_base_model import UncheckedBaseModel from .remote_field_api import RemoteFieldApi class RemoteFieldApiResponse(UncheckedBaseModel): - user: typing.Optional[typing.List[RemoteFieldApi]] = pydantic.Field(alias="User", default=None) - group: typing.Optional[typing.List[RemoteFieldApi]] = pydantic.Field(alias="Group", default=None) - mailbox: typing.Optional[typing.List[RemoteFieldApi]] = pydantic.Field(alias="Mailbox", default=None) - folder: typing.Optional[typing.List[RemoteFieldApi]] = pydantic.Field(alias="Folder", default=None) - email_address: typing.Optional[typing.List[RemoteFieldApi]] = pydantic.Field(alias="EmailAddress", default=None) + user: typing_extensions.Annotated[ + typing.Optional[typing.List[RemoteFieldApi]], FieldMetadata(alias="User"), pydantic.Field(alias="User") + ] = None + group: typing_extensions.Annotated[ + typing.Optional[typing.List[RemoteFieldApi]], FieldMetadata(alias="Group"), pydantic.Field(alias="Group") + ] = None + mailbox: typing_extensions.Annotated[ + typing.Optional[typing.List[RemoteFieldApi]], FieldMetadata(alias="Mailbox"), pydantic.Field(alias="Mailbox") + ] = None + folder: typing_extensions.Annotated[ + typing.Optional[typing.List[RemoteFieldApi]], FieldMetadata(alias="Folder"), pydantic.Field(alias="Folder") + ] = None + email_address: typing_extensions.Annotated[ + typing.Optional[typing.List[RemoteFieldApi]], + FieldMetadata(alias="EmailAddress"), + pydantic.Field(alias="EmailAddress"), + ] = None if IS_PYDANTIC_V2: model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2 diff --git a/src/merge/resources/email/types/remote_response.py b/src/merge/resources/email/types/remote_response.py index db01131f..8bc6f905 100644 --- a/src/merge/resources/email/types/remote_response.py +++ b/src/merge/resources/email/types/remote_response.py @@ -21,10 +21,10 @@ class RemoteResponse(UncheckedBaseModel): method: str path: str status: int - response: typing.Optional[typing.Any] = None - response_headers: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None + response: typing.Any + response_headers: typing.Optional[typing.Dict[str, typing.Any]] = None response_type: typing.Optional[RemoteResponseResponseType] = None - headers: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None + headers: typing.Optional[typing.Dict[str, typing.Any]] = None if IS_PYDANTIC_V2: model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2 diff --git a/src/merge/resources/email/types/request_format_enum.py b/src/merge/resources/email/types/request_format_enum.py index 70ecd9bb..711b2df8 100644 --- a/src/merge/resources/email/types/request_format_enum.py +++ b/src/merge/resources/email/types/request_format_enum.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ....core import enum + T_Result = typing.TypeVar("T_Result") -class RequestFormatEnum(str, enum.Enum): +class RequestFormatEnum(enum.StrEnum): JSON = "JSON" XML = "XML" MULTIPART = "MULTIPART" diff --git a/src/merge/resources/email/types/response_type_enum.py b/src/merge/resources/email/types/response_type_enum.py index 23b6bb5b..ce3f3d04 100644 --- a/src/merge/resources/email/types/response_type_enum.py +++ b/src/merge/resources/email/types/response_type_enum.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ....core import enum + T_Result = typing.TypeVar("T_Result") -class ResponseTypeEnum(str, enum.Enum): +class ResponseTypeEnum(enum.StrEnum): JSON = "JSON" BASE_64_GZIP = "BASE64_GZIP" diff --git a/src/merge/resources/email/types/role_enum.py b/src/merge/resources/email/types/role_enum.py index c97de31f..752d2454 100644 --- a/src/merge/resources/email/types/role_enum.py +++ b/src/merge/resources/email/types/role_enum.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ....core import enum + T_Result = typing.TypeVar("T_Result") -class RoleEnum(str, enum.Enum): +class RoleEnum(enum.StrEnum): ADMIN = "ADMIN" DEVELOPER = "DEVELOPER" MEMBER = "MEMBER" diff --git a/src/merge/resources/email/types/selective_sync_configurations_usage_enum.py b/src/merge/resources/email/types/selective_sync_configurations_usage_enum.py index 7b486b59..953775e9 100644 --- a/src/merge/resources/email/types/selective_sync_configurations_usage_enum.py +++ b/src/merge/resources/email/types/selective_sync_configurations_usage_enum.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ....core import enum + T_Result = typing.TypeVar("T_Result") -class SelectiveSyncConfigurationsUsageEnum(str, enum.Enum): +class SelectiveSyncConfigurationsUsageEnum(enum.StrEnum): IN_NEXT_SYNC = "IN_NEXT_SYNC" IN_LAST_SYNC = "IN_LAST_SYNC" diff --git a/src/merge/resources/email/types/status_fd_5_enum.py b/src/merge/resources/email/types/status_fd_5_enum.py index 3bf97afd..52c212e4 100644 --- a/src/merge/resources/email/types/status_fd_5_enum.py +++ b/src/merge/resources/email/types/status_fd_5_enum.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ....core import enum + T_Result = typing.TypeVar("T_Result") -class StatusFd5Enum(str, enum.Enum): +class StatusFd5Enum(enum.StrEnum): SYNCING = "SYNCING" DONE = "DONE" FAILED = "FAILED" diff --git a/src/merge/resources/email/types/user_field_mappings.py b/src/merge/resources/email/types/user_field_mappings.py index 374935d7..6a27272a 100644 --- a/src/merge/resources/email/types/user_field_mappings.py +++ b/src/merge/resources/email/types/user_field_mappings.py @@ -8,8 +8,8 @@ class UserFieldMappings(UncheckedBaseModel): - organization_defined_targets: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None - linked_account_defined_targets: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None + organization_defined_targets: typing.Optional[typing.Dict[str, typing.Any]] = None + linked_account_defined_targets: typing.Optional[typing.Dict[str, typing.Any]] = None if IS_PYDANTIC_V2: model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2 diff --git a/src/merge/resources/email/types/user_type_enum.py b/src/merge/resources/email/types/user_type_enum.py index f95c76c1..9ed9ad57 100644 --- a/src/merge/resources/email/types/user_type_enum.py +++ b/src/merge/resources/email/types/user_type_enum.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ....core import enum + T_Result = typing.TypeVar("T_Result") -class UserTypeEnum(str, enum.Enum): +class UserTypeEnum(enum.StrEnum): INDIVIDUAL = "INDIVIDUAL" SHARED = "SHARED" EXTERNAL = "EXTERNAL" diff --git a/src/merge/resources/filestorage/__init__.py b/src/merge/resources/filestorage/__init__.py index 123c50fb..7b490ba4 100644 --- a/src/merge/resources/filestorage/__init__.py +++ b/src/merge/resources/filestorage/__init__.py @@ -330,8 +330,10 @@ def __getattr__(attr_name: str) -> typing.Any: raise AttributeError(f"No {attr_name} found in _dynamic_imports for module name -> {__name__}") try: module = import_module(module_name, __package__) - result = getattr(module, attr_name) - return result + if module_name == f".{attr_name}": + return module + else: + return getattr(module, attr_name) except ImportError as e: raise ImportError(f"Failed to import {attr_name} from {module_name}: {e}") from e except AttributeError as e: diff --git a/src/merge/resources/filestorage/resources/__init__.py b/src/merge/resources/filestorage/resources/__init__.py index dc5341fd..8b14e730 100644 --- a/src/merge/resources/filestorage/resources/__init__.py +++ b/src/merge/resources/filestorage/resources/__init__.py @@ -53,28 +53,28 @@ "GroupsRetrieveRequestExpandItem": ".groups", "IssuesListRequestStatus": ".issues", "LinkedAccountsListRequestCategory": ".linked_accounts", - "account_details": ".", - "account_token": ".", - "async_passthrough": ".", - "audit_trail": ".", - "available_actions": ".", - "delete_account": ".", - "drives": ".", - "field_mapping": ".", - "files": ".", - "folders": ".", - "force_resync": ".", - "generate_key": ".", - "groups": ".", - "issues": ".", - "link_token": ".", - "linked_accounts": ".", - "passthrough": ".", - "regenerate_key": ".", - "scopes": ".", - "sync_status": ".", - "users": ".", - "webhook_receivers": ".", + "account_details": ".account_details", + "account_token": ".account_token", + "async_passthrough": ".async_passthrough", + "audit_trail": ".audit_trail", + "available_actions": ".available_actions", + "delete_account": ".delete_account", + "drives": ".drives", + "field_mapping": ".field_mapping", + "files": ".files", + "folders": ".folders", + "force_resync": ".force_resync", + "generate_key": ".generate_key", + "groups": ".groups", + "issues": ".issues", + "link_token": ".link_token", + "linked_accounts": ".linked_accounts", + "passthrough": ".passthrough", + "regenerate_key": ".regenerate_key", + "scopes": ".scopes", + "sync_status": ".sync_status", + "users": ".users", + "webhook_receivers": ".webhook_receivers", } @@ -84,8 +84,10 @@ def __getattr__(attr_name: str) -> typing.Any: raise AttributeError(f"No {attr_name} found in _dynamic_imports for module name -> {__name__}") try: module = import_module(module_name, __package__) - result = getattr(module, attr_name) - return result + if module_name == f".{attr_name}": + return module + else: + return getattr(module, attr_name) except ImportError as e: raise ImportError(f"Failed to import {attr_name} from {module_name}: {e}") from e except AttributeError as e: diff --git a/src/merge/resources/filestorage/resources/account_details/raw_client.py b/src/merge/resources/filestorage/resources/account_details/raw_client.py index cf375876..f77fcd30 100644 --- a/src/merge/resources/filestorage/resources/account_details/raw_client.py +++ b/src/merge/resources/filestorage/resources/account_details/raw_client.py @@ -6,9 +6,11 @@ from .....core.api_error import ApiError from .....core.client_wrapper import AsyncClientWrapper, SyncClientWrapper from .....core.http_response import AsyncHttpResponse, HttpResponse +from .....core.parse_error import ParsingError from .....core.request_options import RequestOptions from .....core.unchecked_base_model import construct_type from ...types.account_details import AccountDetails +from pydantic import ValidationError class RawAccountDetailsClient: @@ -47,6 +49,10 @@ def retrieve(self, *, request_options: typing.Optional[RequestOptions] = None) - _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) @@ -88,4 +94,8 @@ async def retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) diff --git a/src/merge/resources/filestorage/resources/account_token/raw_client.py b/src/merge/resources/filestorage/resources/account_token/raw_client.py index 5ea56f35..518b255d 100644 --- a/src/merge/resources/filestorage/resources/account_token/raw_client.py +++ b/src/merge/resources/filestorage/resources/account_token/raw_client.py @@ -7,10 +7,12 @@ from .....core.client_wrapper import AsyncClientWrapper, SyncClientWrapper from .....core.http_response import AsyncHttpResponse, HttpResponse from .....core.jsonable_encoder import jsonable_encoder +from .....core.parse_error import ParsingError from .....core.request_options import RequestOptions from .....core.unchecked_base_model import construct_type from ...types.account_token import AccountToken from ...types.regenerate_account_token import RegenerateAccountToken +from pydantic import ValidationError class RawAccountTokenClient: @@ -53,6 +55,10 @@ def retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) def regenerate_create( @@ -89,6 +95,10 @@ def regenerate_create( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) @@ -132,6 +142,10 @@ async def retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) async def regenerate_create( @@ -168,4 +182,8 @@ async def regenerate_create( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) diff --git a/src/merge/resources/filestorage/resources/async_passthrough/__init__.py b/src/merge/resources/filestorage/resources/async_passthrough/__init__.py index 375c7953..11090986 100644 --- a/src/merge/resources/filestorage/resources/async_passthrough/__init__.py +++ b/src/merge/resources/filestorage/resources/async_passthrough/__init__.py @@ -16,8 +16,10 @@ def __getattr__(attr_name: str) -> typing.Any: raise AttributeError(f"No {attr_name} found in _dynamic_imports for module name -> {__name__}") try: module = import_module(module_name, __package__) - result = getattr(module, attr_name) - return result + if module_name == f".{attr_name}": + return module + else: + return getattr(module, attr_name) except ImportError as e: raise ImportError(f"Failed to import {attr_name} from {module_name}: {e}") from e except AttributeError as e: diff --git a/src/merge/resources/filestorage/resources/async_passthrough/raw_client.py b/src/merge/resources/filestorage/resources/async_passthrough/raw_client.py index 993249cf..b536ea59 100644 --- a/src/merge/resources/filestorage/resources/async_passthrough/raw_client.py +++ b/src/merge/resources/filestorage/resources/async_passthrough/raw_client.py @@ -7,11 +7,13 @@ from .....core.client_wrapper import AsyncClientWrapper, SyncClientWrapper from .....core.http_response import AsyncHttpResponse, HttpResponse from .....core.jsonable_encoder import jsonable_encoder +from .....core.parse_error import ParsingError from .....core.request_options import RequestOptions from .....core.unchecked_base_model import construct_type from ...types.async_passthrough_reciept import AsyncPassthroughReciept from ...types.data_passthrough_request import DataPassthroughRequest from .types.async_passthrough_retrieve_response import AsyncPassthroughRetrieveResponse +from pydantic import ValidationError # this is used as the default value for optional parameters OMIT = typing.cast(typing.Any, ...) @@ -62,6 +64,10 @@ def create( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) def retrieve( @@ -100,6 +106,10 @@ def retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) @@ -148,6 +158,10 @@ async def create( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) async def retrieve( @@ -186,4 +200,8 @@ async def retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) diff --git a/src/merge/resources/filestorage/resources/async_passthrough/types/__init__.py b/src/merge/resources/filestorage/resources/async_passthrough/types/__init__.py index f6e9bec9..dc335400 100644 --- a/src/merge/resources/filestorage/resources/async_passthrough/types/__init__.py +++ b/src/merge/resources/filestorage/resources/async_passthrough/types/__init__.py @@ -16,8 +16,10 @@ def __getattr__(attr_name: str) -> typing.Any: raise AttributeError(f"No {attr_name} found in _dynamic_imports for module name -> {__name__}") try: module = import_module(module_name, __package__) - result = getattr(module, attr_name) - return result + if module_name == f".{attr_name}": + return module + else: + return getattr(module, attr_name) except ImportError as e: raise ImportError(f"Failed to import {attr_name} from {module_name}: {e}") from e except AttributeError as e: diff --git a/src/merge/resources/filestorage/resources/audit_trail/raw_client.py b/src/merge/resources/filestorage/resources/audit_trail/raw_client.py index 19cd62bc..2dfad709 100644 --- a/src/merge/resources/filestorage/resources/audit_trail/raw_client.py +++ b/src/merge/resources/filestorage/resources/audit_trail/raw_client.py @@ -6,9 +6,11 @@ from .....core.api_error import ApiError from .....core.client_wrapper import AsyncClientWrapper, SyncClientWrapper from .....core.http_response import AsyncHttpResponse, HttpResponse +from .....core.parse_error import ParsingError from .....core.request_options import RequestOptions from .....core.unchecked_base_model import construct_type from ...types.paginated_audit_log_event_list import PaginatedAuditLogEventList +from pydantic import ValidationError class RawAuditTrailClient: @@ -83,6 +85,10 @@ def list( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) @@ -158,4 +164,8 @@ async def list( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) diff --git a/src/merge/resources/filestorage/resources/available_actions/raw_client.py b/src/merge/resources/filestorage/resources/available_actions/raw_client.py index 77c00186..2372f80c 100644 --- a/src/merge/resources/filestorage/resources/available_actions/raw_client.py +++ b/src/merge/resources/filestorage/resources/available_actions/raw_client.py @@ -6,9 +6,11 @@ from .....core.api_error import ApiError from .....core.client_wrapper import AsyncClientWrapper, SyncClientWrapper from .....core.http_response import AsyncHttpResponse, HttpResponse +from .....core.parse_error import ParsingError from .....core.request_options import RequestOptions from .....core.unchecked_base_model import construct_type from ...types.available_actions import AvailableActions +from pydantic import ValidationError class RawAvailableActionsClient: @@ -47,6 +49,10 @@ def retrieve(self, *, request_options: typing.Optional[RequestOptions] = None) - _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) @@ -88,4 +94,8 @@ async def retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) diff --git a/src/merge/resources/filestorage/resources/delete_account/raw_client.py b/src/merge/resources/filestorage/resources/delete_account/raw_client.py index c1b1eaf9..a4d7c363 100644 --- a/src/merge/resources/filestorage/resources/delete_account/raw_client.py +++ b/src/merge/resources/filestorage/resources/delete_account/raw_client.py @@ -6,7 +6,9 @@ from .....core.api_error import ApiError from .....core.client_wrapper import AsyncClientWrapper, SyncClientWrapper from .....core.http_response import AsyncHttpResponse, HttpResponse +from .....core.parse_error import ParsingError from .....core.request_options import RequestOptions +from pydantic import ValidationError class RawDeleteAccountClient: @@ -37,6 +39,10 @@ def delete(self, *, request_options: typing.Optional[RequestOptions] = None) -> _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) @@ -68,4 +74,8 @@ async def delete(self, *, request_options: typing.Optional[RequestOptions] = Non _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) diff --git a/src/merge/resources/filestorage/resources/drives/raw_client.py b/src/merge/resources/filestorage/resources/drives/raw_client.py index 666e5081..66fdb992 100644 --- a/src/merge/resources/filestorage/resources/drives/raw_client.py +++ b/src/merge/resources/filestorage/resources/drives/raw_client.py @@ -9,10 +9,12 @@ from .....core.datetime_utils import serialize_datetime from .....core.http_response import AsyncHttpResponse, HttpResponse from .....core.jsonable_encoder import jsonable_encoder +from .....core.parse_error import ParsingError from .....core.request_options import RequestOptions from .....core.unchecked_base_model import construct_type from ...types.drive import Drive from ...types.paginated_drive_list import PaginatedDriveList +from pydantic import ValidationError class RawDrivesClient: @@ -112,6 +114,10 @@ def list( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) def retrieve( @@ -165,6 +171,10 @@ def retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) @@ -265,6 +275,10 @@ async def list( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) async def retrieve( @@ -318,4 +332,8 @@ async def retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) diff --git a/src/merge/resources/filestorage/resources/field_mapping/client.py b/src/merge/resources/filestorage/resources/field_mapping/client.py index 066088f9..962d1464 100644 --- a/src/merge/resources/filestorage/resources/field_mapping/client.py +++ b/src/merge/resources/filestorage/resources/field_mapping/client.py @@ -73,7 +73,7 @@ def field_mappings_create( *, target_field_name: str, target_field_description: str, - remote_field_traversal_path: typing.Sequence[typing.Optional[typing.Any]], + remote_field_traversal_path: typing.Sequence[typing.Any], remote_method: str, remote_url_path: str, common_model_name: str, @@ -93,7 +93,7 @@ def field_mappings_create( target_field_description : str The description of the target field you want this remote field to map to. - remote_field_traversal_path : typing.Sequence[typing.Optional[typing.Any]] + remote_field_traversal_path : typing.Sequence[typing.Any] The field traversal path of the remote field listed when you hit the GET /remote-fields endpoint. remote_method : str @@ -193,7 +193,7 @@ def field_mappings_partial_update( field_mapping_id: str, *, remote_data_iteration_count: typing.Optional[int] = None, - remote_field_traversal_path: typing.Optional[typing.Sequence[typing.Optional[typing.Any]]] = OMIT, + remote_field_traversal_path: typing.Optional[typing.Sequence[typing.Any]] = OMIT, remote_method: typing.Optional[str] = OMIT, remote_url_path: typing.Optional[str] = OMIT, jmes_path: typing.Optional[str] = OMIT, @@ -209,7 +209,7 @@ def field_mappings_partial_update( remote_data_iteration_count : typing.Optional[int] Number of common model instances to iterate through when fetching remote data for field mappings. Defaults to 250 if not provided. - remote_field_traversal_path : typing.Optional[typing.Sequence[typing.Optional[typing.Any]]] + remote_field_traversal_path : typing.Optional[typing.Sequence[typing.Any]] The field traversal path of the remote field listed when you hit the GET /remote-fields endpoint. remote_method : typing.Optional[str] @@ -394,7 +394,7 @@ async def field_mappings_create( *, target_field_name: str, target_field_description: str, - remote_field_traversal_path: typing.Sequence[typing.Optional[typing.Any]], + remote_field_traversal_path: typing.Sequence[typing.Any], remote_method: str, remote_url_path: str, common_model_name: str, @@ -414,7 +414,7 @@ async def field_mappings_create( target_field_description : str The description of the target field you want this remote field to map to. - remote_field_traversal_path : typing.Sequence[typing.Optional[typing.Any]] + remote_field_traversal_path : typing.Sequence[typing.Any] The field traversal path of the remote field listed when you hit the GET /remote-fields endpoint. remote_method : str @@ -530,7 +530,7 @@ async def field_mappings_partial_update( field_mapping_id: str, *, remote_data_iteration_count: typing.Optional[int] = None, - remote_field_traversal_path: typing.Optional[typing.Sequence[typing.Optional[typing.Any]]] = OMIT, + remote_field_traversal_path: typing.Optional[typing.Sequence[typing.Any]] = OMIT, remote_method: typing.Optional[str] = OMIT, remote_url_path: typing.Optional[str] = OMIT, jmes_path: typing.Optional[str] = OMIT, @@ -546,7 +546,7 @@ async def field_mappings_partial_update( remote_data_iteration_count : typing.Optional[int] Number of common model instances to iterate through when fetching remote data for field mappings. Defaults to 250 if not provided. - remote_field_traversal_path : typing.Optional[typing.Sequence[typing.Optional[typing.Any]]] + remote_field_traversal_path : typing.Optional[typing.Sequence[typing.Any]] The field traversal path of the remote field listed when you hit the GET /remote-fields endpoint. remote_method : typing.Optional[str] diff --git a/src/merge/resources/filestorage/resources/field_mapping/raw_client.py b/src/merge/resources/filestorage/resources/field_mapping/raw_client.py index 24a50dd7..9bcce9e8 100644 --- a/src/merge/resources/filestorage/resources/field_mapping/raw_client.py +++ b/src/merge/resources/filestorage/resources/field_mapping/raw_client.py @@ -7,12 +7,14 @@ from .....core.client_wrapper import AsyncClientWrapper, SyncClientWrapper from .....core.http_response import AsyncHttpResponse, HttpResponse from .....core.jsonable_encoder import jsonable_encoder +from .....core.parse_error import ParsingError from .....core.request_options import RequestOptions from .....core.unchecked_base_model import construct_type from ...types.external_target_field_api_response import ExternalTargetFieldApiResponse from ...types.field_mapping_api_instance_response import FieldMappingApiInstanceResponse from ...types.field_mapping_instance_response import FieldMappingInstanceResponse from ...types.remote_field_api_response import RemoteFieldApiResponse +from pydantic import ValidationError # this is used as the default value for optional parameters OMIT = typing.cast(typing.Any, ...) @@ -65,6 +67,10 @@ def field_mappings_retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) def field_mappings_create( @@ -72,7 +78,7 @@ def field_mappings_create( *, target_field_name: str, target_field_description: str, - remote_field_traversal_path: typing.Sequence[typing.Optional[typing.Any]], + remote_field_traversal_path: typing.Sequence[typing.Any], remote_method: str, remote_url_path: str, common_model_name: str, @@ -92,7 +98,7 @@ def field_mappings_create( target_field_description : str The description of the target field you want this remote field to map to. - remote_field_traversal_path : typing.Sequence[typing.Optional[typing.Any]] + remote_field_traversal_path : typing.Sequence[typing.Any] The field traversal path of the remote field listed when you hit the GET /remote-fields endpoint. remote_method : str @@ -156,6 +162,10 @@ def field_mappings_create( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) def field_mappings_destroy( @@ -194,6 +204,10 @@ def field_mappings_destroy( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) def field_mappings_partial_update( @@ -201,7 +215,7 @@ def field_mappings_partial_update( field_mapping_id: str, *, remote_data_iteration_count: typing.Optional[int] = None, - remote_field_traversal_path: typing.Optional[typing.Sequence[typing.Optional[typing.Any]]] = OMIT, + remote_field_traversal_path: typing.Optional[typing.Sequence[typing.Any]] = OMIT, remote_method: typing.Optional[str] = OMIT, remote_url_path: typing.Optional[str] = OMIT, jmes_path: typing.Optional[str] = OMIT, @@ -217,7 +231,7 @@ def field_mappings_partial_update( remote_data_iteration_count : typing.Optional[int] Number of common model instances to iterate through when fetching remote data for field mappings. Defaults to 250 if not provided. - remote_field_traversal_path : typing.Optional[typing.Sequence[typing.Optional[typing.Any]]] + remote_field_traversal_path : typing.Optional[typing.Sequence[typing.Any]] The field traversal path of the remote field listed when you hit the GET /remote-fields endpoint. remote_method : typing.Optional[str] @@ -268,6 +282,10 @@ def field_mappings_partial_update( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) def remote_fields_retrieve( @@ -318,6 +336,10 @@ def remote_fields_retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) def target_fields_retrieve( @@ -354,6 +376,10 @@ def target_fields_retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) @@ -404,6 +430,10 @@ async def field_mappings_retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) async def field_mappings_create( @@ -411,7 +441,7 @@ async def field_mappings_create( *, target_field_name: str, target_field_description: str, - remote_field_traversal_path: typing.Sequence[typing.Optional[typing.Any]], + remote_field_traversal_path: typing.Sequence[typing.Any], remote_method: str, remote_url_path: str, common_model_name: str, @@ -431,7 +461,7 @@ async def field_mappings_create( target_field_description : str The description of the target field you want this remote field to map to. - remote_field_traversal_path : typing.Sequence[typing.Optional[typing.Any]] + remote_field_traversal_path : typing.Sequence[typing.Any] The field traversal path of the remote field listed when you hit the GET /remote-fields endpoint. remote_method : str @@ -495,6 +525,10 @@ async def field_mappings_create( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) async def field_mappings_destroy( @@ -533,6 +567,10 @@ async def field_mappings_destroy( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) async def field_mappings_partial_update( @@ -540,7 +578,7 @@ async def field_mappings_partial_update( field_mapping_id: str, *, remote_data_iteration_count: typing.Optional[int] = None, - remote_field_traversal_path: typing.Optional[typing.Sequence[typing.Optional[typing.Any]]] = OMIT, + remote_field_traversal_path: typing.Optional[typing.Sequence[typing.Any]] = OMIT, remote_method: typing.Optional[str] = OMIT, remote_url_path: typing.Optional[str] = OMIT, jmes_path: typing.Optional[str] = OMIT, @@ -556,7 +594,7 @@ async def field_mappings_partial_update( remote_data_iteration_count : typing.Optional[int] Number of common model instances to iterate through when fetching remote data for field mappings. Defaults to 250 if not provided. - remote_field_traversal_path : typing.Optional[typing.Sequence[typing.Optional[typing.Any]]] + remote_field_traversal_path : typing.Optional[typing.Sequence[typing.Any]] The field traversal path of the remote field listed when you hit the GET /remote-fields endpoint. remote_method : typing.Optional[str] @@ -607,6 +645,10 @@ async def field_mappings_partial_update( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) async def remote_fields_retrieve( @@ -657,6 +699,10 @@ async def remote_fields_retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) async def target_fields_retrieve( @@ -693,4 +739,8 @@ async def target_fields_retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) diff --git a/src/merge/resources/filestorage/resources/files/__init__.py b/src/merge/resources/filestorage/resources/files/__init__.py index c3aa546f..7051713d 100644 --- a/src/merge/resources/filestorage/resources/files/__init__.py +++ b/src/merge/resources/filestorage/resources/files/__init__.py @@ -26,8 +26,10 @@ def __getattr__(attr_name: str) -> typing.Any: raise AttributeError(f"No {attr_name} found in _dynamic_imports for module name -> {__name__}") try: module = import_module(module_name, __package__) - result = getattr(module, attr_name) - return result + if module_name == f".{attr_name}": + return module + else: + return getattr(module, attr_name) except ImportError as e: raise ImportError(f"Failed to import {attr_name} from {module_name}: {e}") from e except AttributeError as e: diff --git a/src/merge/resources/filestorage/resources/files/raw_client.py b/src/merge/resources/filestorage/resources/files/raw_client.py index 42455ca6..7c94a745 100644 --- a/src/merge/resources/filestorage/resources/files/raw_client.py +++ b/src/merge/resources/filestorage/resources/files/raw_client.py @@ -10,6 +10,7 @@ from .....core.datetime_utils import serialize_datetime from .....core.http_response import AsyncHttpResponse, HttpResponse from .....core.jsonable_encoder import jsonable_encoder +from .....core.parse_error import ParsingError from .....core.request_options import RequestOptions from .....core.unchecked_base_model import construct_type from ...types.download_request_meta import DownloadRequestMeta @@ -23,6 +24,7 @@ from .types.files_list_request_expand_item import FilesListRequestExpandItem from .types.files_list_request_order_by import FilesListRequestOrderBy from .types.files_retrieve_request_expand_item import FilesRetrieveRequestExpandItem +from pydantic import ValidationError # this is used as the default value for optional parameters OMIT = typing.cast(typing.Any, ...) @@ -166,6 +168,10 @@ def list( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) def create( @@ -226,6 +232,10 @@ def create( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) def retrieve( @@ -286,6 +296,10 @@ def retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) @contextlib.contextmanager @@ -341,6 +355,13 @@ def _stream() -> HttpResponse[typing.Iterator[bytes]]: raise ApiError( status_code=_response.status_code, headers=dict(_response.headers), body=_response.text ) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, + headers=dict(_response.headers), + body=_response.json(), + cause=e, + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) yield _stream() @@ -391,6 +412,10 @@ def download_request_meta_retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) def download_request_meta_list( @@ -481,6 +506,10 @@ def download_request_meta_list( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) def meta_post_retrieve( @@ -517,6 +546,10 @@ def meta_post_retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) @@ -658,6 +691,10 @@ async def list( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) async def create( @@ -718,6 +755,10 @@ async def create( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) async def retrieve( @@ -778,6 +819,10 @@ async def retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) @contextlib.asynccontextmanager @@ -834,6 +879,13 @@ async def _stream() -> AsyncHttpResponse[typing.AsyncIterator[bytes]]: raise ApiError( status_code=_response.status_code, headers=dict(_response.headers), body=_response.text ) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, + headers=dict(_response.headers), + body=_response.json(), + cause=e, + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) yield await _stream() @@ -884,6 +936,10 @@ async def download_request_meta_retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) async def download_request_meta_list( @@ -974,6 +1030,10 @@ async def download_request_meta_list( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) async def meta_post_retrieve( @@ -1010,4 +1070,8 @@ async def meta_post_retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) diff --git a/src/merge/resources/filestorage/resources/files/types/__init__.py b/src/merge/resources/filestorage/resources/files/types/__init__.py index c0027796..816313c4 100644 --- a/src/merge/resources/filestorage/resources/files/types/__init__.py +++ b/src/merge/resources/filestorage/resources/files/types/__init__.py @@ -24,8 +24,10 @@ def __getattr__(attr_name: str) -> typing.Any: raise AttributeError(f"No {attr_name} found in _dynamic_imports for module name -> {__name__}") try: module = import_module(module_name, __package__) - result = getattr(module, attr_name) - return result + if module_name == f".{attr_name}": + return module + else: + return getattr(module, attr_name) except ImportError as e: raise ImportError(f"Failed to import {attr_name} from {module_name}: {e}") from e except AttributeError as e: diff --git a/src/merge/resources/filestorage/resources/files/types/files_download_request_meta_list_request_order_by.py b/src/merge/resources/filestorage/resources/files/types/files_download_request_meta_list_request_order_by.py index 68856c4d..d7bb3cdf 100644 --- a/src/merge/resources/filestorage/resources/files/types/files_download_request_meta_list_request_order_by.py +++ b/src/merge/resources/filestorage/resources/files/types/files_download_request_meta_list_request_order_by.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ......core import enum + T_Result = typing.TypeVar("T_Result") -class FilesDownloadRequestMetaListRequestOrderBy(str, enum.Enum): +class FilesDownloadRequestMetaListRequestOrderBy(enum.StrEnum): CREATED_AT_DESCENDING = "-created_at" MODIFIED_AT_DESCENDING = "-modified_at" CREATED_AT_ASCENDING = "created_at" diff --git a/src/merge/resources/filestorage/resources/files/types/files_list_request_expand_item.py b/src/merge/resources/filestorage/resources/files/types/files_list_request_expand_item.py index 70700994..83fc7716 100644 --- a/src/merge/resources/filestorage/resources/files/types/files_list_request_expand_item.py +++ b/src/merge/resources/filestorage/resources/files/types/files_list_request_expand_item.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ......core import enum + T_Result = typing.TypeVar("T_Result") -class FilesListRequestExpandItem(str, enum.Enum): +class FilesListRequestExpandItem(enum.StrEnum): DRIVE = "drive" FOLDER = "folder" PERMISSIONS = "permissions" diff --git a/src/merge/resources/filestorage/resources/files/types/files_list_request_order_by.py b/src/merge/resources/filestorage/resources/files/types/files_list_request_order_by.py index 1e585467..c4c80163 100644 --- a/src/merge/resources/filestorage/resources/files/types/files_list_request_order_by.py +++ b/src/merge/resources/filestorage/resources/files/types/files_list_request_order_by.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ......core import enum + T_Result = typing.TypeVar("T_Result") -class FilesListRequestOrderBy(str, enum.Enum): +class FilesListRequestOrderBy(enum.StrEnum): CREATED_AT_DESCENDING = "-created_at" MODIFIED_AT_DESCENDING = "-modified_at" CREATED_AT_ASCENDING = "created_at" diff --git a/src/merge/resources/filestorage/resources/files/types/files_retrieve_request_expand_item.py b/src/merge/resources/filestorage/resources/files/types/files_retrieve_request_expand_item.py index 1770d94e..cdc2579d 100644 --- a/src/merge/resources/filestorage/resources/files/types/files_retrieve_request_expand_item.py +++ b/src/merge/resources/filestorage/resources/files/types/files_retrieve_request_expand_item.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ......core import enum + T_Result = typing.TypeVar("T_Result") -class FilesRetrieveRequestExpandItem(str, enum.Enum): +class FilesRetrieveRequestExpandItem(enum.StrEnum): DRIVE = "drive" FOLDER = "folder" PERMISSIONS = "permissions" diff --git a/src/merge/resources/filestorage/resources/folders/__init__.py b/src/merge/resources/filestorage/resources/folders/__init__.py index b9307deb..f06c1413 100644 --- a/src/merge/resources/filestorage/resources/folders/__init__.py +++ b/src/merge/resources/filestorage/resources/folders/__init__.py @@ -19,8 +19,10 @@ def __getattr__(attr_name: str) -> typing.Any: raise AttributeError(f"No {attr_name} found in _dynamic_imports for module name -> {__name__}") try: module = import_module(module_name, __package__) - result = getattr(module, attr_name) - return result + if module_name == f".{attr_name}": + return module + else: + return getattr(module, attr_name) except ImportError as e: raise ImportError(f"Failed to import {attr_name} from {module_name}: {e}") from e except AttributeError as e: diff --git a/src/merge/resources/filestorage/resources/folders/raw_client.py b/src/merge/resources/filestorage/resources/folders/raw_client.py index 615264e5..c14daf42 100644 --- a/src/merge/resources/filestorage/resources/folders/raw_client.py +++ b/src/merge/resources/filestorage/resources/folders/raw_client.py @@ -9,6 +9,7 @@ from .....core.datetime_utils import serialize_datetime from .....core.http_response import AsyncHttpResponse, HttpResponse from .....core.jsonable_encoder import jsonable_encoder +from .....core.parse_error import ParsingError from .....core.request_options import RequestOptions from .....core.unchecked_base_model import construct_type from ...types.file_storage_folder_response import FileStorageFolderResponse @@ -18,6 +19,7 @@ from ...types.paginated_folder_list import PaginatedFolderList from .types.folders_list_request_expand_item import FoldersListRequestExpandItem from .types.folders_retrieve_request_expand_item import FoldersRetrieveRequestExpandItem +from pydantic import ValidationError # this is used as the default value for optional parameters OMIT = typing.cast(typing.Any, ...) @@ -137,6 +139,10 @@ def list( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) def create( @@ -197,6 +203,10 @@ def create( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) def retrieve( @@ -257,6 +267,10 @@ def retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) def meta_post_retrieve( @@ -293,6 +307,10 @@ def meta_post_retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) @@ -410,6 +428,10 @@ async def list( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) async def create( @@ -470,6 +492,10 @@ async def create( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) async def retrieve( @@ -530,6 +556,10 @@ async def retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) async def meta_post_retrieve( @@ -566,4 +596,8 @@ async def meta_post_retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) diff --git a/src/merge/resources/filestorage/resources/folders/types/__init__.py b/src/merge/resources/filestorage/resources/folders/types/__init__.py index 064c3b61..45f03559 100644 --- a/src/merge/resources/filestorage/resources/folders/types/__init__.py +++ b/src/merge/resources/filestorage/resources/folders/types/__init__.py @@ -20,8 +20,10 @@ def __getattr__(attr_name: str) -> typing.Any: raise AttributeError(f"No {attr_name} found in _dynamic_imports for module name -> {__name__}") try: module = import_module(module_name, __package__) - result = getattr(module, attr_name) - return result + if module_name == f".{attr_name}": + return module + else: + return getattr(module, attr_name) except ImportError as e: raise ImportError(f"Failed to import {attr_name} from {module_name}: {e}") from e except AttributeError as e: diff --git a/src/merge/resources/filestorage/resources/folders/types/folders_list_request_expand_item.py b/src/merge/resources/filestorage/resources/folders/types/folders_list_request_expand_item.py index 6a75787d..383dff4d 100644 --- a/src/merge/resources/filestorage/resources/folders/types/folders_list_request_expand_item.py +++ b/src/merge/resources/filestorage/resources/folders/types/folders_list_request_expand_item.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ......core import enum + T_Result = typing.TypeVar("T_Result") -class FoldersListRequestExpandItem(str, enum.Enum): +class FoldersListRequestExpandItem(enum.StrEnum): DRIVE = "drive" PARENT_FOLDER = "parent_folder" PERMISSIONS = "permissions" diff --git a/src/merge/resources/filestorage/resources/folders/types/folders_retrieve_request_expand_item.py b/src/merge/resources/filestorage/resources/folders/types/folders_retrieve_request_expand_item.py index f2486a45..d837c73e 100644 --- a/src/merge/resources/filestorage/resources/folders/types/folders_retrieve_request_expand_item.py +++ b/src/merge/resources/filestorage/resources/folders/types/folders_retrieve_request_expand_item.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ......core import enum + T_Result = typing.TypeVar("T_Result") -class FoldersRetrieveRequestExpandItem(str, enum.Enum): +class FoldersRetrieveRequestExpandItem(enum.StrEnum): DRIVE = "drive" PARENT_FOLDER = "parent_folder" PERMISSIONS = "permissions" diff --git a/src/merge/resources/filestorage/resources/force_resync/raw_client.py b/src/merge/resources/filestorage/resources/force_resync/raw_client.py index 31dc7d3a..321a8bff 100644 --- a/src/merge/resources/filestorage/resources/force_resync/raw_client.py +++ b/src/merge/resources/filestorage/resources/force_resync/raw_client.py @@ -6,9 +6,11 @@ from .....core.api_error import ApiError from .....core.client_wrapper import AsyncClientWrapper, SyncClientWrapper from .....core.http_response import AsyncHttpResponse, HttpResponse +from .....core.parse_error import ParsingError from .....core.request_options import RequestOptions from .....core.unchecked_base_model import construct_type from ...types.sync_status import SyncStatus +from pydantic import ValidationError class RawForceResyncClient: @@ -49,6 +51,10 @@ def sync_status_resync_create( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) @@ -90,4 +96,8 @@ async def sync_status_resync_create( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) diff --git a/src/merge/resources/filestorage/resources/generate_key/raw_client.py b/src/merge/resources/filestorage/resources/generate_key/raw_client.py index 3c418ce6..44302e82 100644 --- a/src/merge/resources/filestorage/resources/generate_key/raw_client.py +++ b/src/merge/resources/filestorage/resources/generate_key/raw_client.py @@ -6,9 +6,11 @@ from .....core.api_error import ApiError from .....core.client_wrapper import AsyncClientWrapper, SyncClientWrapper from .....core.http_response import AsyncHttpResponse, HttpResponse +from .....core.parse_error import ParsingError from .....core.request_options import RequestOptions from .....core.unchecked_base_model import construct_type from ...types.remote_key import RemoteKey +from pydantic import ValidationError # this is used as the default value for optional parameters OMIT = typing.cast(typing.Any, ...) @@ -60,6 +62,10 @@ def create(self, *, name: str, request_options: typing.Optional[RequestOptions] _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) @@ -111,4 +117,8 @@ async def create( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) diff --git a/src/merge/resources/filestorage/resources/groups/__init__.py b/src/merge/resources/filestorage/resources/groups/__init__.py index c42a8d2e..833b79cd 100644 --- a/src/merge/resources/filestorage/resources/groups/__init__.py +++ b/src/merge/resources/filestorage/resources/groups/__init__.py @@ -19,8 +19,10 @@ def __getattr__(attr_name: str) -> typing.Any: raise AttributeError(f"No {attr_name} found in _dynamic_imports for module name -> {__name__}") try: module = import_module(module_name, __package__) - result = getattr(module, attr_name) - return result + if module_name == f".{attr_name}": + return module + else: + return getattr(module, attr_name) except ImportError as e: raise ImportError(f"Failed to import {attr_name} from {module_name}: {e}") from e except AttributeError as e: diff --git a/src/merge/resources/filestorage/resources/groups/raw_client.py b/src/merge/resources/filestorage/resources/groups/raw_client.py index 6511f4da..cbe588c1 100644 --- a/src/merge/resources/filestorage/resources/groups/raw_client.py +++ b/src/merge/resources/filestorage/resources/groups/raw_client.py @@ -9,12 +9,14 @@ from .....core.datetime_utils import serialize_datetime from .....core.http_response import AsyncHttpResponse, HttpResponse from .....core.jsonable_encoder import jsonable_encoder +from .....core.parse_error import ParsingError from .....core.request_options import RequestOptions from .....core.unchecked_base_model import construct_type from ...types.group import Group from ...types.paginated_group_list import PaginatedGroupList from .types.groups_list_request_expand_item import GroupsListRequestExpandItem from .types.groups_retrieve_request_expand_item import GroupsRetrieveRequestExpandItem +from pydantic import ValidationError class RawGroupsClient: @@ -116,6 +118,10 @@ def list( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) def retrieve( @@ -176,6 +182,10 @@ def retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) @@ -278,6 +288,10 @@ async def list( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) async def retrieve( @@ -338,4 +352,8 @@ async def retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) diff --git a/src/merge/resources/filestorage/resources/groups/types/__init__.py b/src/merge/resources/filestorage/resources/groups/types/__init__.py index 9f5d7290..1ac662da 100644 --- a/src/merge/resources/filestorage/resources/groups/types/__init__.py +++ b/src/merge/resources/filestorage/resources/groups/types/__init__.py @@ -20,8 +20,10 @@ def __getattr__(attr_name: str) -> typing.Any: raise AttributeError(f"No {attr_name} found in _dynamic_imports for module name -> {__name__}") try: module = import_module(module_name, __package__) - result = getattr(module, attr_name) - return result + if module_name == f".{attr_name}": + return module + else: + return getattr(module, attr_name) except ImportError as e: raise ImportError(f"Failed to import {attr_name} from {module_name}: {e}") from e except AttributeError as e: diff --git a/src/merge/resources/filestorage/resources/groups/types/groups_list_request_expand_item.py b/src/merge/resources/filestorage/resources/groups/types/groups_list_request_expand_item.py index 7e74c3cc..b3402014 100644 --- a/src/merge/resources/filestorage/resources/groups/types/groups_list_request_expand_item.py +++ b/src/merge/resources/filestorage/resources/groups/types/groups_list_request_expand_item.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ......core import enum + T_Result = typing.TypeVar("T_Result") -class GroupsListRequestExpandItem(str, enum.Enum): +class GroupsListRequestExpandItem(enum.StrEnum): CHILD_GROUPS = "child_groups" USERS = "users" diff --git a/src/merge/resources/filestorage/resources/groups/types/groups_retrieve_request_expand_item.py b/src/merge/resources/filestorage/resources/groups/types/groups_retrieve_request_expand_item.py index 4843d494..2d5c0147 100644 --- a/src/merge/resources/filestorage/resources/groups/types/groups_retrieve_request_expand_item.py +++ b/src/merge/resources/filestorage/resources/groups/types/groups_retrieve_request_expand_item.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ......core import enum + T_Result = typing.TypeVar("T_Result") -class GroupsRetrieveRequestExpandItem(str, enum.Enum): +class GroupsRetrieveRequestExpandItem(enum.StrEnum): CHILD_GROUPS = "child_groups" USERS = "users" diff --git a/src/merge/resources/filestorage/resources/issues/__init__.py b/src/merge/resources/filestorage/resources/issues/__init__.py index 3ca1094b..45b33fe1 100644 --- a/src/merge/resources/filestorage/resources/issues/__init__.py +++ b/src/merge/resources/filestorage/resources/issues/__init__.py @@ -16,8 +16,10 @@ def __getattr__(attr_name: str) -> typing.Any: raise AttributeError(f"No {attr_name} found in _dynamic_imports for module name -> {__name__}") try: module = import_module(module_name, __package__) - result = getattr(module, attr_name) - return result + if module_name == f".{attr_name}": + return module + else: + return getattr(module, attr_name) except ImportError as e: raise ImportError(f"Failed to import {attr_name} from {module_name}: {e}") from e except AttributeError as e: diff --git a/src/merge/resources/filestorage/resources/issues/raw_client.py b/src/merge/resources/filestorage/resources/issues/raw_client.py index 35d516dd..ec119848 100644 --- a/src/merge/resources/filestorage/resources/issues/raw_client.py +++ b/src/merge/resources/filestorage/resources/issues/raw_client.py @@ -9,11 +9,13 @@ from .....core.datetime_utils import serialize_datetime from .....core.http_response import AsyncHttpResponse, HttpResponse from .....core.jsonable_encoder import jsonable_encoder +from .....core.parse_error import ParsingError from .....core.request_options import RequestOptions from .....core.unchecked_base_model import construct_type from ...types.issue import Issue from ...types.paginated_issue_list import PaginatedIssueList from .types.issues_list_request_status import IssuesListRequestStatus +from pydantic import ValidationError class RawIssuesClient: @@ -136,6 +138,10 @@ def list( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) def retrieve(self, id: str, *, request_options: typing.Optional[RequestOptions] = None) -> HttpResponse[Issue]: @@ -172,6 +178,10 @@ def retrieve(self, id: str, *, request_options: typing.Optional[RequestOptions] _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) @@ -295,6 +305,10 @@ async def list( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) async def retrieve( @@ -333,4 +347,8 @@ async def retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) diff --git a/src/merge/resources/filestorage/resources/issues/types/__init__.py b/src/merge/resources/filestorage/resources/issues/types/__init__.py index 88fbf977..5e097583 100644 --- a/src/merge/resources/filestorage/resources/issues/types/__init__.py +++ b/src/merge/resources/filestorage/resources/issues/types/__init__.py @@ -16,8 +16,10 @@ def __getattr__(attr_name: str) -> typing.Any: raise AttributeError(f"No {attr_name} found in _dynamic_imports for module name -> {__name__}") try: module = import_module(module_name, __package__) - result = getattr(module, attr_name) - return result + if module_name == f".{attr_name}": + return module + else: + return getattr(module, attr_name) except ImportError as e: raise ImportError(f"Failed to import {attr_name} from {module_name}: {e}") from e except AttributeError as e: diff --git a/src/merge/resources/filestorage/resources/issues/types/issues_list_request_status.py b/src/merge/resources/filestorage/resources/issues/types/issues_list_request_status.py index 2bd3521e..a61afdd0 100644 --- a/src/merge/resources/filestorage/resources/issues/types/issues_list_request_status.py +++ b/src/merge/resources/filestorage/resources/issues/types/issues_list_request_status.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ......core import enum + T_Result = typing.TypeVar("T_Result") -class IssuesListRequestStatus(str, enum.Enum): +class IssuesListRequestStatus(enum.StrEnum): ONGOING = "ONGOING" RESOLVED = "RESOLVED" diff --git a/src/merge/resources/filestorage/resources/link_token/client.py b/src/merge/resources/filestorage/resources/link_token/client.py index 30526e8f..1548eadf 100644 --- a/src/merge/resources/filestorage/resources/link_token/client.py +++ b/src/merge/resources/filestorage/resources/link_token/client.py @@ -47,7 +47,7 @@ def create( ] = OMIT, language: typing.Optional[LanguageEnum] = OMIT, are_syncs_disabled: typing.Optional[bool] = OMIT, - integration_specific_config: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = OMIT, + integration_specific_config: typing.Optional[typing.Dict[str, typing.Any]] = OMIT, request_options: typing.Optional[RequestOptions] = None, ) -> LinkToken: """ @@ -94,7 +94,7 @@ def create( are_syncs_disabled : typing.Optional[bool] The boolean that indicates whether initial, periodic, and force syncs will be disabled. - integration_specific_config : typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] + integration_specific_config : typing.Optional[typing.Dict[str, typing.Any]] A JSON object containing integration-specific configuration options. request_options : typing.Optional[RequestOptions] @@ -172,7 +172,7 @@ async def create( ] = OMIT, language: typing.Optional[LanguageEnum] = OMIT, are_syncs_disabled: typing.Optional[bool] = OMIT, - integration_specific_config: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = OMIT, + integration_specific_config: typing.Optional[typing.Dict[str, typing.Any]] = OMIT, request_options: typing.Optional[RequestOptions] = None, ) -> LinkToken: """ @@ -219,7 +219,7 @@ async def create( are_syncs_disabled : typing.Optional[bool] The boolean that indicates whether initial, periodic, and force syncs will be disabled. - integration_specific_config : typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] + integration_specific_config : typing.Optional[typing.Dict[str, typing.Any]] A JSON object containing integration-specific configuration options. request_options : typing.Optional[RequestOptions] diff --git a/src/merge/resources/filestorage/resources/link_token/raw_client.py b/src/merge/resources/filestorage/resources/link_token/raw_client.py index b84cefda..e6dd42c1 100644 --- a/src/merge/resources/filestorage/resources/link_token/raw_client.py +++ b/src/merge/resources/filestorage/resources/link_token/raw_client.py @@ -6,6 +6,7 @@ from .....core.api_error import ApiError from .....core.client_wrapper import AsyncClientWrapper, SyncClientWrapper from .....core.http_response import AsyncHttpResponse, HttpResponse +from .....core.parse_error import ParsingError from .....core.request_options import RequestOptions from .....core.unchecked_base_model import construct_type from ...types.categories_enum import CategoriesEnum @@ -13,6 +14,7 @@ from ...types.individual_common_model_scope_deserializer_request import IndividualCommonModelScopeDeserializerRequest from ...types.language_enum import LanguageEnum from ...types.link_token import LinkToken +from pydantic import ValidationError # this is used as the default value for optional parameters OMIT = typing.cast(typing.Any, ...) @@ -39,7 +41,7 @@ def create( ] = OMIT, language: typing.Optional[LanguageEnum] = OMIT, are_syncs_disabled: typing.Optional[bool] = OMIT, - integration_specific_config: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = OMIT, + integration_specific_config: typing.Optional[typing.Dict[str, typing.Any]] = OMIT, request_options: typing.Optional[RequestOptions] = None, ) -> HttpResponse[LinkToken]: """ @@ -86,7 +88,7 @@ def create( are_syncs_disabled : typing.Optional[bool] The boolean that indicates whether initial, periodic, and force syncs will be disabled. - integration_specific_config : typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] + integration_specific_config : typing.Optional[typing.Dict[str, typing.Any]] A JSON object containing integration-specific configuration options. request_options : typing.Optional[RequestOptions] @@ -134,6 +136,10 @@ def create( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) @@ -158,7 +164,7 @@ async def create( ] = OMIT, language: typing.Optional[LanguageEnum] = OMIT, are_syncs_disabled: typing.Optional[bool] = OMIT, - integration_specific_config: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = OMIT, + integration_specific_config: typing.Optional[typing.Dict[str, typing.Any]] = OMIT, request_options: typing.Optional[RequestOptions] = None, ) -> AsyncHttpResponse[LinkToken]: """ @@ -205,7 +211,7 @@ async def create( are_syncs_disabled : typing.Optional[bool] The boolean that indicates whether initial, periodic, and force syncs will be disabled. - integration_specific_config : typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] + integration_specific_config : typing.Optional[typing.Dict[str, typing.Any]] A JSON object containing integration-specific configuration options. request_options : typing.Optional[RequestOptions] @@ -253,4 +259,8 @@ async def create( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) diff --git a/src/merge/resources/filestorage/resources/linked_accounts/__init__.py b/src/merge/resources/filestorage/resources/linked_accounts/__init__.py index 0b9e42b4..12e213b7 100644 --- a/src/merge/resources/filestorage/resources/linked_accounts/__init__.py +++ b/src/merge/resources/filestorage/resources/linked_accounts/__init__.py @@ -16,8 +16,10 @@ def __getattr__(attr_name: str) -> typing.Any: raise AttributeError(f"No {attr_name} found in _dynamic_imports for module name -> {__name__}") try: module = import_module(module_name, __package__) - result = getattr(module, attr_name) - return result + if module_name == f".{attr_name}": + return module + else: + return getattr(module, attr_name) except ImportError as e: raise ImportError(f"Failed to import {attr_name} from {module_name}: {e}") from e except AttributeError as e: diff --git a/src/merge/resources/filestorage/resources/linked_accounts/raw_client.py b/src/merge/resources/filestorage/resources/linked_accounts/raw_client.py index d0e67c0f..b3fce544 100644 --- a/src/merge/resources/filestorage/resources/linked_accounts/raw_client.py +++ b/src/merge/resources/filestorage/resources/linked_accounts/raw_client.py @@ -6,10 +6,12 @@ from .....core.api_error import ApiError from .....core.client_wrapper import AsyncClientWrapper, SyncClientWrapper from .....core.http_response import AsyncHttpResponse, HttpResponse +from .....core.parse_error import ParsingError from .....core.request_options import RequestOptions from .....core.unchecked_base_model import construct_type from ...types.paginated_account_details_and_actions_list import PaginatedAccountDetailsAndActionsList from .types.linked_accounts_list_request_category import LinkedAccountsListRequestCategory +from pydantic import ValidationError class RawLinkedAccountsClient: @@ -126,6 +128,10 @@ def list( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) @@ -243,4 +249,8 @@ async def list( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) diff --git a/src/merge/resources/filestorage/resources/linked_accounts/types/__init__.py b/src/merge/resources/filestorage/resources/linked_accounts/types/__init__.py index a28f38cc..a884db6a 100644 --- a/src/merge/resources/filestorage/resources/linked_accounts/types/__init__.py +++ b/src/merge/resources/filestorage/resources/linked_accounts/types/__init__.py @@ -18,8 +18,10 @@ def __getattr__(attr_name: str) -> typing.Any: raise AttributeError(f"No {attr_name} found in _dynamic_imports for module name -> {__name__}") try: module = import_module(module_name, __package__) - result = getattr(module, attr_name) - return result + if module_name == f".{attr_name}": + return module + else: + return getattr(module, attr_name) except ImportError as e: raise ImportError(f"Failed to import {attr_name} from {module_name}: {e}") from e except AttributeError as e: diff --git a/src/merge/resources/filestorage/resources/linked_accounts/types/linked_accounts_list_request_category.py b/src/merge/resources/filestorage/resources/linked_accounts/types/linked_accounts_list_request_category.py index bd873ea8..ce04d1de 100644 --- a/src/merge/resources/filestorage/resources/linked_accounts/types/linked_accounts_list_request_category.py +++ b/src/merge/resources/filestorage/resources/linked_accounts/types/linked_accounts_list_request_category.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ......core import enum + T_Result = typing.TypeVar("T_Result") -class LinkedAccountsListRequestCategory(str, enum.Enum): +class LinkedAccountsListRequestCategory(enum.StrEnum): ACCOUNTING = "accounting" ATS = "ats" CRM = "crm" diff --git a/src/merge/resources/filestorage/resources/passthrough/raw_client.py b/src/merge/resources/filestorage/resources/passthrough/raw_client.py index adba71ba..fae3e726 100644 --- a/src/merge/resources/filestorage/resources/passthrough/raw_client.py +++ b/src/merge/resources/filestorage/resources/passthrough/raw_client.py @@ -6,10 +6,12 @@ from .....core.api_error import ApiError from .....core.client_wrapper import AsyncClientWrapper, SyncClientWrapper from .....core.http_response import AsyncHttpResponse, HttpResponse +from .....core.parse_error import ParsingError from .....core.request_options import RequestOptions from .....core.unchecked_base_model import construct_type from ...types.data_passthrough_request import DataPassthroughRequest from ...types.remote_response import RemoteResponse +from pydantic import ValidationError # this is used as the default value for optional parameters OMIT = typing.cast(typing.Any, ...) @@ -60,6 +62,10 @@ def create( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) @@ -108,4 +114,8 @@ async def create( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) diff --git a/src/merge/resources/filestorage/resources/regenerate_key/raw_client.py b/src/merge/resources/filestorage/resources/regenerate_key/raw_client.py index 5334d0d8..8297f6c4 100644 --- a/src/merge/resources/filestorage/resources/regenerate_key/raw_client.py +++ b/src/merge/resources/filestorage/resources/regenerate_key/raw_client.py @@ -6,9 +6,11 @@ from .....core.api_error import ApiError from .....core.client_wrapper import AsyncClientWrapper, SyncClientWrapper from .....core.http_response import AsyncHttpResponse, HttpResponse +from .....core.parse_error import ParsingError from .....core.request_options import RequestOptions from .....core.unchecked_base_model import construct_type from ...types.remote_key import RemoteKey +from pydantic import ValidationError # this is used as the default value for optional parameters OMIT = typing.cast(typing.Any, ...) @@ -60,6 +62,10 @@ def create(self, *, name: str, request_options: typing.Optional[RequestOptions] _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) @@ -111,4 +117,8 @@ async def create( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) diff --git a/src/merge/resources/filestorage/resources/scopes/raw_client.py b/src/merge/resources/filestorage/resources/scopes/raw_client.py index 1ee36dae..38e97165 100644 --- a/src/merge/resources/filestorage/resources/scopes/raw_client.py +++ b/src/merge/resources/filestorage/resources/scopes/raw_client.py @@ -6,10 +6,12 @@ from .....core.api_error import ApiError from .....core.client_wrapper import AsyncClientWrapper, SyncClientWrapper from .....core.http_response import AsyncHttpResponse, HttpResponse +from .....core.parse_error import ParsingError from .....core.request_options import RequestOptions from .....core.unchecked_base_model import construct_type from ...types.common_model_scope_api import CommonModelScopeApi from ...types.individual_common_model_scope_deserializer_request import IndividualCommonModelScopeDeserializerRequest +from pydantic import ValidationError # this is used as the default value for optional parameters OMIT = typing.cast(typing.Any, ...) @@ -53,6 +55,10 @@ def default_scopes_retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) def linked_account_scopes_retrieve( @@ -89,6 +95,10 @@ def linked_account_scopes_retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) def linked_account_scopes_create( @@ -138,6 +148,10 @@ def linked_account_scopes_create( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) @@ -179,6 +193,10 @@ async def default_scopes_retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) async def linked_account_scopes_retrieve( @@ -215,6 +233,10 @@ async def linked_account_scopes_retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) async def linked_account_scopes_create( @@ -264,4 +286,8 @@ async def linked_account_scopes_create( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) diff --git a/src/merge/resources/filestorage/resources/sync_status/raw_client.py b/src/merge/resources/filestorage/resources/sync_status/raw_client.py index 3766d9b1..ab373ab1 100644 --- a/src/merge/resources/filestorage/resources/sync_status/raw_client.py +++ b/src/merge/resources/filestorage/resources/sync_status/raw_client.py @@ -6,9 +6,11 @@ from .....core.api_error import ApiError from .....core.client_wrapper import AsyncClientWrapper, SyncClientWrapper from .....core.http_response import AsyncHttpResponse, HttpResponse +from .....core.parse_error import ParsingError from .....core.request_options import RequestOptions from .....core.unchecked_base_model import construct_type from ...types.paginated_sync_status_list import PaginatedSyncStatusList +from pydantic import ValidationError class RawSyncStatusClient: @@ -63,6 +65,10 @@ def list( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) @@ -118,4 +124,8 @@ async def list( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) diff --git a/src/merge/resources/filestorage/resources/users/raw_client.py b/src/merge/resources/filestorage/resources/users/raw_client.py index 87a36cf7..2907e2ed 100644 --- a/src/merge/resources/filestorage/resources/users/raw_client.py +++ b/src/merge/resources/filestorage/resources/users/raw_client.py @@ -9,10 +9,12 @@ from .....core.datetime_utils import serialize_datetime from .....core.http_response import AsyncHttpResponse, HttpResponse from .....core.jsonable_encoder import jsonable_encoder +from .....core.parse_error import ParsingError from .....core.request_options import RequestOptions from .....core.unchecked_base_model import construct_type from ...types.paginated_user_list import PaginatedUserList from ...types.user import User +from pydantic import ValidationError class RawUsersClient: @@ -117,6 +119,10 @@ def list( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) def retrieve( @@ -170,6 +176,10 @@ def retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) @@ -275,6 +285,10 @@ async def list( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) async def retrieve( @@ -328,4 +342,8 @@ async def retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) diff --git a/src/merge/resources/filestorage/resources/webhook_receivers/raw_client.py b/src/merge/resources/filestorage/resources/webhook_receivers/raw_client.py index b05128f6..2cbef3a3 100644 --- a/src/merge/resources/filestorage/resources/webhook_receivers/raw_client.py +++ b/src/merge/resources/filestorage/resources/webhook_receivers/raw_client.py @@ -6,9 +6,11 @@ from .....core.api_error import ApiError from .....core.client_wrapper import AsyncClientWrapper, SyncClientWrapper from .....core.http_response import AsyncHttpResponse, HttpResponse +from .....core.parse_error import ParsingError from .....core.request_options import RequestOptions from .....core.unchecked_base_model import construct_type from ...types.webhook_receiver import WebhookReceiver +from pydantic import ValidationError # this is used as the default value for optional parameters OMIT = typing.cast(typing.Any, ...) @@ -52,6 +54,10 @@ def list( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) def create( @@ -108,6 +114,10 @@ def create( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) @@ -149,6 +159,10 @@ async def list( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) async def create( @@ -205,4 +219,8 @@ async def create( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) diff --git a/src/merge/resources/filestorage/types/__init__.py b/src/merge/resources/filestorage/types/__init__.py index 129f24c9..7245d01c 100644 --- a/src/merge/resources/filestorage/types/__init__.py +++ b/src/merge/resources/filestorage/types/__init__.py @@ -262,8 +262,10 @@ def __getattr__(attr_name: str) -> typing.Any: raise AttributeError(f"No {attr_name} found in _dynamic_imports for module name -> {__name__}") try: module = import_module(module_name, __package__) - result = getattr(module, attr_name) - return result + if module_name == f".{attr_name}": + return module + else: + return getattr(module, attr_name) except ImportError as e: raise ImportError(f"Failed to import {attr_name} from {module_name}: {e}") from e except AttributeError as e: diff --git a/src/merge/resources/filestorage/types/account_details_and_actions.py b/src/merge/resources/filestorage/types/account_details_and_actions.py index 93c874ed..cbf29cb3 100644 --- a/src/merge/resources/filestorage/types/account_details_and_actions.py +++ b/src/merge/resources/filestorage/types/account_details_and_actions.py @@ -42,7 +42,7 @@ class AccountDetailsAndActions(UncheckedBaseModel): integration: typing.Optional[AccountDetailsAndActionsIntegration] = None account_type: str completed_at: dt.datetime - integration_specific_fields: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None + integration_specific_fields: typing.Optional[typing.Dict[str, typing.Any]] = None if IS_PYDANTIC_V2: model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2 diff --git a/src/merge/resources/filestorage/types/account_details_and_actions_status_enum.py b/src/merge/resources/filestorage/types/account_details_and_actions_status_enum.py index df37f582..b9ae9efc 100644 --- a/src/merge/resources/filestorage/types/account_details_and_actions_status_enum.py +++ b/src/merge/resources/filestorage/types/account_details_and_actions_status_enum.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ....core import enum + T_Result = typing.TypeVar("T_Result") -class AccountDetailsAndActionsStatusEnum(str, enum.Enum): +class AccountDetailsAndActionsStatusEnum(enum.StrEnum): """ * `COMPLETE` - COMPLETE * `INCOMPLETE` - INCOMPLETE diff --git a/src/merge/resources/filestorage/types/account_integration.py b/src/merge/resources/filestorage/types/account_integration.py index ef8b260d..7bc872ca 100644 --- a/src/merge/resources/filestorage/types/account_integration.py +++ b/src/merge/resources/filestorage/types/account_integration.py @@ -40,9 +40,7 @@ class AccountIntegration(UncheckedBaseModel): """ slug: typing.Optional[str] = None - api_endpoints_to_documentation_urls: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = ( - pydantic.Field(default=None) - ) + api_endpoints_to_documentation_urls: typing.Optional[typing.Dict[str, typing.Any]] = pydantic.Field(default=None) """ Mapping of API endpoints to documentation urls for support. Example: {'GET': [['/common-model-scopes', 'https://docs.merge.dev/accounting/common-model-scopes/#common_model_scopes_retrieve'],['/common-model-actions', 'https://docs.merge.dev/accounting/common-model-actions/#common_model_actions_retrieve']], 'POST': []} """ @@ -52,7 +50,7 @@ class AccountIntegration(UncheckedBaseModel): Setup guide URL for third party webhook creation. Exposed in Merge Docs. """ - category_beta_status: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = pydantic.Field(default=None) + category_beta_status: typing.Optional[typing.Dict[str, typing.Any]] = pydantic.Field(default=None) """ Category or categories this integration is in beta status for. """ diff --git a/src/merge/resources/filestorage/types/advanced_metadata.py b/src/merge/resources/filestorage/types/advanced_metadata.py index 60b5d072..aef64bb3 100644 --- a/src/merge/resources/filestorage/types/advanced_metadata.py +++ b/src/merge/resources/filestorage/types/advanced_metadata.py @@ -13,7 +13,7 @@ class AdvancedMetadata(UncheckedBaseModel): description: typing.Optional[str] = None is_required: typing.Optional[bool] = None is_custom: typing.Optional[bool] = None - field_choices: typing.Optional[typing.List[typing.Optional[typing.Any]]] = None + field_choices: typing.Optional[typing.List[typing.Any]] = None if IS_PYDANTIC_V2: model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2 diff --git a/src/merge/resources/filestorage/types/categories_enum.py b/src/merge/resources/filestorage/types/categories_enum.py index 3f2dc5a9..82308151 100644 --- a/src/merge/resources/filestorage/types/categories_enum.py +++ b/src/merge/resources/filestorage/types/categories_enum.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ....core import enum + T_Result = typing.TypeVar("T_Result") -class CategoriesEnum(str, enum.Enum): +class CategoriesEnum(enum.StrEnum): """ * `hris` - hris * `ats` - ats diff --git a/src/merge/resources/filestorage/types/category_enum.py b/src/merge/resources/filestorage/types/category_enum.py index d37e48f5..9a2fa8c7 100644 --- a/src/merge/resources/filestorage/types/category_enum.py +++ b/src/merge/resources/filestorage/types/category_enum.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ....core import enum + T_Result = typing.TypeVar("T_Result") -class CategoryEnum(str, enum.Enum): +class CategoryEnum(enum.StrEnum): """ * `hris` - hris * `ats` - ats diff --git a/src/merge/resources/filestorage/types/data_passthrough_request.py b/src/merge/resources/filestorage/types/data_passthrough_request.py index c9f0a799..df3af029 100644 --- a/src/merge/resources/filestorage/types/data_passthrough_request.py +++ b/src/merge/resources/filestorage/types/data_passthrough_request.py @@ -41,7 +41,7 @@ class DataPassthroughRequest(UncheckedBaseModel): Pass an array of `MultipartFormField` objects in here instead of using the `data` param if `request_format` is set to `MULTIPART`. """ - headers: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = pydantic.Field(default=None) + headers: typing.Optional[typing.Dict[str, typing.Any]] = pydantic.Field(default=None) """ The headers to use for the request (Merge will handle the account's authorization headers). `Content-Type` header is required for passthrough. Choose content type corresponding to expected format of receiving server. """ diff --git a/src/merge/resources/filestorage/types/download_request_meta.py b/src/merge/resources/filestorage/types/download_request_meta.py index 18180e9a..bc3c0d56 100644 --- a/src/merge/resources/filestorage/types/download_request_meta.py +++ b/src/merge/resources/filestorage/types/download_request_meta.py @@ -11,7 +11,7 @@ class DownloadRequestMeta(UncheckedBaseModel): id: str url: str method: str - headers: typing.Dict[str, typing.Optional[typing.Any]] + headers: typing.Dict[str, typing.Any] if IS_PYDANTIC_V2: model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2 diff --git a/src/merge/resources/filestorage/types/drive.py b/src/merge/resources/filestorage/types/drive.py index 50a5f2bf..b0db5265 100644 --- a/src/merge/resources/filestorage/types/drive.py +++ b/src/merge/resources/filestorage/types/drive.py @@ -54,7 +54,7 @@ class Drive(UncheckedBaseModel): Indicates whether or not this object has been deleted in the third party platform. Full coverage deletion detection is a premium add-on. Native deletion detection is offered for free with limited coverage. [Learn more](https://docs.merge.dev/integrations/hris/supported-features/). """ - field_mappings: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None + field_mappings: typing.Optional[typing.Dict[str, typing.Any]] = None remote_data: typing.Optional[typing.List[RemoteData]] = None if IS_PYDANTIC_V2: diff --git a/src/merge/resources/filestorage/types/enabled_actions_enum.py b/src/merge/resources/filestorage/types/enabled_actions_enum.py index 29cf9839..604265f8 100644 --- a/src/merge/resources/filestorage/types/enabled_actions_enum.py +++ b/src/merge/resources/filestorage/types/enabled_actions_enum.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ....core import enum + T_Result = typing.TypeVar("T_Result") -class EnabledActionsEnum(str, enum.Enum): +class EnabledActionsEnum(enum.StrEnum): """ * `READ` - READ * `WRITE` - WRITE diff --git a/src/merge/resources/filestorage/types/encoding_enum.py b/src/merge/resources/filestorage/types/encoding_enum.py index 7454647e..aa2aa971 100644 --- a/src/merge/resources/filestorage/types/encoding_enum.py +++ b/src/merge/resources/filestorage/types/encoding_enum.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ....core import enum + T_Result = typing.TypeVar("T_Result") -class EncodingEnum(str, enum.Enum): +class EncodingEnum(enum.StrEnum): """ * `RAW` - RAW * `BASE64` - BASE64 diff --git a/src/merge/resources/filestorage/types/event_type_enum.py b/src/merge/resources/filestorage/types/event_type_enum.py index 537cea3f..1c16772d 100644 --- a/src/merge/resources/filestorage/types/event_type_enum.py +++ b/src/merge/resources/filestorage/types/event_type_enum.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ....core import enum + T_Result = typing.TypeVar("T_Result") -class EventTypeEnum(str, enum.Enum): +class EventTypeEnum(enum.StrEnum): """ * `CREATED_REMOTE_PRODUCTION_API_KEY` - CREATED_REMOTE_PRODUCTION_API_KEY * `DELETED_REMOTE_PRODUCTION_API_KEY` - DELETED_REMOTE_PRODUCTION_API_KEY diff --git a/src/merge/resources/filestorage/types/external_target_field_api_response.py b/src/merge/resources/filestorage/types/external_target_field_api_response.py index 9a153105..349ab811 100644 --- a/src/merge/resources/filestorage/types/external_target_field_api_response.py +++ b/src/merge/resources/filestorage/types/external_target_field_api_response.py @@ -3,17 +3,35 @@ import typing import pydantic +import typing_extensions from ....core.pydantic_utilities import IS_PYDANTIC_V2 +from ....core.serialization import FieldMetadata from ....core.unchecked_base_model import UncheckedBaseModel from .external_target_field_api import ExternalTargetFieldApi class ExternalTargetFieldApiResponse(UncheckedBaseModel): - file: typing.Optional[typing.List[ExternalTargetFieldApi]] = pydantic.Field(alias="File", default=None) - folder: typing.Optional[typing.List[ExternalTargetFieldApi]] = pydantic.Field(alias="Folder", default=None) - drive: typing.Optional[typing.List[ExternalTargetFieldApi]] = pydantic.Field(alias="Drive", default=None) - group: typing.Optional[typing.List[ExternalTargetFieldApi]] = pydantic.Field(alias="Group", default=None) - user: typing.Optional[typing.List[ExternalTargetFieldApi]] = pydantic.Field(alias="User", default=None) + file: typing_extensions.Annotated[ + typing.Optional[typing.List[ExternalTargetFieldApi]], FieldMetadata(alias="File"), pydantic.Field(alias="File") + ] = None + folder: typing_extensions.Annotated[ + typing.Optional[typing.List[ExternalTargetFieldApi]], + FieldMetadata(alias="Folder"), + pydantic.Field(alias="Folder"), + ] = None + drive: typing_extensions.Annotated[ + typing.Optional[typing.List[ExternalTargetFieldApi]], + FieldMetadata(alias="Drive"), + pydantic.Field(alias="Drive"), + ] = None + group: typing_extensions.Annotated[ + typing.Optional[typing.List[ExternalTargetFieldApi]], + FieldMetadata(alias="Group"), + pydantic.Field(alias="Group"), + ] = None + user: typing_extensions.Annotated[ + typing.Optional[typing.List[ExternalTargetFieldApi]], FieldMetadata(alias="User"), pydantic.Field(alias="User") + ] = None if IS_PYDANTIC_V2: model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2 diff --git a/src/merge/resources/filestorage/types/field_mapping_api_instance_remote_field.py b/src/merge/resources/filestorage/types/field_mapping_api_instance_remote_field.py index 578a2b10..ccd1f990 100644 --- a/src/merge/resources/filestorage/types/field_mapping_api_instance_remote_field.py +++ b/src/merge/resources/filestorage/types/field_mapping_api_instance_remote_field.py @@ -3,7 +3,9 @@ import typing import pydantic +import typing_extensions from ....core.pydantic_utilities import IS_PYDANTIC_V2 +from ....core.serialization import FieldMetadata from ....core.unchecked_base_model import UncheckedBaseModel from .field_mapping_api_instance_remote_field_remote_endpoint_info import ( FieldMappingApiInstanceRemoteFieldRemoteEndpointInfo, @@ -12,9 +14,9 @@ class FieldMappingApiInstanceRemoteField(UncheckedBaseModel): remote_key_name: typing.Optional[str] = None - schema_: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = pydantic.Field( - alias="schema", default=None - ) + schema_: typing_extensions.Annotated[ + typing.Optional[typing.Dict[str, typing.Any]], FieldMetadata(alias="schema"), pydantic.Field(alias="schema") + ] = None remote_endpoint_info: FieldMappingApiInstanceRemoteFieldRemoteEndpointInfo if IS_PYDANTIC_V2: diff --git a/src/merge/resources/filestorage/types/field_mapping_api_instance_response.py b/src/merge/resources/filestorage/types/field_mapping_api_instance_response.py index d4df587b..52eb9cd2 100644 --- a/src/merge/resources/filestorage/types/field_mapping_api_instance_response.py +++ b/src/merge/resources/filestorage/types/field_mapping_api_instance_response.py @@ -3,17 +3,35 @@ import typing import pydantic +import typing_extensions from ....core.pydantic_utilities import IS_PYDANTIC_V2 +from ....core.serialization import FieldMetadata from ....core.unchecked_base_model import UncheckedBaseModel from .field_mapping_api_instance import FieldMappingApiInstance class FieldMappingApiInstanceResponse(UncheckedBaseModel): - file: typing.Optional[typing.List[FieldMappingApiInstance]] = pydantic.Field(alias="File", default=None) - folder: typing.Optional[typing.List[FieldMappingApiInstance]] = pydantic.Field(alias="Folder", default=None) - drive: typing.Optional[typing.List[FieldMappingApiInstance]] = pydantic.Field(alias="Drive", default=None) - group: typing.Optional[typing.List[FieldMappingApiInstance]] = pydantic.Field(alias="Group", default=None) - user: typing.Optional[typing.List[FieldMappingApiInstance]] = pydantic.Field(alias="User", default=None) + file: typing_extensions.Annotated[ + typing.Optional[typing.List[FieldMappingApiInstance]], FieldMetadata(alias="File"), pydantic.Field(alias="File") + ] = None + folder: typing_extensions.Annotated[ + typing.Optional[typing.List[FieldMappingApiInstance]], + FieldMetadata(alias="Folder"), + pydantic.Field(alias="Folder"), + ] = None + drive: typing_extensions.Annotated[ + typing.Optional[typing.List[FieldMappingApiInstance]], + FieldMetadata(alias="Drive"), + pydantic.Field(alias="Drive"), + ] = None + group: typing_extensions.Annotated[ + typing.Optional[typing.List[FieldMappingApiInstance]], + FieldMetadata(alias="Group"), + pydantic.Field(alias="Group"), + ] = None + user: typing_extensions.Annotated[ + typing.Optional[typing.List[FieldMappingApiInstance]], FieldMetadata(alias="User"), pydantic.Field(alias="User") + ] = None if IS_PYDANTIC_V2: model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2 diff --git a/src/merge/resources/filestorage/types/field_permission_deserializer.py b/src/merge/resources/filestorage/types/field_permission_deserializer.py index 1d71ae04..407ed547 100644 --- a/src/merge/resources/filestorage/types/field_permission_deserializer.py +++ b/src/merge/resources/filestorage/types/field_permission_deserializer.py @@ -8,8 +8,8 @@ class FieldPermissionDeserializer(UncheckedBaseModel): - enabled_fields: typing.Optional[typing.List[typing.Optional[typing.Any]]] = None - disabled_fields: typing.Optional[typing.List[typing.Optional[typing.Any]]] = None + enabled_fields: typing.Optional[typing.List[typing.Any]] = None + disabled_fields: typing.Optional[typing.List[typing.Any]] = None if IS_PYDANTIC_V2: model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2 diff --git a/src/merge/resources/filestorage/types/field_permission_deserializer_request.py b/src/merge/resources/filestorage/types/field_permission_deserializer_request.py index a4113b46..6680c7d2 100644 --- a/src/merge/resources/filestorage/types/field_permission_deserializer_request.py +++ b/src/merge/resources/filestorage/types/field_permission_deserializer_request.py @@ -8,8 +8,8 @@ class FieldPermissionDeserializerRequest(UncheckedBaseModel): - enabled_fields: typing.Optional[typing.List[typing.Optional[typing.Any]]] = None - disabled_fields: typing.Optional[typing.List[typing.Optional[typing.Any]]] = None + enabled_fields: typing.Optional[typing.List[typing.Any]] = None + disabled_fields: typing.Optional[typing.List[typing.Any]] = None if IS_PYDANTIC_V2: model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2 diff --git a/src/merge/resources/filestorage/types/file.py b/src/merge/resources/filestorage/types/file.py index 72c8e9e1..b7d8ba95 100644 --- a/src/merge/resources/filestorage/types/file.py +++ b/src/merge/resources/filestorage/types/file.py @@ -74,7 +74,7 @@ class File(UncheckedBaseModel): The folder that the file belongs to. """ - checksum: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = pydantic.Field(default=None) + checksum: typing.Optional[typing.Dict[str, typing.Any]] = pydantic.Field(default=None) """ This field stores file checksum data. 'type' indicates the algorithm (e.g. crc_32, sha1, sha256, quickXor, or md5), and 'content_hash' is the unique hash used to verify file integrity and detect alterations. """ @@ -104,7 +104,7 @@ class File(UncheckedBaseModel): Indicates whether or not this object has been deleted in the third party platform. Full coverage deletion detection is a premium add-on. Native deletion detection is offered for free with limited coverage. [Learn more](https://docs.merge.dev/integrations/hris/supported-features/). """ - field_mappings: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None + field_mappings: typing.Optional[typing.Dict[str, typing.Any]] = None remote_data: typing.Optional[typing.List[RemoteData]] = None if IS_PYDANTIC_V2: @@ -117,7 +117,4 @@ class Config: extra = pydantic.Extra.allow -from .folder import Folder # noqa: E402, F401, I001 -from .group import Group # noqa: E402, F401, I001 - update_forward_refs(File) diff --git a/src/merge/resources/filestorage/types/file_request.py b/src/merge/resources/filestorage/types/file_request.py index 6ede10ef..6bdd958e 100644 --- a/src/merge/resources/filestorage/types/file_request.py +++ b/src/merge/resources/filestorage/types/file_request.py @@ -56,7 +56,7 @@ class FileRequest(UncheckedBaseModel): The folder that the file belongs to. """ - checksum: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = pydantic.Field(default=None) + checksum: typing.Optional[typing.Dict[str, typing.Any]] = pydantic.Field(default=None) """ This field stores file checksum data. 'type' indicates the algorithm (e.g. crc_32, sha1, sha256, quickXor, or md5), and 'content_hash' is the unique hash used to verify file integrity and detect alterations. """ @@ -71,8 +71,8 @@ class FileRequest(UncheckedBaseModel): The drive that the file belongs to. """ - integration_params: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None - linked_account_params: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None + integration_params: typing.Optional[typing.Dict[str, typing.Any]] = None + linked_account_params: typing.Optional[typing.Dict[str, typing.Any]] = None if IS_PYDANTIC_V2: model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2 @@ -84,7 +84,4 @@ class Config: extra = pydantic.Extra.allow -from .folder import Folder # noqa: E402, F401, I001 -from .group import Group # noqa: E402, F401, I001 - update_forward_refs(FileRequest) diff --git a/src/merge/resources/filestorage/types/file_storage_file_response.py b/src/merge/resources/filestorage/types/file_storage_file_response.py index d3b3337b..55326cf8 100644 --- a/src/merge/resources/filestorage/types/file_storage_file_response.py +++ b/src/merge/resources/filestorage/types/file_storage_file_response.py @@ -29,7 +29,4 @@ class Config: extra = pydantic.Extra.allow -from .folder import Folder # noqa: E402, F401, I001 -from .group import Group # noqa: E402, F401, I001 - update_forward_refs(FileStorageFileResponse) diff --git a/src/merge/resources/filestorage/types/file_storage_folder_response.py b/src/merge/resources/filestorage/types/file_storage_folder_response.py index d0a65d91..bc34de32 100644 --- a/src/merge/resources/filestorage/types/file_storage_folder_response.py +++ b/src/merge/resources/filestorage/types/file_storage_folder_response.py @@ -28,7 +28,7 @@ class Config: extra = pydantic.Extra.allow -from .folder import Folder # noqa: E402, F401, I001 -from .group import Group # noqa: E402, F401, I001 +from .folder import Folder # noqa: E402, I001 +from .folder_parent_folder import FolderParentFolder # noqa: E402, I001 -update_forward_refs(FileStorageFolderResponse) +update_forward_refs(FileStorageFolderResponse, Folder=Folder, FolderParentFolder=FolderParentFolder) diff --git a/src/merge/resources/filestorage/types/folder.py b/src/merge/resources/filestorage/types/folder.py index 572a0a9d..472b461f 100644 --- a/src/merge/resources/filestorage/types/folder.py +++ b/src/merge/resources/filestorage/types/folder.py @@ -88,7 +88,7 @@ class Folder(UncheckedBaseModel): Indicates whether or not this object has been deleted in the third party platform. Full coverage deletion detection is a premium add-on. Native deletion detection is offered for free with limited coverage. [Learn more](https://docs.merge.dev/integrations/hris/supported-features/). """ - field_mappings: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None + field_mappings: typing.Optional[typing.Dict[str, typing.Any]] = None remote_data: typing.Optional[typing.List[RemoteData]] = None if IS_PYDANTIC_V2: @@ -101,7 +101,6 @@ class Config: extra = pydantic.Extra.allow -from .group import Group # noqa: E402, F401, I001 -from .folder_parent_folder import FolderParentFolder # noqa: E402, F401, I001 +from .folder_parent_folder import FolderParentFolder # noqa: E402, I001 -update_forward_refs(Folder) +update_forward_refs(Folder, FolderParentFolder=FolderParentFolder) diff --git a/src/merge/resources/filestorage/types/folder_request.py b/src/merge/resources/filestorage/types/folder_request.py index f703ed7f..5ef29b8f 100644 --- a/src/merge/resources/filestorage/types/folder_request.py +++ b/src/merge/resources/filestorage/types/folder_request.py @@ -56,8 +56,8 @@ class FolderRequest(UncheckedBaseModel): The Permission object is used to represent a user's or group's access to a File or Folder. Permissions are unexpanded by default. Use the query param `expand=permissions` to see more details under `GET /folders`. """ - integration_params: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None - linked_account_params: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None + integration_params: typing.Optional[typing.Dict[str, typing.Any]] = None + linked_account_params: typing.Optional[typing.Dict[str, typing.Any]] = None if IS_PYDANTIC_V2: model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2 @@ -69,7 +69,4 @@ class Config: extra = pydantic.Extra.allow -from .folder import Folder # noqa: E402, F401, I001 -from .group import Group # noqa: E402, F401, I001 - update_forward_refs(FolderRequest) diff --git a/src/merge/resources/filestorage/types/group.py b/src/merge/resources/filestorage/types/group.py index 87046883..f4a07a91 100644 --- a/src/merge/resources/filestorage/types/group.py +++ b/src/merge/resources/filestorage/types/group.py @@ -57,7 +57,7 @@ class Group(UncheckedBaseModel): Indicates whether or not this object has been deleted in the third party platform. Full coverage deletion detection is a premium add-on. Native deletion detection is offered for free with limited coverage. [Learn more](https://docs.merge.dev/integrations/hris/supported-features/). """ - field_mappings: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None + field_mappings: typing.Optional[typing.Dict[str, typing.Any]] = None remote_data: typing.Optional[typing.List[RemoteData]] = None if IS_PYDANTIC_V2: @@ -70,6 +70,6 @@ class Config: extra = pydantic.Extra.allow -from .group_child_groups_item import GroupChildGroupsItem # noqa: E402, F401, I001 +from .group_child_groups_item import GroupChildGroupsItem # noqa: E402, I001 -update_forward_refs(Group) +update_forward_refs(Group, GroupChildGroupsItem=GroupChildGroupsItem) diff --git a/src/merge/resources/filestorage/types/issue.py b/src/merge/resources/filestorage/types/issue.py index df31be95..5d37505d 100644 --- a/src/merge/resources/filestorage/types/issue.py +++ b/src/merge/resources/filestorage/types/issue.py @@ -20,7 +20,7 @@ class Issue(UncheckedBaseModel): """ error_description: str - end_user: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None + end_user: typing.Optional[typing.Dict[str, typing.Any]] = None first_incident_time: typing.Optional[dt.datetime] = None last_incident_time: typing.Optional[dt.datetime] = None is_muted: typing.Optional[bool] = None diff --git a/src/merge/resources/filestorage/types/issue_status_enum.py b/src/merge/resources/filestorage/types/issue_status_enum.py index 57eb9618..30d126bb 100644 --- a/src/merge/resources/filestorage/types/issue_status_enum.py +++ b/src/merge/resources/filestorage/types/issue_status_enum.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ....core import enum + T_Result = typing.TypeVar("T_Result") -class IssueStatusEnum(str, enum.Enum): +class IssueStatusEnum(enum.StrEnum): """ * `ONGOING` - ONGOING * `RESOLVED` - RESOLVED diff --git a/src/merge/resources/filestorage/types/language_enum.py b/src/merge/resources/filestorage/types/language_enum.py index 44b693f2..3ff1e9da 100644 --- a/src/merge/resources/filestorage/types/language_enum.py +++ b/src/merge/resources/filestorage/types/language_enum.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ....core import enum + T_Result = typing.TypeVar("T_Result") -class LanguageEnum(str, enum.Enum): +class LanguageEnum(enum.StrEnum): """ * `en` - en * `de` - de diff --git a/src/merge/resources/filestorage/types/last_sync_result_enum.py b/src/merge/resources/filestorage/types/last_sync_result_enum.py index ec777ee6..f82505a1 100644 --- a/src/merge/resources/filestorage/types/last_sync_result_enum.py +++ b/src/merge/resources/filestorage/types/last_sync_result_enum.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ....core import enum + T_Result = typing.TypeVar("T_Result") -class LastSyncResultEnum(str, enum.Enum): +class LastSyncResultEnum(enum.StrEnum): """ * `SYNCING` - SYNCING * `DONE` - DONE diff --git a/src/merge/resources/filestorage/types/meta_response.py b/src/merge/resources/filestorage/types/meta_response.py index caa2c831..0da37619 100644 --- a/src/merge/resources/filestorage/types/meta_response.py +++ b/src/merge/resources/filestorage/types/meta_response.py @@ -9,8 +9,8 @@ class MetaResponse(UncheckedBaseModel): - request_schema: typing.Dict[str, typing.Optional[typing.Any]] - remote_field_classes: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None + request_schema: typing.Dict[str, typing.Any] + remote_field_classes: typing.Optional[typing.Dict[str, typing.Any]] = None status: typing.Optional[LinkedAccountStatus] = None has_conditional_params: bool has_required_linked_account_params: bool diff --git a/src/merge/resources/filestorage/types/method_enum.py b/src/merge/resources/filestorage/types/method_enum.py index 57bcde10..4c8376dd 100644 --- a/src/merge/resources/filestorage/types/method_enum.py +++ b/src/merge/resources/filestorage/types/method_enum.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ....core import enum + T_Result = typing.TypeVar("T_Result") -class MethodEnum(str, enum.Enum): +class MethodEnum(enum.StrEnum): """ * `GET` - GET * `OPTIONS` - OPTIONS diff --git a/src/merge/resources/filestorage/types/paginated_file_list.py b/src/merge/resources/filestorage/types/paginated_file_list.py index e3daeb68..17787846 100644 --- a/src/merge/resources/filestorage/types/paginated_file_list.py +++ b/src/merge/resources/filestorage/types/paginated_file_list.py @@ -25,7 +25,4 @@ class Config: extra = pydantic.Extra.allow -from .folder import Folder # noqa: E402, F401, I001 -from .group import Group # noqa: E402, F401, I001 - update_forward_refs(PaginatedFileList) diff --git a/src/merge/resources/filestorage/types/paginated_folder_list.py b/src/merge/resources/filestorage/types/paginated_folder_list.py index 87477c83..c802dd23 100644 --- a/src/merge/resources/filestorage/types/paginated_folder_list.py +++ b/src/merge/resources/filestorage/types/paginated_folder_list.py @@ -24,7 +24,7 @@ class Config: extra = pydantic.Extra.allow -from .folder import Folder # noqa: E402, F401, I001 -from .group import Group # noqa: E402, F401, I001 +from .folder import Folder # noqa: E402, I001 +from .folder_parent_folder import FolderParentFolder # noqa: E402, I001 -update_forward_refs(PaginatedFolderList) +update_forward_refs(PaginatedFolderList, Folder=Folder, FolderParentFolder=FolderParentFolder) diff --git a/src/merge/resources/filestorage/types/paginated_group_list.py b/src/merge/resources/filestorage/types/paginated_group_list.py index ddbf97b2..8ead4b5e 100644 --- a/src/merge/resources/filestorage/types/paginated_group_list.py +++ b/src/merge/resources/filestorage/types/paginated_group_list.py @@ -24,6 +24,7 @@ class Config: extra = pydantic.Extra.allow -from .group import Group # noqa: E402, F401, I001 +from .group import Group # noqa: E402, I001 +from .group_child_groups_item import GroupChildGroupsItem # noqa: E402, I001 -update_forward_refs(PaginatedGroupList) +update_forward_refs(PaginatedGroupList, Group=Group, GroupChildGroupsItem=GroupChildGroupsItem) diff --git a/src/merge/resources/filestorage/types/permission.py b/src/merge/resources/filestorage/types/permission.py index 954f589f..65426e6e 100644 --- a/src/merge/resources/filestorage/types/permission.py +++ b/src/merge/resources/filestorage/types/permission.py @@ -70,7 +70,7 @@ class Permission(UncheckedBaseModel): Indicates whether or not this object has been deleted in the third party platform. Full coverage deletion detection is a premium add-on. Native deletion detection is offered for free with limited coverage. [Learn more](https://docs.merge.dev/integrations/hris/supported-features/). """ - field_mappings: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None + field_mappings: typing.Optional[typing.Dict[str, typing.Any]] = None if IS_PYDANTIC_V2: model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2 @@ -82,6 +82,4 @@ class Config: extra = pydantic.Extra.allow -from .group import Group # noqa: E402, F401, I001 - update_forward_refs(Permission) diff --git a/src/merge/resources/filestorage/types/permission_request.py b/src/merge/resources/filestorage/types/permission_request.py index 0187dd60..59c0beb8 100644 --- a/src/merge/resources/filestorage/types/permission_request.py +++ b/src/merge/resources/filestorage/types/permission_request.py @@ -53,8 +53,8 @@ class PermissionRequest(UncheckedBaseModel): The permissions that the user or group has for the File or Folder. It is possible for a user or group to have multiple roles, such as viewing & uploading. Possible values include: `READ`, `WRITE`, `OWNER`. In cases where there is no clear mapping, the original value passed through will be returned. """ - integration_params: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None - linked_account_params: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None + integration_params: typing.Optional[typing.Dict[str, typing.Any]] = None + linked_account_params: typing.Optional[typing.Dict[str, typing.Any]] = None if IS_PYDANTIC_V2: model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2 @@ -66,6 +66,4 @@ class Config: extra = pydantic.Extra.allow -from .group import Group # noqa: E402, F401, I001 - update_forward_refs(PermissionRequest) diff --git a/src/merge/resources/filestorage/types/remote_data.py b/src/merge/resources/filestorage/types/remote_data.py index f34bec80..2026f05a 100644 --- a/src/merge/resources/filestorage/types/remote_data.py +++ b/src/merge/resources/filestorage/types/remote_data.py @@ -22,7 +22,7 @@ class RemoteData(UncheckedBaseModel): The third-party API path that is being called. """ - data: typing.Optional[typing.Optional[typing.Any]] = pydantic.Field(default=None) + data: typing.Optional[typing.Any] = pydantic.Field(default=None) """ The data returned from the third-party for this object in its original, unnormalized format. """ diff --git a/src/merge/resources/filestorage/types/remote_endpoint_info.py b/src/merge/resources/filestorage/types/remote_endpoint_info.py index 07ceff6a..ffa70b94 100644 --- a/src/merge/resources/filestorage/types/remote_endpoint_info.py +++ b/src/merge/resources/filestorage/types/remote_endpoint_info.py @@ -10,7 +10,7 @@ class RemoteEndpointInfo(UncheckedBaseModel): method: str url_path: str - field_traversal_path: typing.List[typing.Optional[typing.Any]] + field_traversal_path: typing.List[typing.Any] if IS_PYDANTIC_V2: model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2 diff --git a/src/merge/resources/filestorage/types/remote_field_api.py b/src/merge/resources/filestorage/types/remote_field_api.py index 4c66a23b..79cf45c4 100644 --- a/src/merge/resources/filestorage/types/remote_field_api.py +++ b/src/merge/resources/filestorage/types/remote_field_api.py @@ -3,7 +3,9 @@ import typing import pydantic +import typing_extensions from ....core.pydantic_utilities import IS_PYDANTIC_V2 +from ....core.serialization import FieldMetadata from ....core.unchecked_base_model import UncheckedBaseModel from .advanced_metadata import AdvancedMetadata from .remote_endpoint_info import RemoteEndpointInfo @@ -11,10 +13,12 @@ class RemoteFieldApi(UncheckedBaseModel): - schema_: typing.Dict[str, typing.Optional[typing.Any]] = pydantic.Field(alias="schema") + schema_: typing_extensions.Annotated[ + typing.Dict[str, typing.Any], FieldMetadata(alias="schema"), pydantic.Field(alias="schema") + ] remote_key_name: str remote_endpoint_info: RemoteEndpointInfo - example_values: typing.Optional[typing.List[typing.Optional[typing.Any]]] = None + example_values: typing.Optional[typing.List[typing.Any]] = None advanced_metadata: typing.Optional[AdvancedMetadata] = None coverage: typing.Optional[RemoteFieldApiCoverage] = None diff --git a/src/merge/resources/filestorage/types/remote_field_api_response.py b/src/merge/resources/filestorage/types/remote_field_api_response.py index 2200ec72..c31a4b77 100644 --- a/src/merge/resources/filestorage/types/remote_field_api_response.py +++ b/src/merge/resources/filestorage/types/remote_field_api_response.py @@ -3,17 +3,29 @@ import typing import pydantic +import typing_extensions from ....core.pydantic_utilities import IS_PYDANTIC_V2 +from ....core.serialization import FieldMetadata from ....core.unchecked_base_model import UncheckedBaseModel from .remote_field_api import RemoteFieldApi class RemoteFieldApiResponse(UncheckedBaseModel): - file: typing.Optional[typing.List[RemoteFieldApi]] = pydantic.Field(alias="File", default=None) - folder: typing.Optional[typing.List[RemoteFieldApi]] = pydantic.Field(alias="Folder", default=None) - drive: typing.Optional[typing.List[RemoteFieldApi]] = pydantic.Field(alias="Drive", default=None) - group: typing.Optional[typing.List[RemoteFieldApi]] = pydantic.Field(alias="Group", default=None) - user: typing.Optional[typing.List[RemoteFieldApi]] = pydantic.Field(alias="User", default=None) + file: typing_extensions.Annotated[ + typing.Optional[typing.List[RemoteFieldApi]], FieldMetadata(alias="File"), pydantic.Field(alias="File") + ] = None + folder: typing_extensions.Annotated[ + typing.Optional[typing.List[RemoteFieldApi]], FieldMetadata(alias="Folder"), pydantic.Field(alias="Folder") + ] = None + drive: typing_extensions.Annotated[ + typing.Optional[typing.List[RemoteFieldApi]], FieldMetadata(alias="Drive"), pydantic.Field(alias="Drive") + ] = None + group: typing_extensions.Annotated[ + typing.Optional[typing.List[RemoteFieldApi]], FieldMetadata(alias="Group"), pydantic.Field(alias="Group") + ] = None + user: typing_extensions.Annotated[ + typing.Optional[typing.List[RemoteFieldApi]], FieldMetadata(alias="User"), pydantic.Field(alias="User") + ] = None if IS_PYDANTIC_V2: model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2 diff --git a/src/merge/resources/filestorage/types/remote_response.py b/src/merge/resources/filestorage/types/remote_response.py index db01131f..8bc6f905 100644 --- a/src/merge/resources/filestorage/types/remote_response.py +++ b/src/merge/resources/filestorage/types/remote_response.py @@ -21,10 +21,10 @@ class RemoteResponse(UncheckedBaseModel): method: str path: str status: int - response: typing.Optional[typing.Any] = None - response_headers: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None + response: typing.Any + response_headers: typing.Optional[typing.Dict[str, typing.Any]] = None response_type: typing.Optional[RemoteResponseResponseType] = None - headers: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None + headers: typing.Optional[typing.Dict[str, typing.Any]] = None if IS_PYDANTIC_V2: model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2 diff --git a/src/merge/resources/filestorage/types/request_format_enum.py b/src/merge/resources/filestorage/types/request_format_enum.py index 21c272f2..b8e2234c 100644 --- a/src/merge/resources/filestorage/types/request_format_enum.py +++ b/src/merge/resources/filestorage/types/request_format_enum.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ....core import enum + T_Result = typing.TypeVar("T_Result") -class RequestFormatEnum(str, enum.Enum): +class RequestFormatEnum(enum.StrEnum): """ * `JSON` - JSON * `XML` - XML diff --git a/src/merge/resources/filestorage/types/response_type_enum.py b/src/merge/resources/filestorage/types/response_type_enum.py index ef241302..8a72c2a9 100644 --- a/src/merge/resources/filestorage/types/response_type_enum.py +++ b/src/merge/resources/filestorage/types/response_type_enum.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ....core import enum + T_Result = typing.TypeVar("T_Result") -class ResponseTypeEnum(str, enum.Enum): +class ResponseTypeEnum(enum.StrEnum): """ * `JSON` - JSON * `BASE64_GZIP` - BASE64_GZIP diff --git a/src/merge/resources/filestorage/types/role_enum.py b/src/merge/resources/filestorage/types/role_enum.py index 8f2c9b1d..394ec992 100644 --- a/src/merge/resources/filestorage/types/role_enum.py +++ b/src/merge/resources/filestorage/types/role_enum.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ....core import enum + T_Result = typing.TypeVar("T_Result") -class RoleEnum(str, enum.Enum): +class RoleEnum(enum.StrEnum): """ * `ADMIN` - ADMIN * `DEVELOPER` - DEVELOPER diff --git a/src/merge/resources/filestorage/types/roles_enum.py b/src/merge/resources/filestorage/types/roles_enum.py index 1176c798..52c7cccb 100644 --- a/src/merge/resources/filestorage/types/roles_enum.py +++ b/src/merge/resources/filestorage/types/roles_enum.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ....core import enum + T_Result = typing.TypeVar("T_Result") -class RolesEnum(str, enum.Enum): +class RolesEnum(enum.StrEnum): """ * `READ` - READ * `WRITE` - WRITE diff --git a/src/merge/resources/filestorage/types/selective_sync_configurations_usage_enum.py b/src/merge/resources/filestorage/types/selective_sync_configurations_usage_enum.py index 9ff43813..e8e318c0 100644 --- a/src/merge/resources/filestorage/types/selective_sync_configurations_usage_enum.py +++ b/src/merge/resources/filestorage/types/selective_sync_configurations_usage_enum.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ....core import enum + T_Result = typing.TypeVar("T_Result") -class SelectiveSyncConfigurationsUsageEnum(str, enum.Enum): +class SelectiveSyncConfigurationsUsageEnum(enum.StrEnum): """ * `IN_NEXT_SYNC` - IN_NEXT_SYNC * `IN_LAST_SYNC` - IN_LAST_SYNC diff --git a/src/merge/resources/filestorage/types/status_fd_5_enum.py b/src/merge/resources/filestorage/types/status_fd_5_enum.py index d753f77c..6b851a79 100644 --- a/src/merge/resources/filestorage/types/status_fd_5_enum.py +++ b/src/merge/resources/filestorage/types/status_fd_5_enum.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ....core import enum + T_Result = typing.TypeVar("T_Result") -class StatusFd5Enum(str, enum.Enum): +class StatusFd5Enum(enum.StrEnum): """ * `SYNCING` - SYNCING * `DONE` - DONE diff --git a/src/merge/resources/filestorage/types/type_enum.py b/src/merge/resources/filestorage/types/type_enum.py index 3ae7011d..7ec71bec 100644 --- a/src/merge/resources/filestorage/types/type_enum.py +++ b/src/merge/resources/filestorage/types/type_enum.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ....core import enum + T_Result = typing.TypeVar("T_Result") -class TypeEnum(str, enum.Enum): +class TypeEnum(enum.StrEnum): """ * `USER` - USER * `GROUP` - GROUP diff --git a/src/merge/resources/filestorage/types/user.py b/src/merge/resources/filestorage/types/user.py index 58b9ce24..eaca56e0 100644 --- a/src/merge/resources/filestorage/types/user.py +++ b/src/merge/resources/filestorage/types/user.py @@ -54,7 +54,7 @@ class User(UncheckedBaseModel): Indicates whether or not this object has been deleted in the third party platform. Full coverage deletion detection is a premium add-on. Native deletion detection is offered for free with limited coverage. [Learn more](https://docs.merge.dev/integrations/hris/supported-features/). """ - field_mappings: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None + field_mappings: typing.Optional[typing.Dict[str, typing.Any]] = None remote_data: typing.Optional[typing.List[RemoteData]] = None if IS_PYDANTIC_V2: diff --git a/src/merge/resources/hris/__init__.py b/src/merge/resources/hris/__init__.py index c03d5493..71e1b0f7 100644 --- a/src/merge/resources/hris/__init__.py +++ b/src/merge/resources/hris/__init__.py @@ -576,8 +576,10 @@ def __getattr__(attr_name: str) -> typing.Any: raise AttributeError(f"No {attr_name} found in _dynamic_imports for module name -> {__name__}") try: module = import_module(module_name, __package__) - result = getattr(module, attr_name) - return result + if module_name == f".{attr_name}": + return module + else: + return getattr(module, attr_name) except ImportError as e: raise ImportError(f"Failed to import {attr_name} from {module_name}: {e}") from e except AttributeError as e: diff --git a/src/merge/resources/hris/resources/__init__.py b/src/merge/resources/hris/resources/__init__.py index 7f75e17c..74c2ef2d 100644 --- a/src/merge/resources/hris/resources/__init__.py +++ b/src/merge/resources/hris/resources/__init__.py @@ -139,39 +139,39 @@ "TimeOffRetrieveRequestRemoteFields": ".time_off", "TimeOffRetrieveRequestShowEnumOrigins": ".time_off", "TimesheetEntriesListRequestOrderBy": ".timesheet_entries", - "account_details": ".", - "account_token": ".", - "async_passthrough": ".", - "audit_trail": ".", - "available_actions": ".", - "bank_info": ".", - "benefits": ".", - "companies": ".", - "delete_account": ".", - "dependents": ".", - "employee_payroll_runs": ".", - "employees": ".", - "employer_benefits": ".", - "employments": ".", - "field_mapping": ".", - "force_resync": ".", - "generate_key": ".", - "groups": ".", - "issues": ".", - "link_token": ".", - "linked_accounts": ".", - "locations": ".", - "passthrough": ".", - "pay_groups": ".", - "payroll_runs": ".", - "regenerate_key": ".", - "scopes": ".", - "sync_status": ".", - "teams": ".", - "time_off": ".", - "time_off_balances": ".", - "timesheet_entries": ".", - "webhook_receivers": ".", + "account_details": ".account_details", + "account_token": ".account_token", + "async_passthrough": ".async_passthrough", + "audit_trail": ".audit_trail", + "available_actions": ".available_actions", + "bank_info": ".bank_info", + "benefits": ".benefits", + "companies": ".companies", + "delete_account": ".delete_account", + "dependents": ".dependents", + "employee_payroll_runs": ".employee_payroll_runs", + "employees": ".employees", + "employer_benefits": ".employer_benefits", + "employments": ".employments", + "field_mapping": ".field_mapping", + "force_resync": ".force_resync", + "generate_key": ".generate_key", + "groups": ".groups", + "issues": ".issues", + "link_token": ".link_token", + "linked_accounts": ".linked_accounts", + "locations": ".locations", + "passthrough": ".passthrough", + "pay_groups": ".pay_groups", + "payroll_runs": ".payroll_runs", + "regenerate_key": ".regenerate_key", + "scopes": ".scopes", + "sync_status": ".sync_status", + "teams": ".teams", + "time_off": ".time_off", + "time_off_balances": ".time_off_balances", + "timesheet_entries": ".timesheet_entries", + "webhook_receivers": ".webhook_receivers", } @@ -181,8 +181,10 @@ def __getattr__(attr_name: str) -> typing.Any: raise AttributeError(f"No {attr_name} found in _dynamic_imports for module name -> {__name__}") try: module = import_module(module_name, __package__) - result = getattr(module, attr_name) - return result + if module_name == f".{attr_name}": + return module + else: + return getattr(module, attr_name) except ImportError as e: raise ImportError(f"Failed to import {attr_name} from {module_name}: {e}") from e except AttributeError as e: diff --git a/src/merge/resources/hris/resources/account_details/raw_client.py b/src/merge/resources/hris/resources/account_details/raw_client.py index 9c729853..d12b2503 100644 --- a/src/merge/resources/hris/resources/account_details/raw_client.py +++ b/src/merge/resources/hris/resources/account_details/raw_client.py @@ -6,9 +6,11 @@ from .....core.api_error import ApiError from .....core.client_wrapper import AsyncClientWrapper, SyncClientWrapper from .....core.http_response import AsyncHttpResponse, HttpResponse +from .....core.parse_error import ParsingError from .....core.request_options import RequestOptions from .....core.unchecked_base_model import construct_type from ...types.account_details import AccountDetails +from pydantic import ValidationError class RawAccountDetailsClient: @@ -47,6 +49,10 @@ def retrieve(self, *, request_options: typing.Optional[RequestOptions] = None) - _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) @@ -88,4 +94,8 @@ async def retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) diff --git a/src/merge/resources/hris/resources/account_token/raw_client.py b/src/merge/resources/hris/resources/account_token/raw_client.py index 996e66d9..f3ff29f7 100644 --- a/src/merge/resources/hris/resources/account_token/raw_client.py +++ b/src/merge/resources/hris/resources/account_token/raw_client.py @@ -7,10 +7,12 @@ from .....core.client_wrapper import AsyncClientWrapper, SyncClientWrapper from .....core.http_response import AsyncHttpResponse, HttpResponse from .....core.jsonable_encoder import jsonable_encoder +from .....core.parse_error import ParsingError from .....core.request_options import RequestOptions from .....core.unchecked_base_model import construct_type from ...types.account_token import AccountToken from ...types.regenerate_account_token import RegenerateAccountToken +from pydantic import ValidationError class RawAccountTokenClient: @@ -53,6 +55,10 @@ def retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) def regenerate_create( @@ -89,6 +95,10 @@ def regenerate_create( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) @@ -132,6 +142,10 @@ async def retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) async def regenerate_create( @@ -168,4 +182,8 @@ async def regenerate_create( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) diff --git a/src/merge/resources/hris/resources/async_passthrough/__init__.py b/src/merge/resources/hris/resources/async_passthrough/__init__.py index 375c7953..11090986 100644 --- a/src/merge/resources/hris/resources/async_passthrough/__init__.py +++ b/src/merge/resources/hris/resources/async_passthrough/__init__.py @@ -16,8 +16,10 @@ def __getattr__(attr_name: str) -> typing.Any: raise AttributeError(f"No {attr_name} found in _dynamic_imports for module name -> {__name__}") try: module = import_module(module_name, __package__) - result = getattr(module, attr_name) - return result + if module_name == f".{attr_name}": + return module + else: + return getattr(module, attr_name) except ImportError as e: raise ImportError(f"Failed to import {attr_name} from {module_name}: {e}") from e except AttributeError as e: diff --git a/src/merge/resources/hris/resources/async_passthrough/raw_client.py b/src/merge/resources/hris/resources/async_passthrough/raw_client.py index e4d6da0c..65581574 100644 --- a/src/merge/resources/hris/resources/async_passthrough/raw_client.py +++ b/src/merge/resources/hris/resources/async_passthrough/raw_client.py @@ -7,11 +7,13 @@ from .....core.client_wrapper import AsyncClientWrapper, SyncClientWrapper from .....core.http_response import AsyncHttpResponse, HttpResponse from .....core.jsonable_encoder import jsonable_encoder +from .....core.parse_error import ParsingError from .....core.request_options import RequestOptions from .....core.unchecked_base_model import construct_type from ...types.async_passthrough_reciept import AsyncPassthroughReciept from ...types.data_passthrough_request import DataPassthroughRequest from .types.async_passthrough_retrieve_response import AsyncPassthroughRetrieveResponse +from pydantic import ValidationError # this is used as the default value for optional parameters OMIT = typing.cast(typing.Any, ...) @@ -62,6 +64,10 @@ def create( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) def retrieve( @@ -100,6 +106,10 @@ def retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) @@ -148,6 +158,10 @@ async def create( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) async def retrieve( @@ -186,4 +200,8 @@ async def retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) diff --git a/src/merge/resources/hris/resources/async_passthrough/types/__init__.py b/src/merge/resources/hris/resources/async_passthrough/types/__init__.py index f6e9bec9..dc335400 100644 --- a/src/merge/resources/hris/resources/async_passthrough/types/__init__.py +++ b/src/merge/resources/hris/resources/async_passthrough/types/__init__.py @@ -16,8 +16,10 @@ def __getattr__(attr_name: str) -> typing.Any: raise AttributeError(f"No {attr_name} found in _dynamic_imports for module name -> {__name__}") try: module = import_module(module_name, __package__) - result = getattr(module, attr_name) - return result + if module_name == f".{attr_name}": + return module + else: + return getattr(module, attr_name) except ImportError as e: raise ImportError(f"Failed to import {attr_name} from {module_name}: {e}") from e except AttributeError as e: diff --git a/src/merge/resources/hris/resources/audit_trail/raw_client.py b/src/merge/resources/hris/resources/audit_trail/raw_client.py index 4f45b96a..7a01621e 100644 --- a/src/merge/resources/hris/resources/audit_trail/raw_client.py +++ b/src/merge/resources/hris/resources/audit_trail/raw_client.py @@ -6,9 +6,11 @@ from .....core.api_error import ApiError from .....core.client_wrapper import AsyncClientWrapper, SyncClientWrapper from .....core.http_response import AsyncHttpResponse, HttpResponse +from .....core.parse_error import ParsingError from .....core.request_options import RequestOptions from .....core.unchecked_base_model import construct_type from ...types.paginated_audit_log_event_list import PaginatedAuditLogEventList +from pydantic import ValidationError class RawAuditTrailClient: @@ -83,6 +85,10 @@ def list( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) @@ -158,4 +164,8 @@ async def list( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) diff --git a/src/merge/resources/hris/resources/available_actions/raw_client.py b/src/merge/resources/hris/resources/available_actions/raw_client.py index 694d02ed..40215a5a 100644 --- a/src/merge/resources/hris/resources/available_actions/raw_client.py +++ b/src/merge/resources/hris/resources/available_actions/raw_client.py @@ -6,9 +6,11 @@ from .....core.api_error import ApiError from .....core.client_wrapper import AsyncClientWrapper, SyncClientWrapper from .....core.http_response import AsyncHttpResponse, HttpResponse +from .....core.parse_error import ParsingError from .....core.request_options import RequestOptions from .....core.unchecked_base_model import construct_type from ...types.available_actions import AvailableActions +from pydantic import ValidationError class RawAvailableActionsClient: @@ -47,6 +49,10 @@ def retrieve(self, *, request_options: typing.Optional[RequestOptions] = None) - _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) @@ -88,4 +94,8 @@ async def retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) diff --git a/src/merge/resources/hris/resources/bank_info/__init__.py b/src/merge/resources/hris/resources/bank_info/__init__.py index c4f49abf..f774b285 100644 --- a/src/merge/resources/hris/resources/bank_info/__init__.py +++ b/src/merge/resources/hris/resources/bank_info/__init__.py @@ -19,8 +19,10 @@ def __getattr__(attr_name: str) -> typing.Any: raise AttributeError(f"No {attr_name} found in _dynamic_imports for module name -> {__name__}") try: module = import_module(module_name, __package__) - result = getattr(module, attr_name) - return result + if module_name == f".{attr_name}": + return module + else: + return getattr(module, attr_name) except ImportError as e: raise ImportError(f"Failed to import {attr_name} from {module_name}: {e}") from e except AttributeError as e: diff --git a/src/merge/resources/hris/resources/bank_info/raw_client.py b/src/merge/resources/hris/resources/bank_info/raw_client.py index 4f34a8cd..9b1405a2 100644 --- a/src/merge/resources/hris/resources/bank_info/raw_client.py +++ b/src/merge/resources/hris/resources/bank_info/raw_client.py @@ -9,12 +9,14 @@ from .....core.datetime_utils import serialize_datetime from .....core.http_response import AsyncHttpResponse, HttpResponse from .....core.jsonable_encoder import jsonable_encoder +from .....core.parse_error import ParsingError from .....core.request_options import RequestOptions from .....core.unchecked_base_model import construct_type from ...types.bank_info import BankInfo from ...types.paginated_bank_info_list import PaginatedBankInfoList from .types.bank_info_list_request_account_type import BankInfoListRequestAccountType from .types.bank_info_list_request_order_by import BankInfoListRequestOrderBy +from pydantic import ValidationError class RawBankInfoClient: @@ -149,6 +151,10 @@ def list( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) def retrieve( @@ -219,6 +225,10 @@ def retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) @@ -354,6 +364,10 @@ async def list( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) async def retrieve( @@ -424,4 +438,8 @@ async def retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) diff --git a/src/merge/resources/hris/resources/bank_info/types/__init__.py b/src/merge/resources/hris/resources/bank_info/types/__init__.py index 9f1d7d37..a3bf0a56 100644 --- a/src/merge/resources/hris/resources/bank_info/types/__init__.py +++ b/src/merge/resources/hris/resources/bank_info/types/__init__.py @@ -20,8 +20,10 @@ def __getattr__(attr_name: str) -> typing.Any: raise AttributeError(f"No {attr_name} found in _dynamic_imports for module name -> {__name__}") try: module = import_module(module_name, __package__) - result = getattr(module, attr_name) - return result + if module_name == f".{attr_name}": + return module + else: + return getattr(module, attr_name) except ImportError as e: raise ImportError(f"Failed to import {attr_name} from {module_name}: {e}") from e except AttributeError as e: diff --git a/src/merge/resources/hris/resources/bank_info/types/bank_info_list_request_account_type.py b/src/merge/resources/hris/resources/bank_info/types/bank_info_list_request_account_type.py index 91cd2c65..ca9396ae 100644 --- a/src/merge/resources/hris/resources/bank_info/types/bank_info_list_request_account_type.py +++ b/src/merge/resources/hris/resources/bank_info/types/bank_info_list_request_account_type.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ......core import enum + T_Result = typing.TypeVar("T_Result") -class BankInfoListRequestAccountType(str, enum.Enum): +class BankInfoListRequestAccountType(enum.StrEnum): CHECKING = "CHECKING" SAVINGS = "SAVINGS" diff --git a/src/merge/resources/hris/resources/bank_info/types/bank_info_list_request_order_by.py b/src/merge/resources/hris/resources/bank_info/types/bank_info_list_request_order_by.py index 69c7361f..34dfa353 100644 --- a/src/merge/resources/hris/resources/bank_info/types/bank_info_list_request_order_by.py +++ b/src/merge/resources/hris/resources/bank_info/types/bank_info_list_request_order_by.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ......core import enum + T_Result = typing.TypeVar("T_Result") -class BankInfoListRequestOrderBy(str, enum.Enum): +class BankInfoListRequestOrderBy(enum.StrEnum): REMOTE_CREATED_AT_DESCENDING = "-remote_created_at" REMOTE_CREATED_AT_ASCENDING = "remote_created_at" diff --git a/src/merge/resources/hris/resources/benefits/raw_client.py b/src/merge/resources/hris/resources/benefits/raw_client.py index 49eb247c..45acad49 100644 --- a/src/merge/resources/hris/resources/benefits/raw_client.py +++ b/src/merge/resources/hris/resources/benefits/raw_client.py @@ -9,10 +9,12 @@ from .....core.datetime_utils import serialize_datetime from .....core.http_response import AsyncHttpResponse, HttpResponse from .....core.jsonable_encoder import jsonable_encoder +from .....core.parse_error import ParsingError from .....core.request_options import RequestOptions from .....core.unchecked_base_model import construct_type from ...types.benefit import Benefit from ...types.paginated_benefit_list import PaginatedBenefitList +from pydantic import ValidationError class RawBenefitsClient: @@ -119,6 +121,10 @@ def list( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) def retrieve( @@ -179,6 +185,10 @@ def retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) @@ -286,6 +296,10 @@ async def list( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) async def retrieve( @@ -346,4 +360,8 @@ async def retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) diff --git a/src/merge/resources/hris/resources/companies/raw_client.py b/src/merge/resources/hris/resources/companies/raw_client.py index 99a8715e..b11552a2 100644 --- a/src/merge/resources/hris/resources/companies/raw_client.py +++ b/src/merge/resources/hris/resources/companies/raw_client.py @@ -9,10 +9,12 @@ from .....core.datetime_utils import serialize_datetime from .....core.http_response import AsyncHttpResponse, HttpResponse from .....core.jsonable_encoder import jsonable_encoder +from .....core.parse_error import ParsingError from .....core.request_options import RequestOptions from .....core.unchecked_base_model import construct_type from ...types.company import Company from ...types.paginated_company_list import PaginatedCompanyList +from pydantic import ValidationError class RawCompaniesClient: @@ -107,6 +109,10 @@ def list( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) def retrieve( @@ -160,6 +166,10 @@ def retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) @@ -255,6 +265,10 @@ async def list( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) async def retrieve( @@ -308,4 +322,8 @@ async def retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) diff --git a/src/merge/resources/hris/resources/delete_account/raw_client.py b/src/merge/resources/hris/resources/delete_account/raw_client.py index f71ea39d..9455f4ce 100644 --- a/src/merge/resources/hris/resources/delete_account/raw_client.py +++ b/src/merge/resources/hris/resources/delete_account/raw_client.py @@ -6,7 +6,9 @@ from .....core.api_error import ApiError from .....core.client_wrapper import AsyncClientWrapper, SyncClientWrapper from .....core.http_response import AsyncHttpResponse, HttpResponse +from .....core.parse_error import ParsingError from .....core.request_options import RequestOptions +from pydantic import ValidationError class RawDeleteAccountClient: @@ -37,6 +39,10 @@ def delete(self, *, request_options: typing.Optional[RequestOptions] = None) -> _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) @@ -68,4 +74,8 @@ async def delete(self, *, request_options: typing.Optional[RequestOptions] = Non _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) diff --git a/src/merge/resources/hris/resources/dependents/raw_client.py b/src/merge/resources/hris/resources/dependents/raw_client.py index 5e9fd5ef..0beee933 100644 --- a/src/merge/resources/hris/resources/dependents/raw_client.py +++ b/src/merge/resources/hris/resources/dependents/raw_client.py @@ -9,10 +9,12 @@ from .....core.datetime_utils import serialize_datetime from .....core.http_response import AsyncHttpResponse, HttpResponse from .....core.jsonable_encoder import jsonable_encoder +from .....core.parse_error import ParsingError from .....core.request_options import RequestOptions from .....core.unchecked_base_model import construct_type from ...types.dependent import Dependent from ...types.paginated_dependent_list import PaginatedDependentList +from pydantic import ValidationError class RawDependentsClient: @@ -117,6 +119,10 @@ def list( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) def retrieve( @@ -175,6 +181,10 @@ def retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) @@ -280,6 +290,10 @@ async def list( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) async def retrieve( @@ -338,4 +352,8 @@ async def retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) diff --git a/src/merge/resources/hris/resources/employee_payroll_runs/__init__.py b/src/merge/resources/hris/resources/employee_payroll_runs/__init__.py index b18daacb..a8ba94af 100644 --- a/src/merge/resources/hris/resources/employee_payroll_runs/__init__.py +++ b/src/merge/resources/hris/resources/employee_payroll_runs/__init__.py @@ -19,8 +19,10 @@ def __getattr__(attr_name: str) -> typing.Any: raise AttributeError(f"No {attr_name} found in _dynamic_imports for module name -> {__name__}") try: module = import_module(module_name, __package__) - result = getattr(module, attr_name) - return result + if module_name == f".{attr_name}": + return module + else: + return getattr(module, attr_name) except ImportError as e: raise ImportError(f"Failed to import {attr_name} from {module_name}: {e}") from e except AttributeError as e: diff --git a/src/merge/resources/hris/resources/employee_payroll_runs/raw_client.py b/src/merge/resources/hris/resources/employee_payroll_runs/raw_client.py index 4ffa4b21..f3a12283 100644 --- a/src/merge/resources/hris/resources/employee_payroll_runs/raw_client.py +++ b/src/merge/resources/hris/resources/employee_payroll_runs/raw_client.py @@ -9,12 +9,14 @@ from .....core.datetime_utils import serialize_datetime from .....core.http_response import AsyncHttpResponse, HttpResponse from .....core.jsonable_encoder import jsonable_encoder +from .....core.parse_error import ParsingError from .....core.request_options import RequestOptions from .....core.unchecked_base_model import construct_type from ...types.employee_payroll_run import EmployeePayrollRun from ...types.paginated_employee_payroll_run_list import PaginatedEmployeePayrollRunList from .types.employee_payroll_runs_list_request_expand_item import EmployeePayrollRunsListRequestExpandItem from .types.employee_payroll_runs_retrieve_request_expand_item import EmployeePayrollRunsRetrieveRequestExpandItem +from pydantic import ValidationError class RawEmployeePayrollRunsClient: @@ -148,6 +150,10 @@ def list( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) def retrieve( @@ -211,6 +217,10 @@ def retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) @@ -345,6 +355,10 @@ async def list( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) async def retrieve( @@ -408,4 +422,8 @@ async def retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) diff --git a/src/merge/resources/hris/resources/employee_payroll_runs/types/__init__.py b/src/merge/resources/hris/resources/employee_payroll_runs/types/__init__.py index 7685d486..c552777a 100644 --- a/src/merge/resources/hris/resources/employee_payroll_runs/types/__init__.py +++ b/src/merge/resources/hris/resources/employee_payroll_runs/types/__init__.py @@ -20,8 +20,10 @@ def __getattr__(attr_name: str) -> typing.Any: raise AttributeError(f"No {attr_name} found in _dynamic_imports for module name -> {__name__}") try: module = import_module(module_name, __package__) - result = getattr(module, attr_name) - return result + if module_name == f".{attr_name}": + return module + else: + return getattr(module, attr_name) except ImportError as e: raise ImportError(f"Failed to import {attr_name} from {module_name}: {e}") from e except AttributeError as e: diff --git a/src/merge/resources/hris/resources/employee_payroll_runs/types/employee_payroll_runs_list_request_expand_item.py b/src/merge/resources/hris/resources/employee_payroll_runs/types/employee_payroll_runs_list_request_expand_item.py index ae6c0cb6..4c1cb089 100644 --- a/src/merge/resources/hris/resources/employee_payroll_runs/types/employee_payroll_runs_list_request_expand_item.py +++ b/src/merge/resources/hris/resources/employee_payroll_runs/types/employee_payroll_runs_list_request_expand_item.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ......core import enum + T_Result = typing.TypeVar("T_Result") -class EmployeePayrollRunsListRequestExpandItem(str, enum.Enum): +class EmployeePayrollRunsListRequestExpandItem(enum.StrEnum): EMPLOYEE = "employee" PAYROLL_RUN = "payroll_run" diff --git a/src/merge/resources/hris/resources/employee_payroll_runs/types/employee_payroll_runs_retrieve_request_expand_item.py b/src/merge/resources/hris/resources/employee_payroll_runs/types/employee_payroll_runs_retrieve_request_expand_item.py index 9af1e8b8..bf2726ae 100644 --- a/src/merge/resources/hris/resources/employee_payroll_runs/types/employee_payroll_runs_retrieve_request_expand_item.py +++ b/src/merge/resources/hris/resources/employee_payroll_runs/types/employee_payroll_runs_retrieve_request_expand_item.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ......core import enum + T_Result = typing.TypeVar("T_Result") -class EmployeePayrollRunsRetrieveRequestExpandItem(str, enum.Enum): +class EmployeePayrollRunsRetrieveRequestExpandItem(enum.StrEnum): EMPLOYEE = "employee" PAYROLL_RUN = "payroll_run" diff --git a/src/merge/resources/hris/resources/employees/__init__.py b/src/merge/resources/hris/resources/employees/__init__.py index 1f0c7e50..988b9ba5 100644 --- a/src/merge/resources/hris/resources/employees/__init__.py +++ b/src/merge/resources/hris/resources/employees/__init__.py @@ -32,8 +32,10 @@ def __getattr__(attr_name: str) -> typing.Any: raise AttributeError(f"No {attr_name} found in _dynamic_imports for module name -> {__name__}") try: module = import_module(module_name, __package__) - result = getattr(module, attr_name) - return result + if module_name == f".{attr_name}": + return module + else: + return getattr(module, attr_name) except ImportError as e: raise ImportError(f"Failed to import {attr_name} from {module_name}: {e}") from e except AttributeError as e: diff --git a/src/merge/resources/hris/resources/employees/raw_client.py b/src/merge/resources/hris/resources/employees/raw_client.py index 7787adad..91364a8f 100644 --- a/src/merge/resources/hris/resources/employees/raw_client.py +++ b/src/merge/resources/hris/resources/employees/raw_client.py @@ -9,6 +9,7 @@ from .....core.datetime_utils import serialize_datetime from .....core.http_response import AsyncHttpResponse, HttpResponse from .....core.jsonable_encoder import jsonable_encoder +from .....core.parse_error import ParsingError from .....core.request_options import RequestOptions from .....core.unchecked_base_model import construct_type from ...types.employee import Employee @@ -24,6 +25,7 @@ from .types.employees_retrieve_request_expand_item import EmployeesRetrieveRequestExpandItem from .types.employees_retrieve_request_remote_fields import EmployeesRetrieveRequestRemoteFields from .types.employees_retrieve_request_show_enum_origins import EmployeesRetrieveRequestShowEnumOrigins +from pydantic import ValidationError # this is used as the default value for optional parameters OMIT = typing.cast(typing.Any, ...) @@ -247,6 +249,10 @@ def list( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) def create( @@ -307,6 +313,10 @@ def create( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) def retrieve( @@ -382,6 +392,10 @@ def retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) def ignore_create( @@ -423,6 +437,10 @@ def ignore_create( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) def meta_post_retrieve( @@ -459,6 +477,10 @@ def meta_post_retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) @@ -680,6 +702,10 @@ async def list( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) async def create( @@ -740,6 +766,10 @@ async def create( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) async def retrieve( @@ -815,6 +845,10 @@ async def retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) async def ignore_create( @@ -856,6 +890,10 @@ async def ignore_create( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) async def meta_post_retrieve( @@ -892,4 +930,8 @@ async def meta_post_retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) diff --git a/src/merge/resources/hris/resources/employees/types/__init__.py b/src/merge/resources/hris/resources/employees/types/__init__.py index bd60b908..d87a343b 100644 --- a/src/merge/resources/hris/resources/employees/types/__init__.py +++ b/src/merge/resources/hris/resources/employees/types/__init__.py @@ -30,8 +30,10 @@ def __getattr__(attr_name: str) -> typing.Any: raise AttributeError(f"No {attr_name} found in _dynamic_imports for module name -> {__name__}") try: module = import_module(module_name, __package__) - result = getattr(module, attr_name) - return result + if module_name == f".{attr_name}": + return module + else: + return getattr(module, attr_name) except ImportError as e: raise ImportError(f"Failed to import {attr_name} from {module_name}: {e}") from e except AttributeError as e: diff --git a/src/merge/resources/hris/resources/employees/types/employees_list_request_employment_status.py b/src/merge/resources/hris/resources/employees/types/employees_list_request_employment_status.py index f0406ec8..16cd3762 100644 --- a/src/merge/resources/hris/resources/employees/types/employees_list_request_employment_status.py +++ b/src/merge/resources/hris/resources/employees/types/employees_list_request_employment_status.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ......core import enum + T_Result = typing.TypeVar("T_Result") -class EmployeesListRequestEmploymentStatus(str, enum.Enum): +class EmployeesListRequestEmploymentStatus(enum.StrEnum): ACTIVE = "ACTIVE" INACTIVE = "INACTIVE" PENDING = "PENDING" diff --git a/src/merge/resources/hris/resources/employees/types/employees_list_request_expand_item.py b/src/merge/resources/hris/resources/employees/types/employees_list_request_expand_item.py index ff83f741..b7eb399a 100644 --- a/src/merge/resources/hris/resources/employees/types/employees_list_request_expand_item.py +++ b/src/merge/resources/hris/resources/employees/types/employees_list_request_expand_item.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ......core import enum + T_Result = typing.TypeVar("T_Result") -class EmployeesListRequestExpandItem(str, enum.Enum): +class EmployeesListRequestExpandItem(enum.StrEnum): COMPANY = "company" EMPLOYMENTS = "employments" GROUPS = "groups" diff --git a/src/merge/resources/hris/resources/employees/types/employees_list_request_remote_fields.py b/src/merge/resources/hris/resources/employees/types/employees_list_request_remote_fields.py index 87578468..3369ac1d 100644 --- a/src/merge/resources/hris/resources/employees/types/employees_list_request_remote_fields.py +++ b/src/merge/resources/hris/resources/employees/types/employees_list_request_remote_fields.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ......core import enum + T_Result = typing.TypeVar("T_Result") -class EmployeesListRequestRemoteFields(str, enum.Enum): +class EmployeesListRequestRemoteFields(enum.StrEnum): EMPLOYMENT_STATUS = "employment_status" EMPLOYMENT_STATUS_ETHNICITY = "employment_status,ethnicity" EMPLOYMENT_STATUS_ETHNICITY_GENDER = "employment_status,ethnicity,gender" diff --git a/src/merge/resources/hris/resources/employees/types/employees_list_request_show_enum_origins.py b/src/merge/resources/hris/resources/employees/types/employees_list_request_show_enum_origins.py index 2aa5f5c7..52997106 100644 --- a/src/merge/resources/hris/resources/employees/types/employees_list_request_show_enum_origins.py +++ b/src/merge/resources/hris/resources/employees/types/employees_list_request_show_enum_origins.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ......core import enum + T_Result = typing.TypeVar("T_Result") -class EmployeesListRequestShowEnumOrigins(str, enum.Enum): +class EmployeesListRequestShowEnumOrigins(enum.StrEnum): EMPLOYMENT_STATUS = "employment_status" EMPLOYMENT_STATUS_ETHNICITY = "employment_status,ethnicity" EMPLOYMENT_STATUS_ETHNICITY_GENDER = "employment_status,ethnicity,gender" diff --git a/src/merge/resources/hris/resources/employees/types/employees_retrieve_request_expand_item.py b/src/merge/resources/hris/resources/employees/types/employees_retrieve_request_expand_item.py index f152aaf4..1fa4b865 100644 --- a/src/merge/resources/hris/resources/employees/types/employees_retrieve_request_expand_item.py +++ b/src/merge/resources/hris/resources/employees/types/employees_retrieve_request_expand_item.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ......core import enum + T_Result = typing.TypeVar("T_Result") -class EmployeesRetrieveRequestExpandItem(str, enum.Enum): +class EmployeesRetrieveRequestExpandItem(enum.StrEnum): COMPANY = "company" EMPLOYMENTS = "employments" GROUPS = "groups" diff --git a/src/merge/resources/hris/resources/employees/types/employees_retrieve_request_remote_fields.py b/src/merge/resources/hris/resources/employees/types/employees_retrieve_request_remote_fields.py index d35a401f..2467fef7 100644 --- a/src/merge/resources/hris/resources/employees/types/employees_retrieve_request_remote_fields.py +++ b/src/merge/resources/hris/resources/employees/types/employees_retrieve_request_remote_fields.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ......core import enum + T_Result = typing.TypeVar("T_Result") -class EmployeesRetrieveRequestRemoteFields(str, enum.Enum): +class EmployeesRetrieveRequestRemoteFields(enum.StrEnum): EMPLOYMENT_STATUS = "employment_status" EMPLOYMENT_STATUS_ETHNICITY = "employment_status,ethnicity" EMPLOYMENT_STATUS_ETHNICITY_GENDER = "employment_status,ethnicity,gender" diff --git a/src/merge/resources/hris/resources/employees/types/employees_retrieve_request_show_enum_origins.py b/src/merge/resources/hris/resources/employees/types/employees_retrieve_request_show_enum_origins.py index d307e05b..36f02b6d 100644 --- a/src/merge/resources/hris/resources/employees/types/employees_retrieve_request_show_enum_origins.py +++ b/src/merge/resources/hris/resources/employees/types/employees_retrieve_request_show_enum_origins.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ......core import enum + T_Result = typing.TypeVar("T_Result") -class EmployeesRetrieveRequestShowEnumOrigins(str, enum.Enum): +class EmployeesRetrieveRequestShowEnumOrigins(enum.StrEnum): EMPLOYMENT_STATUS = "employment_status" EMPLOYMENT_STATUS_ETHNICITY = "employment_status,ethnicity" EMPLOYMENT_STATUS_ETHNICITY_GENDER = "employment_status,ethnicity,gender" diff --git a/src/merge/resources/hris/resources/employer_benefits/raw_client.py b/src/merge/resources/hris/resources/employer_benefits/raw_client.py index 8d186abf..498705a9 100644 --- a/src/merge/resources/hris/resources/employer_benefits/raw_client.py +++ b/src/merge/resources/hris/resources/employer_benefits/raw_client.py @@ -9,10 +9,12 @@ from .....core.datetime_utils import serialize_datetime from .....core.http_response import AsyncHttpResponse, HttpResponse from .....core.jsonable_encoder import jsonable_encoder +from .....core.parse_error import ParsingError from .....core.request_options import RequestOptions from .....core.unchecked_base_model import construct_type from ...types.employer_benefit import EmployerBenefit from ...types.paginated_employer_benefit_list import PaginatedEmployerBenefitList +from pydantic import ValidationError class RawEmployerBenefitsClient: @@ -107,6 +109,10 @@ def list( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) def retrieve( @@ -160,6 +166,10 @@ def retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) @@ -255,6 +265,10 @@ async def list( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) async def retrieve( @@ -308,4 +322,8 @@ async def retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) diff --git a/src/merge/resources/hris/resources/employments/__init__.py b/src/merge/resources/hris/resources/employments/__init__.py index 47edf653..2f8405e3 100644 --- a/src/merge/resources/hris/resources/employments/__init__.py +++ b/src/merge/resources/hris/resources/employments/__init__.py @@ -32,8 +32,10 @@ def __getattr__(attr_name: str) -> typing.Any: raise AttributeError(f"No {attr_name} found in _dynamic_imports for module name -> {__name__}") try: module = import_module(module_name, __package__) - result = getattr(module, attr_name) - return result + if module_name == f".{attr_name}": + return module + else: + return getattr(module, attr_name) except ImportError as e: raise ImportError(f"Failed to import {attr_name} from {module_name}: {e}") from e except AttributeError as e: diff --git a/src/merge/resources/hris/resources/employments/raw_client.py b/src/merge/resources/hris/resources/employments/raw_client.py index 0594b087..bf1938ff 100644 --- a/src/merge/resources/hris/resources/employments/raw_client.py +++ b/src/merge/resources/hris/resources/employments/raw_client.py @@ -9,6 +9,7 @@ from .....core.datetime_utils import serialize_datetime from .....core.http_response import AsyncHttpResponse, HttpResponse from .....core.jsonable_encoder import jsonable_encoder +from .....core.parse_error import ParsingError from .....core.request_options import RequestOptions from .....core.unchecked_base_model import construct_type from ...types.employment import Employment @@ -20,6 +21,7 @@ from .types.employments_retrieve_request_expand_item import EmploymentsRetrieveRequestExpandItem from .types.employments_retrieve_request_remote_fields import EmploymentsRetrieveRequestRemoteFields from .types.employments_retrieve_request_show_enum_origins import EmploymentsRetrieveRequestShowEnumOrigins +from pydantic import ValidationError class RawEmploymentsClient: @@ -141,6 +143,10 @@ def list( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) def retrieve( @@ -211,6 +217,10 @@ def retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) @@ -333,6 +343,10 @@ async def list( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) async def retrieve( @@ -403,4 +417,8 @@ async def retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) diff --git a/src/merge/resources/hris/resources/employments/types/__init__.py b/src/merge/resources/hris/resources/employments/types/__init__.py index 0fa4e86d..afb0f23b 100644 --- a/src/merge/resources/hris/resources/employments/types/__init__.py +++ b/src/merge/resources/hris/resources/employments/types/__init__.py @@ -30,8 +30,10 @@ def __getattr__(attr_name: str) -> typing.Any: raise AttributeError(f"No {attr_name} found in _dynamic_imports for module name -> {__name__}") try: module = import_module(module_name, __package__) - result = getattr(module, attr_name) - return result + if module_name == f".{attr_name}": + return module + else: + return getattr(module, attr_name) except ImportError as e: raise ImportError(f"Failed to import {attr_name} from {module_name}: {e}") from e except AttributeError as e: diff --git a/src/merge/resources/hris/resources/employments/types/employments_list_request_expand_item.py b/src/merge/resources/hris/resources/employments/types/employments_list_request_expand_item.py index 3519601e..e9d2a04b 100644 --- a/src/merge/resources/hris/resources/employments/types/employments_list_request_expand_item.py +++ b/src/merge/resources/hris/resources/employments/types/employments_list_request_expand_item.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ......core import enum + T_Result = typing.TypeVar("T_Result") -class EmploymentsListRequestExpandItem(str, enum.Enum): +class EmploymentsListRequestExpandItem(enum.StrEnum): EMPLOYEE = "employee" PAY_GROUP = "pay_group" diff --git a/src/merge/resources/hris/resources/employments/types/employments_list_request_order_by.py b/src/merge/resources/hris/resources/employments/types/employments_list_request_order_by.py index 4d1fe86f..ae5abb58 100644 --- a/src/merge/resources/hris/resources/employments/types/employments_list_request_order_by.py +++ b/src/merge/resources/hris/resources/employments/types/employments_list_request_order_by.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ......core import enum + T_Result = typing.TypeVar("T_Result") -class EmploymentsListRequestOrderBy(str, enum.Enum): +class EmploymentsListRequestOrderBy(enum.StrEnum): EFFECTIVE_DATE_DESCENDING = "-effective_date" EFFECTIVE_DATE_ASCENDING = "effective_date" diff --git a/src/merge/resources/hris/resources/employments/types/employments_list_request_remote_fields.py b/src/merge/resources/hris/resources/employments/types/employments_list_request_remote_fields.py index b8b35640..de6ade63 100644 --- a/src/merge/resources/hris/resources/employments/types/employments_list_request_remote_fields.py +++ b/src/merge/resources/hris/resources/employments/types/employments_list_request_remote_fields.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ......core import enum + T_Result = typing.TypeVar("T_Result") -class EmploymentsListRequestRemoteFields(str, enum.Enum): +class EmploymentsListRequestRemoteFields(enum.StrEnum): EMPLOYMENT_TYPE = "employment_type" EMPLOYMENT_TYPE_FLSA_STATUS = "employment_type,flsa_status" EMPLOYMENT_TYPE_FLSA_STATUS_PAY_FREQUENCY = "employment_type,flsa_status,pay_frequency" diff --git a/src/merge/resources/hris/resources/employments/types/employments_list_request_show_enum_origins.py b/src/merge/resources/hris/resources/employments/types/employments_list_request_show_enum_origins.py index 023d425b..0c4c2b1a 100644 --- a/src/merge/resources/hris/resources/employments/types/employments_list_request_show_enum_origins.py +++ b/src/merge/resources/hris/resources/employments/types/employments_list_request_show_enum_origins.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ......core import enum + T_Result = typing.TypeVar("T_Result") -class EmploymentsListRequestShowEnumOrigins(str, enum.Enum): +class EmploymentsListRequestShowEnumOrigins(enum.StrEnum): EMPLOYMENT_TYPE = "employment_type" EMPLOYMENT_TYPE_FLSA_STATUS = "employment_type,flsa_status" EMPLOYMENT_TYPE_FLSA_STATUS_PAY_FREQUENCY = "employment_type,flsa_status,pay_frequency" diff --git a/src/merge/resources/hris/resources/employments/types/employments_retrieve_request_expand_item.py b/src/merge/resources/hris/resources/employments/types/employments_retrieve_request_expand_item.py index 8425214f..70588f15 100644 --- a/src/merge/resources/hris/resources/employments/types/employments_retrieve_request_expand_item.py +++ b/src/merge/resources/hris/resources/employments/types/employments_retrieve_request_expand_item.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ......core import enum + T_Result = typing.TypeVar("T_Result") -class EmploymentsRetrieveRequestExpandItem(str, enum.Enum): +class EmploymentsRetrieveRequestExpandItem(enum.StrEnum): EMPLOYEE = "employee" PAY_GROUP = "pay_group" diff --git a/src/merge/resources/hris/resources/employments/types/employments_retrieve_request_remote_fields.py b/src/merge/resources/hris/resources/employments/types/employments_retrieve_request_remote_fields.py index b54db8d1..16df74e8 100644 --- a/src/merge/resources/hris/resources/employments/types/employments_retrieve_request_remote_fields.py +++ b/src/merge/resources/hris/resources/employments/types/employments_retrieve_request_remote_fields.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ......core import enum + T_Result = typing.TypeVar("T_Result") -class EmploymentsRetrieveRequestRemoteFields(str, enum.Enum): +class EmploymentsRetrieveRequestRemoteFields(enum.StrEnum): EMPLOYMENT_TYPE = "employment_type" EMPLOYMENT_TYPE_FLSA_STATUS = "employment_type,flsa_status" EMPLOYMENT_TYPE_FLSA_STATUS_PAY_FREQUENCY = "employment_type,flsa_status,pay_frequency" diff --git a/src/merge/resources/hris/resources/employments/types/employments_retrieve_request_show_enum_origins.py b/src/merge/resources/hris/resources/employments/types/employments_retrieve_request_show_enum_origins.py index 60ec6042..84b46557 100644 --- a/src/merge/resources/hris/resources/employments/types/employments_retrieve_request_show_enum_origins.py +++ b/src/merge/resources/hris/resources/employments/types/employments_retrieve_request_show_enum_origins.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ......core import enum + T_Result = typing.TypeVar("T_Result") -class EmploymentsRetrieveRequestShowEnumOrigins(str, enum.Enum): +class EmploymentsRetrieveRequestShowEnumOrigins(enum.StrEnum): EMPLOYMENT_TYPE = "employment_type" EMPLOYMENT_TYPE_FLSA_STATUS = "employment_type,flsa_status" EMPLOYMENT_TYPE_FLSA_STATUS_PAY_FREQUENCY = "employment_type,flsa_status,pay_frequency" diff --git a/src/merge/resources/hris/resources/field_mapping/client.py b/src/merge/resources/hris/resources/field_mapping/client.py index 146d18df..bac8d581 100644 --- a/src/merge/resources/hris/resources/field_mapping/client.py +++ b/src/merge/resources/hris/resources/field_mapping/client.py @@ -73,7 +73,7 @@ def field_mappings_create( *, target_field_name: str, target_field_description: str, - remote_field_traversal_path: typing.Sequence[typing.Optional[typing.Any]], + remote_field_traversal_path: typing.Sequence[typing.Any], remote_method: str, remote_url_path: str, common_model_name: str, @@ -92,7 +92,7 @@ def field_mappings_create( target_field_description : str The description of the target field you want this remote field to map to. - remote_field_traversal_path : typing.Sequence[typing.Optional[typing.Any]] + remote_field_traversal_path : typing.Sequence[typing.Any] The field traversal path of the remote field listed when you hit the GET /remote-fields endpoint. remote_method : str @@ -187,7 +187,7 @@ def field_mappings_partial_update( field_mapping_id: str, *, remote_data_iteration_count: typing.Optional[int] = None, - remote_field_traversal_path: typing.Optional[typing.Sequence[typing.Optional[typing.Any]]] = OMIT, + remote_field_traversal_path: typing.Optional[typing.Sequence[typing.Any]] = OMIT, remote_method: typing.Optional[str] = OMIT, remote_url_path: typing.Optional[str] = OMIT, jmes_path: typing.Optional[str] = OMIT, @@ -203,7 +203,7 @@ def field_mappings_partial_update( remote_data_iteration_count : typing.Optional[int] Number of common model instances to iterate through when fetching remote data for field mappings. Defaults to 250 if not provided. - remote_field_traversal_path : typing.Optional[typing.Sequence[typing.Optional[typing.Any]]] + remote_field_traversal_path : typing.Optional[typing.Sequence[typing.Any]] The field traversal path of the remote field listed when you hit the GET /remote-fields endpoint. remote_method : typing.Optional[str] @@ -388,7 +388,7 @@ async def field_mappings_create( *, target_field_name: str, target_field_description: str, - remote_field_traversal_path: typing.Sequence[typing.Optional[typing.Any]], + remote_field_traversal_path: typing.Sequence[typing.Any], remote_method: str, remote_url_path: str, common_model_name: str, @@ -407,7 +407,7 @@ async def field_mappings_create( target_field_description : str The description of the target field you want this remote field to map to. - remote_field_traversal_path : typing.Sequence[typing.Optional[typing.Any]] + remote_field_traversal_path : typing.Sequence[typing.Any] The field traversal path of the remote field listed when you hit the GET /remote-fields endpoint. remote_method : str @@ -518,7 +518,7 @@ async def field_mappings_partial_update( field_mapping_id: str, *, remote_data_iteration_count: typing.Optional[int] = None, - remote_field_traversal_path: typing.Optional[typing.Sequence[typing.Optional[typing.Any]]] = OMIT, + remote_field_traversal_path: typing.Optional[typing.Sequence[typing.Any]] = OMIT, remote_method: typing.Optional[str] = OMIT, remote_url_path: typing.Optional[str] = OMIT, jmes_path: typing.Optional[str] = OMIT, @@ -534,7 +534,7 @@ async def field_mappings_partial_update( remote_data_iteration_count : typing.Optional[int] Number of common model instances to iterate through when fetching remote data for field mappings. Defaults to 250 if not provided. - remote_field_traversal_path : typing.Optional[typing.Sequence[typing.Optional[typing.Any]]] + remote_field_traversal_path : typing.Optional[typing.Sequence[typing.Any]] The field traversal path of the remote field listed when you hit the GET /remote-fields endpoint. remote_method : typing.Optional[str] diff --git a/src/merge/resources/hris/resources/field_mapping/raw_client.py b/src/merge/resources/hris/resources/field_mapping/raw_client.py index 829892b3..08078a00 100644 --- a/src/merge/resources/hris/resources/field_mapping/raw_client.py +++ b/src/merge/resources/hris/resources/field_mapping/raw_client.py @@ -7,12 +7,14 @@ from .....core.client_wrapper import AsyncClientWrapper, SyncClientWrapper from .....core.http_response import AsyncHttpResponse, HttpResponse from .....core.jsonable_encoder import jsonable_encoder +from .....core.parse_error import ParsingError from .....core.request_options import RequestOptions from .....core.unchecked_base_model import construct_type from ...types.external_target_field_api_response import ExternalTargetFieldApiResponse from ...types.field_mapping_api_instance_response import FieldMappingApiInstanceResponse from ...types.field_mapping_instance_response import FieldMappingInstanceResponse from ...types.remote_field_api_response import RemoteFieldApiResponse +from pydantic import ValidationError # this is used as the default value for optional parameters OMIT = typing.cast(typing.Any, ...) @@ -65,6 +67,10 @@ def field_mappings_retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) def field_mappings_create( @@ -72,7 +78,7 @@ def field_mappings_create( *, target_field_name: str, target_field_description: str, - remote_field_traversal_path: typing.Sequence[typing.Optional[typing.Any]], + remote_field_traversal_path: typing.Sequence[typing.Any], remote_method: str, remote_url_path: str, common_model_name: str, @@ -91,7 +97,7 @@ def field_mappings_create( target_field_description : str The description of the target field you want this remote field to map to. - remote_field_traversal_path : typing.Sequence[typing.Optional[typing.Any]] + remote_field_traversal_path : typing.Sequence[typing.Any] The field traversal path of the remote field listed when you hit the GET /remote-fields endpoint. remote_method : str @@ -151,6 +157,10 @@ def field_mappings_create( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) def field_mappings_destroy( @@ -189,6 +199,10 @@ def field_mappings_destroy( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) def field_mappings_partial_update( @@ -196,7 +210,7 @@ def field_mappings_partial_update( field_mapping_id: str, *, remote_data_iteration_count: typing.Optional[int] = None, - remote_field_traversal_path: typing.Optional[typing.Sequence[typing.Optional[typing.Any]]] = OMIT, + remote_field_traversal_path: typing.Optional[typing.Sequence[typing.Any]] = OMIT, remote_method: typing.Optional[str] = OMIT, remote_url_path: typing.Optional[str] = OMIT, jmes_path: typing.Optional[str] = OMIT, @@ -212,7 +226,7 @@ def field_mappings_partial_update( remote_data_iteration_count : typing.Optional[int] Number of common model instances to iterate through when fetching remote data for field mappings. Defaults to 250 if not provided. - remote_field_traversal_path : typing.Optional[typing.Sequence[typing.Optional[typing.Any]]] + remote_field_traversal_path : typing.Optional[typing.Sequence[typing.Any]] The field traversal path of the remote field listed when you hit the GET /remote-fields endpoint. remote_method : typing.Optional[str] @@ -263,6 +277,10 @@ def field_mappings_partial_update( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) def remote_fields_retrieve( @@ -313,6 +331,10 @@ def remote_fields_retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) def target_fields_retrieve( @@ -349,6 +371,10 @@ def target_fields_retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) @@ -399,6 +425,10 @@ async def field_mappings_retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) async def field_mappings_create( @@ -406,7 +436,7 @@ async def field_mappings_create( *, target_field_name: str, target_field_description: str, - remote_field_traversal_path: typing.Sequence[typing.Optional[typing.Any]], + remote_field_traversal_path: typing.Sequence[typing.Any], remote_method: str, remote_url_path: str, common_model_name: str, @@ -425,7 +455,7 @@ async def field_mappings_create( target_field_description : str The description of the target field you want this remote field to map to. - remote_field_traversal_path : typing.Sequence[typing.Optional[typing.Any]] + remote_field_traversal_path : typing.Sequence[typing.Any] The field traversal path of the remote field listed when you hit the GET /remote-fields endpoint. remote_method : str @@ -485,6 +515,10 @@ async def field_mappings_create( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) async def field_mappings_destroy( @@ -523,6 +557,10 @@ async def field_mappings_destroy( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) async def field_mappings_partial_update( @@ -530,7 +568,7 @@ async def field_mappings_partial_update( field_mapping_id: str, *, remote_data_iteration_count: typing.Optional[int] = None, - remote_field_traversal_path: typing.Optional[typing.Sequence[typing.Optional[typing.Any]]] = OMIT, + remote_field_traversal_path: typing.Optional[typing.Sequence[typing.Any]] = OMIT, remote_method: typing.Optional[str] = OMIT, remote_url_path: typing.Optional[str] = OMIT, jmes_path: typing.Optional[str] = OMIT, @@ -546,7 +584,7 @@ async def field_mappings_partial_update( remote_data_iteration_count : typing.Optional[int] Number of common model instances to iterate through when fetching remote data for field mappings. Defaults to 250 if not provided. - remote_field_traversal_path : typing.Optional[typing.Sequence[typing.Optional[typing.Any]]] + remote_field_traversal_path : typing.Optional[typing.Sequence[typing.Any]] The field traversal path of the remote field listed when you hit the GET /remote-fields endpoint. remote_method : typing.Optional[str] @@ -597,6 +635,10 @@ async def field_mappings_partial_update( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) async def remote_fields_retrieve( @@ -647,6 +689,10 @@ async def remote_fields_retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) async def target_fields_retrieve( @@ -683,4 +729,8 @@ async def target_fields_retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) diff --git a/src/merge/resources/hris/resources/force_resync/raw_client.py b/src/merge/resources/hris/resources/force_resync/raw_client.py index 53b5a1bd..9eb6e636 100644 --- a/src/merge/resources/hris/resources/force_resync/raw_client.py +++ b/src/merge/resources/hris/resources/force_resync/raw_client.py @@ -6,9 +6,11 @@ from .....core.api_error import ApiError from .....core.client_wrapper import AsyncClientWrapper, SyncClientWrapper from .....core.http_response import AsyncHttpResponse, HttpResponse +from .....core.parse_error import ParsingError from .....core.request_options import RequestOptions from .....core.unchecked_base_model import construct_type from ...types.sync_status import SyncStatus +from pydantic import ValidationError class RawForceResyncClient: @@ -49,6 +51,10 @@ def sync_status_resync_create( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) @@ -90,4 +96,8 @@ async def sync_status_resync_create( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) diff --git a/src/merge/resources/hris/resources/generate_key/raw_client.py b/src/merge/resources/hris/resources/generate_key/raw_client.py index 2e28e450..4a066fdc 100644 --- a/src/merge/resources/hris/resources/generate_key/raw_client.py +++ b/src/merge/resources/hris/resources/generate_key/raw_client.py @@ -6,9 +6,11 @@ from .....core.api_error import ApiError from .....core.client_wrapper import AsyncClientWrapper, SyncClientWrapper from .....core.http_response import AsyncHttpResponse, HttpResponse +from .....core.parse_error import ParsingError from .....core.request_options import RequestOptions from .....core.unchecked_base_model import construct_type from ...types.remote_key import RemoteKey +from pydantic import ValidationError # this is used as the default value for optional parameters OMIT = typing.cast(typing.Any, ...) @@ -60,6 +62,10 @@ def create(self, *, name: str, request_options: typing.Optional[RequestOptions] _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) @@ -111,4 +117,8 @@ async def create( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) diff --git a/src/merge/resources/hris/resources/groups/__init__.py b/src/merge/resources/hris/resources/groups/__init__.py index 56aafbd7..0886a391 100644 --- a/src/merge/resources/hris/resources/groups/__init__.py +++ b/src/merge/resources/hris/resources/groups/__init__.py @@ -16,8 +16,10 @@ def __getattr__(attr_name: str) -> typing.Any: raise AttributeError(f"No {attr_name} found in _dynamic_imports for module name -> {__name__}") try: module = import_module(module_name, __package__) - result = getattr(module, attr_name) - return result + if module_name == f".{attr_name}": + return module + else: + return getattr(module, attr_name) except ImportError as e: raise ImportError(f"Failed to import {attr_name} from {module_name}: {e}") from e except AttributeError as e: diff --git a/src/merge/resources/hris/resources/groups/raw_client.py b/src/merge/resources/hris/resources/groups/raw_client.py index 2bb5c82a..22150cbc 100644 --- a/src/merge/resources/hris/resources/groups/raw_client.py +++ b/src/merge/resources/hris/resources/groups/raw_client.py @@ -9,11 +9,13 @@ from .....core.datetime_utils import serialize_datetime from .....core.http_response import AsyncHttpResponse, HttpResponse from .....core.jsonable_encoder import jsonable_encoder +from .....core.parse_error import ParsingError from .....core.request_options import RequestOptions from .....core.unchecked_base_model import construct_type from ...types.group import Group from ...types.paginated_group_list import PaginatedGroupList from .types.groups_types_list_response import GroupsTypesListResponse +from pydantic import ValidationError class RawGroupsClient: @@ -133,6 +135,10 @@ def list( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) def retrieve( @@ -196,6 +202,10 @@ def retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) def types_list( @@ -246,6 +256,10 @@ def types_list( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) @@ -366,6 +380,10 @@ async def list( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) async def retrieve( @@ -429,6 +447,10 @@ async def retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) async def types_list( @@ -479,4 +501,8 @@ async def types_list( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) diff --git a/src/merge/resources/hris/resources/groups/types/__init__.py b/src/merge/resources/hris/resources/groups/types/__init__.py index 458d6e0c..e8e8c32a 100644 --- a/src/merge/resources/hris/resources/groups/types/__init__.py +++ b/src/merge/resources/hris/resources/groups/types/__init__.py @@ -16,8 +16,10 @@ def __getattr__(attr_name: str) -> typing.Any: raise AttributeError(f"No {attr_name} found in _dynamic_imports for module name -> {__name__}") try: module = import_module(module_name, __package__) - result = getattr(module, attr_name) - return result + if module_name == f".{attr_name}": + return module + else: + return getattr(module, attr_name) except ImportError as e: raise ImportError(f"Failed to import {attr_name} from {module_name}: {e}") from e except AttributeError as e: diff --git a/src/merge/resources/hris/resources/issues/__init__.py b/src/merge/resources/hris/resources/issues/__init__.py index 3ca1094b..45b33fe1 100644 --- a/src/merge/resources/hris/resources/issues/__init__.py +++ b/src/merge/resources/hris/resources/issues/__init__.py @@ -16,8 +16,10 @@ def __getattr__(attr_name: str) -> typing.Any: raise AttributeError(f"No {attr_name} found in _dynamic_imports for module name -> {__name__}") try: module = import_module(module_name, __package__) - result = getattr(module, attr_name) - return result + if module_name == f".{attr_name}": + return module + else: + return getattr(module, attr_name) except ImportError as e: raise ImportError(f"Failed to import {attr_name} from {module_name}: {e}") from e except AttributeError as e: diff --git a/src/merge/resources/hris/resources/issues/raw_client.py b/src/merge/resources/hris/resources/issues/raw_client.py index bd80ca52..028435f0 100644 --- a/src/merge/resources/hris/resources/issues/raw_client.py +++ b/src/merge/resources/hris/resources/issues/raw_client.py @@ -9,11 +9,13 @@ from .....core.datetime_utils import serialize_datetime from .....core.http_response import AsyncHttpResponse, HttpResponse from .....core.jsonable_encoder import jsonable_encoder +from .....core.parse_error import ParsingError from .....core.request_options import RequestOptions from .....core.unchecked_base_model import construct_type from ...types.issue import Issue from ...types.paginated_issue_list import PaginatedIssueList from .types.issues_list_request_status import IssuesListRequestStatus +from pydantic import ValidationError class RawIssuesClient: @@ -136,6 +138,10 @@ def list( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) def retrieve(self, id: str, *, request_options: typing.Optional[RequestOptions] = None) -> HttpResponse[Issue]: @@ -172,6 +178,10 @@ def retrieve(self, id: str, *, request_options: typing.Optional[RequestOptions] _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) @@ -295,6 +305,10 @@ async def list( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) async def retrieve( @@ -333,4 +347,8 @@ async def retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) diff --git a/src/merge/resources/hris/resources/issues/types/__init__.py b/src/merge/resources/hris/resources/issues/types/__init__.py index 88fbf977..5e097583 100644 --- a/src/merge/resources/hris/resources/issues/types/__init__.py +++ b/src/merge/resources/hris/resources/issues/types/__init__.py @@ -16,8 +16,10 @@ def __getattr__(attr_name: str) -> typing.Any: raise AttributeError(f"No {attr_name} found in _dynamic_imports for module name -> {__name__}") try: module = import_module(module_name, __package__) - result = getattr(module, attr_name) - return result + if module_name == f".{attr_name}": + return module + else: + return getattr(module, attr_name) except ImportError as e: raise ImportError(f"Failed to import {attr_name} from {module_name}: {e}") from e except AttributeError as e: diff --git a/src/merge/resources/hris/resources/issues/types/issues_list_request_status.py b/src/merge/resources/hris/resources/issues/types/issues_list_request_status.py index 2bd3521e..a61afdd0 100644 --- a/src/merge/resources/hris/resources/issues/types/issues_list_request_status.py +++ b/src/merge/resources/hris/resources/issues/types/issues_list_request_status.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ......core import enum + T_Result = typing.TypeVar("T_Result") -class IssuesListRequestStatus(str, enum.Enum): +class IssuesListRequestStatus(enum.StrEnum): ONGOING = "ONGOING" RESOLVED = "RESOLVED" diff --git a/src/merge/resources/hris/resources/link_token/__init__.py b/src/merge/resources/hris/resources/link_token/__init__.py index 3bad6adf..15700960 100644 --- a/src/merge/resources/hris/resources/link_token/__init__.py +++ b/src/merge/resources/hris/resources/link_token/__init__.py @@ -16,8 +16,10 @@ def __getattr__(attr_name: str) -> typing.Any: raise AttributeError(f"No {attr_name} found in _dynamic_imports for module name -> {__name__}") try: module = import_module(module_name, __package__) - result = getattr(module, attr_name) - return result + if module_name == f".{attr_name}": + return module + else: + return getattr(module, attr_name) except ImportError as e: raise ImportError(f"Failed to import {attr_name} from {module_name}: {e}") from e except AttributeError as e: diff --git a/src/merge/resources/hris/resources/link_token/client.py b/src/merge/resources/hris/resources/link_token/client.py index ff209de8..7f66e0bc 100644 --- a/src/merge/resources/hris/resources/link_token/client.py +++ b/src/merge/resources/hris/resources/link_token/client.py @@ -47,7 +47,7 @@ def create( ] = OMIT, language: typing.Optional[EndUserDetailsRequestLanguage] = OMIT, are_syncs_disabled: typing.Optional[bool] = OMIT, - integration_specific_config: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = OMIT, + integration_specific_config: typing.Optional[typing.Dict[str, typing.Any]] = OMIT, linked_destination_id: typing.Optional[str] = OMIT, request_options: typing.Optional[RequestOptions] = None, ) -> LinkToken: @@ -95,7 +95,7 @@ def create( are_syncs_disabled : typing.Optional[bool] The boolean that indicates whether initial, periodic, and force syncs will be disabled. - integration_specific_config : typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] + integration_specific_config : typing.Optional[typing.Dict[str, typing.Any]] A JSON object containing integration-specific configuration options. linked_destination_id : typing.Optional[str] @@ -177,7 +177,7 @@ async def create( ] = OMIT, language: typing.Optional[EndUserDetailsRequestLanguage] = OMIT, are_syncs_disabled: typing.Optional[bool] = OMIT, - integration_specific_config: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = OMIT, + integration_specific_config: typing.Optional[typing.Dict[str, typing.Any]] = OMIT, linked_destination_id: typing.Optional[str] = OMIT, request_options: typing.Optional[RequestOptions] = None, ) -> LinkToken: @@ -225,7 +225,7 @@ async def create( are_syncs_disabled : typing.Optional[bool] The boolean that indicates whether initial, periodic, and force syncs will be disabled. - integration_specific_config : typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] + integration_specific_config : typing.Optional[typing.Dict[str, typing.Any]] A JSON object containing integration-specific configuration options. linked_destination_id : typing.Optional[str] diff --git a/src/merge/resources/hris/resources/link_token/raw_client.py b/src/merge/resources/hris/resources/link_token/raw_client.py index 68dcefa8..97c3ee03 100644 --- a/src/merge/resources/hris/resources/link_token/raw_client.py +++ b/src/merge/resources/hris/resources/link_token/raw_client.py @@ -6,6 +6,7 @@ from .....core.api_error import ApiError from .....core.client_wrapper import AsyncClientWrapper, SyncClientWrapper from .....core.http_response import AsyncHttpResponse, HttpResponse +from .....core.parse_error import ParsingError from .....core.request_options import RequestOptions from .....core.unchecked_base_model import construct_type from ...types.categories_enum import CategoriesEnum @@ -13,6 +14,7 @@ from ...types.individual_common_model_scope_deserializer_request import IndividualCommonModelScopeDeserializerRequest from ...types.link_token import LinkToken from .types.end_user_details_request_language import EndUserDetailsRequestLanguage +from pydantic import ValidationError # this is used as the default value for optional parameters OMIT = typing.cast(typing.Any, ...) @@ -39,7 +41,7 @@ def create( ] = OMIT, language: typing.Optional[EndUserDetailsRequestLanguage] = OMIT, are_syncs_disabled: typing.Optional[bool] = OMIT, - integration_specific_config: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = OMIT, + integration_specific_config: typing.Optional[typing.Dict[str, typing.Any]] = OMIT, linked_destination_id: typing.Optional[str] = OMIT, request_options: typing.Optional[RequestOptions] = None, ) -> HttpResponse[LinkToken]: @@ -87,7 +89,7 @@ def create( are_syncs_disabled : typing.Optional[bool] The boolean that indicates whether initial, periodic, and force syncs will be disabled. - integration_specific_config : typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] + integration_specific_config : typing.Optional[typing.Dict[str, typing.Any]] A JSON object containing integration-specific configuration options. linked_destination_id : typing.Optional[str] @@ -139,6 +141,10 @@ def create( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) @@ -163,7 +169,7 @@ async def create( ] = OMIT, language: typing.Optional[EndUserDetailsRequestLanguage] = OMIT, are_syncs_disabled: typing.Optional[bool] = OMIT, - integration_specific_config: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = OMIT, + integration_specific_config: typing.Optional[typing.Dict[str, typing.Any]] = OMIT, linked_destination_id: typing.Optional[str] = OMIT, request_options: typing.Optional[RequestOptions] = None, ) -> AsyncHttpResponse[LinkToken]: @@ -211,7 +217,7 @@ async def create( are_syncs_disabled : typing.Optional[bool] The boolean that indicates whether initial, periodic, and force syncs will be disabled. - integration_specific_config : typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] + integration_specific_config : typing.Optional[typing.Dict[str, typing.Any]] A JSON object containing integration-specific configuration options. linked_destination_id : typing.Optional[str] @@ -263,4 +269,8 @@ async def create( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) diff --git a/src/merge/resources/hris/resources/link_token/types/__init__.py b/src/merge/resources/hris/resources/link_token/types/__init__.py index e9a7d3b9..dad2a14a 100644 --- a/src/merge/resources/hris/resources/link_token/types/__init__.py +++ b/src/merge/resources/hris/resources/link_token/types/__init__.py @@ -16,8 +16,10 @@ def __getattr__(attr_name: str) -> typing.Any: raise AttributeError(f"No {attr_name} found in _dynamic_imports for module name -> {__name__}") try: module = import_module(module_name, __package__) - result = getattr(module, attr_name) - return result + if module_name == f".{attr_name}": + return module + else: + return getattr(module, attr_name) except ImportError as e: raise ImportError(f"Failed to import {attr_name} from {module_name}: {e}") from e except AttributeError as e: diff --git a/src/merge/resources/hris/resources/linked_accounts/__init__.py b/src/merge/resources/hris/resources/linked_accounts/__init__.py index 0b9e42b4..12e213b7 100644 --- a/src/merge/resources/hris/resources/linked_accounts/__init__.py +++ b/src/merge/resources/hris/resources/linked_accounts/__init__.py @@ -16,8 +16,10 @@ def __getattr__(attr_name: str) -> typing.Any: raise AttributeError(f"No {attr_name} found in _dynamic_imports for module name -> {__name__}") try: module = import_module(module_name, __package__) - result = getattr(module, attr_name) - return result + if module_name == f".{attr_name}": + return module + else: + return getattr(module, attr_name) except ImportError as e: raise ImportError(f"Failed to import {attr_name} from {module_name}: {e}") from e except AttributeError as e: diff --git a/src/merge/resources/hris/resources/linked_accounts/raw_client.py b/src/merge/resources/hris/resources/linked_accounts/raw_client.py index cd2639e5..5bf3e735 100644 --- a/src/merge/resources/hris/resources/linked_accounts/raw_client.py +++ b/src/merge/resources/hris/resources/linked_accounts/raw_client.py @@ -6,10 +6,12 @@ from .....core.api_error import ApiError from .....core.client_wrapper import AsyncClientWrapper, SyncClientWrapper from .....core.http_response import AsyncHttpResponse, HttpResponse +from .....core.parse_error import ParsingError from .....core.request_options import RequestOptions from .....core.unchecked_base_model import construct_type from ...types.paginated_account_details_and_actions_list import PaginatedAccountDetailsAndActionsList from .types.linked_accounts_list_request_category import LinkedAccountsListRequestCategory +from pydantic import ValidationError class RawLinkedAccountsClient: @@ -126,6 +128,10 @@ def list( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) @@ -243,4 +249,8 @@ async def list( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) diff --git a/src/merge/resources/hris/resources/linked_accounts/types/__init__.py b/src/merge/resources/hris/resources/linked_accounts/types/__init__.py index a28f38cc..a884db6a 100644 --- a/src/merge/resources/hris/resources/linked_accounts/types/__init__.py +++ b/src/merge/resources/hris/resources/linked_accounts/types/__init__.py @@ -18,8 +18,10 @@ def __getattr__(attr_name: str) -> typing.Any: raise AttributeError(f"No {attr_name} found in _dynamic_imports for module name -> {__name__}") try: module = import_module(module_name, __package__) - result = getattr(module, attr_name) - return result + if module_name == f".{attr_name}": + return module + else: + return getattr(module, attr_name) except ImportError as e: raise ImportError(f"Failed to import {attr_name} from {module_name}: {e}") from e except AttributeError as e: diff --git a/src/merge/resources/hris/resources/linked_accounts/types/linked_accounts_list_request_category.py b/src/merge/resources/hris/resources/linked_accounts/types/linked_accounts_list_request_category.py index bd873ea8..ce04d1de 100644 --- a/src/merge/resources/hris/resources/linked_accounts/types/linked_accounts_list_request_category.py +++ b/src/merge/resources/hris/resources/linked_accounts/types/linked_accounts_list_request_category.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ......core import enum + T_Result = typing.TypeVar("T_Result") -class LinkedAccountsListRequestCategory(str, enum.Enum): +class LinkedAccountsListRequestCategory(enum.StrEnum): ACCOUNTING = "accounting" ATS = "ats" CRM = "crm" diff --git a/src/merge/resources/hris/resources/locations/__init__.py b/src/merge/resources/hris/resources/locations/__init__.py index 173f8bf1..d803cdae 100644 --- a/src/merge/resources/hris/resources/locations/__init__.py +++ b/src/merge/resources/hris/resources/locations/__init__.py @@ -28,8 +28,10 @@ def __getattr__(attr_name: str) -> typing.Any: raise AttributeError(f"No {attr_name} found in _dynamic_imports for module name -> {__name__}") try: module = import_module(module_name, __package__) - result = getattr(module, attr_name) - return result + if module_name == f".{attr_name}": + return module + else: + return getattr(module, attr_name) except ImportError as e: raise ImportError(f"Failed to import {attr_name} from {module_name}: {e}") from e except AttributeError as e: diff --git a/src/merge/resources/hris/resources/locations/raw_client.py b/src/merge/resources/hris/resources/locations/raw_client.py index cdf539bd..3a8ecf5f 100644 --- a/src/merge/resources/hris/resources/locations/raw_client.py +++ b/src/merge/resources/hris/resources/locations/raw_client.py @@ -9,6 +9,7 @@ from .....core.datetime_utils import serialize_datetime from .....core.http_response import AsyncHttpResponse, HttpResponse from .....core.jsonable_encoder import jsonable_encoder +from .....core.parse_error import ParsingError from .....core.request_options import RequestOptions from .....core.unchecked_base_model import construct_type from ...types.location import Location @@ -18,6 +19,7 @@ from .types.locations_list_request_show_enum_origins import LocationsListRequestShowEnumOrigins from .types.locations_retrieve_request_remote_fields import LocationsRetrieveRequestRemoteFields from .types.locations_retrieve_request_show_enum_origins import LocationsRetrieveRequestShowEnumOrigins +from pydantic import ValidationError class RawLocationsClient: @@ -130,6 +132,10 @@ def list( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) def retrieve( @@ -193,6 +199,10 @@ def retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) @@ -306,6 +316,10 @@ async def list( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) async def retrieve( @@ -369,4 +383,8 @@ async def retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) diff --git a/src/merge/resources/hris/resources/locations/types/__init__.py b/src/merge/resources/hris/resources/locations/types/__init__.py index ef281848..9c0c9351 100644 --- a/src/merge/resources/hris/resources/locations/types/__init__.py +++ b/src/merge/resources/hris/resources/locations/types/__init__.py @@ -26,8 +26,10 @@ def __getattr__(attr_name: str) -> typing.Any: raise AttributeError(f"No {attr_name} found in _dynamic_imports for module name -> {__name__}") try: module = import_module(module_name, __package__) - result = getattr(module, attr_name) - return result + if module_name == f".{attr_name}": + return module + else: + return getattr(module, attr_name) except ImportError as e: raise ImportError(f"Failed to import {attr_name} from {module_name}: {e}") from e except AttributeError as e: diff --git a/src/merge/resources/hris/resources/locations/types/locations_list_request_location_type.py b/src/merge/resources/hris/resources/locations/types/locations_list_request_location_type.py index b24d33e7..dec42cdf 100644 --- a/src/merge/resources/hris/resources/locations/types/locations_list_request_location_type.py +++ b/src/merge/resources/hris/resources/locations/types/locations_list_request_location_type.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ......core import enum + T_Result = typing.TypeVar("T_Result") -class LocationsListRequestLocationType(str, enum.Enum): +class LocationsListRequestLocationType(enum.StrEnum): HOME = "HOME" WORK = "WORK" diff --git a/src/merge/resources/hris/resources/locations/types/locations_list_request_remote_fields.py b/src/merge/resources/hris/resources/locations/types/locations_list_request_remote_fields.py index bf820b9f..447c6f23 100644 --- a/src/merge/resources/hris/resources/locations/types/locations_list_request_remote_fields.py +++ b/src/merge/resources/hris/resources/locations/types/locations_list_request_remote_fields.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ......core import enum + T_Result = typing.TypeVar("T_Result") -class LocationsListRequestRemoteFields(str, enum.Enum): +class LocationsListRequestRemoteFields(enum.StrEnum): COUNTRY = "country" COUNTRY_LOCATION_TYPE = "country,location_type" LOCATION_TYPE = "location_type" diff --git a/src/merge/resources/hris/resources/locations/types/locations_list_request_show_enum_origins.py b/src/merge/resources/hris/resources/locations/types/locations_list_request_show_enum_origins.py index 6d2c01ef..a3d2f7c8 100644 --- a/src/merge/resources/hris/resources/locations/types/locations_list_request_show_enum_origins.py +++ b/src/merge/resources/hris/resources/locations/types/locations_list_request_show_enum_origins.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ......core import enum + T_Result = typing.TypeVar("T_Result") -class LocationsListRequestShowEnumOrigins(str, enum.Enum): +class LocationsListRequestShowEnumOrigins(enum.StrEnum): COUNTRY = "country" COUNTRY_LOCATION_TYPE = "country,location_type" LOCATION_TYPE = "location_type" diff --git a/src/merge/resources/hris/resources/locations/types/locations_retrieve_request_remote_fields.py b/src/merge/resources/hris/resources/locations/types/locations_retrieve_request_remote_fields.py index a1fb54ae..df7d813a 100644 --- a/src/merge/resources/hris/resources/locations/types/locations_retrieve_request_remote_fields.py +++ b/src/merge/resources/hris/resources/locations/types/locations_retrieve_request_remote_fields.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ......core import enum + T_Result = typing.TypeVar("T_Result") -class LocationsRetrieveRequestRemoteFields(str, enum.Enum): +class LocationsRetrieveRequestRemoteFields(enum.StrEnum): COUNTRY = "country" COUNTRY_LOCATION_TYPE = "country,location_type" LOCATION_TYPE = "location_type" diff --git a/src/merge/resources/hris/resources/locations/types/locations_retrieve_request_show_enum_origins.py b/src/merge/resources/hris/resources/locations/types/locations_retrieve_request_show_enum_origins.py index 5fabdd8e..b71408e7 100644 --- a/src/merge/resources/hris/resources/locations/types/locations_retrieve_request_show_enum_origins.py +++ b/src/merge/resources/hris/resources/locations/types/locations_retrieve_request_show_enum_origins.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ......core import enum + T_Result = typing.TypeVar("T_Result") -class LocationsRetrieveRequestShowEnumOrigins(str, enum.Enum): +class LocationsRetrieveRequestShowEnumOrigins(enum.StrEnum): COUNTRY = "country" COUNTRY_LOCATION_TYPE = "country,location_type" LOCATION_TYPE = "location_type" diff --git a/src/merge/resources/hris/resources/passthrough/raw_client.py b/src/merge/resources/hris/resources/passthrough/raw_client.py index 72abab9a..d7ec70bc 100644 --- a/src/merge/resources/hris/resources/passthrough/raw_client.py +++ b/src/merge/resources/hris/resources/passthrough/raw_client.py @@ -6,10 +6,12 @@ from .....core.api_error import ApiError from .....core.client_wrapper import AsyncClientWrapper, SyncClientWrapper from .....core.http_response import AsyncHttpResponse, HttpResponse +from .....core.parse_error import ParsingError from .....core.request_options import RequestOptions from .....core.unchecked_base_model import construct_type from ...types.data_passthrough_request import DataPassthroughRequest from ...types.remote_response import RemoteResponse +from pydantic import ValidationError # this is used as the default value for optional parameters OMIT = typing.cast(typing.Any, ...) @@ -60,6 +62,10 @@ def create( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) @@ -108,4 +114,8 @@ async def create( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) diff --git a/src/merge/resources/hris/resources/pay_groups/raw_client.py b/src/merge/resources/hris/resources/pay_groups/raw_client.py index 8a3fdb7d..ab9b3b70 100644 --- a/src/merge/resources/hris/resources/pay_groups/raw_client.py +++ b/src/merge/resources/hris/resources/pay_groups/raw_client.py @@ -9,10 +9,12 @@ from .....core.datetime_utils import serialize_datetime from .....core.http_response import AsyncHttpResponse, HttpResponse from .....core.jsonable_encoder import jsonable_encoder +from .....core.parse_error import ParsingError from .....core.request_options import RequestOptions from .....core.unchecked_base_model import construct_type from ...types.paginated_pay_group_list import PaginatedPayGroupList from ...types.pay_group import PayGroup +from pydantic import ValidationError class RawPayGroupsClient: @@ -107,6 +109,10 @@ def list( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) def retrieve( @@ -160,6 +166,10 @@ def retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) @@ -255,6 +265,10 @@ async def list( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) async def retrieve( @@ -308,4 +322,8 @@ async def retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) diff --git a/src/merge/resources/hris/resources/payroll_runs/__init__.py b/src/merge/resources/hris/resources/payroll_runs/__init__.py index 9d371263..7a6e55d5 100644 --- a/src/merge/resources/hris/resources/payroll_runs/__init__.py +++ b/src/merge/resources/hris/resources/payroll_runs/__init__.py @@ -28,8 +28,10 @@ def __getattr__(attr_name: str) -> typing.Any: raise AttributeError(f"No {attr_name} found in _dynamic_imports for module name -> {__name__}") try: module = import_module(module_name, __package__) - result = getattr(module, attr_name) - return result + if module_name == f".{attr_name}": + return module + else: + return getattr(module, attr_name) except ImportError as e: raise ImportError(f"Failed to import {attr_name} from {module_name}: {e}") from e except AttributeError as e: diff --git a/src/merge/resources/hris/resources/payroll_runs/raw_client.py b/src/merge/resources/hris/resources/payroll_runs/raw_client.py index ae455ae9..dda03be3 100644 --- a/src/merge/resources/hris/resources/payroll_runs/raw_client.py +++ b/src/merge/resources/hris/resources/payroll_runs/raw_client.py @@ -9,6 +9,7 @@ from .....core.datetime_utils import serialize_datetime from .....core.http_response import AsyncHttpResponse, HttpResponse from .....core.jsonable_encoder import jsonable_encoder +from .....core.parse_error import ParsingError from .....core.request_options import RequestOptions from .....core.unchecked_base_model import construct_type from ...types.paginated_payroll_run_list import PaginatedPayrollRunList @@ -18,6 +19,7 @@ from .types.payroll_runs_list_request_show_enum_origins import PayrollRunsListRequestShowEnumOrigins from .types.payroll_runs_retrieve_request_remote_fields import PayrollRunsRetrieveRequestRemoteFields from .types.payroll_runs_retrieve_request_show_enum_origins import PayrollRunsRetrieveRequestShowEnumOrigins +from pydantic import ValidationError class RawPayrollRunsClient: @@ -153,6 +155,10 @@ def list( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) def retrieve( @@ -216,6 +222,10 @@ def retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) @@ -352,6 +362,10 @@ async def list( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) async def retrieve( @@ -415,4 +429,8 @@ async def retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) diff --git a/src/merge/resources/hris/resources/payroll_runs/types/__init__.py b/src/merge/resources/hris/resources/payroll_runs/types/__init__.py index 36fb2bb1..054632af 100644 --- a/src/merge/resources/hris/resources/payroll_runs/types/__init__.py +++ b/src/merge/resources/hris/resources/payroll_runs/types/__init__.py @@ -26,8 +26,10 @@ def __getattr__(attr_name: str) -> typing.Any: raise AttributeError(f"No {attr_name} found in _dynamic_imports for module name -> {__name__}") try: module = import_module(module_name, __package__) - result = getattr(module, attr_name) - return result + if module_name == f".{attr_name}": + return module + else: + return getattr(module, attr_name) except ImportError as e: raise ImportError(f"Failed to import {attr_name} from {module_name}: {e}") from e except AttributeError as e: diff --git a/src/merge/resources/hris/resources/payroll_runs/types/payroll_runs_list_request_remote_fields.py b/src/merge/resources/hris/resources/payroll_runs/types/payroll_runs_list_request_remote_fields.py index 7ab87d64..c69e4905 100644 --- a/src/merge/resources/hris/resources/payroll_runs/types/payroll_runs_list_request_remote_fields.py +++ b/src/merge/resources/hris/resources/payroll_runs/types/payroll_runs_list_request_remote_fields.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ......core import enum + T_Result = typing.TypeVar("T_Result") -class PayrollRunsListRequestRemoteFields(str, enum.Enum): +class PayrollRunsListRequestRemoteFields(enum.StrEnum): RUN_STATE = "run_state" RUN_STATE_RUN_TYPE = "run_state,run_type" RUN_TYPE = "run_type" diff --git a/src/merge/resources/hris/resources/payroll_runs/types/payroll_runs_list_request_run_type.py b/src/merge/resources/hris/resources/payroll_runs/types/payroll_runs_list_request_run_type.py index 0a8acc2a..9b039cfd 100644 --- a/src/merge/resources/hris/resources/payroll_runs/types/payroll_runs_list_request_run_type.py +++ b/src/merge/resources/hris/resources/payroll_runs/types/payroll_runs_list_request_run_type.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ......core import enum + T_Result = typing.TypeVar("T_Result") -class PayrollRunsListRequestRunType(str, enum.Enum): +class PayrollRunsListRequestRunType(enum.StrEnum): CORRECTION = "CORRECTION" OFF_CYCLE = "OFF_CYCLE" REGULAR = "REGULAR" diff --git a/src/merge/resources/hris/resources/payroll_runs/types/payroll_runs_list_request_show_enum_origins.py b/src/merge/resources/hris/resources/payroll_runs/types/payroll_runs_list_request_show_enum_origins.py index d4d03e13..ce790522 100644 --- a/src/merge/resources/hris/resources/payroll_runs/types/payroll_runs_list_request_show_enum_origins.py +++ b/src/merge/resources/hris/resources/payroll_runs/types/payroll_runs_list_request_show_enum_origins.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ......core import enum + T_Result = typing.TypeVar("T_Result") -class PayrollRunsListRequestShowEnumOrigins(str, enum.Enum): +class PayrollRunsListRequestShowEnumOrigins(enum.StrEnum): RUN_STATE = "run_state" RUN_STATE_RUN_TYPE = "run_state,run_type" RUN_TYPE = "run_type" diff --git a/src/merge/resources/hris/resources/payroll_runs/types/payroll_runs_retrieve_request_remote_fields.py b/src/merge/resources/hris/resources/payroll_runs/types/payroll_runs_retrieve_request_remote_fields.py index 3a3b0653..bce3debf 100644 --- a/src/merge/resources/hris/resources/payroll_runs/types/payroll_runs_retrieve_request_remote_fields.py +++ b/src/merge/resources/hris/resources/payroll_runs/types/payroll_runs_retrieve_request_remote_fields.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ......core import enum + T_Result = typing.TypeVar("T_Result") -class PayrollRunsRetrieveRequestRemoteFields(str, enum.Enum): +class PayrollRunsRetrieveRequestRemoteFields(enum.StrEnum): RUN_STATE = "run_state" RUN_STATE_RUN_TYPE = "run_state,run_type" RUN_TYPE = "run_type" diff --git a/src/merge/resources/hris/resources/payroll_runs/types/payroll_runs_retrieve_request_show_enum_origins.py b/src/merge/resources/hris/resources/payroll_runs/types/payroll_runs_retrieve_request_show_enum_origins.py index ecc6fe99..72e2f28a 100644 --- a/src/merge/resources/hris/resources/payroll_runs/types/payroll_runs_retrieve_request_show_enum_origins.py +++ b/src/merge/resources/hris/resources/payroll_runs/types/payroll_runs_retrieve_request_show_enum_origins.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ......core import enum + T_Result = typing.TypeVar("T_Result") -class PayrollRunsRetrieveRequestShowEnumOrigins(str, enum.Enum): +class PayrollRunsRetrieveRequestShowEnumOrigins(enum.StrEnum): RUN_STATE = "run_state" RUN_STATE_RUN_TYPE = "run_state,run_type" RUN_TYPE = "run_type" diff --git a/src/merge/resources/hris/resources/regenerate_key/raw_client.py b/src/merge/resources/hris/resources/regenerate_key/raw_client.py index 4808ec48..20d2c535 100644 --- a/src/merge/resources/hris/resources/regenerate_key/raw_client.py +++ b/src/merge/resources/hris/resources/regenerate_key/raw_client.py @@ -6,9 +6,11 @@ from .....core.api_error import ApiError from .....core.client_wrapper import AsyncClientWrapper, SyncClientWrapper from .....core.http_response import AsyncHttpResponse, HttpResponse +from .....core.parse_error import ParsingError from .....core.request_options import RequestOptions from .....core.unchecked_base_model import construct_type from ...types.remote_key import RemoteKey +from pydantic import ValidationError # this is used as the default value for optional parameters OMIT = typing.cast(typing.Any, ...) @@ -60,6 +62,10 @@ def create(self, *, name: str, request_options: typing.Optional[RequestOptions] _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) @@ -111,4 +117,8 @@ async def create( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) diff --git a/src/merge/resources/hris/resources/scopes/raw_client.py b/src/merge/resources/hris/resources/scopes/raw_client.py index 51db897d..5a50e6cb 100644 --- a/src/merge/resources/hris/resources/scopes/raw_client.py +++ b/src/merge/resources/hris/resources/scopes/raw_client.py @@ -6,10 +6,12 @@ from .....core.api_error import ApiError from .....core.client_wrapper import AsyncClientWrapper, SyncClientWrapper from .....core.http_response import AsyncHttpResponse, HttpResponse +from .....core.parse_error import ParsingError from .....core.request_options import RequestOptions from .....core.unchecked_base_model import construct_type from ...types.common_model_scope_api import CommonModelScopeApi from ...types.individual_common_model_scope_deserializer_request import IndividualCommonModelScopeDeserializerRequest +from pydantic import ValidationError # this is used as the default value for optional parameters OMIT = typing.cast(typing.Any, ...) @@ -53,6 +55,10 @@ def default_scopes_retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) def linked_account_scopes_retrieve( @@ -89,6 +95,10 @@ def linked_account_scopes_retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) def linked_account_scopes_create( @@ -138,6 +148,10 @@ def linked_account_scopes_create( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) @@ -179,6 +193,10 @@ async def default_scopes_retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) async def linked_account_scopes_retrieve( @@ -215,6 +233,10 @@ async def linked_account_scopes_retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) async def linked_account_scopes_create( @@ -264,4 +286,8 @@ async def linked_account_scopes_create( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) diff --git a/src/merge/resources/hris/resources/sync_status/raw_client.py b/src/merge/resources/hris/resources/sync_status/raw_client.py index 5f49dd4b..c86191fb 100644 --- a/src/merge/resources/hris/resources/sync_status/raw_client.py +++ b/src/merge/resources/hris/resources/sync_status/raw_client.py @@ -6,9 +6,11 @@ from .....core.api_error import ApiError from .....core.client_wrapper import AsyncClientWrapper, SyncClientWrapper from .....core.http_response import AsyncHttpResponse, HttpResponse +from .....core.parse_error import ParsingError from .....core.request_options import RequestOptions from .....core.unchecked_base_model import construct_type from ...types.paginated_sync_status_list import PaginatedSyncStatusList +from pydantic import ValidationError class RawSyncStatusClient: @@ -63,6 +65,10 @@ def list( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) @@ -118,4 +124,8 @@ async def list( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) diff --git a/src/merge/resources/hris/resources/teams/raw_client.py b/src/merge/resources/hris/resources/teams/raw_client.py index 259503ae..aedaef04 100644 --- a/src/merge/resources/hris/resources/teams/raw_client.py +++ b/src/merge/resources/hris/resources/teams/raw_client.py @@ -9,10 +9,12 @@ from .....core.datetime_utils import serialize_datetime from .....core.http_response import AsyncHttpResponse, HttpResponse from .....core.jsonable_encoder import jsonable_encoder +from .....core.parse_error import ParsingError from .....core.request_options import RequestOptions from .....core.unchecked_base_model import construct_type from ...types.paginated_team_list import PaginatedTeamList from ...types.team import Team +from pydantic import ValidationError class RawTeamsClient: @@ -119,6 +121,10 @@ def list( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) def retrieve( @@ -179,6 +185,10 @@ def retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) @@ -286,6 +296,10 @@ async def list( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) async def retrieve( @@ -346,4 +360,8 @@ async def retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) diff --git a/src/merge/resources/hris/resources/time_off/__init__.py b/src/merge/resources/hris/resources/time_off/__init__.py index d9068e39..8effa630 100644 --- a/src/merge/resources/hris/resources/time_off/__init__.py +++ b/src/merge/resources/hris/resources/time_off/__init__.py @@ -34,8 +34,10 @@ def __getattr__(attr_name: str) -> typing.Any: raise AttributeError(f"No {attr_name} found in _dynamic_imports for module name -> {__name__}") try: module = import_module(module_name, __package__) - result = getattr(module, attr_name) - return result + if module_name == f".{attr_name}": + return module + else: + return getattr(module, attr_name) except ImportError as e: raise ImportError(f"Failed to import {attr_name} from {module_name}: {e}") from e except AttributeError as e: diff --git a/src/merge/resources/hris/resources/time_off/raw_client.py b/src/merge/resources/hris/resources/time_off/raw_client.py index d203ebf2..4697e78c 100644 --- a/src/merge/resources/hris/resources/time_off/raw_client.py +++ b/src/merge/resources/hris/resources/time_off/raw_client.py @@ -9,6 +9,7 @@ from .....core.datetime_utils import serialize_datetime from .....core.http_response import AsyncHttpResponse, HttpResponse from .....core.jsonable_encoder import jsonable_encoder +from .....core.parse_error import ParsingError from .....core.request_options import RequestOptions from .....core.unchecked_base_model import construct_type from ...types.meta_response import MetaResponse @@ -24,6 +25,7 @@ from .types.time_off_retrieve_request_expand_item import TimeOffRetrieveRequestExpandItem from .types.time_off_retrieve_request_remote_fields import TimeOffRetrieveRequestRemoteFields from .types.time_off_retrieve_request_show_enum_origins import TimeOffRetrieveRequestShowEnumOrigins +from pydantic import ValidationError # this is used as the default value for optional parameters OMIT = typing.cast(typing.Any, ...) @@ -191,6 +193,10 @@ def list( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) def create( @@ -251,6 +257,10 @@ def create( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) def retrieve( @@ -321,6 +331,10 @@ def retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) def meta_post_retrieve( @@ -357,6 +371,10 @@ def meta_post_retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) @@ -522,6 +540,10 @@ async def list( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) async def create( @@ -582,6 +604,10 @@ async def create( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) async def retrieve( @@ -652,6 +678,10 @@ async def retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) async def meta_post_retrieve( @@ -688,4 +718,8 @@ async def meta_post_retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) diff --git a/src/merge/resources/hris/resources/time_off/types/__init__.py b/src/merge/resources/hris/resources/time_off/types/__init__.py index f912c82c..a9e69149 100644 --- a/src/merge/resources/hris/resources/time_off/types/__init__.py +++ b/src/merge/resources/hris/resources/time_off/types/__init__.py @@ -32,8 +32,10 @@ def __getattr__(attr_name: str) -> typing.Any: raise AttributeError(f"No {attr_name} found in _dynamic_imports for module name -> {__name__}") try: module = import_module(module_name, __package__) - result = getattr(module, attr_name) - return result + if module_name == f".{attr_name}": + return module + else: + return getattr(module, attr_name) except ImportError as e: raise ImportError(f"Failed to import {attr_name} from {module_name}: {e}") from e except AttributeError as e: diff --git a/src/merge/resources/hris/resources/time_off/types/time_off_list_request_expand_item.py b/src/merge/resources/hris/resources/time_off/types/time_off_list_request_expand_item.py index d15bb0b9..f881b857 100644 --- a/src/merge/resources/hris/resources/time_off/types/time_off_list_request_expand_item.py +++ b/src/merge/resources/hris/resources/time_off/types/time_off_list_request_expand_item.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ......core import enum + T_Result = typing.TypeVar("T_Result") -class TimeOffListRequestExpandItem(str, enum.Enum): +class TimeOffListRequestExpandItem(enum.StrEnum): APPROVER = "approver" EMPLOYEE = "employee" diff --git a/src/merge/resources/hris/resources/time_off/types/time_off_list_request_remote_fields.py b/src/merge/resources/hris/resources/time_off/types/time_off_list_request_remote_fields.py index 4f22e08e..19657eb9 100644 --- a/src/merge/resources/hris/resources/time_off/types/time_off_list_request_remote_fields.py +++ b/src/merge/resources/hris/resources/time_off/types/time_off_list_request_remote_fields.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ......core import enum + T_Result = typing.TypeVar("T_Result") -class TimeOffListRequestRemoteFields(str, enum.Enum): +class TimeOffListRequestRemoteFields(enum.StrEnum): REQUEST_TYPE = "request_type" REQUEST_TYPE_STATUS = "request_type,status" REQUEST_TYPE_STATUS_UNITS = "request_type,status,units" diff --git a/src/merge/resources/hris/resources/time_off/types/time_off_list_request_request_type.py b/src/merge/resources/hris/resources/time_off/types/time_off_list_request_request_type.py index bacc5d5c..16251d35 100644 --- a/src/merge/resources/hris/resources/time_off/types/time_off_list_request_request_type.py +++ b/src/merge/resources/hris/resources/time_off/types/time_off_list_request_request_type.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ......core import enum + T_Result = typing.TypeVar("T_Result") -class TimeOffListRequestRequestType(str, enum.Enum): +class TimeOffListRequestRequestType(enum.StrEnum): BEREAVEMENT = "BEREAVEMENT" JURY_DUTY = "JURY_DUTY" PERSONAL = "PERSONAL" diff --git a/src/merge/resources/hris/resources/time_off/types/time_off_list_request_show_enum_origins.py b/src/merge/resources/hris/resources/time_off/types/time_off_list_request_show_enum_origins.py index 15187c89..fb06b963 100644 --- a/src/merge/resources/hris/resources/time_off/types/time_off_list_request_show_enum_origins.py +++ b/src/merge/resources/hris/resources/time_off/types/time_off_list_request_show_enum_origins.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ......core import enum + T_Result = typing.TypeVar("T_Result") -class TimeOffListRequestShowEnumOrigins(str, enum.Enum): +class TimeOffListRequestShowEnumOrigins(enum.StrEnum): REQUEST_TYPE = "request_type" REQUEST_TYPE_STATUS = "request_type,status" REQUEST_TYPE_STATUS_UNITS = "request_type,status,units" diff --git a/src/merge/resources/hris/resources/time_off/types/time_off_list_request_status.py b/src/merge/resources/hris/resources/time_off/types/time_off_list_request_status.py index 40bdbd45..d096e1df 100644 --- a/src/merge/resources/hris/resources/time_off/types/time_off_list_request_status.py +++ b/src/merge/resources/hris/resources/time_off/types/time_off_list_request_status.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ......core import enum + T_Result = typing.TypeVar("T_Result") -class TimeOffListRequestStatus(str, enum.Enum): +class TimeOffListRequestStatus(enum.StrEnum): APPROVED = "APPROVED" CANCELLED = "CANCELLED" DECLINED = "DECLINED" diff --git a/src/merge/resources/hris/resources/time_off/types/time_off_retrieve_request_expand_item.py b/src/merge/resources/hris/resources/time_off/types/time_off_retrieve_request_expand_item.py index fd546818..79c5d9cc 100644 --- a/src/merge/resources/hris/resources/time_off/types/time_off_retrieve_request_expand_item.py +++ b/src/merge/resources/hris/resources/time_off/types/time_off_retrieve_request_expand_item.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ......core import enum + T_Result = typing.TypeVar("T_Result") -class TimeOffRetrieveRequestExpandItem(str, enum.Enum): +class TimeOffRetrieveRequestExpandItem(enum.StrEnum): APPROVER = "approver" EMPLOYEE = "employee" diff --git a/src/merge/resources/hris/resources/time_off/types/time_off_retrieve_request_remote_fields.py b/src/merge/resources/hris/resources/time_off/types/time_off_retrieve_request_remote_fields.py index e76db22a..cbcd1789 100644 --- a/src/merge/resources/hris/resources/time_off/types/time_off_retrieve_request_remote_fields.py +++ b/src/merge/resources/hris/resources/time_off/types/time_off_retrieve_request_remote_fields.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ......core import enum + T_Result = typing.TypeVar("T_Result") -class TimeOffRetrieveRequestRemoteFields(str, enum.Enum): +class TimeOffRetrieveRequestRemoteFields(enum.StrEnum): REQUEST_TYPE = "request_type" REQUEST_TYPE_STATUS = "request_type,status" REQUEST_TYPE_STATUS_UNITS = "request_type,status,units" diff --git a/src/merge/resources/hris/resources/time_off/types/time_off_retrieve_request_show_enum_origins.py b/src/merge/resources/hris/resources/time_off/types/time_off_retrieve_request_show_enum_origins.py index 079a76e8..67d296ec 100644 --- a/src/merge/resources/hris/resources/time_off/types/time_off_retrieve_request_show_enum_origins.py +++ b/src/merge/resources/hris/resources/time_off/types/time_off_retrieve_request_show_enum_origins.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ......core import enum + T_Result = typing.TypeVar("T_Result") -class TimeOffRetrieveRequestShowEnumOrigins(str, enum.Enum): +class TimeOffRetrieveRequestShowEnumOrigins(enum.StrEnum): REQUEST_TYPE = "request_type" REQUEST_TYPE_STATUS = "request_type,status" REQUEST_TYPE_STATUS_UNITS = "request_type,status,units" diff --git a/src/merge/resources/hris/resources/time_off_balances/__init__.py b/src/merge/resources/hris/resources/time_off_balances/__init__.py index 570dc594..c978f7c6 100644 --- a/src/merge/resources/hris/resources/time_off_balances/__init__.py +++ b/src/merge/resources/hris/resources/time_off_balances/__init__.py @@ -16,8 +16,10 @@ def __getattr__(attr_name: str) -> typing.Any: raise AttributeError(f"No {attr_name} found in _dynamic_imports for module name -> {__name__}") try: module = import_module(module_name, __package__) - result = getattr(module, attr_name) - return result + if module_name == f".{attr_name}": + return module + else: + return getattr(module, attr_name) except ImportError as e: raise ImportError(f"Failed to import {attr_name} from {module_name}: {e}") from e except AttributeError as e: diff --git a/src/merge/resources/hris/resources/time_off_balances/raw_client.py b/src/merge/resources/hris/resources/time_off_balances/raw_client.py index 9cd67f03..440da53e 100644 --- a/src/merge/resources/hris/resources/time_off_balances/raw_client.py +++ b/src/merge/resources/hris/resources/time_off_balances/raw_client.py @@ -9,11 +9,13 @@ from .....core.datetime_utils import serialize_datetime from .....core.http_response import AsyncHttpResponse, HttpResponse from .....core.jsonable_encoder import jsonable_encoder +from .....core.parse_error import ParsingError from .....core.request_options import RequestOptions from .....core.unchecked_base_model import construct_type 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 +from pydantic import ValidationError class RawTimeOffBalancesClient: @@ -142,6 +144,10 @@ def list( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) def retrieve( @@ -212,6 +218,10 @@ def retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) @@ -341,6 +351,10 @@ async def list( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) async def retrieve( @@ -411,4 +425,8 @@ async def retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) diff --git a/src/merge/resources/hris/resources/time_off_balances/types/__init__.py b/src/merge/resources/hris/resources/time_off_balances/types/__init__.py index a517cd9a..6011d7a2 100644 --- a/src/merge/resources/hris/resources/time_off_balances/types/__init__.py +++ b/src/merge/resources/hris/resources/time_off_balances/types/__init__.py @@ -18,8 +18,10 @@ def __getattr__(attr_name: str) -> typing.Any: raise AttributeError(f"No {attr_name} found in _dynamic_imports for module name -> {__name__}") try: module = import_module(module_name, __package__) - result = getattr(module, attr_name) - return result + if module_name == f".{attr_name}": + return module + else: + return getattr(module, attr_name) except ImportError as e: raise ImportError(f"Failed to import {attr_name} from {module_name}: {e}") from e except AttributeError as e: diff --git a/src/merge/resources/hris/resources/time_off_balances/types/time_off_balances_list_request_policy_type.py b/src/merge/resources/hris/resources/time_off_balances/types/time_off_balances_list_request_policy_type.py index e2f96117..1b8a9d29 100644 --- a/src/merge/resources/hris/resources/time_off_balances/types/time_off_balances_list_request_policy_type.py +++ b/src/merge/resources/hris/resources/time_off_balances/types/time_off_balances_list_request_policy_type.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ......core import enum + T_Result = typing.TypeVar("T_Result") -class TimeOffBalancesListRequestPolicyType(str, enum.Enum): +class TimeOffBalancesListRequestPolicyType(enum.StrEnum): BEREAVEMENT = "BEREAVEMENT" JURY_DUTY = "JURY_DUTY" PERSONAL = "PERSONAL" diff --git a/src/merge/resources/hris/resources/timesheet_entries/__init__.py b/src/merge/resources/hris/resources/timesheet_entries/__init__.py index edf3ff9c..5525e060 100644 --- a/src/merge/resources/hris/resources/timesheet_entries/__init__.py +++ b/src/merge/resources/hris/resources/timesheet_entries/__init__.py @@ -16,8 +16,10 @@ def __getattr__(attr_name: str) -> typing.Any: raise AttributeError(f"No {attr_name} found in _dynamic_imports for module name -> {__name__}") try: module = import_module(module_name, __package__) - result = getattr(module, attr_name) - return result + if module_name == f".{attr_name}": + return module + else: + return getattr(module, attr_name) except ImportError as e: raise ImportError(f"Failed to import {attr_name} from {module_name}: {e}") from e except AttributeError as e: diff --git a/src/merge/resources/hris/resources/timesheet_entries/raw_client.py b/src/merge/resources/hris/resources/timesheet_entries/raw_client.py index 32019fb2..71e55068 100644 --- a/src/merge/resources/hris/resources/timesheet_entries/raw_client.py +++ b/src/merge/resources/hris/resources/timesheet_entries/raw_client.py @@ -9,6 +9,7 @@ from .....core.datetime_utils import serialize_datetime from .....core.http_response import AsyncHttpResponse, HttpResponse from .....core.jsonable_encoder import jsonable_encoder +from .....core.parse_error import ParsingError from .....core.request_options import RequestOptions from .....core.unchecked_base_model import construct_type from ...types.meta_response import MetaResponse @@ -17,6 +18,7 @@ from ...types.timesheet_entry_request import TimesheetEntryRequest from ...types.timesheet_entry_response import TimesheetEntryResponse from .types.timesheet_entries_list_request_order_by import TimesheetEntriesListRequestOrderBy +from pydantic import ValidationError # this is used as the default value for optional parameters OMIT = typing.cast(typing.Any, ...) @@ -151,6 +153,10 @@ def list( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) def create( @@ -211,6 +217,10 @@ def create( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) def retrieve( @@ -271,6 +281,10 @@ def retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) def meta_post_retrieve( @@ -307,6 +321,10 @@ def meta_post_retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) @@ -439,6 +457,10 @@ async def list( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) async def create( @@ -499,6 +521,10 @@ async def create( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) async def retrieve( @@ -559,6 +585,10 @@ async def retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) async def meta_post_retrieve( @@ -595,4 +625,8 @@ async def meta_post_retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) diff --git a/src/merge/resources/hris/resources/timesheet_entries/types/__init__.py b/src/merge/resources/hris/resources/timesheet_entries/types/__init__.py index af47f1f5..62b33037 100644 --- a/src/merge/resources/hris/resources/timesheet_entries/types/__init__.py +++ b/src/merge/resources/hris/resources/timesheet_entries/types/__init__.py @@ -18,8 +18,10 @@ def __getattr__(attr_name: str) -> typing.Any: raise AttributeError(f"No {attr_name} found in _dynamic_imports for module name -> {__name__}") try: module = import_module(module_name, __package__) - result = getattr(module, attr_name) - return result + if module_name == f".{attr_name}": + return module + else: + return getattr(module, attr_name) except ImportError as e: raise ImportError(f"Failed to import {attr_name} from {module_name}: {e}") from e except AttributeError as e: diff --git a/src/merge/resources/hris/resources/timesheet_entries/types/timesheet_entries_list_request_order_by.py b/src/merge/resources/hris/resources/timesheet_entries/types/timesheet_entries_list_request_order_by.py index bd5713ff..caaddd7a 100644 --- a/src/merge/resources/hris/resources/timesheet_entries/types/timesheet_entries_list_request_order_by.py +++ b/src/merge/resources/hris/resources/timesheet_entries/types/timesheet_entries_list_request_order_by.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ......core import enum + T_Result = typing.TypeVar("T_Result") -class TimesheetEntriesListRequestOrderBy(str, enum.Enum): +class TimesheetEntriesListRequestOrderBy(enum.StrEnum): START_TIME_DESCENDING = "-start_time" START_TIME_ASCENDING = "start_time" diff --git a/src/merge/resources/hris/resources/webhook_receivers/raw_client.py b/src/merge/resources/hris/resources/webhook_receivers/raw_client.py index 436fce7b..4ce065e2 100644 --- a/src/merge/resources/hris/resources/webhook_receivers/raw_client.py +++ b/src/merge/resources/hris/resources/webhook_receivers/raw_client.py @@ -6,9 +6,11 @@ from .....core.api_error import ApiError from .....core.client_wrapper import AsyncClientWrapper, SyncClientWrapper from .....core.http_response import AsyncHttpResponse, HttpResponse +from .....core.parse_error import ParsingError from .....core.request_options import RequestOptions from .....core.unchecked_base_model import construct_type from ...types.webhook_receiver import WebhookReceiver +from pydantic import ValidationError # this is used as the default value for optional parameters OMIT = typing.cast(typing.Any, ...) @@ -52,6 +54,10 @@ def list( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) def create( @@ -108,6 +114,10 @@ def create( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) @@ -149,6 +159,10 @@ async def list( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) async def create( @@ -205,4 +219,8 @@ async def create( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) diff --git a/src/merge/resources/hris/types/__init__.py b/src/merge/resources/hris/types/__init__.py index 78d9efdc..a29c5710 100644 --- a/src/merge/resources/hris/types/__init__.py +++ b/src/merge/resources/hris/types/__init__.py @@ -422,8 +422,10 @@ def __getattr__(attr_name: str) -> typing.Any: raise AttributeError(f"No {attr_name} found in _dynamic_imports for module name -> {__name__}") try: module = import_module(module_name, __package__) - result = getattr(module, attr_name) - return result + if module_name == f".{attr_name}": + return module + else: + return getattr(module, attr_name) except ImportError as e: raise ImportError(f"Failed to import {attr_name} from {module_name}: {e}") from e except AttributeError as e: diff --git a/src/merge/resources/hris/types/account_details_and_actions.py b/src/merge/resources/hris/types/account_details_and_actions.py index 93c874ed..cbf29cb3 100644 --- a/src/merge/resources/hris/types/account_details_and_actions.py +++ b/src/merge/resources/hris/types/account_details_and_actions.py @@ -42,7 +42,7 @@ class AccountDetailsAndActions(UncheckedBaseModel): integration: typing.Optional[AccountDetailsAndActionsIntegration] = None account_type: str completed_at: dt.datetime - integration_specific_fields: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None + integration_specific_fields: typing.Optional[typing.Dict[str, typing.Any]] = None if IS_PYDANTIC_V2: model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2 diff --git a/src/merge/resources/hris/types/account_details_and_actions_status_enum.py b/src/merge/resources/hris/types/account_details_and_actions_status_enum.py index df37f582..b9ae9efc 100644 --- a/src/merge/resources/hris/types/account_details_and_actions_status_enum.py +++ b/src/merge/resources/hris/types/account_details_and_actions_status_enum.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ....core import enum + T_Result = typing.TypeVar("T_Result") -class AccountDetailsAndActionsStatusEnum(str, enum.Enum): +class AccountDetailsAndActionsStatusEnum(enum.StrEnum): """ * `COMPLETE` - COMPLETE * `INCOMPLETE` - INCOMPLETE diff --git a/src/merge/resources/hris/types/account_integration.py b/src/merge/resources/hris/types/account_integration.py index ef8b260d..7bc872ca 100644 --- a/src/merge/resources/hris/types/account_integration.py +++ b/src/merge/resources/hris/types/account_integration.py @@ -40,9 +40,7 @@ class AccountIntegration(UncheckedBaseModel): """ slug: typing.Optional[str] = None - api_endpoints_to_documentation_urls: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = ( - pydantic.Field(default=None) - ) + api_endpoints_to_documentation_urls: typing.Optional[typing.Dict[str, typing.Any]] = pydantic.Field(default=None) """ Mapping of API endpoints to documentation urls for support. Example: {'GET': [['/common-model-scopes', 'https://docs.merge.dev/accounting/common-model-scopes/#common_model_scopes_retrieve'],['/common-model-actions', 'https://docs.merge.dev/accounting/common-model-actions/#common_model_actions_retrieve']], 'POST': []} """ @@ -52,7 +50,7 @@ class AccountIntegration(UncheckedBaseModel): Setup guide URL for third party webhook creation. Exposed in Merge Docs. """ - category_beta_status: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = pydantic.Field(default=None) + category_beta_status: typing.Optional[typing.Dict[str, typing.Any]] = pydantic.Field(default=None) """ Category or categories this integration is in beta status for. """ diff --git a/src/merge/resources/hris/types/account_type_enum.py b/src/merge/resources/hris/types/account_type_enum.py index 2ec129e6..28b99ac3 100644 --- a/src/merge/resources/hris/types/account_type_enum.py +++ b/src/merge/resources/hris/types/account_type_enum.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ....core import enum + T_Result = typing.TypeVar("T_Result") -class AccountTypeEnum(str, enum.Enum): +class AccountTypeEnum(enum.StrEnum): """ * `SAVINGS` - SAVINGS * `CHECKING` - CHECKING diff --git a/src/merge/resources/hris/types/advanced_metadata.py b/src/merge/resources/hris/types/advanced_metadata.py index 60b5d072..aef64bb3 100644 --- a/src/merge/resources/hris/types/advanced_metadata.py +++ b/src/merge/resources/hris/types/advanced_metadata.py @@ -13,7 +13,7 @@ class AdvancedMetadata(UncheckedBaseModel): description: typing.Optional[str] = None is_required: typing.Optional[bool] = None is_custom: typing.Optional[bool] = None - field_choices: typing.Optional[typing.List[typing.Optional[typing.Any]]] = None + field_choices: typing.Optional[typing.List[typing.Any]] = None if IS_PYDANTIC_V2: model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2 diff --git a/src/merge/resources/hris/types/bank_info.py b/src/merge/resources/hris/types/bank_info.py index 5cf08ec9..04b19c13 100644 --- a/src/merge/resources/hris/types/bank_info.py +++ b/src/merge/resources/hris/types/bank_info.py @@ -77,7 +77,7 @@ class BankInfo(UncheckedBaseModel): Indicates whether or not this object has been deleted in the third party platform. Full coverage deletion detection is a premium add-on. Native deletion detection is offered for free with limited coverage. [Learn more](https://docs.merge.dev/integrations/hris/supported-features/). """ - field_mappings: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None + field_mappings: typing.Optional[typing.Dict[str, typing.Any]] = None remote_data: typing.Optional[typing.List[RemoteData]] = None if IS_PYDANTIC_V2: @@ -90,8 +90,4 @@ class Config: extra = pydantic.Extra.allow -from .employee import Employee # noqa: E402, F401, I001 -from .employment import Employment # noqa: E402, F401, I001 -from .team import Team # noqa: E402, F401, I001 - update_forward_refs(BankInfo) diff --git a/src/merge/resources/hris/types/benefit.py b/src/merge/resources/hris/types/benefit.py index 3ceeb1bc..8201e9e9 100644 --- a/src/merge/resources/hris/types/benefit.py +++ b/src/merge/resources/hris/types/benefit.py @@ -83,7 +83,7 @@ class Benefit(UncheckedBaseModel): Indicates whether or not this object has been deleted in the third party platform. Full coverage deletion detection is a premium add-on. Native deletion detection is offered for free with limited coverage. [Learn more](https://docs.merge.dev/integrations/hris/supported-features/). """ - field_mappings: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None + field_mappings: typing.Optional[typing.Dict[str, typing.Any]] = None remote_data: typing.Optional[typing.List[RemoteData]] = None if IS_PYDANTIC_V2: @@ -96,8 +96,4 @@ class Config: extra = pydantic.Extra.allow -from .employee import Employee # noqa: E402, F401, I001 -from .employment import Employment # noqa: E402, F401, I001 -from .team import Team # noqa: E402, F401, I001 - update_forward_refs(Benefit) diff --git a/src/merge/resources/hris/types/benefit_plan_type_enum.py b/src/merge/resources/hris/types/benefit_plan_type_enum.py index 40b5fee1..9576c6f5 100644 --- a/src/merge/resources/hris/types/benefit_plan_type_enum.py +++ b/src/merge/resources/hris/types/benefit_plan_type_enum.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ....core import enum + T_Result = typing.TypeVar("T_Result") -class BenefitPlanTypeEnum(str, enum.Enum): +class BenefitPlanTypeEnum(enum.StrEnum): """ * `MEDICAL` - MEDICAL * `HEALTH_SAVINGS` - HEALTH_SAVINGS diff --git a/src/merge/resources/hris/types/categories_enum.py b/src/merge/resources/hris/types/categories_enum.py index 3f2dc5a9..82308151 100644 --- a/src/merge/resources/hris/types/categories_enum.py +++ b/src/merge/resources/hris/types/categories_enum.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ....core import enum + T_Result = typing.TypeVar("T_Result") -class CategoriesEnum(str, enum.Enum): +class CategoriesEnum(enum.StrEnum): """ * `hris` - hris * `ats` - ats diff --git a/src/merge/resources/hris/types/category_enum.py b/src/merge/resources/hris/types/category_enum.py index d37e48f5..9a2fa8c7 100644 --- a/src/merge/resources/hris/types/category_enum.py +++ b/src/merge/resources/hris/types/category_enum.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ....core import enum + T_Result = typing.TypeVar("T_Result") -class CategoryEnum(str, enum.Enum): +class CategoryEnum(enum.StrEnum): """ * `hris` - hris * `ats` - ats diff --git a/src/merge/resources/hris/types/company.py b/src/merge/resources/hris/types/company.py index 226660f0..f0453c74 100644 --- a/src/merge/resources/hris/types/company.py +++ b/src/merge/resources/hris/types/company.py @@ -55,7 +55,7 @@ class Company(UncheckedBaseModel): Indicates whether or not this object has been deleted in the third party platform. Full coverage deletion detection is a premium add-on. Native deletion detection is offered for free with limited coverage. [Learn more](https://docs.merge.dev/integrations/hris/supported-features/). """ - field_mappings: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None + field_mappings: typing.Optional[typing.Dict[str, typing.Any]] = None remote_data: typing.Optional[typing.List[RemoteData]] = None if IS_PYDANTIC_V2: diff --git a/src/merge/resources/hris/types/country_enum.py b/src/merge/resources/hris/types/country_enum.py index a631e320..f2dd1f87 100644 --- a/src/merge/resources/hris/types/country_enum.py +++ b/src/merge/resources/hris/types/country_enum.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ....core import enum + T_Result = typing.TypeVar("T_Result") -class CountryEnum(str, enum.Enum): +class CountryEnum(enum.StrEnum): """ * `AF` - Afghanistan * `AX` - Åland Islands diff --git a/src/merge/resources/hris/types/data_passthrough_request.py b/src/merge/resources/hris/types/data_passthrough_request.py index c9f0a799..df3af029 100644 --- a/src/merge/resources/hris/types/data_passthrough_request.py +++ b/src/merge/resources/hris/types/data_passthrough_request.py @@ -41,7 +41,7 @@ class DataPassthroughRequest(UncheckedBaseModel): Pass an array of `MultipartFormField` objects in here instead of using the `data` param if `request_format` is set to `MULTIPART`. """ - headers: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = pydantic.Field(default=None) + headers: typing.Optional[typing.Dict[str, typing.Any]] = pydantic.Field(default=None) """ The headers to use for the request (Merge will handle the account's authorization headers). `Content-Type` header is required for passthrough. Choose content type corresponding to expected format of receiving server. """ diff --git a/src/merge/resources/hris/types/deduction.py b/src/merge/resources/hris/types/deduction.py index 22130e29..dbdda789 100644 --- a/src/merge/resources/hris/types/deduction.py +++ b/src/merge/resources/hris/types/deduction.py @@ -56,7 +56,7 @@ class Deduction(UncheckedBaseModel): Indicates whether or not this object has been deleted in the third party platform. Full coverage deletion detection is a premium add-on. Native deletion detection is offered for free with limited coverage. [Learn more](https://docs.merge.dev/integrations/hris/supported-features/). """ - field_mappings: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None + field_mappings: typing.Optional[typing.Dict[str, typing.Any]] = None remote_data: typing.Optional[typing.List[RemoteData]] = None if IS_PYDANTIC_V2: diff --git a/src/merge/resources/hris/types/dependent.py b/src/merge/resources/hris/types/dependent.py index 63957fcb..761c5f09 100644 --- a/src/merge/resources/hris/types/dependent.py +++ b/src/merge/resources/hris/types/dependent.py @@ -107,7 +107,7 @@ class Dependent(UncheckedBaseModel): Indicates whether or not this object has been deleted in the third party platform. Full coverage deletion detection is a premium add-on. Native deletion detection is offered for free with limited coverage. [Learn more](https://docs.merge.dev/integrations/hris/supported-features/). """ - field_mappings: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None + field_mappings: typing.Optional[typing.Dict[str, typing.Any]] = None remote_data: typing.Optional[typing.List[RemoteData]] = None if IS_PYDANTIC_V2: diff --git a/src/merge/resources/hris/types/earning.py b/src/merge/resources/hris/types/earning.py index 6868fd57..dcd7a778 100644 --- a/src/merge/resources/hris/types/earning.py +++ b/src/merge/resources/hris/types/earning.py @@ -57,7 +57,7 @@ class Earning(UncheckedBaseModel): Indicates whether or not this object has been deleted in the third party platform. Full coverage deletion detection is a premium add-on. Native deletion detection is offered for free with limited coverage. [Learn more](https://docs.merge.dev/integrations/hris/supported-features/). """ - field_mappings: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None + field_mappings: typing.Optional[typing.Dict[str, typing.Any]] = None remote_data: typing.Optional[typing.List[RemoteData]] = None if IS_PYDANTIC_V2: diff --git a/src/merge/resources/hris/types/earning_type_enum.py b/src/merge/resources/hris/types/earning_type_enum.py index 2d5b6c10..e6e78b42 100644 --- a/src/merge/resources/hris/types/earning_type_enum.py +++ b/src/merge/resources/hris/types/earning_type_enum.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ....core import enum + T_Result = typing.TypeVar("T_Result") -class EarningTypeEnum(str, enum.Enum): +class EarningTypeEnum(enum.StrEnum): """ * `SALARY` - SALARY * `REIMBURSEMENT` - REIMBURSEMENT diff --git a/src/merge/resources/hris/types/employee.py b/src/merge/resources/hris/types/employee.py index 8de1927d..54953198 100644 --- a/src/merge/resources/hris/types/employee.py +++ b/src/merge/resources/hris/types/employee.py @@ -213,7 +213,7 @@ class Employee(UncheckedBaseModel): The URL of the employee's avatar image. """ - custom_fields: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = pydantic.Field(default=None) + custom_fields: typing.Optional[typing.Dict[str, typing.Any]] = pydantic.Field(default=None) """ Custom fields configured for a given model. """ @@ -223,7 +223,7 @@ class Employee(UncheckedBaseModel): Indicates whether or not this object has been deleted in the third party platform. Full coverage deletion detection is a premium add-on. Native deletion detection is offered for free with limited coverage. [Learn more](https://docs.merge.dev/integrations/hris/supported-features/). """ - field_mappings: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None + field_mappings: typing.Optional[typing.Dict[str, typing.Any]] = None remote_data: typing.Optional[typing.List[RemoteData]] = None if IS_PYDANTIC_V2: @@ -236,9 +236,15 @@ class Config: extra = pydantic.Extra.allow -from .employment import Employment # noqa: E402, F401, I001 -from .team import Team # noqa: E402, F401, I001 -from .employee_employments_item import EmployeeEmploymentsItem # noqa: E402, F401, I001 -from .employee_manager import EmployeeManager # noqa: E402, F401, I001 +from .employee_employments_item import EmployeeEmploymentsItem # noqa: E402, I001 +from .employee_manager import EmployeeManager # noqa: E402, I001 +from .employment import Employment # noqa: E402, I001 +from .employment_employee import EmploymentEmployee # noqa: E402, I001 -update_forward_refs(Employee) +update_forward_refs( + Employee, + EmployeeEmploymentsItem=EmployeeEmploymentsItem, + EmployeeManager=EmployeeManager, + Employment=Employment, + EmploymentEmployee=EmploymentEmployee, +) diff --git a/src/merge/resources/hris/types/employee_payroll_run.py b/src/merge/resources/hris/types/employee_payroll_run.py index b93496a5..dbc9d39c 100644 --- a/src/merge/resources/hris/types/employee_payroll_run.py +++ b/src/merge/resources/hris/types/employee_payroll_run.py @@ -85,7 +85,7 @@ class EmployeePayrollRun(UncheckedBaseModel): Indicates whether or not this object has been deleted in the third party platform. Full coverage deletion detection is a premium add-on. Native deletion detection is offered for free with limited coverage. [Learn more](https://docs.merge.dev/integrations/hris/supported-features/). """ - field_mappings: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None + field_mappings: typing.Optional[typing.Dict[str, typing.Any]] = None remote_data: typing.Optional[typing.List[RemoteData]] = None if IS_PYDANTIC_V2: @@ -98,8 +98,4 @@ class Config: extra = pydantic.Extra.allow -from .employee import Employee # noqa: E402, F401, I001 -from .employment import Employment # noqa: E402, F401, I001 -from .team import Team # noqa: E402, F401, I001 - update_forward_refs(EmployeePayrollRun) diff --git a/src/merge/resources/hris/types/employee_request.py b/src/merge/resources/hris/types/employee_request.py index 0476ab6b..825be59d 100644 --- a/src/merge/resources/hris/types/employee_request.py +++ b/src/merge/resources/hris/types/employee_request.py @@ -195,8 +195,8 @@ class EmployeeRequest(UncheckedBaseModel): The URL of the employee's avatar image. """ - integration_params: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None - linked_account_params: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None + integration_params: typing.Optional[typing.Dict[str, typing.Any]] = None + linked_account_params: typing.Optional[typing.Dict[str, typing.Any]] = None if IS_PYDANTIC_V2: model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2 @@ -208,8 +208,4 @@ class Config: extra = pydantic.Extra.allow -from .employee import Employee # noqa: E402, F401, I001 -from .employment import Employment # noqa: E402, F401, I001 -from .team import Team # noqa: E402, F401, I001 - update_forward_refs(EmployeeRequest) diff --git a/src/merge/resources/hris/types/employee_response.py b/src/merge/resources/hris/types/employee_response.py index d703cc1c..647247e7 100644 --- a/src/merge/resources/hris/types/employee_response.py +++ b/src/merge/resources/hris/types/employee_response.py @@ -28,8 +28,17 @@ class Config: extra = pydantic.Extra.allow -from .employee import Employee # noqa: E402, F401, I001 -from .employment import Employment # noqa: E402, F401, I001 -from .team import Team # noqa: E402, F401, I001 - -update_forward_refs(EmployeeResponse) +from .employee import Employee # noqa: E402, I001 +from .employee_employments_item import EmployeeEmploymentsItem # noqa: E402, I001 +from .employee_manager import EmployeeManager # noqa: E402, I001 +from .employment import Employment # noqa: E402, I001 +from .employment_employee import EmploymentEmployee # noqa: E402, I001 + +update_forward_refs( + EmployeeResponse, + Employee=Employee, + EmployeeEmploymentsItem=EmployeeEmploymentsItem, + EmployeeManager=EmployeeManager, + Employment=Employment, + EmploymentEmployee=EmploymentEmployee, +) diff --git a/src/merge/resources/hris/types/employer_benefit.py b/src/merge/resources/hris/types/employer_benefit.py index f0a56f45..836ec14c 100644 --- a/src/merge/resources/hris/types/employer_benefit.py +++ b/src/merge/resources/hris/types/employer_benefit.py @@ -67,7 +67,7 @@ class EmployerBenefit(UncheckedBaseModel): Indicates whether or not this object has been deleted in the third party platform. Full coverage deletion detection is a premium add-on. Native deletion detection is offered for free with limited coverage. [Learn more](https://docs.merge.dev/integrations/hris/supported-features/). """ - field_mappings: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None + field_mappings: typing.Optional[typing.Dict[str, typing.Any]] = None remote_data: typing.Optional[typing.List[RemoteData]] = None if IS_PYDANTIC_V2: diff --git a/src/merge/resources/hris/types/employment.py b/src/merge/resources/hris/types/employment.py index cb2158ff..a0271a86 100644 --- a/src/merge/resources/hris/types/employment.py +++ b/src/merge/resources/hris/types/employment.py @@ -438,7 +438,7 @@ class Employment(UncheckedBaseModel): Indicates whether or not this object has been deleted in the third party platform. Full coverage deletion detection is a premium add-on. Native deletion detection is offered for free with limited coverage. [Learn more](https://docs.merge.dev/integrations/hris/supported-features/). """ - field_mappings: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None + field_mappings: typing.Optional[typing.Dict[str, typing.Any]] = None remote_data: typing.Optional[typing.List[RemoteData]] = None if IS_PYDANTIC_V2: @@ -451,8 +451,15 @@ class Config: extra = pydantic.Extra.allow -from .employee import Employee # noqa: E402, F401, I001 -from .team import Team # noqa: E402, F401, I001 -from .employment_employee import EmploymentEmployee # noqa: E402, F401, I001 +from .employee import Employee # noqa: E402, I001 +from .employee_employments_item import EmployeeEmploymentsItem # noqa: E402, I001 +from .employee_manager import EmployeeManager # noqa: E402, I001 +from .employment_employee import EmploymentEmployee # noqa: E402, I001 -update_forward_refs(Employment) +update_forward_refs( + Employment, + Employee=Employee, + EmployeeEmploymentsItem=EmployeeEmploymentsItem, + EmployeeManager=EmployeeManager, + EmploymentEmployee=EmploymentEmployee, +) diff --git a/src/merge/resources/hris/types/employment_status_enum.py b/src/merge/resources/hris/types/employment_status_enum.py index 6708c445..b5f0e036 100644 --- a/src/merge/resources/hris/types/employment_status_enum.py +++ b/src/merge/resources/hris/types/employment_status_enum.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ....core import enum + T_Result = typing.TypeVar("T_Result") -class EmploymentStatusEnum(str, enum.Enum): +class EmploymentStatusEnum(enum.StrEnum): """ * `ACTIVE` - ACTIVE * `PENDING` - PENDING diff --git a/src/merge/resources/hris/types/employment_type_enum.py b/src/merge/resources/hris/types/employment_type_enum.py index 06a3cb12..2588b277 100644 --- a/src/merge/resources/hris/types/employment_type_enum.py +++ b/src/merge/resources/hris/types/employment_type_enum.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ....core import enum + T_Result = typing.TypeVar("T_Result") -class EmploymentTypeEnum(str, enum.Enum): +class EmploymentTypeEnum(enum.StrEnum): """ * `FULL_TIME` - FULL_TIME * `PART_TIME` - PART_TIME diff --git a/src/merge/resources/hris/types/enabled_actions_enum.py b/src/merge/resources/hris/types/enabled_actions_enum.py index 29cf9839..604265f8 100644 --- a/src/merge/resources/hris/types/enabled_actions_enum.py +++ b/src/merge/resources/hris/types/enabled_actions_enum.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ....core import enum + T_Result = typing.TypeVar("T_Result") -class EnabledActionsEnum(str, enum.Enum): +class EnabledActionsEnum(enum.StrEnum): """ * `READ` - READ * `WRITE` - WRITE diff --git a/src/merge/resources/hris/types/encoding_enum.py b/src/merge/resources/hris/types/encoding_enum.py index 7454647e..aa2aa971 100644 --- a/src/merge/resources/hris/types/encoding_enum.py +++ b/src/merge/resources/hris/types/encoding_enum.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ....core import enum + T_Result = typing.TypeVar("T_Result") -class EncodingEnum(str, enum.Enum): +class EncodingEnum(enum.StrEnum): """ * `RAW` - RAW * `BASE64` - BASE64 diff --git a/src/merge/resources/hris/types/ethnicity_enum.py b/src/merge/resources/hris/types/ethnicity_enum.py index 243861ce..7a57aba0 100644 --- a/src/merge/resources/hris/types/ethnicity_enum.py +++ b/src/merge/resources/hris/types/ethnicity_enum.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ....core import enum + T_Result = typing.TypeVar("T_Result") -class EthnicityEnum(str, enum.Enum): +class EthnicityEnum(enum.StrEnum): """ * `AMERICAN_INDIAN_OR_ALASKA_NATIVE` - AMERICAN_INDIAN_OR_ALASKA_NATIVE * `ASIAN_OR_INDIAN_SUBCONTINENT` - ASIAN_OR_INDIAN_SUBCONTINENT diff --git a/src/merge/resources/hris/types/event_type_enum.py b/src/merge/resources/hris/types/event_type_enum.py index 537cea3f..1c16772d 100644 --- a/src/merge/resources/hris/types/event_type_enum.py +++ b/src/merge/resources/hris/types/event_type_enum.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ....core import enum + T_Result = typing.TypeVar("T_Result") -class EventTypeEnum(str, enum.Enum): +class EventTypeEnum(enum.StrEnum): """ * `CREATED_REMOTE_PRODUCTION_API_KEY` - CREATED_REMOTE_PRODUCTION_API_KEY * `DELETED_REMOTE_PRODUCTION_API_KEY` - DELETED_REMOTE_PRODUCTION_API_KEY diff --git a/src/merge/resources/hris/types/external_target_field_api_response.py b/src/merge/resources/hris/types/external_target_field_api_response.py index 33c62878..2ecf3c31 100644 --- a/src/merge/resources/hris/types/external_target_field_api_response.py +++ b/src/merge/resources/hris/types/external_target_field_api_response.py @@ -3,36 +3,92 @@ import typing import pydantic +import typing_extensions from ....core.pydantic_utilities import IS_PYDANTIC_V2 +from ....core.serialization import FieldMetadata from ....core.unchecked_base_model import UncheckedBaseModel from .external_target_field_api import ExternalTargetFieldApi class ExternalTargetFieldApiResponse(UncheckedBaseModel): - benefit: typing.Optional[typing.List[ExternalTargetFieldApi]] = pydantic.Field(alias="Benefit", default=None) - employer_benefit: typing.Optional[typing.List[ExternalTargetFieldApi]] = pydantic.Field( - alias="EmployerBenefit", default=None - ) - company: typing.Optional[typing.List[ExternalTargetFieldApi]] = pydantic.Field(alias="Company", default=None) - employee_payroll_run: typing.Optional[typing.List[ExternalTargetFieldApi]] = pydantic.Field( - alias="EmployeePayrollRun", default=None - ) - employee: typing.Optional[typing.List[ExternalTargetFieldApi]] = pydantic.Field(alias="Employee", default=None) - employment: typing.Optional[typing.List[ExternalTargetFieldApi]] = pydantic.Field(alias="Employment", default=None) - location: typing.Optional[typing.List[ExternalTargetFieldApi]] = pydantic.Field(alias="Location", default=None) - payroll_run: typing.Optional[typing.List[ExternalTargetFieldApi]] = pydantic.Field(alias="PayrollRun", default=None) - team: typing.Optional[typing.List[ExternalTargetFieldApi]] = pydantic.Field(alias="Team", default=None) - time_off: typing.Optional[typing.List[ExternalTargetFieldApi]] = pydantic.Field(alias="TimeOff", default=None) - time_off_balance: typing.Optional[typing.List[ExternalTargetFieldApi]] = pydantic.Field( - alias="TimeOffBalance", default=None - ) - bank_info: typing.Optional[typing.List[ExternalTargetFieldApi]] = pydantic.Field(alias="BankInfo", default=None) - pay_group: typing.Optional[typing.List[ExternalTargetFieldApi]] = pydantic.Field(alias="PayGroup", default=None) - group: typing.Optional[typing.List[ExternalTargetFieldApi]] = pydantic.Field(alias="Group", default=None) - dependent: typing.Optional[typing.List[ExternalTargetFieldApi]] = pydantic.Field(alias="Dependent", default=None) - timesheet_entry: typing.Optional[typing.List[ExternalTargetFieldApi]] = pydantic.Field( - alias="TimesheetEntry", default=None - ) + benefit: typing_extensions.Annotated[ + typing.Optional[typing.List[ExternalTargetFieldApi]], + FieldMetadata(alias="Benefit"), + pydantic.Field(alias="Benefit"), + ] = None + employer_benefit: typing_extensions.Annotated[ + typing.Optional[typing.List[ExternalTargetFieldApi]], + FieldMetadata(alias="EmployerBenefit"), + pydantic.Field(alias="EmployerBenefit"), + ] = None + company: typing_extensions.Annotated[ + typing.Optional[typing.List[ExternalTargetFieldApi]], + FieldMetadata(alias="Company"), + pydantic.Field(alias="Company"), + ] = None + employee_payroll_run: typing_extensions.Annotated[ + typing.Optional[typing.List[ExternalTargetFieldApi]], + FieldMetadata(alias="EmployeePayrollRun"), + pydantic.Field(alias="EmployeePayrollRun"), + ] = None + employee: typing_extensions.Annotated[ + typing.Optional[typing.List[ExternalTargetFieldApi]], + FieldMetadata(alias="Employee"), + pydantic.Field(alias="Employee"), + ] = None + employment: typing_extensions.Annotated[ + typing.Optional[typing.List[ExternalTargetFieldApi]], + FieldMetadata(alias="Employment"), + pydantic.Field(alias="Employment"), + ] = None + location: typing_extensions.Annotated[ + typing.Optional[typing.List[ExternalTargetFieldApi]], + FieldMetadata(alias="Location"), + pydantic.Field(alias="Location"), + ] = None + payroll_run: typing_extensions.Annotated[ + typing.Optional[typing.List[ExternalTargetFieldApi]], + FieldMetadata(alias="PayrollRun"), + pydantic.Field(alias="PayrollRun"), + ] = None + team: typing_extensions.Annotated[ + typing.Optional[typing.List[ExternalTargetFieldApi]], FieldMetadata(alias="Team"), pydantic.Field(alias="Team") + ] = None + time_off: typing_extensions.Annotated[ + typing.Optional[typing.List[ExternalTargetFieldApi]], + FieldMetadata(alias="TimeOff"), + pydantic.Field(alias="TimeOff"), + ] = None + time_off_balance: typing_extensions.Annotated[ + typing.Optional[typing.List[ExternalTargetFieldApi]], + FieldMetadata(alias="TimeOffBalance"), + pydantic.Field(alias="TimeOffBalance"), + ] = None + bank_info: typing_extensions.Annotated[ + typing.Optional[typing.List[ExternalTargetFieldApi]], + FieldMetadata(alias="BankInfo"), + pydantic.Field(alias="BankInfo"), + ] = None + pay_group: typing_extensions.Annotated[ + typing.Optional[typing.List[ExternalTargetFieldApi]], + FieldMetadata(alias="PayGroup"), + pydantic.Field(alias="PayGroup"), + ] = None + group: typing_extensions.Annotated[ + typing.Optional[typing.List[ExternalTargetFieldApi]], + FieldMetadata(alias="Group"), + pydantic.Field(alias="Group"), + ] = None + dependent: typing_extensions.Annotated[ + typing.Optional[typing.List[ExternalTargetFieldApi]], + FieldMetadata(alias="Dependent"), + pydantic.Field(alias="Dependent"), + ] = None + timesheet_entry: typing_extensions.Annotated[ + typing.Optional[typing.List[ExternalTargetFieldApi]], + FieldMetadata(alias="TimesheetEntry"), + pydantic.Field(alias="TimesheetEntry"), + ] = None if IS_PYDANTIC_V2: model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2 diff --git a/src/merge/resources/hris/types/field_mapping_api_instance_remote_field.py b/src/merge/resources/hris/types/field_mapping_api_instance_remote_field.py index 578a2b10..ccd1f990 100644 --- a/src/merge/resources/hris/types/field_mapping_api_instance_remote_field.py +++ b/src/merge/resources/hris/types/field_mapping_api_instance_remote_field.py @@ -3,7 +3,9 @@ import typing import pydantic +import typing_extensions from ....core.pydantic_utilities import IS_PYDANTIC_V2 +from ....core.serialization import FieldMetadata from ....core.unchecked_base_model import UncheckedBaseModel from .field_mapping_api_instance_remote_field_remote_endpoint_info import ( FieldMappingApiInstanceRemoteFieldRemoteEndpointInfo, @@ -12,9 +14,9 @@ class FieldMappingApiInstanceRemoteField(UncheckedBaseModel): remote_key_name: typing.Optional[str] = None - schema_: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = pydantic.Field( - alias="schema", default=None - ) + schema_: typing_extensions.Annotated[ + typing.Optional[typing.Dict[str, typing.Any]], FieldMetadata(alias="schema"), pydantic.Field(alias="schema") + ] = None remote_endpoint_info: FieldMappingApiInstanceRemoteFieldRemoteEndpointInfo if IS_PYDANTIC_V2: diff --git a/src/merge/resources/hris/types/field_mapping_api_instance_response.py b/src/merge/resources/hris/types/field_mapping_api_instance_response.py index 3b6fc77f..06334985 100644 --- a/src/merge/resources/hris/types/field_mapping_api_instance_response.py +++ b/src/merge/resources/hris/types/field_mapping_api_instance_response.py @@ -3,38 +3,92 @@ import typing import pydantic +import typing_extensions from ....core.pydantic_utilities import IS_PYDANTIC_V2 +from ....core.serialization import FieldMetadata from ....core.unchecked_base_model import UncheckedBaseModel from .field_mapping_api_instance import FieldMappingApiInstance class FieldMappingApiInstanceResponse(UncheckedBaseModel): - benefit: typing.Optional[typing.List[FieldMappingApiInstance]] = pydantic.Field(alias="Benefit", default=None) - employer_benefit: typing.Optional[typing.List[FieldMappingApiInstance]] = pydantic.Field( - alias="EmployerBenefit", default=None - ) - company: typing.Optional[typing.List[FieldMappingApiInstance]] = pydantic.Field(alias="Company", default=None) - employee_payroll_run: typing.Optional[typing.List[FieldMappingApiInstance]] = pydantic.Field( - alias="EmployeePayrollRun", default=None - ) - employee: typing.Optional[typing.List[FieldMappingApiInstance]] = pydantic.Field(alias="Employee", default=None) - employment: typing.Optional[typing.List[FieldMappingApiInstance]] = pydantic.Field(alias="Employment", default=None) - location: typing.Optional[typing.List[FieldMappingApiInstance]] = pydantic.Field(alias="Location", default=None) - payroll_run: typing.Optional[typing.List[FieldMappingApiInstance]] = pydantic.Field( - alias="PayrollRun", default=None - ) - team: typing.Optional[typing.List[FieldMappingApiInstance]] = pydantic.Field(alias="Team", default=None) - time_off: typing.Optional[typing.List[FieldMappingApiInstance]] = pydantic.Field(alias="TimeOff", default=None) - time_off_balance: typing.Optional[typing.List[FieldMappingApiInstance]] = pydantic.Field( - alias="TimeOffBalance", default=None - ) - bank_info: typing.Optional[typing.List[FieldMappingApiInstance]] = pydantic.Field(alias="BankInfo", default=None) - pay_group: typing.Optional[typing.List[FieldMappingApiInstance]] = pydantic.Field(alias="PayGroup", default=None) - group: typing.Optional[typing.List[FieldMappingApiInstance]] = pydantic.Field(alias="Group", default=None) - dependent: typing.Optional[typing.List[FieldMappingApiInstance]] = pydantic.Field(alias="Dependent", default=None) - timesheet_entry: typing.Optional[typing.List[FieldMappingApiInstance]] = pydantic.Field( - alias="TimesheetEntry", default=None - ) + benefit: typing_extensions.Annotated[ + typing.Optional[typing.List[FieldMappingApiInstance]], + FieldMetadata(alias="Benefit"), + pydantic.Field(alias="Benefit"), + ] = None + employer_benefit: typing_extensions.Annotated[ + typing.Optional[typing.List[FieldMappingApiInstance]], + FieldMetadata(alias="EmployerBenefit"), + pydantic.Field(alias="EmployerBenefit"), + ] = None + company: typing_extensions.Annotated[ + typing.Optional[typing.List[FieldMappingApiInstance]], + FieldMetadata(alias="Company"), + pydantic.Field(alias="Company"), + ] = None + employee_payroll_run: typing_extensions.Annotated[ + typing.Optional[typing.List[FieldMappingApiInstance]], + FieldMetadata(alias="EmployeePayrollRun"), + pydantic.Field(alias="EmployeePayrollRun"), + ] = None + employee: typing_extensions.Annotated[ + typing.Optional[typing.List[FieldMappingApiInstance]], + FieldMetadata(alias="Employee"), + pydantic.Field(alias="Employee"), + ] = None + employment: typing_extensions.Annotated[ + typing.Optional[typing.List[FieldMappingApiInstance]], + FieldMetadata(alias="Employment"), + pydantic.Field(alias="Employment"), + ] = None + location: typing_extensions.Annotated[ + typing.Optional[typing.List[FieldMappingApiInstance]], + FieldMetadata(alias="Location"), + pydantic.Field(alias="Location"), + ] = None + payroll_run: typing_extensions.Annotated[ + typing.Optional[typing.List[FieldMappingApiInstance]], + FieldMetadata(alias="PayrollRun"), + pydantic.Field(alias="PayrollRun"), + ] = None + team: typing_extensions.Annotated[ + typing.Optional[typing.List[FieldMappingApiInstance]], FieldMetadata(alias="Team"), pydantic.Field(alias="Team") + ] = None + time_off: typing_extensions.Annotated[ + typing.Optional[typing.List[FieldMappingApiInstance]], + FieldMetadata(alias="TimeOff"), + pydantic.Field(alias="TimeOff"), + ] = None + time_off_balance: typing_extensions.Annotated[ + typing.Optional[typing.List[FieldMappingApiInstance]], + FieldMetadata(alias="TimeOffBalance"), + pydantic.Field(alias="TimeOffBalance"), + ] = None + bank_info: typing_extensions.Annotated[ + typing.Optional[typing.List[FieldMappingApiInstance]], + FieldMetadata(alias="BankInfo"), + pydantic.Field(alias="BankInfo"), + ] = None + pay_group: typing_extensions.Annotated[ + typing.Optional[typing.List[FieldMappingApiInstance]], + FieldMetadata(alias="PayGroup"), + pydantic.Field(alias="PayGroup"), + ] = None + group: typing_extensions.Annotated[ + typing.Optional[typing.List[FieldMappingApiInstance]], + FieldMetadata(alias="Group"), + pydantic.Field(alias="Group"), + ] = None + dependent: typing_extensions.Annotated[ + typing.Optional[typing.List[FieldMappingApiInstance]], + FieldMetadata(alias="Dependent"), + pydantic.Field(alias="Dependent"), + ] = None + timesheet_entry: typing_extensions.Annotated[ + typing.Optional[typing.List[FieldMappingApiInstance]], + FieldMetadata(alias="TimesheetEntry"), + pydantic.Field(alias="TimesheetEntry"), + ] = None if IS_PYDANTIC_V2: model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2 diff --git a/src/merge/resources/hris/types/field_permission_deserializer.py b/src/merge/resources/hris/types/field_permission_deserializer.py index 1d71ae04..407ed547 100644 --- a/src/merge/resources/hris/types/field_permission_deserializer.py +++ b/src/merge/resources/hris/types/field_permission_deserializer.py @@ -8,8 +8,8 @@ class FieldPermissionDeserializer(UncheckedBaseModel): - enabled_fields: typing.Optional[typing.List[typing.Optional[typing.Any]]] = None - disabled_fields: typing.Optional[typing.List[typing.Optional[typing.Any]]] = None + enabled_fields: typing.Optional[typing.List[typing.Any]] = None + disabled_fields: typing.Optional[typing.List[typing.Any]] = None if IS_PYDANTIC_V2: model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2 diff --git a/src/merge/resources/hris/types/field_permission_deserializer_request.py b/src/merge/resources/hris/types/field_permission_deserializer_request.py index a4113b46..6680c7d2 100644 --- a/src/merge/resources/hris/types/field_permission_deserializer_request.py +++ b/src/merge/resources/hris/types/field_permission_deserializer_request.py @@ -8,8 +8,8 @@ class FieldPermissionDeserializerRequest(UncheckedBaseModel): - enabled_fields: typing.Optional[typing.List[typing.Optional[typing.Any]]] = None - disabled_fields: typing.Optional[typing.List[typing.Optional[typing.Any]]] = None + enabled_fields: typing.Optional[typing.List[typing.Any]] = None + disabled_fields: typing.Optional[typing.List[typing.Any]] = None if IS_PYDANTIC_V2: model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2 diff --git a/src/merge/resources/hris/types/flsa_status_enum.py b/src/merge/resources/hris/types/flsa_status_enum.py index e30b494f..0641ee1e 100644 --- a/src/merge/resources/hris/types/flsa_status_enum.py +++ b/src/merge/resources/hris/types/flsa_status_enum.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ....core import enum + T_Result = typing.TypeVar("T_Result") -class FlsaStatusEnum(str, enum.Enum): +class FlsaStatusEnum(enum.StrEnum): """ * `EXEMPT` - EXEMPT * `SALARIED_NONEXEMPT` - SALARIED_NONEXEMPT diff --git a/src/merge/resources/hris/types/gender_enum.py b/src/merge/resources/hris/types/gender_enum.py index 541f19cf..d2f5e39a 100644 --- a/src/merge/resources/hris/types/gender_enum.py +++ b/src/merge/resources/hris/types/gender_enum.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ....core import enum + T_Result = typing.TypeVar("T_Result") -class GenderEnum(str, enum.Enum): +class GenderEnum(enum.StrEnum): """ * `MALE` - MALE * `FEMALE` - FEMALE diff --git a/src/merge/resources/hris/types/group.py b/src/merge/resources/hris/types/group.py index 1e694fa9..39154561 100644 --- a/src/merge/resources/hris/types/group.py +++ b/src/merge/resources/hris/types/group.py @@ -72,7 +72,7 @@ class Group(UncheckedBaseModel): Indicates whether or not this object has been deleted in the third party platform. Full coverage deletion detection is a premium add-on. Native deletion detection is offered for free with limited coverage. [Learn more](https://docs.merge.dev/integrations/hris/supported-features/). """ - field_mappings: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None + field_mappings: typing.Optional[typing.Dict[str, typing.Any]] = None remote_data: typing.Optional[typing.List[RemoteData]] = None if IS_PYDANTIC_V2: diff --git a/src/merge/resources/hris/types/group_type_enum.py b/src/merge/resources/hris/types/group_type_enum.py index 4ce603d6..7866f455 100644 --- a/src/merge/resources/hris/types/group_type_enum.py +++ b/src/merge/resources/hris/types/group_type_enum.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ....core import enum + T_Result = typing.TypeVar("T_Result") -class GroupTypeEnum(str, enum.Enum): +class GroupTypeEnum(enum.StrEnum): """ * `TEAM` - TEAM * `DEPARTMENT` - DEPARTMENT diff --git a/src/merge/resources/hris/types/issue.py b/src/merge/resources/hris/types/issue.py index df31be95..5d37505d 100644 --- a/src/merge/resources/hris/types/issue.py +++ b/src/merge/resources/hris/types/issue.py @@ -20,7 +20,7 @@ class Issue(UncheckedBaseModel): """ error_description: str - end_user: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None + end_user: typing.Optional[typing.Dict[str, typing.Any]] = None first_incident_time: typing.Optional[dt.datetime] = None last_incident_time: typing.Optional[dt.datetime] = None is_muted: typing.Optional[bool] = None diff --git a/src/merge/resources/hris/types/issue_status_enum.py b/src/merge/resources/hris/types/issue_status_enum.py index 57eb9618..30d126bb 100644 --- a/src/merge/resources/hris/types/issue_status_enum.py +++ b/src/merge/resources/hris/types/issue_status_enum.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ....core import enum + T_Result = typing.TypeVar("T_Result") -class IssueStatusEnum(str, enum.Enum): +class IssueStatusEnum(enum.StrEnum): """ * `ONGOING` - ONGOING * `RESOLVED` - RESOLVED diff --git a/src/merge/resources/hris/types/language_enum.py b/src/merge/resources/hris/types/language_enum.py index 44b693f2..3ff1e9da 100644 --- a/src/merge/resources/hris/types/language_enum.py +++ b/src/merge/resources/hris/types/language_enum.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ....core import enum + T_Result = typing.TypeVar("T_Result") -class LanguageEnum(str, enum.Enum): +class LanguageEnum(enum.StrEnum): """ * `en` - en * `de` - de diff --git a/src/merge/resources/hris/types/last_sync_result_enum.py b/src/merge/resources/hris/types/last_sync_result_enum.py index ec777ee6..f82505a1 100644 --- a/src/merge/resources/hris/types/last_sync_result_enum.py +++ b/src/merge/resources/hris/types/last_sync_result_enum.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ....core import enum + T_Result = typing.TypeVar("T_Result") -class LastSyncResultEnum(str, enum.Enum): +class LastSyncResultEnum(enum.StrEnum): """ * `SYNCING` - SYNCING * `DONE` - DONE diff --git a/src/merge/resources/hris/types/location.py b/src/merge/resources/hris/types/location.py index db6d7b66..a0cfd7ba 100644 --- a/src/merge/resources/hris/types/location.py +++ b/src/merge/resources/hris/types/location.py @@ -340,7 +340,7 @@ class Location(UncheckedBaseModel): Indicates whether or not this object has been deleted in the third party platform. Full coverage deletion detection is a premium add-on. Native deletion detection is offered for free with limited coverage. [Learn more](https://docs.merge.dev/integrations/hris/supported-features/). """ - field_mappings: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None + field_mappings: typing.Optional[typing.Dict[str, typing.Any]] = None remote_data: typing.Optional[typing.List[RemoteData]] = None if IS_PYDANTIC_V2: diff --git a/src/merge/resources/hris/types/location_type_enum.py b/src/merge/resources/hris/types/location_type_enum.py index 34ace087..e7760d87 100644 --- a/src/merge/resources/hris/types/location_type_enum.py +++ b/src/merge/resources/hris/types/location_type_enum.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ....core import enum + T_Result = typing.TypeVar("T_Result") -class LocationTypeEnum(str, enum.Enum): +class LocationTypeEnum(enum.StrEnum): """ * `HOME` - HOME * `WORK` - WORK diff --git a/src/merge/resources/hris/types/marital_status_enum.py b/src/merge/resources/hris/types/marital_status_enum.py index 6902866b..d729574d 100644 --- a/src/merge/resources/hris/types/marital_status_enum.py +++ b/src/merge/resources/hris/types/marital_status_enum.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ....core import enum + T_Result = typing.TypeVar("T_Result") -class MaritalStatusEnum(str, enum.Enum): +class MaritalStatusEnum(enum.StrEnum): """ * `SINGLE` - SINGLE * `MARRIED_FILING_JOINTLY` - MARRIED_FILING_JOINTLY diff --git a/src/merge/resources/hris/types/meta_response.py b/src/merge/resources/hris/types/meta_response.py index 9dcbe1f5..5180b77e 100644 --- a/src/merge/resources/hris/types/meta_response.py +++ b/src/merge/resources/hris/types/meta_response.py @@ -9,8 +9,8 @@ class MetaResponse(UncheckedBaseModel): - request_schema: typing.Dict[str, typing.Optional[typing.Any]] - remote_field_classes: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None + request_schema: typing.Dict[str, typing.Any] + remote_field_classes: typing.Optional[typing.Dict[str, typing.Any]] = None status: typing.Optional[LinkedAccountStatus] = None has_conditional_params: bool has_required_linked_account_params: bool diff --git a/src/merge/resources/hris/types/method_enum.py b/src/merge/resources/hris/types/method_enum.py index 57bcde10..4c8376dd 100644 --- a/src/merge/resources/hris/types/method_enum.py +++ b/src/merge/resources/hris/types/method_enum.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ....core import enum + T_Result = typing.TypeVar("T_Result") -class MethodEnum(str, enum.Enum): +class MethodEnum(enum.StrEnum): """ * `GET` - GET * `OPTIONS` - OPTIONS diff --git a/src/merge/resources/hris/types/paginated_bank_info_list.py b/src/merge/resources/hris/types/paginated_bank_info_list.py index 688ba4f5..55cdb904 100644 --- a/src/merge/resources/hris/types/paginated_bank_info_list.py +++ b/src/merge/resources/hris/types/paginated_bank_info_list.py @@ -25,8 +25,4 @@ class Config: extra = pydantic.Extra.allow -from .employee import Employee # noqa: E402, F401, I001 -from .employment import Employment # noqa: E402, F401, I001 -from .team import Team # noqa: E402, F401, I001 - update_forward_refs(PaginatedBankInfoList) diff --git a/src/merge/resources/hris/types/paginated_benefit_list.py b/src/merge/resources/hris/types/paginated_benefit_list.py index d290d5fd..ccfc56d9 100644 --- a/src/merge/resources/hris/types/paginated_benefit_list.py +++ b/src/merge/resources/hris/types/paginated_benefit_list.py @@ -25,8 +25,4 @@ class Config: extra = pydantic.Extra.allow -from .employee import Employee # noqa: E402, F401, I001 -from .employment import Employment # noqa: E402, F401, I001 -from .team import Team # noqa: E402, F401, I001 - update_forward_refs(PaginatedBenefitList) diff --git a/src/merge/resources/hris/types/paginated_employee_list.py b/src/merge/resources/hris/types/paginated_employee_list.py index 8b7b1dc8..9915260f 100644 --- a/src/merge/resources/hris/types/paginated_employee_list.py +++ b/src/merge/resources/hris/types/paginated_employee_list.py @@ -24,8 +24,17 @@ class Config: extra = pydantic.Extra.allow -from .employee import Employee # noqa: E402, F401, I001 -from .employment import Employment # noqa: E402, F401, I001 -from .team import Team # noqa: E402, F401, I001 - -update_forward_refs(PaginatedEmployeeList) +from .employee import Employee # noqa: E402, I001 +from .employee_employments_item import EmployeeEmploymentsItem # noqa: E402, I001 +from .employee_manager import EmployeeManager # noqa: E402, I001 +from .employment import Employment # noqa: E402, I001 +from .employment_employee import EmploymentEmployee # noqa: E402, I001 + +update_forward_refs( + PaginatedEmployeeList, + Employee=Employee, + EmployeeEmploymentsItem=EmployeeEmploymentsItem, + EmployeeManager=EmployeeManager, + Employment=Employment, + EmploymentEmployee=EmploymentEmployee, +) diff --git a/src/merge/resources/hris/types/paginated_employee_payroll_run_list.py b/src/merge/resources/hris/types/paginated_employee_payroll_run_list.py index 4f66790b..7ef4c312 100644 --- a/src/merge/resources/hris/types/paginated_employee_payroll_run_list.py +++ b/src/merge/resources/hris/types/paginated_employee_payroll_run_list.py @@ -25,8 +25,4 @@ class Config: extra = pydantic.Extra.allow -from .employee import Employee # noqa: E402, F401, I001 -from .employment import Employment # noqa: E402, F401, I001 -from .team import Team # noqa: E402, F401, I001 - update_forward_refs(PaginatedEmployeePayrollRunList) diff --git a/src/merge/resources/hris/types/paginated_employment_list.py b/src/merge/resources/hris/types/paginated_employment_list.py index 9670bf4c..6db1d1cd 100644 --- a/src/merge/resources/hris/types/paginated_employment_list.py +++ b/src/merge/resources/hris/types/paginated_employment_list.py @@ -24,8 +24,17 @@ class Config: extra = pydantic.Extra.allow -from .employee import Employee # noqa: E402, F401, I001 -from .employment import Employment # noqa: E402, F401, I001 -from .team import Team # noqa: E402, F401, I001 - -update_forward_refs(PaginatedEmploymentList) +from .employee import Employee # noqa: E402, I001 +from .employee_employments_item import EmployeeEmploymentsItem # noqa: E402, I001 +from .employee_manager import EmployeeManager # noqa: E402, I001 +from .employment import Employment # noqa: E402, I001 +from .employment_employee import EmploymentEmployee # noqa: E402, I001 + +update_forward_refs( + PaginatedEmploymentList, + Employee=Employee, + EmployeeEmploymentsItem=EmployeeEmploymentsItem, + EmployeeManager=EmployeeManager, + Employment=Employment, + EmploymentEmployee=EmploymentEmployee, +) diff --git a/src/merge/resources/hris/types/paginated_team_list.py b/src/merge/resources/hris/types/paginated_team_list.py index 29a7bdb7..c29b4035 100644 --- a/src/merge/resources/hris/types/paginated_team_list.py +++ b/src/merge/resources/hris/types/paginated_team_list.py @@ -24,6 +24,7 @@ class Config: extra = pydantic.Extra.allow -from .team import Team # noqa: E402, F401, I001 +from .team import Team # noqa: E402, I001 +from .team_parent_team import TeamParentTeam # noqa: E402, I001 -update_forward_refs(PaginatedTeamList) +update_forward_refs(PaginatedTeamList, Team=Team, TeamParentTeam=TeamParentTeam) diff --git a/src/merge/resources/hris/types/paginated_time_off_balance_list.py b/src/merge/resources/hris/types/paginated_time_off_balance_list.py index 3ba1324e..bbb1d3fd 100644 --- a/src/merge/resources/hris/types/paginated_time_off_balance_list.py +++ b/src/merge/resources/hris/types/paginated_time_off_balance_list.py @@ -25,8 +25,4 @@ class Config: extra = pydantic.Extra.allow -from .employee import Employee # noqa: E402, F401, I001 -from .employment import Employment # noqa: E402, F401, I001 -from .team import Team # noqa: E402, F401, I001 - update_forward_refs(PaginatedTimeOffBalanceList) diff --git a/src/merge/resources/hris/types/paginated_time_off_list.py b/src/merge/resources/hris/types/paginated_time_off_list.py index f5b941b7..d6b66c2c 100644 --- a/src/merge/resources/hris/types/paginated_time_off_list.py +++ b/src/merge/resources/hris/types/paginated_time_off_list.py @@ -25,8 +25,4 @@ class Config: extra = pydantic.Extra.allow -from .employee import Employee # noqa: E402, F401, I001 -from .employment import Employment # noqa: E402, F401, I001 -from .team import Team # noqa: E402, F401, I001 - update_forward_refs(PaginatedTimeOffList) diff --git a/src/merge/resources/hris/types/paginated_timesheet_entry_list.py b/src/merge/resources/hris/types/paginated_timesheet_entry_list.py index 612a1b25..f4a7d107 100644 --- a/src/merge/resources/hris/types/paginated_timesheet_entry_list.py +++ b/src/merge/resources/hris/types/paginated_timesheet_entry_list.py @@ -25,8 +25,4 @@ class Config: extra = pydantic.Extra.allow -from .employee import Employee # noqa: E402, F401, I001 -from .employment import Employment # noqa: E402, F401, I001 -from .team import Team # noqa: E402, F401, I001 - update_forward_refs(PaginatedTimesheetEntryList) diff --git a/src/merge/resources/hris/types/pay_currency_enum.py b/src/merge/resources/hris/types/pay_currency_enum.py index f0773521..c85bf0b6 100644 --- a/src/merge/resources/hris/types/pay_currency_enum.py +++ b/src/merge/resources/hris/types/pay_currency_enum.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ....core import enum + T_Result = typing.TypeVar("T_Result") -class PayCurrencyEnum(str, enum.Enum): +class PayCurrencyEnum(enum.StrEnum): """ * `XUA` - ADB Unit of Account * `AFN` - Afghan Afghani diff --git a/src/merge/resources/hris/types/pay_frequency_enum.py b/src/merge/resources/hris/types/pay_frequency_enum.py index a9c635a9..19b4d589 100644 --- a/src/merge/resources/hris/types/pay_frequency_enum.py +++ b/src/merge/resources/hris/types/pay_frequency_enum.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ....core import enum + T_Result = typing.TypeVar("T_Result") -class PayFrequencyEnum(str, enum.Enum): +class PayFrequencyEnum(enum.StrEnum): """ * `WEEKLY` - WEEKLY * `BIWEEKLY` - BIWEEKLY diff --git a/src/merge/resources/hris/types/pay_group.py b/src/merge/resources/hris/types/pay_group.py index 5ade80dd..bf6288a0 100644 --- a/src/merge/resources/hris/types/pay_group.py +++ b/src/merge/resources/hris/types/pay_group.py @@ -45,7 +45,7 @@ class PayGroup(UncheckedBaseModel): Indicates whether or not this object has been deleted in the third party platform. Full coverage deletion detection is a premium add-on. Native deletion detection is offered for free with limited coverage. [Learn more](https://docs.merge.dev/integrations/hris/supported-features/). """ - field_mappings: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None + field_mappings: typing.Optional[typing.Dict[str, typing.Any]] = None remote_data: typing.Optional[typing.List[RemoteData]] = None if IS_PYDANTIC_V2: diff --git a/src/merge/resources/hris/types/pay_period_enum.py b/src/merge/resources/hris/types/pay_period_enum.py index b3b48bda..97358d81 100644 --- a/src/merge/resources/hris/types/pay_period_enum.py +++ b/src/merge/resources/hris/types/pay_period_enum.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ....core import enum + T_Result = typing.TypeVar("T_Result") -class PayPeriodEnum(str, enum.Enum): +class PayPeriodEnum(enum.StrEnum): """ * `HOUR` - HOUR * `DAY` - DAY diff --git a/src/merge/resources/hris/types/payroll_run.py b/src/merge/resources/hris/types/payroll_run.py index 21f8380c..7d09e748 100644 --- a/src/merge/resources/hris/types/payroll_run.py +++ b/src/merge/resources/hris/types/payroll_run.py @@ -79,7 +79,7 @@ class PayrollRun(UncheckedBaseModel): Indicates whether or not this object has been deleted in the third party platform. Full coverage deletion detection is a premium add-on. Native deletion detection is offered for free with limited coverage. [Learn more](https://docs.merge.dev/integrations/hris/supported-features/). """ - field_mappings: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None + field_mappings: typing.Optional[typing.Dict[str, typing.Any]] = None remote_data: typing.Optional[typing.List[RemoteData]] = None if IS_PYDANTIC_V2: diff --git a/src/merge/resources/hris/types/policy_type_enum.py b/src/merge/resources/hris/types/policy_type_enum.py index 2bb2834b..0aae7956 100644 --- a/src/merge/resources/hris/types/policy_type_enum.py +++ b/src/merge/resources/hris/types/policy_type_enum.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ....core import enum + T_Result = typing.TypeVar("T_Result") -class PolicyTypeEnum(str, enum.Enum): +class PolicyTypeEnum(enum.StrEnum): """ * `VACATION` - VACATION * `SICK` - SICK diff --git a/src/merge/resources/hris/types/reason_enum.py b/src/merge/resources/hris/types/reason_enum.py index ea6ba5b6..77c6e96c 100644 --- a/src/merge/resources/hris/types/reason_enum.py +++ b/src/merge/resources/hris/types/reason_enum.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ....core import enum + T_Result = typing.TypeVar("T_Result") -class ReasonEnum(str, enum.Enum): +class ReasonEnum(enum.StrEnum): """ * `GENERAL_CUSTOMER_REQUEST` - GENERAL_CUSTOMER_REQUEST * `GDPR` - GDPR diff --git a/src/merge/resources/hris/types/relationship_enum.py b/src/merge/resources/hris/types/relationship_enum.py index 49e03d68..2b0bdcfe 100644 --- a/src/merge/resources/hris/types/relationship_enum.py +++ b/src/merge/resources/hris/types/relationship_enum.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ....core import enum + T_Result = typing.TypeVar("T_Result") -class RelationshipEnum(str, enum.Enum): +class RelationshipEnum(enum.StrEnum): """ * `CHILD` - CHILD * `SPOUSE` - SPOUSE diff --git a/src/merge/resources/hris/types/remote_data.py b/src/merge/resources/hris/types/remote_data.py index f34bec80..2026f05a 100644 --- a/src/merge/resources/hris/types/remote_data.py +++ b/src/merge/resources/hris/types/remote_data.py @@ -22,7 +22,7 @@ class RemoteData(UncheckedBaseModel): The third-party API path that is being called. """ - data: typing.Optional[typing.Optional[typing.Any]] = pydantic.Field(default=None) + data: typing.Optional[typing.Any] = pydantic.Field(default=None) """ The data returned from the third-party for this object in its original, unnormalized format. """ diff --git a/src/merge/resources/hris/types/remote_endpoint_info.py b/src/merge/resources/hris/types/remote_endpoint_info.py index 07ceff6a..ffa70b94 100644 --- a/src/merge/resources/hris/types/remote_endpoint_info.py +++ b/src/merge/resources/hris/types/remote_endpoint_info.py @@ -10,7 +10,7 @@ class RemoteEndpointInfo(UncheckedBaseModel): method: str url_path: str - field_traversal_path: typing.List[typing.Optional[typing.Any]] + field_traversal_path: typing.List[typing.Any] if IS_PYDANTIC_V2: model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2 diff --git a/src/merge/resources/hris/types/remote_field_api.py b/src/merge/resources/hris/types/remote_field_api.py index 4c66a23b..79cf45c4 100644 --- a/src/merge/resources/hris/types/remote_field_api.py +++ b/src/merge/resources/hris/types/remote_field_api.py @@ -3,7 +3,9 @@ import typing import pydantic +import typing_extensions from ....core.pydantic_utilities import IS_PYDANTIC_V2 +from ....core.serialization import FieldMetadata from ....core.unchecked_base_model import UncheckedBaseModel from .advanced_metadata import AdvancedMetadata from .remote_endpoint_info import RemoteEndpointInfo @@ -11,10 +13,12 @@ class RemoteFieldApi(UncheckedBaseModel): - schema_: typing.Dict[str, typing.Optional[typing.Any]] = pydantic.Field(alias="schema") + schema_: typing_extensions.Annotated[ + typing.Dict[str, typing.Any], FieldMetadata(alias="schema"), pydantic.Field(alias="schema") + ] remote_key_name: str remote_endpoint_info: RemoteEndpointInfo - example_values: typing.Optional[typing.List[typing.Optional[typing.Any]]] = None + example_values: typing.Optional[typing.List[typing.Any]] = None advanced_metadata: typing.Optional[AdvancedMetadata] = None coverage: typing.Optional[RemoteFieldApiCoverage] = None diff --git a/src/merge/resources/hris/types/remote_field_api_response.py b/src/merge/resources/hris/types/remote_field_api_response.py index 1aeaaa57..43937b27 100644 --- a/src/merge/resources/hris/types/remote_field_api_response.py +++ b/src/merge/resources/hris/types/remote_field_api_response.py @@ -3,34 +3,76 @@ import typing import pydantic +import typing_extensions from ....core.pydantic_utilities import IS_PYDANTIC_V2 +from ....core.serialization import FieldMetadata from ....core.unchecked_base_model import UncheckedBaseModel from .remote_field_api import RemoteFieldApi class RemoteFieldApiResponse(UncheckedBaseModel): - benefit: typing.Optional[typing.List[RemoteFieldApi]] = pydantic.Field(alias="Benefit", default=None) - employer_benefit: typing.Optional[typing.List[RemoteFieldApi]] = pydantic.Field( - alias="EmployerBenefit", default=None - ) - company: typing.Optional[typing.List[RemoteFieldApi]] = pydantic.Field(alias="Company", default=None) - employee_payroll_run: typing.Optional[typing.List[RemoteFieldApi]] = pydantic.Field( - alias="EmployeePayrollRun", default=None - ) - employee: typing.Optional[typing.List[RemoteFieldApi]] = pydantic.Field(alias="Employee", default=None) - employment: typing.Optional[typing.List[RemoteFieldApi]] = pydantic.Field(alias="Employment", default=None) - location: typing.Optional[typing.List[RemoteFieldApi]] = pydantic.Field(alias="Location", default=None) - payroll_run: typing.Optional[typing.List[RemoteFieldApi]] = pydantic.Field(alias="PayrollRun", default=None) - team: typing.Optional[typing.List[RemoteFieldApi]] = pydantic.Field(alias="Team", default=None) - time_off: typing.Optional[typing.List[RemoteFieldApi]] = pydantic.Field(alias="TimeOff", default=None) - time_off_balance: typing.Optional[typing.List[RemoteFieldApi]] = pydantic.Field( - alias="TimeOffBalance", default=None - ) - bank_info: typing.Optional[typing.List[RemoteFieldApi]] = pydantic.Field(alias="BankInfo", default=None) - pay_group: typing.Optional[typing.List[RemoteFieldApi]] = pydantic.Field(alias="PayGroup", default=None) - group: typing.Optional[typing.List[RemoteFieldApi]] = pydantic.Field(alias="Group", default=None) - dependent: typing.Optional[typing.List[RemoteFieldApi]] = pydantic.Field(alias="Dependent", default=None) - timesheet_entry: typing.Optional[typing.List[RemoteFieldApi]] = pydantic.Field(alias="TimesheetEntry", default=None) + benefit: typing_extensions.Annotated[ + typing.Optional[typing.List[RemoteFieldApi]], FieldMetadata(alias="Benefit"), pydantic.Field(alias="Benefit") + ] = None + employer_benefit: typing_extensions.Annotated[ + typing.Optional[typing.List[RemoteFieldApi]], + FieldMetadata(alias="EmployerBenefit"), + pydantic.Field(alias="EmployerBenefit"), + ] = None + company: typing_extensions.Annotated[ + typing.Optional[typing.List[RemoteFieldApi]], FieldMetadata(alias="Company"), pydantic.Field(alias="Company") + ] = None + employee_payroll_run: typing_extensions.Annotated[ + typing.Optional[typing.List[RemoteFieldApi]], + FieldMetadata(alias="EmployeePayrollRun"), + pydantic.Field(alias="EmployeePayrollRun"), + ] = None + employee: typing_extensions.Annotated[ + typing.Optional[typing.List[RemoteFieldApi]], FieldMetadata(alias="Employee"), pydantic.Field(alias="Employee") + ] = None + employment: typing_extensions.Annotated[ + typing.Optional[typing.List[RemoteFieldApi]], + FieldMetadata(alias="Employment"), + pydantic.Field(alias="Employment"), + ] = None + location: typing_extensions.Annotated[ + typing.Optional[typing.List[RemoteFieldApi]], FieldMetadata(alias="Location"), pydantic.Field(alias="Location") + ] = None + payroll_run: typing_extensions.Annotated[ + typing.Optional[typing.List[RemoteFieldApi]], + FieldMetadata(alias="PayrollRun"), + pydantic.Field(alias="PayrollRun"), + ] = None + team: typing_extensions.Annotated[ + typing.Optional[typing.List[RemoteFieldApi]], FieldMetadata(alias="Team"), pydantic.Field(alias="Team") + ] = None + time_off: typing_extensions.Annotated[ + typing.Optional[typing.List[RemoteFieldApi]], FieldMetadata(alias="TimeOff"), pydantic.Field(alias="TimeOff") + ] = None + time_off_balance: typing_extensions.Annotated[ + typing.Optional[typing.List[RemoteFieldApi]], + FieldMetadata(alias="TimeOffBalance"), + pydantic.Field(alias="TimeOffBalance"), + ] = None + bank_info: typing_extensions.Annotated[ + typing.Optional[typing.List[RemoteFieldApi]], FieldMetadata(alias="BankInfo"), pydantic.Field(alias="BankInfo") + ] = None + pay_group: typing_extensions.Annotated[ + typing.Optional[typing.List[RemoteFieldApi]], FieldMetadata(alias="PayGroup"), pydantic.Field(alias="PayGroup") + ] = None + group: typing_extensions.Annotated[ + typing.Optional[typing.List[RemoteFieldApi]], FieldMetadata(alias="Group"), pydantic.Field(alias="Group") + ] = None + dependent: typing_extensions.Annotated[ + typing.Optional[typing.List[RemoteFieldApi]], + FieldMetadata(alias="Dependent"), + pydantic.Field(alias="Dependent"), + ] = None + timesheet_entry: typing_extensions.Annotated[ + typing.Optional[typing.List[RemoteFieldApi]], + FieldMetadata(alias="TimesheetEntry"), + pydantic.Field(alias="TimesheetEntry"), + ] = None if IS_PYDANTIC_V2: model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2 diff --git a/src/merge/resources/hris/types/remote_response.py b/src/merge/resources/hris/types/remote_response.py index db01131f..8bc6f905 100644 --- a/src/merge/resources/hris/types/remote_response.py +++ b/src/merge/resources/hris/types/remote_response.py @@ -21,10 +21,10 @@ class RemoteResponse(UncheckedBaseModel): method: str path: str status: int - response: typing.Optional[typing.Any] = None - response_headers: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None + response: typing.Any + response_headers: typing.Optional[typing.Dict[str, typing.Any]] = None response_type: typing.Optional[RemoteResponseResponseType] = None - headers: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None + headers: typing.Optional[typing.Dict[str, typing.Any]] = None if IS_PYDANTIC_V2: model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2 diff --git a/src/merge/resources/hris/types/request_format_enum.py b/src/merge/resources/hris/types/request_format_enum.py index 21c272f2..b8e2234c 100644 --- a/src/merge/resources/hris/types/request_format_enum.py +++ b/src/merge/resources/hris/types/request_format_enum.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ....core import enum + T_Result = typing.TypeVar("T_Result") -class RequestFormatEnum(str, enum.Enum): +class RequestFormatEnum(enum.StrEnum): """ * `JSON` - JSON * `XML` - XML diff --git a/src/merge/resources/hris/types/request_type_enum.py b/src/merge/resources/hris/types/request_type_enum.py index 8bdcdd08..025f1b38 100644 --- a/src/merge/resources/hris/types/request_type_enum.py +++ b/src/merge/resources/hris/types/request_type_enum.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ....core import enum + T_Result = typing.TypeVar("T_Result") -class RequestTypeEnum(str, enum.Enum): +class RequestTypeEnum(enum.StrEnum): """ * `VACATION` - VACATION * `SICK` - SICK diff --git a/src/merge/resources/hris/types/response_type_enum.py b/src/merge/resources/hris/types/response_type_enum.py index ef241302..8a72c2a9 100644 --- a/src/merge/resources/hris/types/response_type_enum.py +++ b/src/merge/resources/hris/types/response_type_enum.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ....core import enum + T_Result = typing.TypeVar("T_Result") -class ResponseTypeEnum(str, enum.Enum): +class ResponseTypeEnum(enum.StrEnum): """ * `JSON` - JSON * `BASE64_GZIP` - BASE64_GZIP diff --git a/src/merge/resources/hris/types/role_enum.py b/src/merge/resources/hris/types/role_enum.py index 8f2c9b1d..394ec992 100644 --- a/src/merge/resources/hris/types/role_enum.py +++ b/src/merge/resources/hris/types/role_enum.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ....core import enum + T_Result = typing.TypeVar("T_Result") -class RoleEnum(str, enum.Enum): +class RoleEnum(enum.StrEnum): """ * `ADMIN` - ADMIN * `DEVELOPER` - DEVELOPER diff --git a/src/merge/resources/hris/types/run_state_enum.py b/src/merge/resources/hris/types/run_state_enum.py index 18546609..5ace444f 100644 --- a/src/merge/resources/hris/types/run_state_enum.py +++ b/src/merge/resources/hris/types/run_state_enum.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ....core import enum + T_Result = typing.TypeVar("T_Result") -class RunStateEnum(str, enum.Enum): +class RunStateEnum(enum.StrEnum): """ * `PAID` - PAID * `DRAFT` - DRAFT diff --git a/src/merge/resources/hris/types/run_type_enum.py b/src/merge/resources/hris/types/run_type_enum.py index 6bc5beaf..a910e6b2 100644 --- a/src/merge/resources/hris/types/run_type_enum.py +++ b/src/merge/resources/hris/types/run_type_enum.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ....core import enum + T_Result = typing.TypeVar("T_Result") -class RunTypeEnum(str, enum.Enum): +class RunTypeEnum(enum.StrEnum): """ * `REGULAR` - REGULAR * `OFF_CYCLE` - OFF_CYCLE diff --git a/src/merge/resources/hris/types/selective_sync_configurations_usage_enum.py b/src/merge/resources/hris/types/selective_sync_configurations_usage_enum.py index 9ff43813..e8e318c0 100644 --- a/src/merge/resources/hris/types/selective_sync_configurations_usage_enum.py +++ b/src/merge/resources/hris/types/selective_sync_configurations_usage_enum.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ....core import enum + T_Result = typing.TypeVar("T_Result") -class SelectiveSyncConfigurationsUsageEnum(str, enum.Enum): +class SelectiveSyncConfigurationsUsageEnum(enum.StrEnum): """ * `IN_NEXT_SYNC` - IN_NEXT_SYNC * `IN_LAST_SYNC` - IN_LAST_SYNC diff --git a/src/merge/resources/hris/types/status_fd_5_enum.py b/src/merge/resources/hris/types/status_fd_5_enum.py index d753f77c..6b851a79 100644 --- a/src/merge/resources/hris/types/status_fd_5_enum.py +++ b/src/merge/resources/hris/types/status_fd_5_enum.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ....core import enum + T_Result = typing.TypeVar("T_Result") -class StatusFd5Enum(str, enum.Enum): +class StatusFd5Enum(enum.StrEnum): """ * `SYNCING` - SYNCING * `DONE` - DONE diff --git a/src/merge/resources/hris/types/tax.py b/src/merge/resources/hris/types/tax.py index 97441cbf..f5bdb498 100644 --- a/src/merge/resources/hris/types/tax.py +++ b/src/merge/resources/hris/types/tax.py @@ -56,7 +56,7 @@ class Tax(UncheckedBaseModel): Indicates whether or not this object has been deleted in the third party platform. Full coverage deletion detection is a premium add-on. Native deletion detection is offered for free with limited coverage. [Learn more](https://docs.merge.dev/integrations/hris/supported-features/). """ - field_mappings: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None + field_mappings: typing.Optional[typing.Dict[str, typing.Any]] = None remote_data: typing.Optional[typing.List[RemoteData]] = None if IS_PYDANTIC_V2: diff --git a/src/merge/resources/hris/types/team.py b/src/merge/resources/hris/types/team.py index 264b75eb..924f71fc 100644 --- a/src/merge/resources/hris/types/team.py +++ b/src/merge/resources/hris/types/team.py @@ -52,7 +52,7 @@ class Team(UncheckedBaseModel): Indicates whether or not this object has been deleted in the third party platform. Full coverage deletion detection is a premium add-on. Native deletion detection is offered for free with limited coverage. [Learn more](https://docs.merge.dev/integrations/hris/supported-features/). """ - field_mappings: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None + field_mappings: typing.Optional[typing.Dict[str, typing.Any]] = None remote_data: typing.Optional[typing.List[RemoteData]] = None if IS_PYDANTIC_V2: @@ -65,6 +65,6 @@ class Config: extra = pydantic.Extra.allow -from .team_parent_team import TeamParentTeam # noqa: E402, F401, I001 +from .team_parent_team import TeamParentTeam # noqa: E402, I001 -update_forward_refs(Team) +update_forward_refs(Team, TeamParentTeam=TeamParentTeam) diff --git a/src/merge/resources/hris/types/time_off.py b/src/merge/resources/hris/types/time_off.py index 10860921..d5c01a45 100644 --- a/src/merge/resources/hris/types/time_off.py +++ b/src/merge/resources/hris/types/time_off.py @@ -108,7 +108,7 @@ class TimeOff(UncheckedBaseModel): Indicates whether or not this object has been deleted in the third party platform. Full coverage deletion detection is a premium add-on. Native deletion detection is offered for free with limited coverage. [Learn more](https://docs.merge.dev/integrations/hris/supported-features/). """ - field_mappings: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None + field_mappings: typing.Optional[typing.Dict[str, typing.Any]] = None remote_data: typing.Optional[typing.List[RemoteData]] = None if IS_PYDANTIC_V2: @@ -121,8 +121,4 @@ class Config: extra = pydantic.Extra.allow -from .employee import Employee # noqa: E402, F401, I001 -from .employment import Employment # noqa: E402, F401, I001 -from .team import Team # noqa: E402, F401, I001 - update_forward_refs(TimeOff) diff --git a/src/merge/resources/hris/types/time_off_balance.py b/src/merge/resources/hris/types/time_off_balance.py index aacbc0bd..5cf96775 100644 --- a/src/merge/resources/hris/types/time_off_balance.py +++ b/src/merge/resources/hris/types/time_off_balance.py @@ -71,7 +71,7 @@ class TimeOffBalance(UncheckedBaseModel): Indicates whether or not this object has been deleted in the third party platform. Full coverage deletion detection is a premium add-on. Native deletion detection is offered for free with limited coverage. [Learn more](https://docs.merge.dev/integrations/hris/supported-features/). """ - field_mappings: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None + field_mappings: typing.Optional[typing.Dict[str, typing.Any]] = None remote_data: typing.Optional[typing.List[RemoteData]] = None if IS_PYDANTIC_V2: @@ -84,8 +84,4 @@ class Config: extra = pydantic.Extra.allow -from .employee import Employee # noqa: E402, F401, I001 -from .employment import Employment # noqa: E402, F401, I001 -from .team import Team # noqa: E402, F401, I001 - update_forward_refs(TimeOffBalance) diff --git a/src/merge/resources/hris/types/time_off_request.py b/src/merge/resources/hris/types/time_off_request.py index c9b49089..c3401ffd 100644 --- a/src/merge/resources/hris/types/time_off_request.py +++ b/src/merge/resources/hris/types/time_off_request.py @@ -86,8 +86,8 @@ class TimeOffRequest(UncheckedBaseModel): The day and time of the end of the time requested off. """ - integration_params: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None - linked_account_params: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None + integration_params: typing.Optional[typing.Dict[str, typing.Any]] = None + linked_account_params: typing.Optional[typing.Dict[str, typing.Any]] = None if IS_PYDANTIC_V2: model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2 @@ -99,8 +99,4 @@ class Config: extra = pydantic.Extra.allow -from .employee import Employee # noqa: E402, F401, I001 -from .employment import Employment # noqa: E402, F401, I001 -from .team import Team # noqa: E402, F401, I001 - update_forward_refs(TimeOffRequest) diff --git a/src/merge/resources/hris/types/time_off_response.py b/src/merge/resources/hris/types/time_off_response.py index 416a5def..f8e7026d 100644 --- a/src/merge/resources/hris/types/time_off_response.py +++ b/src/merge/resources/hris/types/time_off_response.py @@ -29,8 +29,4 @@ class Config: extra = pydantic.Extra.allow -from .employee import Employee # noqa: E402, F401, I001 -from .employment import Employment # noqa: E402, F401, I001 -from .team import Team # noqa: E402, F401, I001 - update_forward_refs(TimeOffResponse) diff --git a/src/merge/resources/hris/types/time_off_status_enum.py b/src/merge/resources/hris/types/time_off_status_enum.py index 771cf345..2964276c 100644 --- a/src/merge/resources/hris/types/time_off_status_enum.py +++ b/src/merge/resources/hris/types/time_off_status_enum.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ....core import enum + T_Result = typing.TypeVar("T_Result") -class TimeOffStatusEnum(str, enum.Enum): +class TimeOffStatusEnum(enum.StrEnum): """ * `REQUESTED` - REQUESTED * `APPROVED` - APPROVED diff --git a/src/merge/resources/hris/types/timesheet_entry.py b/src/merge/resources/hris/types/timesheet_entry.py index a5966977..27dc035f 100644 --- a/src/merge/resources/hris/types/timesheet_entry.py +++ b/src/merge/resources/hris/types/timesheet_entry.py @@ -64,7 +64,7 @@ class TimesheetEntry(UncheckedBaseModel): Indicates whether or not this object has been deleted in the third party platform. Full coverage deletion detection is a premium add-on. Native deletion detection is offered for free with limited coverage. [Learn more](https://docs.merge.dev/integrations/hris/supported-features/). """ - field_mappings: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None + field_mappings: typing.Optional[typing.Dict[str, typing.Any]] = None remote_data: typing.Optional[typing.List[RemoteData]] = None if IS_PYDANTIC_V2: @@ -77,8 +77,4 @@ class Config: extra = pydantic.Extra.allow -from .employee import Employee # noqa: E402, F401, I001 -from .employment import Employment # noqa: E402, F401, I001 -from .team import Team # noqa: E402, F401, I001 - update_forward_refs(TimesheetEntry) diff --git a/src/merge/resources/hris/types/timesheet_entry_request.py b/src/merge/resources/hris/types/timesheet_entry_request.py index df004147..c5482015 100644 --- a/src/merge/resources/hris/types/timesheet_entry_request.py +++ b/src/merge/resources/hris/types/timesheet_entry_request.py @@ -42,8 +42,8 @@ class TimesheetEntryRequest(UncheckedBaseModel): The time at which the employee ended work. """ - integration_params: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None - linked_account_params: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None + integration_params: typing.Optional[typing.Dict[str, typing.Any]] = None + linked_account_params: typing.Optional[typing.Dict[str, typing.Any]] = None if IS_PYDANTIC_V2: model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2 @@ -55,8 +55,4 @@ class Config: extra = pydantic.Extra.allow -from .employee import Employee # noqa: E402, F401, I001 -from .employment import Employment # noqa: E402, F401, I001 -from .team import Team # noqa: E402, F401, I001 - update_forward_refs(TimesheetEntryRequest) diff --git a/src/merge/resources/hris/types/timesheet_entry_response.py b/src/merge/resources/hris/types/timesheet_entry_response.py index 1c6bb197..1821d263 100644 --- a/src/merge/resources/hris/types/timesheet_entry_response.py +++ b/src/merge/resources/hris/types/timesheet_entry_response.py @@ -29,8 +29,4 @@ class Config: extra = pydantic.Extra.allow -from .employee import Employee # noqa: E402, F401, I001 -from .employment import Employment # noqa: E402, F401, I001 -from .team import Team # noqa: E402, F401, I001 - update_forward_refs(TimesheetEntryResponse) diff --git a/src/merge/resources/hris/types/units_enum.py b/src/merge/resources/hris/types/units_enum.py index e1d3f0d2..6f1ff142 100644 --- a/src/merge/resources/hris/types/units_enum.py +++ b/src/merge/resources/hris/types/units_enum.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ....core import enum + T_Result = typing.TypeVar("T_Result") -class UnitsEnum(str, enum.Enum): +class UnitsEnum(enum.StrEnum): """ * `HOURS` - HOURS * `DAYS` - DAYS diff --git a/src/merge/resources/knowledgebase/__init__.py b/src/merge/resources/knowledgebase/__init__.py index 4e37f26c..b58d5025 100644 --- a/src/merge/resources/knowledgebase/__init__.py +++ b/src/merge/resources/knowledgebase/__init__.py @@ -330,8 +330,10 @@ def __getattr__(attr_name: str) -> typing.Any: raise AttributeError(f"No {attr_name} found in _dynamic_imports for module name -> {__name__}") try: module = import_module(module_name, __package__) - result = getattr(module, attr_name) - return result + if module_name == f".{attr_name}": + return module + else: + return getattr(module, attr_name) except ImportError as e: raise ImportError(f"Failed to import {attr_name} from {module_name}: {e}") from e except AttributeError as e: diff --git a/src/merge/resources/knowledgebase/resources/__init__.py b/src/merge/resources/knowledgebase/resources/__init__.py index d6cf2527..4c0c45c7 100644 --- a/src/merge/resources/knowledgebase/resources/__init__.py +++ b/src/merge/resources/knowledgebase/resources/__init__.py @@ -55,28 +55,28 @@ "GroupsRetrieveRequestExpandItem": ".groups", "IssuesListRequestStatus": ".issues", "LinkedAccountsListRequestCategory": ".linked_accounts", - "account_details": ".", - "account_token": ".", - "articles": ".", - "async_passthrough": ".", - "attachments": ".", - "audit_trail": ".", - "available_actions": ".", - "containers": ".", - "delete_account": ".", - "field_mapping": ".", - "force_resync": ".", - "generate_key": ".", - "groups": ".", - "issues": ".", - "link_token": ".", - "linked_accounts": ".", - "passthrough": ".", - "regenerate_key": ".", - "scopes": ".", - "sync_status": ".", - "users": ".", - "webhook_receivers": ".", + "account_details": ".account_details", + "account_token": ".account_token", + "articles": ".articles", + "async_passthrough": ".async_passthrough", + "attachments": ".attachments", + "audit_trail": ".audit_trail", + "available_actions": ".available_actions", + "containers": ".containers", + "delete_account": ".delete_account", + "field_mapping": ".field_mapping", + "force_resync": ".force_resync", + "generate_key": ".generate_key", + "groups": ".groups", + "issues": ".issues", + "link_token": ".link_token", + "linked_accounts": ".linked_accounts", + "passthrough": ".passthrough", + "regenerate_key": ".regenerate_key", + "scopes": ".scopes", + "sync_status": ".sync_status", + "users": ".users", + "webhook_receivers": ".webhook_receivers", } @@ -86,8 +86,10 @@ def __getattr__(attr_name: str) -> typing.Any: raise AttributeError(f"No {attr_name} found in _dynamic_imports for module name -> {__name__}") try: module = import_module(module_name, __package__) - result = getattr(module, attr_name) - return result + if module_name == f".{attr_name}": + return module + else: + return getattr(module, attr_name) except ImportError as e: raise ImportError(f"Failed to import {attr_name} from {module_name}: {e}") from e except AttributeError as e: diff --git a/src/merge/resources/knowledgebase/resources/account_details/raw_client.py b/src/merge/resources/knowledgebase/resources/account_details/raw_client.py index 836e029d..39d6352e 100644 --- a/src/merge/resources/knowledgebase/resources/account_details/raw_client.py +++ b/src/merge/resources/knowledgebase/resources/account_details/raw_client.py @@ -6,9 +6,11 @@ from .....core.api_error import ApiError from .....core.client_wrapper import AsyncClientWrapper, SyncClientWrapper from .....core.http_response import AsyncHttpResponse, HttpResponse +from .....core.parse_error import ParsingError from .....core.request_options import RequestOptions from .....core.unchecked_base_model import construct_type from ...types.account_details import AccountDetails +from pydantic import ValidationError class RawAccountDetailsClient: @@ -47,6 +49,10 @@ def retrieve(self, *, request_options: typing.Optional[RequestOptions] = None) - _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) @@ -88,4 +94,8 @@ async def retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) diff --git a/src/merge/resources/knowledgebase/resources/account_token/raw_client.py b/src/merge/resources/knowledgebase/resources/account_token/raw_client.py index 29d81164..8f5e0735 100644 --- a/src/merge/resources/knowledgebase/resources/account_token/raw_client.py +++ b/src/merge/resources/knowledgebase/resources/account_token/raw_client.py @@ -7,10 +7,12 @@ from .....core.client_wrapper import AsyncClientWrapper, SyncClientWrapper from .....core.http_response import AsyncHttpResponse, HttpResponse from .....core.jsonable_encoder import jsonable_encoder +from .....core.parse_error import ParsingError from .....core.request_options import RequestOptions from .....core.unchecked_base_model import construct_type from ...types.account_token import AccountToken from ...types.regenerate_account_token import RegenerateAccountToken +from pydantic import ValidationError class RawAccountTokenClient: @@ -53,6 +55,10 @@ def retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) def regenerate_create( @@ -89,6 +95,10 @@ def regenerate_create( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) @@ -132,6 +142,10 @@ async def retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) async def regenerate_create( @@ -168,4 +182,8 @@ async def regenerate_create( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) diff --git a/src/merge/resources/knowledgebase/resources/articles/__init__.py b/src/merge/resources/knowledgebase/resources/articles/__init__.py index a5fd33bf..9666b672 100644 --- a/src/merge/resources/knowledgebase/resources/articles/__init__.py +++ b/src/merge/resources/knowledgebase/resources/articles/__init__.py @@ -20,8 +20,10 @@ def __getattr__(attr_name: str) -> typing.Any: raise AttributeError(f"No {attr_name} found in _dynamic_imports for module name -> {__name__}") try: module = import_module(module_name, __package__) - result = getattr(module, attr_name) - return result + if module_name == f".{attr_name}": + return module + else: + return getattr(module, attr_name) except ImportError as e: raise ImportError(f"Failed to import {attr_name} from {module_name}: {e}") from e except AttributeError as e: diff --git a/src/merge/resources/knowledgebase/resources/articles/raw_client.py b/src/merge/resources/knowledgebase/resources/articles/raw_client.py index 38768405..81fe4b4a 100644 --- a/src/merge/resources/knowledgebase/resources/articles/raw_client.py +++ b/src/merge/resources/knowledgebase/resources/articles/raw_client.py @@ -9,6 +9,7 @@ from .....core.datetime_utils import serialize_datetime from .....core.http_response import AsyncHttpResponse, HttpResponse from .....core.jsonable_encoder import jsonable_encoder +from .....core.parse_error import ParsingError from .....core.request_options import RequestOptions from .....core.unchecked_base_model import construct_type from ...types.article import Article @@ -16,6 +17,7 @@ from .types.articles_list_request_expand_item import ArticlesListRequestExpandItem from .types.articles_list_request_type import ArticlesListRequestType from .types.articles_retrieve_request_expand_item import ArticlesRetrieveRequestExpandItem +from pydantic import ValidationError class RawArticlesClient: @@ -142,6 +144,10 @@ def list( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) def retrieve( @@ -202,6 +208,10 @@ def retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) @@ -329,6 +339,10 @@ async def list( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) async def retrieve( @@ -389,4 +403,8 @@ async def retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) diff --git a/src/merge/resources/knowledgebase/resources/articles/types/__init__.py b/src/merge/resources/knowledgebase/resources/articles/types/__init__.py index c1e98e90..f56a9ccd 100644 --- a/src/merge/resources/knowledgebase/resources/articles/types/__init__.py +++ b/src/merge/resources/knowledgebase/resources/articles/types/__init__.py @@ -22,8 +22,10 @@ def __getattr__(attr_name: str) -> typing.Any: raise AttributeError(f"No {attr_name} found in _dynamic_imports for module name -> {__name__}") try: module = import_module(module_name, __package__) - result = getattr(module, attr_name) - return result + if module_name == f".{attr_name}": + return module + else: + return getattr(module, attr_name) except ImportError as e: raise ImportError(f"Failed to import {attr_name} from {module_name}: {e}") from e except AttributeError as e: diff --git a/src/merge/resources/knowledgebase/resources/articles/types/articles_list_request_expand_item.py b/src/merge/resources/knowledgebase/resources/articles/types/articles_list_request_expand_item.py index b633825a..64cf64af 100644 --- a/src/merge/resources/knowledgebase/resources/articles/types/articles_list_request_expand_item.py +++ b/src/merge/resources/knowledgebase/resources/articles/types/articles_list_request_expand_item.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ......core import enum + T_Result = typing.TypeVar("T_Result") -class ArticlesListRequestExpandItem(str, enum.Enum): +class ArticlesListRequestExpandItem(enum.StrEnum): ATTACHMENTS = "attachments" AUTHOR = "author" LAST_EDITED_BY = "last_edited_by" diff --git a/src/merge/resources/knowledgebase/resources/articles/types/articles_list_request_type.py b/src/merge/resources/knowledgebase/resources/articles/types/articles_list_request_type.py index c09a8782..64a3b9a7 100644 --- a/src/merge/resources/knowledgebase/resources/articles/types/articles_list_request_type.py +++ b/src/merge/resources/knowledgebase/resources/articles/types/articles_list_request_type.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ......core import enum + T_Result = typing.TypeVar("T_Result") -class ArticlesListRequestType(str, enum.Enum): +class ArticlesListRequestType(enum.StrEnum): EMPTY = "" BLOG_POST = "BLOG_POST" PAGE = "PAGE" diff --git a/src/merge/resources/knowledgebase/resources/articles/types/articles_retrieve_request_expand_item.py b/src/merge/resources/knowledgebase/resources/articles/types/articles_retrieve_request_expand_item.py index 7e865019..55daffe0 100644 --- a/src/merge/resources/knowledgebase/resources/articles/types/articles_retrieve_request_expand_item.py +++ b/src/merge/resources/knowledgebase/resources/articles/types/articles_retrieve_request_expand_item.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ......core import enum + T_Result = typing.TypeVar("T_Result") -class ArticlesRetrieveRequestExpandItem(str, enum.Enum): +class ArticlesRetrieveRequestExpandItem(enum.StrEnum): ATTACHMENTS = "attachments" AUTHOR = "author" LAST_EDITED_BY = "last_edited_by" diff --git a/src/merge/resources/knowledgebase/resources/async_passthrough/__init__.py b/src/merge/resources/knowledgebase/resources/async_passthrough/__init__.py index 375c7953..11090986 100644 --- a/src/merge/resources/knowledgebase/resources/async_passthrough/__init__.py +++ b/src/merge/resources/knowledgebase/resources/async_passthrough/__init__.py @@ -16,8 +16,10 @@ def __getattr__(attr_name: str) -> typing.Any: raise AttributeError(f"No {attr_name} found in _dynamic_imports for module name -> {__name__}") try: module = import_module(module_name, __package__) - result = getattr(module, attr_name) - return result + if module_name == f".{attr_name}": + return module + else: + return getattr(module, attr_name) except ImportError as e: raise ImportError(f"Failed to import {attr_name} from {module_name}: {e}") from e except AttributeError as e: diff --git a/src/merge/resources/knowledgebase/resources/async_passthrough/raw_client.py b/src/merge/resources/knowledgebase/resources/async_passthrough/raw_client.py index 1edf795f..db9ea00b 100644 --- a/src/merge/resources/knowledgebase/resources/async_passthrough/raw_client.py +++ b/src/merge/resources/knowledgebase/resources/async_passthrough/raw_client.py @@ -7,11 +7,13 @@ from .....core.client_wrapper import AsyncClientWrapper, SyncClientWrapper from .....core.http_response import AsyncHttpResponse, HttpResponse from .....core.jsonable_encoder import jsonable_encoder +from .....core.parse_error import ParsingError from .....core.request_options import RequestOptions from .....core.unchecked_base_model import construct_type from ...types.async_passthrough_reciept import AsyncPassthroughReciept from ...types.data_passthrough_request import DataPassthroughRequest from .types.async_passthrough_retrieve_response import AsyncPassthroughRetrieveResponse +from pydantic import ValidationError # this is used as the default value for optional parameters OMIT = typing.cast(typing.Any, ...) @@ -62,6 +64,10 @@ def create( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) def retrieve( @@ -100,6 +106,10 @@ def retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) @@ -148,6 +158,10 @@ async def create( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) async def retrieve( @@ -186,4 +200,8 @@ async def retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) diff --git a/src/merge/resources/knowledgebase/resources/async_passthrough/types/__init__.py b/src/merge/resources/knowledgebase/resources/async_passthrough/types/__init__.py index f6e9bec9..dc335400 100644 --- a/src/merge/resources/knowledgebase/resources/async_passthrough/types/__init__.py +++ b/src/merge/resources/knowledgebase/resources/async_passthrough/types/__init__.py @@ -16,8 +16,10 @@ def __getattr__(attr_name: str) -> typing.Any: raise AttributeError(f"No {attr_name} found in _dynamic_imports for module name -> {__name__}") try: module = import_module(module_name, __package__) - result = getattr(module, attr_name) - return result + if module_name == f".{attr_name}": + return module + else: + return getattr(module, attr_name) except ImportError as e: raise ImportError(f"Failed to import {attr_name} from {module_name}: {e}") from e except AttributeError as e: diff --git a/src/merge/resources/knowledgebase/resources/attachments/raw_client.py b/src/merge/resources/knowledgebase/resources/attachments/raw_client.py index 1da00a24..eab60ea2 100644 --- a/src/merge/resources/knowledgebase/resources/attachments/raw_client.py +++ b/src/merge/resources/knowledgebase/resources/attachments/raw_client.py @@ -9,10 +9,12 @@ from .....core.datetime_utils import serialize_datetime from .....core.http_response import AsyncHttpResponse, HttpResponse from .....core.jsonable_encoder import jsonable_encoder +from .....core.parse_error import ParsingError from .....core.request_options import RequestOptions from .....core.unchecked_base_model import construct_type from ...types.attachment import Attachment from ...types.paginated_attachment_list import PaginatedAttachmentList +from pydantic import ValidationError class RawAttachmentsClient: @@ -107,6 +109,10 @@ def list( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) def retrieve( @@ -160,6 +166,10 @@ def retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) @@ -255,6 +265,10 @@ async def list( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) async def retrieve( @@ -308,4 +322,8 @@ async def retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) diff --git a/src/merge/resources/knowledgebase/resources/audit_trail/raw_client.py b/src/merge/resources/knowledgebase/resources/audit_trail/raw_client.py index cbcd2be5..43a505b9 100644 --- a/src/merge/resources/knowledgebase/resources/audit_trail/raw_client.py +++ b/src/merge/resources/knowledgebase/resources/audit_trail/raw_client.py @@ -6,9 +6,11 @@ from .....core.api_error import ApiError from .....core.client_wrapper import AsyncClientWrapper, SyncClientWrapper from .....core.http_response import AsyncHttpResponse, HttpResponse +from .....core.parse_error import ParsingError from .....core.request_options import RequestOptions from .....core.unchecked_base_model import construct_type from ...types.paginated_audit_log_event_list import PaginatedAuditLogEventList +from pydantic import ValidationError class RawAuditTrailClient: @@ -83,6 +85,10 @@ def list( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) @@ -158,4 +164,8 @@ async def list( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) diff --git a/src/merge/resources/knowledgebase/resources/available_actions/raw_client.py b/src/merge/resources/knowledgebase/resources/available_actions/raw_client.py index 9ea7770d..2a83613f 100644 --- a/src/merge/resources/knowledgebase/resources/available_actions/raw_client.py +++ b/src/merge/resources/knowledgebase/resources/available_actions/raw_client.py @@ -6,9 +6,11 @@ from .....core.api_error import ApiError from .....core.client_wrapper import AsyncClientWrapper, SyncClientWrapper from .....core.http_response import AsyncHttpResponse, HttpResponse +from .....core.parse_error import ParsingError from .....core.request_options import RequestOptions from .....core.unchecked_base_model import construct_type from ...types.available_actions import AvailableActions +from pydantic import ValidationError class RawAvailableActionsClient: @@ -47,6 +49,10 @@ def retrieve(self, *, request_options: typing.Optional[RequestOptions] = None) - _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) @@ -88,4 +94,8 @@ async def retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) diff --git a/src/merge/resources/knowledgebase/resources/containers/__init__.py b/src/merge/resources/knowledgebase/resources/containers/__init__.py index 4e447635..3286380b 100644 --- a/src/merge/resources/knowledgebase/resources/containers/__init__.py +++ b/src/merge/resources/knowledgebase/resources/containers/__init__.py @@ -20,8 +20,10 @@ def __getattr__(attr_name: str) -> typing.Any: raise AttributeError(f"No {attr_name} found in _dynamic_imports for module name -> {__name__}") try: module = import_module(module_name, __package__) - result = getattr(module, attr_name) - return result + if module_name == f".{attr_name}": + return module + else: + return getattr(module, attr_name) except ImportError as e: raise ImportError(f"Failed to import {attr_name} from {module_name}: {e}") from e except AttributeError as e: diff --git a/src/merge/resources/knowledgebase/resources/containers/raw_client.py b/src/merge/resources/knowledgebase/resources/containers/raw_client.py index ddb75cf1..4ca2d193 100644 --- a/src/merge/resources/knowledgebase/resources/containers/raw_client.py +++ b/src/merge/resources/knowledgebase/resources/containers/raw_client.py @@ -9,6 +9,7 @@ from .....core.datetime_utils import serialize_datetime from .....core.http_response import AsyncHttpResponse, HttpResponse from .....core.jsonable_encoder import jsonable_encoder +from .....core.parse_error import ParsingError from .....core.request_options import RequestOptions from .....core.unchecked_base_model import construct_type from ...types.container import Container @@ -16,6 +17,7 @@ from .types.containers_list_request_expand_item import ContainersListRequestExpandItem from .types.containers_list_request_type import ContainersListRequestType from .types.containers_retrieve_request_expand_item import ContainersRetrieveRequestExpandItem +from pydantic import ValidationError class RawContainersClient: @@ -132,6 +134,10 @@ def list( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) def retrieve( @@ -192,6 +198,10 @@ def retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) @@ -309,6 +319,10 @@ async def list( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) async def retrieve( @@ -369,4 +383,8 @@ async def retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) diff --git a/src/merge/resources/knowledgebase/resources/containers/types/__init__.py b/src/merge/resources/knowledgebase/resources/containers/types/__init__.py index 26543f15..cda05bfa 100644 --- a/src/merge/resources/knowledgebase/resources/containers/types/__init__.py +++ b/src/merge/resources/knowledgebase/resources/containers/types/__init__.py @@ -22,8 +22,10 @@ def __getattr__(attr_name: str) -> typing.Any: raise AttributeError(f"No {attr_name} found in _dynamic_imports for module name -> {__name__}") try: module = import_module(module_name, __package__) - result = getattr(module, attr_name) - return result + if module_name == f".{attr_name}": + return module + else: + return getattr(module, attr_name) except ImportError as e: raise ImportError(f"Failed to import {attr_name} from {module_name}: {e}") from e except AttributeError as e: diff --git a/src/merge/resources/knowledgebase/resources/containers/types/containers_list_request_expand_item.py b/src/merge/resources/knowledgebase/resources/containers/types/containers_list_request_expand_item.py index cf2e98c0..88a86475 100644 --- a/src/merge/resources/knowledgebase/resources/containers/types/containers_list_request_expand_item.py +++ b/src/merge/resources/knowledgebase/resources/containers/types/containers_list_request_expand_item.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ......core import enum + T_Result = typing.TypeVar("T_Result") -class ContainersListRequestExpandItem(str, enum.Enum): +class ContainersListRequestExpandItem(enum.StrEnum): PARENT_ARTICLE = "parent_article" PARENT_CONTAINER = "parent_container" PERMISSIONS = "permissions" diff --git a/src/merge/resources/knowledgebase/resources/containers/types/containers_list_request_type.py b/src/merge/resources/knowledgebase/resources/containers/types/containers_list_request_type.py index c40414d7..9c33421e 100644 --- a/src/merge/resources/knowledgebase/resources/containers/types/containers_list_request_type.py +++ b/src/merge/resources/knowledgebase/resources/containers/types/containers_list_request_type.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ......core import enum + T_Result = typing.TypeVar("T_Result") -class ContainersListRequestType(str, enum.Enum): +class ContainersListRequestType(enum.StrEnum): EMPTY = "" CATEGORY = "CATEGORY" COLLECTION = "COLLECTION" diff --git a/src/merge/resources/knowledgebase/resources/containers/types/containers_retrieve_request_expand_item.py b/src/merge/resources/knowledgebase/resources/containers/types/containers_retrieve_request_expand_item.py index 887cd6a9..591326ba 100644 --- a/src/merge/resources/knowledgebase/resources/containers/types/containers_retrieve_request_expand_item.py +++ b/src/merge/resources/knowledgebase/resources/containers/types/containers_retrieve_request_expand_item.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ......core import enum + T_Result = typing.TypeVar("T_Result") -class ContainersRetrieveRequestExpandItem(str, enum.Enum): +class ContainersRetrieveRequestExpandItem(enum.StrEnum): PARENT_ARTICLE = "parent_article" PARENT_CONTAINER = "parent_container" PERMISSIONS = "permissions" diff --git a/src/merge/resources/knowledgebase/resources/delete_account/raw_client.py b/src/merge/resources/knowledgebase/resources/delete_account/raw_client.py index 69762675..5905487e 100644 --- a/src/merge/resources/knowledgebase/resources/delete_account/raw_client.py +++ b/src/merge/resources/knowledgebase/resources/delete_account/raw_client.py @@ -6,7 +6,9 @@ from .....core.api_error import ApiError from .....core.client_wrapper import AsyncClientWrapper, SyncClientWrapper from .....core.http_response import AsyncHttpResponse, HttpResponse +from .....core.parse_error import ParsingError from .....core.request_options import RequestOptions +from pydantic import ValidationError class RawDeleteAccountClient: @@ -37,6 +39,10 @@ def delete(self, *, request_options: typing.Optional[RequestOptions] = None) -> _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) @@ -68,4 +74,8 @@ async def delete(self, *, request_options: typing.Optional[RequestOptions] = Non _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) diff --git a/src/merge/resources/knowledgebase/resources/field_mapping/client.py b/src/merge/resources/knowledgebase/resources/field_mapping/client.py index bebab6d4..3a96471b 100644 --- a/src/merge/resources/knowledgebase/resources/field_mapping/client.py +++ b/src/merge/resources/knowledgebase/resources/field_mapping/client.py @@ -71,7 +71,7 @@ def field_mappings_retrieve( def field_mappings_create( self, *, - remote_field_traversal_path: typing.Sequence[typing.Optional[typing.Any]], + remote_field_traversal_path: typing.Sequence[typing.Any], remote_method: str, remote_url_path: str, common_model_name: str, @@ -90,7 +90,7 @@ def field_mappings_create( Parameters ---------- - remote_field_traversal_path : typing.Sequence[typing.Optional[typing.Any]] + remote_field_traversal_path : typing.Sequence[typing.Any] The field traversal path of the remote field listed when you hit the GET /remote-fields endpoint. remote_method : str @@ -206,7 +206,7 @@ def field_mappings_partial_update( field_mapping_id: str, *, remote_data_iteration_count: typing.Optional[int] = None, - remote_field_traversal_path: typing.Optional[typing.Sequence[typing.Optional[typing.Any]]] = OMIT, + remote_field_traversal_path: typing.Optional[typing.Sequence[typing.Any]] = OMIT, remote_method: typing.Optional[str] = OMIT, remote_url_path: typing.Optional[str] = OMIT, jmes_path: typing.Optional[str] = OMIT, @@ -223,7 +223,7 @@ def field_mappings_partial_update( remote_data_iteration_count : typing.Optional[int] Number of common model instances to iterate through when fetching remote data for field mappings. Defaults to 250 if not provided. - remote_field_traversal_path : typing.Optional[typing.Sequence[typing.Optional[typing.Any]]] + remote_field_traversal_path : typing.Optional[typing.Sequence[typing.Any]] The field traversal path of the remote field listed when you hit the GET /remote-fields endpoint. remote_method : typing.Optional[str] @@ -458,7 +458,7 @@ async def main() -> None: async def field_mappings_create( self, *, - remote_field_traversal_path: typing.Sequence[typing.Optional[typing.Any]], + remote_field_traversal_path: typing.Sequence[typing.Any], remote_method: str, remote_url_path: str, common_model_name: str, @@ -477,7 +477,7 @@ async def field_mappings_create( Parameters ---------- - remote_field_traversal_path : typing.Sequence[typing.Optional[typing.Any]] + remote_field_traversal_path : typing.Sequence[typing.Any] The field traversal path of the remote field listed when you hit the GET /remote-fields endpoint. remote_method : str @@ -609,7 +609,7 @@ async def field_mappings_partial_update( field_mapping_id: str, *, remote_data_iteration_count: typing.Optional[int] = None, - remote_field_traversal_path: typing.Optional[typing.Sequence[typing.Optional[typing.Any]]] = OMIT, + remote_field_traversal_path: typing.Optional[typing.Sequence[typing.Any]] = OMIT, remote_method: typing.Optional[str] = OMIT, remote_url_path: typing.Optional[str] = OMIT, jmes_path: typing.Optional[str] = OMIT, @@ -626,7 +626,7 @@ async def field_mappings_partial_update( remote_data_iteration_count : typing.Optional[int] Number of common model instances to iterate through when fetching remote data for field mappings. Defaults to 250 if not provided. - remote_field_traversal_path : typing.Optional[typing.Sequence[typing.Optional[typing.Any]]] + remote_field_traversal_path : typing.Optional[typing.Sequence[typing.Any]] The field traversal path of the remote field listed when you hit the GET /remote-fields endpoint. remote_method : typing.Optional[str] diff --git a/src/merge/resources/knowledgebase/resources/field_mapping/raw_client.py b/src/merge/resources/knowledgebase/resources/field_mapping/raw_client.py index b47aa875..be8e6813 100644 --- a/src/merge/resources/knowledgebase/resources/field_mapping/raw_client.py +++ b/src/merge/resources/knowledgebase/resources/field_mapping/raw_client.py @@ -7,12 +7,14 @@ from .....core.client_wrapper import AsyncClientWrapper, SyncClientWrapper from .....core.http_response import AsyncHttpResponse, HttpResponse from .....core.jsonable_encoder import jsonable_encoder +from .....core.parse_error import ParsingError from .....core.request_options import RequestOptions from .....core.unchecked_base_model import construct_type from ...types.external_target_field_api_response import ExternalTargetFieldApiResponse from ...types.field_mapping_api_instance_response import FieldMappingApiInstanceResponse from ...types.field_mapping_instance_response import FieldMappingInstanceResponse from ...types.remote_field_api_response import RemoteFieldApiResponse +from pydantic import ValidationError # this is used as the default value for optional parameters OMIT = typing.cast(typing.Any, ...) @@ -65,12 +67,16 @@ def field_mappings_retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) def field_mappings_create( self, *, - remote_field_traversal_path: typing.Sequence[typing.Optional[typing.Any]], + remote_field_traversal_path: typing.Sequence[typing.Any], remote_method: str, remote_url_path: str, common_model_name: str, @@ -89,7 +95,7 @@ def field_mappings_create( Parameters ---------- - remote_field_traversal_path : typing.Sequence[typing.Optional[typing.Any]] + remote_field_traversal_path : typing.Sequence[typing.Any] The field traversal path of the remote field listed when you hit the GET /remote-fields endpoint. remote_method : str @@ -171,6 +177,10 @@ def field_mappings_create( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) def field_mappings_destroy( @@ -209,6 +219,10 @@ def field_mappings_destroy( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) def field_mappings_partial_update( @@ -216,7 +230,7 @@ def field_mappings_partial_update( field_mapping_id: str, *, remote_data_iteration_count: typing.Optional[int] = None, - remote_field_traversal_path: typing.Optional[typing.Sequence[typing.Optional[typing.Any]]] = OMIT, + remote_field_traversal_path: typing.Optional[typing.Sequence[typing.Any]] = OMIT, remote_method: typing.Optional[str] = OMIT, remote_url_path: typing.Optional[str] = OMIT, jmes_path: typing.Optional[str] = OMIT, @@ -233,7 +247,7 @@ def field_mappings_partial_update( remote_data_iteration_count : typing.Optional[int] Number of common model instances to iterate through when fetching remote data for field mappings. Defaults to 250 if not provided. - remote_field_traversal_path : typing.Optional[typing.Sequence[typing.Optional[typing.Any]]] + remote_field_traversal_path : typing.Optional[typing.Sequence[typing.Any]] The field traversal path of the remote field listed when you hit the GET /remote-fields endpoint. remote_method : typing.Optional[str] @@ -288,6 +302,10 @@ def field_mappings_partial_update( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) def remote_fields_retrieve( @@ -338,6 +356,10 @@ def remote_fields_retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) def target_fields_retrieve( @@ -374,6 +396,10 @@ def target_fields_retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) def target_fields_create( @@ -433,6 +459,10 @@ def target_fields_create( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) @@ -483,12 +513,16 @@ async def field_mappings_retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) async def field_mappings_create( self, *, - remote_field_traversal_path: typing.Sequence[typing.Optional[typing.Any]], + remote_field_traversal_path: typing.Sequence[typing.Any], remote_method: str, remote_url_path: str, common_model_name: str, @@ -507,7 +541,7 @@ async def field_mappings_create( Parameters ---------- - remote_field_traversal_path : typing.Sequence[typing.Optional[typing.Any]] + remote_field_traversal_path : typing.Sequence[typing.Any] The field traversal path of the remote field listed when you hit the GET /remote-fields endpoint. remote_method : str @@ -589,6 +623,10 @@ async def field_mappings_create( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) async def field_mappings_destroy( @@ -627,6 +665,10 @@ async def field_mappings_destroy( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) async def field_mappings_partial_update( @@ -634,7 +676,7 @@ async def field_mappings_partial_update( field_mapping_id: str, *, remote_data_iteration_count: typing.Optional[int] = None, - remote_field_traversal_path: typing.Optional[typing.Sequence[typing.Optional[typing.Any]]] = OMIT, + remote_field_traversal_path: typing.Optional[typing.Sequence[typing.Any]] = OMIT, remote_method: typing.Optional[str] = OMIT, remote_url_path: typing.Optional[str] = OMIT, jmes_path: typing.Optional[str] = OMIT, @@ -651,7 +693,7 @@ async def field_mappings_partial_update( remote_data_iteration_count : typing.Optional[int] Number of common model instances to iterate through when fetching remote data for field mappings. Defaults to 250 if not provided. - remote_field_traversal_path : typing.Optional[typing.Sequence[typing.Optional[typing.Any]]] + remote_field_traversal_path : typing.Optional[typing.Sequence[typing.Any]] The field traversal path of the remote field listed when you hit the GET /remote-fields endpoint. remote_method : typing.Optional[str] @@ -706,6 +748,10 @@ async def field_mappings_partial_update( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) async def remote_fields_retrieve( @@ -756,6 +802,10 @@ async def remote_fields_retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) async def target_fields_retrieve( @@ -792,6 +842,10 @@ async def target_fields_retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) async def target_fields_create( @@ -851,4 +905,8 @@ async def target_fields_create( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) diff --git a/src/merge/resources/knowledgebase/resources/force_resync/raw_client.py b/src/merge/resources/knowledgebase/resources/force_resync/raw_client.py index afda654c..63c51e4a 100644 --- a/src/merge/resources/knowledgebase/resources/force_resync/raw_client.py +++ b/src/merge/resources/knowledgebase/resources/force_resync/raw_client.py @@ -6,9 +6,11 @@ from .....core.api_error import ApiError from .....core.client_wrapper import AsyncClientWrapper, SyncClientWrapper from .....core.http_response import AsyncHttpResponse, HttpResponse +from .....core.parse_error import ParsingError from .....core.request_options import RequestOptions from .....core.unchecked_base_model import construct_type from ...types.sync_status import SyncStatus +from pydantic import ValidationError class RawForceResyncClient: @@ -49,6 +51,10 @@ def sync_status_resync_create( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) @@ -90,4 +96,8 @@ async def sync_status_resync_create( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) diff --git a/src/merge/resources/knowledgebase/resources/generate_key/raw_client.py b/src/merge/resources/knowledgebase/resources/generate_key/raw_client.py index a528f2c7..fee6057d 100644 --- a/src/merge/resources/knowledgebase/resources/generate_key/raw_client.py +++ b/src/merge/resources/knowledgebase/resources/generate_key/raw_client.py @@ -6,9 +6,11 @@ from .....core.api_error import ApiError from .....core.client_wrapper import AsyncClientWrapper, SyncClientWrapper from .....core.http_response import AsyncHttpResponse, HttpResponse +from .....core.parse_error import ParsingError from .....core.request_options import RequestOptions from .....core.unchecked_base_model import construct_type from ...types.remote_key import RemoteKey +from pydantic import ValidationError # this is used as the default value for optional parameters OMIT = typing.cast(typing.Any, ...) @@ -60,6 +62,10 @@ def create(self, *, name: str, request_options: typing.Optional[RequestOptions] _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) @@ -111,4 +117,8 @@ async def create( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) diff --git a/src/merge/resources/knowledgebase/resources/groups/__init__.py b/src/merge/resources/knowledgebase/resources/groups/__init__.py index c42a8d2e..833b79cd 100644 --- a/src/merge/resources/knowledgebase/resources/groups/__init__.py +++ b/src/merge/resources/knowledgebase/resources/groups/__init__.py @@ -19,8 +19,10 @@ def __getattr__(attr_name: str) -> typing.Any: raise AttributeError(f"No {attr_name} found in _dynamic_imports for module name -> {__name__}") try: module = import_module(module_name, __package__) - result = getattr(module, attr_name) - return result + if module_name == f".{attr_name}": + return module + else: + return getattr(module, attr_name) except ImportError as e: raise ImportError(f"Failed to import {attr_name} from {module_name}: {e}") from e except AttributeError as e: diff --git a/src/merge/resources/knowledgebase/resources/groups/raw_client.py b/src/merge/resources/knowledgebase/resources/groups/raw_client.py index a88d5620..88979934 100644 --- a/src/merge/resources/knowledgebase/resources/groups/raw_client.py +++ b/src/merge/resources/knowledgebase/resources/groups/raw_client.py @@ -9,12 +9,14 @@ from .....core.datetime_utils import serialize_datetime from .....core.http_response import AsyncHttpResponse, HttpResponse from .....core.jsonable_encoder import jsonable_encoder +from .....core.parse_error import ParsingError from .....core.request_options import RequestOptions from .....core.unchecked_base_model import construct_type from ...types.group import Group from ...types.paginated_group_list import PaginatedGroupList from .types.groups_list_request_expand_item import GroupsListRequestExpandItem from .types.groups_retrieve_request_expand_item import GroupsRetrieveRequestExpandItem +from pydantic import ValidationError class RawGroupsClient: @@ -116,6 +118,10 @@ def list( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) def retrieve( @@ -176,6 +182,10 @@ def retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) @@ -278,6 +288,10 @@ async def list( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) async def retrieve( @@ -338,4 +352,8 @@ async def retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) diff --git a/src/merge/resources/knowledgebase/resources/groups/types/__init__.py b/src/merge/resources/knowledgebase/resources/groups/types/__init__.py index 9f5d7290..1ac662da 100644 --- a/src/merge/resources/knowledgebase/resources/groups/types/__init__.py +++ b/src/merge/resources/knowledgebase/resources/groups/types/__init__.py @@ -20,8 +20,10 @@ def __getattr__(attr_name: str) -> typing.Any: raise AttributeError(f"No {attr_name} found in _dynamic_imports for module name -> {__name__}") try: module = import_module(module_name, __package__) - result = getattr(module, attr_name) - return result + if module_name == f".{attr_name}": + return module + else: + return getattr(module, attr_name) except ImportError as e: raise ImportError(f"Failed to import {attr_name} from {module_name}: {e}") from e except AttributeError as e: diff --git a/src/merge/resources/knowledgebase/resources/groups/types/groups_list_request_expand_item.py b/src/merge/resources/knowledgebase/resources/groups/types/groups_list_request_expand_item.py index 63ce0e42..26b4fb56 100644 --- a/src/merge/resources/knowledgebase/resources/groups/types/groups_list_request_expand_item.py +++ b/src/merge/resources/knowledgebase/resources/groups/types/groups_list_request_expand_item.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ......core import enum + T_Result = typing.TypeVar("T_Result") -class GroupsListRequestExpandItem(str, enum.Enum): +class GroupsListRequestExpandItem(enum.StrEnum): PARENT_GROUP = "parent_group" USERS = "users" diff --git a/src/merge/resources/knowledgebase/resources/groups/types/groups_retrieve_request_expand_item.py b/src/merge/resources/knowledgebase/resources/groups/types/groups_retrieve_request_expand_item.py index 29d98cb9..adef5513 100644 --- a/src/merge/resources/knowledgebase/resources/groups/types/groups_retrieve_request_expand_item.py +++ b/src/merge/resources/knowledgebase/resources/groups/types/groups_retrieve_request_expand_item.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ......core import enum + T_Result = typing.TypeVar("T_Result") -class GroupsRetrieveRequestExpandItem(str, enum.Enum): +class GroupsRetrieveRequestExpandItem(enum.StrEnum): PARENT_GROUP = "parent_group" USERS = "users" diff --git a/src/merge/resources/knowledgebase/resources/issues/__init__.py b/src/merge/resources/knowledgebase/resources/issues/__init__.py index 3ca1094b..45b33fe1 100644 --- a/src/merge/resources/knowledgebase/resources/issues/__init__.py +++ b/src/merge/resources/knowledgebase/resources/issues/__init__.py @@ -16,8 +16,10 @@ def __getattr__(attr_name: str) -> typing.Any: raise AttributeError(f"No {attr_name} found in _dynamic_imports for module name -> {__name__}") try: module = import_module(module_name, __package__) - result = getattr(module, attr_name) - return result + if module_name == f".{attr_name}": + return module + else: + return getattr(module, attr_name) except ImportError as e: raise ImportError(f"Failed to import {attr_name} from {module_name}: {e}") from e except AttributeError as e: diff --git a/src/merge/resources/knowledgebase/resources/issues/raw_client.py b/src/merge/resources/knowledgebase/resources/issues/raw_client.py index e8ec7ce9..04fa24b4 100644 --- a/src/merge/resources/knowledgebase/resources/issues/raw_client.py +++ b/src/merge/resources/knowledgebase/resources/issues/raw_client.py @@ -9,11 +9,13 @@ from .....core.datetime_utils import serialize_datetime from .....core.http_response import AsyncHttpResponse, HttpResponse from .....core.jsonable_encoder import jsonable_encoder +from .....core.parse_error import ParsingError from .....core.request_options import RequestOptions from .....core.unchecked_base_model import construct_type from ...types.issue import Issue from ...types.paginated_issue_list import PaginatedIssueList from .types.issues_list_request_status import IssuesListRequestStatus +from pydantic import ValidationError class RawIssuesClient: @@ -133,6 +135,10 @@ def list( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) def retrieve(self, id: str, *, request_options: typing.Optional[RequestOptions] = None) -> HttpResponse[Issue]: @@ -169,6 +175,10 @@ def retrieve(self, id: str, *, request_options: typing.Optional[RequestOptions] _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) @@ -289,6 +299,10 @@ async def list( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) async def retrieve( @@ -327,4 +341,8 @@ async def retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) diff --git a/src/merge/resources/knowledgebase/resources/issues/types/__init__.py b/src/merge/resources/knowledgebase/resources/issues/types/__init__.py index 88fbf977..5e097583 100644 --- a/src/merge/resources/knowledgebase/resources/issues/types/__init__.py +++ b/src/merge/resources/knowledgebase/resources/issues/types/__init__.py @@ -16,8 +16,10 @@ def __getattr__(attr_name: str) -> typing.Any: raise AttributeError(f"No {attr_name} found in _dynamic_imports for module name -> {__name__}") try: module = import_module(module_name, __package__) - result = getattr(module, attr_name) - return result + if module_name == f".{attr_name}": + return module + else: + return getattr(module, attr_name) except ImportError as e: raise ImportError(f"Failed to import {attr_name} from {module_name}: {e}") from e except AttributeError as e: diff --git a/src/merge/resources/knowledgebase/resources/issues/types/issues_list_request_status.py b/src/merge/resources/knowledgebase/resources/issues/types/issues_list_request_status.py index 2bd3521e..a61afdd0 100644 --- a/src/merge/resources/knowledgebase/resources/issues/types/issues_list_request_status.py +++ b/src/merge/resources/knowledgebase/resources/issues/types/issues_list_request_status.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ......core import enum + T_Result = typing.TypeVar("T_Result") -class IssuesListRequestStatus(str, enum.Enum): +class IssuesListRequestStatus(enum.StrEnum): ONGOING = "ONGOING" RESOLVED = "RESOLVED" diff --git a/src/merge/resources/knowledgebase/resources/link_token/__init__.py b/src/merge/resources/knowledgebase/resources/link_token/__init__.py index be8c3839..834918c1 100644 --- a/src/merge/resources/knowledgebase/resources/link_token/__init__.py +++ b/src/merge/resources/knowledgebase/resources/link_token/__init__.py @@ -19,8 +19,10 @@ def __getattr__(attr_name: str) -> typing.Any: raise AttributeError(f"No {attr_name} found in _dynamic_imports for module name -> {__name__}") try: module = import_module(module_name, __package__) - result = getattr(module, attr_name) - return result + if module_name == f".{attr_name}": + return module + else: + return getattr(module, attr_name) except ImportError as e: raise ImportError(f"Failed to import {attr_name} from {module_name}: {e}") from e except AttributeError as e: diff --git a/src/merge/resources/knowledgebase/resources/link_token/client.py b/src/merge/resources/knowledgebase/resources/link_token/client.py index bcca07ac..e3e3a444 100644 --- a/src/merge/resources/knowledgebase/resources/link_token/client.py +++ b/src/merge/resources/knowledgebase/resources/link_token/client.py @@ -50,7 +50,7 @@ def create( ] = OMIT, language: typing.Optional[EndUserDetailsRequestLanguage] = OMIT, are_syncs_disabled: typing.Optional[bool] = OMIT, - integration_specific_config: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = OMIT, + integration_specific_config: typing.Optional[typing.Dict[str, typing.Any]] = OMIT, completed_account_initial_screen: typing.Optional[EndUserDetailsRequestCompletedAccountInitialScreen] = OMIT, linked_destination_id: typing.Optional[str] = OMIT, credential_id: typing.Optional[str] = OMIT, @@ -97,7 +97,7 @@ def create( are_syncs_disabled : typing.Optional[bool] The boolean that indicates whether initial, periodic, and force syncs will be disabled. - integration_specific_config : typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] + integration_specific_config : typing.Optional[typing.Dict[str, typing.Any]] A JSON object containing integration-specific configuration options. completed_account_initial_screen : typing.Optional[EndUserDetailsRequestCompletedAccountInitialScreen] @@ -187,7 +187,7 @@ async def create( ] = OMIT, language: typing.Optional[EndUserDetailsRequestLanguage] = OMIT, are_syncs_disabled: typing.Optional[bool] = OMIT, - integration_specific_config: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = OMIT, + integration_specific_config: typing.Optional[typing.Dict[str, typing.Any]] = OMIT, completed_account_initial_screen: typing.Optional[EndUserDetailsRequestCompletedAccountInitialScreen] = OMIT, linked_destination_id: typing.Optional[str] = OMIT, credential_id: typing.Optional[str] = OMIT, @@ -234,7 +234,7 @@ async def create( are_syncs_disabled : typing.Optional[bool] The boolean that indicates whether initial, periodic, and force syncs will be disabled. - integration_specific_config : typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] + integration_specific_config : typing.Optional[typing.Dict[str, typing.Any]] A JSON object containing integration-specific configuration options. completed_account_initial_screen : typing.Optional[EndUserDetailsRequestCompletedAccountInitialScreen] diff --git a/src/merge/resources/knowledgebase/resources/link_token/raw_client.py b/src/merge/resources/knowledgebase/resources/link_token/raw_client.py index 6cd77c09..6fe46f10 100644 --- a/src/merge/resources/knowledgebase/resources/link_token/raw_client.py +++ b/src/merge/resources/knowledgebase/resources/link_token/raw_client.py @@ -6,6 +6,7 @@ from .....core.api_error import ApiError from .....core.client_wrapper import AsyncClientWrapper, SyncClientWrapper from .....core.http_response import AsyncHttpResponse, HttpResponse +from .....core.parse_error import ParsingError from .....core.request_options import RequestOptions from .....core.unchecked_base_model import construct_type from ...types.categories_enum import CategoriesEnum @@ -16,6 +17,7 @@ EndUserDetailsRequestCompletedAccountInitialScreen, ) from .types.end_user_details_request_language import EndUserDetailsRequestLanguage +from pydantic import ValidationError # this is used as the default value for optional parameters OMIT = typing.cast(typing.Any, ...) @@ -42,7 +44,7 @@ def create( ] = OMIT, language: typing.Optional[EndUserDetailsRequestLanguage] = OMIT, are_syncs_disabled: typing.Optional[bool] = OMIT, - integration_specific_config: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = OMIT, + integration_specific_config: typing.Optional[typing.Dict[str, typing.Any]] = OMIT, completed_account_initial_screen: typing.Optional[EndUserDetailsRequestCompletedAccountInitialScreen] = OMIT, linked_destination_id: typing.Optional[str] = OMIT, credential_id: typing.Optional[str] = OMIT, @@ -89,7 +91,7 @@ def create( are_syncs_disabled : typing.Optional[bool] The boolean that indicates whether initial, periodic, and force syncs will be disabled. - integration_specific_config : typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] + integration_specific_config : typing.Optional[typing.Dict[str, typing.Any]] A JSON object containing integration-specific configuration options. completed_account_initial_screen : typing.Optional[EndUserDetailsRequestCompletedAccountInitialScreen] @@ -149,6 +151,10 @@ def create( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) @@ -173,7 +179,7 @@ async def create( ] = OMIT, language: typing.Optional[EndUserDetailsRequestLanguage] = OMIT, are_syncs_disabled: typing.Optional[bool] = OMIT, - integration_specific_config: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = OMIT, + integration_specific_config: typing.Optional[typing.Dict[str, typing.Any]] = OMIT, completed_account_initial_screen: typing.Optional[EndUserDetailsRequestCompletedAccountInitialScreen] = OMIT, linked_destination_id: typing.Optional[str] = OMIT, credential_id: typing.Optional[str] = OMIT, @@ -220,7 +226,7 @@ async def create( are_syncs_disabled : typing.Optional[bool] The boolean that indicates whether initial, periodic, and force syncs will be disabled. - integration_specific_config : typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] + integration_specific_config : typing.Optional[typing.Dict[str, typing.Any]] A JSON object containing integration-specific configuration options. completed_account_initial_screen : typing.Optional[EndUserDetailsRequestCompletedAccountInitialScreen] @@ -280,4 +286,8 @@ async def create( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) diff --git a/src/merge/resources/knowledgebase/resources/link_token/types/__init__.py b/src/merge/resources/knowledgebase/resources/link_token/types/__init__.py index 55cc1d4e..1846dfb1 100644 --- a/src/merge/resources/knowledgebase/resources/link_token/types/__init__.py +++ b/src/merge/resources/knowledgebase/resources/link_token/types/__init__.py @@ -22,8 +22,10 @@ def __getattr__(attr_name: str) -> typing.Any: raise AttributeError(f"No {attr_name} found in _dynamic_imports for module name -> {__name__}") try: module = import_module(module_name, __package__) - result = getattr(module, attr_name) - return result + if module_name == f".{attr_name}": + return module + else: + return getattr(module, attr_name) except ImportError as e: raise ImportError(f"Failed to import {attr_name} from {module_name}: {e}") from e except AttributeError as e: diff --git a/src/merge/resources/knowledgebase/resources/linked_accounts/__init__.py b/src/merge/resources/knowledgebase/resources/linked_accounts/__init__.py index 0b9e42b4..12e213b7 100644 --- a/src/merge/resources/knowledgebase/resources/linked_accounts/__init__.py +++ b/src/merge/resources/knowledgebase/resources/linked_accounts/__init__.py @@ -16,8 +16,10 @@ def __getattr__(attr_name: str) -> typing.Any: raise AttributeError(f"No {attr_name} found in _dynamic_imports for module name -> {__name__}") try: module = import_module(module_name, __package__) - result = getattr(module, attr_name) - return result + if module_name == f".{attr_name}": + return module + else: + return getattr(module, attr_name) except ImportError as e: raise ImportError(f"Failed to import {attr_name} from {module_name}: {e}") from e except AttributeError as e: diff --git a/src/merge/resources/knowledgebase/resources/linked_accounts/raw_client.py b/src/merge/resources/knowledgebase/resources/linked_accounts/raw_client.py index 991575d6..8836ba0f 100644 --- a/src/merge/resources/knowledgebase/resources/linked_accounts/raw_client.py +++ b/src/merge/resources/knowledgebase/resources/linked_accounts/raw_client.py @@ -6,10 +6,12 @@ from .....core.api_error import ApiError from .....core.client_wrapper import AsyncClientWrapper, SyncClientWrapper from .....core.http_response import AsyncHttpResponse, HttpResponse +from .....core.parse_error import ParsingError from .....core.request_options import RequestOptions from .....core.unchecked_base_model import construct_type from ...types.paginated_account_details_and_actions_list import PaginatedAccountDetailsAndActionsList from .types.linked_accounts_list_request_category import LinkedAccountsListRequestCategory +from pydantic import ValidationError class RawLinkedAccountsClient: @@ -118,6 +120,10 @@ def list( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) @@ -227,4 +233,8 @@ async def list( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) diff --git a/src/merge/resources/knowledgebase/resources/linked_accounts/types/__init__.py b/src/merge/resources/knowledgebase/resources/linked_accounts/types/__init__.py index a28f38cc..a884db6a 100644 --- a/src/merge/resources/knowledgebase/resources/linked_accounts/types/__init__.py +++ b/src/merge/resources/knowledgebase/resources/linked_accounts/types/__init__.py @@ -18,8 +18,10 @@ def __getattr__(attr_name: str) -> typing.Any: raise AttributeError(f"No {attr_name} found in _dynamic_imports for module name -> {__name__}") try: module = import_module(module_name, __package__) - result = getattr(module, attr_name) - return result + if module_name == f".{attr_name}": + return module + else: + return getattr(module, attr_name) except ImportError as e: raise ImportError(f"Failed to import {attr_name} from {module_name}: {e}") from e except AttributeError as e: diff --git a/src/merge/resources/knowledgebase/resources/linked_accounts/types/linked_accounts_list_request_category.py b/src/merge/resources/knowledgebase/resources/linked_accounts/types/linked_accounts_list_request_category.py index 97df0150..035ed972 100644 --- a/src/merge/resources/knowledgebase/resources/linked_accounts/types/linked_accounts_list_request_category.py +++ b/src/merge/resources/knowledgebase/resources/linked_accounts/types/linked_accounts_list_request_category.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ......core import enum + T_Result = typing.TypeVar("T_Result") -class LinkedAccountsListRequestCategory(str, enum.Enum): +class LinkedAccountsListRequestCategory(enum.StrEnum): ACCOUNTING = "accounting" ATS = "ats" CHAT = "chat" diff --git a/src/merge/resources/knowledgebase/resources/passthrough/raw_client.py b/src/merge/resources/knowledgebase/resources/passthrough/raw_client.py index 84c8bfdf..0e2fdeb3 100644 --- a/src/merge/resources/knowledgebase/resources/passthrough/raw_client.py +++ b/src/merge/resources/knowledgebase/resources/passthrough/raw_client.py @@ -6,10 +6,12 @@ from .....core.api_error import ApiError from .....core.client_wrapper import AsyncClientWrapper, SyncClientWrapper from .....core.http_response import AsyncHttpResponse, HttpResponse +from .....core.parse_error import ParsingError from .....core.request_options import RequestOptions from .....core.unchecked_base_model import construct_type from ...types.data_passthrough_request import DataPassthroughRequest from ...types.remote_response import RemoteResponse +from pydantic import ValidationError # this is used as the default value for optional parameters OMIT = typing.cast(typing.Any, ...) @@ -60,6 +62,10 @@ def create( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) @@ -108,4 +114,8 @@ async def create( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) diff --git a/src/merge/resources/knowledgebase/resources/regenerate_key/raw_client.py b/src/merge/resources/knowledgebase/resources/regenerate_key/raw_client.py index 40114afa..d9f7c543 100644 --- a/src/merge/resources/knowledgebase/resources/regenerate_key/raw_client.py +++ b/src/merge/resources/knowledgebase/resources/regenerate_key/raw_client.py @@ -6,9 +6,11 @@ from .....core.api_error import ApiError from .....core.client_wrapper import AsyncClientWrapper, SyncClientWrapper from .....core.http_response import AsyncHttpResponse, HttpResponse +from .....core.parse_error import ParsingError from .....core.request_options import RequestOptions from .....core.unchecked_base_model import construct_type from ...types.remote_key import RemoteKey +from pydantic import ValidationError # this is used as the default value for optional parameters OMIT = typing.cast(typing.Any, ...) @@ -60,6 +62,10 @@ def create(self, *, name: str, request_options: typing.Optional[RequestOptions] _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) @@ -111,4 +117,8 @@ async def create( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) diff --git a/src/merge/resources/knowledgebase/resources/scopes/raw_client.py b/src/merge/resources/knowledgebase/resources/scopes/raw_client.py index c9ae8287..4d661eb7 100644 --- a/src/merge/resources/knowledgebase/resources/scopes/raw_client.py +++ b/src/merge/resources/knowledgebase/resources/scopes/raw_client.py @@ -6,10 +6,12 @@ from .....core.api_error import ApiError from .....core.client_wrapper import AsyncClientWrapper, SyncClientWrapper from .....core.http_response import AsyncHttpResponse, HttpResponse +from .....core.parse_error import ParsingError from .....core.request_options import RequestOptions from .....core.unchecked_base_model import construct_type from ...types.common_model_scope_api import CommonModelScopeApi from ...types.individual_common_model_scope_deserializer_request import IndividualCommonModelScopeDeserializerRequest +from pydantic import ValidationError # this is used as the default value for optional parameters OMIT = typing.cast(typing.Any, ...) @@ -53,6 +55,10 @@ def default_scopes_retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) def linked_account_scopes_retrieve( @@ -89,6 +95,10 @@ def linked_account_scopes_retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) def linked_account_scopes_create( @@ -138,6 +148,10 @@ def linked_account_scopes_create( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) @@ -179,6 +193,10 @@ async def default_scopes_retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) async def linked_account_scopes_retrieve( @@ -215,6 +233,10 @@ async def linked_account_scopes_retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) async def linked_account_scopes_create( @@ -264,4 +286,8 @@ async def linked_account_scopes_create( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) diff --git a/src/merge/resources/knowledgebase/resources/sync_status/raw_client.py b/src/merge/resources/knowledgebase/resources/sync_status/raw_client.py index 9a9760cd..3b8b5066 100644 --- a/src/merge/resources/knowledgebase/resources/sync_status/raw_client.py +++ b/src/merge/resources/knowledgebase/resources/sync_status/raw_client.py @@ -6,9 +6,11 @@ from .....core.api_error import ApiError from .....core.client_wrapper import AsyncClientWrapper, SyncClientWrapper from .....core.http_response import AsyncHttpResponse, HttpResponse +from .....core.parse_error import ParsingError from .....core.request_options import RequestOptions from .....core.unchecked_base_model import construct_type from ...types.paginated_sync_status_list import PaginatedSyncStatusList +from pydantic import ValidationError class RawSyncStatusClient: @@ -63,6 +65,10 @@ def list( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) @@ -118,4 +124,8 @@ async def list( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) diff --git a/src/merge/resources/knowledgebase/resources/users/raw_client.py b/src/merge/resources/knowledgebase/resources/users/raw_client.py index 0cf2bc46..1f8495b5 100644 --- a/src/merge/resources/knowledgebase/resources/users/raw_client.py +++ b/src/merge/resources/knowledgebase/resources/users/raw_client.py @@ -9,10 +9,12 @@ from .....core.datetime_utils import serialize_datetime from .....core.http_response import AsyncHttpResponse, HttpResponse from .....core.jsonable_encoder import jsonable_encoder +from .....core.parse_error import ParsingError from .....core.request_options import RequestOptions from .....core.unchecked_base_model import construct_type from ...types.paginated_user_list import PaginatedUserList from ...types.user import User +from pydantic import ValidationError class RawUsersClient: @@ -107,6 +109,10 @@ def list( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) def retrieve( @@ -160,6 +166,10 @@ def retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) @@ -255,6 +265,10 @@ async def list( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) async def retrieve( @@ -308,4 +322,8 @@ async def retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) diff --git a/src/merge/resources/knowledgebase/resources/webhook_receivers/raw_client.py b/src/merge/resources/knowledgebase/resources/webhook_receivers/raw_client.py index cc0f8589..2fa836a2 100644 --- a/src/merge/resources/knowledgebase/resources/webhook_receivers/raw_client.py +++ b/src/merge/resources/knowledgebase/resources/webhook_receivers/raw_client.py @@ -6,9 +6,11 @@ from .....core.api_error import ApiError from .....core.client_wrapper import AsyncClientWrapper, SyncClientWrapper from .....core.http_response import AsyncHttpResponse, HttpResponse +from .....core.parse_error import ParsingError from .....core.request_options import RequestOptions from .....core.unchecked_base_model import construct_type from ...types.webhook_receiver import WebhookReceiver +from pydantic import ValidationError # this is used as the default value for optional parameters OMIT = typing.cast(typing.Any, ...) @@ -52,6 +54,10 @@ def list( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) def create( @@ -108,6 +114,10 @@ def create( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) @@ -149,6 +159,10 @@ async def list( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) async def create( @@ -205,4 +219,8 @@ async def create( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) diff --git a/src/merge/resources/knowledgebase/types/__init__.py b/src/merge/resources/knowledgebase/types/__init__.py index cb392a79..bea61591 100644 --- a/src/merge/resources/knowledgebase/types/__init__.py +++ b/src/merge/resources/knowledgebase/types/__init__.py @@ -258,8 +258,10 @@ def __getattr__(attr_name: str) -> typing.Any: raise AttributeError(f"No {attr_name} found in _dynamic_imports for module name -> {__name__}") try: module = import_module(module_name, __package__) - result = getattr(module, attr_name) - return result + if module_name == f".{attr_name}": + return module + else: + return getattr(module, attr_name) except ImportError as e: raise ImportError(f"Failed to import {attr_name} from {module_name}: {e}") from e except AttributeError as e: diff --git a/src/merge/resources/knowledgebase/types/account_details_and_actions.py b/src/merge/resources/knowledgebase/types/account_details_and_actions.py index 93c874ed..cbf29cb3 100644 --- a/src/merge/resources/knowledgebase/types/account_details_and_actions.py +++ b/src/merge/resources/knowledgebase/types/account_details_and_actions.py @@ -42,7 +42,7 @@ class AccountDetailsAndActions(UncheckedBaseModel): integration: typing.Optional[AccountDetailsAndActionsIntegration] = None account_type: str completed_at: dt.datetime - integration_specific_fields: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None + integration_specific_fields: typing.Optional[typing.Dict[str, typing.Any]] = None if IS_PYDANTIC_V2: model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2 diff --git a/src/merge/resources/knowledgebase/types/account_details_and_actions_status_enum.py b/src/merge/resources/knowledgebase/types/account_details_and_actions_status_enum.py index 0701a829..323189b4 100644 --- a/src/merge/resources/knowledgebase/types/account_details_and_actions_status_enum.py +++ b/src/merge/resources/knowledgebase/types/account_details_and_actions_status_enum.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ....core import enum + T_Result = typing.TypeVar("T_Result") -class AccountDetailsAndActionsStatusEnum(str, enum.Enum): +class AccountDetailsAndActionsStatusEnum(enum.StrEnum): COMPLETE = "COMPLETE" INCOMPLETE = "INCOMPLETE" RELINK_NEEDED = "RELINK_NEEDED" diff --git a/src/merge/resources/knowledgebase/types/account_integration.py b/src/merge/resources/knowledgebase/types/account_integration.py index ef8b260d..7bc872ca 100644 --- a/src/merge/resources/knowledgebase/types/account_integration.py +++ b/src/merge/resources/knowledgebase/types/account_integration.py @@ -40,9 +40,7 @@ class AccountIntegration(UncheckedBaseModel): """ slug: typing.Optional[str] = None - api_endpoints_to_documentation_urls: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = ( - pydantic.Field(default=None) - ) + api_endpoints_to_documentation_urls: typing.Optional[typing.Dict[str, typing.Any]] = pydantic.Field(default=None) """ Mapping of API endpoints to documentation urls for support. Example: {'GET': [['/common-model-scopes', 'https://docs.merge.dev/accounting/common-model-scopes/#common_model_scopes_retrieve'],['/common-model-actions', 'https://docs.merge.dev/accounting/common-model-actions/#common_model_actions_retrieve']], 'POST': []} """ @@ -52,7 +50,7 @@ class AccountIntegration(UncheckedBaseModel): Setup guide URL for third party webhook creation. Exposed in Merge Docs. """ - category_beta_status: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = pydantic.Field(default=None) + category_beta_status: typing.Optional[typing.Dict[str, typing.Any]] = pydantic.Field(default=None) """ Category or categories this integration is in beta status for. """ diff --git a/src/merge/resources/knowledgebase/types/advanced_metadata.py b/src/merge/resources/knowledgebase/types/advanced_metadata.py index 60b5d072..aef64bb3 100644 --- a/src/merge/resources/knowledgebase/types/advanced_metadata.py +++ b/src/merge/resources/knowledgebase/types/advanced_metadata.py @@ -13,7 +13,7 @@ class AdvancedMetadata(UncheckedBaseModel): description: typing.Optional[str] = None is_required: typing.Optional[bool] = None is_custom: typing.Optional[bool] = None - field_choices: typing.Optional[typing.List[typing.Optional[typing.Any]]] = None + field_choices: typing.Optional[typing.List[typing.Any]] = None if IS_PYDANTIC_V2: model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2 diff --git a/src/merge/resources/knowledgebase/types/article.py b/src/merge/resources/knowledgebase/types/article.py index 72f016c4..d6b3b1cd 100644 --- a/src/merge/resources/knowledgebase/types/article.py +++ b/src/merge/resources/knowledgebase/types/article.py @@ -141,7 +141,6 @@ class Config: extra = pydantic.Extra.allow -from .group import Group # noqa: E402, F401, I001 -from .article_parent_article import ArticleParentArticle # noqa: E402, F401, I001 +from .article_parent_article import ArticleParentArticle # noqa: E402, I001 -update_forward_refs(Article) +update_forward_refs(Article, ArticleParentArticle=ArticleParentArticle) diff --git a/src/merge/resources/knowledgebase/types/article_field_mappings.py b/src/merge/resources/knowledgebase/types/article_field_mappings.py index 36e74742..d57a8473 100644 --- a/src/merge/resources/knowledgebase/types/article_field_mappings.py +++ b/src/merge/resources/knowledgebase/types/article_field_mappings.py @@ -8,8 +8,8 @@ class ArticleFieldMappings(UncheckedBaseModel): - organization_defined_targets: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None - linked_account_defined_targets: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None + organization_defined_targets: typing.Optional[typing.Dict[str, typing.Any]] = None + linked_account_defined_targets: typing.Optional[typing.Dict[str, typing.Any]] = None if IS_PYDANTIC_V2: model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2 diff --git a/src/merge/resources/knowledgebase/types/article_type_enum.py b/src/merge/resources/knowledgebase/types/article_type_enum.py index 806fe0d4..3b84dc6e 100644 --- a/src/merge/resources/knowledgebase/types/article_type_enum.py +++ b/src/merge/resources/knowledgebase/types/article_type_enum.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ....core import enum + T_Result = typing.TypeVar("T_Result") -class ArticleTypeEnum(str, enum.Enum): +class ArticleTypeEnum(enum.StrEnum): PAGE = "PAGE" BLOG_POST = "BLOG_POST" SMART_LINK = "SMART_LINK" diff --git a/src/merge/resources/knowledgebase/types/attachment_field_mappings.py b/src/merge/resources/knowledgebase/types/attachment_field_mappings.py index 9100692c..1c16821a 100644 --- a/src/merge/resources/knowledgebase/types/attachment_field_mappings.py +++ b/src/merge/resources/knowledgebase/types/attachment_field_mappings.py @@ -8,8 +8,8 @@ class AttachmentFieldMappings(UncheckedBaseModel): - organization_defined_targets: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None - linked_account_defined_targets: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None + organization_defined_targets: typing.Optional[typing.Dict[str, typing.Any]] = None + linked_account_defined_targets: typing.Optional[typing.Dict[str, typing.Any]] = None if IS_PYDANTIC_V2: model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2 diff --git a/src/merge/resources/knowledgebase/types/categories_enum.py b/src/merge/resources/knowledgebase/types/categories_enum.py index b6575458..f92febf4 100644 --- a/src/merge/resources/knowledgebase/types/categories_enum.py +++ b/src/merge/resources/knowledgebase/types/categories_enum.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ....core import enum + T_Result = typing.TypeVar("T_Result") -class CategoriesEnum(str, enum.Enum): +class CategoriesEnum(enum.StrEnum): HRIS = "hris" ATS = "ats" ACCOUNTING = "accounting" diff --git a/src/merge/resources/knowledgebase/types/category_enum.py b/src/merge/resources/knowledgebase/types/category_enum.py index 4ee2f4e4..ac0be82b 100644 --- a/src/merge/resources/knowledgebase/types/category_enum.py +++ b/src/merge/resources/knowledgebase/types/category_enum.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ....core import enum + T_Result = typing.TypeVar("T_Result") -class CategoryEnum(str, enum.Enum): +class CategoryEnum(enum.StrEnum): HRIS = "hris" ATS = "ats" ACCOUNTING = "accounting" diff --git a/src/merge/resources/knowledgebase/types/container.py b/src/merge/resources/knowledgebase/types/container.py index f82c29ea..9a1f10d4 100644 --- a/src/merge/resources/knowledgebase/types/container.py +++ b/src/merge/resources/knowledgebase/types/container.py @@ -110,6 +110,4 @@ class Config: extra = pydantic.Extra.allow -from .group import Group # noqa: E402, F401, I001 - update_forward_refs(Container) diff --git a/src/merge/resources/knowledgebase/types/container_field_mappings.py b/src/merge/resources/knowledgebase/types/container_field_mappings.py index e0598ca3..7ea90c69 100644 --- a/src/merge/resources/knowledgebase/types/container_field_mappings.py +++ b/src/merge/resources/knowledgebase/types/container_field_mappings.py @@ -8,8 +8,8 @@ class ContainerFieldMappings(UncheckedBaseModel): - organization_defined_targets: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None - linked_account_defined_targets: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None + organization_defined_targets: typing.Optional[typing.Dict[str, typing.Any]] = None + linked_account_defined_targets: typing.Optional[typing.Dict[str, typing.Any]] = None if IS_PYDANTIC_V2: model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2 diff --git a/src/merge/resources/knowledgebase/types/container_type_enum.py b/src/merge/resources/knowledgebase/types/container_type_enum.py index d3609258..d2676e51 100644 --- a/src/merge/resources/knowledgebase/types/container_type_enum.py +++ b/src/merge/resources/knowledgebase/types/container_type_enum.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ....core import enum + T_Result = typing.TypeVar("T_Result") -class ContainerTypeEnum(str, enum.Enum): +class ContainerTypeEnum(enum.StrEnum): FOLDER = "FOLDER" SPACE = "SPACE" COLLECTION = "COLLECTION" diff --git a/src/merge/resources/knowledgebase/types/data_passthrough_request.py b/src/merge/resources/knowledgebase/types/data_passthrough_request.py index 5a60bfb6..d8d42b8d 100644 --- a/src/merge/resources/knowledgebase/types/data_passthrough_request.py +++ b/src/merge/resources/knowledgebase/types/data_passthrough_request.py @@ -41,7 +41,7 @@ class DataPassthroughRequest(UncheckedBaseModel): Pass an array of `MultipartFormField` objects in here instead of using the `data` param if `request_format` is set to `MULTIPART`. """ - headers: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = pydantic.Field(default=None) + headers: typing.Optional[typing.Dict[str, typing.Any]] = pydantic.Field(default=None) """ The headers to use for the request (Merge will handle the account's authorization headers). `Content-Type` header is required for passthrough. Choose content type corresponding to expected format of receiving server. """ diff --git a/src/merge/resources/knowledgebase/types/enabled_actions_enum.py b/src/merge/resources/knowledgebase/types/enabled_actions_enum.py index cb19286a..ded7aa80 100644 --- a/src/merge/resources/knowledgebase/types/enabled_actions_enum.py +++ b/src/merge/resources/knowledgebase/types/enabled_actions_enum.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ....core import enum + T_Result = typing.TypeVar("T_Result") -class EnabledActionsEnum(str, enum.Enum): +class EnabledActionsEnum(enum.StrEnum): READ = "READ" WRITE = "WRITE" diff --git a/src/merge/resources/knowledgebase/types/encoding_enum.py b/src/merge/resources/knowledgebase/types/encoding_enum.py index 7d4b8977..27686241 100644 --- a/src/merge/resources/knowledgebase/types/encoding_enum.py +++ b/src/merge/resources/knowledgebase/types/encoding_enum.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ....core import enum + T_Result = typing.TypeVar("T_Result") -class EncodingEnum(str, enum.Enum): +class EncodingEnum(enum.StrEnum): RAW = "RAW" BASE_64 = "BASE64" GZIP_BASE_64 = "GZIP_BASE64" diff --git a/src/merge/resources/knowledgebase/types/event_type_enum.py b/src/merge/resources/knowledgebase/types/event_type_enum.py index a04b9681..42ce9abb 100644 --- a/src/merge/resources/knowledgebase/types/event_type_enum.py +++ b/src/merge/resources/knowledgebase/types/event_type_enum.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ....core import enum + T_Result = typing.TypeVar("T_Result") -class EventTypeEnum(str, enum.Enum): +class EventTypeEnum(enum.StrEnum): CREATED_REMOTE_PRODUCTION_API_KEY = "CREATED_REMOTE_PRODUCTION_API_KEY" DELETED_REMOTE_PRODUCTION_API_KEY = "DELETED_REMOTE_PRODUCTION_API_KEY" CREATED_TEST_API_KEY = "CREATED_TEST_API_KEY" diff --git a/src/merge/resources/knowledgebase/types/external_target_field_api_response.py b/src/merge/resources/knowledgebase/types/external_target_field_api_response.py index 78a1df72..db1f5050 100644 --- a/src/merge/resources/knowledgebase/types/external_target_field_api_response.py +++ b/src/merge/resources/knowledgebase/types/external_target_field_api_response.py @@ -3,17 +3,37 @@ import typing import pydantic +import typing_extensions from ....core.pydantic_utilities import IS_PYDANTIC_V2 +from ....core.serialization import FieldMetadata from ....core.unchecked_base_model import UncheckedBaseModel from .external_target_field_api import ExternalTargetFieldApi class ExternalTargetFieldApiResponse(UncheckedBaseModel): - container: typing.Optional[typing.List[ExternalTargetFieldApi]] = pydantic.Field(alias="Container", default=None) - article: typing.Optional[typing.List[ExternalTargetFieldApi]] = pydantic.Field(alias="Article", default=None) - attachment: typing.Optional[typing.List[ExternalTargetFieldApi]] = pydantic.Field(alias="Attachment", default=None) - user: typing.Optional[typing.List[ExternalTargetFieldApi]] = pydantic.Field(alias="User", default=None) - group: typing.Optional[typing.List[ExternalTargetFieldApi]] = pydantic.Field(alias="Group", default=None) + container: typing_extensions.Annotated[ + typing.Optional[typing.List[ExternalTargetFieldApi]], + FieldMetadata(alias="Container"), + pydantic.Field(alias="Container"), + ] = None + article: typing_extensions.Annotated[ + typing.Optional[typing.List[ExternalTargetFieldApi]], + FieldMetadata(alias="Article"), + pydantic.Field(alias="Article"), + ] = None + attachment: typing_extensions.Annotated[ + typing.Optional[typing.List[ExternalTargetFieldApi]], + FieldMetadata(alias="Attachment"), + pydantic.Field(alias="Attachment"), + ] = None + user: typing_extensions.Annotated[ + typing.Optional[typing.List[ExternalTargetFieldApi]], FieldMetadata(alias="User"), pydantic.Field(alias="User") + ] = None + group: typing_extensions.Annotated[ + typing.Optional[typing.List[ExternalTargetFieldApi]], + FieldMetadata(alias="Group"), + pydantic.Field(alias="Group"), + ] = None if IS_PYDANTIC_V2: model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2 diff --git a/src/merge/resources/knowledgebase/types/field_mapping_api_instance_remote_field.py b/src/merge/resources/knowledgebase/types/field_mapping_api_instance_remote_field.py index 578a2b10..ccd1f990 100644 --- a/src/merge/resources/knowledgebase/types/field_mapping_api_instance_remote_field.py +++ b/src/merge/resources/knowledgebase/types/field_mapping_api_instance_remote_field.py @@ -3,7 +3,9 @@ import typing import pydantic +import typing_extensions from ....core.pydantic_utilities import IS_PYDANTIC_V2 +from ....core.serialization import FieldMetadata from ....core.unchecked_base_model import UncheckedBaseModel from .field_mapping_api_instance_remote_field_remote_endpoint_info import ( FieldMappingApiInstanceRemoteFieldRemoteEndpointInfo, @@ -12,9 +14,9 @@ class FieldMappingApiInstanceRemoteField(UncheckedBaseModel): remote_key_name: typing.Optional[str] = None - schema_: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = pydantic.Field( - alias="schema", default=None - ) + schema_: typing_extensions.Annotated[ + typing.Optional[typing.Dict[str, typing.Any]], FieldMetadata(alias="schema"), pydantic.Field(alias="schema") + ] = None remote_endpoint_info: FieldMappingApiInstanceRemoteFieldRemoteEndpointInfo if IS_PYDANTIC_V2: diff --git a/src/merge/resources/knowledgebase/types/field_mapping_api_instance_response.py b/src/merge/resources/knowledgebase/types/field_mapping_api_instance_response.py index a3237ed5..b4a126f6 100644 --- a/src/merge/resources/knowledgebase/types/field_mapping_api_instance_response.py +++ b/src/merge/resources/knowledgebase/types/field_mapping_api_instance_response.py @@ -3,17 +3,37 @@ import typing import pydantic +import typing_extensions from ....core.pydantic_utilities import IS_PYDANTIC_V2 +from ....core.serialization import FieldMetadata from ....core.unchecked_base_model import UncheckedBaseModel from .field_mapping_api_instance import FieldMappingApiInstance class FieldMappingApiInstanceResponse(UncheckedBaseModel): - container: typing.Optional[typing.List[FieldMappingApiInstance]] = pydantic.Field(alias="Container", default=None) - article: typing.Optional[typing.List[FieldMappingApiInstance]] = pydantic.Field(alias="Article", default=None) - attachment: typing.Optional[typing.List[FieldMappingApiInstance]] = pydantic.Field(alias="Attachment", default=None) - user: typing.Optional[typing.List[FieldMappingApiInstance]] = pydantic.Field(alias="User", default=None) - group: typing.Optional[typing.List[FieldMappingApiInstance]] = pydantic.Field(alias="Group", default=None) + container: typing_extensions.Annotated[ + typing.Optional[typing.List[FieldMappingApiInstance]], + FieldMetadata(alias="Container"), + pydantic.Field(alias="Container"), + ] = None + article: typing_extensions.Annotated[ + typing.Optional[typing.List[FieldMappingApiInstance]], + FieldMetadata(alias="Article"), + pydantic.Field(alias="Article"), + ] = None + attachment: typing_extensions.Annotated[ + typing.Optional[typing.List[FieldMappingApiInstance]], + FieldMetadata(alias="Attachment"), + pydantic.Field(alias="Attachment"), + ] = None + user: typing_extensions.Annotated[ + typing.Optional[typing.List[FieldMappingApiInstance]], FieldMetadata(alias="User"), pydantic.Field(alias="User") + ] = None + group: typing_extensions.Annotated[ + typing.Optional[typing.List[FieldMappingApiInstance]], + FieldMetadata(alias="Group"), + pydantic.Field(alias="Group"), + ] = None if IS_PYDANTIC_V2: model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2 diff --git a/src/merge/resources/knowledgebase/types/field_permission_deserializer.py b/src/merge/resources/knowledgebase/types/field_permission_deserializer.py index 1d71ae04..407ed547 100644 --- a/src/merge/resources/knowledgebase/types/field_permission_deserializer.py +++ b/src/merge/resources/knowledgebase/types/field_permission_deserializer.py @@ -8,8 +8,8 @@ class FieldPermissionDeserializer(UncheckedBaseModel): - enabled_fields: typing.Optional[typing.List[typing.Optional[typing.Any]]] = None - disabled_fields: typing.Optional[typing.List[typing.Optional[typing.Any]]] = None + enabled_fields: typing.Optional[typing.List[typing.Any]] = None + disabled_fields: typing.Optional[typing.List[typing.Any]] = None if IS_PYDANTIC_V2: model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2 diff --git a/src/merge/resources/knowledgebase/types/field_permission_deserializer_request.py b/src/merge/resources/knowledgebase/types/field_permission_deserializer_request.py index a4113b46..6680c7d2 100644 --- a/src/merge/resources/knowledgebase/types/field_permission_deserializer_request.py +++ b/src/merge/resources/knowledgebase/types/field_permission_deserializer_request.py @@ -8,8 +8,8 @@ class FieldPermissionDeserializerRequest(UncheckedBaseModel): - enabled_fields: typing.Optional[typing.List[typing.Optional[typing.Any]]] = None - disabled_fields: typing.Optional[typing.List[typing.Optional[typing.Any]]] = None + enabled_fields: typing.Optional[typing.List[typing.Any]] = None + disabled_fields: typing.Optional[typing.List[typing.Any]] = None if IS_PYDANTIC_V2: model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2 diff --git a/src/merge/resources/knowledgebase/types/group.py b/src/merge/resources/knowledgebase/types/group.py index 676a696e..57daf79b 100644 --- a/src/merge/resources/knowledgebase/types/group.py +++ b/src/merge/resources/knowledgebase/types/group.py @@ -67,6 +67,6 @@ class Config: extra = pydantic.Extra.allow -from .group_parent_group import GroupParentGroup # noqa: E402, F401, I001 +from .group_parent_group import GroupParentGroup # noqa: E402, I001 -update_forward_refs(Group) +update_forward_refs(Group, GroupParentGroup=GroupParentGroup) diff --git a/src/merge/resources/knowledgebase/types/group_field_mappings.py b/src/merge/resources/knowledgebase/types/group_field_mappings.py index 3be990d2..eaef7341 100644 --- a/src/merge/resources/knowledgebase/types/group_field_mappings.py +++ b/src/merge/resources/knowledgebase/types/group_field_mappings.py @@ -8,8 +8,8 @@ class GroupFieldMappings(UncheckedBaseModel): - organization_defined_targets: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None - linked_account_defined_targets: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None + organization_defined_targets: typing.Optional[typing.Dict[str, typing.Any]] = None + linked_account_defined_targets: typing.Optional[typing.Dict[str, typing.Any]] = None if IS_PYDANTIC_V2: model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2 diff --git a/src/merge/resources/knowledgebase/types/issue.py b/src/merge/resources/knowledgebase/types/issue.py index 8f1027ca..ab038c54 100644 --- a/src/merge/resources/knowledgebase/types/issue.py +++ b/src/merge/resources/knowledgebase/types/issue.py @@ -17,7 +17,7 @@ class Issue(UncheckedBaseModel): """ error_description: str - end_user: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None + end_user: typing.Optional[typing.Dict[str, typing.Any]] = None first_incident_time: typing.Optional[dt.datetime] = None last_incident_time: typing.Optional[dt.datetime] = None is_muted: typing.Optional[bool] = None diff --git a/src/merge/resources/knowledgebase/types/issue_status_enum.py b/src/merge/resources/knowledgebase/types/issue_status_enum.py index d75e26e2..932ae51c 100644 --- a/src/merge/resources/knowledgebase/types/issue_status_enum.py +++ b/src/merge/resources/knowledgebase/types/issue_status_enum.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ....core import enum + T_Result = typing.TypeVar("T_Result") -class IssueStatusEnum(str, enum.Enum): +class IssueStatusEnum(enum.StrEnum): ONGOING = "ONGOING" RESOLVED = "RESOLVED" diff --git a/src/merge/resources/knowledgebase/types/language_enum.py b/src/merge/resources/knowledgebase/types/language_enum.py index 19f87fe0..16d6cd0e 100644 --- a/src/merge/resources/knowledgebase/types/language_enum.py +++ b/src/merge/resources/knowledgebase/types/language_enum.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ....core import enum + T_Result = typing.TypeVar("T_Result") -class LanguageEnum(str, enum.Enum): +class LanguageEnum(enum.StrEnum): EN = "en" DE = "de" diff --git a/src/merge/resources/knowledgebase/types/last_sync_result_enum.py b/src/merge/resources/knowledgebase/types/last_sync_result_enum.py index 52ecd845..5cb86bc3 100644 --- a/src/merge/resources/knowledgebase/types/last_sync_result_enum.py +++ b/src/merge/resources/knowledgebase/types/last_sync_result_enum.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ....core import enum + T_Result = typing.TypeVar("T_Result") -class LastSyncResultEnum(str, enum.Enum): +class LastSyncResultEnum(enum.StrEnum): SYNCING = "SYNCING" DONE = "DONE" FAILED = "FAILED" diff --git a/src/merge/resources/knowledgebase/types/method_enum.py b/src/merge/resources/knowledgebase/types/method_enum.py index 73d2556f..45c9f89e 100644 --- a/src/merge/resources/knowledgebase/types/method_enum.py +++ b/src/merge/resources/knowledgebase/types/method_enum.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ....core import enum + T_Result = typing.TypeVar("T_Result") -class MethodEnum(str, enum.Enum): +class MethodEnum(enum.StrEnum): GET = "GET" OPTIONS = "OPTIONS" HEAD = "HEAD" diff --git a/src/merge/resources/knowledgebase/types/paginated_article_list.py b/src/merge/resources/knowledgebase/types/paginated_article_list.py index 81de40ee..b29ca149 100644 --- a/src/merge/resources/knowledgebase/types/paginated_article_list.py +++ b/src/merge/resources/knowledgebase/types/paginated_article_list.py @@ -24,7 +24,7 @@ class Config: extra = pydantic.Extra.allow -from .article import Article # noqa: E402, F401, I001 -from .group import Group # noqa: E402, F401, I001 +from .article import Article # noqa: E402, I001 +from .article_parent_article import ArticleParentArticle # noqa: E402, I001 -update_forward_refs(PaginatedArticleList) +update_forward_refs(PaginatedArticleList, Article=Article, ArticleParentArticle=ArticleParentArticle) diff --git a/src/merge/resources/knowledgebase/types/paginated_container_list.py b/src/merge/resources/knowledgebase/types/paginated_container_list.py index 4a3ab735..285e1ffe 100644 --- a/src/merge/resources/knowledgebase/types/paginated_container_list.py +++ b/src/merge/resources/knowledgebase/types/paginated_container_list.py @@ -25,6 +25,4 @@ class Config: extra = pydantic.Extra.allow -from .group import Group # noqa: E402, F401, I001 - update_forward_refs(PaginatedContainerList) diff --git a/src/merge/resources/knowledgebase/types/paginated_group_list.py b/src/merge/resources/knowledgebase/types/paginated_group_list.py index ddbf97b2..f59e44ff 100644 --- a/src/merge/resources/knowledgebase/types/paginated_group_list.py +++ b/src/merge/resources/knowledgebase/types/paginated_group_list.py @@ -24,6 +24,7 @@ class Config: extra = pydantic.Extra.allow -from .group import Group # noqa: E402, F401, I001 +from .group import Group # noqa: E402, I001 +from .group_parent_group import GroupParentGroup # noqa: E402, I001 -update_forward_refs(PaginatedGroupList) +update_forward_refs(PaginatedGroupList, Group=Group, GroupParentGroup=GroupParentGroup) diff --git a/src/merge/resources/knowledgebase/types/permission.py b/src/merge/resources/knowledgebase/types/permission.py index 74fd622f..c8738711 100644 --- a/src/merge/resources/knowledgebase/types/permission.py +++ b/src/merge/resources/knowledgebase/types/permission.py @@ -68,6 +68,4 @@ class Config: extra = pydantic.Extra.allow -from .group import Group # noqa: E402, F401, I001 - update_forward_refs(Permission) diff --git a/src/merge/resources/knowledgebase/types/permission_field_mappings.py b/src/merge/resources/knowledgebase/types/permission_field_mappings.py index 9c2804c2..0672b491 100644 --- a/src/merge/resources/knowledgebase/types/permission_field_mappings.py +++ b/src/merge/resources/knowledgebase/types/permission_field_mappings.py @@ -8,8 +8,8 @@ class PermissionFieldMappings(UncheckedBaseModel): - organization_defined_targets: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None - linked_account_defined_targets: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None + organization_defined_targets: typing.Optional[typing.Dict[str, typing.Any]] = None + linked_account_defined_targets: typing.Optional[typing.Dict[str, typing.Any]] = None if IS_PYDANTIC_V2: model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2 diff --git a/src/merge/resources/knowledgebase/types/permission_type_enum.py b/src/merge/resources/knowledgebase/types/permission_type_enum.py index 7dcaaa69..20867149 100644 --- a/src/merge/resources/knowledgebase/types/permission_type_enum.py +++ b/src/merge/resources/knowledgebase/types/permission_type_enum.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ....core import enum + T_Result = typing.TypeVar("T_Result") -class PermissionTypeEnum(str, enum.Enum): +class PermissionTypeEnum(enum.StrEnum): USER = "USER" GROUP = "GROUP" COMPANY = "COMPANY" diff --git a/src/merge/resources/knowledgebase/types/remote_data.py b/src/merge/resources/knowledgebase/types/remote_data.py index f34bec80..2026f05a 100644 --- a/src/merge/resources/knowledgebase/types/remote_data.py +++ b/src/merge/resources/knowledgebase/types/remote_data.py @@ -22,7 +22,7 @@ class RemoteData(UncheckedBaseModel): The third-party API path that is being called. """ - data: typing.Optional[typing.Optional[typing.Any]] = pydantic.Field(default=None) + data: typing.Optional[typing.Any] = pydantic.Field(default=None) """ The data returned from the third-party for this object in its original, unnormalized format. """ diff --git a/src/merge/resources/knowledgebase/types/remote_endpoint_info.py b/src/merge/resources/knowledgebase/types/remote_endpoint_info.py index 07ceff6a..ffa70b94 100644 --- a/src/merge/resources/knowledgebase/types/remote_endpoint_info.py +++ b/src/merge/resources/knowledgebase/types/remote_endpoint_info.py @@ -10,7 +10,7 @@ class RemoteEndpointInfo(UncheckedBaseModel): method: str url_path: str - field_traversal_path: typing.List[typing.Optional[typing.Any]] + field_traversal_path: typing.List[typing.Any] if IS_PYDANTIC_V2: model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2 diff --git a/src/merge/resources/knowledgebase/types/remote_field_api.py b/src/merge/resources/knowledgebase/types/remote_field_api.py index 0756bfc3..5f2c2ab1 100644 --- a/src/merge/resources/knowledgebase/types/remote_field_api.py +++ b/src/merge/resources/knowledgebase/types/remote_field_api.py @@ -3,7 +3,9 @@ import typing import pydantic +import typing_extensions from ....core.pydantic_utilities import IS_PYDANTIC_V2 +from ....core.serialization import FieldMetadata from ....core.unchecked_base_model import UncheckedBaseModel from .remote_endpoint_info import RemoteEndpointInfo from .remote_field_api_advanced_metadata import RemoteFieldApiAdvancedMetadata @@ -11,10 +13,12 @@ class RemoteFieldApi(UncheckedBaseModel): - schema_: typing.Dict[str, typing.Optional[typing.Any]] = pydantic.Field(alias="schema") + schema_: typing_extensions.Annotated[ + typing.Dict[str, typing.Any], FieldMetadata(alias="schema"), pydantic.Field(alias="schema") + ] remote_key_name: str remote_endpoint_info: RemoteEndpointInfo - example_values: typing.Optional[typing.List[typing.Optional[typing.Any]]] = None + example_values: typing.Optional[typing.List[typing.Any]] = None advanced_metadata: typing.Optional[RemoteFieldApiAdvancedMetadata] = None coverage: typing.Optional[RemoteFieldApiCoverage] = None diff --git a/src/merge/resources/knowledgebase/types/remote_field_api_response.py b/src/merge/resources/knowledgebase/types/remote_field_api_response.py index 13490496..f7b73eb0 100644 --- a/src/merge/resources/knowledgebase/types/remote_field_api_response.py +++ b/src/merge/resources/knowledgebase/types/remote_field_api_response.py @@ -3,17 +3,33 @@ import typing import pydantic +import typing_extensions from ....core.pydantic_utilities import IS_PYDANTIC_V2 +from ....core.serialization import FieldMetadata from ....core.unchecked_base_model import UncheckedBaseModel from .remote_field_api import RemoteFieldApi class RemoteFieldApiResponse(UncheckedBaseModel): - container: typing.Optional[typing.List[RemoteFieldApi]] = pydantic.Field(alias="Container", default=None) - article: typing.Optional[typing.List[RemoteFieldApi]] = pydantic.Field(alias="Article", default=None) - attachment: typing.Optional[typing.List[RemoteFieldApi]] = pydantic.Field(alias="Attachment", default=None) - user: typing.Optional[typing.List[RemoteFieldApi]] = pydantic.Field(alias="User", default=None) - group: typing.Optional[typing.List[RemoteFieldApi]] = pydantic.Field(alias="Group", default=None) + container: typing_extensions.Annotated[ + typing.Optional[typing.List[RemoteFieldApi]], + FieldMetadata(alias="Container"), + pydantic.Field(alias="Container"), + ] = None + article: typing_extensions.Annotated[ + typing.Optional[typing.List[RemoteFieldApi]], FieldMetadata(alias="Article"), pydantic.Field(alias="Article") + ] = None + attachment: typing_extensions.Annotated[ + typing.Optional[typing.List[RemoteFieldApi]], + FieldMetadata(alias="Attachment"), + pydantic.Field(alias="Attachment"), + ] = None + user: typing_extensions.Annotated[ + typing.Optional[typing.List[RemoteFieldApi]], FieldMetadata(alias="User"), pydantic.Field(alias="User") + ] = None + group: typing_extensions.Annotated[ + typing.Optional[typing.List[RemoteFieldApi]], FieldMetadata(alias="Group"), pydantic.Field(alias="Group") + ] = None if IS_PYDANTIC_V2: model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2 diff --git a/src/merge/resources/knowledgebase/types/remote_response.py b/src/merge/resources/knowledgebase/types/remote_response.py index db01131f..8bc6f905 100644 --- a/src/merge/resources/knowledgebase/types/remote_response.py +++ b/src/merge/resources/knowledgebase/types/remote_response.py @@ -21,10 +21,10 @@ class RemoteResponse(UncheckedBaseModel): method: str path: str status: int - response: typing.Optional[typing.Any] = None - response_headers: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None + response: typing.Any + response_headers: typing.Optional[typing.Dict[str, typing.Any]] = None response_type: typing.Optional[RemoteResponseResponseType] = None - headers: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None + headers: typing.Optional[typing.Dict[str, typing.Any]] = None if IS_PYDANTIC_V2: model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2 diff --git a/src/merge/resources/knowledgebase/types/request_format_enum.py b/src/merge/resources/knowledgebase/types/request_format_enum.py index 70ecd9bb..711b2df8 100644 --- a/src/merge/resources/knowledgebase/types/request_format_enum.py +++ b/src/merge/resources/knowledgebase/types/request_format_enum.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ....core import enum + T_Result = typing.TypeVar("T_Result") -class RequestFormatEnum(str, enum.Enum): +class RequestFormatEnum(enum.StrEnum): JSON = "JSON" XML = "XML" MULTIPART = "MULTIPART" diff --git a/src/merge/resources/knowledgebase/types/response_type_enum.py b/src/merge/resources/knowledgebase/types/response_type_enum.py index 23b6bb5b..ce3f3d04 100644 --- a/src/merge/resources/knowledgebase/types/response_type_enum.py +++ b/src/merge/resources/knowledgebase/types/response_type_enum.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ....core import enum + T_Result = typing.TypeVar("T_Result") -class ResponseTypeEnum(str, enum.Enum): +class ResponseTypeEnum(enum.StrEnum): JSON = "JSON" BASE_64_GZIP = "BASE64_GZIP" diff --git a/src/merge/resources/knowledgebase/types/role_enum.py b/src/merge/resources/knowledgebase/types/role_enum.py index c97de31f..752d2454 100644 --- a/src/merge/resources/knowledgebase/types/role_enum.py +++ b/src/merge/resources/knowledgebase/types/role_enum.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ....core import enum + T_Result = typing.TypeVar("T_Result") -class RoleEnum(str, enum.Enum): +class RoleEnum(enum.StrEnum): ADMIN = "ADMIN" DEVELOPER = "DEVELOPER" MEMBER = "MEMBER" diff --git a/src/merge/resources/knowledgebase/types/roles_enum.py b/src/merge/resources/knowledgebase/types/roles_enum.py index c50a4bc4..05098fd9 100644 --- a/src/merge/resources/knowledgebase/types/roles_enum.py +++ b/src/merge/resources/knowledgebase/types/roles_enum.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ....core import enum + T_Result = typing.TypeVar("T_Result") -class RolesEnum(str, enum.Enum): +class RolesEnum(enum.StrEnum): READ = "READ" WRITE = "WRITE" OWNER = "OWNER" diff --git a/src/merge/resources/knowledgebase/types/selective_sync_configurations_usage_enum.py b/src/merge/resources/knowledgebase/types/selective_sync_configurations_usage_enum.py index 7b486b59..953775e9 100644 --- a/src/merge/resources/knowledgebase/types/selective_sync_configurations_usage_enum.py +++ b/src/merge/resources/knowledgebase/types/selective_sync_configurations_usage_enum.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ....core import enum + T_Result = typing.TypeVar("T_Result") -class SelectiveSyncConfigurationsUsageEnum(str, enum.Enum): +class SelectiveSyncConfigurationsUsageEnum(enum.StrEnum): IN_NEXT_SYNC = "IN_NEXT_SYNC" IN_LAST_SYNC = "IN_LAST_SYNC" diff --git a/src/merge/resources/knowledgebase/types/status_3_c_6_enum.py b/src/merge/resources/knowledgebase/types/status_3_c_6_enum.py index 8745a5e9..be3481cb 100644 --- a/src/merge/resources/knowledgebase/types/status_3_c_6_enum.py +++ b/src/merge/resources/knowledgebase/types/status_3_c_6_enum.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ....core import enum + T_Result = typing.TypeVar("T_Result") -class Status3C6Enum(str, enum.Enum): +class Status3C6Enum(enum.StrEnum): DRAFT = "DRAFT" PUBLISHED = "PUBLISHED" ARCHIVED = "ARCHIVED" diff --git a/src/merge/resources/knowledgebase/types/status_fd_5_enum.py b/src/merge/resources/knowledgebase/types/status_fd_5_enum.py index 3bf97afd..52c212e4 100644 --- a/src/merge/resources/knowledgebase/types/status_fd_5_enum.py +++ b/src/merge/resources/knowledgebase/types/status_fd_5_enum.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ....core import enum + T_Result = typing.TypeVar("T_Result") -class StatusFd5Enum(str, enum.Enum): +class StatusFd5Enum(enum.StrEnum): SYNCING = "SYNCING" DONE = "DONE" FAILED = "FAILED" diff --git a/src/merge/resources/knowledgebase/types/user_field_mappings.py b/src/merge/resources/knowledgebase/types/user_field_mappings.py index 374935d7..6a27272a 100644 --- a/src/merge/resources/knowledgebase/types/user_field_mappings.py +++ b/src/merge/resources/knowledgebase/types/user_field_mappings.py @@ -8,8 +8,8 @@ class UserFieldMappings(UncheckedBaseModel): - organization_defined_targets: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None - linked_account_defined_targets: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None + organization_defined_targets: typing.Optional[typing.Dict[str, typing.Any]] = None + linked_account_defined_targets: typing.Optional[typing.Dict[str, typing.Any]] = None if IS_PYDANTIC_V2: model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2 diff --git a/src/merge/resources/knowledgebase/types/visibility_enum.py b/src/merge/resources/knowledgebase/types/visibility_enum.py index a14e44a8..e557ec55 100644 --- a/src/merge/resources/knowledgebase/types/visibility_enum.py +++ b/src/merge/resources/knowledgebase/types/visibility_enum.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ....core import enum + T_Result = typing.TypeVar("T_Result") -class VisibilityEnum(str, enum.Enum): +class VisibilityEnum(enum.StrEnum): PUBLIC = "PUBLIC" INTERNAL = "INTERNAL" RESTRICTED = "RESTRICTED" diff --git a/src/merge/resources/ticketing/__init__.py b/src/merge/resources/ticketing/__init__.py index 6bd3327c..d85e82e1 100644 --- a/src/merge/resources/ticketing/__init__.py +++ b/src/merge/resources/ticketing/__init__.py @@ -496,8 +496,10 @@ def __getattr__(attr_name: str) -> typing.Any: raise AttributeError(f"No {attr_name} found in _dynamic_imports for module name -> {__name__}") try: module = import_module(module_name, __package__) - result = getattr(module, attr_name) - return result + if module_name == f".{attr_name}": + return module + else: + return getattr(module, attr_name) except ImportError as e: raise ImportError(f"Failed to import {attr_name} from {module_name}: {e}") from e except AttributeError as e: diff --git a/src/merge/resources/ticketing/resources/__init__.py b/src/merge/resources/ticketing/resources/__init__.py index 9da2e88a..54a9b5aa 100644 --- a/src/merge/resources/ticketing/resources/__init__.py +++ b/src/merge/resources/ticketing/resources/__init__.py @@ -87,34 +87,34 @@ "TicketsViewersListRequestExpandItem": ".tickets", "UsersListRequestExpandItem": ".users", "UsersRetrieveRequestExpandItem": ".users", - "account_details": ".", - "account_token": ".", - "accounts": ".", - "async_passthrough": ".", - "attachments": ".", - "audit_trail": ".", - "available_actions": ".", - "collections": ".", - "comments": ".", - "contacts": ".", - "delete_account": ".", - "field_mapping": ".", - "force_resync": ".", - "generate_key": ".", - "issues": ".", - "link_token": ".", - "linked_accounts": ".", - "passthrough": ".", - "projects": ".", - "regenerate_key": ".", - "roles": ".", - "scopes": ".", - "sync_status": ".", - "tags": ".", - "teams": ".", - "tickets": ".", - "users": ".", - "webhook_receivers": ".", + "account_details": ".account_details", + "account_token": ".account_token", + "accounts": ".accounts", + "async_passthrough": ".async_passthrough", + "attachments": ".attachments", + "audit_trail": ".audit_trail", + "available_actions": ".available_actions", + "collections": ".collections", + "comments": ".comments", + "contacts": ".contacts", + "delete_account": ".delete_account", + "field_mapping": ".field_mapping", + "force_resync": ".force_resync", + "generate_key": ".generate_key", + "issues": ".issues", + "link_token": ".link_token", + "linked_accounts": ".linked_accounts", + "passthrough": ".passthrough", + "projects": ".projects", + "regenerate_key": ".regenerate_key", + "roles": ".roles", + "scopes": ".scopes", + "sync_status": ".sync_status", + "tags": ".tags", + "teams": ".teams", + "tickets": ".tickets", + "users": ".users", + "webhook_receivers": ".webhook_receivers", } @@ -124,8 +124,10 @@ def __getattr__(attr_name: str) -> typing.Any: raise AttributeError(f"No {attr_name} found in _dynamic_imports for module name -> {__name__}") try: module = import_module(module_name, __package__) - result = getattr(module, attr_name) - return result + if module_name == f".{attr_name}": + return module + else: + return getattr(module, attr_name) except ImportError as e: raise ImportError(f"Failed to import {attr_name} from {module_name}: {e}") from e except AttributeError as e: diff --git a/src/merge/resources/ticketing/resources/account_details/raw_client.py b/src/merge/resources/ticketing/resources/account_details/raw_client.py index 88f5a9ec..f07673fa 100644 --- a/src/merge/resources/ticketing/resources/account_details/raw_client.py +++ b/src/merge/resources/ticketing/resources/account_details/raw_client.py @@ -6,9 +6,11 @@ from .....core.api_error import ApiError from .....core.client_wrapper import AsyncClientWrapper, SyncClientWrapper from .....core.http_response import AsyncHttpResponse, HttpResponse +from .....core.parse_error import ParsingError from .....core.request_options import RequestOptions from .....core.unchecked_base_model import construct_type from ...types.account_details import AccountDetails +from pydantic import ValidationError class RawAccountDetailsClient: @@ -47,6 +49,10 @@ def retrieve(self, *, request_options: typing.Optional[RequestOptions] = None) - _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) @@ -88,4 +94,8 @@ async def retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) diff --git a/src/merge/resources/ticketing/resources/account_token/raw_client.py b/src/merge/resources/ticketing/resources/account_token/raw_client.py index 2218516c..ff4efa4b 100644 --- a/src/merge/resources/ticketing/resources/account_token/raw_client.py +++ b/src/merge/resources/ticketing/resources/account_token/raw_client.py @@ -7,10 +7,12 @@ from .....core.client_wrapper import AsyncClientWrapper, SyncClientWrapper from .....core.http_response import AsyncHttpResponse, HttpResponse from .....core.jsonable_encoder import jsonable_encoder +from .....core.parse_error import ParsingError from .....core.request_options import RequestOptions from .....core.unchecked_base_model import construct_type from ...types.account_token import AccountToken from ...types.regenerate_account_token import RegenerateAccountToken +from pydantic import ValidationError class RawAccountTokenClient: @@ -53,6 +55,10 @@ def retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) def regenerate_create( @@ -89,6 +95,10 @@ def regenerate_create( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) @@ -132,6 +142,10 @@ async def retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) async def regenerate_create( @@ -168,4 +182,8 @@ async def regenerate_create( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) diff --git a/src/merge/resources/ticketing/resources/accounts/raw_client.py b/src/merge/resources/ticketing/resources/accounts/raw_client.py index 0bf8bd35..d1122bd7 100644 --- a/src/merge/resources/ticketing/resources/accounts/raw_client.py +++ b/src/merge/resources/ticketing/resources/accounts/raw_client.py @@ -9,10 +9,12 @@ from .....core.datetime_utils import serialize_datetime from .....core.http_response import AsyncHttpResponse, HttpResponse from .....core.jsonable_encoder import jsonable_encoder +from .....core.parse_error import ParsingError from .....core.request_options import RequestOptions from .....core.unchecked_base_model import construct_type from ...types.account import Account from ...types.paginated_account_list import PaginatedAccountList +from pydantic import ValidationError class RawAccountsClient: @@ -107,6 +109,10 @@ def list( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) def retrieve( @@ -160,6 +166,10 @@ def retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) @@ -255,6 +265,10 @@ async def list( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) async def retrieve( @@ -308,4 +322,8 @@ async def retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) diff --git a/src/merge/resources/ticketing/resources/async_passthrough/__init__.py b/src/merge/resources/ticketing/resources/async_passthrough/__init__.py index 375c7953..11090986 100644 --- a/src/merge/resources/ticketing/resources/async_passthrough/__init__.py +++ b/src/merge/resources/ticketing/resources/async_passthrough/__init__.py @@ -16,8 +16,10 @@ def __getattr__(attr_name: str) -> typing.Any: raise AttributeError(f"No {attr_name} found in _dynamic_imports for module name -> {__name__}") try: module = import_module(module_name, __package__) - result = getattr(module, attr_name) - return result + if module_name == f".{attr_name}": + return module + else: + return getattr(module, attr_name) except ImportError as e: raise ImportError(f"Failed to import {attr_name} from {module_name}: {e}") from e except AttributeError as e: diff --git a/src/merge/resources/ticketing/resources/async_passthrough/raw_client.py b/src/merge/resources/ticketing/resources/async_passthrough/raw_client.py index 3e071ad4..95d9cd0f 100644 --- a/src/merge/resources/ticketing/resources/async_passthrough/raw_client.py +++ b/src/merge/resources/ticketing/resources/async_passthrough/raw_client.py @@ -7,11 +7,13 @@ from .....core.client_wrapper import AsyncClientWrapper, SyncClientWrapper from .....core.http_response import AsyncHttpResponse, HttpResponse from .....core.jsonable_encoder import jsonable_encoder +from .....core.parse_error import ParsingError from .....core.request_options import RequestOptions from .....core.unchecked_base_model import construct_type from ...types.async_passthrough_reciept import AsyncPassthroughReciept from ...types.data_passthrough_request import DataPassthroughRequest from .types.async_passthrough_retrieve_response import AsyncPassthroughRetrieveResponse +from pydantic import ValidationError # this is used as the default value for optional parameters OMIT = typing.cast(typing.Any, ...) @@ -62,6 +64,10 @@ def create( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) def retrieve( @@ -100,6 +106,10 @@ def retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) @@ -148,6 +158,10 @@ async def create( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) async def retrieve( @@ -186,4 +200,8 @@ async def retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) diff --git a/src/merge/resources/ticketing/resources/async_passthrough/types/__init__.py b/src/merge/resources/ticketing/resources/async_passthrough/types/__init__.py index f6e9bec9..dc335400 100644 --- a/src/merge/resources/ticketing/resources/async_passthrough/types/__init__.py +++ b/src/merge/resources/ticketing/resources/async_passthrough/types/__init__.py @@ -16,8 +16,10 @@ def __getattr__(attr_name: str) -> typing.Any: raise AttributeError(f"No {attr_name} found in _dynamic_imports for module name -> {__name__}") try: module = import_module(module_name, __package__) - result = getattr(module, attr_name) - return result + if module_name == f".{attr_name}": + return module + else: + return getattr(module, attr_name) except ImportError as e: raise ImportError(f"Failed to import {attr_name} from {module_name}: {e}") from e except AttributeError as e: diff --git a/src/merge/resources/ticketing/resources/attachments/raw_client.py b/src/merge/resources/ticketing/resources/attachments/raw_client.py index 25217fe9..d9c078c1 100644 --- a/src/merge/resources/ticketing/resources/attachments/raw_client.py +++ b/src/merge/resources/ticketing/resources/attachments/raw_client.py @@ -10,6 +10,7 @@ from .....core.datetime_utils import serialize_datetime from .....core.http_response import AsyncHttpResponse, HttpResponse from .....core.jsonable_encoder import jsonable_encoder +from .....core.parse_error import ParsingError from .....core.request_options import RequestOptions from .....core.unchecked_base_model import construct_type from ...types.attachment import Attachment @@ -17,6 +18,7 @@ from ...types.meta_response import MetaResponse from ...types.paginated_attachment_list import PaginatedAttachmentList from ...types.ticketing_attachment_response import TicketingAttachmentResponse +from pydantic import ValidationError # this is used as the default value for optional parameters OMIT = typing.cast(typing.Any, ...) @@ -133,6 +135,10 @@ def list( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) def create( @@ -193,6 +199,10 @@ def create( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) def retrieve( @@ -253,6 +263,10 @@ def retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) @contextlib.contextmanager @@ -308,6 +322,13 @@ def _stream() -> HttpResponse[typing.Iterator[bytes]]: raise ApiError( status_code=_response.status_code, headers=dict(_response.headers), body=_response.text ) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, + headers=dict(_response.headers), + body=_response.json(), + cause=e, + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) yield _stream() @@ -346,6 +367,10 @@ def meta_post_retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) @@ -460,6 +485,10 @@ async def list( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) async def create( @@ -520,6 +549,10 @@ async def create( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) async def retrieve( @@ -580,6 +613,10 @@ async def retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) @contextlib.asynccontextmanager @@ -636,6 +673,13 @@ async def _stream() -> AsyncHttpResponse[typing.AsyncIterator[bytes]]: raise ApiError( status_code=_response.status_code, headers=dict(_response.headers), body=_response.text ) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, + headers=dict(_response.headers), + body=_response.json(), + cause=e, + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) yield await _stream() @@ -674,4 +718,8 @@ async def meta_post_retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) diff --git a/src/merge/resources/ticketing/resources/audit_trail/raw_client.py b/src/merge/resources/ticketing/resources/audit_trail/raw_client.py index 6960431a..f07e0357 100644 --- a/src/merge/resources/ticketing/resources/audit_trail/raw_client.py +++ b/src/merge/resources/ticketing/resources/audit_trail/raw_client.py @@ -6,9 +6,11 @@ from .....core.api_error import ApiError from .....core.client_wrapper import AsyncClientWrapper, SyncClientWrapper from .....core.http_response import AsyncHttpResponse, HttpResponse +from .....core.parse_error import ParsingError from .....core.request_options import RequestOptions from .....core.unchecked_base_model import construct_type from ...types.paginated_audit_log_event_list import PaginatedAuditLogEventList +from pydantic import ValidationError class RawAuditTrailClient: @@ -83,6 +85,10 @@ def list( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) @@ -158,4 +164,8 @@ async def list( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) diff --git a/src/merge/resources/ticketing/resources/available_actions/raw_client.py b/src/merge/resources/ticketing/resources/available_actions/raw_client.py index 49490cf5..07231722 100644 --- a/src/merge/resources/ticketing/resources/available_actions/raw_client.py +++ b/src/merge/resources/ticketing/resources/available_actions/raw_client.py @@ -6,9 +6,11 @@ from .....core.api_error import ApiError from .....core.client_wrapper import AsyncClientWrapper, SyncClientWrapper from .....core.http_response import AsyncHttpResponse, HttpResponse +from .....core.parse_error import ParsingError from .....core.request_options import RequestOptions from .....core.unchecked_base_model import construct_type from ...types.available_actions import AvailableActions +from pydantic import ValidationError class RawAvailableActionsClient: @@ -47,6 +49,10 @@ def retrieve(self, *, request_options: typing.Optional[RequestOptions] = None) - _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) @@ -88,4 +94,8 @@ async def retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) diff --git a/src/merge/resources/ticketing/resources/collections/__init__.py b/src/merge/resources/ticketing/resources/collections/__init__.py index e34feba0..d51e0138 100644 --- a/src/merge/resources/ticketing/resources/collections/__init__.py +++ b/src/merge/resources/ticketing/resources/collections/__init__.py @@ -26,8 +26,10 @@ def __getattr__(attr_name: str) -> typing.Any: raise AttributeError(f"No {attr_name} found in _dynamic_imports for module name -> {__name__}") try: module = import_module(module_name, __package__) - result = getattr(module, attr_name) - return result + if module_name == f".{attr_name}": + return module + else: + return getattr(module, attr_name) except ImportError as e: raise ImportError(f"Failed to import {attr_name} from {module_name}: {e}") from e except AttributeError as e: diff --git a/src/merge/resources/ticketing/resources/collections/raw_client.py b/src/merge/resources/ticketing/resources/collections/raw_client.py index e4700ae1..ee32656c 100644 --- a/src/merge/resources/ticketing/resources/collections/raw_client.py +++ b/src/merge/resources/ticketing/resources/collections/raw_client.py @@ -9,6 +9,7 @@ from .....core.datetime_utils import serialize_datetime from .....core.http_response import AsyncHttpResponse, HttpResponse from .....core.jsonable_encoder import jsonable_encoder +from .....core.parse_error import ParsingError from .....core.request_options import RequestOptions from .....core.unchecked_base_model import construct_type from ...types.collection import Collection @@ -18,6 +19,7 @@ from .types.collections_list_request_expand_item import CollectionsListRequestExpandItem from .types.collections_retrieve_request_expand_item import CollectionsRetrieveRequestExpandItem from .types.collections_viewers_list_request_expand_item import CollectionsViewersListRequestExpandItem +from pydantic import ValidationError class RawCollectionsClient: @@ -144,6 +146,10 @@ def list( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) def viewers_list( @@ -221,6 +227,10 @@ def viewers_list( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) def retrieve( @@ -291,6 +301,10 @@ def retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) @@ -418,6 +432,10 @@ async def list( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) async def viewers_list( @@ -495,6 +513,10 @@ async def viewers_list( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) async def retrieve( @@ -565,4 +587,8 @@ async def retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) diff --git a/src/merge/resources/ticketing/resources/collections/types/__init__.py b/src/merge/resources/ticketing/resources/collections/types/__init__.py index ca31731a..25de3390 100644 --- a/src/merge/resources/ticketing/resources/collections/types/__init__.py +++ b/src/merge/resources/ticketing/resources/collections/types/__init__.py @@ -24,8 +24,10 @@ def __getattr__(attr_name: str) -> typing.Any: raise AttributeError(f"No {attr_name} found in _dynamic_imports for module name -> {__name__}") try: module = import_module(module_name, __package__) - result = getattr(module, attr_name) - return result + if module_name == f".{attr_name}": + return module + else: + return getattr(module, attr_name) except ImportError as e: raise ImportError(f"Failed to import {attr_name} from {module_name}: {e}") from e except AttributeError as e: diff --git a/src/merge/resources/ticketing/resources/collections/types/collections_list_request_collection_type.py b/src/merge/resources/ticketing/resources/collections/types/collections_list_request_collection_type.py index 131be5b6..7e92b868 100644 --- a/src/merge/resources/ticketing/resources/collections/types/collections_list_request_collection_type.py +++ b/src/merge/resources/ticketing/resources/collections/types/collections_list_request_collection_type.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ......core import enum + T_Result = typing.TypeVar("T_Result") -class CollectionsListRequestCollectionType(str, enum.Enum): +class CollectionsListRequestCollectionType(enum.StrEnum): EMPTY = "" LIST = "LIST" PROJECT = "PROJECT" diff --git a/src/merge/resources/ticketing/resources/collections/types/collections_list_request_expand_item.py b/src/merge/resources/ticketing/resources/collections/types/collections_list_request_expand_item.py index 1985cd82..8315a994 100644 --- a/src/merge/resources/ticketing/resources/collections/types/collections_list_request_expand_item.py +++ b/src/merge/resources/ticketing/resources/collections/types/collections_list_request_expand_item.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ......core import enum + T_Result = typing.TypeVar("T_Result") -class CollectionsListRequestExpandItem(str, enum.Enum): +class CollectionsListRequestExpandItem(enum.StrEnum): PARENT_COLLECTION = "parent_collection" PERMISSIONS = "permissions" diff --git a/src/merge/resources/ticketing/resources/collections/types/collections_retrieve_request_expand_item.py b/src/merge/resources/ticketing/resources/collections/types/collections_retrieve_request_expand_item.py index eacfffaf..6b4a8ddd 100644 --- a/src/merge/resources/ticketing/resources/collections/types/collections_retrieve_request_expand_item.py +++ b/src/merge/resources/ticketing/resources/collections/types/collections_retrieve_request_expand_item.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ......core import enum + T_Result = typing.TypeVar("T_Result") -class CollectionsRetrieveRequestExpandItem(str, enum.Enum): +class CollectionsRetrieveRequestExpandItem(enum.StrEnum): PARENT_COLLECTION = "parent_collection" PERMISSIONS = "permissions" diff --git a/src/merge/resources/ticketing/resources/collections/types/collections_viewers_list_request_expand_item.py b/src/merge/resources/ticketing/resources/collections/types/collections_viewers_list_request_expand_item.py index 9ce4bd1a..c94878aa 100644 --- a/src/merge/resources/ticketing/resources/collections/types/collections_viewers_list_request_expand_item.py +++ b/src/merge/resources/ticketing/resources/collections/types/collections_viewers_list_request_expand_item.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ......core import enum + T_Result = typing.TypeVar("T_Result") -class CollectionsViewersListRequestExpandItem(str, enum.Enum): +class CollectionsViewersListRequestExpandItem(enum.StrEnum): TEAM = "team" USER = "user" diff --git a/src/merge/resources/ticketing/resources/comments/__init__.py b/src/merge/resources/ticketing/resources/comments/__init__.py index 024162c5..fcae8230 100644 --- a/src/merge/resources/ticketing/resources/comments/__init__.py +++ b/src/merge/resources/ticketing/resources/comments/__init__.py @@ -19,8 +19,10 @@ def __getattr__(attr_name: str) -> typing.Any: raise AttributeError(f"No {attr_name} found in _dynamic_imports for module name -> {__name__}") try: module = import_module(module_name, __package__) - result = getattr(module, attr_name) - return result + if module_name == f".{attr_name}": + return module + else: + return getattr(module, attr_name) except ImportError as e: raise ImportError(f"Failed to import {attr_name} from {module_name}: {e}") from e except AttributeError as e: diff --git a/src/merge/resources/ticketing/resources/comments/raw_client.py b/src/merge/resources/ticketing/resources/comments/raw_client.py index 896ca663..9edcbc4e 100644 --- a/src/merge/resources/ticketing/resources/comments/raw_client.py +++ b/src/merge/resources/ticketing/resources/comments/raw_client.py @@ -9,6 +9,7 @@ from .....core.datetime_utils import serialize_datetime from .....core.http_response import AsyncHttpResponse, HttpResponse from .....core.jsonable_encoder import jsonable_encoder +from .....core.parse_error import ParsingError from .....core.request_options import RequestOptions from .....core.unchecked_base_model import construct_type from ...types.comment import Comment @@ -18,6 +19,7 @@ from ...types.paginated_comment_list import PaginatedCommentList from .types.comments_list_request_expand_item import CommentsListRequestExpandItem from .types.comments_retrieve_request_expand_item import CommentsRetrieveRequestExpandItem +from pydantic import ValidationError # this is used as the default value for optional parameters OMIT = typing.cast(typing.Any, ...) @@ -134,6 +136,10 @@ def list( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) def create( @@ -194,6 +200,10 @@ def create( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) def retrieve( @@ -254,6 +264,10 @@ def retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) def meta_post_retrieve( @@ -290,6 +304,10 @@ def meta_post_retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) @@ -404,6 +422,10 @@ async def list( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) async def create( @@ -464,6 +486,10 @@ async def create( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) async def retrieve( @@ -524,6 +550,10 @@ async def retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) async def meta_post_retrieve( @@ -560,4 +590,8 @@ async def meta_post_retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) diff --git a/src/merge/resources/ticketing/resources/comments/types/__init__.py b/src/merge/resources/ticketing/resources/comments/types/__init__.py index 485b83cf..e2faf543 100644 --- a/src/merge/resources/ticketing/resources/comments/types/__init__.py +++ b/src/merge/resources/ticketing/resources/comments/types/__init__.py @@ -20,8 +20,10 @@ def __getattr__(attr_name: str) -> typing.Any: raise AttributeError(f"No {attr_name} found in _dynamic_imports for module name -> {__name__}") try: module = import_module(module_name, __package__) - result = getattr(module, attr_name) - return result + if module_name == f".{attr_name}": + return module + else: + return getattr(module, attr_name) except ImportError as e: raise ImportError(f"Failed to import {attr_name} from {module_name}: {e}") from e except AttributeError as e: diff --git a/src/merge/resources/ticketing/resources/comments/types/comments_list_request_expand_item.py b/src/merge/resources/ticketing/resources/comments/types/comments_list_request_expand_item.py index 9d1695ba..c4cab2b8 100644 --- a/src/merge/resources/ticketing/resources/comments/types/comments_list_request_expand_item.py +++ b/src/merge/resources/ticketing/resources/comments/types/comments_list_request_expand_item.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ......core import enum + T_Result = typing.TypeVar("T_Result") -class CommentsListRequestExpandItem(str, enum.Enum): +class CommentsListRequestExpandItem(enum.StrEnum): CONTACT = "contact" TICKET = "ticket" USER = "user" diff --git a/src/merge/resources/ticketing/resources/comments/types/comments_retrieve_request_expand_item.py b/src/merge/resources/ticketing/resources/comments/types/comments_retrieve_request_expand_item.py index 1cc39df9..44c1f16d 100644 --- a/src/merge/resources/ticketing/resources/comments/types/comments_retrieve_request_expand_item.py +++ b/src/merge/resources/ticketing/resources/comments/types/comments_retrieve_request_expand_item.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ......core import enum + T_Result = typing.TypeVar("T_Result") -class CommentsRetrieveRequestExpandItem(str, enum.Enum): +class CommentsRetrieveRequestExpandItem(enum.StrEnum): CONTACT = "contact" TICKET = "ticket" USER = "user" diff --git a/src/merge/resources/ticketing/resources/contacts/raw_client.py b/src/merge/resources/ticketing/resources/contacts/raw_client.py index 2488c2dd..026e3bff 100644 --- a/src/merge/resources/ticketing/resources/contacts/raw_client.py +++ b/src/merge/resources/ticketing/resources/contacts/raw_client.py @@ -9,6 +9,7 @@ from .....core.datetime_utils import serialize_datetime from .....core.http_response import AsyncHttpResponse, HttpResponse from .....core.jsonable_encoder import jsonable_encoder +from .....core.parse_error import ParsingError from .....core.request_options import RequestOptions from .....core.unchecked_base_model import construct_type from ...types.contact import Contact @@ -16,6 +17,7 @@ from ...types.meta_response import MetaResponse from ...types.paginated_contact_list import PaginatedContactList from ...types.ticketing_contact_response import TicketingContactResponse +from pydantic import ValidationError # this is used as the default value for optional parameters OMIT = typing.cast(typing.Any, ...) @@ -125,6 +127,10 @@ def list( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) def create( @@ -185,6 +191,10 @@ def create( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) def retrieve( @@ -245,6 +255,10 @@ def retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) def meta_post_retrieve( @@ -281,6 +295,10 @@ def meta_post_retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) @@ -388,6 +406,10 @@ async def list( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) async def create( @@ -448,6 +470,10 @@ async def create( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) async def retrieve( @@ -508,6 +534,10 @@ async def retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) async def meta_post_retrieve( @@ -544,4 +574,8 @@ async def meta_post_retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) diff --git a/src/merge/resources/ticketing/resources/delete_account/raw_client.py b/src/merge/resources/ticketing/resources/delete_account/raw_client.py index 773ab786..2a9e5028 100644 --- a/src/merge/resources/ticketing/resources/delete_account/raw_client.py +++ b/src/merge/resources/ticketing/resources/delete_account/raw_client.py @@ -6,7 +6,9 @@ from .....core.api_error import ApiError from .....core.client_wrapper import AsyncClientWrapper, SyncClientWrapper from .....core.http_response import AsyncHttpResponse, HttpResponse +from .....core.parse_error import ParsingError from .....core.request_options import RequestOptions +from pydantic import ValidationError class RawDeleteAccountClient: @@ -37,6 +39,10 @@ def delete(self, *, request_options: typing.Optional[RequestOptions] = None) -> _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) @@ -68,4 +74,8 @@ async def delete(self, *, request_options: typing.Optional[RequestOptions] = Non _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) diff --git a/src/merge/resources/ticketing/resources/field_mapping/client.py b/src/merge/resources/ticketing/resources/field_mapping/client.py index 04b3aa9a..7e0d5753 100644 --- a/src/merge/resources/ticketing/resources/field_mapping/client.py +++ b/src/merge/resources/ticketing/resources/field_mapping/client.py @@ -73,7 +73,7 @@ def field_mappings_create( *, target_field_name: str, target_field_description: str, - remote_field_traversal_path: typing.Sequence[typing.Optional[typing.Any]], + remote_field_traversal_path: typing.Sequence[typing.Any], remote_method: str, remote_url_path: str, common_model_name: str, @@ -93,7 +93,7 @@ def field_mappings_create( target_field_description : str The description of the target field you want this remote field to map to. - remote_field_traversal_path : typing.Sequence[typing.Optional[typing.Any]] + remote_field_traversal_path : typing.Sequence[typing.Any] The field traversal path of the remote field listed when you hit the GET /remote-fields endpoint. remote_method : str @@ -193,7 +193,7 @@ def field_mappings_partial_update( field_mapping_id: str, *, remote_data_iteration_count: typing.Optional[int] = None, - remote_field_traversal_path: typing.Optional[typing.Sequence[typing.Optional[typing.Any]]] = OMIT, + remote_field_traversal_path: typing.Optional[typing.Sequence[typing.Any]] = OMIT, remote_method: typing.Optional[str] = OMIT, remote_url_path: typing.Optional[str] = OMIT, jmes_path: typing.Optional[str] = OMIT, @@ -209,7 +209,7 @@ def field_mappings_partial_update( remote_data_iteration_count : typing.Optional[int] Number of common model instances to iterate through when fetching remote data for field mappings. Defaults to 250 if not provided. - remote_field_traversal_path : typing.Optional[typing.Sequence[typing.Optional[typing.Any]]] + remote_field_traversal_path : typing.Optional[typing.Sequence[typing.Any]] The field traversal path of the remote field listed when you hit the GET /remote-fields endpoint. remote_method : typing.Optional[str] @@ -394,7 +394,7 @@ async def field_mappings_create( *, target_field_name: str, target_field_description: str, - remote_field_traversal_path: typing.Sequence[typing.Optional[typing.Any]], + remote_field_traversal_path: typing.Sequence[typing.Any], remote_method: str, remote_url_path: str, common_model_name: str, @@ -414,7 +414,7 @@ async def field_mappings_create( target_field_description : str The description of the target field you want this remote field to map to. - remote_field_traversal_path : typing.Sequence[typing.Optional[typing.Any]] + remote_field_traversal_path : typing.Sequence[typing.Any] The field traversal path of the remote field listed when you hit the GET /remote-fields endpoint. remote_method : str @@ -530,7 +530,7 @@ async def field_mappings_partial_update( field_mapping_id: str, *, remote_data_iteration_count: typing.Optional[int] = None, - remote_field_traversal_path: typing.Optional[typing.Sequence[typing.Optional[typing.Any]]] = OMIT, + remote_field_traversal_path: typing.Optional[typing.Sequence[typing.Any]] = OMIT, remote_method: typing.Optional[str] = OMIT, remote_url_path: typing.Optional[str] = OMIT, jmes_path: typing.Optional[str] = OMIT, @@ -546,7 +546,7 @@ async def field_mappings_partial_update( remote_data_iteration_count : typing.Optional[int] Number of common model instances to iterate through when fetching remote data for field mappings. Defaults to 250 if not provided. - remote_field_traversal_path : typing.Optional[typing.Sequence[typing.Optional[typing.Any]]] + remote_field_traversal_path : typing.Optional[typing.Sequence[typing.Any]] The field traversal path of the remote field listed when you hit the GET /remote-fields endpoint. remote_method : typing.Optional[str] diff --git a/src/merge/resources/ticketing/resources/field_mapping/raw_client.py b/src/merge/resources/ticketing/resources/field_mapping/raw_client.py index cf42f54a..257ec5fa 100644 --- a/src/merge/resources/ticketing/resources/field_mapping/raw_client.py +++ b/src/merge/resources/ticketing/resources/field_mapping/raw_client.py @@ -7,12 +7,14 @@ from .....core.client_wrapper import AsyncClientWrapper, SyncClientWrapper from .....core.http_response import AsyncHttpResponse, HttpResponse from .....core.jsonable_encoder import jsonable_encoder +from .....core.parse_error import ParsingError from .....core.request_options import RequestOptions from .....core.unchecked_base_model import construct_type from ...types.external_target_field_api_response import ExternalTargetFieldApiResponse from ...types.field_mapping_api_instance_response import FieldMappingApiInstanceResponse from ...types.field_mapping_instance_response import FieldMappingInstanceResponse from ...types.remote_field_api_response import RemoteFieldApiResponse +from pydantic import ValidationError # this is used as the default value for optional parameters OMIT = typing.cast(typing.Any, ...) @@ -65,6 +67,10 @@ def field_mappings_retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) def field_mappings_create( @@ -72,7 +78,7 @@ def field_mappings_create( *, target_field_name: str, target_field_description: str, - remote_field_traversal_path: typing.Sequence[typing.Optional[typing.Any]], + remote_field_traversal_path: typing.Sequence[typing.Any], remote_method: str, remote_url_path: str, common_model_name: str, @@ -92,7 +98,7 @@ def field_mappings_create( target_field_description : str The description of the target field you want this remote field to map to. - remote_field_traversal_path : typing.Sequence[typing.Optional[typing.Any]] + remote_field_traversal_path : typing.Sequence[typing.Any] The field traversal path of the remote field listed when you hit the GET /remote-fields endpoint. remote_method : str @@ -156,6 +162,10 @@ def field_mappings_create( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) def field_mappings_destroy( @@ -194,6 +204,10 @@ def field_mappings_destroy( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) def field_mappings_partial_update( @@ -201,7 +215,7 @@ def field_mappings_partial_update( field_mapping_id: str, *, remote_data_iteration_count: typing.Optional[int] = None, - remote_field_traversal_path: typing.Optional[typing.Sequence[typing.Optional[typing.Any]]] = OMIT, + remote_field_traversal_path: typing.Optional[typing.Sequence[typing.Any]] = OMIT, remote_method: typing.Optional[str] = OMIT, remote_url_path: typing.Optional[str] = OMIT, jmes_path: typing.Optional[str] = OMIT, @@ -217,7 +231,7 @@ def field_mappings_partial_update( remote_data_iteration_count : typing.Optional[int] Number of common model instances to iterate through when fetching remote data for field mappings. Defaults to 250 if not provided. - remote_field_traversal_path : typing.Optional[typing.Sequence[typing.Optional[typing.Any]]] + remote_field_traversal_path : typing.Optional[typing.Sequence[typing.Any]] The field traversal path of the remote field listed when you hit the GET /remote-fields endpoint. remote_method : typing.Optional[str] @@ -268,6 +282,10 @@ def field_mappings_partial_update( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) def remote_fields_retrieve( @@ -318,6 +336,10 @@ def remote_fields_retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) def target_fields_retrieve( @@ -354,6 +376,10 @@ def target_fields_retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) @@ -404,6 +430,10 @@ async def field_mappings_retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) async def field_mappings_create( @@ -411,7 +441,7 @@ async def field_mappings_create( *, target_field_name: str, target_field_description: str, - remote_field_traversal_path: typing.Sequence[typing.Optional[typing.Any]], + remote_field_traversal_path: typing.Sequence[typing.Any], remote_method: str, remote_url_path: str, common_model_name: str, @@ -431,7 +461,7 @@ async def field_mappings_create( target_field_description : str The description of the target field you want this remote field to map to. - remote_field_traversal_path : typing.Sequence[typing.Optional[typing.Any]] + remote_field_traversal_path : typing.Sequence[typing.Any] The field traversal path of the remote field listed when you hit the GET /remote-fields endpoint. remote_method : str @@ -495,6 +525,10 @@ async def field_mappings_create( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) async def field_mappings_destroy( @@ -533,6 +567,10 @@ async def field_mappings_destroy( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) async def field_mappings_partial_update( @@ -540,7 +578,7 @@ async def field_mappings_partial_update( field_mapping_id: str, *, remote_data_iteration_count: typing.Optional[int] = None, - remote_field_traversal_path: typing.Optional[typing.Sequence[typing.Optional[typing.Any]]] = OMIT, + remote_field_traversal_path: typing.Optional[typing.Sequence[typing.Any]] = OMIT, remote_method: typing.Optional[str] = OMIT, remote_url_path: typing.Optional[str] = OMIT, jmes_path: typing.Optional[str] = OMIT, @@ -556,7 +594,7 @@ async def field_mappings_partial_update( remote_data_iteration_count : typing.Optional[int] Number of common model instances to iterate through when fetching remote data for field mappings. Defaults to 250 if not provided. - remote_field_traversal_path : typing.Optional[typing.Sequence[typing.Optional[typing.Any]]] + remote_field_traversal_path : typing.Optional[typing.Sequence[typing.Any]] The field traversal path of the remote field listed when you hit the GET /remote-fields endpoint. remote_method : typing.Optional[str] @@ -607,6 +645,10 @@ async def field_mappings_partial_update( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) async def remote_fields_retrieve( @@ -657,6 +699,10 @@ async def remote_fields_retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) async def target_fields_retrieve( @@ -693,4 +739,8 @@ async def target_fields_retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) diff --git a/src/merge/resources/ticketing/resources/force_resync/raw_client.py b/src/merge/resources/ticketing/resources/force_resync/raw_client.py index 1d964134..232c85fd 100644 --- a/src/merge/resources/ticketing/resources/force_resync/raw_client.py +++ b/src/merge/resources/ticketing/resources/force_resync/raw_client.py @@ -6,9 +6,11 @@ from .....core.api_error import ApiError from .....core.client_wrapper import AsyncClientWrapper, SyncClientWrapper from .....core.http_response import AsyncHttpResponse, HttpResponse +from .....core.parse_error import ParsingError from .....core.request_options import RequestOptions from .....core.unchecked_base_model import construct_type from ...types.sync_status import SyncStatus +from pydantic import ValidationError class RawForceResyncClient: @@ -49,6 +51,10 @@ def sync_status_resync_create( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) @@ -90,4 +96,8 @@ async def sync_status_resync_create( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) diff --git a/src/merge/resources/ticketing/resources/generate_key/raw_client.py b/src/merge/resources/ticketing/resources/generate_key/raw_client.py index d9c73292..74473b64 100644 --- a/src/merge/resources/ticketing/resources/generate_key/raw_client.py +++ b/src/merge/resources/ticketing/resources/generate_key/raw_client.py @@ -6,9 +6,11 @@ from .....core.api_error import ApiError from .....core.client_wrapper import AsyncClientWrapper, SyncClientWrapper from .....core.http_response import AsyncHttpResponse, HttpResponse +from .....core.parse_error import ParsingError from .....core.request_options import RequestOptions from .....core.unchecked_base_model import construct_type from ...types.remote_key import RemoteKey +from pydantic import ValidationError # this is used as the default value for optional parameters OMIT = typing.cast(typing.Any, ...) @@ -60,6 +62,10 @@ def create(self, *, name: str, request_options: typing.Optional[RequestOptions] _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) @@ -111,4 +117,8 @@ async def create( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) diff --git a/src/merge/resources/ticketing/resources/issues/__init__.py b/src/merge/resources/ticketing/resources/issues/__init__.py index 3ca1094b..45b33fe1 100644 --- a/src/merge/resources/ticketing/resources/issues/__init__.py +++ b/src/merge/resources/ticketing/resources/issues/__init__.py @@ -16,8 +16,10 @@ def __getattr__(attr_name: str) -> typing.Any: raise AttributeError(f"No {attr_name} found in _dynamic_imports for module name -> {__name__}") try: module = import_module(module_name, __package__) - result = getattr(module, attr_name) - return result + if module_name == f".{attr_name}": + return module + else: + return getattr(module, attr_name) except ImportError as e: raise ImportError(f"Failed to import {attr_name} from {module_name}: {e}") from e except AttributeError as e: diff --git a/src/merge/resources/ticketing/resources/issues/raw_client.py b/src/merge/resources/ticketing/resources/issues/raw_client.py index 09986b0c..4d25cb01 100644 --- a/src/merge/resources/ticketing/resources/issues/raw_client.py +++ b/src/merge/resources/ticketing/resources/issues/raw_client.py @@ -9,11 +9,13 @@ from .....core.datetime_utils import serialize_datetime from .....core.http_response import AsyncHttpResponse, HttpResponse from .....core.jsonable_encoder import jsonable_encoder +from .....core.parse_error import ParsingError from .....core.request_options import RequestOptions from .....core.unchecked_base_model import construct_type from ...types.issue import Issue from ...types.paginated_issue_list import PaginatedIssueList from .types.issues_list_request_status import IssuesListRequestStatus +from pydantic import ValidationError class RawIssuesClient: @@ -136,6 +138,10 @@ def list( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) def retrieve(self, id: str, *, request_options: typing.Optional[RequestOptions] = None) -> HttpResponse[Issue]: @@ -172,6 +178,10 @@ def retrieve(self, id: str, *, request_options: typing.Optional[RequestOptions] _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) @@ -295,6 +305,10 @@ async def list( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) async def retrieve( @@ -333,4 +347,8 @@ async def retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) diff --git a/src/merge/resources/ticketing/resources/issues/types/__init__.py b/src/merge/resources/ticketing/resources/issues/types/__init__.py index 88fbf977..5e097583 100644 --- a/src/merge/resources/ticketing/resources/issues/types/__init__.py +++ b/src/merge/resources/ticketing/resources/issues/types/__init__.py @@ -16,8 +16,10 @@ def __getattr__(attr_name: str) -> typing.Any: raise AttributeError(f"No {attr_name} found in _dynamic_imports for module name -> {__name__}") try: module = import_module(module_name, __package__) - result = getattr(module, attr_name) - return result + if module_name == f".{attr_name}": + return module + else: + return getattr(module, attr_name) except ImportError as e: raise ImportError(f"Failed to import {attr_name} from {module_name}: {e}") from e except AttributeError as e: diff --git a/src/merge/resources/ticketing/resources/issues/types/issues_list_request_status.py b/src/merge/resources/ticketing/resources/issues/types/issues_list_request_status.py index 2bd3521e..a61afdd0 100644 --- a/src/merge/resources/ticketing/resources/issues/types/issues_list_request_status.py +++ b/src/merge/resources/ticketing/resources/issues/types/issues_list_request_status.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ......core import enum + T_Result = typing.TypeVar("T_Result") -class IssuesListRequestStatus(str, enum.Enum): +class IssuesListRequestStatus(enum.StrEnum): ONGOING = "ONGOING" RESOLVED = "RESOLVED" diff --git a/src/merge/resources/ticketing/resources/link_token/__init__.py b/src/merge/resources/ticketing/resources/link_token/__init__.py index 3bad6adf..15700960 100644 --- a/src/merge/resources/ticketing/resources/link_token/__init__.py +++ b/src/merge/resources/ticketing/resources/link_token/__init__.py @@ -16,8 +16,10 @@ def __getattr__(attr_name: str) -> typing.Any: raise AttributeError(f"No {attr_name} found in _dynamic_imports for module name -> {__name__}") try: module = import_module(module_name, __package__) - result = getattr(module, attr_name) - return result + if module_name == f".{attr_name}": + return module + else: + return getattr(module, attr_name) except ImportError as e: raise ImportError(f"Failed to import {attr_name} from {module_name}: {e}") from e except AttributeError as e: diff --git a/src/merge/resources/ticketing/resources/link_token/client.py b/src/merge/resources/ticketing/resources/link_token/client.py index 9b98f597..064a98dd 100644 --- a/src/merge/resources/ticketing/resources/link_token/client.py +++ b/src/merge/resources/ticketing/resources/link_token/client.py @@ -47,7 +47,7 @@ def create( ] = OMIT, language: typing.Optional[EndUserDetailsRequestLanguage] = OMIT, are_syncs_disabled: typing.Optional[bool] = OMIT, - integration_specific_config: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = OMIT, + integration_specific_config: typing.Optional[typing.Dict[str, typing.Any]] = OMIT, request_options: typing.Optional[RequestOptions] = None, ) -> LinkToken: """ @@ -94,7 +94,7 @@ def create( are_syncs_disabled : typing.Optional[bool] The boolean that indicates whether initial, periodic, and force syncs will be disabled. - integration_specific_config : typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] + integration_specific_config : typing.Optional[typing.Dict[str, typing.Any]] A JSON object containing integration-specific configuration options. request_options : typing.Optional[RequestOptions] @@ -172,7 +172,7 @@ async def create( ] = OMIT, language: typing.Optional[EndUserDetailsRequestLanguage] = OMIT, are_syncs_disabled: typing.Optional[bool] = OMIT, - integration_specific_config: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = OMIT, + integration_specific_config: typing.Optional[typing.Dict[str, typing.Any]] = OMIT, request_options: typing.Optional[RequestOptions] = None, ) -> LinkToken: """ @@ -219,7 +219,7 @@ async def create( are_syncs_disabled : typing.Optional[bool] The boolean that indicates whether initial, periodic, and force syncs will be disabled. - integration_specific_config : typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] + integration_specific_config : typing.Optional[typing.Dict[str, typing.Any]] A JSON object containing integration-specific configuration options. request_options : typing.Optional[RequestOptions] diff --git a/src/merge/resources/ticketing/resources/link_token/raw_client.py b/src/merge/resources/ticketing/resources/link_token/raw_client.py index 2bb04483..7c64f735 100644 --- a/src/merge/resources/ticketing/resources/link_token/raw_client.py +++ b/src/merge/resources/ticketing/resources/link_token/raw_client.py @@ -6,6 +6,7 @@ from .....core.api_error import ApiError from .....core.client_wrapper import AsyncClientWrapper, SyncClientWrapper from .....core.http_response import AsyncHttpResponse, HttpResponse +from .....core.parse_error import ParsingError from .....core.request_options import RequestOptions from .....core.unchecked_base_model import construct_type from ...types.categories_enum import CategoriesEnum @@ -13,6 +14,7 @@ from ...types.individual_common_model_scope_deserializer_request import IndividualCommonModelScopeDeserializerRequest from ...types.link_token import LinkToken from .types.end_user_details_request_language import EndUserDetailsRequestLanguage +from pydantic import ValidationError # this is used as the default value for optional parameters OMIT = typing.cast(typing.Any, ...) @@ -39,7 +41,7 @@ def create( ] = OMIT, language: typing.Optional[EndUserDetailsRequestLanguage] = OMIT, are_syncs_disabled: typing.Optional[bool] = OMIT, - integration_specific_config: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = OMIT, + integration_specific_config: typing.Optional[typing.Dict[str, typing.Any]] = OMIT, request_options: typing.Optional[RequestOptions] = None, ) -> HttpResponse[LinkToken]: """ @@ -86,7 +88,7 @@ def create( are_syncs_disabled : typing.Optional[bool] The boolean that indicates whether initial, periodic, and force syncs will be disabled. - integration_specific_config : typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] + integration_specific_config : typing.Optional[typing.Dict[str, typing.Any]] A JSON object containing integration-specific configuration options. request_options : typing.Optional[RequestOptions] @@ -134,6 +136,10 @@ def create( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) @@ -158,7 +164,7 @@ async def create( ] = OMIT, language: typing.Optional[EndUserDetailsRequestLanguage] = OMIT, are_syncs_disabled: typing.Optional[bool] = OMIT, - integration_specific_config: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = OMIT, + integration_specific_config: typing.Optional[typing.Dict[str, typing.Any]] = OMIT, request_options: typing.Optional[RequestOptions] = None, ) -> AsyncHttpResponse[LinkToken]: """ @@ -205,7 +211,7 @@ async def create( are_syncs_disabled : typing.Optional[bool] The boolean that indicates whether initial, periodic, and force syncs will be disabled. - integration_specific_config : typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] + integration_specific_config : typing.Optional[typing.Dict[str, typing.Any]] A JSON object containing integration-specific configuration options. request_options : typing.Optional[RequestOptions] @@ -253,4 +259,8 @@ async def create( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) diff --git a/src/merge/resources/ticketing/resources/link_token/types/__init__.py b/src/merge/resources/ticketing/resources/link_token/types/__init__.py index e9a7d3b9..dad2a14a 100644 --- a/src/merge/resources/ticketing/resources/link_token/types/__init__.py +++ b/src/merge/resources/ticketing/resources/link_token/types/__init__.py @@ -16,8 +16,10 @@ def __getattr__(attr_name: str) -> typing.Any: raise AttributeError(f"No {attr_name} found in _dynamic_imports for module name -> {__name__}") try: module = import_module(module_name, __package__) - result = getattr(module, attr_name) - return result + if module_name == f".{attr_name}": + return module + else: + return getattr(module, attr_name) except ImportError as e: raise ImportError(f"Failed to import {attr_name} from {module_name}: {e}") from e except AttributeError as e: diff --git a/src/merge/resources/ticketing/resources/linked_accounts/__init__.py b/src/merge/resources/ticketing/resources/linked_accounts/__init__.py index 0b9e42b4..12e213b7 100644 --- a/src/merge/resources/ticketing/resources/linked_accounts/__init__.py +++ b/src/merge/resources/ticketing/resources/linked_accounts/__init__.py @@ -16,8 +16,10 @@ def __getattr__(attr_name: str) -> typing.Any: raise AttributeError(f"No {attr_name} found in _dynamic_imports for module name -> {__name__}") try: module = import_module(module_name, __package__) - result = getattr(module, attr_name) - return result + if module_name == f".{attr_name}": + return module + else: + return getattr(module, attr_name) except ImportError as e: raise ImportError(f"Failed to import {attr_name} from {module_name}: {e}") from e except AttributeError as e: diff --git a/src/merge/resources/ticketing/resources/linked_accounts/raw_client.py b/src/merge/resources/ticketing/resources/linked_accounts/raw_client.py index 5526d4f8..da393b36 100644 --- a/src/merge/resources/ticketing/resources/linked_accounts/raw_client.py +++ b/src/merge/resources/ticketing/resources/linked_accounts/raw_client.py @@ -6,10 +6,12 @@ from .....core.api_error import ApiError from .....core.client_wrapper import AsyncClientWrapper, SyncClientWrapper from .....core.http_response import AsyncHttpResponse, HttpResponse +from .....core.parse_error import ParsingError from .....core.request_options import RequestOptions from .....core.unchecked_base_model import construct_type from ...types.paginated_account_details_and_actions_list import PaginatedAccountDetailsAndActionsList from .types.linked_accounts_list_request_category import LinkedAccountsListRequestCategory +from pydantic import ValidationError class RawLinkedAccountsClient: @@ -126,6 +128,10 @@ def list( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) @@ -243,4 +249,8 @@ async def list( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) diff --git a/src/merge/resources/ticketing/resources/linked_accounts/types/__init__.py b/src/merge/resources/ticketing/resources/linked_accounts/types/__init__.py index a28f38cc..a884db6a 100644 --- a/src/merge/resources/ticketing/resources/linked_accounts/types/__init__.py +++ b/src/merge/resources/ticketing/resources/linked_accounts/types/__init__.py @@ -18,8 +18,10 @@ def __getattr__(attr_name: str) -> typing.Any: raise AttributeError(f"No {attr_name} found in _dynamic_imports for module name -> {__name__}") try: module = import_module(module_name, __package__) - result = getattr(module, attr_name) - return result + if module_name == f".{attr_name}": + return module + else: + return getattr(module, attr_name) except ImportError as e: raise ImportError(f"Failed to import {attr_name} from {module_name}: {e}") from e except AttributeError as e: diff --git a/src/merge/resources/ticketing/resources/linked_accounts/types/linked_accounts_list_request_category.py b/src/merge/resources/ticketing/resources/linked_accounts/types/linked_accounts_list_request_category.py index bd873ea8..ce04d1de 100644 --- a/src/merge/resources/ticketing/resources/linked_accounts/types/linked_accounts_list_request_category.py +++ b/src/merge/resources/ticketing/resources/linked_accounts/types/linked_accounts_list_request_category.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ......core import enum + T_Result = typing.TypeVar("T_Result") -class LinkedAccountsListRequestCategory(str, enum.Enum): +class LinkedAccountsListRequestCategory(enum.StrEnum): ACCOUNTING = "accounting" ATS = "ats" CRM = "crm" diff --git a/src/merge/resources/ticketing/resources/passthrough/raw_client.py b/src/merge/resources/ticketing/resources/passthrough/raw_client.py index a81c9a2d..7eb739b2 100644 --- a/src/merge/resources/ticketing/resources/passthrough/raw_client.py +++ b/src/merge/resources/ticketing/resources/passthrough/raw_client.py @@ -6,10 +6,12 @@ from .....core.api_error import ApiError from .....core.client_wrapper import AsyncClientWrapper, SyncClientWrapper from .....core.http_response import AsyncHttpResponse, HttpResponse +from .....core.parse_error import ParsingError from .....core.request_options import RequestOptions from .....core.unchecked_base_model import construct_type from ...types.data_passthrough_request import DataPassthroughRequest from ...types.remote_response import RemoteResponse +from pydantic import ValidationError # this is used as the default value for optional parameters OMIT = typing.cast(typing.Any, ...) @@ -60,6 +62,10 @@ def create( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) @@ -108,4 +114,8 @@ async def create( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) diff --git a/src/merge/resources/ticketing/resources/projects/__init__.py b/src/merge/resources/ticketing/resources/projects/__init__.py index 4017e304..eddc1259 100644 --- a/src/merge/resources/ticketing/resources/projects/__init__.py +++ b/src/merge/resources/ticketing/resources/projects/__init__.py @@ -16,8 +16,10 @@ def __getattr__(attr_name: str) -> typing.Any: raise AttributeError(f"No {attr_name} found in _dynamic_imports for module name -> {__name__}") try: module = import_module(module_name, __package__) - result = getattr(module, attr_name) - return result + if module_name == f".{attr_name}": + return module + else: + return getattr(module, attr_name) except ImportError as e: raise ImportError(f"Failed to import {attr_name} from {module_name}: {e}") from e except AttributeError as e: diff --git a/src/merge/resources/ticketing/resources/projects/raw_client.py b/src/merge/resources/ticketing/resources/projects/raw_client.py index a18488ee..e50d932e 100644 --- a/src/merge/resources/ticketing/resources/projects/raw_client.py +++ b/src/merge/resources/ticketing/resources/projects/raw_client.py @@ -9,12 +9,14 @@ from .....core.datetime_utils import serialize_datetime from .....core.http_response import AsyncHttpResponse, HttpResponse from .....core.jsonable_encoder import jsonable_encoder +from .....core.parse_error import ParsingError from .....core.request_options import RequestOptions from .....core.unchecked_base_model import construct_type from ...types.paginated_project_list import PaginatedProjectList from ...types.paginated_user_list import PaginatedUserList from ...types.project import Project from .types.projects_users_list_request_expand_item import ProjectsUsersListRequestExpandItem +from pydantic import ValidationError class RawProjectsClient: @@ -109,6 +111,10 @@ def list( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) def retrieve( @@ -162,6 +168,10 @@ def retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) def users_list( @@ -237,6 +247,10 @@ def users_list( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) @@ -332,6 +346,10 @@ async def list( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) async def retrieve( @@ -385,6 +403,10 @@ async def retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) async def users_list( @@ -460,4 +482,8 @@ async def users_list( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) diff --git a/src/merge/resources/ticketing/resources/projects/types/__init__.py b/src/merge/resources/ticketing/resources/projects/types/__init__.py index 7724983b..37c356bb 100644 --- a/src/merge/resources/ticketing/resources/projects/types/__init__.py +++ b/src/merge/resources/ticketing/resources/projects/types/__init__.py @@ -18,8 +18,10 @@ def __getattr__(attr_name: str) -> typing.Any: raise AttributeError(f"No {attr_name} found in _dynamic_imports for module name -> {__name__}") try: module = import_module(module_name, __package__) - result = getattr(module, attr_name) - return result + if module_name == f".{attr_name}": + return module + else: + return getattr(module, attr_name) except ImportError as e: raise ImportError(f"Failed to import {attr_name} from {module_name}: {e}") from e except AttributeError as e: diff --git a/src/merge/resources/ticketing/resources/projects/types/projects_users_list_request_expand_item.py b/src/merge/resources/ticketing/resources/projects/types/projects_users_list_request_expand_item.py index 1f068356..a68d557b 100644 --- a/src/merge/resources/ticketing/resources/projects/types/projects_users_list_request_expand_item.py +++ b/src/merge/resources/ticketing/resources/projects/types/projects_users_list_request_expand_item.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ......core import enum + T_Result = typing.TypeVar("T_Result") -class ProjectsUsersListRequestExpandItem(str, enum.Enum): +class ProjectsUsersListRequestExpandItem(enum.StrEnum): ROLES = "roles" TEAMS = "teams" diff --git a/src/merge/resources/ticketing/resources/regenerate_key/raw_client.py b/src/merge/resources/ticketing/resources/regenerate_key/raw_client.py index 0b07bbab..77edd652 100644 --- a/src/merge/resources/ticketing/resources/regenerate_key/raw_client.py +++ b/src/merge/resources/ticketing/resources/regenerate_key/raw_client.py @@ -6,9 +6,11 @@ from .....core.api_error import ApiError from .....core.client_wrapper import AsyncClientWrapper, SyncClientWrapper from .....core.http_response import AsyncHttpResponse, HttpResponse +from .....core.parse_error import ParsingError from .....core.request_options import RequestOptions from .....core.unchecked_base_model import construct_type from ...types.remote_key import RemoteKey +from pydantic import ValidationError # this is used as the default value for optional parameters OMIT = typing.cast(typing.Any, ...) @@ -60,6 +62,10 @@ def create(self, *, name: str, request_options: typing.Optional[RequestOptions] _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) @@ -111,4 +117,8 @@ async def create( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) diff --git a/src/merge/resources/ticketing/resources/roles/raw_client.py b/src/merge/resources/ticketing/resources/roles/raw_client.py index 5f40ef03..a322ffe5 100644 --- a/src/merge/resources/ticketing/resources/roles/raw_client.py +++ b/src/merge/resources/ticketing/resources/roles/raw_client.py @@ -9,10 +9,12 @@ from .....core.datetime_utils import serialize_datetime from .....core.http_response import AsyncHttpResponse, HttpResponse from .....core.jsonable_encoder import jsonable_encoder +from .....core.parse_error import ParsingError from .....core.request_options import RequestOptions from .....core.unchecked_base_model import construct_type from ...types.paginated_role_list import PaginatedRoleList from ...types.role import Role +from pydantic import ValidationError class RawRolesClient: @@ -107,6 +109,10 @@ def list( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) def retrieve( @@ -160,6 +166,10 @@ def retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) @@ -255,6 +265,10 @@ async def list( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) async def retrieve( @@ -308,4 +322,8 @@ async def retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) diff --git a/src/merge/resources/ticketing/resources/scopes/raw_client.py b/src/merge/resources/ticketing/resources/scopes/raw_client.py index 0088cc62..ffabec37 100644 --- a/src/merge/resources/ticketing/resources/scopes/raw_client.py +++ b/src/merge/resources/ticketing/resources/scopes/raw_client.py @@ -6,10 +6,12 @@ from .....core.api_error import ApiError from .....core.client_wrapper import AsyncClientWrapper, SyncClientWrapper from .....core.http_response import AsyncHttpResponse, HttpResponse +from .....core.parse_error import ParsingError from .....core.request_options import RequestOptions from .....core.unchecked_base_model import construct_type from ...types.common_model_scope_api import CommonModelScopeApi from ...types.individual_common_model_scope_deserializer_request import IndividualCommonModelScopeDeserializerRequest +from pydantic import ValidationError # this is used as the default value for optional parameters OMIT = typing.cast(typing.Any, ...) @@ -53,6 +55,10 @@ def default_scopes_retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) def linked_account_scopes_retrieve( @@ -89,6 +95,10 @@ def linked_account_scopes_retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) def linked_account_scopes_create( @@ -138,6 +148,10 @@ def linked_account_scopes_create( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) @@ -179,6 +193,10 @@ async def default_scopes_retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) async def linked_account_scopes_retrieve( @@ -215,6 +233,10 @@ async def linked_account_scopes_retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) async def linked_account_scopes_create( @@ -264,4 +286,8 @@ async def linked_account_scopes_create( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) diff --git a/src/merge/resources/ticketing/resources/sync_status/raw_client.py b/src/merge/resources/ticketing/resources/sync_status/raw_client.py index 0052fc35..3db85d7e 100644 --- a/src/merge/resources/ticketing/resources/sync_status/raw_client.py +++ b/src/merge/resources/ticketing/resources/sync_status/raw_client.py @@ -6,9 +6,11 @@ from .....core.api_error import ApiError from .....core.client_wrapper import AsyncClientWrapper, SyncClientWrapper from .....core.http_response import AsyncHttpResponse, HttpResponse +from .....core.parse_error import ParsingError from .....core.request_options import RequestOptions from .....core.unchecked_base_model import construct_type from ...types.paginated_sync_status_list import PaginatedSyncStatusList +from pydantic import ValidationError class RawSyncStatusClient: @@ -63,6 +65,10 @@ def list( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) @@ -118,4 +124,8 @@ async def list( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) diff --git a/src/merge/resources/ticketing/resources/tags/raw_client.py b/src/merge/resources/ticketing/resources/tags/raw_client.py index 8a283c5b..d89cb051 100644 --- a/src/merge/resources/ticketing/resources/tags/raw_client.py +++ b/src/merge/resources/ticketing/resources/tags/raw_client.py @@ -9,10 +9,12 @@ from .....core.datetime_utils import serialize_datetime from .....core.http_response import AsyncHttpResponse, HttpResponse from .....core.jsonable_encoder import jsonable_encoder +from .....core.parse_error import ParsingError from .....core.request_options import RequestOptions from .....core.unchecked_base_model import construct_type from ...types.paginated_tag_list import PaginatedTagList from ...types.tag import Tag +from pydantic import ValidationError class RawTagsClient: @@ -107,6 +109,10 @@ def list( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) def retrieve( @@ -160,6 +166,10 @@ def retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) @@ -255,6 +265,10 @@ async def list( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) async def retrieve( @@ -308,4 +322,8 @@ async def retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) diff --git a/src/merge/resources/ticketing/resources/teams/raw_client.py b/src/merge/resources/ticketing/resources/teams/raw_client.py index 05f6264d..5fcd8dfb 100644 --- a/src/merge/resources/ticketing/resources/teams/raw_client.py +++ b/src/merge/resources/ticketing/resources/teams/raw_client.py @@ -9,10 +9,12 @@ from .....core.datetime_utils import serialize_datetime from .....core.http_response import AsyncHttpResponse, HttpResponse from .....core.jsonable_encoder import jsonable_encoder +from .....core.parse_error import ParsingError from .....core.request_options import RequestOptions from .....core.unchecked_base_model import construct_type from ...types.paginated_team_list import PaginatedTeamList from ...types.team import Team +from pydantic import ValidationError class RawTeamsClient: @@ -107,6 +109,10 @@ def list( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) def retrieve( @@ -160,6 +166,10 @@ def retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) @@ -255,6 +265,10 @@ async def list( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) async def retrieve( @@ -308,4 +322,8 @@ async def retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) diff --git a/src/merge/resources/ticketing/resources/tickets/__init__.py b/src/merge/resources/ticketing/resources/tickets/__init__.py index e6bd28f7..93956391 100644 --- a/src/merge/resources/ticketing/resources/tickets/__init__.py +++ b/src/merge/resources/ticketing/resources/tickets/__init__.py @@ -40,8 +40,10 @@ def __getattr__(attr_name: str) -> typing.Any: raise AttributeError(f"No {attr_name} found in _dynamic_imports for module name -> {__name__}") try: module = import_module(module_name, __package__) - result = getattr(module, attr_name) - return result + if module_name == f".{attr_name}": + return module + else: + return getattr(module, attr_name) except ImportError as e: raise ImportError(f"Failed to import {attr_name} from {module_name}: {e}") from e except AttributeError as e: diff --git a/src/merge/resources/ticketing/resources/tickets/raw_client.py b/src/merge/resources/ticketing/resources/tickets/raw_client.py index d5848593..f428f39e 100644 --- a/src/merge/resources/ticketing/resources/tickets/raw_client.py +++ b/src/merge/resources/ticketing/resources/tickets/raw_client.py @@ -10,6 +10,7 @@ from .....core.datetime_utils import serialize_datetime from .....core.http_response import AsyncHttpResponse, HttpResponse from .....core.jsonable_encoder import jsonable_encoder +from .....core.parse_error import ParsingError from .....core.request_options import RequestOptions from .....core.unchecked_base_model import construct_type from ...types.meta_response import MetaResponse @@ -33,6 +34,7 @@ from .types.tickets_retrieve_request_remote_fields import TicketsRetrieveRequestRemoteFields from .types.tickets_retrieve_request_show_enum_origins import TicketsRetrieveRequestShowEnumOrigins from .types.tickets_viewers_list_request_expand_item import TicketsViewersListRequestExpandItem +from pydantic import ValidationError # this is used as the default value for optional parameters OMIT = typing.cast(typing.Any, ...) @@ -275,6 +277,10 @@ def list( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) def create( @@ -335,6 +341,10 @@ def create( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) def retrieve( @@ -410,6 +420,10 @@ def retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) def partial_update( @@ -473,6 +487,10 @@ def partial_update( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) def viewers_list( @@ -548,6 +566,10 @@ def viewers_list( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) @contextlib.contextmanager @@ -655,6 +677,13 @@ def _stream() -> HttpResponse[typing.Iterator[bytes]]: raise ApiError( status_code=_response.status_code, headers=dict(_response.headers), body=_response.text ) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, + headers=dict(_response.headers), + body=_response.json(), + cause=e, + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) yield _stream() @@ -695,6 +724,10 @@ def meta_patch_retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) def meta_post_retrieve( @@ -745,6 +778,10 @@ def meta_post_retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) def remote_field_classes_list( @@ -825,6 +862,10 @@ def remote_field_classes_list( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) @@ -1065,6 +1106,10 @@ async def list( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) async def create( @@ -1125,6 +1170,10 @@ async def create( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) async def retrieve( @@ -1200,6 +1249,10 @@ async def retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) async def partial_update( @@ -1263,6 +1316,10 @@ async def partial_update( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) async def viewers_list( @@ -1338,6 +1395,10 @@ async def viewers_list( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) @contextlib.asynccontextmanager @@ -1446,6 +1507,13 @@ async def _stream() -> AsyncHttpResponse[typing.AsyncIterator[bytes]]: raise ApiError( status_code=_response.status_code, headers=dict(_response.headers), body=_response.text ) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, + headers=dict(_response.headers), + body=_response.json(), + cause=e, + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) yield await _stream() @@ -1486,6 +1554,10 @@ async def meta_patch_retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) async def meta_post_retrieve( @@ -1536,6 +1608,10 @@ async def meta_post_retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) async def remote_field_classes_list( @@ -1616,4 +1692,8 @@ async def remote_field_classes_list( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) diff --git a/src/merge/resources/ticketing/resources/tickets/types/__init__.py b/src/merge/resources/ticketing/resources/tickets/types/__init__.py index 8af738f3..b6b07777 100644 --- a/src/merge/resources/ticketing/resources/tickets/types/__init__.py +++ b/src/merge/resources/ticketing/resources/tickets/types/__init__.py @@ -38,8 +38,10 @@ def __getattr__(attr_name: str) -> typing.Any: raise AttributeError(f"No {attr_name} found in _dynamic_imports for module name -> {__name__}") try: module = import_module(module_name, __package__) - result = getattr(module, attr_name) - return result + if module_name == f".{attr_name}": + return module + else: + return getattr(module, attr_name) except ImportError as e: raise ImportError(f"Failed to import {attr_name} from {module_name}: {e}") from e except AttributeError as e: diff --git a/src/merge/resources/ticketing/resources/tickets/types/tickets_list_request_expand_item.py b/src/merge/resources/ticketing/resources/tickets/types/tickets_list_request_expand_item.py index 3fd344fd..0c5adbf3 100644 --- a/src/merge/resources/ticketing/resources/tickets/types/tickets_list_request_expand_item.py +++ b/src/merge/resources/ticketing/resources/tickets/types/tickets_list_request_expand_item.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ......core import enum + T_Result = typing.TypeVar("T_Result") -class TicketsListRequestExpandItem(str, enum.Enum): +class TicketsListRequestExpandItem(enum.StrEnum): ACCOUNT = "account" ASSIGNED_TEAMS = "assigned_teams" ASSIGNEES = "assignees" diff --git a/src/merge/resources/ticketing/resources/tickets/types/tickets_list_request_priority.py b/src/merge/resources/ticketing/resources/tickets/types/tickets_list_request_priority.py index db455e45..3593db73 100644 --- a/src/merge/resources/ticketing/resources/tickets/types/tickets_list_request_priority.py +++ b/src/merge/resources/ticketing/resources/tickets/types/tickets_list_request_priority.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ......core import enum + T_Result = typing.TypeVar("T_Result") -class TicketsListRequestPriority(str, enum.Enum): +class TicketsListRequestPriority(enum.StrEnum): HIGH = "HIGH" LOW = "LOW" NORMAL = "NORMAL" diff --git a/src/merge/resources/ticketing/resources/tickets/types/tickets_list_request_remote_fields.py b/src/merge/resources/ticketing/resources/tickets/types/tickets_list_request_remote_fields.py index f12ce7d7..f8457759 100644 --- a/src/merge/resources/ticketing/resources/tickets/types/tickets_list_request_remote_fields.py +++ b/src/merge/resources/ticketing/resources/tickets/types/tickets_list_request_remote_fields.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ......core import enum + T_Result = typing.TypeVar("T_Result") -class TicketsListRequestRemoteFields(str, enum.Enum): +class TicketsListRequestRemoteFields(enum.StrEnum): PRIORITY = "priority" PRIORITY_STATUS = "priority,status" PRIORITY_STATUS_TICKET_TYPE = "priority,status,ticket_type" diff --git a/src/merge/resources/ticketing/resources/tickets/types/tickets_list_request_show_enum_origins.py b/src/merge/resources/ticketing/resources/tickets/types/tickets_list_request_show_enum_origins.py index d077c628..0986e8cf 100644 --- a/src/merge/resources/ticketing/resources/tickets/types/tickets_list_request_show_enum_origins.py +++ b/src/merge/resources/ticketing/resources/tickets/types/tickets_list_request_show_enum_origins.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ......core import enum + T_Result = typing.TypeVar("T_Result") -class TicketsListRequestShowEnumOrigins(str, enum.Enum): +class TicketsListRequestShowEnumOrigins(enum.StrEnum): PRIORITY = "priority" PRIORITY_STATUS = "priority,status" PRIORITY_STATUS_TICKET_TYPE = "priority,status,ticket_type" diff --git a/src/merge/resources/ticketing/resources/tickets/types/tickets_list_request_status.py b/src/merge/resources/ticketing/resources/tickets/types/tickets_list_request_status.py index edb298e9..1b2e1c97 100644 --- a/src/merge/resources/ticketing/resources/tickets/types/tickets_list_request_status.py +++ b/src/merge/resources/ticketing/resources/tickets/types/tickets_list_request_status.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ......core import enum + T_Result = typing.TypeVar("T_Result") -class TicketsListRequestStatus(str, enum.Enum): +class TicketsListRequestStatus(enum.StrEnum): EMPTY = "" CLOSED = "CLOSED" IN_PROGRESS = "IN_PROGRESS" diff --git a/src/merge/resources/ticketing/resources/tickets/types/tickets_live_search_retrieve_request_remote_fields.py b/src/merge/resources/ticketing/resources/tickets/types/tickets_live_search_retrieve_request_remote_fields.py index 1a43df23..45c671f0 100644 --- a/src/merge/resources/ticketing/resources/tickets/types/tickets_live_search_retrieve_request_remote_fields.py +++ b/src/merge/resources/ticketing/resources/tickets/types/tickets_live_search_retrieve_request_remote_fields.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ......core import enum + T_Result = typing.TypeVar("T_Result") -class TicketsLiveSearchRetrieveRequestRemoteFields(str, enum.Enum): +class TicketsLiveSearchRetrieveRequestRemoteFields(enum.StrEnum): PRIORITY = "priority" PRIORITY_STATUS = "priority,status" PRIORITY_STATUS_TICKET_TYPE = "priority,status,ticket_type" diff --git a/src/merge/resources/ticketing/resources/tickets/types/tickets_live_search_retrieve_request_show_enum_origins.py b/src/merge/resources/ticketing/resources/tickets/types/tickets_live_search_retrieve_request_show_enum_origins.py index 203e0ded..3e77f3ae 100644 --- a/src/merge/resources/ticketing/resources/tickets/types/tickets_live_search_retrieve_request_show_enum_origins.py +++ b/src/merge/resources/ticketing/resources/tickets/types/tickets_live_search_retrieve_request_show_enum_origins.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ......core import enum + T_Result = typing.TypeVar("T_Result") -class TicketsLiveSearchRetrieveRequestShowEnumOrigins(str, enum.Enum): +class TicketsLiveSearchRetrieveRequestShowEnumOrigins(enum.StrEnum): PRIORITY = "priority" PRIORITY_STATUS = "priority,status" PRIORITY_STATUS_TICKET_TYPE = "priority,status,ticket_type" diff --git a/src/merge/resources/ticketing/resources/tickets/types/tickets_retrieve_request_expand_item.py b/src/merge/resources/ticketing/resources/tickets/types/tickets_retrieve_request_expand_item.py index 1b50b165..1fd4ebf3 100644 --- a/src/merge/resources/ticketing/resources/tickets/types/tickets_retrieve_request_expand_item.py +++ b/src/merge/resources/ticketing/resources/tickets/types/tickets_retrieve_request_expand_item.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ......core import enum + T_Result = typing.TypeVar("T_Result") -class TicketsRetrieveRequestExpandItem(str, enum.Enum): +class TicketsRetrieveRequestExpandItem(enum.StrEnum): ACCOUNT = "account" ASSIGNED_TEAMS = "assigned_teams" ASSIGNEES = "assignees" diff --git a/src/merge/resources/ticketing/resources/tickets/types/tickets_retrieve_request_remote_fields.py b/src/merge/resources/ticketing/resources/tickets/types/tickets_retrieve_request_remote_fields.py index 18dfa4e7..7ebf58c9 100644 --- a/src/merge/resources/ticketing/resources/tickets/types/tickets_retrieve_request_remote_fields.py +++ b/src/merge/resources/ticketing/resources/tickets/types/tickets_retrieve_request_remote_fields.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ......core import enum + T_Result = typing.TypeVar("T_Result") -class TicketsRetrieveRequestRemoteFields(str, enum.Enum): +class TicketsRetrieveRequestRemoteFields(enum.StrEnum): PRIORITY = "priority" PRIORITY_STATUS = "priority,status" PRIORITY_STATUS_TICKET_TYPE = "priority,status,ticket_type" diff --git a/src/merge/resources/ticketing/resources/tickets/types/tickets_retrieve_request_show_enum_origins.py b/src/merge/resources/ticketing/resources/tickets/types/tickets_retrieve_request_show_enum_origins.py index a0fcfa42..acb327de 100644 --- a/src/merge/resources/ticketing/resources/tickets/types/tickets_retrieve_request_show_enum_origins.py +++ b/src/merge/resources/ticketing/resources/tickets/types/tickets_retrieve_request_show_enum_origins.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ......core import enum + T_Result = typing.TypeVar("T_Result") -class TicketsRetrieveRequestShowEnumOrigins(str, enum.Enum): +class TicketsRetrieveRequestShowEnumOrigins(enum.StrEnum): PRIORITY = "priority" PRIORITY_STATUS = "priority,status" PRIORITY_STATUS_TICKET_TYPE = "priority,status,ticket_type" diff --git a/src/merge/resources/ticketing/resources/tickets/types/tickets_viewers_list_request_expand_item.py b/src/merge/resources/ticketing/resources/tickets/types/tickets_viewers_list_request_expand_item.py index 756fcef2..ce3da1ef 100644 --- a/src/merge/resources/ticketing/resources/tickets/types/tickets_viewers_list_request_expand_item.py +++ b/src/merge/resources/ticketing/resources/tickets/types/tickets_viewers_list_request_expand_item.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ......core import enum + T_Result = typing.TypeVar("T_Result") -class TicketsViewersListRequestExpandItem(str, enum.Enum): +class TicketsViewersListRequestExpandItem(enum.StrEnum): TEAM = "team" USER = "user" diff --git a/src/merge/resources/ticketing/resources/users/__init__.py b/src/merge/resources/ticketing/resources/users/__init__.py index 8e4fa9ff..47b3e9a5 100644 --- a/src/merge/resources/ticketing/resources/users/__init__.py +++ b/src/merge/resources/ticketing/resources/users/__init__.py @@ -19,8 +19,10 @@ def __getattr__(attr_name: str) -> typing.Any: raise AttributeError(f"No {attr_name} found in _dynamic_imports for module name -> {__name__}") try: module = import_module(module_name, __package__) - result = getattr(module, attr_name) - return result + if module_name == f".{attr_name}": + return module + else: + return getattr(module, attr_name) except ImportError as e: raise ImportError(f"Failed to import {attr_name} from {module_name}: {e}") from e except AttributeError as e: diff --git a/src/merge/resources/ticketing/resources/users/raw_client.py b/src/merge/resources/ticketing/resources/users/raw_client.py index 4faeb895..953754a8 100644 --- a/src/merge/resources/ticketing/resources/users/raw_client.py +++ b/src/merge/resources/ticketing/resources/users/raw_client.py @@ -9,12 +9,14 @@ from .....core.datetime_utils import serialize_datetime from .....core.http_response import AsyncHttpResponse, HttpResponse from .....core.jsonable_encoder import jsonable_encoder +from .....core.parse_error import ParsingError from .....core.request_options import RequestOptions from .....core.unchecked_base_model import construct_type from ...types.paginated_user_list import PaginatedUserList from ...types.user import User from .types.users_list_request_expand_item import UsersListRequestExpandItem from .types.users_retrieve_request_expand_item import UsersRetrieveRequestExpandItem +from pydantic import ValidationError class RawUsersClient: @@ -141,6 +143,10 @@ def list( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) def retrieve( @@ -201,6 +207,10 @@ def retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) @@ -328,6 +338,10 @@ async def list( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) async def retrieve( @@ -388,4 +402,8 @@ async def retrieve( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) diff --git a/src/merge/resources/ticketing/resources/users/types/__init__.py b/src/merge/resources/ticketing/resources/users/types/__init__.py index e7ba722e..ae62b2c8 100644 --- a/src/merge/resources/ticketing/resources/users/types/__init__.py +++ b/src/merge/resources/ticketing/resources/users/types/__init__.py @@ -20,8 +20,10 @@ def __getattr__(attr_name: str) -> typing.Any: raise AttributeError(f"No {attr_name} found in _dynamic_imports for module name -> {__name__}") try: module = import_module(module_name, __package__) - result = getattr(module, attr_name) - return result + if module_name == f".{attr_name}": + return module + else: + return getattr(module, attr_name) except ImportError as e: raise ImportError(f"Failed to import {attr_name} from {module_name}: {e}") from e except AttributeError as e: diff --git a/src/merge/resources/ticketing/resources/users/types/users_list_request_expand_item.py b/src/merge/resources/ticketing/resources/users/types/users_list_request_expand_item.py index 5a1b474b..4880852f 100644 --- a/src/merge/resources/ticketing/resources/users/types/users_list_request_expand_item.py +++ b/src/merge/resources/ticketing/resources/users/types/users_list_request_expand_item.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ......core import enum + T_Result = typing.TypeVar("T_Result") -class UsersListRequestExpandItem(str, enum.Enum): +class UsersListRequestExpandItem(enum.StrEnum): ROLES = "roles" TEAMS = "teams" diff --git a/src/merge/resources/ticketing/resources/users/types/users_retrieve_request_expand_item.py b/src/merge/resources/ticketing/resources/users/types/users_retrieve_request_expand_item.py index 5f734dfc..1cd8403c 100644 --- a/src/merge/resources/ticketing/resources/users/types/users_retrieve_request_expand_item.py +++ b/src/merge/resources/ticketing/resources/users/types/users_retrieve_request_expand_item.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ......core import enum + T_Result = typing.TypeVar("T_Result") -class UsersRetrieveRequestExpandItem(str, enum.Enum): +class UsersRetrieveRequestExpandItem(enum.StrEnum): ROLES = "roles" TEAMS = "teams" diff --git a/src/merge/resources/ticketing/resources/webhook_receivers/raw_client.py b/src/merge/resources/ticketing/resources/webhook_receivers/raw_client.py index 9060561d..873b73cc 100644 --- a/src/merge/resources/ticketing/resources/webhook_receivers/raw_client.py +++ b/src/merge/resources/ticketing/resources/webhook_receivers/raw_client.py @@ -6,9 +6,11 @@ from .....core.api_error import ApiError from .....core.client_wrapper import AsyncClientWrapper, SyncClientWrapper from .....core.http_response import AsyncHttpResponse, HttpResponse +from .....core.parse_error import ParsingError from .....core.request_options import RequestOptions from .....core.unchecked_base_model import construct_type from ...types.webhook_receiver import WebhookReceiver +from pydantic import ValidationError # this is used as the default value for optional parameters OMIT = typing.cast(typing.Any, ...) @@ -52,6 +54,10 @@ def list( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) def create( @@ -108,6 +114,10 @@ def create( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) @@ -149,6 +159,10 @@ async def list( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) async def create( @@ -205,4 +219,8 @@ async def create( _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) diff --git a/src/merge/resources/ticketing/types/__init__.py b/src/merge/resources/ticketing/types/__init__.py index 1fe855e6..c2cf2ca8 100644 --- a/src/merge/resources/ticketing/types/__init__.py +++ b/src/merge/resources/ticketing/types/__init__.py @@ -390,8 +390,10 @@ def __getattr__(attr_name: str) -> typing.Any: raise AttributeError(f"No {attr_name} found in _dynamic_imports for module name -> {__name__}") try: module = import_module(module_name, __package__) - result = getattr(module, attr_name) - return result + if module_name == f".{attr_name}": + return module + else: + return getattr(module, attr_name) except ImportError as e: raise ImportError(f"Failed to import {attr_name} from {module_name}: {e}") from e except AttributeError as e: diff --git a/src/merge/resources/ticketing/types/account.py b/src/merge/resources/ticketing/types/account.py index 3d1cda4c..e0989157 100644 --- a/src/merge/resources/ticketing/types/account.py +++ b/src/merge/resources/ticketing/types/account.py @@ -52,7 +52,7 @@ class Account(UncheckedBaseModel): Indicates whether or not this object has been deleted in the third party platform. Full coverage deletion detection is a premium add-on. Native deletion detection is offered for free with limited coverage. [Learn more](https://docs.merge.dev/integrations/hris/supported-features/). """ - field_mappings: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None + field_mappings: typing.Optional[typing.Dict[str, typing.Any]] = None remote_data: typing.Optional[typing.List[RemoteData]] = None if IS_PYDANTIC_V2: diff --git a/src/merge/resources/ticketing/types/account_details_and_actions.py b/src/merge/resources/ticketing/types/account_details_and_actions.py index 93c874ed..cbf29cb3 100644 --- a/src/merge/resources/ticketing/types/account_details_and_actions.py +++ b/src/merge/resources/ticketing/types/account_details_and_actions.py @@ -42,7 +42,7 @@ class AccountDetailsAndActions(UncheckedBaseModel): integration: typing.Optional[AccountDetailsAndActionsIntegration] = None account_type: str completed_at: dt.datetime - integration_specific_fields: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None + integration_specific_fields: typing.Optional[typing.Dict[str, typing.Any]] = None if IS_PYDANTIC_V2: model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2 diff --git a/src/merge/resources/ticketing/types/account_details_and_actions_status_enum.py b/src/merge/resources/ticketing/types/account_details_and_actions_status_enum.py index df37f582..b9ae9efc 100644 --- a/src/merge/resources/ticketing/types/account_details_and_actions_status_enum.py +++ b/src/merge/resources/ticketing/types/account_details_and_actions_status_enum.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ....core import enum + T_Result = typing.TypeVar("T_Result") -class AccountDetailsAndActionsStatusEnum(str, enum.Enum): +class AccountDetailsAndActionsStatusEnum(enum.StrEnum): """ * `COMPLETE` - COMPLETE * `INCOMPLETE` - INCOMPLETE diff --git a/src/merge/resources/ticketing/types/account_integration.py b/src/merge/resources/ticketing/types/account_integration.py index ef8b260d..7bc872ca 100644 --- a/src/merge/resources/ticketing/types/account_integration.py +++ b/src/merge/resources/ticketing/types/account_integration.py @@ -40,9 +40,7 @@ class AccountIntegration(UncheckedBaseModel): """ slug: typing.Optional[str] = None - api_endpoints_to_documentation_urls: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = ( - pydantic.Field(default=None) - ) + api_endpoints_to_documentation_urls: typing.Optional[typing.Dict[str, typing.Any]] = pydantic.Field(default=None) """ Mapping of API endpoints to documentation urls for support. Example: {'GET': [['/common-model-scopes', 'https://docs.merge.dev/accounting/common-model-scopes/#common_model_scopes_retrieve'],['/common-model-actions', 'https://docs.merge.dev/accounting/common-model-actions/#common_model_actions_retrieve']], 'POST': []} """ @@ -52,7 +50,7 @@ class AccountIntegration(UncheckedBaseModel): Setup guide URL for third party webhook creation. Exposed in Merge Docs. """ - category_beta_status: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = pydantic.Field(default=None) + category_beta_status: typing.Optional[typing.Dict[str, typing.Any]] = pydantic.Field(default=None) """ Category or categories this integration is in beta status for. """ diff --git a/src/merge/resources/ticketing/types/actions_enum.py b/src/merge/resources/ticketing/types/actions_enum.py index 77b81831..3bf626a1 100644 --- a/src/merge/resources/ticketing/types/actions_enum.py +++ b/src/merge/resources/ticketing/types/actions_enum.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ....core import enum + T_Result = typing.TypeVar("T_Result") -class ActionsEnum(str, enum.Enum): +class ActionsEnum(enum.StrEnum): """ * `VIEW` - VIEW * `CREATE` - CREATE diff --git a/src/merge/resources/ticketing/types/advanced_metadata.py b/src/merge/resources/ticketing/types/advanced_metadata.py index 60b5d072..aef64bb3 100644 --- a/src/merge/resources/ticketing/types/advanced_metadata.py +++ b/src/merge/resources/ticketing/types/advanced_metadata.py @@ -13,7 +13,7 @@ class AdvancedMetadata(UncheckedBaseModel): description: typing.Optional[str] = None is_required: typing.Optional[bool] = None is_custom: typing.Optional[bool] = None - field_choices: typing.Optional[typing.List[typing.Optional[typing.Any]]] = None + field_choices: typing.Optional[typing.List[typing.Any]] = None if IS_PYDANTIC_V2: model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2 diff --git a/src/merge/resources/ticketing/types/attachment.py b/src/merge/resources/ticketing/types/attachment.py index 13163ced..03ae7f16 100644 --- a/src/merge/resources/ticketing/types/attachment.py +++ b/src/merge/resources/ticketing/types/attachment.py @@ -72,7 +72,7 @@ class Attachment(UncheckedBaseModel): Indicates whether or not this object has been deleted in the third party platform. Full coverage deletion detection is a premium add-on. Native deletion detection is offered for free with limited coverage. [Learn more](https://docs.merge.dev/integrations/hris/supported-features/). """ - field_mappings: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None + field_mappings: typing.Optional[typing.Dict[str, typing.Any]] = None remote_data: typing.Optional[typing.List[RemoteData]] = None if IS_PYDANTIC_V2: @@ -85,8 +85,15 @@ class Config: extra = pydantic.Extra.allow -from .collection import Collection # noqa: E402, F401, I001 -from .ticket import Ticket # noqa: E402, F401, I001 -from .attachment_ticket import AttachmentTicket # noqa: E402, F401, I001 +from .attachment_ticket import AttachmentTicket # noqa: E402, I001 +from .ticket import Ticket # noqa: E402, I001 +from .ticket_attachments_item import TicketAttachmentsItem # noqa: E402, I001 +from .ticket_parent_ticket import TicketParentTicket # noqa: E402, I001 -update_forward_refs(Attachment) +update_forward_refs( + Attachment, + AttachmentTicket=AttachmentTicket, + Ticket=Ticket, + TicketAttachmentsItem=TicketAttachmentsItem, + TicketParentTicket=TicketParentTicket, +) diff --git a/src/merge/resources/ticketing/types/attachment_request.py b/src/merge/resources/ticketing/types/attachment_request.py index 62af0a78..a3fc7f7e 100644 --- a/src/merge/resources/ticketing/types/attachment_request.py +++ b/src/merge/resources/ticketing/types/attachment_request.py @@ -45,8 +45,8 @@ class AttachmentRequest(UncheckedBaseModel): The user who uploaded the attachment. """ - integration_params: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None - linked_account_params: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None + integration_params: typing.Optional[typing.Dict[str, typing.Any]] = None + linked_account_params: typing.Optional[typing.Dict[str, typing.Any]] = None if IS_PYDANTIC_V2: model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2 @@ -58,8 +58,4 @@ class Config: extra = pydantic.Extra.allow -from .attachment import Attachment # noqa: E402, F401, I001 -from .collection import Collection # noqa: E402, F401, I001 -from .ticket import Ticket # noqa: E402, F401, I001 - update_forward_refs(AttachmentRequest) diff --git a/src/merge/resources/ticketing/types/categories_enum.py b/src/merge/resources/ticketing/types/categories_enum.py index 3f2dc5a9..82308151 100644 --- a/src/merge/resources/ticketing/types/categories_enum.py +++ b/src/merge/resources/ticketing/types/categories_enum.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ....core import enum + T_Result = typing.TypeVar("T_Result") -class CategoriesEnum(str, enum.Enum): +class CategoriesEnum(enum.StrEnum): """ * `hris` - hris * `ats` - ats diff --git a/src/merge/resources/ticketing/types/category_enum.py b/src/merge/resources/ticketing/types/category_enum.py index d37e48f5..9a2fa8c7 100644 --- a/src/merge/resources/ticketing/types/category_enum.py +++ b/src/merge/resources/ticketing/types/category_enum.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ....core import enum + T_Result = typing.TypeVar("T_Result") -class CategoryEnum(str, enum.Enum): +class CategoryEnum(enum.StrEnum): """ * `hris` - hris * `ats` - ats diff --git a/src/merge/resources/ticketing/types/collection.py b/src/merge/resources/ticketing/types/collection.py index d881c678..ece05a77 100644 --- a/src/merge/resources/ticketing/types/collection.py +++ b/src/merge/resources/ticketing/types/collection.py @@ -94,7 +94,7 @@ class Collection(UncheckedBaseModel): Indicates whether or not this object has been deleted in the third party platform. Full coverage deletion detection is a premium add-on. Native deletion detection is offered for free with limited coverage. [Learn more](https://docs.merge.dev/integrations/hris/supported-features/). """ - field_mappings: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None + field_mappings: typing.Optional[typing.Dict[str, typing.Any]] = None remote_data: typing.Optional[typing.List[RemoteData]] = None if IS_PYDANTIC_V2: @@ -107,6 +107,6 @@ class Config: extra = pydantic.Extra.allow -from .collection_parent_collection import CollectionParentCollection # noqa: E402, F401, I001 +from .collection_parent_collection import CollectionParentCollection # noqa: E402, I001 -update_forward_refs(Collection) +update_forward_refs(Collection, CollectionParentCollection=CollectionParentCollection) diff --git a/src/merge/resources/ticketing/types/collection_access_level_enum.py b/src/merge/resources/ticketing/types/collection_access_level_enum.py index 63f9cbc7..85d4dd62 100644 --- a/src/merge/resources/ticketing/types/collection_access_level_enum.py +++ b/src/merge/resources/ticketing/types/collection_access_level_enum.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ....core import enum + T_Result = typing.TypeVar("T_Result") -class CollectionAccessLevelEnum(str, enum.Enum): +class CollectionAccessLevelEnum(enum.StrEnum): """ * `PRIVATE` - PRIVATE * `COMPANY` - COMPANY diff --git a/src/merge/resources/ticketing/types/collection_type_enum.py b/src/merge/resources/ticketing/types/collection_type_enum.py index cd631559..4f26dfd5 100644 --- a/src/merge/resources/ticketing/types/collection_type_enum.py +++ b/src/merge/resources/ticketing/types/collection_type_enum.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ....core import enum + T_Result = typing.TypeVar("T_Result") -class CollectionTypeEnum(str, enum.Enum): +class CollectionTypeEnum(enum.StrEnum): """ * `LIST` - LIST * `PROJECT` - PROJECT diff --git a/src/merge/resources/ticketing/types/comment.py b/src/merge/resources/ticketing/types/comment.py index 34dbbe8e..3933cd4b 100644 --- a/src/merge/resources/ticketing/types/comment.py +++ b/src/merge/resources/ticketing/types/comment.py @@ -80,7 +80,7 @@ class Comment(UncheckedBaseModel): Indicates whether or not this object has been deleted in the third party platform. Full coverage deletion detection is a premium add-on. Native deletion detection is offered for free with limited coverage. [Learn more](https://docs.merge.dev/integrations/hris/supported-features/). """ - field_mappings: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None + field_mappings: typing.Optional[typing.Dict[str, typing.Any]] = None remote_data: typing.Optional[typing.List[RemoteData]] = None if IS_PYDANTIC_V2: @@ -93,8 +93,4 @@ class Config: extra = pydantic.Extra.allow -from .attachment import Attachment # noqa: E402, F401, I001 -from .collection import Collection # noqa: E402, F401, I001 -from .ticket import Ticket # noqa: E402, F401, I001 - update_forward_refs(Comment) diff --git a/src/merge/resources/ticketing/types/comment_request.py b/src/merge/resources/ticketing/types/comment_request.py index 0f70cc1b..0eedd3eb 100644 --- a/src/merge/resources/ticketing/types/comment_request.py +++ b/src/merge/resources/ticketing/types/comment_request.py @@ -52,8 +52,8 @@ class CommentRequest(UncheckedBaseModel): Whether or not the comment is internal. """ - integration_params: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None - linked_account_params: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None + integration_params: typing.Optional[typing.Dict[str, typing.Any]] = None + linked_account_params: typing.Optional[typing.Dict[str, typing.Any]] = None if IS_PYDANTIC_V2: model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2 @@ -65,8 +65,4 @@ class Config: extra = pydantic.Extra.allow -from .attachment import Attachment # noqa: E402, F401, I001 -from .collection import Collection # noqa: E402, F401, I001 -from .ticket import Ticket # noqa: E402, F401, I001 - update_forward_refs(CommentRequest) diff --git a/src/merge/resources/ticketing/types/comment_response.py b/src/merge/resources/ticketing/types/comment_response.py index 68a9e96b..39626bab 100644 --- a/src/merge/resources/ticketing/types/comment_response.py +++ b/src/merge/resources/ticketing/types/comment_response.py @@ -29,8 +29,4 @@ class Config: extra = pydantic.Extra.allow -from .attachment import Attachment # noqa: E402, F401, I001 -from .collection import Collection # noqa: E402, F401, I001 -from .ticket import Ticket # noqa: E402, F401, I001 - update_forward_refs(CommentResponse) diff --git a/src/merge/resources/ticketing/types/contact.py b/src/merge/resources/ticketing/types/contact.py index 2e699d49..76ffeeb4 100644 --- a/src/merge/resources/ticketing/types/contact.py +++ b/src/merge/resources/ticketing/types/contact.py @@ -66,7 +66,7 @@ class Contact(UncheckedBaseModel): Indicates whether or not this object has been deleted in the third party platform. Full coverage deletion detection is a premium add-on. Native deletion detection is offered for free with limited coverage. [Learn more](https://docs.merge.dev/integrations/hris/supported-features/). """ - field_mappings: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None + field_mappings: typing.Optional[typing.Dict[str, typing.Any]] = None remote_data: typing.Optional[typing.List[RemoteData]] = None if IS_PYDANTIC_V2: diff --git a/src/merge/resources/ticketing/types/contact_request.py b/src/merge/resources/ticketing/types/contact_request.py index 92ec7aa6..07e8a96b 100644 --- a/src/merge/resources/ticketing/types/contact_request.py +++ b/src/merge/resources/ticketing/types/contact_request.py @@ -43,8 +43,8 @@ class ContactRequest(UncheckedBaseModel): The contact's account. """ - integration_params: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None - linked_account_params: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None + integration_params: typing.Optional[typing.Dict[str, typing.Any]] = None + linked_account_params: typing.Optional[typing.Dict[str, typing.Any]] = None if IS_PYDANTIC_V2: model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2 diff --git a/src/merge/resources/ticketing/types/data_passthrough_request.py b/src/merge/resources/ticketing/types/data_passthrough_request.py index c9f0a799..df3af029 100644 --- a/src/merge/resources/ticketing/types/data_passthrough_request.py +++ b/src/merge/resources/ticketing/types/data_passthrough_request.py @@ -41,7 +41,7 @@ class DataPassthroughRequest(UncheckedBaseModel): Pass an array of `MultipartFormField` objects in here instead of using the `data` param if `request_format` is set to `MULTIPART`. """ - headers: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = pydantic.Field(default=None) + headers: typing.Optional[typing.Dict[str, typing.Any]] = pydantic.Field(default=None) """ The headers to use for the request (Merge will handle the account's authorization headers). `Content-Type` header is required for passthrough. Choose content type corresponding to expected format of receiving server. """ diff --git a/src/merge/resources/ticketing/types/effect_enum.py b/src/merge/resources/ticketing/types/effect_enum.py index 4b8cafc9..f9aae87b 100644 --- a/src/merge/resources/ticketing/types/effect_enum.py +++ b/src/merge/resources/ticketing/types/effect_enum.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ....core import enum + T_Result = typing.TypeVar("T_Result") -class EffectEnum(str, enum.Enum): +class EffectEnum(enum.StrEnum): """ * `ALLOWED` - ALLOWED * `DENIED` - DENIED diff --git a/src/merge/resources/ticketing/types/enabled_actions_enum.py b/src/merge/resources/ticketing/types/enabled_actions_enum.py index 29cf9839..604265f8 100644 --- a/src/merge/resources/ticketing/types/enabled_actions_enum.py +++ b/src/merge/resources/ticketing/types/enabled_actions_enum.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ....core import enum + T_Result = typing.TypeVar("T_Result") -class EnabledActionsEnum(str, enum.Enum): +class EnabledActionsEnum(enum.StrEnum): """ * `READ` - READ * `WRITE` - WRITE diff --git a/src/merge/resources/ticketing/types/encoding_enum.py b/src/merge/resources/ticketing/types/encoding_enum.py index 7454647e..aa2aa971 100644 --- a/src/merge/resources/ticketing/types/encoding_enum.py +++ b/src/merge/resources/ticketing/types/encoding_enum.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ....core import enum + T_Result = typing.TypeVar("T_Result") -class EncodingEnum(str, enum.Enum): +class EncodingEnum(enum.StrEnum): """ * `RAW` - RAW * `BASE64` - BASE64 diff --git a/src/merge/resources/ticketing/types/event_type_enum.py b/src/merge/resources/ticketing/types/event_type_enum.py index 537cea3f..1c16772d 100644 --- a/src/merge/resources/ticketing/types/event_type_enum.py +++ b/src/merge/resources/ticketing/types/event_type_enum.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ....core import enum + T_Result = typing.TypeVar("T_Result") -class EventTypeEnum(str, enum.Enum): +class EventTypeEnum(enum.StrEnum): """ * `CREATED_REMOTE_PRODUCTION_API_KEY` - CREATED_REMOTE_PRODUCTION_API_KEY * `DELETED_REMOTE_PRODUCTION_API_KEY` - DELETED_REMOTE_PRODUCTION_API_KEY diff --git a/src/merge/resources/ticketing/types/external_target_field_api_response.py b/src/merge/resources/ticketing/types/external_target_field_api_response.py index 787b39d6..3bb4f12a 100644 --- a/src/merge/resources/ticketing/types/external_target_field_api_response.py +++ b/src/merge/resources/ticketing/types/external_target_field_api_response.py @@ -3,23 +3,61 @@ import typing import pydantic +import typing_extensions from ....core.pydantic_utilities import IS_PYDANTIC_V2 +from ....core.serialization import FieldMetadata from ....core.unchecked_base_model import UncheckedBaseModel from .external_target_field_api import ExternalTargetFieldApi class ExternalTargetFieldApiResponse(UncheckedBaseModel): - ticket: typing.Optional[typing.List[ExternalTargetFieldApi]] = pydantic.Field(alias="Ticket", default=None) - comment: typing.Optional[typing.List[ExternalTargetFieldApi]] = pydantic.Field(alias="Comment", default=None) - project: typing.Optional[typing.List[ExternalTargetFieldApi]] = pydantic.Field(alias="Project", default=None) - collection: typing.Optional[typing.List[ExternalTargetFieldApi]] = pydantic.Field(alias="Collection", default=None) - user: typing.Optional[typing.List[ExternalTargetFieldApi]] = pydantic.Field(alias="User", default=None) - role: typing.Optional[typing.List[ExternalTargetFieldApi]] = pydantic.Field(alias="Role", default=None) - account: typing.Optional[typing.List[ExternalTargetFieldApi]] = pydantic.Field(alias="Account", default=None) - team: typing.Optional[typing.List[ExternalTargetFieldApi]] = pydantic.Field(alias="Team", default=None) - attachment: typing.Optional[typing.List[ExternalTargetFieldApi]] = pydantic.Field(alias="Attachment", default=None) - tag: typing.Optional[typing.List[ExternalTargetFieldApi]] = pydantic.Field(alias="Tag", default=None) - contact: typing.Optional[typing.List[ExternalTargetFieldApi]] = pydantic.Field(alias="Contact", default=None) + ticket: typing_extensions.Annotated[ + typing.Optional[typing.List[ExternalTargetFieldApi]], + FieldMetadata(alias="Ticket"), + pydantic.Field(alias="Ticket"), + ] = None + comment: typing_extensions.Annotated[ + typing.Optional[typing.List[ExternalTargetFieldApi]], + FieldMetadata(alias="Comment"), + pydantic.Field(alias="Comment"), + ] = None + project: typing_extensions.Annotated[ + typing.Optional[typing.List[ExternalTargetFieldApi]], + FieldMetadata(alias="Project"), + pydantic.Field(alias="Project"), + ] = None + collection: typing_extensions.Annotated[ + typing.Optional[typing.List[ExternalTargetFieldApi]], + FieldMetadata(alias="Collection"), + pydantic.Field(alias="Collection"), + ] = None + user: typing_extensions.Annotated[ + typing.Optional[typing.List[ExternalTargetFieldApi]], FieldMetadata(alias="User"), pydantic.Field(alias="User") + ] = None + role: typing_extensions.Annotated[ + typing.Optional[typing.List[ExternalTargetFieldApi]], FieldMetadata(alias="Role"), pydantic.Field(alias="Role") + ] = None + account: typing_extensions.Annotated[ + typing.Optional[typing.List[ExternalTargetFieldApi]], + FieldMetadata(alias="Account"), + pydantic.Field(alias="Account"), + ] = None + team: typing_extensions.Annotated[ + typing.Optional[typing.List[ExternalTargetFieldApi]], FieldMetadata(alias="Team"), pydantic.Field(alias="Team") + ] = None + attachment: typing_extensions.Annotated[ + typing.Optional[typing.List[ExternalTargetFieldApi]], + FieldMetadata(alias="Attachment"), + pydantic.Field(alias="Attachment"), + ] = None + tag: typing_extensions.Annotated[ + typing.Optional[typing.List[ExternalTargetFieldApi]], FieldMetadata(alias="Tag"), pydantic.Field(alias="Tag") + ] = None + contact: typing_extensions.Annotated[ + typing.Optional[typing.List[ExternalTargetFieldApi]], + FieldMetadata(alias="Contact"), + pydantic.Field(alias="Contact"), + ] = None if IS_PYDANTIC_V2: model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2 diff --git a/src/merge/resources/ticketing/types/field_format_enum.py b/src/merge/resources/ticketing/types/field_format_enum.py index 2f6eda2f..26052239 100644 --- a/src/merge/resources/ticketing/types/field_format_enum.py +++ b/src/merge/resources/ticketing/types/field_format_enum.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ....core import enum + T_Result = typing.TypeVar("T_Result") -class FieldFormatEnum(str, enum.Enum): +class FieldFormatEnum(enum.StrEnum): """ * `string` - string * `number` - number diff --git a/src/merge/resources/ticketing/types/field_mapping_api_instance_remote_field.py b/src/merge/resources/ticketing/types/field_mapping_api_instance_remote_field.py index 578a2b10..ccd1f990 100644 --- a/src/merge/resources/ticketing/types/field_mapping_api_instance_remote_field.py +++ b/src/merge/resources/ticketing/types/field_mapping_api_instance_remote_field.py @@ -3,7 +3,9 @@ import typing import pydantic +import typing_extensions from ....core.pydantic_utilities import IS_PYDANTIC_V2 +from ....core.serialization import FieldMetadata from ....core.unchecked_base_model import UncheckedBaseModel from .field_mapping_api_instance_remote_field_remote_endpoint_info import ( FieldMappingApiInstanceRemoteFieldRemoteEndpointInfo, @@ -12,9 +14,9 @@ class FieldMappingApiInstanceRemoteField(UncheckedBaseModel): remote_key_name: typing.Optional[str] = None - schema_: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = pydantic.Field( - alias="schema", default=None - ) + schema_: typing_extensions.Annotated[ + typing.Optional[typing.Dict[str, typing.Any]], FieldMetadata(alias="schema"), pydantic.Field(alias="schema") + ] = None remote_endpoint_info: FieldMappingApiInstanceRemoteFieldRemoteEndpointInfo if IS_PYDANTIC_V2: diff --git a/src/merge/resources/ticketing/types/field_mapping_api_instance_response.py b/src/merge/resources/ticketing/types/field_mapping_api_instance_response.py index 08b85996..62a33658 100644 --- a/src/merge/resources/ticketing/types/field_mapping_api_instance_response.py +++ b/src/merge/resources/ticketing/types/field_mapping_api_instance_response.py @@ -3,23 +3,61 @@ import typing import pydantic +import typing_extensions from ....core.pydantic_utilities import IS_PYDANTIC_V2 +from ....core.serialization import FieldMetadata from ....core.unchecked_base_model import UncheckedBaseModel from .field_mapping_api_instance import FieldMappingApiInstance class FieldMappingApiInstanceResponse(UncheckedBaseModel): - ticket: typing.Optional[typing.List[FieldMappingApiInstance]] = pydantic.Field(alias="Ticket", default=None) - comment: typing.Optional[typing.List[FieldMappingApiInstance]] = pydantic.Field(alias="Comment", default=None) - project: typing.Optional[typing.List[FieldMappingApiInstance]] = pydantic.Field(alias="Project", default=None) - collection: typing.Optional[typing.List[FieldMappingApiInstance]] = pydantic.Field(alias="Collection", default=None) - user: typing.Optional[typing.List[FieldMappingApiInstance]] = pydantic.Field(alias="User", default=None) - role: typing.Optional[typing.List[FieldMappingApiInstance]] = pydantic.Field(alias="Role", default=None) - account: typing.Optional[typing.List[FieldMappingApiInstance]] = pydantic.Field(alias="Account", default=None) - team: typing.Optional[typing.List[FieldMappingApiInstance]] = pydantic.Field(alias="Team", default=None) - attachment: typing.Optional[typing.List[FieldMappingApiInstance]] = pydantic.Field(alias="Attachment", default=None) - tag: typing.Optional[typing.List[FieldMappingApiInstance]] = pydantic.Field(alias="Tag", default=None) - contact: typing.Optional[typing.List[FieldMappingApiInstance]] = pydantic.Field(alias="Contact", default=None) + ticket: typing_extensions.Annotated[ + typing.Optional[typing.List[FieldMappingApiInstance]], + FieldMetadata(alias="Ticket"), + pydantic.Field(alias="Ticket"), + ] = None + comment: typing_extensions.Annotated[ + typing.Optional[typing.List[FieldMappingApiInstance]], + FieldMetadata(alias="Comment"), + pydantic.Field(alias="Comment"), + ] = None + project: typing_extensions.Annotated[ + typing.Optional[typing.List[FieldMappingApiInstance]], + FieldMetadata(alias="Project"), + pydantic.Field(alias="Project"), + ] = None + collection: typing_extensions.Annotated[ + typing.Optional[typing.List[FieldMappingApiInstance]], + FieldMetadata(alias="Collection"), + pydantic.Field(alias="Collection"), + ] = None + user: typing_extensions.Annotated[ + typing.Optional[typing.List[FieldMappingApiInstance]], FieldMetadata(alias="User"), pydantic.Field(alias="User") + ] = None + role: typing_extensions.Annotated[ + typing.Optional[typing.List[FieldMappingApiInstance]], FieldMetadata(alias="Role"), pydantic.Field(alias="Role") + ] = None + account: typing_extensions.Annotated[ + typing.Optional[typing.List[FieldMappingApiInstance]], + FieldMetadata(alias="Account"), + pydantic.Field(alias="Account"), + ] = None + team: typing_extensions.Annotated[ + typing.Optional[typing.List[FieldMappingApiInstance]], FieldMetadata(alias="Team"), pydantic.Field(alias="Team") + ] = None + attachment: typing_extensions.Annotated[ + typing.Optional[typing.List[FieldMappingApiInstance]], + FieldMetadata(alias="Attachment"), + pydantic.Field(alias="Attachment"), + ] = None + tag: typing_extensions.Annotated[ + typing.Optional[typing.List[FieldMappingApiInstance]], FieldMetadata(alias="Tag"), pydantic.Field(alias="Tag") + ] = None + contact: typing_extensions.Annotated[ + typing.Optional[typing.List[FieldMappingApiInstance]], + FieldMetadata(alias="Contact"), + pydantic.Field(alias="Contact"), + ] = None if IS_PYDANTIC_V2: model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2 diff --git a/src/merge/resources/ticketing/types/field_permission_deserializer.py b/src/merge/resources/ticketing/types/field_permission_deserializer.py index 1d71ae04..407ed547 100644 --- a/src/merge/resources/ticketing/types/field_permission_deserializer.py +++ b/src/merge/resources/ticketing/types/field_permission_deserializer.py @@ -8,8 +8,8 @@ class FieldPermissionDeserializer(UncheckedBaseModel): - enabled_fields: typing.Optional[typing.List[typing.Optional[typing.Any]]] = None - disabled_fields: typing.Optional[typing.List[typing.Optional[typing.Any]]] = None + enabled_fields: typing.Optional[typing.List[typing.Any]] = None + disabled_fields: typing.Optional[typing.List[typing.Any]] = None if IS_PYDANTIC_V2: model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2 diff --git a/src/merge/resources/ticketing/types/field_permission_deserializer_request.py b/src/merge/resources/ticketing/types/field_permission_deserializer_request.py index a4113b46..6680c7d2 100644 --- a/src/merge/resources/ticketing/types/field_permission_deserializer_request.py +++ b/src/merge/resources/ticketing/types/field_permission_deserializer_request.py @@ -8,8 +8,8 @@ class FieldPermissionDeserializerRequest(UncheckedBaseModel): - enabled_fields: typing.Optional[typing.List[typing.Optional[typing.Any]]] = None - disabled_fields: typing.Optional[typing.List[typing.Optional[typing.Any]]] = None + enabled_fields: typing.Optional[typing.List[typing.Any]] = None + disabled_fields: typing.Optional[typing.List[typing.Any]] = None if IS_PYDANTIC_V2: model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2 diff --git a/src/merge/resources/ticketing/types/field_type_enum.py b/src/merge/resources/ticketing/types/field_type_enum.py index b99c1309..d3635f4b 100644 --- a/src/merge/resources/ticketing/types/field_type_enum.py +++ b/src/merge/resources/ticketing/types/field_type_enum.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ....core import enum + T_Result = typing.TypeVar("T_Result") -class FieldTypeEnum(str, enum.Enum): +class FieldTypeEnum(enum.StrEnum): """ * `string` - string * `number` - number diff --git a/src/merge/resources/ticketing/types/issue.py b/src/merge/resources/ticketing/types/issue.py index df31be95..5d37505d 100644 --- a/src/merge/resources/ticketing/types/issue.py +++ b/src/merge/resources/ticketing/types/issue.py @@ -20,7 +20,7 @@ class Issue(UncheckedBaseModel): """ error_description: str - end_user: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None + end_user: typing.Optional[typing.Dict[str, typing.Any]] = None first_incident_time: typing.Optional[dt.datetime] = None last_incident_time: typing.Optional[dt.datetime] = None is_muted: typing.Optional[bool] = None diff --git a/src/merge/resources/ticketing/types/issue_status_enum.py b/src/merge/resources/ticketing/types/issue_status_enum.py index 57eb9618..30d126bb 100644 --- a/src/merge/resources/ticketing/types/issue_status_enum.py +++ b/src/merge/resources/ticketing/types/issue_status_enum.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ....core import enum + T_Result = typing.TypeVar("T_Result") -class IssueStatusEnum(str, enum.Enum): +class IssueStatusEnum(enum.StrEnum): """ * `ONGOING` - ONGOING * `RESOLVED` - RESOLVED diff --git a/src/merge/resources/ticketing/types/item_format_enum.py b/src/merge/resources/ticketing/types/item_format_enum.py index 6fef7236..6e1e81ce 100644 --- a/src/merge/resources/ticketing/types/item_format_enum.py +++ b/src/merge/resources/ticketing/types/item_format_enum.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ....core import enum + T_Result = typing.TypeVar("T_Result") -class ItemFormatEnum(str, enum.Enum): +class ItemFormatEnum(enum.StrEnum): """ * `string` - uuid * `number` - url diff --git a/src/merge/resources/ticketing/types/item_type_enum.py b/src/merge/resources/ticketing/types/item_type_enum.py index afcc4dd6..f92370d0 100644 --- a/src/merge/resources/ticketing/types/item_type_enum.py +++ b/src/merge/resources/ticketing/types/item_type_enum.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ....core import enum + T_Result = typing.TypeVar("T_Result") -class ItemTypeEnum(str, enum.Enum): +class ItemTypeEnum(enum.StrEnum): """ * `string` - string * `number` - number diff --git a/src/merge/resources/ticketing/types/language_enum.py b/src/merge/resources/ticketing/types/language_enum.py index 44b693f2..3ff1e9da 100644 --- a/src/merge/resources/ticketing/types/language_enum.py +++ b/src/merge/resources/ticketing/types/language_enum.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ....core import enum + T_Result = typing.TypeVar("T_Result") -class LanguageEnum(str, enum.Enum): +class LanguageEnum(enum.StrEnum): """ * `en` - en * `de` - de diff --git a/src/merge/resources/ticketing/types/last_sync_result_enum.py b/src/merge/resources/ticketing/types/last_sync_result_enum.py index ec777ee6..f82505a1 100644 --- a/src/merge/resources/ticketing/types/last_sync_result_enum.py +++ b/src/merge/resources/ticketing/types/last_sync_result_enum.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ....core import enum + T_Result = typing.TypeVar("T_Result") -class LastSyncResultEnum(str, enum.Enum): +class LastSyncResultEnum(enum.StrEnum): """ * `SYNCING` - SYNCING * `DONE` - DONE diff --git a/src/merge/resources/ticketing/types/meta_response.py b/src/merge/resources/ticketing/types/meta_response.py index caa2c831..0da37619 100644 --- a/src/merge/resources/ticketing/types/meta_response.py +++ b/src/merge/resources/ticketing/types/meta_response.py @@ -9,8 +9,8 @@ class MetaResponse(UncheckedBaseModel): - request_schema: typing.Dict[str, typing.Optional[typing.Any]] - remote_field_classes: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None + request_schema: typing.Dict[str, typing.Any] + remote_field_classes: typing.Optional[typing.Dict[str, typing.Any]] = None status: typing.Optional[LinkedAccountStatus] = None has_conditional_params: bool has_required_linked_account_params: bool diff --git a/src/merge/resources/ticketing/types/method_enum.py b/src/merge/resources/ticketing/types/method_enum.py index 57bcde10..4c8376dd 100644 --- a/src/merge/resources/ticketing/types/method_enum.py +++ b/src/merge/resources/ticketing/types/method_enum.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ....core import enum + T_Result = typing.TypeVar("T_Result") -class MethodEnum(str, enum.Enum): +class MethodEnum(enum.StrEnum): """ * `GET` - GET * `OPTIONS` - OPTIONS diff --git a/src/merge/resources/ticketing/types/paginated_attachment_list.py b/src/merge/resources/ticketing/types/paginated_attachment_list.py index e5f0a2cf..0c012799 100644 --- a/src/merge/resources/ticketing/types/paginated_attachment_list.py +++ b/src/merge/resources/ticketing/types/paginated_attachment_list.py @@ -24,8 +24,17 @@ class Config: extra = pydantic.Extra.allow -from .attachment import Attachment # noqa: E402, F401, I001 -from .collection import Collection # noqa: E402, F401, I001 -from .ticket import Ticket # noqa: E402, F401, I001 - -update_forward_refs(PaginatedAttachmentList) +from .attachment import Attachment # noqa: E402, I001 +from .attachment_ticket import AttachmentTicket # noqa: E402, I001 +from .ticket import Ticket # noqa: E402, I001 +from .ticket_attachments_item import TicketAttachmentsItem # noqa: E402, I001 +from .ticket_parent_ticket import TicketParentTicket # noqa: E402, I001 + +update_forward_refs( + PaginatedAttachmentList, + Attachment=Attachment, + AttachmentTicket=AttachmentTicket, + Ticket=Ticket, + TicketAttachmentsItem=TicketAttachmentsItem, + TicketParentTicket=TicketParentTicket, +) diff --git a/src/merge/resources/ticketing/types/paginated_collection_list.py b/src/merge/resources/ticketing/types/paginated_collection_list.py index ef8d33e3..a31e965a 100644 --- a/src/merge/resources/ticketing/types/paginated_collection_list.py +++ b/src/merge/resources/ticketing/types/paginated_collection_list.py @@ -24,6 +24,9 @@ class Config: extra = pydantic.Extra.allow -from .collection import Collection # noqa: E402, F401, I001 +from .collection import Collection # noqa: E402, I001 +from .collection_parent_collection import CollectionParentCollection # noqa: E402, I001 -update_forward_refs(PaginatedCollectionList) +update_forward_refs( + PaginatedCollectionList, Collection=Collection, CollectionParentCollection=CollectionParentCollection +) diff --git a/src/merge/resources/ticketing/types/paginated_comment_list.py b/src/merge/resources/ticketing/types/paginated_comment_list.py index 08c8a4f8..b034fe2f 100644 --- a/src/merge/resources/ticketing/types/paginated_comment_list.py +++ b/src/merge/resources/ticketing/types/paginated_comment_list.py @@ -25,8 +25,4 @@ class Config: extra = pydantic.Extra.allow -from .attachment import Attachment # noqa: E402, F401, I001 -from .collection import Collection # noqa: E402, F401, I001 -from .ticket import Ticket # noqa: E402, F401, I001 - update_forward_refs(PaginatedCommentList) diff --git a/src/merge/resources/ticketing/types/paginated_ticket_list.py b/src/merge/resources/ticketing/types/paginated_ticket_list.py index 6c4128a0..4a4b67ae 100644 --- a/src/merge/resources/ticketing/types/paginated_ticket_list.py +++ b/src/merge/resources/ticketing/types/paginated_ticket_list.py @@ -24,8 +24,17 @@ class Config: extra = pydantic.Extra.allow -from .attachment import Attachment # noqa: E402, F401, I001 -from .collection import Collection # noqa: E402, F401, I001 -from .ticket import Ticket # noqa: E402, F401, I001 - -update_forward_refs(PaginatedTicketList) +from .attachment import Attachment # noqa: E402, I001 +from .attachment_ticket import AttachmentTicket # noqa: E402, I001 +from .ticket import Ticket # noqa: E402, I001 +from .ticket_attachments_item import TicketAttachmentsItem # noqa: E402, I001 +from .ticket_parent_ticket import TicketParentTicket # noqa: E402, I001 + +update_forward_refs( + PaginatedTicketList, + Attachment=Attachment, + AttachmentTicket=AttachmentTicket, + Ticket=Ticket, + TicketAttachmentsItem=TicketAttachmentsItem, + TicketParentTicket=TicketParentTicket, +) diff --git a/src/merge/resources/ticketing/types/patched_ticket_request.py b/src/merge/resources/ticketing/types/patched_ticket_request.py index 8d538874..036d79df 100644 --- a/src/merge/resources/ticketing/types/patched_ticket_request.py +++ b/src/merge/resources/ticketing/types/patched_ticket_request.py @@ -127,8 +127,8 @@ class PatchedTicketRequest(UncheckedBaseModel): * `LOW` - LOW """ - integration_params: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None - linked_account_params: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None + integration_params: typing.Optional[typing.Dict[str, typing.Any]] = None + linked_account_params: typing.Optional[typing.Dict[str, typing.Any]] = None remote_fields: typing.Optional[typing.List[RemoteFieldRequest]] = None if IS_PYDANTIC_V2: @@ -141,8 +141,4 @@ class Config: extra = pydantic.Extra.allow -from .collection import Collection # noqa: E402, F401, I001 -from .attachment import Attachment # noqa: E402, F401, I001 -from .ticket import Ticket # noqa: E402, F401, I001 - update_forward_refs(PatchedTicketRequest) diff --git a/src/merge/resources/ticketing/types/permission.py b/src/merge/resources/ticketing/types/permission.py index bb45eeff..1d3995d0 100644 --- a/src/merge/resources/ticketing/types/permission.py +++ b/src/merge/resources/ticketing/types/permission.py @@ -59,7 +59,7 @@ class Permission(UncheckedBaseModel): Indicates whether or not this object has been deleted in the third party platform. Full coverage deletion detection is a premium add-on. Native deletion detection is offered for free with limited coverage. [Learn more](https://docs.merge.dev/integrations/hris/supported-features/). """ - field_mappings: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None + field_mappings: typing.Optional[typing.Dict[str, typing.Any]] = None if IS_PYDANTIC_V2: model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2 diff --git a/src/merge/resources/ticketing/types/permission_request.py b/src/merge/resources/ticketing/types/permission_request.py index 4d4252b2..7c64852f 100644 --- a/src/merge/resources/ticketing/types/permission_request.py +++ b/src/merge/resources/ticketing/types/permission_request.py @@ -42,8 +42,8 @@ class PermissionRequest(UncheckedBaseModel): applied_to_roles: typing.Optional[typing.List[typing.Optional[str]]] = None applied_to_teams: typing.Optional[typing.List[typing.Optional[str]]] = None applied_to_collections: typing.Optional[typing.List[typing.Optional[str]]] = None - integration_params: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None - linked_account_params: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None + integration_params: typing.Optional[typing.Dict[str, typing.Any]] = None + linked_account_params: typing.Optional[typing.Dict[str, typing.Any]] = None if IS_PYDANTIC_V2: model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2 diff --git a/src/merge/resources/ticketing/types/priority_enum.py b/src/merge/resources/ticketing/types/priority_enum.py index 73a079d4..ecdcc5df 100644 --- a/src/merge/resources/ticketing/types/priority_enum.py +++ b/src/merge/resources/ticketing/types/priority_enum.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ....core import enum + T_Result = typing.TypeVar("T_Result") -class PriorityEnum(str, enum.Enum): +class PriorityEnum(enum.StrEnum): """ * `URGENT` - URGENT * `HIGH` - HIGH diff --git a/src/merge/resources/ticketing/types/project.py b/src/merge/resources/ticketing/types/project.py index 51ce64c5..9ed72da7 100644 --- a/src/merge/resources/ticketing/types/project.py +++ b/src/merge/resources/ticketing/types/project.py @@ -50,7 +50,7 @@ class Project(UncheckedBaseModel): Indicates whether or not this object has been deleted in the third party platform. Full coverage deletion detection is a premium add-on. Native deletion detection is offered for free with limited coverage. [Learn more](https://docs.merge.dev/integrations/hris/supported-features/). """ - field_mappings: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None + field_mappings: typing.Optional[typing.Dict[str, typing.Any]] = None remote_data: typing.Optional[typing.List[RemoteData]] = None if IS_PYDANTIC_V2: diff --git a/src/merge/resources/ticketing/types/remote_data.py b/src/merge/resources/ticketing/types/remote_data.py index f34bec80..2026f05a 100644 --- a/src/merge/resources/ticketing/types/remote_data.py +++ b/src/merge/resources/ticketing/types/remote_data.py @@ -22,7 +22,7 @@ class RemoteData(UncheckedBaseModel): The third-party API path that is being called. """ - data: typing.Optional[typing.Optional[typing.Any]] = pydantic.Field(default=None) + data: typing.Optional[typing.Any] = pydantic.Field(default=None) """ The data returned from the third-party for this object in its original, unnormalized format. """ diff --git a/src/merge/resources/ticketing/types/remote_endpoint_info.py b/src/merge/resources/ticketing/types/remote_endpoint_info.py index 07ceff6a..ffa70b94 100644 --- a/src/merge/resources/ticketing/types/remote_endpoint_info.py +++ b/src/merge/resources/ticketing/types/remote_endpoint_info.py @@ -10,7 +10,7 @@ class RemoteEndpointInfo(UncheckedBaseModel): method: str url_path: str - field_traversal_path: typing.List[typing.Optional[typing.Any]] + field_traversal_path: typing.List[typing.Any] if IS_PYDANTIC_V2: model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2 diff --git a/src/merge/resources/ticketing/types/remote_field.py b/src/merge/resources/ticketing/types/remote_field.py index 1a9272f0..556c69ef 100644 --- a/src/merge/resources/ticketing/types/remote_field.py +++ b/src/merge/resources/ticketing/types/remote_field.py @@ -10,7 +10,7 @@ class RemoteField(UncheckedBaseModel): remote_field_class: RemoteFieldRemoteFieldClass - value: typing.Optional[typing.Optional[typing.Any]] = None + value: typing.Optional[typing.Any] = None if IS_PYDANTIC_V2: model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2 diff --git a/src/merge/resources/ticketing/types/remote_field_api.py b/src/merge/resources/ticketing/types/remote_field_api.py index 4c66a23b..79cf45c4 100644 --- a/src/merge/resources/ticketing/types/remote_field_api.py +++ b/src/merge/resources/ticketing/types/remote_field_api.py @@ -3,7 +3,9 @@ import typing import pydantic +import typing_extensions from ....core.pydantic_utilities import IS_PYDANTIC_V2 +from ....core.serialization import FieldMetadata from ....core.unchecked_base_model import UncheckedBaseModel from .advanced_metadata import AdvancedMetadata from .remote_endpoint_info import RemoteEndpointInfo @@ -11,10 +13,12 @@ class RemoteFieldApi(UncheckedBaseModel): - schema_: typing.Dict[str, typing.Optional[typing.Any]] = pydantic.Field(alias="schema") + schema_: typing_extensions.Annotated[ + typing.Dict[str, typing.Any], FieldMetadata(alias="schema"), pydantic.Field(alias="schema") + ] remote_key_name: str remote_endpoint_info: RemoteEndpointInfo - example_values: typing.Optional[typing.List[typing.Optional[typing.Any]]] = None + example_values: typing.Optional[typing.List[typing.Any]] = None advanced_metadata: typing.Optional[AdvancedMetadata] = None coverage: typing.Optional[RemoteFieldApiCoverage] = None diff --git a/src/merge/resources/ticketing/types/remote_field_api_response.py b/src/merge/resources/ticketing/types/remote_field_api_response.py index e844cd77..c493c279 100644 --- a/src/merge/resources/ticketing/types/remote_field_api_response.py +++ b/src/merge/resources/ticketing/types/remote_field_api_response.py @@ -3,23 +3,51 @@ import typing import pydantic +import typing_extensions from ....core.pydantic_utilities import IS_PYDANTIC_V2 +from ....core.serialization import FieldMetadata from ....core.unchecked_base_model import UncheckedBaseModel from .remote_field_api import RemoteFieldApi class RemoteFieldApiResponse(UncheckedBaseModel): - ticket: typing.Optional[typing.List[RemoteFieldApi]] = pydantic.Field(alias="Ticket", default=None) - comment: typing.Optional[typing.List[RemoteFieldApi]] = pydantic.Field(alias="Comment", default=None) - project: typing.Optional[typing.List[RemoteFieldApi]] = pydantic.Field(alias="Project", default=None) - collection: typing.Optional[typing.List[RemoteFieldApi]] = pydantic.Field(alias="Collection", default=None) - user: typing.Optional[typing.List[RemoteFieldApi]] = pydantic.Field(alias="User", default=None) - role: typing.Optional[typing.List[RemoteFieldApi]] = pydantic.Field(alias="Role", default=None) - account: typing.Optional[typing.List[RemoteFieldApi]] = pydantic.Field(alias="Account", default=None) - team: typing.Optional[typing.List[RemoteFieldApi]] = pydantic.Field(alias="Team", default=None) - attachment: typing.Optional[typing.List[RemoteFieldApi]] = pydantic.Field(alias="Attachment", default=None) - tag: typing.Optional[typing.List[RemoteFieldApi]] = pydantic.Field(alias="Tag", default=None) - contact: typing.Optional[typing.List[RemoteFieldApi]] = pydantic.Field(alias="Contact", default=None) + ticket: typing_extensions.Annotated[ + typing.Optional[typing.List[RemoteFieldApi]], FieldMetadata(alias="Ticket"), pydantic.Field(alias="Ticket") + ] = None + comment: typing_extensions.Annotated[ + typing.Optional[typing.List[RemoteFieldApi]], FieldMetadata(alias="Comment"), pydantic.Field(alias="Comment") + ] = None + project: typing_extensions.Annotated[ + typing.Optional[typing.List[RemoteFieldApi]], FieldMetadata(alias="Project"), pydantic.Field(alias="Project") + ] = None + collection: typing_extensions.Annotated[ + typing.Optional[typing.List[RemoteFieldApi]], + FieldMetadata(alias="Collection"), + pydantic.Field(alias="Collection"), + ] = None + user: typing_extensions.Annotated[ + typing.Optional[typing.List[RemoteFieldApi]], FieldMetadata(alias="User"), pydantic.Field(alias="User") + ] = None + role: typing_extensions.Annotated[ + typing.Optional[typing.List[RemoteFieldApi]], FieldMetadata(alias="Role"), pydantic.Field(alias="Role") + ] = None + account: typing_extensions.Annotated[ + typing.Optional[typing.List[RemoteFieldApi]], FieldMetadata(alias="Account"), pydantic.Field(alias="Account") + ] = None + team: typing_extensions.Annotated[ + typing.Optional[typing.List[RemoteFieldApi]], FieldMetadata(alias="Team"), pydantic.Field(alias="Team") + ] = None + attachment: typing_extensions.Annotated[ + typing.Optional[typing.List[RemoteFieldApi]], + FieldMetadata(alias="Attachment"), + pydantic.Field(alias="Attachment"), + ] = None + tag: typing_extensions.Annotated[ + typing.Optional[typing.List[RemoteFieldApi]], FieldMetadata(alias="Tag"), pydantic.Field(alias="Tag") + ] = None + contact: typing_extensions.Annotated[ + typing.Optional[typing.List[RemoteFieldApi]], FieldMetadata(alias="Contact"), pydantic.Field(alias="Contact") + ] = None if IS_PYDANTIC_V2: model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2 diff --git a/src/merge/resources/ticketing/types/remote_field_class_field_choices_item.py b/src/merge/resources/ticketing/types/remote_field_class_field_choices_item.py index 9003f782..0b1a5faa 100644 --- a/src/merge/resources/ticketing/types/remote_field_class_field_choices_item.py +++ b/src/merge/resources/ticketing/types/remote_field_class_field_choices_item.py @@ -8,7 +8,7 @@ class RemoteFieldClassFieldChoicesItem(UncheckedBaseModel): - value: typing.Optional[typing.Optional[typing.Any]] = None + value: typing.Optional[typing.Any] = None display_name: typing.Optional[str] = None if IS_PYDANTIC_V2: diff --git a/src/merge/resources/ticketing/types/remote_field_request.py b/src/merge/resources/ticketing/types/remote_field_request.py index 69bc39da..e3c6e0fc 100644 --- a/src/merge/resources/ticketing/types/remote_field_request.py +++ b/src/merge/resources/ticketing/types/remote_field_request.py @@ -10,7 +10,7 @@ class RemoteFieldRequest(UncheckedBaseModel): remote_field_class: RemoteFieldRequestRemoteFieldClass - value: typing.Optional[typing.Optional[typing.Any]] = None + value: typing.Optional[typing.Any] = None if IS_PYDANTIC_V2: model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2 diff --git a/src/merge/resources/ticketing/types/remote_response.py b/src/merge/resources/ticketing/types/remote_response.py index af181fc0..2804a254 100644 --- a/src/merge/resources/ticketing/types/remote_response.py +++ b/src/merge/resources/ticketing/types/remote_response.py @@ -21,10 +21,10 @@ class RemoteResponse(UncheckedBaseModel): method: str path: str status: int - response: typing.Optional[typing.Any] = None - response_headers: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None + response: typing.Any + response_headers: typing.Optional[typing.Dict[str, typing.Any]] = None response_type: typing.Optional[ResponseTypeEnum] = None - headers: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None + headers: typing.Optional[typing.Dict[str, typing.Any]] = None if IS_PYDANTIC_V2: model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2 diff --git a/src/merge/resources/ticketing/types/request_format_enum.py b/src/merge/resources/ticketing/types/request_format_enum.py index 21c272f2..b8e2234c 100644 --- a/src/merge/resources/ticketing/types/request_format_enum.py +++ b/src/merge/resources/ticketing/types/request_format_enum.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ....core import enum + T_Result = typing.TypeVar("T_Result") -class RequestFormatEnum(str, enum.Enum): +class RequestFormatEnum(enum.StrEnum): """ * `JSON` - JSON * `XML` - XML diff --git a/src/merge/resources/ticketing/types/response_type_enum.py b/src/merge/resources/ticketing/types/response_type_enum.py index ef241302..8a72c2a9 100644 --- a/src/merge/resources/ticketing/types/response_type_enum.py +++ b/src/merge/resources/ticketing/types/response_type_enum.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ....core import enum + T_Result = typing.TypeVar("T_Result") -class ResponseTypeEnum(str, enum.Enum): +class ResponseTypeEnum(enum.StrEnum): """ * `JSON` - JSON * `BASE64_GZIP` - BASE64_GZIP diff --git a/src/merge/resources/ticketing/types/role.py b/src/merge/resources/ticketing/types/role.py index 8d4109ff..f718f9ed 100644 --- a/src/merge/resources/ticketing/types/role.py +++ b/src/merge/resources/ticketing/types/role.py @@ -61,7 +61,7 @@ class Role(UncheckedBaseModel): Indicates whether or not this object has been deleted in the third party platform. Full coverage deletion detection is a premium add-on. Native deletion detection is offered for free with limited coverage. [Learn more](https://docs.merge.dev/integrations/hris/supported-features/). """ - field_mappings: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None + field_mappings: typing.Optional[typing.Dict[str, typing.Any]] = None remote_data: typing.Optional[typing.List[RemoteData]] = None if IS_PYDANTIC_V2: diff --git a/src/merge/resources/ticketing/types/role_enum.py b/src/merge/resources/ticketing/types/role_enum.py index 8f2c9b1d..394ec992 100644 --- a/src/merge/resources/ticketing/types/role_enum.py +++ b/src/merge/resources/ticketing/types/role_enum.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ....core import enum + T_Result = typing.TypeVar("T_Result") -class RoleEnum(str, enum.Enum): +class RoleEnum(enum.StrEnum): """ * `ADMIN` - ADMIN * `DEVELOPER` - DEVELOPER diff --git a/src/merge/resources/ticketing/types/selective_sync_configurations_usage_enum.py b/src/merge/resources/ticketing/types/selective_sync_configurations_usage_enum.py index 9ff43813..e8e318c0 100644 --- a/src/merge/resources/ticketing/types/selective_sync_configurations_usage_enum.py +++ b/src/merge/resources/ticketing/types/selective_sync_configurations_usage_enum.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ....core import enum + T_Result = typing.TypeVar("T_Result") -class SelectiveSyncConfigurationsUsageEnum(str, enum.Enum): +class SelectiveSyncConfigurationsUsageEnum(enum.StrEnum): """ * `IN_NEXT_SYNC` - IN_NEXT_SYNC * `IN_LAST_SYNC` - IN_LAST_SYNC diff --git a/src/merge/resources/ticketing/types/status_fd_5_enum.py b/src/merge/resources/ticketing/types/status_fd_5_enum.py index d753f77c..6b851a79 100644 --- a/src/merge/resources/ticketing/types/status_fd_5_enum.py +++ b/src/merge/resources/ticketing/types/status_fd_5_enum.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ....core import enum + T_Result = typing.TypeVar("T_Result") -class StatusFd5Enum(str, enum.Enum): +class StatusFd5Enum(enum.StrEnum): """ * `SYNCING` - SYNCING * `DONE` - DONE diff --git a/src/merge/resources/ticketing/types/tag.py b/src/merge/resources/ticketing/types/tag.py index c5f85543..25a95613 100644 --- a/src/merge/resources/ticketing/types/tag.py +++ b/src/merge/resources/ticketing/types/tag.py @@ -45,7 +45,7 @@ class Tag(UncheckedBaseModel): Indicates whether or not this object has been deleted in the third party platform. Full coverage deletion detection is a premium add-on. Native deletion detection is offered for free with limited coverage. [Learn more](https://docs.merge.dev/integrations/hris/supported-features/). """ - field_mappings: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None + field_mappings: typing.Optional[typing.Dict[str, typing.Any]] = None remote_data: typing.Optional[typing.List[RemoteData]] = None if IS_PYDANTIC_V2: diff --git a/src/merge/resources/ticketing/types/team.py b/src/merge/resources/ticketing/types/team.py index 0cd15521..3ebbaab0 100644 --- a/src/merge/resources/ticketing/types/team.py +++ b/src/merge/resources/ticketing/types/team.py @@ -50,7 +50,7 @@ class Team(UncheckedBaseModel): Indicates whether or not this object has been deleted in the third party platform. Full coverage deletion detection is a premium add-on. Native deletion detection is offered for free with limited coverage. [Learn more](https://docs.merge.dev/integrations/hris/supported-features/). """ - field_mappings: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None + field_mappings: typing.Optional[typing.Dict[str, typing.Any]] = None remote_data: typing.Optional[typing.List[RemoteData]] = None if IS_PYDANTIC_V2: diff --git a/src/merge/resources/ticketing/types/ticket.py b/src/merge/resources/ticketing/types/ticket.py index c44fefb3..2ff957a2 100644 --- a/src/merge/resources/ticketing/types/ticket.py +++ b/src/merge/resources/ticketing/types/ticket.py @@ -163,7 +163,7 @@ class Ticket(UncheckedBaseModel): Indicates whether or not this object has been deleted in the third party platform. Full coverage deletion detection is a premium add-on. Native deletion detection is offered for free with limited coverage. [Learn more](https://docs.merge.dev/integrations/hris/supported-features/). """ - field_mappings: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None + field_mappings: typing.Optional[typing.Dict[str, typing.Any]] = None remote_data: typing.Optional[typing.List[RemoteData]] = None remote_fields: typing.Optional[typing.List[RemoteField]] = None @@ -177,9 +177,15 @@ class Config: extra = pydantic.Extra.allow -from .collection import Collection # noqa: E402, F401, I001 -from .attachment import Attachment # noqa: E402, F401, I001 -from .ticket_parent_ticket import TicketParentTicket # noqa: E402, F401, I001 -from .ticket_attachments_item import TicketAttachmentsItem # noqa: E402, F401, I001 +from .attachment import Attachment # noqa: E402, I001 +from .attachment_ticket import AttachmentTicket # noqa: E402, I001 +from .ticket_attachments_item import TicketAttachmentsItem # noqa: E402, I001 +from .ticket_parent_ticket import TicketParentTicket # noqa: E402, I001 -update_forward_refs(Ticket) +update_forward_refs( + Ticket, + Attachment=Attachment, + AttachmentTicket=AttachmentTicket, + TicketAttachmentsItem=TicketAttachmentsItem, + TicketParentTicket=TicketParentTicket, +) diff --git a/src/merge/resources/ticketing/types/ticket_access_enum.py b/src/merge/resources/ticketing/types/ticket_access_enum.py index 860f2f52..b3912d4b 100644 --- a/src/merge/resources/ticketing/types/ticket_access_enum.py +++ b/src/merge/resources/ticketing/types/ticket_access_enum.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ....core import enum + T_Result = typing.TypeVar("T_Result") -class TicketAccessEnum(str, enum.Enum): +class TicketAccessEnum(enum.StrEnum): """ * `ALL` - ALL * `ASSIGNED_ONLY` - ASSIGNED_ONLY diff --git a/src/merge/resources/ticketing/types/ticket_access_level_enum.py b/src/merge/resources/ticketing/types/ticket_access_level_enum.py index c02bef7d..81298afa 100644 --- a/src/merge/resources/ticketing/types/ticket_access_level_enum.py +++ b/src/merge/resources/ticketing/types/ticket_access_level_enum.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ....core import enum + T_Result = typing.TypeVar("T_Result") -class TicketAccessLevelEnum(str, enum.Enum): +class TicketAccessLevelEnum(enum.StrEnum): """ * `COMPANY` - COMPANY * `PUBLIC` - PUBLIC diff --git a/src/merge/resources/ticketing/types/ticket_actions_enum.py b/src/merge/resources/ticketing/types/ticket_actions_enum.py index 03e873d8..a2751080 100644 --- a/src/merge/resources/ticketing/types/ticket_actions_enum.py +++ b/src/merge/resources/ticketing/types/ticket_actions_enum.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ....core import enum + T_Result = typing.TypeVar("T_Result") -class TicketActionsEnum(str, enum.Enum): +class TicketActionsEnum(enum.StrEnum): """ * `VIEW` - VIEW * `CREATE` - CREATE diff --git a/src/merge/resources/ticketing/types/ticket_request.py b/src/merge/resources/ticketing/types/ticket_request.py index ed0e1ec4..8b32159b 100644 --- a/src/merge/resources/ticketing/types/ticket_request.py +++ b/src/merge/resources/ticketing/types/ticket_request.py @@ -133,8 +133,8 @@ class TicketRequest(UncheckedBaseModel): * `LOW` - LOW """ - integration_params: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None - linked_account_params: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None + integration_params: typing.Optional[typing.Dict[str, typing.Any]] = None + linked_account_params: typing.Optional[typing.Dict[str, typing.Any]] = None remote_fields: typing.Optional[typing.List[RemoteFieldRequest]] = None if IS_PYDANTIC_V2: @@ -147,8 +147,4 @@ class Config: extra = pydantic.Extra.allow -from .collection import Collection # noqa: E402, F401, I001 -from .attachment import Attachment # noqa: E402, F401, I001 -from .ticket import Ticket # noqa: E402, F401, I001 - update_forward_refs(TicketRequest) diff --git a/src/merge/resources/ticketing/types/ticket_response.py b/src/merge/resources/ticketing/types/ticket_response.py index 1512f825..d3f11816 100644 --- a/src/merge/resources/ticketing/types/ticket_response.py +++ b/src/merge/resources/ticketing/types/ticket_response.py @@ -28,8 +28,17 @@ class Config: extra = pydantic.Extra.allow -from .attachment import Attachment # noqa: E402, F401, I001 -from .collection import Collection # noqa: E402, F401, I001 -from .ticket import Ticket # noqa: E402, F401, I001 - -update_forward_refs(TicketResponse) +from .attachment import Attachment # noqa: E402, I001 +from .attachment_ticket import AttachmentTicket # noqa: E402, I001 +from .ticket import Ticket # noqa: E402, I001 +from .ticket_attachments_item import TicketAttachmentsItem # noqa: E402, I001 +from .ticket_parent_ticket import TicketParentTicket # noqa: E402, I001 + +update_forward_refs( + TicketResponse, + Attachment=Attachment, + AttachmentTicket=AttachmentTicket, + Ticket=Ticket, + TicketAttachmentsItem=TicketAttachmentsItem, + TicketParentTicket=TicketParentTicket, +) diff --git a/src/merge/resources/ticketing/types/ticket_status_enum.py b/src/merge/resources/ticketing/types/ticket_status_enum.py index 55651325..40757a9e 100644 --- a/src/merge/resources/ticketing/types/ticket_status_enum.py +++ b/src/merge/resources/ticketing/types/ticket_status_enum.py @@ -1,12 +1,13 @@ # This file was auto-generated by Fern from our API Definition. -import enum import typing +from ....core import enum + T_Result = typing.TypeVar("T_Result") -class TicketStatusEnum(str, enum.Enum): +class TicketStatusEnum(enum.StrEnum): """ * `OPEN` - OPEN * `CLOSED` - CLOSED diff --git a/src/merge/resources/ticketing/types/ticketing_attachment_response.py b/src/merge/resources/ticketing/types/ticketing_attachment_response.py index 1afad69d..e88c1097 100644 --- a/src/merge/resources/ticketing/types/ticketing_attachment_response.py +++ b/src/merge/resources/ticketing/types/ticketing_attachment_response.py @@ -28,8 +28,17 @@ class Config: extra = pydantic.Extra.allow -from .attachment import Attachment # noqa: E402, F401, I001 -from .collection import Collection # noqa: E402, F401, I001 -from .ticket import Ticket # noqa: E402, F401, I001 - -update_forward_refs(TicketingAttachmentResponse) +from .attachment import Attachment # noqa: E402, I001 +from .attachment_ticket import AttachmentTicket # noqa: E402, I001 +from .ticket import Ticket # noqa: E402, I001 +from .ticket_attachments_item import TicketAttachmentsItem # noqa: E402, I001 +from .ticket_parent_ticket import TicketParentTicket # noqa: E402, I001 + +update_forward_refs( + TicketingAttachmentResponse, + Attachment=Attachment, + AttachmentTicket=AttachmentTicket, + Ticket=Ticket, + TicketAttachmentsItem=TicketAttachmentsItem, + TicketParentTicket=TicketParentTicket, +) diff --git a/src/merge/resources/ticketing/types/user.py b/src/merge/resources/ticketing/types/user.py index b89d230c..336d4011 100644 --- a/src/merge/resources/ticketing/types/user.py +++ b/src/merge/resources/ticketing/types/user.py @@ -65,7 +65,7 @@ class User(UncheckedBaseModel): Indicates whether or not this object has been deleted in the third party platform. Full coverage deletion detection is a premium add-on. Native deletion detection is offered for free with limited coverage. [Learn more](https://docs.merge.dev/integrations/hris/supported-features/). """ - field_mappings: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None + field_mappings: typing.Optional[typing.Dict[str, typing.Any]] = None remote_data: typing.Optional[typing.List[RemoteData]] = None if IS_PYDANTIC_V2: diff --git a/tests/custom/test_parsing_error_unreachable.py b/tests/custom/test_parsing_error_unreachable.py new file mode 100644 index 00000000..6e49e5f5 --- /dev/null +++ b/tests/custom/test_parsing_error_unreachable.py @@ -0,0 +1,76 @@ +import httpx +import pydantic +import pytest + +from merge import Merge +from merge.core import ApiError, ParsingError +from merge.core.http_response import HttpResponse +from merge.core.unchecked_base_model import construct_type +from merge.resources.accounting.types.account import Account +from merge.resources.accounting.types.paginated_account_list import PaginatedAccountList + + +MALFORMED_ACCOUNT = { + "id": 12345, + "name": 999, + "current_balance": "not-a-number", + "created_at": "definitely-not-a-datetime", + "status": {"unexpected": "shape"}, + "company": ["wrong", "container"], + "classification": 3.14, + "totally_unexpected_key": {"nested": [1, 2, 3]}, +} + +MALFORMED_PAGE = { + "next": 42, + "previous": {"not": "a-string"}, + "results": [MALFORMED_ACCOUNT, "a-bare-string-not-an-object", 777], +} + + +def _client_with_response(response: httpx.Response) -> Merge: + def handler(request: httpx.Request) -> httpx.Response: + return response + + httpx_client = httpx.Client(transport=httpx.MockTransport(handler)) + return Merge(account_token="test-token", api_key="test-key", httpx_client=httpx_client) + + +def test_malformed_input_is_genuinely_schema_violating(): + with pytest.raises(pydantic.ValidationError): + Account.model_validate(MALFORMED_ACCOUNT) + + +def test_parsing_error_is_not_in_the_api_error_hierarchy(): + assert not issubclass(ParsingError, ApiError) + assert not issubclass(ApiError, ParsingError) + + +def test_construct_type_does_not_raise_on_malformed_account(): + result = construct_type(type_=Account, object_=MALFORMED_ACCOUNT) + assert isinstance(result, Account) + + +def test_construct_type_does_not_raise_on_malformed_paginated_list(): + result = construct_type(type_=PaginatedAccountList, object_=MALFORMED_PAGE) + assert isinstance(result, PaginatedAccountList) + + +def test_success_path_with_schema_violating_body_never_raises_parsing_error(): + client = _client_with_response(httpx.Response(200, json=MALFORMED_PAGE)) + result = client.accounting.accounts.list() + assert isinstance(result, PaginatedAccountList) + + +def test_raw_success_path_returns_http_response_not_parsing_error(): + client = _client_with_response(httpx.Response(200, json=MALFORMED_PAGE)) + raw = client.accounting.accounts.with_raw_response.list() + assert isinstance(raw, HttpResponse) + + +def test_error_path_raises_api_error_not_parsing_error(): + client = _client_with_response(httpx.Response(400, text="gateway error")) + with pytest.raises(ApiError) as exc_info: + client.accounting.accounts.list() + assert not isinstance(exc_info.value, ParsingError) + assert exc_info.value.status_code == 400 diff --git a/tests/custom/test_pydantic_config_no_deprecation.py b/tests/custom/test_pydantic_config_no_deprecation.py new file mode 100644 index 00000000..d97af000 --- /dev/null +++ b/tests/custom/test_pydantic_config_no_deprecation.py @@ -0,0 +1,60 @@ +import warnings + +import pydantic +import pytest + +from merge.core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel +from merge.core.unchecked_base_model import UncheckedBaseModel +from merge.resources.accounting.types.account import Account +from merge.resources.accounting.types.field_mapping_api_instance_response import ( + FieldMappingApiInstanceResponse, +) + +pytestmark = pytest.mark.skipif(not IS_PYDANTIC_V2, reason="config deprecation only applies on pydantic v2") + +_DEPRECATION_MARKERS = ( + "class-based `config`", + "allow_population_by_field_name", + "smart_union", + "Valid config keys have changed", +) + + +def _pydantic_config_warnings(records): + hits = [] + for r in records: + if not issubclass(r.category, (DeprecationWarning, UserWarning, PendingDeprecationWarning)): + continue + text = str(r.message) + if any(marker in text for marker in _DEPRECATION_MARKERS): + hits.append(text) + return hits + + +def test_defining_a_subclass_emits_no_config_deprecation_warnings(): + with warnings.catch_warnings(record=True) as records: + warnings.simplefilter("always") + + class _Probe(UncheckedBaseModel): + name: str = pydantic.Field(default="", alias="Name") + + _Probe(Name="probe") + + hits = _pydantic_config_warnings(records) + assert hits == [], f"deprecated pydantic config resurfaced (issue #117): {hits}" + + +def test_instantiating_real_models_emits_no_config_deprecation_warnings(): + with warnings.catch_warnings(record=True) as records: + warnings.simplefilter("always") + Account(name="Cash", id="123") + FieldMappingApiInstanceResponse(account=[]) + + hits = _pydantic_config_warnings(records) + assert hits == [], f"deprecated pydantic config resurfaced (issue #117): {hits}" + + +def test_base_model_config_has_no_deprecated_v1_keys(): + config = UniversalBaseModel.model_config + assert "smart_union" not in config + assert "allow_population_by_field_name" not in config diff --git a/tests/utils/test_http_client.py b/tests/utils/test_http_client.py index 10910c68..457fc63b 100644 --- a/tests/utils/test_http_client.py +++ b/tests/utils/test_http_client.py @@ -1,13 +1,57 @@ # This file was auto-generated by Fern from our API Definition. -from merge.core.http_client import get_request_body +from typing import Any, Dict + +import pytest + +from merge.core.http_client import ( + AsyncHttpClient, + HttpClient, + _build_url, + get_request_body, + remove_none_from_dict, +) from merge.core.request_options import RequestOptions +# Stub clients for testing HttpClient and AsyncHttpClient +class _DummySyncClient: + """A minimal stub for httpx.Client that records request arguments.""" + + def __init__(self) -> None: + self.last_request_kwargs: Dict[str, Any] = {} + + def request(self, **kwargs: Any) -> "_DummyResponse": + self.last_request_kwargs = kwargs + return _DummyResponse() + + +class _DummyAsyncClient: + """A minimal stub for httpx.AsyncClient that records request arguments.""" + + def __init__(self) -> None: + self.last_request_kwargs: Dict[str, Any] = {} + + async def request(self, **kwargs: Any) -> "_DummyResponse": + self.last_request_kwargs = kwargs + return _DummyResponse() + + +class _DummyResponse: + """A minimal stub for httpx.Response.""" + + status_code = 200 + headers: Dict[str, str] = {} + + def get_request_options() -> RequestOptions: return {"additional_body_parameters": {"see you": "later"}} +def get_request_options_with_none() -> RequestOptions: + return {"additional_body_parameters": {"see you": "later", "optional": None}} + + def test_get_json_request_body() -> None: json_body, data_body = get_request_body(json={"hello": "world"}, data=None, request_options=None, omit=None) assert json_body == {"hello": "world"} @@ -48,14 +92,209 @@ def test_get_none_request_body() -> None: def test_get_empty_json_request_body() -> None: + """Test that implicit empty bodies (json=None) are collapsed to None.""" unrelated_request_options: RequestOptions = {"max_retries": 3} json_body, data_body = get_request_body(json=None, data=None, request_options=unrelated_request_options, omit=None) assert json_body is None assert data_body is None - json_body_extras, data_body_extras = get_request_body( - json={}, data=None, request_options=unrelated_request_options, omit=None + +def test_explicit_empty_json_body_is_preserved() -> None: + """Test that explicit empty bodies (json={}) are preserved and sent as {}. + + This is important for endpoints where the request body is required but all + fields are optional. The server expects valid JSON ({}) not an empty body. + """ + unrelated_request_options: RequestOptions = {"max_retries": 3} + + # Explicit json={} should be preserved + json_body, data_body = get_request_body(json={}, data=None, request_options=unrelated_request_options, omit=None) + assert json_body == {} + assert data_body is None + + # Explicit data={} should also be preserved + json_body2, data_body2 = get_request_body(json=None, data={}, request_options=unrelated_request_options, omit=None) + assert json_body2 is None + assert data_body2 == {} + + +def test_json_body_preserves_none_values() -> None: + """Test that JSON bodies preserve None values (they become JSON null).""" + json_body, data_body = get_request_body( + json={"hello": "world", "optional": None}, data=None, request_options=None, omit=None ) + # JSON bodies should preserve None values + assert json_body == {"hello": "world", "optional": None} + assert data_body is None - assert json_body_extras is None - assert data_body_extras is None + +def test_data_body_preserves_none_values_without_multipart() -> None: + """Test that data bodies preserve None values when not using multipart. + + The filtering of None values happens in HttpClient.request/stream methods, + not in get_request_body. This test verifies get_request_body doesn't filter None. + """ + json_body, data_body = get_request_body( + json=None, data={"hello": "world", "optional": None}, request_options=None, omit=None + ) + # get_request_body should preserve None values in data body + # The filtering happens later in HttpClient.request when multipart is detected + assert data_body == {"hello": "world", "optional": None} + assert json_body is None + + +def test_remove_none_from_dict_filters_none_values() -> None: + """Test that remove_none_from_dict correctly filters out None values.""" + original = {"hello": "world", "optional": None, "another": "value", "also_none": None} + filtered = remove_none_from_dict(original) + assert filtered == {"hello": "world", "another": "value"} + # Original should not be modified + assert original == {"hello": "world", "optional": None, "another": "value", "also_none": None} + + +def test_remove_none_from_dict_empty_dict() -> None: + """Test that remove_none_from_dict handles empty dict.""" + assert remove_none_from_dict({}) == {} + + +def test_remove_none_from_dict_all_none() -> None: + """Test that remove_none_from_dict handles dict with all None values.""" + assert remove_none_from_dict({"a": None, "b": None}) == {} + + +def test_http_client_does_not_pass_empty_params_list() -> None: + """Test that HttpClient passes params=None when params are empty. + + This prevents httpx from stripping existing query parameters from the URL, + which happens when params=[] or params={} is passed. + """ + dummy_client = _DummySyncClient() + http_client = HttpClient( + httpx_client=dummy_client, # type: ignore[arg-type] + base_timeout=lambda: None, + base_headers=lambda: {}, + base_url=lambda: "https://example.com", + ) + + # Use a path with query params (e.g., pagination cursor URL) + http_client.request( + path="resource?after=123", + method="GET", + params=None, + request_options=None, + ) + + # We care that httpx receives params=None, not [] or {} + assert "params" in dummy_client.last_request_kwargs + assert dummy_client.last_request_kwargs["params"] is None + + # Verify the query string in the URL is preserved + url = str(dummy_client.last_request_kwargs["url"]) + assert "after=123" in url, f"Expected query param 'after=123' in URL, got: {url}" + + +def test_http_client_passes_encoded_params_when_present() -> None: + """Test that HttpClient passes encoded params when params are provided.""" + dummy_client = _DummySyncClient() + http_client = HttpClient( + httpx_client=dummy_client, # type: ignore[arg-type] + base_timeout=lambda: None, + base_headers=lambda: {}, + base_url=lambda: "https://example.com/resource", + ) + + http_client.request( + path="", + method="GET", + params={"after": "456"}, + request_options=None, + ) + + params = dummy_client.last_request_kwargs["params"] + # For a simple dict, encode_query should give a single (key, value) tuple + assert params == [("after", "456")] + + +@pytest.mark.asyncio +async def test_async_http_client_does_not_pass_empty_params_list() -> None: + """Test that AsyncHttpClient passes params=None when params are empty. + + This prevents httpx from stripping existing query parameters from the URL, + which happens when params=[] or params={} is passed. + """ + dummy_client = _DummyAsyncClient() + http_client = AsyncHttpClient( + httpx_client=dummy_client, # type: ignore[arg-type] + base_timeout=lambda: None, + base_headers=lambda: {}, + base_url=lambda: "https://example.com", + async_base_headers=None, + ) + + # Use a path with query params (e.g., pagination cursor URL) + await http_client.request( + path="resource?after=123", + method="GET", + params=None, + request_options=None, + ) + + # We care that httpx receives params=None, not [] or {} + assert "params" in dummy_client.last_request_kwargs + assert dummy_client.last_request_kwargs["params"] is None + + # Verify the query string in the URL is preserved + url = str(dummy_client.last_request_kwargs["url"]) + assert "after=123" in url, f"Expected query param 'after=123' in URL, got: {url}" + + +@pytest.mark.asyncio +async def test_async_http_client_passes_encoded_params_when_present() -> None: + """Test that AsyncHttpClient passes encoded params when params are provided.""" + dummy_client = _DummyAsyncClient() + http_client = AsyncHttpClient( + httpx_client=dummy_client, # type: ignore[arg-type] + base_timeout=lambda: None, + base_headers=lambda: {}, + base_url=lambda: "https://example.com/resource", + async_base_headers=None, + ) + + await http_client.request( + path="", + method="GET", + params={"after": "456"}, + request_options=None, + ) + + params = dummy_client.last_request_kwargs["params"] + # For a simple dict, encode_query should give a single (key, value) tuple + assert params == [("after", "456")] + + +def test_basic_url_joining() -> None: + """Test basic URL joining with a simple base URL and path.""" + result = _build_url("https://api.example.com", "/users") + assert result == "https://api.example.com/users" + + +def test_basic_url_joining_trailing_slash() -> None: + """Test basic URL joining with a simple base URL and path.""" + result = _build_url("https://api.example.com/", "/users") + assert result == "https://api.example.com/users" + + +def test_preserves_base_url_path_prefix() -> None: + """Test that path prefixes in base URL are preserved. + + This is the critical bug fix - urllib.parse.urljoin() would strip + the path prefix when the path starts with '/'. + """ + result = _build_url("https://cloud.example.com/org/tenant/api", "/users") + assert result == "https://cloud.example.com/org/tenant/api/users" + + +def test_preserves_base_url_path_prefix_trailing_slash() -> None: + """Test that path prefixes in base URL are preserved.""" + result = _build_url("https://cloud.example.com/org/tenant/api/", "/users") + assert result == "https://cloud.example.com/org/tenant/api/users"