diff --git a/.fern/metadata.json b/.fern/metadata.json index 5363cfd..cb84d89 100644 --- a/.fern/metadata.json +++ b/.fern/metadata.json @@ -23,7 +23,7 @@ } ] }, - "originGitCommit": "19cafdf92ab056ef6ba803bf1e352b0422a8ec45", + "originGitCommit": "86a4c45d14847babf70751d87de4da7764ecd894", "originGitCommitIsDirty": false, "invokedBy": "ci", "requestedVersion": "1.3.0", diff --git a/.fern/replay.lock b/.fern/replay.lock index 02e46bf..21e716d 100644 --- a/.fern/replay.lock +++ b/.fern/replay.lock @@ -18,5 +18,11 @@ generations: cli_version: unknown generator_versions: fernapi/fern-python-sdk: 5.14.20 -current_generation: ca6a39b4d1f47f2f893071f497458e78dea9b53a + - commit_sha: ad999e27e746bde5b21fd20be605a20b70595aca + tree_hash: d9caeaa278448e9cec1a53f370e1937f60f6c86b + timestamp: 2026-07-20T11:00:13.025Z + cli_version: unknown + generator_versions: + fernapi/fern-python-sdk: 5.14.20 +current_generation: ad999e27e746bde5b21fd20be605a20b70595aca patches: [] diff --git a/poetry.lock b/poetry.lock index 0eba3e4..88b9ca3 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1,25 +1,26 @@ -# This file is automatically @generated by Poetry 2.3.2 and should not be changed by hand. +# This file is automatically @generated by Poetry 2.4.1 and should not be changed by hand. [[package]] name = "aiohappyeyeballs" version = "2.7.1" description = "Happy Eyeballs for asyncio" -optional = false +optional = true python-versions = ">=3.10" -groups = ["main", "dev"] +groups = ["main"] +markers = "extra == \"aiohttp\"" files = [ {file = "aiohappyeyeballs-2.7.1-py3-none-any.whl", hash = "sha256:9243213661e29250eb41368e5daa826fc017156c3b8a11440826b2e3ed376472"}, {file = "aiohappyeyeballs-2.7.1.tar.gz", hash = "sha256:065665c041c42a5938ed220bdcd7230f22527fbec085e1853d2402c8a3615d9d"}, ] -markers = {main = "extra == \"aiohttp\""} [[package]] name = "aiohttp" version = "3.14.1" description = "Async http client/server framework (asyncio)" -optional = false +optional = true python-versions = ">=3.10" -groups = ["main", "dev"] +groups = ["main"] +markers = "extra == \"aiohttp\"" files = [ {file = "aiohttp-3.14.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:8f6bb621e5863cfe8fe5ff5468002d200ec31f30f1280b259dc505b02595099e"}, {file = "aiohttp-3.14.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:4f7215cb3933784f79ed20e5f050e15984f390424339b22375d5a53c933a0491"}, @@ -141,7 +142,6 @@ files = [ {file = "aiohttp-3.14.1-cp314-cp314t-win_arm64.whl", hash = "sha256:90d53f1609c29ccc2193945ef732428382a28f78d0456ae4d3daf0d48b74f0f6"}, {file = "aiohttp-3.14.1.tar.gz", hash = "sha256:307f2cff90a764d329e77040603fa032db89c5c24fdad50c4c15334cba744035"}, ] -markers = {main = "extra == \"aiohttp\""} [package.dependencies] aiohappyeyeballs = ">=2.5.0" @@ -161,14 +161,14 @@ speedups = ["Brotli (>=1.2) ; platform_python_implementation == \"CPython\" and name = "aiosignal" version = "1.4.0" description = "aiosignal: a list of registered asynchronous callbacks" -optional = false +optional = true python-versions = ">=3.9" -groups = ["main", "dev"] +groups = ["main"] +markers = "extra == \"aiohttp\"" files = [ {file = "aiosignal-1.4.0-py3-none-any.whl", hash = "sha256:053243f8b92b990551949e63930a839ff0cf0b0ebbe0597b0f3fb19e1a0fe82e"}, {file = "aiosignal-1.4.0.tar.gz", hash = "sha256:f47eecd9468083c2029cc99945502cb7708b082c232f9aca65da147157b251c7"}, ] -markers = {main = "extra == \"aiohttp\""} [package.dependencies] frozenlist = ">=1.1.0" @@ -210,27 +210,40 @@ trio = ["trio (>=0.32.0)"] name = "async-timeout" version = "5.0.1" description = "Timeout context manager for asyncio programs" -optional = false +optional = true python-versions = ">=3.8" -groups = ["main", "dev"] +groups = ["main"] +markers = "python_version == \"3.10\" and extra == \"aiohttp\"" files = [ {file = "async_timeout-5.0.1-py3-none-any.whl", hash = "sha256:39e3809566ff85354557ec2398b55e096c8364bacac9405a7a1fa429e77fe76c"}, {file = "async_timeout-5.0.1.tar.gz", hash = "sha256:d9321a7a3d5a6a5e187e824d2fa0793ce379a202935782d555d6e9d2735677d3"}, ] -markers = {main = "extra == \"aiohttp\" and python_version == \"3.10\"", dev = "python_full_version < \"3.11.3\""} [[package]] name = "attrs" version = "26.1.0" description = "Classes Without Boilerplate" -optional = false +optional = true python-versions = ">=3.9" -groups = ["main", "dev"] +groups = ["main"] +markers = "extra == \"aiohttp\"" files = [ {file = "attrs-26.1.0-py3-none-any.whl", hash = "sha256:c647aa4a12dfbad9333ca4e71fe62ddc36f4e63b2d260a37a8b83d2f043ac309"}, {file = "attrs-26.1.0.tar.gz", hash = "sha256:d03ceb89cb322a8fd706d4fb91940737b6642aa36998fe130a9bc96c985eff32"}, ] -markers = {main = "extra == \"aiohttp\""} + +[[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" +groups = ["dev"] +markers = "python_version == \"3.10\"" +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" @@ -295,9 +308,10 @@ testing = ["hatch", "pre-commit", "pytest", "tox"] name = "frozenlist" version = "1.8.0" description = "A list-like structure which implements collections.abc.MutableSequence" -optional = false +optional = true python-versions = ">=3.9" -groups = ["main", "dev"] +groups = ["main"] +markers = "extra == \"aiohttp\"" files = [ {file = "frozenlist-1.8.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:b37f6d31b3dcea7deb5e9696e529a6aa4a898adc33db82da12e4c60a7c4d2011"}, {file = "frozenlist-1.8.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:ef2b7b394f208233e471abc541cc6991f907ffd47dc72584acee3147899d6565"}, @@ -430,7 +444,6 @@ files = [ {file = "frozenlist-1.8.0-py3-none-any.whl", hash = "sha256:0c18a16eab41e82c295618a77502e17b195883241c563b00f0aa5106fc4eaa0d"}, {file = "frozenlist-1.8.0.tar.gz", hash = "sha256:3ede829ed8d842f6cd48fc7081d7a41001a56f1f38603f9d49bf3020d59a31ad"}, ] -markers = {main = "extra == \"aiohttp\""} [[package]] name = "h11" @@ -493,15 +506,15 @@ zstd = ["zstandard (>=0.18.0)"] [[package]] name = "httpx-aiohttp" -version = "0.1.12" +version = "0.1.8" description = "Aiohttp transport for HTTPX" optional = true python-versions = ">=3.8" groups = ["main"] markers = "extra == \"aiohttp\"" files = [ - {file = "httpx_aiohttp-0.1.12-py3-none-any.whl", hash = "sha256:5b0eac39a7f360fa7867a60bcb46bb1024eada9c01cbfecdb54dc1edb3fb7141"}, - {file = "httpx_aiohttp-0.1.12.tar.gz", hash = "sha256:81feec51fd82c0ecfa0e9aaf1b1a6c2591260d5e2bcbeb7eb0277a78e610df2c"}, + {file = "httpx_aiohttp-0.1.8-py3-none-any.whl", hash = "sha256:b7bd958d1331f3759a38a0ba22ad29832cb63ca69498c17735228055bf78fa7e"}, + {file = "httpx_aiohttp-0.1.8.tar.gz", hash = "sha256:756c5e74cdb568c3248ba63fe82bfe8bbe64b928728720f7eaac64b3cf46f308"}, ] [package.dependencies] @@ -514,7 +527,7 @@ version = "3.18" description = "Internationalized Domain Names in Applications (IDNA)" optional = false python-versions = ">=3.9" -groups = ["main", "dev"] +groups = ["main"] files = [ {file = "idna-3.18-py3-none-any.whl", hash = "sha256:7f952cbe720b688055e3f87de14f5c3e5fdaa8bc3928985c4077ca689de849a2"}, {file = "idna-3.18.tar.gz", hash = "sha256:ffb385a7e039654cef1ab9ef32c6fafe283c0c0467bba1d9029738ce4a14a848"}, @@ -539,9 +552,10 @@ files = [ name = "multidict" version = "6.7.1" description = "multidict implementation" -optional = false +optional = true python-versions = ">=3.9" -groups = ["main", "dev"] +groups = ["main"] +markers = "extra == \"aiohttp\"" files = [ {file = "multidict-6.7.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:c93c3db7ea657dd4637d57e74ab73de31bccefe144d3d4ce370052035bc85fb5"}, {file = "multidict-6.7.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:974e72a2474600827abaeda71af0c53d9ebbc3c2eb7da37b37d7829ae31232d8"}, @@ -690,7 +704,6 @@ files = [ {file = "multidict-6.7.1-py3-none-any.whl", hash = "sha256:55d97cc6dae627efa6a6e548885712d4864b81110ac76fa4e534c03819fa4a56"}, {file = "multidict-6.7.1.tar.gz", hash = "sha256:ec6652a1bee61c53a3e5776b6049172c53b6aaba34f18c9ad04f82712bac623d"}, ] -markers = {main = "extra == \"aiohttp\""} [package.dependencies] typing-extensions = {version = ">=4.1.0", markers = "python_version < \"3.11\""} @@ -793,9 +806,10 @@ testing = ["coverage", "pytest", "pytest-benchmark"] name = "propcache" version = "0.5.2" description = "Accelerated property cache" -optional = false +optional = true python-versions = ">=3.10" -groups = ["main", "dev"] +groups = ["main"] +markers = "extra == \"aiohttp\"" files = [ {file = "propcache-0.5.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:d5a81be28596d6559f6131ef33e10200de6e17643b3c74ce03f9eb103be6ae8b"}, {file = "propcache-0.5.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:29cbaac5ea0212663e6845e04b5e188d5a6ae6dd919810ac835bf1d3b42c3f4c"}, @@ -919,7 +933,6 @@ files = [ {file = "propcache-0.5.2-py3-none-any.whl", hash = "sha256:be1ddfcbb376e3de5d2e2db1d58d6d67463e6b4f9f040c000de8e300295465fe"}, {file = "propcache-0.5.2.tar.gz", hash = "sha256:01c4fc7480cd0598bb4b57022df55b9ca296da7fc5a8760bd8451a7e63a7d427"}, ] -markers = {main = "extra == \"aiohttp\""} [[package]] name = "pydantic" @@ -1077,63 +1090,63 @@ files = [ typing-extensions = ">=4.14.1" [[package]] -name = "pyjwt" -version = "2.13.0" -description = "JSON Web Token implementation in Python" +name = "pygments" +version = "2.20.0" +description = "Pygments is a syntax highlighting package written in Python." optional = false python-versions = ">=3.9" groups = ["dev"] files = [ - {file = "pyjwt-2.13.0-py3-none-any.whl", hash = "sha256:66adcc2aff09b3f1bbd95fc1e1577df8ac8723c978552fd43304c8a290ac5728"}, - {file = "pyjwt-2.13.0.tar.gz", hash = "sha256:41571c89ca91598c79e8ef18a2d07367d4810fbbd6f637794879baf1b7703423"}, + {file = "pygments-2.20.0-py3-none-any.whl", hash = "sha256:81a9e26dd42fd28a23a2d169d86d7ac03b46e2f8b59ed4698fb4785f946d0176"}, + {file = "pygments-2.20.0.tar.gz", hash = "sha256:6757cd03768053ff99f3039c1a36d6c0aa0b263438fcab17520b30a303a82b5f"}, ] -[package.dependencies] -typing_extensions = {version = ">=4.0", markers = "python_version < \"3.11\""} - [package.extras] -crypto = ["cryptography (>=3.4.0)"] +windows-terminal = ["colorama (>=0.4.6)"] [[package]] name = "pytest" -version = "7.4.4" +version = "9.1.1" description = "pytest: simple powerful testing with Python" optional = false -python-versions = ">=3.7" +python-versions = ">=3.10" groups = ["dev"] 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-9.1.1-py3-none-any.whl", hash = "sha256:37a86b45efb9a47a61a36449063e8e18d0cab3161329fc099eb21783169c4f0c"}, + {file = "pytest-9.1.1.tar.gz", hash = "sha256:1088fbde8f2b49d95a549a195707afa7a76a3ce9bcadc26b6d71f0ffda5fe313"}, ] [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.0.1" +packaging = ">=22" +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" groups = ["dev"] 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]] @@ -1172,26 +1185,6 @@ files = [ [package.dependencies] six = ">=1.5" -[[package]] -name = "redis" -version = "5.3.1" -description = "Python client for Redis database and key-value store" -optional = false -python-versions = ">=3.8" -groups = ["dev"] -files = [ - {file = "redis-5.3.1-py3-none-any.whl", hash = "sha256:dc1909bd24669cc31b5f67a039700b16ec30571096c5f1f0d9d2324bff31af97"}, - {file = "redis-5.3.1.tar.gz", hash = "sha256:ca49577a531ea64039b5a36db3d6cd1a0c7a60c34124d46924a45b956e8cf14c"}, -] - -[package.dependencies] -async-timeout = {version = ">=4.0.3", markers = "python_full_version < \"3.11.3\""} -PyJWT = ">=2.9.0" - -[package.extras] -hiredis = ["hiredis (>=3.0.0)"] -ocsp = ["cryptography (>=36.0.1)", "pyopenssl (==23.2.1)", "requests (>=2.31.0)"] - [[package]] name = "ruff" version = "0.11.5" @@ -1292,14 +1285,14 @@ files = [ [[package]] name = "types-python-dateutil" -version = "2.9.0.20260518" +version = "2.9.0.20260716" description = "Typing stubs for python-dateutil" optional = false python-versions = ">=3.10" groups = ["dev"] files = [ - {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"}, + {file = "types_python_dateutil-2.9.0.20260716-py3-none-any.whl", hash = "sha256:1ae41d51a5c5f6bbeeb7f1f34df7086d55ff1605cf88d2ed71a7a276e1a7794e"}, + {file = "types_python_dateutil-2.9.0.20260716.tar.gz", hash = "sha256:1d55d1c3024bdb4861bb6a6622c9ec800c433d87bdc5b16fb84cdd0eed4ef2cb"}, ] [[package]] @@ -1330,265 +1323,137 @@ files = [ typing-extensions = ">=4.12.0" [[package]] -name = "wasmtime" -version = "46.0.1" -description = "A WebAssembly runtime powered by Wasmtime" -optional = true -python-versions = ">=3.9" -groups = ["main"] -markers = "extra == \"datastream\" or extra == \"rulesengine\"" +name = "urllib3" +version = "2.7.0" +description = "HTTP library with thread-safe connection pooling, file post, and more." +optional = false +python-versions = ">=3.10" +groups = ["dev"] files = [ - {file = "wasmtime-46.0.1-py3-none-android_26_arm64_v8a.whl", hash = "sha256:cc8d52f9ad3bedc1e4de5002f7b22d7cac400be046711d177f6ce20a11eacb31"}, - {file = "wasmtime-46.0.1-py3-none-android_26_x86_64.whl", hash = "sha256:f8e4b0ec402b84b856d3c6c2f96c6e6889c56e685b5cfed0a4040775c751ca38"}, - {file = "wasmtime-46.0.1-py3-none-any.whl", hash = "sha256:85a092a63c20ccecb965b9aa12a19368d2e06203436d19701068efc390efa678"}, - {file = "wasmtime-46.0.1-py3-none-macosx_10_13_x86_64.whl", hash = "sha256:9b46c546bf73ece2600403db7dc604c3ef12046ccf2fabe07d7bfaa00453ce8b"}, - {file = "wasmtime-46.0.1-py3-none-macosx_11_0_arm64.whl", hash = "sha256:de1a69573a173b5171f9413bcf0b88f4fed2721ed02c842fc25de5358730ccdf"}, - {file = "wasmtime-46.0.1-py3-none-manylinux1_x86_64.whl", hash = "sha256:e53c65abe31aeeb19a3f794b6e53140d401c4c79ad91c89caefdc502ee2b10c1"}, - {file = "wasmtime-46.0.1-py3-none-manylinux2014_aarch64.whl", hash = "sha256:841b53fc17eedabaa6deb1e062a04a0a8953908d540fadb4149bc55c3f6d3e50"}, - {file = "wasmtime-46.0.1-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:f295d10012b6ca6ecffa7757eed70b84ebaa2e33dc39275e7b6bed5eed5130b9"}, - {file = "wasmtime-46.0.1-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:05fc65164b4825bf1c3c8f007df070b25accc974cb81d0bfc1c5d76fdf6f70e0"}, - {file = "wasmtime-46.0.1-py3-none-win_amd64.whl", hash = "sha256:559b0753e3ea311fd16000fe51c08592a625e61ebb8640601ae7173fc516e430"}, - {file = "wasmtime-46.0.1-py3-none-win_arm64.whl", hash = "sha256:967625406fde8fc3c9d795ffbb7bdde77d0a38de776e8eb7a0416ca6d811a27a"}, - {file = "wasmtime-46.0.1.tar.gz", hash = "sha256:0da0388c21bc0f0e633c7a30f2b7939a657f5019258c9a3a63fd37298a0dbb8b"}, + {file = "urllib3-2.7.0-py3-none-any.whl", hash = "sha256:9fb4c81ebbb1ce9531cce37674bbc6f1360472bc18ca9a553ede278ef7276897"}, + {file = "urllib3-2.7.0.tar.gz", hash = "sha256:231e0ec3b63ceb14667c67be60f2f2c40a518cb38b03af60abc813da26505f4c"}, ] [package.extras] -testing = ["coverage", "pycparser", "pytest", "pytest-mypy"] - -[[package]] -name = "websockets" -version = "16.1" -description = "An implementation of the WebSocket Protocol (RFC 6455 & 7692)" -optional = true -python-versions = ">=3.10" -groups = ["main"] -markers = "extra == \"datastream\"" -files = [ - {file = "websockets-16.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:de72a9c611178b15557d98eabd3101c9663c4d68938510478a6d162f99afd213"}, - {file = "websockets-16.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:37b0e4d726ffea3776670092d3d13e1cb605076f036a695fd1259de0d9b9fe02"}, - {file = "websockets-16.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:00d50c0a27098fcb7ab47b3d99a1b1159b534dbcd959fbf05113ebc37e5f927b"}, - {file = "websockets-16.1-cp310-cp310-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:1acb698bff1da1782b31aebd8d7a24d7d05453964abcd7d03dbf6e25893908e8"}, - {file = "websockets-16.1-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:dc2c453f3b5f99c56b16e233aad5299860558487d26adb2ed27a00c14ca24b8c"}, - {file = "websockets-16.1-cp310-cp310-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:1a9f08a0728b0835f1c6abe1d9b746ab3de49b7336a0e1919cf96be1e76273eb"}, - {file = "websockets-16.1-cp310-cp310-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:a089979d6173b27af18026c8d8b0077f83669a9169174482c4651e9f5739a5b6"}, - {file = "websockets-16.1-cp310-cp310-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:a3c18dba232ec2b92a68579c9fed8ff5a18f853d1e09fc0b6ca3159e94f689fe"}, - {file = "websockets-16.1-cp310-cp310-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:6c1eb7df4170d5068892a8834fb5c07b9552353deb0dbeb0bff3820481ae4792"}, - {file = "websockets-16.1-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:c522bd48e625b6d557aa228967258d6d3da031c4cc21d3352fb302479aa9ba0a"}, - {file = "websockets-16.1-cp310-cp310-musllinux_1_2_armv7l.whl", hash = "sha256:d106396927a7f00b0f3a69215c3357f87bf0bca6844247121f7e8291e826a3b1"}, - {file = "websockets-16.1-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:d71bed12909b8039955536e192867d02d76cd3797cedfd0facf822e7668636c3"}, - {file = "websockets-16.1-cp310-cp310-musllinux_1_2_riscv64.whl", hash = "sha256:9c1cf6f9a936b030b5bed0e800c5ee32069338129084546baf5ff5014dc62fa9"}, - {file = "websockets-16.1-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:3fd3e6a7af2c8fcdcf4ffbeaf7f54a567b91a83267204187797f31faaa2a4efa"}, - {file = "websockets-16.1-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:dddd27175bf640acae5561fa79b77e8ec71fc445816200523e5c19b6a556fb72"}, - {file = "websockets-16.1-cp310-cp310-win32.whl", hash = "sha256:cce36c80b3f2fede7942f1756d3d885fa6fa086766c8c1bcf00695ab80f0d51a"}, - {file = "websockets-16.1-cp310-cp310-win_amd64.whl", hash = "sha256:115fc4695b94bb855995b23fb1abcb66099a5995575d3d5bc5605a616c58d0eb"}, - {file = "websockets-16.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:a9b1d7a63cba8e6b9b77e499a81eab29d31100298d090ad4507d1048c0b9cae0"}, - {file = "websockets-16.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:bedbc5efeb96621aa2921d2d92608246691399418cac22acba427eb11877ea1f"}, - {file = "websockets-16.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:fd847ab82133015afe65d778e7966ab42dba16bd7ad2e5b8a7918db6539f3f94"}, - {file = "websockets-16.1-cp311-cp311-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:e2fb33ccb16ee40a95cc676d7b0ff451a9a2632f11a0dbc2e666326892b2e1de"}, - {file = "websockets-16.1-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:97f15b6d9ea9c2eaf6ccab964a082b09bfa6634a495bb0c2e9e7ee6943f58976"}, - {file = "websockets-16.1-cp311-cp311-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:638cf57c48b4ad8ac1ff1e453f4f97db2426b690ddc111e6da96b27b4a340bc3"}, - {file = "websockets-16.1-cp311-cp311-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:2c1c85f61bc9d5eac57ce705d848dc2d2ce3680638300bf4e1da7d749e2cf4ce"}, - {file = "websockets-16.1-cp311-cp311-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:eeab6d27f51c7e579023c971f5e6dff200deadf01faf6831beaecd32052dfaef"}, - {file = "websockets-16.1-cp311-cp311-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:2ed64e5a97b0b97a0b66e18bfe281317a75fbbd5afe692f939ea8d14a4292f2c"}, - {file = "websockets-16.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:9b3b021d0ed4bc16eea9775f62c9fa71acdacba0fc790b38581754dedf29ca60"}, - {file = "websockets-16.1-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:6eb604a4167f0a0d53c2243dfc667a29f0b43c3436057184e070bb82a1000fa2"}, - {file = "websockets-16.1-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:9a3f125e44c3e34d61d111652e608e0f5b85ce08c225c8d56ad0eb822fa40030"}, - {file = "websockets-16.1-cp311-cp311-musllinux_1_2_riscv64.whl", hash = "sha256:8fdf0b00d0d1f30d1f06a92cab46fe542eec3eb302a7aee7163f142d0780f216"}, - {file = "websockets-16.1-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:67b56828712f5fa7852de4c0265c28827311a657a4d275b7312ed0d1a918bee4"}, - {file = "websockets-16.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:39c7e7730be33b8f0cd6f0aa8e8c82f9cdd1813f159765e073b2ece65f4824b5"}, - {file = "websockets-16.1-cp311-cp311-win32.whl", hash = "sha256:c54fe94fb2f11e11b48920c5f971e298cec73ac35db56efe57a49db63dfc95d4"}, - {file = "websockets-16.1-cp311-cp311-win_amd64.whl", hash = "sha256:f9f4fb9ae8b802e55609685db98382d48fd3feb1397804e1e774968dea0f28c7"}, - {file = "websockets-16.1-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:b6aa3f7ad345cf3862c21f4fbf2ef5e14d911348476c2845e137c091fe3a3f0b"}, - {file = "websockets-16.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:b43fcfb521ac2f34ba80b7b8ea16303e4ad82dd8af667bf40839ad3a5d37b164"}, - {file = "websockets-16.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:2bd3e12cd9afbe2baedae0b1eeade8ba64329b60fe2f9abdc966bd10fd2c2ef5"}, - {file = "websockets-16.1-cp312-cp312-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:35f41979c8623df9bd30d949d82010a8fda5c56ff12cd8508a5b7272b6d4b53a"}, - {file = "websockets-16.1-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:a24d1f35aef07d794a16c853c688e74956c50239bec37b4f2de080056046419b"}, - {file = "websockets-16.1-cp312-cp312-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:0c64c024ddf7a35331b21fcddb562a039c275d2c82e8c2d12939e7da23997270"}, - {file = "websockets-16.1-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:c3e99757f5baafe20fc598e202ea6f5b0b265186ad38d0a17bd8beca16296955"}, - {file = "websockets-16.1-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:353f3bc6e058ac1ccab4b3588e8598837a8c04cfc8351233e6d523be675d844c"}, - {file = "websockets-16.1-cp312-cp312-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:0352f5b38b40e857b6428d468fa21dbb4dd4a567d933c26d9831b4efe1b92f43"}, - {file = "websockets-16.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:70bd789afab579602968c39f21cb925466505f3edff22f0ae852bca54978a4f9"}, - {file = "websockets-16.1-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:d0fb4b46f121eccd539353baebd1083a8767a9a351109453d1d1caecd1ba40c2"}, - {file = "websockets-16.1-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:c14b6634af01541e4efe2954fd8f263386f7aa6d37c01e55dd8109fd17661452"}, - {file = "websockets-16.1-cp312-cp312-musllinux_1_2_riscv64.whl", hash = "sha256:a58532c49a851bcb481e58c1be23b315c17fe2fbbed509d75aeea12f543d2c15"}, - {file = "websockets-16.1-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:4e969170c3b08e1d8dabd990fef1fa702c4233aeaabec33f871806e444f6a0e4"}, - {file = "websockets-16.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:ff9b000064b88787ba9f7a3cb2af2b68a658ca5aad76458a46469e7124b678a0"}, - {file = "websockets-16.1-cp312-cp312-win32.whl", hash = "sha256:b9f5d83f80f4d7c4bba6d97f3755ac05850c784dce0fd2ab371c4e41172f53ff"}, - {file = "websockets-16.1-cp312-cp312-win_amd64.whl", hash = "sha256:6852c9f653966c16109d3b6f31181fd734f7914927e3f0fa1117af7a18c9aa21"}, - {file = "websockets-16.1-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:b0232ed141cec3df2af5a3959a071c51f40036336b0d37e17faf9ef52fc73e47"}, - {file = "websockets-16.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:a71b73d143991714144e159f767b698f03c4a70b8a65ae1733b650cff488045b"}, - {file = "websockets-16.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:187323204c3b2fc465e8fc2609e60437c521790cb9c1acb49c4c452a33e57f37"}, - {file = "websockets-16.1-cp313-cp313-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:9dba74233c8c3ce368850818c98354dad2570f57231b3fd3bd00d7aa57628881"}, - {file = "websockets-16.1-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:63339bc8c63c86a463177775cb7c677691f5bcfac7b3b2f01b286d42acd41600"}, - {file = "websockets-16.1-cp313-cp313-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:23e545ea8ae4263e37cdfd4e22a217f519e48e432728bc461185bbf585f38a83"}, - {file = "websockets-16.1-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:2237081454846fb40403a80ba86d82e2038b9c45865ab96af0abe7d002a91045"}, - {file = "websockets-16.1-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:5f5218de1ed047385ca53744caba9435d65f75d008364970a3fae95a05812cf9"}, - {file = "websockets-16.1-cp313-cp313-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:75c98e3920039d0edff03b74478ada504b7ce3a1bc406db2cabfca84320f7baf"}, - {file = "websockets-16.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:1facd189d8190af30487a55b4c3688484dd50801628a3b5b2ccd26db08e67057"}, - {file = "websockets-16.1-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:cc0c6a6eef613c7da32d4fb068f82ef834b58134f6a16b54e6c1e5bf9529ab3d"}, - {file = "websockets-16.1-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:ad9411eded8988b879be6038206698bf7106c85a78f642c004485bcb95be17eb"}, - {file = "websockets-16.1-cp313-cp313-musllinux_1_2_riscv64.whl", hash = "sha256:cd68f0914f3b64694895bc5e9b14e8b447e41d7bf5ffaf989bb8dcb5e2dfdce7"}, - {file = "websockets-16.1-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:fef2debfe7f7ebdda12176f26166f95b7af17af05ba06150fcf889032e0213e9"}, - {file = "websockets-16.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:a3cd6c9b798218798f4bb7b2e71c38f0e744bb94ca537b13376f88019d46384d"}, - {file = "websockets-16.1-cp313-cp313-win32.whl", hash = "sha256:84c170c6869633536921e4474b1cce7254c0c9b0053ef5725f966cee47e718e4"}, - {file = "websockets-16.1-cp313-cp313-win_amd64.whl", hash = "sha256:bef52d327d70fa75dad93ee61ea2cb1d1489aca9f35c188833563f5a3b4df0a5"}, - {file = "websockets-16.1-cp314-cp314-macosx_10_15_universal2.whl", hash = "sha256:f881fca0a45dd6789939bd6637cd98169b92f1c3fdc78262f2cb9ec2cb1f324e"}, - {file = "websockets-16.1-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:30c379d5b207d3a7f0ba4c2e4602a895b0bcc63fb5f5371a4ae7fbddb03b672b"}, - {file = "websockets-16.1-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:98ab58a4faa72b46da0127ccc1931dcbfc0985b0778892300a092185910c4cbe"}, - {file = "websockets-16.1-cp314-cp314-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:8e9c4e369fc181b2d41a99e01477215cecdc8546a39f7d41a59cc0a7065a0b09"}, - {file = "websockets-16.1-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:0704df094b2d5fa7f6f410925a594c2a5c9a09167731a76292e5410934208209"}, - {file = "websockets-16.1-cp314-cp314-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:b22b1f4950f6ab7126623329c3b47b3b90a14c05db517f2db2a026ad6c928352"}, - {file = "websockets-16.1-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:1ae4a686a662964a6671069f84f7f908cc3475e782227726b0c622c715962105"}, - {file = "websockets-16.1-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:856bdd638f8277f86465057bfdd4da097c73058fb0f9d2bd5baea29e2bf2d367"}, - {file = "websockets-16.1-cp314-cp314-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:9003a1fde1c21a322a3ca3fa0c4bda8c639da81dbc925162766086643b05ba87"}, - {file = "websockets-16.1-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:39e947b1f5fdab045174306e3916785bf3ed537648acc1549827c08c33b10953"}, - {file = "websockets-16.1-cp314-cp314-musllinux_1_2_armv7l.whl", hash = "sha256:5dd0e666b5931c0509cf65714686a1c5126771e663a79ac5d40da4f58b1f9502"}, - {file = "websockets-16.1-cp314-cp314-musllinux_1_2_ppc64le.whl", hash = "sha256:a0285df7925657ad65a65fb8dc330808bce082827538fd50ef45fa12d1fc5bca"}, - {file = "websockets-16.1-cp314-cp314-musllinux_1_2_riscv64.whl", hash = "sha256:82d1c2cab3c133e9d059b3a5420bed9376bd30e21c185c63dda4ddadf6ddda47"}, - {file = "websockets-16.1-cp314-cp314-musllinux_1_2_s390x.whl", hash = "sha256:c39907f1eaf11f6277def65aa02d68f30576b693d0c1ca332aafa3caa723ac6d"}, - {file = "websockets-16.1-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:45c5ea55446171949eb99fd34b771ceddd511ca21958d40d0197ced33159e5ee"}, - {file = "websockets-16.1-cp314-cp314-win32.whl", hash = "sha256:b8ef8b1c8d6bd029a475ac432e730fba2dfd456715d26c473e2a82291024b99c"}, - {file = "websockets-16.1-cp314-cp314-win_amd64.whl", hash = "sha256:7358ff21632b5d062707f73e859c824f1c3807e73d8ca25e71caca7c4cdcf145"}, - {file = "websockets-16.1-cp314-cp314t-macosx_10_15_universal2.whl", hash = "sha256:d0f38f4c3e9b359e257c339c2cc1967ccaeedb102e57c1c986bdce4bf4f32268"}, - {file = "websockets-16.1-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:3c3d2cbd1602593bad49bd86fa3fbb25407d87a3b4bf8857c0ac5ac4914e1901"}, - {file = "websockets-16.1-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:36069b74671e7e667f48a7484249f84c45a825a134c8b1bdc01875d0daa10d79"}, - {file = "websockets-16.1-cp314-cp314t-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:587f83c2ce8a5d628e166384d77fa7f0ac69b9007d515ab442123e6615aa8da3"}, - {file = "websockets-16.1-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:4a6db7972d52bc1b66cefe2246902e256cbaebc9ba8a45eac09343d7eb6671b2"}, - {file = "websockets-16.1-cp314-cp314t-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:e7d6014888a0632e1ed7a4095248bb3095232999447f2d83bfb1900987dd9ed9"}, - {file = "websockets-16.1-cp314-cp314t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:9cb074d150e4ad2a77aa8a332c2be85f3f64f2681519d2570c1225c12c9821ff"}, - {file = "websockets-16.1-cp314-cp314t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:d19c9067e1fe9490f974bffbc0e443b80a7674c5efb4980c429cc00771f07c5a"}, - {file = "websockets-16.1-cp314-cp314t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:d440ff0c6c7469ad59c0a412c383c235935b43635e89425e3f6a0c36de90c31b"}, - {file = "websockets-16.1-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:8613129a2533f08de24505e69a3e403cedaadae49abdb043c4d170ca71b7e4bd"}, - {file = "websockets-16.1-cp314-cp314t-musllinux_1_2_armv7l.whl", hash = "sha256:a5bf9c23f197b4ec88290fd5463f33db67362a1bb10f85fc2e8e7627f0ddab97"}, - {file = "websockets-16.1-cp314-cp314t-musllinux_1_2_ppc64le.whl", hash = "sha256:520b0fd0395f075febb283c76755af724ab9fd19dffa4f3bfd18cb4e622790a3"}, - {file = "websockets-16.1-cp314-cp314t-musllinux_1_2_riscv64.whl", hash = "sha256:7143aa09a67e1c013be44e81a88dfe90fc6244198ab86c7edd064152cf619805"}, - {file = "websockets-16.1-cp314-cp314t-musllinux_1_2_s390x.whl", hash = "sha256:7acb811fad08e611755800d1560e395c67e11a6bd563598ea6abb319afb86938"}, - {file = "websockets-16.1-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:c5cf88e3faa2f7931bc6baeee7599c97656a3f6ac7f831f4fccba233e141783a"}, - {file = "websockets-16.1-cp314-cp314t-win32.whl", hash = "sha256:589f8842521c8307684ce0b40ce4ad70c5e0aa46484c6f1225a94ef4b8970341"}, - {file = "websockets-16.1-cp314-cp314t-win_amd64.whl", hash = "sha256:2c0e0857c30bbbc2bb5c30687508f0b7ec19aa026cd9f2ff8424d0fee42dcc07"}, - {file = "websockets-16.1-pp311-pypy311_pp73-macosx_10_15_x86_64.whl", hash = "sha256:7289d899c79e763e6221c8dcb8959361cb43274418538d7c7ad16a43b01d12f9"}, - {file = "websockets-16.1-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:e22e9e3719f5131bd62da4db63c8da63eb8c91cc99e16c1cbd122f130e1ae07a"}, - {file = "websockets-16.1-pp311-pypy311_pp73-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:83bdabafef431247e6b11a9aab8a0893fd8e82e1ed95b32e0373625b03ffce4a"}, - {file = "websockets-16.1-pp311-pypy311_pp73-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:0b8d13ceabc5c60995f201b5211d76876e17e68706ebf5d3bc666b32eefff1a6"}, - {file = "websockets-16.1-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:81495f9c0085361c582efbc3207fb877174cfe03370f17d9cd70624404aa526f"}, - {file = "websockets-16.1-py3-none-any.whl", hash = "sha256:c5149dfe490ec7e5ee5dbf624c642fb725f93a5575c7f00ab594ca9eddb8dd81"}, - {file = "websockets-16.1.tar.gz", hash = "sha256:299468cbe42e2b9981134c7c51d99387d8a7bf562b00183b3eec53f882846dad"}, -] +brotli = ["brotli (>=1.2.0) ; platform_python_implementation == \"CPython\"", "brotlicffi (>=1.2.0.0) ; platform_python_implementation != \"CPython\""] +h2 = ["h2 (>=4,<5)"] +socks = ["pysocks (>=1.5.6,!=1.5.7,<2.0)"] +zstd = ["backports-zstd (>=1.0.0) ; python_version < \"3.14\""] [[package]] name = "yarl" -version = "1.24.2" +version = "1.24.5" description = "Yet another URL library" -optional = false +optional = true python-versions = ">=3.10" -groups = ["main", "dev"] +groups = ["main"] +markers = "extra == \"aiohttp\"" files = [ - {file = "yarl-1.24.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:5249a113065c2b7a958bc699759e359cd61cfc81e3069662208f48f191b7ed12"}, - {file = "yarl-1.24.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:7f4425fa244fbf530b006d0c5f79ce920114cfff5b4f5f6056e669f8e160fdc0"}, - {file = "yarl-1.24.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:15c0b5e49d3c44e2a0b93e6a49476c5edad0a7686b92c395765a7ea775572a75"}, - {file = "yarl-1.24.2-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:246d32a53a947c8f0189f5d699cbd4c7036de45d9359e13ba238d1239678c727"}, - {file = "yarl-1.24.2-cp310-cp310-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:64480fb3e4d4ed9ed71c48a91a477384fc342a50ca30071d2f8a88d51d9c9413"}, - {file = "yarl-1.24.2-cp310-cp310-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:349de4701dc3760b6e876628423a8f147ef4f5599d10aba1e10702075d424ed9"}, - {file = "yarl-1.24.2-cp310-cp310-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:d162677af8d5d3d6ebab8394b021f4d041ac107a4b705873148a77a49dc9e1b2"}, - {file = "yarl-1.24.2-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:f5f5c6ec23a9043f2d139cc072f53dd23168d202a334b9b2fda8de4c3e890d90"}, - {file = "yarl-1.24.2-cp310-cp310-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:60de6742447fbbf697f16f070b8a443f1b5fe6ca3826fbef9fe70ecd5328e643"}, - {file = "yarl-1.24.2-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:acf93187c3710e422368eb768aee98db551ec7c85adc250207a95c16548ab7ac"}, - {file = "yarl-1.24.2-cp310-cp310-musllinux_1_2_armv7l.whl", hash = "sha256:f4b0352fd41fd34b6651934606268816afd6914d09626f9bcbbf018edb0afb3f"}, - {file = "yarl-1.24.2-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:6b208bb939099b4b297438da4e9b25357f0b1c791888669b963e45b203ea9f36"}, - {file = "yarl-1.24.2-cp310-cp310-musllinux_1_2_riscv64.whl", hash = "sha256:4b85b8825e631295ff4bc8943f7471d54c533a9360bbe15ebb38e018b555bb8a"}, - {file = "yarl-1.24.2-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:e26acf20c26cb4fefc631fdb75aca2a6b8fa8b7b5d7f204fb6a8f1e63c706f53"}, - {file = "yarl-1.24.2-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:819ca24f8eafcfb683c1bd5f44f2f488cea1274eb8944731ffd2e1f10f619342"}, - {file = "yarl-1.24.2-cp310-cp310-win_amd64.whl", hash = "sha256:5cb0f995a901c36be096ccbf4c673591c2faabbe96279598ffaec8c030f85bf4"}, - {file = "yarl-1.24.2-cp310-cp310-win_arm64.whl", hash = "sha256:f408eace7e22a68b467a0562e0d27d322f91fe3eaaa6f466b962c6cfaea9fa39"}, - {file = "yarl-1.24.2-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:36348bebb147b83818b9d7e673ea4debc75970afc6ffdc7e3975ad05ce5a58c1"}, - {file = "yarl-1.24.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:1a97e42c8a2233f2f279ecadd9e4a037bcb5d813b78435e8eedd4db5a9e9708c"}, - {file = "yarl-1.24.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:8d027d56f1035e339d1001ac33eceab5b2ec8e42e449787bb75e289fb9a5cd1d"}, - {file = "yarl-1.24.2-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:0a6377060e7927187a42b7eb202090cbe2b34933a4eeaf90e3bd9e33432e5cae"}, - {file = "yarl-1.24.2-cp311-cp311-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:17076578bce0049a5ce57d14ad1bded391b68a3b213e9b81b0097b090244999a"}, - {file = "yarl-1.24.2-cp311-cp311-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:50713f1d4d6be6375bb178bb43d140ee1acb8abe589cd723320b7925a275be1e"}, - {file = "yarl-1.24.2-cp311-cp311-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:34263e2fa8fb5bb63a0d97706cda38edbad62fddb58c7f12d6acbc092812aa50"}, - {file = "yarl-1.24.2-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:49016d82f032b1bd1e10b01078a7d29ae71bf468eeae0ea22df8bab691e60003"}, - {file = "yarl-1.24.2-cp311-cp311-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:3f6d2c216318f8f32038ca3f72501ba08536f0fd18a36e858836b121b2deed9f"}, - {file = "yarl-1.24.2-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:08d3a33218e0c64393e7610284e770409a9c31c429b078bcb24096ed0a783b8f"}, - {file = "yarl-1.24.2-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:5d699376c4ca3cba49bbfae3a05b5b70ded572937171ce1e0b8d87118e2ba294"}, - {file = "yarl-1.24.2-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:a1cab588b4fa14bea2e55ebea27478adfb05372f47573738e1acc4a36c0b05d2"}, - {file = "yarl-1.24.2-cp311-cp311-musllinux_1_2_riscv64.whl", hash = "sha256:ec87ccc31bd21db7ad009d8572c127c1000f268517618a4cc09adba3c2a7f21c"}, - {file = "yarl-1.24.2-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:d1dd47a22843b212baa8d74f37796815d43bd046b42a0f41e9da433386c3136b"}, - {file = "yarl-1.24.2-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:7b54b9c67c2b06bd7b9a77253d242124b9c95d2c02def5a1144001ee547dd9d5"}, - {file = "yarl-1.24.2-cp311-cp311-win_amd64.whl", hash = "sha256:f8fdbcff8b2c7c9284e60c196f693588598ddcee31e11c18e14949ce44519d45"}, - {file = "yarl-1.24.2-cp311-cp311-win_arm64.whl", hash = "sha256:b32c37a7a337e90822c45797bf3d79d60875cfcccd3ecc80e9f453d87026c122"}, - {file = "yarl-1.24.2-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:b975866c184564c827e0877380f0dae57dcca7e52782128381b72feff6dfceb8"}, - {file = "yarl-1.24.2-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:3b075301a2836a0e297b1b658cb6d6135df535d62efefdd60366bd589c2c82f2"}, - {file = "yarl-1.24.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:8ae44649b00947634ab0dab2a374a638f52923a6e67083f2c156cd5cbd1a881d"}, - {file = "yarl-1.24.2-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:507cc19f0b45454e2d6dcd62ff7d062b9f77a2812404e62dbdaec05b50faa035"}, - {file = "yarl-1.24.2-cp312-cp312-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:c4c17bad5a530912d2111825d3f05e89bab2dd376aaa8cbc77e449e6db63e576"}, - {file = "yarl-1.24.2-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:f5f0cbb112838a4a293985b6ed73948a547dadcc1ba6d2089938e7abdedceef8"}, - {file = "yarl-1.24.2-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:5ec8356b8a6afcf81fc7aeeef13b1ff7a49dec00f313394bbb9e83830d32ccd7"}, - {file = "yarl-1.24.2-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:7e7ebcdef69dec6c6451e616f32b622a6d4a2e92b445c992f7c8e5274a6bbc4c"}, - {file = "yarl-1.24.2-cp312-cp312-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:47a55d6cf6db2f401017a9e96e5288844e5051911fb4e0c8311a3980f5e59a7d"}, - {file = "yarl-1.24.2-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:3065657c80a2321225e804048597ad55658a7e76b32d6f5ee4074d04c50401db"}, - {file = "yarl-1.24.2-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:cb84b80d88e19ede158619b80813968713d8d008b0e2497a576e6a0557d50712"}, - {file = "yarl-1.24.2-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:990de4f680b1c217e77ff0d6aa0029f9eb79889c11fb3e9a3942c7eba29c1996"}, - {file = "yarl-1.24.2-cp312-cp312-musllinux_1_2_riscv64.whl", hash = "sha256:abb8ec0323b80161e3802da3150ef660b41d0e9be2048b76a363d93eee992c2b"}, - {file = "yarl-1.24.2-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:e7977781f83638a4c73e0f88425563d70173e0dfd90ac006a45c65036293ee3c"}, - {file = "yarl-1.24.2-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:e30dd55825dc554ec5b66a94953b8eda8745926514c5089dfcacecb9c99b5bd1"}, - {file = "yarl-1.24.2-cp312-cp312-win_amd64.whl", hash = "sha256:7dafe10c12ddd4d120d528c4b5599c953bd7b12845347d507b95451195bb6cad"}, - {file = "yarl-1.24.2-cp312-cp312-win_arm64.whl", hash = "sha256:044a09d8401fcf8681977faef6d286b8ade1e2d2e9dceda175d1cfa5ca496f30"}, - {file = "yarl-1.24.2-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:491ac9141decf49ee8030199e1ee251cdff0e131f25678817ff6aa5f837a3536"}, - {file = "yarl-1.24.2-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:e89418f65eda18f99030386305bd44d7d504e328a7945db1ead514fbe03a0607"}, - {file = "yarl-1.24.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:cdfcce633b4a4bb8281913c57fcafd4b5933fbc19111a5e3930bbd299d6102f1"}, - {file = "yarl-1.24.2-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:863297ddede92ee49024e9a9b11ecb59f310ca85b60d8537f56bed9bbb5b1986"}, - {file = "yarl-1.24.2-cp313-cp313-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:374423f70754a2c96942ede36a29d37dc6b0cb8f92f8d009ddf3ed78d3da5488"}, - {file = "yarl-1.24.2-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:33a29b5d00ccbf3219bb3e351d7875739c19481e030779f48cc46a7a71681a9b"}, - {file = "yarl-1.24.2-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:a9532c57211730c515341af11fef6e9b61d157487272a096d0c04da445642592"}, - {file = "yarl-1.24.2-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:91e72cf093fd833483a97ee648e0c053c7c629f51ff4a0e7edd84f806b0c5617"}, - {file = "yarl-1.24.2-cp313-cp313-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:b3177bc0a768ef3bacceb4f272632990b7bea352f1b2f1eee9d6d6ff16516f92"}, - {file = "yarl-1.24.2-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:e196952aacaf3b232e265ff02980b64d483dc0972bd49bcb061171ff22ac203a"}, - {file = "yarl-1.24.2-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:204e7a61ce99919c0de1bf904ab5d7aa188a129ea8f690a8f76cfb6e2844dc44"}, - {file = "yarl-1.24.2-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:4b156914620f0b9d78dc1adb3751141daee561cfec796088abb89ed49d220f1a"}, - {file = "yarl-1.24.2-cp313-cp313-musllinux_1_2_riscv64.whl", hash = "sha256:8372a2b976cf70654b2be6619ab6068acabb35f724c0fda7b277fbf53d66a5cf"}, - {file = "yarl-1.24.2-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:f9a1e9b622ca284143aab5d885848686dcd85453bb1ca9abcdb7503e64dc0056"}, - {file = "yarl-1.24.2-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:810e19b685c8c3c5862f6a38160a1f4e4c0916c9390024ec347b6157a45a0992"}, - {file = "yarl-1.24.2-cp313-cp313-win_amd64.whl", hash = "sha256:7d37fb7c38f2b6edab0f845c4f85148d4c44204f52bc127021bd2bc9fdbf1656"}, - {file = "yarl-1.24.2-cp313-cp313-win_arm64.whl", hash = "sha256:1e831894be7c2954240e49791fa4b50c05a0dc881de2552cfe3ffd8631c7f461"}, - {file = "yarl-1.24.2-cp314-cp314-macosx_10_15_universal2.whl", hash = "sha256:f9312b3c02d9b3d23840f67952913c9c8721d7f1b7db305289faefa878f364c2"}, - {file = "yarl-1.24.2-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:a4f4d6cd615823bfc7fb7e9b5987c3f41666371d870d51058f77e2680fbe9630"}, - {file = "yarl-1.24.2-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:0c3063e5c0a8e8e62fae6c2596fa01da1561e4cd1da6fec5789f5cf99a8aefd8"}, - {file = "yarl-1.24.2-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:fecd17873a096036c1c87ab3486f1aef7f269ada7f23f7f856f93b1cc7744f14"}, - {file = "yarl-1.24.2-cp314-cp314-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:a46d1ab4ba4d32e6dc80daf8a28ce0bd83d08df52fbc32f3e288663427734535"}, - {file = "yarl-1.24.2-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:73e68edf6dfd5f73f9ca127d84e2a6f9213c65bdffb736bda19524c0564fcd14"}, - {file = "yarl-1.24.2-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:a296ca617f2d25fbceafb962b88750d627e5984e75732c712154d058ae8d79a3"}, - {file = "yarl-1.24.2-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:e51b2cf5ec89a8b8470177641ed62a3ba22d74e1e898e06ad53aa77972487208"}, - {file = "yarl-1.24.2-cp314-cp314-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:310fc687f7b2044ec54e372c8cbe923bb88f5c37bded0d3079e5791c2fc3cf50"}, - {file = "yarl-1.24.2-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:297a2fe352ecf858b30a98f87948746ec16f001d279f84aebdbd3bd965e2f1bd"}, - {file = "yarl-1.24.2-cp314-cp314-musllinux_1_2_armv7l.whl", hash = "sha256:2a263e76b97bc42bdcd7c5f4953dec1f7cd62a1112fa7f869e57255229390d67"}, - {file = "yarl-1.24.2-cp314-cp314-musllinux_1_2_ppc64le.whl", hash = "sha256:822519b64cf0b474f1a0aaef1dc621438ea46bb77c94df97a5b4d213a7d8a8b1"}, - {file = "yarl-1.24.2-cp314-cp314-musllinux_1_2_riscv64.whl", hash = "sha256:b6067060d9dc594899ba83e6db6c48c68d1e494a6dab158156ed86977ca7bcb1"}, - {file = "yarl-1.24.2-cp314-cp314-musllinux_1_2_s390x.whl", hash = "sha256:0063adad533e57171b79db3943b229d40dfafeeee579767f96541f106bac5f1b"}, - {file = "yarl-1.24.2-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:ee8e3fb34513e8dc082b586ef4910c98335d43a6fab688cd44d4851bacfce3e8"}, - {file = "yarl-1.24.2-cp314-cp314-win_amd64.whl", hash = "sha256:afb00d7fd8e0f285ca29a44cc50df2d622ff2f7a6d933fa641577b5f9d5f3db0"}, - {file = "yarl-1.24.2-cp314-cp314-win_arm64.whl", hash = "sha256:68cf6eacd6028ef1142bc4b48376b81566385ca6f9e7dde3b0fa91be08ffcb57"}, - {file = "yarl-1.24.2-cp314-cp314t-macosx_10_15_universal2.whl", hash = "sha256:221ce1dd921ac4f603957f17d7c18c5cc0797fbb52f156941f92e04605d1d67b"}, - {file = "yarl-1.24.2-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:5f3224db28173a00d7afacdee07045cc4673dfab2b15492c7ae10deddbece761"}, - {file = "yarl-1.24.2-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:c557165320d6244ebe3a02431b2a201a20080e02f41f0cfa0ccc47a183765da8"}, - {file = "yarl-1.24.2-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:904065e6e85b1fa54d0d87438bd58c14c0bad97aad654ad1077fd9d87e8478ed"}, - {file = "yarl-1.24.2-cp314-cp314t-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:8cec2a38d70edc10e0e856ceda886af5327a017ccbde8e1de1bd44d300357543"}, - {file = "yarl-1.24.2-cp314-cp314t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:e7484b9361ed222ee1ca5b4337aa4cbdcc4618ce5aff57d9ef1582fd95893fc0"}, - {file = "yarl-1.24.2-cp314-cp314t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:84f9670b89f34db07f81e53aee83e0b938a3412329d51c8f922488be7fcc4024"}, - {file = "yarl-1.24.2-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:abb2759733d63a28b4956500a5dd57140f26486c92b2caedfb964ab7d9b79dbf"}, - {file = "yarl-1.24.2-cp314-cp314t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:081c2bf54efe03774d0311172bc04fedf9ca01e644d4cd8c805688e527209bdc"}, - {file = "yarl-1.24.2-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:86746bef442aa479107fe28132e1277237f9c24c2f00b0b0cf22b3ee0904f2bb"}, - {file = "yarl-1.24.2-cp314-cp314t-musllinux_1_2_armv7l.whl", hash = "sha256:2d07d21d0bc4b17558e8de0b02fbfdf1e347d3bb3699edd00bb92e7c57925420"}, - {file = "yarl-1.24.2-cp314-cp314t-musllinux_1_2_ppc64le.whl", hash = "sha256:4fb1ac3fc5fecd8ae7453ea237e4d22b49befa70266dfe1629924245c21a0c7f"}, - {file = "yarl-1.24.2-cp314-cp314t-musllinux_1_2_riscv64.whl", hash = "sha256:4da31a5512ed1729ca8d8aacde3f7faeb8843cde3165d6bcf7f88f74f17bb8aa"}, - {file = "yarl-1.24.2-cp314-cp314t-musllinux_1_2_s390x.whl", hash = "sha256:533ded4dceb5f1f3da7906244f4e82cf46cfd40d84c69a1faf5ac506aa65ecbe"}, - {file = "yarl-1.24.2-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:7b3a85525f6e7eeabcfdd372862b21ee1915db1b498a04e8bf0e389b607ff0bd"}, - {file = "yarl-1.24.2-cp314-cp314t-win_amd64.whl", hash = "sha256:a7624b1ca46ca5d7b864ef0d2f8efe3091454085ee1855b4e992314529972215"}, - {file = "yarl-1.24.2-cp314-cp314t-win_arm64.whl", hash = "sha256:e434a45ce2e7a947f951fc5a8944c8cc080b7e59f9c50ae80fd39107cf88126d"}, - {file = "yarl-1.24.2-py3-none-any.whl", hash = "sha256:2783d9226db8797636cd6896e4de81feed252d1db72265686c9558d97a4d94b9"}, - {file = "yarl-1.24.2.tar.gz", hash = "sha256:9ac374123c6fd7abf64d1fec93962b0bd4ee2c19751755a762a72dd96c0378f8"}, + {file = "yarl-1.24.5-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:88f50c94e21a0a7f14042c015b0eba1881af78562e7bf007e0033e624da59750"}, + {file = "yarl-1.24.5-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:6efbccc3d7f75d5b03105172a8dc86d82ba4da86817952529dd93185f4a88be2"}, + {file = "yarl-1.24.5-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:0ebfaffe1a16cb72141c8e09f18cc76856dbe58639f393a4f2b26e474b96b871"}, + {file = "yarl-1.24.5-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:8ac73abdc7ab75610f95a8fd994c6457e87752b02a63987e188f937a1fc180f0"}, + {file = "yarl-1.24.5-cp310-cp310-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:4d97a951a81039050e45f04e96689b58b8243fa5e62aa14fe67cb6075300885e"}, + {file = "yarl-1.24.5-cp310-cp310-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:fe7b7bb170daccbba19ad33012d2b15f1e7942296fd4d45fc1b79013da8cc0f2"}, + {file = "yarl-1.24.5-cp310-cp310-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:89a1bbb58e0e3f7a283653d854b1e95d65e5cfd4af224dac5f02629ec1a3e621"}, + {file = "yarl-1.24.5-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:7fa5e51397466ea7e98de493fa2ff1b8193cfef8a7b0f9b4842f92d342df0dba"}, + {file = "yarl-1.24.5-cp310-cp310-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:4103b77b8a8225e413107d2349b65eb3c1c52627b5cc5c3c4c1c6a798b218950"}, + {file = "yarl-1.24.5-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:f9f3e9c8a9ecffa57bef8fb4fa19e5fa4d2d8307cf6bac5b1fca5e5860f4ba00"}, + {file = "yarl-1.24.5-cp310-cp310-musllinux_1_2_armv7l.whl", hash = "sha256:c0ebc836c47a6477e182169c6a476fc691d12b518894bf7dd2572f0d59f1c7ed"}, + {file = "yarl-1.24.5-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:96d30286dd02679e32a39aa8f0b7498fc847fcda46cfc09df5513e82ce252440"}, + {file = "yarl-1.24.5-cp310-cp310-musllinux_1_2_riscv64.whl", hash = "sha256:fd8c81f346b58f45818d09ea11db69a8d5fd34a224b79871f6d44f12cd7977b1"}, + {file = "yarl-1.24.5-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:5c55256dee8f4b27bfbf636c8363383c7c8db7890c7cba5217d7bd5f5f21dab6"}, + {file = "yarl-1.24.5-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:9f4d8cf085a4c6a40fb97ea0f46938a8df43c85d31f9d45e2a8867ea9293790d"}, + {file = "yarl-1.24.5-cp310-cp310-win_amd64.whl", hash = "sha256:240cbec09667c1fed4c6cd0060b9ec57332427d7441289a2ed8875dc9fb2b224"}, + {file = "yarl-1.24.5-cp310-cp310-win_arm64.whl", hash = "sha256:8a6987eaad834cb32dd57d9d582225f0054a5d1af706ccfbbdba735af4927e13"}, + {file = "yarl-1.24.5-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:2c1fe720934a16ea8e7146175cba2126f87f54912c8c5435e7f7c7a51ef808d3"}, + {file = "yarl-1.24.5-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:c687ed078e145f5fd53a14854beff320e1d2ab76df03e2009c98f39a0f68f39a"}, + {file = "yarl-1.24.5-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:709f1efed56c4a145793c046cd4939f9959bcd818979a787b77d8e09c57a0840"}, + {file = "yarl-1.24.5-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:874019bd513008b009f58657134e5d0c5e030b3559bd0553976837adf52fe966"}, + {file = "yarl-1.24.5-cp311-cp311-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:a4582acf7ef76482f6f511ebaf1946dae7f2e85ec4728b81a678c01df63bd723"}, + {file = "yarl-1.24.5-cp311-cp311-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:2cabe6546e41dabe439999a23fcb5246e0c3b595b4315b96ef755252be90caeb"}, + {file = "yarl-1.24.5-cp311-cp311-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:17f57620f5475b3c69109376cc87e42a7af5db13c9398e4292772a706ff10780"}, + {file = "yarl-1.24.5-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:570fec8fbd22b032733625f03f10b7ff023bc399213db15e72a7acaef28c2f4e"}, + {file = "yarl-1.24.5-cp311-cp311-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:5fede79c6f73ff2c3ef822864cb1ada23196e62756df53bc6231d351a49516a2"}, + {file = "yarl-1.24.5-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:8ccf9aca873b767977c73df497a85dbedee4ee086ae9ae49dc461333b9b79f58"}, + {file = "yarl-1.24.5-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:ad5d8201d310b031e6cd839d9bac2d4e5a01533ce5d3d5b50b7de1ef3af1de61"}, + {file = "yarl-1.24.5-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:841f0852f48fefea3b12c9dfec00704dfa3aef5215d0e3ce564bb3d7cd8d57c6"}, + {file = "yarl-1.24.5-cp311-cp311-musllinux_1_2_riscv64.whl", hash = "sha256:9baafc71b04f8f4bb0703b21d6fc9f0c30b346c636a532ff16ec8491a5ea4b1f"}, + {file = "yarl-1.24.5-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:d897129df1a22b12aeed2c2c98df0785a2e8e6e0bde87b389491d0025c187077"}, + {file = "yarl-1.24.5-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:dd625535328fd9882374356269227670189adfcc6a2d90284f323c05862eecbd"}, + {file = "yarl-1.24.5-cp311-cp311-win_amd64.whl", hash = "sha256:f4239bbec5a3577ddb49e4b50aeb32d8e5792098262ae2f63723f916a29b1a25"}, + {file = "yarl-1.24.5-cp311-cp311-win_arm64.whl", hash = "sha256:3ac6aff147deb9c09461b2d4bbdf6256831198f5d8a23f5d37138213090b6d8a"}, + {file = "yarl-1.24.5-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:d693396e5aea78db03decd60aec9ece16c9b40ba00a587f089615ff4e718a81d"}, + {file = "yarl-1.24.5-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:3363fcc96e665878946ad7a106b9a13eac0541766a690ef287c0232ac768b6ec"}, + {file = "yarl-1.24.5-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:9d399bdcfb4a0f659b9b3788bbc89babe63d9a6a65aacdf4d4e7065ff2e6316c"}, + {file = "yarl-1.24.5-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:90333fd89b43c0d08ac85f3f1447593fc2c66de18c3d6378d7125ea118dc7a54"}, + {file = "yarl-1.24.5-cp312-cp312-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:665b0a2c463cc9423dd647e0bfd9f4ccc9b50f768c55304d5e9f80b177c1de12"}, + {file = "yarl-1.24.5-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:e006d3a974c4ee19512e5f058abedb6eef36a5e553c14812bdeba1758d812e6d"}, + {file = "yarl-1.24.5-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:e7d42c531243450ef0d4d9c172e7ed6ef052640f195629065041b5add4e058d1"}, + {file = "yarl-1.24.5-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:f08c7513ecef5aad65687bfdf6bc601ae9fccd04a42904501f8f7141abad9eb9"}, + {file = "yarl-1.24.5-cp312-cp312-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:6c95b17fe34ed802f17e205112e6e10db92275c34fee290aa9bdc55a9c724027"}, + {file = "yarl-1.24.5-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:56b149b22de33b23b0c6077ab9518c6dcb538ad462e1830e68d06591ccf6e38b"}, + {file = "yarl-1.24.5-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:a8fe66b8f300da93798025a785a5b90b42f3810dc2b72283ff84a41aaaebc293"}, + {file = "yarl-1.24.5-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:377fe3732edbaf78ee74efdf2c9f49f6e99f20e7f9d2649fda3eb4badd77d76e"}, + {file = "yarl-1.24.5-cp312-cp312-musllinux_1_2_riscv64.whl", hash = "sha256:e8ffa78582120024f476a611d7befc123cee59e47e8309d470cf667d806e613b"}, + {file = "yarl-1.24.5-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:daba5e594f06114e37db186efd2dd916609071e59daca901a0a2e71f02b142ce"}, + {file = "yarl-1.24.5-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:65be18ec59496c13908f02a2472751d9ef840b4f3fb5726f129306bf6a2a7bba"}, + {file = "yarl-1.24.5-cp312-cp312-win_amd64.whl", hash = "sha256:a929d878fec099030c292803b31e5d5540a7b6a31e6a3cc76cb4685fc2a2f51b"}, + {file = "yarl-1.24.5-cp312-cp312-win_arm64.whl", hash = "sha256:7ce27823052e2013b597e0c738b13e7e36b8ccb9400df8959417b052ab0fd92c"}, + {file = "yarl-1.24.5-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:79af890482fc94648e8cde4c68620378f7fef60932710fa17a66abc039244da2"}, + {file = "yarl-1.24.5-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:46c2f213e23a04b93a392942d782eb9e413e6ef6bf7c8c53884e599a5c174dcb"}, + {file = "yarl-1.24.5-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:92ab3e11448f2ff7bf53c5a26eff0edc086898ec8b21fb154b85839ce1d88075"}, + {file = "yarl-1.24.5-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ebb0ec7f17803063d5aeb982f3b1bd2b2f4e4fae6751226cbd6ba1fcfe9e63ff"}, + {file = "yarl-1.24.5-cp313-cp313-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:82632daed195dcc8ea664e8556dc9bdbd671960fb3776bd92806ce05792c2448"}, + {file = "yarl-1.24.5-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:53e549287ef628fecba270045c9701b0c564563a9b0577d24a4ec75b8ab8040f"}, + {file = "yarl-1.24.5-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:fcd3b77e2f17bbe4ca56ec7bcb07992647d19d0b9c05d84886dcd6f9eb810afd"}, + {file = "yarl-1.24.5-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:d46b86567dd4e248c6c159fcbcdcce01e0a5c8a7cd2334a0fff759d0fa075b16"}, + {file = "yarl-1.24.5-cp313-cp313-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:7f72c74aa99359e27a2ee8d6613fefa28b5f76a983c083074dfc2aaa4ab46213"}, + {file = "yarl-1.24.5-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:3f45789ce415a7ec0820dc4f82925f9b5f7732070be1dec1f5f23ec381435a24"}, + {file = "yarl-1.24.5-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:6e73e7fe93f17a7b191f52ec9da9dd8c06a8fe735a1ecbd13b97d1c723bff385"}, + {file = "yarl-1.24.5-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:4a36f9becdd4c5c52a20c3e9484128b070b1dcfc8944c006f3a528295a359a9c"}, + {file = "yarl-1.24.5-cp313-cp313-musllinux_1_2_riscv64.whl", hash = "sha256:7bcbe0fcf850eae67b6b01749815a4f7161c560a844c769ad7b48fcd99f791c4"}, + {file = "yarl-1.24.5-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:24e861e9630e0daddcb9191fb187f60f034e17a4426f8101279f0c475cd74144"}, + {file = "yarl-1.24.5-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:9335a099ad87287c37fe5d1a982ff392fa5efe5d14b40a730b1ec1d6a41382b4"}, + {file = "yarl-1.24.5-cp313-cp313-win_amd64.whl", hash = "sha256:2dbe06fc16bc91502bca713704022182e5729861ae00277c3a23354b40929740"}, + {file = "yarl-1.24.5-cp313-cp313-win_arm64.whl", hash = "sha256:6b8536851f9f65e7f00c7a1d49ba7f2be0ffe2c11555367fc9f50d9f842410a1"}, + {file = "yarl-1.24.5-cp314-cp314-macosx_10_15_universal2.whl", hash = "sha256:2729fcfc4f6a596fb0c50f32090400aa9367774ac296a00387e65098c0befa76"}, + {file = "yarl-1.24.5-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:ff330d3c30db4eb6b01d79e29d2d0b407a7ecad39cfd9ec993ece57396a2ec0d"}, + {file = "yarl-1.24.5-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:e42d75862735da90e7fc5a7b23db0c976f737113a54b3c9777a9b665e9cbff75"}, + {file = "yarl-1.24.5-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:a3732e66413163e72508da9eff9ce9d2846fde51fae45d3605393d3e6cd303e9"}, + {file = "yarl-1.24.5-cp314-cp314-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:5b8ee53be440a0cffc991a27be3057e0530122548dbe7c0892df08822fce5ede"}, + {file = "yarl-1.24.5-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:af3aefa655adb5869491fa907e652290386800ae99cc50095cba71e2c6aefdca"}, + {file = "yarl-1.24.5-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:2120b96872df4a117cde97d270bac96aea7cc52205d305cf4611df694a487027"}, + {file = "yarl-1.24.5-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:66410eb6345d467151934b49bfa70fb32f5b35a6140baa40ad97d6436abea2e9"}, + {file = "yarl-1.24.5-cp314-cp314-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:4af7b7e1be0a69bee8210735fe6dcfc38879adfac6d62e789d53ba432d1ffa41"}, + {file = "yarl-1.24.5-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:fa139875ff98ab97da323cfadfaff08900d1ad42f1b5087b0b812a55c5a06373"}, + {file = "yarl-1.24.5-cp314-cp314-musllinux_1_2_armv7l.whl", hash = "sha256:0055afc45e864b92729ac7600e2d102c17bef060647e74bca75fa84d66b9ff36"}, + {file = "yarl-1.24.5-cp314-cp314-musllinux_1_2_ppc64le.whl", hash = "sha256:f0e466ed7511fe9d459a819edbc6c2585c0b6eabde9fa8a8947552468a7a6ef0"}, + {file = "yarl-1.24.5-cp314-cp314-musllinux_1_2_riscv64.whl", hash = "sha256:f141474e85b7e54998ec5180530a7cda99ab29e282fa50e0756d89981a9b43c5"}, + {file = "yarl-1.24.5-cp314-cp314-musllinux_1_2_s390x.whl", hash = "sha256:e2935f8c39e3b03e83519292d78f075189978f3f4adc15a78144c7c8e2a1cba5"}, + {file = "yarl-1.24.5-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:9d1216a7f6f77836617dba35687c5b78a4170afc3c3f18fc788f785ba26565c4"}, + {file = "yarl-1.24.5-cp314-cp314-win_amd64.whl", hash = "sha256:5ba4f78df2bcc19f764a4b26a8a4f5049c110090ad5825993aacb052bf8003ad"}, + {file = "yarl-1.24.5-cp314-cp314-win_arm64.whl", hash = "sha256:9e4e16c73d717c5cf27626c524d0a2e261ad20e46932b2670f64ad5dde23e26f"}, + {file = "yarl-1.24.5-cp314-cp314t-macosx_10_15_universal2.whl", hash = "sha256:e1ae548a9d901adca07899a4147a7c826bbcc06239d3ce9a59f57886a28a4c88"}, + {file = "yarl-1.24.5-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:ff405d91509d88e8d44129cd87b18d70acd1f0c1aeabd7bc3c46792b1fe2acba"}, + {file = "yarl-1.24.5-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:47e98aab9d8d82ff682e7b0b5dded33bf138a32b817fcf7fa3b27b2d7c412928"}, + {file = "yarl-1.24.5-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:f0a658a6d3fafee5c6f63c58f3e785c8c43c93fbc02bf9f2b6663f8185e0971f"}, + {file = "yarl-1.24.5-cp314-cp314t-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:4377407001ca3c057773f44d8ddd6358fa5f691407c1ba92210bd3cf8d9e4c95"}, + {file = "yarl-1.24.5-cp314-cp314t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:7c0494a31a1ac5461a226e7947a9c9b78c44e1dc7185164fa7e9651557a5d9bc"}, + {file = "yarl-1.24.5-cp314-cp314t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:a7cff474ab7cd149765bb784cf6d78b32e18e20473fb7bda860bce98ab58e9da"}, + {file = "yarl-1.24.5-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:cbb833ccacdb5519eff9b8b71ee618cc2801c878e77e288775d77c3a2ced858a"}, + {file = "yarl-1.24.5-cp314-cp314t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:82f75e05912e84b7a0fe57075d9c59de3cb352b928330f2eb69b2e1f54c3e1f0"}, + {file = "yarl-1.24.5-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:16a2f5010280020e90f5330257e6944bc33e73593b136cc5a241e6c1dc292498"}, + {file = "yarl-1.24.5-cp314-cp314t-musllinux_1_2_armv7l.whl", hash = "sha256:ffcd54362564dc1a30fb74d8b8a6e5a6b11ebd5e27266adc3b7427a21a6c9104"}, + {file = "yarl-1.24.5-cp314-cp314t-musllinux_1_2_ppc64le.whl", hash = "sha256:0465ec8cedc2349b97a6b595ace64084a50c6e839eca40aa0626f38b8350e331"}, + {file = "yarl-1.24.5-cp314-cp314t-musllinux_1_2_riscv64.whl", hash = "sha256:4db9aecb141cb7a5447171b57aa1ed3a8fee06af40b992ffc31206c0b0121550"}, + {file = "yarl-1.24.5-cp314-cp314t-musllinux_1_2_s390x.whl", hash = "sha256:f540c013589084679a6c7fac07096b10159737918174f5dfc5e11bf5bca4dfe6"}, + {file = "yarl-1.24.5-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:a61834fb15d81322d872eaafd333838ae7c9cea84067f232656f75965933d047"}, + {file = "yarl-1.24.5-cp314-cp314t-win_amd64.whl", hash = "sha256:5c88e5815a49d289e599f3513aa7fde0bc2092ff188f99c940f007f90f53d104"}, + {file = "yarl-1.24.5-cp314-cp314t-win_arm64.whl", hash = "sha256:cf139c02f5f23ef6532040a30ff662c00a318c952334f211046b8e60b7f17688"}, + {file = "yarl-1.24.5-py3-none-any.whl", hash = "sha256:a33700d13d9b7d84fd10947b09ff69fb9a792e519c8cb9764a3ca70baa6c23a7"}, + {file = "yarl-1.24.5.tar.gz", hash = "sha256:e81b83143bee16329c23db3c1b2d82b29892fcbcb849186d2f6e98a5abe9a57f"}, ] -markers = {main = "extra == \"aiohttp\""} [package.dependencies] idna = ">=2.0" @@ -1596,11 +1461,9 @@ multidict = ">=4.0" propcache = ">=0.2.1" [extras] -aiohttp = ["httpx-aiohttp"] -datastream = ["wasmtime", "websockets"] -rulesengine = ["wasmtime"] +aiohttp = ["aiohttp", "httpx-aiohttp"] [metadata] lock-version = "2.1" python-versions = "^3.10" -content-hash = "d12f2b0714d21d258fab37327fffd7eed95cbda40524b341fc8e0479072c5342" +content-hash = "ae72458cc9170491280c32063e114504d6d14e4e72794aefcc730f6d72478732" diff --git a/reference.md b/reference.md index b52a43b..38730d7 100644 --- a/reference.md +++ b/reference.md @@ -7168,6 +7168,1009 @@ client.credits.count_credit_event_ledger( + + + + +## catalogs +
client.catalogs.list_catalogs(...) -> ListCatalogsResponse +
+
+ +#### 🔌 Usage + +
+
+ +
+
+ +```python +from schematic import Schematic +from schematic.environment import SchematicEnvironment + +client = Schematic( + api_key="", + environment=SchematicEnvironment.DEFAULT, +) + +client.catalogs.list_catalogs( + is_default=True, + q="q", + limit=1000000, + offset=1000000, +) + +``` +
+
+
+
+ +#### ⚙️ Parameters + +
+
+ +
+
+ +**is_default:** `typing.Optional[bool]` + +
+
+ +
+
+ +**q:** `typing.Optional[str]` — Search by catalog name + +
+
+ +
+
+ +**limit:** `typing.Optional[int]` — Page limit (default 100) + +
+
+ +
+
+ +**offset:** `typing.Optional[int]` — Page offset (default 0) + +
+
+ +
+
+ +**request_options:** `typing.Optional[RequestOptions]` — Request-specific configuration. + +
+
+
+
+ + +
+
+
+ +
client.catalogs.create_catalog(...) -> CreateCatalogResponse +
+
+ +#### 🔌 Usage + +
+
+ +
+
+ +```python +from schematic import Schematic +from schematic.environment import SchematicEnvironment + +client = Schematic( + api_key="", + environment=SchematicEnvironment.DEFAULT, +) + +client.catalogs.create_catalog( + is_default=True, + name="name", +) + +``` +
+
+
+
+ +#### ⚙️ Parameters + +
+
+ +
+
+ +**is_default:** `bool` + +
+
+ +
+
+ +**name:** `str` + +
+
+ +
+
+ +**description:** `typing.Optional[str]` + +
+
+ +
+
+ +**request_options:** `typing.Optional[RequestOptions]` — Request-specific configuration. + +
+
+
+
+ + +
+
+
+ +
client.catalogs.get_catalog(...) -> GetCatalogResponse +
+
+ +#### 🔌 Usage + +
+
+ +
+
+ +```python +from schematic import Schematic +from schematic.environment import SchematicEnvironment + +client = Schematic( + api_key="", + environment=SchematicEnvironment.DEFAULT, +) + +client.catalogs.get_catalog( + catalog_id="catalog_id", +) + +``` +
+
+
+
+ +#### ⚙️ Parameters + +
+
+ +
+
+ +**catalog_id:** `str` — catalog_id + +
+
+ +
+
+ +**request_options:** `typing.Optional[RequestOptions]` — Request-specific configuration. + +
+
+
+
+ + +
+
+
+ +
client.catalogs.update_catalog(...) -> UpdateCatalogResponse +
+
+ +#### 🔌 Usage + +
+
+ +
+
+ +```python +from schematic import Schematic +from schematic.environment import SchematicEnvironment + +client = Schematic( + api_key="", + environment=SchematicEnvironment.DEFAULT, +) + +client.catalogs.update_catalog( + catalog_id="catalog_id", +) + +``` +
+
+
+
+ +#### ⚙️ Parameters + +
+
+ +
+
+ +**catalog_id:** `str` — catalog_id + +
+
+ +
+
+ +**description:** `typing.Optional[str]` + +
+
+ +
+
+ +**is_default:** `typing.Optional[bool]` + +
+
+ +
+
+ +**name:** `typing.Optional[str]` + +
+
+ +
+
+ +**request_options:** `typing.Optional[RequestOptions]` — Request-specific configuration. + +
+
+
+
+ + +
+
+
+ +
client.catalogs.delete_catalog(...) -> DeleteCatalogResponse +
+
+ +#### 🔌 Usage + +
+
+ +
+
+ +```python +from schematic import Schematic +from schematic.environment import SchematicEnvironment + +client = Schematic( + api_key="", + environment=SchematicEnvironment.DEFAULT, +) + +client.catalogs.delete_catalog( + catalog_id="catalog_id", +) + +``` +
+
+
+
+ +#### ⚙️ Parameters + +
+
+ +
+
+ +**catalog_id:** `str` — catalog_id + +
+
+ +
+
+ +**request_options:** `typing.Optional[RequestOptions]` — Request-specific configuration. + +
+
+
+
+ + +
+
+
+ +
client.catalogs.get_configuration(...) -> GetConfigurationResponse +
+
+ +#### 🔌 Usage + +
+
+ +
+
+ +```python +from schematic import Schematic +from schematic.environment import SchematicEnvironment + +client = Schematic( + api_key="", + environment=SchematicEnvironment.DEFAULT, +) + +client.catalogs.get_configuration( + catalog_id="catalog_id", +) + +``` +
+
+
+
+ +#### ⚙️ Parameters + +
+
+ +
+
+ +**catalog_id:** `str` — catalog_id + +
+
+ +
+
+ +**request_options:** `typing.Optional[RequestOptions]` — Request-specific configuration. + +
+
+
+
+ + +
+
+
+ +
client.catalogs.update_configuration(...) -> UpdateConfigurationResponse +
+
+ +#### 🔌 Usage + +
+
+ +
+
+ +```python +from schematic import Schematic +from schematic.environment import SchematicEnvironment + +client = Schematic( + api_key="", + environment=SchematicEnvironment.DEFAULT, +) + +client.catalogs.update_configuration( + catalog_id="catalog_id", +) + +``` +
+
+
+
+ +#### ⚙️ Parameters + +
+
+ +
+
+ +**catalog_id:** `str` — catalog_id + +
+
+ +
+
+ +**custom_plan_cta_text:** `typing.Optional[str]` + +
+
+ +
+
+ +**custom_plan_cta_url:** `typing.Optional[str]` + +
+
+ +
+
+ +**custom_plan_price_text:** `typing.Optional[str]` + +
+
+ +
+
+ +**custom_plans_visible:** `typing.Optional[bool]` + +
+
+ +
+
+ +**ordered_add_ons:** `typing.Optional[typing.List[CatalogConfigOrderedPlan]]` + +
+
+ +
+
+ +**ordered_bundles:** `typing.Optional[typing.List[CatalogConfigOrderedBundle]]` + +
+
+ +
+
+ +**ordered_plans:** `typing.Optional[typing.List[CatalogConfigOrderedPlan]]` + +
+
+ +
+
+ +**pricing_model:** `typing.Optional[str]` + +
+
+ +
+
+ +**pricing_url:** `typing.Optional[str]` + +
+
+ +
+
+ +**request_options:** `typing.Optional[RequestOptions]` — Request-specific configuration. + +
+
+
+
+ + +
+
+
+ +
client.catalogs.get_credit_bundles_in_catalog(...) -> GetCreditBundlesInCatalogResponse +
+
+ +#### 🔌 Usage + +
+
+ +
+
+ +```python +from schematic import Schematic +from schematic.environment import SchematicEnvironment + +client = Schematic( + api_key="", + environment=SchematicEnvironment.DEFAULT, +) + +client.catalogs.get_credit_bundles_in_catalog( + catalog_id="catalog_id", +) + +``` +
+
+
+
+ +#### ⚙️ Parameters + +
+
+ +
+
+ +**catalog_id:** `str` — catalog_id + +
+
+ +
+
+ +**request_options:** `typing.Optional[RequestOptions]` — Request-specific configuration. + +
+
+
+
+ + +
+
+
+ +
client.catalogs.add_credit_bundle(...) +
+
+ +#### 🔌 Usage + +
+
+ +
+
+ +```python +from schematic import Schematic +from schematic.environment import SchematicEnvironment + +client = Schematic( + api_key="", + environment=SchematicEnvironment.DEFAULT, +) + +client.catalogs.add_credit_bundle( + catalog_id="catalog_id", + credit_bundle_id="credit_bundle_id", +) + +``` +
+
+
+
+ +#### ⚙️ Parameters + +
+
+ +
+
+ +**catalog_id:** `str` — catalog_id + +
+
+ +
+
+ +**credit_bundle_id:** `str` — credit_bundle_id + +
+
+ +
+
+ +**request_options:** `typing.Optional[RequestOptions]` — Request-specific configuration. + +
+
+
+
+ + +
+
+
+ +
client.catalogs.remove_credit_bundle(...) +
+
+ +#### 🔌 Usage + +
+
+ +
+
+ +```python +from schematic import Schematic +from schematic.environment import SchematicEnvironment + +client = Schematic( + api_key="", + environment=SchematicEnvironment.DEFAULT, +) + +client.catalogs.remove_credit_bundle( + catalog_id="catalog_id", + credit_bundle_id="credit_bundle_id", +) + +``` +
+
+
+
+ +#### ⚙️ Parameters + +
+
+ +
+
+ +**catalog_id:** `str` — catalog_id + +
+
+ +
+
+ +**credit_bundle_id:** `str` — credit_bundle_id + +
+
+ +
+
+ +**request_options:** `typing.Optional[RequestOptions]` — Request-specific configuration. + +
+
+
+
+ + +
+
+
+ +
client.catalogs.get_derived_features(...) -> GetDerivedFeaturesResponse +
+
+ +#### 🔌 Usage + +
+
+ +
+
+ +```python +from schematic import Schematic +from schematic.environment import SchematicEnvironment + +client = Schematic( + api_key="", + environment=SchematicEnvironment.DEFAULT, +) + +client.catalogs.get_derived_features( + catalog_id="catalog_id", +) + +``` +
+
+
+
+ +#### ⚙️ Parameters + +
+
+ +
+
+ +**catalog_id:** `str` — catalog_id + +
+
+ +
+
+ +**request_options:** `typing.Optional[RequestOptions]` — Request-specific configuration. + +
+
+
+
+ + +
+
+
+ +
client.catalogs.get_plans_in_catalog(...) -> GetPlansInCatalogResponse +
+
+ +#### 🔌 Usage + +
+
+ +
+
+ +```python +from schematic import Schematic +from schematic.environment import SchematicEnvironment + +client = Schematic( + api_key="", + environment=SchematicEnvironment.DEFAULT, +) + +client.catalogs.get_plans_in_catalog( + catalog_id="catalog_id", +) + +``` +
+
+
+
+ +#### ⚙️ Parameters + +
+
+ +
+
+ +**catalog_id:** `str` — catalog_id + +
+
+ +
+
+ +**request_options:** `typing.Optional[RequestOptions]` — Request-specific configuration. + +
+
+
+
+ + +
+
+
+ +
client.catalogs.add_plan(...) +
+
+ +#### 🔌 Usage + +
+
+ +
+
+ +```python +from schematic import Schematic +from schematic.environment import SchematicEnvironment + +client = Schematic( + api_key="", + environment=SchematicEnvironment.DEFAULT, +) + +client.catalogs.add_plan( + catalog_id="catalog_id", + plan_id="plan_id", +) + +``` +
+
+
+
+ +#### ⚙️ Parameters + +
+
+ +
+
+ +**catalog_id:** `str` — catalog_id + +
+
+ +
+
+ +**plan_id:** `str` — plan_id + +
+
+ +
+
+ +**request_options:** `typing.Optional[RequestOptions]` — Request-specific configuration. + +
+
+
+
+ + +
+
+
+ +
client.catalogs.remove_plan(...) +
+
+ +#### 🔌 Usage + +
+
+ +
+
+ +```python +from schematic import Schematic +from schematic.environment import SchematicEnvironment + +client = Schematic( + api_key="", + environment=SchematicEnvironment.DEFAULT, +) + +client.catalogs.remove_plan( + catalog_id="catalog_id", + plan_id="plan_id", +) + +``` +
+
+
+
+ +#### ⚙️ Parameters + +
+
+ +
+
+ +**catalog_id:** `str` — catalog_id + +
+
+ +
+
+ +**plan_id:** `str` — plan_id + +
+
+ +
+
+ +**request_options:** `typing.Optional[RequestOptions]` — Request-specific configuration. + +
+
+
+
+ +
@@ -15984,6 +16987,73 @@ client.components.delete_component( + + + + +
client.components.bind_catalog(...) -> BindCatalogResponse +
+
+ +#### 🔌 Usage + +
+
+ +
+
+ +```python +from schematic import Schematic +from schematic.environment import SchematicEnvironment + +client = Schematic( + api_key="", + environment=SchematicEnvironment.DEFAULT, +) + +client.components.bind_catalog( + component_id="component_id", +) + +``` +
+
+
+
+ +#### ⚙️ Parameters + +
+
+ +
+
+ +**component_id:** `str` — component_id + +
+
+ +
+
+ +**catalog_id:** `typing.Optional[str]` + +
+
+ +
+
+ +**request_options:** `typing.Optional[RequestOptions]` — Request-specific configuration. + +
+
+
+
+ +
@@ -16193,6 +17263,14 @@ client.planbundle.create_custom_plan_bundle(
+**credit_grants:** `typing.Optional[typing.List[PlanBundleCreditGrantRequestBody]]` + +
+
+ +
+
+ **plan:** `typing.Optional[CreateCustomPlanBundlePlanRequestBody]`
@@ -16405,6 +17483,92 @@ client.planbundle.update_plan_bundle( ## dataexports +
client.dataexports.list_data_exports(...) -> ListDataExportsResponse +
+
+ +#### 🔌 Usage + +
+
+ +
+
+ +```python +from schematic import Schematic +from schematic.environment import SchematicEnvironment + +client = Schematic( + api_key="", + environment=SchematicEnvironment.DEFAULT, +) + +client.dataexports.list_data_exports( + export_type="audit-log", + status="failure", + limit=1000000, + offset=1000000, +) + +``` +
+
+
+
+ +#### ⚙️ Parameters + +
+
+ +
+
+ +**export_type:** `typing.Optional[DataExportType]` + +
+
+ +
+
+ +**status:** `typing.Optional[DataExportStatus]` + +
+
+ +
+
+ +**limit:** `typing.Optional[int]` — Page limit (default 100) + +
+
+ +
+
+ +**offset:** `typing.Optional[int]` — Page offset (default 0) + +
+
+ +
+
+ +**request_options:** `typing.Optional[RequestOptions]` — Request-specific configuration. + +
+
+
+
+ + +
+
+
+
client.dataexports.create_data_export(...) -> CreateDataExportResponse
@@ -16427,7 +17591,8 @@ client = Schematic( ) client.dataexports.create_data_export( - metadata="metadata", + export_type="audit-log", + output_file_type="csv", ) ``` @@ -16452,7 +17617,7 @@ client.dataexports.create_data_export(
-**metadata:** `str` +**output_file_type:** `DataExportOutputFileType`
@@ -16460,7 +17625,66 @@ client.dataexports.create_data_export(
-**output_file_type:** `DataExportOutputFileType` +**metadata:** `typing.Optional[DataExportMetadata]` + +
+
+ +
+
+ +**request_options:** `typing.Optional[RequestOptions]` — Request-specific configuration. + +
+
+
+
+ + + +
+ + +
client.dataexports.get_data_export(...) -> GetDataExportResponse +
+
+ +#### 🔌 Usage + +
+
+ +
+
+ +```python +from schematic import Schematic +from schematic.environment import SchematicEnvironment + +client = Schematic( + api_key="", + environment=SchematicEnvironment.DEFAULT, +) + +client.dataexports.get_data_export( + data_export_id="data_export_id", +) + +``` +
+
+
+
+ +#### ⚙️ Parameters + +
+
+ +
+
+ +**data_export_id:** `str` — data_export_id
diff --git a/src/schematic/__init__.py b/src/schematic/__init__.py index 1551ca5..c7255a6 100644 --- a/src/schematic/__init__.py +++ b/src/schematic/__init__.py @@ -18,6 +18,7 @@ ApiKeyIntegrationResponseData, ApiKeyResponseData, ApiKeyScope, + AuditLogExportMetadata, AuditLogListResponseData, AuditLogResponseData, BillingCouponResponseData, @@ -68,6 +69,18 @@ BillingTiersMode, CaptureRawEvent, CaptureRawEventBatch, + CatalogConfigOrderedBundle, + CatalogConfigOrderedBundleResponseData, + CatalogConfigOrderedEntitlement, + CatalogConfigOrderedEntitlementResponseData, + CatalogConfigOrderedPlan, + CatalogConfigOrderedPlanResponseData, + CatalogConfigurationResponseData, + CatalogCreditBundleIDsResponseData, + CatalogDerivedFeatureResponseData, + CatalogDerivedFeaturesResponseData, + CatalogPlanIDsResponseData, + CatalogResponseData, ChangeSubscriptionInternalRequestBody, ChangeSubscriptionRequestBody, ChargeType, @@ -89,6 +102,7 @@ CompanyCreditBalanceResponseData, CompanyDetailResponseData, CompanyEventPeriodMetricsResponseData, + CompanyFeatureUsageExportMetadata, CompanyLedgerResponseData, CompanyMatchingCriteria, CompanyMembershipDetailResponseData, @@ -167,6 +181,9 @@ CustomPlanConfig, CustomPlanViewConfigResponseData, DataEventPayload, + DataExportMetadata, + DataExportMetadata_AuditLog, + DataExportMetadata_CompanyFeatureUsage, DataExportOutputFileType, DataExportResponseData, DataExportStatus, @@ -268,6 +285,7 @@ PlanBundleCreditGrantRequestBody, PlanBundleEntitlementRequestBody, PlanBundleResponseData, + PlanCatalogMembershipResponseData, PlanChangeAction, PlanChangeBasePlanAction, PlanChangeResponseData, @@ -305,6 +323,7 @@ PreviewObject, PreviewObjectResponseData, PreviewSubscriptionChangeResponseData, + PreviewSubscriptionDiscountResponseData, PreviewSubscriptionFinanceResponseData, PreviewSubscriptionUpcomingInvoiceLineItems, ProrationBehavior, @@ -343,6 +362,7 @@ RulesengineTraitDefinition, RulesengineTraitDefinitionComparableType, RulesengineUser, + RulesengineWarningTier, ScheduledCheckoutResponseData, ScheduledCheckoutStatus, ScheduledDowngradeConfigBehavior, @@ -385,6 +405,7 @@ UsageTimeSeriesPointResponseData, UserDetailResponseData, UserResponseData, + WarningTier, WarningTierRequestBody, WarningTierResponseData, WebFeatureUsageWebhookOutput, @@ -404,6 +425,7 @@ accesstokens, accounts, billing, + catalogs, checkout, companies, components, @@ -488,6 +510,19 @@ UpsertInvoiceResponse, UpsertPaymentMethodResponse, ) + from .catalogs import ( + CreateCatalogResponse, + DeleteCatalogResponse, + GetCatalogResponse, + GetConfigurationResponse, + GetCreditBundlesInCatalogResponse, + GetDerivedFeaturesResponse, + GetPlansInCatalogResponse, + ListCatalogsParams, + ListCatalogsResponse, + UpdateCatalogResponse, + UpdateConfigurationResponse, + ) from .checkout import ( CancelSubscriptionResponse, CheckoutInternalResponse, @@ -558,6 +593,7 @@ UpsertUserTraitResponse, ) from .components import ( + BindCatalogResponse, CountComponentsParams, CountComponentsResponse, CreateComponentResponse, @@ -616,7 +652,12 @@ UpdateCreditBundleDetailsResponse, ZeroOutGrantResponse, ) - from .dataexports import CreateDataExportResponse + from .dataexports import ( + CreateDataExportResponse, + GetDataExportResponse, + ListDataExportsParams, + ListDataExportsResponse, + ) from .entitlements import ( CountCompanyOverridesParams, CountCompanyOverridesResponse, @@ -796,6 +837,7 @@ "AssumeStripeInstalledResponse": ".integrationsapi", "AsyncSchematic": ".client", "AsyncSchematicConfig": ".client", + "AuditLogExportMetadata": ".types", "AuditLogListResponseData": ".types", "AuditLogResponseData": ".types", "BadRequestError": ".errors", @@ -845,9 +887,22 @@ "BillingSubscriptionTrialEndSetting": ".types", "BillingSubscriptionView": ".types", "BillingTiersMode": ".types", + "BindCatalogResponse": ".components", "CancelSubscriptionResponse": ".checkout", "CaptureRawEvent": ".types", "CaptureRawEventBatch": ".types", + "CatalogConfigOrderedBundle": ".types", + "CatalogConfigOrderedBundleResponseData": ".types", + "CatalogConfigOrderedEntitlement": ".types", + "CatalogConfigOrderedEntitlementResponseData": ".types", + "CatalogConfigOrderedPlan": ".types", + "CatalogConfigOrderedPlanResponseData": ".types", + "CatalogConfigurationResponseData": ".types", + "CatalogCreditBundleIDsResponseData": ".types", + "CatalogDerivedFeatureResponseData": ".types", + "CatalogDerivedFeaturesResponseData": ".types", + "CatalogPlanIDsResponseData": ".types", + "CatalogResponseData": ".types", "ChangeSubscriptionInternalRequestBody": ".types", "ChangeSubscriptionRequestBody": ".types", "ChargeType": ".types", @@ -873,6 +928,7 @@ "CompanyCreditBalanceResponseData": ".types", "CompanyDetailResponseData": ".types", "CompanyEventPeriodMetricsResponseData": ".types", + "CompanyFeatureUsageExportMetadata": ".types", "CompanyLedgerResponseData": ".types", "CompanyMatchingCriteria": ".types", "CompanyMembershipDetailResponseData": ".types", @@ -971,6 +1027,7 @@ "CreateBillingPlanCreditGrantRequestBody": ".types", "CreateBillingPlanCreditGrantResponse": ".credits", "CreateBillingPriceTierRequestBody": ".types", + "CreateCatalogResponse": ".catalogs", "CreateCompanyOverrideResponse": ".entitlements", "CreateCompanyResponse": ".companies", "CreateComponentResponse": ".components", @@ -1034,6 +1091,9 @@ "CustomPlanConfig": ".types", "CustomPlanViewConfigResponseData": ".types", "DataEventPayload": ".types", + "DataExportMetadata": ".types", + "DataExportMetadata_AuditLog": ".types", + "DataExportMetadata_CompanyFeatureUsage": ".types", "DataExportOutputFileType": ".types", "DataExportResponseData": ".types", "DataExportStatus": ".types", @@ -1049,6 +1109,7 @@ "DeleteBillingPlanCreditGrantRequestBody": ".types", "DeleteBillingPlanCreditGrantResponse": ".credits", "DeleteBillingProductResponse": ".billing", + "DeleteCatalogResponse": ".catalogs", "DeleteCompanyByKeysResponse": ".companies", "DeleteCompanyMembershipResponse": ".companies", "DeleteCompanyOverrideResponse": ".entitlements", @@ -1133,13 +1194,18 @@ "GetAuditLogResponse": ".accounts", "GetBillingEntityChildSubscriptionsParams": ".companies", "GetBillingEntityChildSubscriptionsResponse": ".companies", + "GetCatalogResponse": ".catalogs", "GetCheckoutDataResponse": ".checkout", "GetCompanyBillingEntityParams": ".companies", "GetCompanyBillingEntityResponse": ".companies", "GetCompanyOverrideResponse": ".entitlements", "GetCompanyResponse": ".companies", "GetComponentResponse": ".components", + "GetConfigurationResponse": ".catalogs", "GetCreditBundleResponse": ".credits", + "GetCreditBundlesInCatalogResponse": ".catalogs", + "GetDataExportResponse": ".dataexports", + "GetDerivedFeaturesResponse": ".catalogs", "GetEntityTraitDefinitionResponse": ".companies", "GetEntityTraitValuesParams": ".companies", "GetEntityTraitValuesResponse": ".companies", @@ -1170,6 +1236,7 @@ "GetPlanParams": ".plans", "GetPlanResponse": ".plans", "GetPlanTraitResponse": ".companies", + "GetPlansInCatalogResponse": ".catalogs", "GetPublicPlansResponse": ".componentspublic", "GetScheduledCheckoutResponse": ".scheduledcheckout", "GetSegmentIntegrationStatusResponse": ".events", @@ -1229,6 +1296,8 @@ "ListBillingProductPricesResponse": ".billing", "ListBillingProductsParams": ".billing", "ListBillingProductsResponse": ".billing", + "ListCatalogsParams": ".catalogs", + "ListCatalogsResponse": ".catalogs", "ListCompaniesParams": ".companies", "ListCompaniesResponse": ".companies", "ListCompanyCreditBalancesParams": ".credits", @@ -1253,6 +1322,8 @@ "ListCustomPlanBillingsResponse": ".plans", "ListCustomersWithSubscriptionsParams": ".billing", "ListCustomersWithSubscriptionsResponse": ".billing", + "ListDataExportsParams": ".dataexports", + "ListDataExportsResponse": ".dataexports", "ListEntityKeyDefinitionsParams": ".companies", "ListEntityKeyDefinitionsResponse": ".companies", "ListEntityTraitDefinitionsParams": ".companies", @@ -1328,6 +1399,7 @@ "PlanBundleCreditGrantRequestBody": ".types", "PlanBundleEntitlementRequestBody": ".types", "PlanBundleResponseData": ".types", + "PlanCatalogMembershipResponseData": ".types", "PlanChangeAction": ".types", "PlanChangeBasePlanAction": ".types", "PlanChangeResponseData": ".types", @@ -1369,6 +1441,7 @@ "PreviewObject": ".types", "PreviewObjectResponseData": ".types", "PreviewSubscriptionChangeResponseData": ".types", + "PreviewSubscriptionDiscountResponseData": ".types", "PreviewSubscriptionFinanceResponseData": ".types", "PreviewSubscriptionUpcomingInvoiceLineItems": ".types", "ProrationBehavior": ".types", @@ -1413,6 +1486,7 @@ "RulesengineTraitDefinition": ".types", "RulesengineTraitDefinitionComparableType": ".types", "RulesengineUser": ".types", + "RulesengineWarningTier": ".types", "RunIntegrationResponse": ".integrationsapi", "ScheduledCheckoutResponseData": ".types", "ScheduledCheckoutStatus": ".types", @@ -1451,9 +1525,11 @@ "UpdateBillingCreditResponse": ".credits", "UpdateBillingPlanCreditGrantRequestBody": ".types", "UpdateBillingPlanCreditGrantResponse": ".credits", + "UpdateCatalogResponse": ".catalogs", "UpdateCompanyOverrideResponse": ".entitlements", "UpdateCompanyPlansResponse": ".plans", "UpdateComponentResponse": ".components", + "UpdateConfigurationResponse": ".catalogs", "UpdateCreditBundleDetailsResponse": ".credits", "UpdateCreditBundleRequestBody": ".types", "UpdateCustomerSubscriptionTrialEndResponse": ".checkout", @@ -1500,6 +1576,7 @@ "UsageTimeSeriesPointResponseData": ".types", "UserDetailResponseData": ".types", "UserResponseData": ".types", + "WarningTier": ".types", "WarningTierRequestBody": ".types", "WarningTierResponseData": ".types", "WebFeatureUsageWebhookOutput": ".types", @@ -1518,6 +1595,7 @@ "accesstokens": ".accesstokens", "accounts": ".accounts", "billing": ".billing", + "catalogs": ".catalogs", "checkout": ".checkout", "companies": ".companies", "components": ".components", @@ -1575,6 +1653,7 @@ def __dir__(): "AssumeStripeInstalledResponse", "AsyncSchematic", "AsyncSchematicConfig", + "AuditLogExportMetadata", "AuditLogListResponseData", "AuditLogResponseData", "BadRequestError", @@ -1624,9 +1703,22 @@ def __dir__(): "BillingSubscriptionTrialEndSetting", "BillingSubscriptionView", "BillingTiersMode", + "BindCatalogResponse", "CancelSubscriptionResponse", "CaptureRawEvent", "CaptureRawEventBatch", + "CatalogConfigOrderedBundle", + "CatalogConfigOrderedBundleResponseData", + "CatalogConfigOrderedEntitlement", + "CatalogConfigOrderedEntitlementResponseData", + "CatalogConfigOrderedPlan", + "CatalogConfigOrderedPlanResponseData", + "CatalogConfigurationResponseData", + "CatalogCreditBundleIDsResponseData", + "CatalogDerivedFeatureResponseData", + "CatalogDerivedFeaturesResponseData", + "CatalogPlanIDsResponseData", + "CatalogResponseData", "ChangeSubscriptionInternalRequestBody", "ChangeSubscriptionRequestBody", "ChargeType", @@ -1652,6 +1744,7 @@ def __dir__(): "CompanyCreditBalanceResponseData", "CompanyDetailResponseData", "CompanyEventPeriodMetricsResponseData", + "CompanyFeatureUsageExportMetadata", "CompanyLedgerResponseData", "CompanyMatchingCriteria", "CompanyMembershipDetailResponseData", @@ -1750,6 +1843,7 @@ def __dir__(): "CreateBillingPlanCreditGrantRequestBody", "CreateBillingPlanCreditGrantResponse", "CreateBillingPriceTierRequestBody", + "CreateCatalogResponse", "CreateCompanyOverrideResponse", "CreateCompanyResponse", "CreateComponentResponse", @@ -1813,6 +1907,9 @@ def __dir__(): "CustomPlanConfig", "CustomPlanViewConfigResponseData", "DataEventPayload", + "DataExportMetadata", + "DataExportMetadata_AuditLog", + "DataExportMetadata_CompanyFeatureUsage", "DataExportOutputFileType", "DataExportResponseData", "DataExportStatus", @@ -1828,6 +1925,7 @@ def __dir__(): "DeleteBillingPlanCreditGrantRequestBody", "DeleteBillingPlanCreditGrantResponse", "DeleteBillingProductResponse", + "DeleteCatalogResponse", "DeleteCompanyByKeysResponse", "DeleteCompanyMembershipResponse", "DeleteCompanyOverrideResponse", @@ -1912,13 +2010,18 @@ def __dir__(): "GetAuditLogResponse", "GetBillingEntityChildSubscriptionsParams", "GetBillingEntityChildSubscriptionsResponse", + "GetCatalogResponse", "GetCheckoutDataResponse", "GetCompanyBillingEntityParams", "GetCompanyBillingEntityResponse", "GetCompanyOverrideResponse", "GetCompanyResponse", "GetComponentResponse", + "GetConfigurationResponse", "GetCreditBundleResponse", + "GetCreditBundlesInCatalogResponse", + "GetDataExportResponse", + "GetDerivedFeaturesResponse", "GetEntityTraitDefinitionResponse", "GetEntityTraitValuesParams", "GetEntityTraitValuesResponse", @@ -1949,6 +2052,7 @@ def __dir__(): "GetPlanParams", "GetPlanResponse", "GetPlanTraitResponse", + "GetPlansInCatalogResponse", "GetPublicPlansResponse", "GetScheduledCheckoutResponse", "GetSegmentIntegrationStatusResponse", @@ -2008,6 +2112,8 @@ def __dir__(): "ListBillingProductPricesResponse", "ListBillingProductsParams", "ListBillingProductsResponse", + "ListCatalogsParams", + "ListCatalogsResponse", "ListCompaniesParams", "ListCompaniesResponse", "ListCompanyCreditBalancesParams", @@ -2032,6 +2138,8 @@ def __dir__(): "ListCustomPlanBillingsResponse", "ListCustomersWithSubscriptionsParams", "ListCustomersWithSubscriptionsResponse", + "ListDataExportsParams", + "ListDataExportsResponse", "ListEntityKeyDefinitionsParams", "ListEntityKeyDefinitionsResponse", "ListEntityTraitDefinitionsParams", @@ -2107,6 +2215,7 @@ def __dir__(): "PlanBundleCreditGrantRequestBody", "PlanBundleEntitlementRequestBody", "PlanBundleResponseData", + "PlanCatalogMembershipResponseData", "PlanChangeAction", "PlanChangeBasePlanAction", "PlanChangeResponseData", @@ -2148,6 +2257,7 @@ def __dir__(): "PreviewObject", "PreviewObjectResponseData", "PreviewSubscriptionChangeResponseData", + "PreviewSubscriptionDiscountResponseData", "PreviewSubscriptionFinanceResponseData", "PreviewSubscriptionUpcomingInvoiceLineItems", "ProrationBehavior", @@ -2192,6 +2302,7 @@ def __dir__(): "RulesengineTraitDefinition", "RulesengineTraitDefinitionComparableType", "RulesengineUser", + "RulesengineWarningTier", "RunIntegrationResponse", "ScheduledCheckoutResponseData", "ScheduledCheckoutStatus", @@ -2230,9 +2341,11 @@ def __dir__(): "UpdateBillingCreditResponse", "UpdateBillingPlanCreditGrantRequestBody", "UpdateBillingPlanCreditGrantResponse", + "UpdateCatalogResponse", "UpdateCompanyOverrideResponse", "UpdateCompanyPlansResponse", "UpdateComponentResponse", + "UpdateConfigurationResponse", "UpdateCreditBundleDetailsResponse", "UpdateCreditBundleRequestBody", "UpdateCustomerSubscriptionTrialEndResponse", @@ -2279,6 +2392,7 @@ def __dir__(): "UsageTimeSeriesPointResponseData", "UserDetailResponseData", "UserResponseData", + "WarningTier", "WarningTierRequestBody", "WarningTierResponseData", "WebFeatureUsageWebhookOutput", @@ -2297,6 +2411,7 @@ def __dir__(): "accesstokens", "accounts", "billing", + "catalogs", "checkout", "companies", "components", diff --git a/src/schematic/base_client.py b/src/schematic/base_client.py index d07a74f..37bd267 100644 --- a/src/schematic/base_client.py +++ b/src/schematic/base_client.py @@ -15,6 +15,7 @@ from .accesstokens.client import AccesstokensClient, AsyncAccesstokensClient from .accounts.client import AccountsClient, AsyncAccountsClient from .billing.client import AsyncBillingClient, BillingClient + from .catalogs.client import AsyncCatalogsClient, CatalogsClient from .checkout.client import AsyncCheckoutClient, CheckoutClient from .companies.client import AsyncCompaniesClient, CompaniesClient from .components.client import AsyncComponentsClient, ComponentsClient @@ -114,6 +115,7 @@ def __init__( self._accounts: typing.Optional[AccountsClient] = None self._billing: typing.Optional[BillingClient] = None self._credits: typing.Optional[CreditsClient] = None + self._catalogs: typing.Optional[CatalogsClient] = None self._checkout: typing.Optional[CheckoutClient] = None self._companies: typing.Optional[CompaniesClient] = None self._entitlements: typing.Optional[EntitlementsClient] = None @@ -190,6 +192,14 @@ def credits(self): self._credits = CreditsClient(client_wrapper=self._client_wrapper) return self._credits + @property + def catalogs(self): + if self._catalogs is None: + from .catalogs.client import CatalogsClient # noqa: E402 + + self._catalogs = CatalogsClient(client_wrapper=self._client_wrapper) + return self._catalogs + @property def checkout(self): if self._checkout is None: @@ -423,6 +433,7 @@ def __init__( self._accounts: typing.Optional[AsyncAccountsClient] = None self._billing: typing.Optional[AsyncBillingClient] = None self._credits: typing.Optional[AsyncCreditsClient] = None + self._catalogs: typing.Optional[AsyncCatalogsClient] = None self._checkout: typing.Optional[AsyncCheckoutClient] = None self._companies: typing.Optional[AsyncCompaniesClient] = None self._entitlements: typing.Optional[AsyncEntitlementsClient] = None @@ -507,6 +518,14 @@ def credits(self): self._credits = AsyncCreditsClient(client_wrapper=self._client_wrapper) return self._credits + @property + def catalogs(self): + if self._catalogs is None: + from .catalogs.client import AsyncCatalogsClient # noqa: E402 + + self._catalogs = AsyncCatalogsClient(client_wrapper=self._client_wrapper) + return self._catalogs + @property def checkout(self): if self._checkout is None: diff --git a/src/schematic/catalogs/__init__.py b/src/schematic/catalogs/__init__.py new file mode 100644 index 0000000..3700b69 --- /dev/null +++ b/src/schematic/catalogs/__init__.py @@ -0,0 +1,70 @@ +# 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 .types import ( + CreateCatalogResponse, + DeleteCatalogResponse, + GetCatalogResponse, + GetConfigurationResponse, + GetCreditBundlesInCatalogResponse, + GetDerivedFeaturesResponse, + GetPlansInCatalogResponse, + ListCatalogsParams, + ListCatalogsResponse, + UpdateCatalogResponse, + UpdateConfigurationResponse, + ) +_dynamic_imports: typing.Dict[str, str] = { + "CreateCatalogResponse": ".types", + "DeleteCatalogResponse": ".types", + "GetCatalogResponse": ".types", + "GetConfigurationResponse": ".types", + "GetCreditBundlesInCatalogResponse": ".types", + "GetDerivedFeaturesResponse": ".types", + "GetPlansInCatalogResponse": ".types", + "ListCatalogsParams": ".types", + "ListCatalogsResponse": ".types", + "UpdateCatalogResponse": ".types", + "UpdateConfigurationResponse": ".types", +} + + +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__ = [ + "CreateCatalogResponse", + "DeleteCatalogResponse", + "GetCatalogResponse", + "GetConfigurationResponse", + "GetCreditBundlesInCatalogResponse", + "GetDerivedFeaturesResponse", + "GetPlansInCatalogResponse", + "ListCatalogsParams", + "ListCatalogsResponse", + "UpdateCatalogResponse", + "UpdateConfigurationResponse", +] diff --git a/src/schematic/catalogs/client.py b/src/schematic/catalogs/client.py new file mode 100644 index 0000000..8b9f1e4 --- /dev/null +++ b/src/schematic/catalogs/client.py @@ -0,0 +1,1234 @@ +# This file was auto-generated by Fern from our API Definition. + +import typing + +from ..core.client_wrapper import AsyncClientWrapper, SyncClientWrapper +from ..core.request_options import RequestOptions +from ..types.catalog_config_ordered_bundle import CatalogConfigOrderedBundle +from ..types.catalog_config_ordered_plan import CatalogConfigOrderedPlan +from .raw_client import AsyncRawCatalogsClient, RawCatalogsClient +from .types.create_catalog_response import CreateCatalogResponse +from .types.delete_catalog_response import DeleteCatalogResponse +from .types.get_catalog_response import GetCatalogResponse +from .types.get_configuration_response import GetConfigurationResponse +from .types.get_credit_bundles_in_catalog_response import GetCreditBundlesInCatalogResponse +from .types.get_derived_features_response import GetDerivedFeaturesResponse +from .types.get_plans_in_catalog_response import GetPlansInCatalogResponse +from .types.list_catalogs_response import ListCatalogsResponse +from .types.update_catalog_response import UpdateCatalogResponse +from .types.update_configuration_response import UpdateConfigurationResponse + +# this is used as the default value for optional parameters +OMIT = typing.cast(typing.Any, ...) + + +class CatalogsClient: + def __init__(self, *, client_wrapper: SyncClientWrapper): + self._raw_client = RawCatalogsClient(client_wrapper=client_wrapper) + + @property + def with_raw_response(self) -> RawCatalogsClient: + """ + Retrieves a raw implementation of this client that returns raw responses. + + Returns + ------- + RawCatalogsClient + """ + return self._raw_client + + def list_catalogs( + self, + *, + is_default: typing.Optional[bool] = None, + q: typing.Optional[str] = None, + limit: typing.Optional[int] = None, + offset: typing.Optional[int] = None, + request_options: typing.Optional[RequestOptions] = None, + ) -> ListCatalogsResponse: + """ + Parameters + ---------- + is_default : typing.Optional[bool] + + q : typing.Optional[str] + Search by catalog name + + limit : typing.Optional[int] + Page limit (default 100) + + offset : typing.Optional[int] + Page offset (default 0) + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + ListCatalogsResponse + OK + + Examples + -------- + from schematic import Schematic + + client = Schematic( + api_key="YOUR_API_KEY", + ) + client.catalogs.list_catalogs( + is_default=True, + q="q", + limit=1000000, + offset=1000000, + ) + """ + _response = self._raw_client.list_catalogs( + is_default=is_default, q=q, limit=limit, offset=offset, request_options=request_options + ) + return _response.data + + def create_catalog( + self, + *, + is_default: bool, + name: str, + description: typing.Optional[str] = OMIT, + request_options: typing.Optional[RequestOptions] = None, + ) -> CreateCatalogResponse: + """ + Parameters + ---------- + is_default : bool + + name : str + + description : typing.Optional[str] + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + CreateCatalogResponse + Created + + Examples + -------- + from schematic import Schematic + + client = Schematic( + api_key="YOUR_API_KEY", + ) + client.catalogs.create_catalog( + is_default=True, + name="name", + ) + """ + _response = self._raw_client.create_catalog( + is_default=is_default, name=name, description=description, request_options=request_options + ) + return _response.data + + def get_catalog( + self, catalog_id: str, *, request_options: typing.Optional[RequestOptions] = None + ) -> GetCatalogResponse: + """ + Parameters + ---------- + catalog_id : str + catalog_id + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + GetCatalogResponse + OK + + Examples + -------- + from schematic import Schematic + + client = Schematic( + api_key="YOUR_API_KEY", + ) + client.catalogs.get_catalog( + catalog_id="catalog_id", + ) + """ + _response = self._raw_client.get_catalog(catalog_id, request_options=request_options) + return _response.data + + def update_catalog( + self, + catalog_id: str, + *, + description: typing.Optional[str] = OMIT, + is_default: typing.Optional[bool] = OMIT, + name: typing.Optional[str] = OMIT, + request_options: typing.Optional[RequestOptions] = None, + ) -> UpdateCatalogResponse: + """ + Parameters + ---------- + catalog_id : str + catalog_id + + description : typing.Optional[str] + + is_default : typing.Optional[bool] + + name : typing.Optional[str] + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + UpdateCatalogResponse + OK + + Examples + -------- + from schematic import Schematic + + client = Schematic( + api_key="YOUR_API_KEY", + ) + client.catalogs.update_catalog( + catalog_id="catalog_id", + ) + """ + _response = self._raw_client.update_catalog( + catalog_id, description=description, is_default=is_default, name=name, request_options=request_options + ) + return _response.data + + def delete_catalog( + self, catalog_id: str, *, request_options: typing.Optional[RequestOptions] = None + ) -> DeleteCatalogResponse: + """ + Parameters + ---------- + catalog_id : str + catalog_id + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + DeleteCatalogResponse + OK + + Examples + -------- + from schematic import Schematic + + client = Schematic( + api_key="YOUR_API_KEY", + ) + client.catalogs.delete_catalog( + catalog_id="catalog_id", + ) + """ + _response = self._raw_client.delete_catalog(catalog_id, request_options=request_options) + return _response.data + + def get_configuration( + self, catalog_id: str, *, request_options: typing.Optional[RequestOptions] = None + ) -> GetConfigurationResponse: + """ + Parameters + ---------- + catalog_id : str + catalog_id + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + GetConfigurationResponse + OK + + Examples + -------- + from schematic import Schematic + + client = Schematic( + api_key="YOUR_API_KEY", + ) + client.catalogs.get_configuration( + catalog_id="catalog_id", + ) + """ + _response = self._raw_client.get_configuration(catalog_id, request_options=request_options) + return _response.data + + def update_configuration( + self, + catalog_id: str, + *, + custom_plan_cta_text: typing.Optional[str] = OMIT, + custom_plan_cta_url: typing.Optional[str] = OMIT, + custom_plan_price_text: typing.Optional[str] = OMIT, + custom_plans_visible: typing.Optional[bool] = OMIT, + ordered_add_ons: typing.Optional[typing.Sequence[CatalogConfigOrderedPlan]] = OMIT, + ordered_bundles: typing.Optional[typing.Sequence[CatalogConfigOrderedBundle]] = OMIT, + ordered_plans: typing.Optional[typing.Sequence[CatalogConfigOrderedPlan]] = OMIT, + pricing_model: typing.Optional[str] = OMIT, + pricing_url: typing.Optional[str] = OMIT, + request_options: typing.Optional[RequestOptions] = None, + ) -> UpdateConfigurationResponse: + """ + Parameters + ---------- + catalog_id : str + catalog_id + + custom_plan_cta_text : typing.Optional[str] + + custom_plan_cta_url : typing.Optional[str] + + custom_plan_price_text : typing.Optional[str] + + custom_plans_visible : typing.Optional[bool] + + ordered_add_ons : typing.Optional[typing.Sequence[CatalogConfigOrderedPlan]] + + ordered_bundles : typing.Optional[typing.Sequence[CatalogConfigOrderedBundle]] + + ordered_plans : typing.Optional[typing.Sequence[CatalogConfigOrderedPlan]] + + pricing_model : typing.Optional[str] + + pricing_url : typing.Optional[str] + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + UpdateConfigurationResponse + OK + + Examples + -------- + from schematic import Schematic + + client = Schematic( + api_key="YOUR_API_KEY", + ) + client.catalogs.update_configuration( + catalog_id="catalog_id", + ) + """ + _response = self._raw_client.update_configuration( + catalog_id, + custom_plan_cta_text=custom_plan_cta_text, + custom_plan_cta_url=custom_plan_cta_url, + custom_plan_price_text=custom_plan_price_text, + custom_plans_visible=custom_plans_visible, + ordered_add_ons=ordered_add_ons, + ordered_bundles=ordered_bundles, + ordered_plans=ordered_plans, + pricing_model=pricing_model, + pricing_url=pricing_url, + request_options=request_options, + ) + return _response.data + + def get_credit_bundles_in_catalog( + self, catalog_id: str, *, request_options: typing.Optional[RequestOptions] = None + ) -> GetCreditBundlesInCatalogResponse: + """ + Parameters + ---------- + catalog_id : str + catalog_id + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + GetCreditBundlesInCatalogResponse + OK + + Examples + -------- + from schematic import Schematic + + client = Schematic( + api_key="YOUR_API_KEY", + ) + client.catalogs.get_credit_bundles_in_catalog( + catalog_id="catalog_id", + ) + """ + _response = self._raw_client.get_credit_bundles_in_catalog(catalog_id, request_options=request_options) + return _response.data + + def add_credit_bundle( + self, catalog_id: str, credit_bundle_id: str, *, request_options: typing.Optional[RequestOptions] = None + ) -> None: + """ + Parameters + ---------- + catalog_id : str + catalog_id + + credit_bundle_id : str + credit_bundle_id + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + None + + Examples + -------- + from schematic import Schematic + + client = Schematic( + api_key="YOUR_API_KEY", + ) + client.catalogs.add_credit_bundle( + catalog_id="catalog_id", + credit_bundle_id="credit_bundle_id", + ) + """ + _response = self._raw_client.add_credit_bundle(catalog_id, credit_bundle_id, request_options=request_options) + return _response.data + + def remove_credit_bundle( + self, catalog_id: str, credit_bundle_id: str, *, request_options: typing.Optional[RequestOptions] = None + ) -> None: + """ + Parameters + ---------- + catalog_id : str + catalog_id + + credit_bundle_id : str + credit_bundle_id + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + None + + Examples + -------- + from schematic import Schematic + + client = Schematic( + api_key="YOUR_API_KEY", + ) + client.catalogs.remove_credit_bundle( + catalog_id="catalog_id", + credit_bundle_id="credit_bundle_id", + ) + """ + _response = self._raw_client.remove_credit_bundle(catalog_id, credit_bundle_id, request_options=request_options) + return _response.data + + def get_derived_features( + self, catalog_id: str, *, request_options: typing.Optional[RequestOptions] = None + ) -> GetDerivedFeaturesResponse: + """ + Parameters + ---------- + catalog_id : str + catalog_id + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + GetDerivedFeaturesResponse + OK + + Examples + -------- + from schematic import Schematic + + client = Schematic( + api_key="YOUR_API_KEY", + ) + client.catalogs.get_derived_features( + catalog_id="catalog_id", + ) + """ + _response = self._raw_client.get_derived_features(catalog_id, request_options=request_options) + return _response.data + + def get_plans_in_catalog( + self, catalog_id: str, *, request_options: typing.Optional[RequestOptions] = None + ) -> GetPlansInCatalogResponse: + """ + Parameters + ---------- + catalog_id : str + catalog_id + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + GetPlansInCatalogResponse + OK + + Examples + -------- + from schematic import Schematic + + client = Schematic( + api_key="YOUR_API_KEY", + ) + client.catalogs.get_plans_in_catalog( + catalog_id="catalog_id", + ) + """ + _response = self._raw_client.get_plans_in_catalog(catalog_id, request_options=request_options) + return _response.data + + def add_plan( + self, catalog_id: str, plan_id: str, *, request_options: typing.Optional[RequestOptions] = None + ) -> None: + """ + Parameters + ---------- + catalog_id : str + catalog_id + + plan_id : str + plan_id + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + None + + Examples + -------- + from schematic import Schematic + + client = Schematic( + api_key="YOUR_API_KEY", + ) + client.catalogs.add_plan( + catalog_id="catalog_id", + plan_id="plan_id", + ) + """ + _response = self._raw_client.add_plan(catalog_id, plan_id, request_options=request_options) + return _response.data + + def remove_plan( + self, catalog_id: str, plan_id: str, *, request_options: typing.Optional[RequestOptions] = None + ) -> None: + """ + Parameters + ---------- + catalog_id : str + catalog_id + + plan_id : str + plan_id + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + None + + Examples + -------- + from schematic import Schematic + + client = Schematic( + api_key="YOUR_API_KEY", + ) + client.catalogs.remove_plan( + catalog_id="catalog_id", + plan_id="plan_id", + ) + """ + _response = self._raw_client.remove_plan(catalog_id, plan_id, request_options=request_options) + return _response.data + + +class AsyncCatalogsClient: + def __init__(self, *, client_wrapper: AsyncClientWrapper): + self._raw_client = AsyncRawCatalogsClient(client_wrapper=client_wrapper) + + @property + def with_raw_response(self) -> AsyncRawCatalogsClient: + """ + Retrieves a raw implementation of this client that returns raw responses. + + Returns + ------- + AsyncRawCatalogsClient + """ + return self._raw_client + + async def list_catalogs( + self, + *, + is_default: typing.Optional[bool] = None, + q: typing.Optional[str] = None, + limit: typing.Optional[int] = None, + offset: typing.Optional[int] = None, + request_options: typing.Optional[RequestOptions] = None, + ) -> ListCatalogsResponse: + """ + Parameters + ---------- + is_default : typing.Optional[bool] + + q : typing.Optional[str] + Search by catalog name + + limit : typing.Optional[int] + Page limit (default 100) + + offset : typing.Optional[int] + Page offset (default 0) + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + ListCatalogsResponse + OK + + Examples + -------- + import asyncio + + from schematic import AsyncSchematic + + client = AsyncSchematic( + api_key="YOUR_API_KEY", + ) + + + async def main() -> None: + await client.catalogs.list_catalogs( + is_default=True, + q="q", + limit=1000000, + offset=1000000, + ) + + + asyncio.run(main()) + """ + _response = await self._raw_client.list_catalogs( + is_default=is_default, q=q, limit=limit, offset=offset, request_options=request_options + ) + return _response.data + + async def create_catalog( + self, + *, + is_default: bool, + name: str, + description: typing.Optional[str] = OMIT, + request_options: typing.Optional[RequestOptions] = None, + ) -> CreateCatalogResponse: + """ + Parameters + ---------- + is_default : bool + + name : str + + description : typing.Optional[str] + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + CreateCatalogResponse + Created + + Examples + -------- + import asyncio + + from schematic import AsyncSchematic + + client = AsyncSchematic( + api_key="YOUR_API_KEY", + ) + + + async def main() -> None: + await client.catalogs.create_catalog( + is_default=True, + name="name", + ) + + + asyncio.run(main()) + """ + _response = await self._raw_client.create_catalog( + is_default=is_default, name=name, description=description, request_options=request_options + ) + return _response.data + + async def get_catalog( + self, catalog_id: str, *, request_options: typing.Optional[RequestOptions] = None + ) -> GetCatalogResponse: + """ + Parameters + ---------- + catalog_id : str + catalog_id + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + GetCatalogResponse + OK + + Examples + -------- + import asyncio + + from schematic import AsyncSchematic + + client = AsyncSchematic( + api_key="YOUR_API_KEY", + ) + + + async def main() -> None: + await client.catalogs.get_catalog( + catalog_id="catalog_id", + ) + + + asyncio.run(main()) + """ + _response = await self._raw_client.get_catalog(catalog_id, request_options=request_options) + return _response.data + + async def update_catalog( + self, + catalog_id: str, + *, + description: typing.Optional[str] = OMIT, + is_default: typing.Optional[bool] = OMIT, + name: typing.Optional[str] = OMIT, + request_options: typing.Optional[RequestOptions] = None, + ) -> UpdateCatalogResponse: + """ + Parameters + ---------- + catalog_id : str + catalog_id + + description : typing.Optional[str] + + is_default : typing.Optional[bool] + + name : typing.Optional[str] + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + UpdateCatalogResponse + OK + + Examples + -------- + import asyncio + + from schematic import AsyncSchematic + + client = AsyncSchematic( + api_key="YOUR_API_KEY", + ) + + + async def main() -> None: + await client.catalogs.update_catalog( + catalog_id="catalog_id", + ) + + + asyncio.run(main()) + """ + _response = await self._raw_client.update_catalog( + catalog_id, description=description, is_default=is_default, name=name, request_options=request_options + ) + return _response.data + + async def delete_catalog( + self, catalog_id: str, *, request_options: typing.Optional[RequestOptions] = None + ) -> DeleteCatalogResponse: + """ + Parameters + ---------- + catalog_id : str + catalog_id + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + DeleteCatalogResponse + OK + + Examples + -------- + import asyncio + + from schematic import AsyncSchematic + + client = AsyncSchematic( + api_key="YOUR_API_KEY", + ) + + + async def main() -> None: + await client.catalogs.delete_catalog( + catalog_id="catalog_id", + ) + + + asyncio.run(main()) + """ + _response = await self._raw_client.delete_catalog(catalog_id, request_options=request_options) + return _response.data + + async def get_configuration( + self, catalog_id: str, *, request_options: typing.Optional[RequestOptions] = None + ) -> GetConfigurationResponse: + """ + Parameters + ---------- + catalog_id : str + catalog_id + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + GetConfigurationResponse + OK + + Examples + -------- + import asyncio + + from schematic import AsyncSchematic + + client = AsyncSchematic( + api_key="YOUR_API_KEY", + ) + + + async def main() -> None: + await client.catalogs.get_configuration( + catalog_id="catalog_id", + ) + + + asyncio.run(main()) + """ + _response = await self._raw_client.get_configuration(catalog_id, request_options=request_options) + return _response.data + + async def update_configuration( + self, + catalog_id: str, + *, + custom_plan_cta_text: typing.Optional[str] = OMIT, + custom_plan_cta_url: typing.Optional[str] = OMIT, + custom_plan_price_text: typing.Optional[str] = OMIT, + custom_plans_visible: typing.Optional[bool] = OMIT, + ordered_add_ons: typing.Optional[typing.Sequence[CatalogConfigOrderedPlan]] = OMIT, + ordered_bundles: typing.Optional[typing.Sequence[CatalogConfigOrderedBundle]] = OMIT, + ordered_plans: typing.Optional[typing.Sequence[CatalogConfigOrderedPlan]] = OMIT, + pricing_model: typing.Optional[str] = OMIT, + pricing_url: typing.Optional[str] = OMIT, + request_options: typing.Optional[RequestOptions] = None, + ) -> UpdateConfigurationResponse: + """ + Parameters + ---------- + catalog_id : str + catalog_id + + custom_plan_cta_text : typing.Optional[str] + + custom_plan_cta_url : typing.Optional[str] + + custom_plan_price_text : typing.Optional[str] + + custom_plans_visible : typing.Optional[bool] + + ordered_add_ons : typing.Optional[typing.Sequence[CatalogConfigOrderedPlan]] + + ordered_bundles : typing.Optional[typing.Sequence[CatalogConfigOrderedBundle]] + + ordered_plans : typing.Optional[typing.Sequence[CatalogConfigOrderedPlan]] + + pricing_model : typing.Optional[str] + + pricing_url : typing.Optional[str] + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + UpdateConfigurationResponse + OK + + Examples + -------- + import asyncio + + from schematic import AsyncSchematic + + client = AsyncSchematic( + api_key="YOUR_API_KEY", + ) + + + async def main() -> None: + await client.catalogs.update_configuration( + catalog_id="catalog_id", + ) + + + asyncio.run(main()) + """ + _response = await self._raw_client.update_configuration( + catalog_id, + custom_plan_cta_text=custom_plan_cta_text, + custom_plan_cta_url=custom_plan_cta_url, + custom_plan_price_text=custom_plan_price_text, + custom_plans_visible=custom_plans_visible, + ordered_add_ons=ordered_add_ons, + ordered_bundles=ordered_bundles, + ordered_plans=ordered_plans, + pricing_model=pricing_model, + pricing_url=pricing_url, + request_options=request_options, + ) + return _response.data + + async def get_credit_bundles_in_catalog( + self, catalog_id: str, *, request_options: typing.Optional[RequestOptions] = None + ) -> GetCreditBundlesInCatalogResponse: + """ + Parameters + ---------- + catalog_id : str + catalog_id + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + GetCreditBundlesInCatalogResponse + OK + + Examples + -------- + import asyncio + + from schematic import AsyncSchematic + + client = AsyncSchematic( + api_key="YOUR_API_KEY", + ) + + + async def main() -> None: + await client.catalogs.get_credit_bundles_in_catalog( + catalog_id="catalog_id", + ) + + + asyncio.run(main()) + """ + _response = await self._raw_client.get_credit_bundles_in_catalog(catalog_id, request_options=request_options) + return _response.data + + async def add_credit_bundle( + self, catalog_id: str, credit_bundle_id: str, *, request_options: typing.Optional[RequestOptions] = None + ) -> None: + """ + Parameters + ---------- + catalog_id : str + catalog_id + + credit_bundle_id : str + credit_bundle_id + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + None + + Examples + -------- + import asyncio + + from schematic import AsyncSchematic + + client = AsyncSchematic( + api_key="YOUR_API_KEY", + ) + + + async def main() -> None: + await client.catalogs.add_credit_bundle( + catalog_id="catalog_id", + credit_bundle_id="credit_bundle_id", + ) + + + asyncio.run(main()) + """ + _response = await self._raw_client.add_credit_bundle( + catalog_id, credit_bundle_id, request_options=request_options + ) + return _response.data + + async def remove_credit_bundle( + self, catalog_id: str, credit_bundle_id: str, *, request_options: typing.Optional[RequestOptions] = None + ) -> None: + """ + Parameters + ---------- + catalog_id : str + catalog_id + + credit_bundle_id : str + credit_bundle_id + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + None + + Examples + -------- + import asyncio + + from schematic import AsyncSchematic + + client = AsyncSchematic( + api_key="YOUR_API_KEY", + ) + + + async def main() -> None: + await client.catalogs.remove_credit_bundle( + catalog_id="catalog_id", + credit_bundle_id="credit_bundle_id", + ) + + + asyncio.run(main()) + """ + _response = await self._raw_client.remove_credit_bundle( + catalog_id, credit_bundle_id, request_options=request_options + ) + return _response.data + + async def get_derived_features( + self, catalog_id: str, *, request_options: typing.Optional[RequestOptions] = None + ) -> GetDerivedFeaturesResponse: + """ + Parameters + ---------- + catalog_id : str + catalog_id + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + GetDerivedFeaturesResponse + OK + + Examples + -------- + import asyncio + + from schematic import AsyncSchematic + + client = AsyncSchematic( + api_key="YOUR_API_KEY", + ) + + + async def main() -> None: + await client.catalogs.get_derived_features( + catalog_id="catalog_id", + ) + + + asyncio.run(main()) + """ + _response = await self._raw_client.get_derived_features(catalog_id, request_options=request_options) + return _response.data + + async def get_plans_in_catalog( + self, catalog_id: str, *, request_options: typing.Optional[RequestOptions] = None + ) -> GetPlansInCatalogResponse: + """ + Parameters + ---------- + catalog_id : str + catalog_id + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + GetPlansInCatalogResponse + OK + + Examples + -------- + import asyncio + + from schematic import AsyncSchematic + + client = AsyncSchematic( + api_key="YOUR_API_KEY", + ) + + + async def main() -> None: + await client.catalogs.get_plans_in_catalog( + catalog_id="catalog_id", + ) + + + asyncio.run(main()) + """ + _response = await self._raw_client.get_plans_in_catalog(catalog_id, request_options=request_options) + return _response.data + + async def add_plan( + self, catalog_id: str, plan_id: str, *, request_options: typing.Optional[RequestOptions] = None + ) -> None: + """ + Parameters + ---------- + catalog_id : str + catalog_id + + plan_id : str + plan_id + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + None + + Examples + -------- + import asyncio + + from schematic import AsyncSchematic + + client = AsyncSchematic( + api_key="YOUR_API_KEY", + ) + + + async def main() -> None: + await client.catalogs.add_plan( + catalog_id="catalog_id", + plan_id="plan_id", + ) + + + asyncio.run(main()) + """ + _response = await self._raw_client.add_plan(catalog_id, plan_id, request_options=request_options) + return _response.data + + async def remove_plan( + self, catalog_id: str, plan_id: str, *, request_options: typing.Optional[RequestOptions] = None + ) -> None: + """ + Parameters + ---------- + catalog_id : str + catalog_id + + plan_id : str + plan_id + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + None + + Examples + -------- + import asyncio + + from schematic import AsyncSchematic + + client = AsyncSchematic( + api_key="YOUR_API_KEY", + ) + + + async def main() -> None: + await client.catalogs.remove_plan( + catalog_id="catalog_id", + plan_id="plan_id", + ) + + + asyncio.run(main()) + """ + _response = await self._raw_client.remove_plan(catalog_id, plan_id, request_options=request_options) + return _response.data diff --git a/src/schematic/catalogs/raw_client.py b/src/schematic/catalogs/raw_client.py new file mode 100644 index 0000000..538c1f2 --- /dev/null +++ b/src/schematic/catalogs/raw_client.py @@ -0,0 +1,2913 @@ +# This file was auto-generated by Fern from our API Definition. + +import typing +from json.decoder import JSONDecodeError + +from ..core.api_error import ApiError as core_api_error_ApiError +from ..core.client_wrapper import AsyncClientWrapper, SyncClientWrapper +from ..core.http_response import AsyncHttpResponse, HttpResponse +from ..core.jsonable_encoder import encode_path_param +from ..core.parse_error import ParsingError +from ..core.pydantic_utilities import parse_obj_as +from ..core.request_options import RequestOptions +from ..core.serialization import convert_and_respect_annotation_metadata +from ..errors.bad_request_error import BadRequestError +from ..errors.forbidden_error import ForbiddenError +from ..errors.internal_server_error import InternalServerError +from ..errors.not_found_error import NotFoundError +from ..errors.unauthorized_error import UnauthorizedError +from ..types.api_error import ApiError as types_api_error_ApiError +from ..types.catalog_config_ordered_bundle import CatalogConfigOrderedBundle +from ..types.catalog_config_ordered_plan import CatalogConfigOrderedPlan +from .types.create_catalog_response import CreateCatalogResponse +from .types.delete_catalog_response import DeleteCatalogResponse +from .types.get_catalog_response import GetCatalogResponse +from .types.get_configuration_response import GetConfigurationResponse +from .types.get_credit_bundles_in_catalog_response import GetCreditBundlesInCatalogResponse +from .types.get_derived_features_response import GetDerivedFeaturesResponse +from .types.get_plans_in_catalog_response import GetPlansInCatalogResponse +from .types.list_catalogs_response import ListCatalogsResponse +from .types.update_catalog_response import UpdateCatalogResponse +from .types.update_configuration_response import UpdateConfigurationResponse +from pydantic import ValidationError + +# this is used as the default value for optional parameters +OMIT = typing.cast(typing.Any, ...) + + +class RawCatalogsClient: + def __init__(self, *, client_wrapper: SyncClientWrapper): + self._client_wrapper = client_wrapper + + def list_catalogs( + self, + *, + is_default: typing.Optional[bool] = None, + q: typing.Optional[str] = None, + limit: typing.Optional[int] = None, + offset: typing.Optional[int] = None, + request_options: typing.Optional[RequestOptions] = None, + ) -> HttpResponse[ListCatalogsResponse]: + """ + Parameters + ---------- + is_default : typing.Optional[bool] + + q : typing.Optional[str] + Search by catalog name + + limit : typing.Optional[int] + Page limit (default 100) + + offset : typing.Optional[int] + Page offset (default 0) + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + HttpResponse[ListCatalogsResponse] + OK + """ + _response = self._client_wrapper.httpx_client.request( + "catalogs", + method="GET", + params={ + "is_default": is_default, + "q": q, + "limit": limit, + "offset": offset, + }, + request_options=request_options, + ) + try: + if 200 <= _response.status_code < 300: + _data = typing.cast( + ListCatalogsResponse, + parse_obj_as( + type_=ListCatalogsResponse, # type: ignore + object_=_response.json(), + ), + ) + return HttpResponse(response=_response, data=_data) + if _response.status_code == 400: + raise BadRequestError( + headers=dict(_response.headers), + body=typing.cast( + types_api_error_ApiError, + parse_obj_as( + type_=types_api_error_ApiError, # type: ignore + object_=_response.json(), + ), + ), + ) + if _response.status_code == 401: + raise UnauthorizedError( + headers=dict(_response.headers), + body=typing.cast( + types_api_error_ApiError, + parse_obj_as( + type_=types_api_error_ApiError, # type: ignore + object_=_response.json(), + ), + ), + ) + if _response.status_code == 403: + raise ForbiddenError( + headers=dict(_response.headers), + body=typing.cast( + types_api_error_ApiError, + parse_obj_as( + type_=types_api_error_ApiError, # type: ignore + object_=_response.json(), + ), + ), + ) + if _response.status_code == 404: + raise NotFoundError( + headers=dict(_response.headers), + body=typing.cast( + types_api_error_ApiError, + parse_obj_as( + type_=types_api_error_ApiError, # type: ignore + object_=_response.json(), + ), + ), + ) + if _response.status_code == 500: + raise InternalServerError( + headers=dict(_response.headers), + body=typing.cast( + types_api_error_ApiError, + parse_obj_as( + type_=types_api_error_ApiError, # type: ignore + object_=_response.json(), + ), + ), + ) + _response_json = _response.json() + except JSONDecodeError: + raise core_api_error_ApiError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.text + ) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) + raise core_api_error_ApiError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response_json + ) + + def create_catalog( + self, + *, + is_default: bool, + name: str, + description: typing.Optional[str] = OMIT, + request_options: typing.Optional[RequestOptions] = None, + ) -> HttpResponse[CreateCatalogResponse]: + """ + Parameters + ---------- + is_default : bool + + name : str + + description : typing.Optional[str] + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + HttpResponse[CreateCatalogResponse] + Created + """ + _response = self._client_wrapper.httpx_client.request( + "catalogs", + method="POST", + json={ + "description": description, + "is_default": is_default, + "name": name, + }, + headers={ + "content-type": "application/json", + }, + request_options=request_options, + omit=OMIT, + ) + try: + if 200 <= _response.status_code < 300: + _data = typing.cast( + CreateCatalogResponse, + parse_obj_as( + type_=CreateCatalogResponse, # type: ignore + object_=_response.json(), + ), + ) + return HttpResponse(response=_response, data=_data) + if _response.status_code == 400: + raise BadRequestError( + headers=dict(_response.headers), + body=typing.cast( + types_api_error_ApiError, + parse_obj_as( + type_=types_api_error_ApiError, # type: ignore + object_=_response.json(), + ), + ), + ) + if _response.status_code == 401: + raise UnauthorizedError( + headers=dict(_response.headers), + body=typing.cast( + types_api_error_ApiError, + parse_obj_as( + type_=types_api_error_ApiError, # type: ignore + object_=_response.json(), + ), + ), + ) + if _response.status_code == 403: + raise ForbiddenError( + headers=dict(_response.headers), + body=typing.cast( + types_api_error_ApiError, + parse_obj_as( + type_=types_api_error_ApiError, # type: ignore + object_=_response.json(), + ), + ), + ) + if _response.status_code == 404: + raise NotFoundError( + headers=dict(_response.headers), + body=typing.cast( + types_api_error_ApiError, + parse_obj_as( + type_=types_api_error_ApiError, # type: ignore + object_=_response.json(), + ), + ), + ) + if _response.status_code == 500: + raise InternalServerError( + headers=dict(_response.headers), + body=typing.cast( + types_api_error_ApiError, + parse_obj_as( + type_=types_api_error_ApiError, # type: ignore + object_=_response.json(), + ), + ), + ) + _response_json = _response.json() + except JSONDecodeError: + raise core_api_error_ApiError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.text + ) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) + raise core_api_error_ApiError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response_json + ) + + def get_catalog( + self, catalog_id: str, *, request_options: typing.Optional[RequestOptions] = None + ) -> HttpResponse[GetCatalogResponse]: + """ + Parameters + ---------- + catalog_id : str + catalog_id + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + HttpResponse[GetCatalogResponse] + OK + """ + _response = self._client_wrapper.httpx_client.request( + f"catalogs/{encode_path_param(catalog_id)}", + method="GET", + request_options=request_options, + ) + try: + if 200 <= _response.status_code < 300: + _data = typing.cast( + GetCatalogResponse, + parse_obj_as( + type_=GetCatalogResponse, # type: ignore + object_=_response.json(), + ), + ) + return HttpResponse(response=_response, data=_data) + if _response.status_code == 401: + raise UnauthorizedError( + headers=dict(_response.headers), + body=typing.cast( + types_api_error_ApiError, + parse_obj_as( + type_=types_api_error_ApiError, # type: ignore + object_=_response.json(), + ), + ), + ) + if _response.status_code == 403: + raise ForbiddenError( + headers=dict(_response.headers), + body=typing.cast( + types_api_error_ApiError, + parse_obj_as( + type_=types_api_error_ApiError, # type: ignore + object_=_response.json(), + ), + ), + ) + if _response.status_code == 404: + raise NotFoundError( + headers=dict(_response.headers), + body=typing.cast( + types_api_error_ApiError, + parse_obj_as( + type_=types_api_error_ApiError, # type: ignore + object_=_response.json(), + ), + ), + ) + if _response.status_code == 500: + raise InternalServerError( + headers=dict(_response.headers), + body=typing.cast( + types_api_error_ApiError, + parse_obj_as( + type_=types_api_error_ApiError, # type: ignore + object_=_response.json(), + ), + ), + ) + _response_json = _response.json() + except JSONDecodeError: + raise core_api_error_ApiError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.text + ) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) + raise core_api_error_ApiError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response_json + ) + + def update_catalog( + self, + catalog_id: str, + *, + description: typing.Optional[str] = OMIT, + is_default: typing.Optional[bool] = OMIT, + name: typing.Optional[str] = OMIT, + request_options: typing.Optional[RequestOptions] = None, + ) -> HttpResponse[UpdateCatalogResponse]: + """ + Parameters + ---------- + catalog_id : str + catalog_id + + description : typing.Optional[str] + + is_default : typing.Optional[bool] + + name : typing.Optional[str] + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + HttpResponse[UpdateCatalogResponse] + OK + """ + _response = self._client_wrapper.httpx_client.request( + f"catalogs/{encode_path_param(catalog_id)}", + method="PUT", + json={ + "description": description, + "is_default": is_default, + "name": name, + }, + headers={ + "content-type": "application/json", + }, + request_options=request_options, + omit=OMIT, + ) + try: + if 200 <= _response.status_code < 300: + _data = typing.cast( + UpdateCatalogResponse, + parse_obj_as( + type_=UpdateCatalogResponse, # type: ignore + object_=_response.json(), + ), + ) + return HttpResponse(response=_response, data=_data) + if _response.status_code == 400: + raise BadRequestError( + headers=dict(_response.headers), + body=typing.cast( + types_api_error_ApiError, + parse_obj_as( + type_=types_api_error_ApiError, # type: ignore + object_=_response.json(), + ), + ), + ) + if _response.status_code == 401: + raise UnauthorizedError( + headers=dict(_response.headers), + body=typing.cast( + types_api_error_ApiError, + parse_obj_as( + type_=types_api_error_ApiError, # type: ignore + object_=_response.json(), + ), + ), + ) + if _response.status_code == 403: + raise ForbiddenError( + headers=dict(_response.headers), + body=typing.cast( + types_api_error_ApiError, + parse_obj_as( + type_=types_api_error_ApiError, # type: ignore + object_=_response.json(), + ), + ), + ) + if _response.status_code == 404: + raise NotFoundError( + headers=dict(_response.headers), + body=typing.cast( + types_api_error_ApiError, + parse_obj_as( + type_=types_api_error_ApiError, # type: ignore + object_=_response.json(), + ), + ), + ) + if _response.status_code == 500: + raise InternalServerError( + headers=dict(_response.headers), + body=typing.cast( + types_api_error_ApiError, + parse_obj_as( + type_=types_api_error_ApiError, # type: ignore + object_=_response.json(), + ), + ), + ) + _response_json = _response.json() + except JSONDecodeError: + raise core_api_error_ApiError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.text + ) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) + raise core_api_error_ApiError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response_json + ) + + def delete_catalog( + self, catalog_id: str, *, request_options: typing.Optional[RequestOptions] = None + ) -> HttpResponse[DeleteCatalogResponse]: + """ + Parameters + ---------- + catalog_id : str + catalog_id + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + HttpResponse[DeleteCatalogResponse] + OK + """ + _response = self._client_wrapper.httpx_client.request( + f"catalogs/{encode_path_param(catalog_id)}", + method="DELETE", + request_options=request_options, + ) + try: + if 200 <= _response.status_code < 300: + _data = typing.cast( + DeleteCatalogResponse, + parse_obj_as( + type_=DeleteCatalogResponse, # type: ignore + object_=_response.json(), + ), + ) + return HttpResponse(response=_response, data=_data) + if _response.status_code == 400: + raise BadRequestError( + headers=dict(_response.headers), + body=typing.cast( + types_api_error_ApiError, + parse_obj_as( + type_=types_api_error_ApiError, # type: ignore + object_=_response.json(), + ), + ), + ) + if _response.status_code == 401: + raise UnauthorizedError( + headers=dict(_response.headers), + body=typing.cast( + types_api_error_ApiError, + parse_obj_as( + type_=types_api_error_ApiError, # type: ignore + object_=_response.json(), + ), + ), + ) + if _response.status_code == 403: + raise ForbiddenError( + headers=dict(_response.headers), + body=typing.cast( + types_api_error_ApiError, + parse_obj_as( + type_=types_api_error_ApiError, # type: ignore + object_=_response.json(), + ), + ), + ) + if _response.status_code == 404: + raise NotFoundError( + headers=dict(_response.headers), + body=typing.cast( + types_api_error_ApiError, + parse_obj_as( + type_=types_api_error_ApiError, # type: ignore + object_=_response.json(), + ), + ), + ) + if _response.status_code == 500: + raise InternalServerError( + headers=dict(_response.headers), + body=typing.cast( + types_api_error_ApiError, + parse_obj_as( + type_=types_api_error_ApiError, # type: ignore + object_=_response.json(), + ), + ), + ) + _response_json = _response.json() + except JSONDecodeError: + raise core_api_error_ApiError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.text + ) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) + raise core_api_error_ApiError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response_json + ) + + def get_configuration( + self, catalog_id: str, *, request_options: typing.Optional[RequestOptions] = None + ) -> HttpResponse[GetConfigurationResponse]: + """ + Parameters + ---------- + catalog_id : str + catalog_id + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + HttpResponse[GetConfigurationResponse] + OK + """ + _response = self._client_wrapper.httpx_client.request( + f"catalogs/{encode_path_param(catalog_id)}/configuration", + method="GET", + request_options=request_options, + ) + try: + if 200 <= _response.status_code < 300: + _data = typing.cast( + GetConfigurationResponse, + parse_obj_as( + type_=GetConfigurationResponse, # type: ignore + object_=_response.json(), + ), + ) + return HttpResponse(response=_response, data=_data) + if _response.status_code == 401: + raise UnauthorizedError( + headers=dict(_response.headers), + body=typing.cast( + types_api_error_ApiError, + parse_obj_as( + type_=types_api_error_ApiError, # type: ignore + object_=_response.json(), + ), + ), + ) + if _response.status_code == 403: + raise ForbiddenError( + headers=dict(_response.headers), + body=typing.cast( + types_api_error_ApiError, + parse_obj_as( + type_=types_api_error_ApiError, # type: ignore + object_=_response.json(), + ), + ), + ) + if _response.status_code == 404: + raise NotFoundError( + headers=dict(_response.headers), + body=typing.cast( + types_api_error_ApiError, + parse_obj_as( + type_=types_api_error_ApiError, # type: ignore + object_=_response.json(), + ), + ), + ) + if _response.status_code == 500: + raise InternalServerError( + headers=dict(_response.headers), + body=typing.cast( + types_api_error_ApiError, + parse_obj_as( + type_=types_api_error_ApiError, # type: ignore + object_=_response.json(), + ), + ), + ) + _response_json = _response.json() + except JSONDecodeError: + raise core_api_error_ApiError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.text + ) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) + raise core_api_error_ApiError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response_json + ) + + def update_configuration( + self, + catalog_id: str, + *, + custom_plan_cta_text: typing.Optional[str] = OMIT, + custom_plan_cta_url: typing.Optional[str] = OMIT, + custom_plan_price_text: typing.Optional[str] = OMIT, + custom_plans_visible: typing.Optional[bool] = OMIT, + ordered_add_ons: typing.Optional[typing.Sequence[CatalogConfigOrderedPlan]] = OMIT, + ordered_bundles: typing.Optional[typing.Sequence[CatalogConfigOrderedBundle]] = OMIT, + ordered_plans: typing.Optional[typing.Sequence[CatalogConfigOrderedPlan]] = OMIT, + pricing_model: typing.Optional[str] = OMIT, + pricing_url: typing.Optional[str] = OMIT, + request_options: typing.Optional[RequestOptions] = None, + ) -> HttpResponse[UpdateConfigurationResponse]: + """ + Parameters + ---------- + catalog_id : str + catalog_id + + custom_plan_cta_text : typing.Optional[str] + + custom_plan_cta_url : typing.Optional[str] + + custom_plan_price_text : typing.Optional[str] + + custom_plans_visible : typing.Optional[bool] + + ordered_add_ons : typing.Optional[typing.Sequence[CatalogConfigOrderedPlan]] + + ordered_bundles : typing.Optional[typing.Sequence[CatalogConfigOrderedBundle]] + + ordered_plans : typing.Optional[typing.Sequence[CatalogConfigOrderedPlan]] + + pricing_model : typing.Optional[str] + + pricing_url : typing.Optional[str] + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + HttpResponse[UpdateConfigurationResponse] + OK + """ + _response = self._client_wrapper.httpx_client.request( + f"catalogs/{encode_path_param(catalog_id)}/configuration", + method="PUT", + json={ + "custom_plan_cta_text": custom_plan_cta_text, + "custom_plan_cta_url": custom_plan_cta_url, + "custom_plan_price_text": custom_plan_price_text, + "custom_plans_visible": custom_plans_visible, + "ordered_add_ons": convert_and_respect_annotation_metadata( + object_=ordered_add_ons, annotation=typing.Sequence[CatalogConfigOrderedPlan], direction="write" + ), + "ordered_bundles": convert_and_respect_annotation_metadata( + object_=ordered_bundles, annotation=typing.Sequence[CatalogConfigOrderedBundle], direction="write" + ), + "ordered_plans": convert_and_respect_annotation_metadata( + object_=ordered_plans, annotation=typing.Sequence[CatalogConfigOrderedPlan], direction="write" + ), + "pricing_model": pricing_model, + "pricing_url": pricing_url, + }, + headers={ + "content-type": "application/json", + }, + request_options=request_options, + omit=OMIT, + ) + try: + if 200 <= _response.status_code < 300: + _data = typing.cast( + UpdateConfigurationResponse, + parse_obj_as( + type_=UpdateConfigurationResponse, # type: ignore + object_=_response.json(), + ), + ) + return HttpResponse(response=_response, data=_data) + if _response.status_code == 400: + raise BadRequestError( + headers=dict(_response.headers), + body=typing.cast( + types_api_error_ApiError, + parse_obj_as( + type_=types_api_error_ApiError, # type: ignore + object_=_response.json(), + ), + ), + ) + if _response.status_code == 401: + raise UnauthorizedError( + headers=dict(_response.headers), + body=typing.cast( + types_api_error_ApiError, + parse_obj_as( + type_=types_api_error_ApiError, # type: ignore + object_=_response.json(), + ), + ), + ) + if _response.status_code == 403: + raise ForbiddenError( + headers=dict(_response.headers), + body=typing.cast( + types_api_error_ApiError, + parse_obj_as( + type_=types_api_error_ApiError, # type: ignore + object_=_response.json(), + ), + ), + ) + if _response.status_code == 404: + raise NotFoundError( + headers=dict(_response.headers), + body=typing.cast( + types_api_error_ApiError, + parse_obj_as( + type_=types_api_error_ApiError, # type: ignore + object_=_response.json(), + ), + ), + ) + if _response.status_code == 500: + raise InternalServerError( + headers=dict(_response.headers), + body=typing.cast( + types_api_error_ApiError, + parse_obj_as( + type_=types_api_error_ApiError, # type: ignore + object_=_response.json(), + ), + ), + ) + _response_json = _response.json() + except JSONDecodeError: + raise core_api_error_ApiError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.text + ) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) + raise core_api_error_ApiError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response_json + ) + + def get_credit_bundles_in_catalog( + self, catalog_id: str, *, request_options: typing.Optional[RequestOptions] = None + ) -> HttpResponse[GetCreditBundlesInCatalogResponse]: + """ + Parameters + ---------- + catalog_id : str + catalog_id + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + HttpResponse[GetCreditBundlesInCatalogResponse] + OK + """ + _response = self._client_wrapper.httpx_client.request( + f"catalogs/{encode_path_param(catalog_id)}/credit-bundles", + method="GET", + request_options=request_options, + ) + try: + if 200 <= _response.status_code < 300: + _data = typing.cast( + GetCreditBundlesInCatalogResponse, + parse_obj_as( + type_=GetCreditBundlesInCatalogResponse, # type: ignore + object_=_response.json(), + ), + ) + return HttpResponse(response=_response, data=_data) + if _response.status_code == 401: + raise UnauthorizedError( + headers=dict(_response.headers), + body=typing.cast( + types_api_error_ApiError, + parse_obj_as( + type_=types_api_error_ApiError, # type: ignore + object_=_response.json(), + ), + ), + ) + if _response.status_code == 403: + raise ForbiddenError( + headers=dict(_response.headers), + body=typing.cast( + types_api_error_ApiError, + parse_obj_as( + type_=types_api_error_ApiError, # type: ignore + object_=_response.json(), + ), + ), + ) + if _response.status_code == 404: + raise NotFoundError( + headers=dict(_response.headers), + body=typing.cast( + types_api_error_ApiError, + parse_obj_as( + type_=types_api_error_ApiError, # type: ignore + object_=_response.json(), + ), + ), + ) + if _response.status_code == 500: + raise InternalServerError( + headers=dict(_response.headers), + body=typing.cast( + types_api_error_ApiError, + parse_obj_as( + type_=types_api_error_ApiError, # type: ignore + object_=_response.json(), + ), + ), + ) + _response_json = _response.json() + except JSONDecodeError: + raise core_api_error_ApiError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.text + ) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) + raise core_api_error_ApiError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response_json + ) + + def add_credit_bundle( + self, catalog_id: str, credit_bundle_id: str, *, request_options: typing.Optional[RequestOptions] = None + ) -> HttpResponse[None]: + """ + Parameters + ---------- + catalog_id : str + catalog_id + + credit_bundle_id : str + credit_bundle_id + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + HttpResponse[None] + """ + _response = self._client_wrapper.httpx_client.request( + f"catalogs/{encode_path_param(catalog_id)}/credit-bundles/{encode_path_param(credit_bundle_id)}", + method="POST", + request_options=request_options, + ) + try: + if 200 <= _response.status_code < 300: + return HttpResponse(response=_response, data=None) + if _response.status_code == 400: + raise BadRequestError( + headers=dict(_response.headers), + body=typing.cast( + types_api_error_ApiError, + parse_obj_as( + type_=types_api_error_ApiError, # type: ignore + object_=_response.json(), + ), + ), + ) + if _response.status_code == 401: + raise UnauthorizedError( + headers=dict(_response.headers), + body=typing.cast( + types_api_error_ApiError, + parse_obj_as( + type_=types_api_error_ApiError, # type: ignore + object_=_response.json(), + ), + ), + ) + if _response.status_code == 403: + raise ForbiddenError( + headers=dict(_response.headers), + body=typing.cast( + types_api_error_ApiError, + parse_obj_as( + type_=types_api_error_ApiError, # type: ignore + object_=_response.json(), + ), + ), + ) + if _response.status_code == 404: + raise NotFoundError( + headers=dict(_response.headers), + body=typing.cast( + types_api_error_ApiError, + parse_obj_as( + type_=types_api_error_ApiError, # type: ignore + object_=_response.json(), + ), + ), + ) + if _response.status_code == 500: + raise InternalServerError( + headers=dict(_response.headers), + body=typing.cast( + types_api_error_ApiError, + parse_obj_as( + type_=types_api_error_ApiError, # type: ignore + object_=_response.json(), + ), + ), + ) + _response_json = _response.json() + except JSONDecodeError: + raise core_api_error_ApiError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.text + ) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) + raise core_api_error_ApiError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response_json + ) + + def remove_credit_bundle( + self, catalog_id: str, credit_bundle_id: str, *, request_options: typing.Optional[RequestOptions] = None + ) -> HttpResponse[None]: + """ + Parameters + ---------- + catalog_id : str + catalog_id + + credit_bundle_id : str + credit_bundle_id + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + HttpResponse[None] + """ + _response = self._client_wrapper.httpx_client.request( + f"catalogs/{encode_path_param(catalog_id)}/credit-bundles/{encode_path_param(credit_bundle_id)}", + method="DELETE", + request_options=request_options, + ) + try: + if 200 <= _response.status_code < 300: + return HttpResponse(response=_response, data=None) + if _response.status_code == 400: + raise BadRequestError( + headers=dict(_response.headers), + body=typing.cast( + types_api_error_ApiError, + parse_obj_as( + type_=types_api_error_ApiError, # type: ignore + object_=_response.json(), + ), + ), + ) + if _response.status_code == 401: + raise UnauthorizedError( + headers=dict(_response.headers), + body=typing.cast( + types_api_error_ApiError, + parse_obj_as( + type_=types_api_error_ApiError, # type: ignore + object_=_response.json(), + ), + ), + ) + if _response.status_code == 403: + raise ForbiddenError( + headers=dict(_response.headers), + body=typing.cast( + types_api_error_ApiError, + parse_obj_as( + type_=types_api_error_ApiError, # type: ignore + object_=_response.json(), + ), + ), + ) + if _response.status_code == 404: + raise NotFoundError( + headers=dict(_response.headers), + body=typing.cast( + types_api_error_ApiError, + parse_obj_as( + type_=types_api_error_ApiError, # type: ignore + object_=_response.json(), + ), + ), + ) + if _response.status_code == 500: + raise InternalServerError( + headers=dict(_response.headers), + body=typing.cast( + types_api_error_ApiError, + parse_obj_as( + type_=types_api_error_ApiError, # type: ignore + object_=_response.json(), + ), + ), + ) + _response_json = _response.json() + except JSONDecodeError: + raise core_api_error_ApiError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.text + ) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) + raise core_api_error_ApiError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response_json + ) + + def get_derived_features( + self, catalog_id: str, *, request_options: typing.Optional[RequestOptions] = None + ) -> HttpResponse[GetDerivedFeaturesResponse]: + """ + Parameters + ---------- + catalog_id : str + catalog_id + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + HttpResponse[GetDerivedFeaturesResponse] + OK + """ + _response = self._client_wrapper.httpx_client.request( + f"catalogs/{encode_path_param(catalog_id)}/features", + method="GET", + request_options=request_options, + ) + try: + if 200 <= _response.status_code < 300: + _data = typing.cast( + GetDerivedFeaturesResponse, + parse_obj_as( + type_=GetDerivedFeaturesResponse, # type: ignore + object_=_response.json(), + ), + ) + return HttpResponse(response=_response, data=_data) + if _response.status_code == 401: + raise UnauthorizedError( + headers=dict(_response.headers), + body=typing.cast( + types_api_error_ApiError, + parse_obj_as( + type_=types_api_error_ApiError, # type: ignore + object_=_response.json(), + ), + ), + ) + if _response.status_code == 403: + raise ForbiddenError( + headers=dict(_response.headers), + body=typing.cast( + types_api_error_ApiError, + parse_obj_as( + type_=types_api_error_ApiError, # type: ignore + object_=_response.json(), + ), + ), + ) + if _response.status_code == 404: + raise NotFoundError( + headers=dict(_response.headers), + body=typing.cast( + types_api_error_ApiError, + parse_obj_as( + type_=types_api_error_ApiError, # type: ignore + object_=_response.json(), + ), + ), + ) + if _response.status_code == 500: + raise InternalServerError( + headers=dict(_response.headers), + body=typing.cast( + types_api_error_ApiError, + parse_obj_as( + type_=types_api_error_ApiError, # type: ignore + object_=_response.json(), + ), + ), + ) + _response_json = _response.json() + except JSONDecodeError: + raise core_api_error_ApiError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.text + ) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) + raise core_api_error_ApiError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response_json + ) + + def get_plans_in_catalog( + self, catalog_id: str, *, request_options: typing.Optional[RequestOptions] = None + ) -> HttpResponse[GetPlansInCatalogResponse]: + """ + Parameters + ---------- + catalog_id : str + catalog_id + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + HttpResponse[GetPlansInCatalogResponse] + OK + """ + _response = self._client_wrapper.httpx_client.request( + f"catalogs/{encode_path_param(catalog_id)}/plans", + method="GET", + request_options=request_options, + ) + try: + if 200 <= _response.status_code < 300: + _data = typing.cast( + GetPlansInCatalogResponse, + parse_obj_as( + type_=GetPlansInCatalogResponse, # type: ignore + object_=_response.json(), + ), + ) + return HttpResponse(response=_response, data=_data) + if _response.status_code == 401: + raise UnauthorizedError( + headers=dict(_response.headers), + body=typing.cast( + types_api_error_ApiError, + parse_obj_as( + type_=types_api_error_ApiError, # type: ignore + object_=_response.json(), + ), + ), + ) + if _response.status_code == 403: + raise ForbiddenError( + headers=dict(_response.headers), + body=typing.cast( + types_api_error_ApiError, + parse_obj_as( + type_=types_api_error_ApiError, # type: ignore + object_=_response.json(), + ), + ), + ) + if _response.status_code == 404: + raise NotFoundError( + headers=dict(_response.headers), + body=typing.cast( + types_api_error_ApiError, + parse_obj_as( + type_=types_api_error_ApiError, # type: ignore + object_=_response.json(), + ), + ), + ) + if _response.status_code == 500: + raise InternalServerError( + headers=dict(_response.headers), + body=typing.cast( + types_api_error_ApiError, + parse_obj_as( + type_=types_api_error_ApiError, # type: ignore + object_=_response.json(), + ), + ), + ) + _response_json = _response.json() + except JSONDecodeError: + raise core_api_error_ApiError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.text + ) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) + raise core_api_error_ApiError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response_json + ) + + def add_plan( + self, catalog_id: str, plan_id: str, *, request_options: typing.Optional[RequestOptions] = None + ) -> HttpResponse[None]: + """ + Parameters + ---------- + catalog_id : str + catalog_id + + plan_id : str + plan_id + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + HttpResponse[None] + """ + _response = self._client_wrapper.httpx_client.request( + f"catalogs/{encode_path_param(catalog_id)}/plans/{encode_path_param(plan_id)}", + method="POST", + request_options=request_options, + ) + try: + if 200 <= _response.status_code < 300: + return HttpResponse(response=_response, data=None) + if _response.status_code == 400: + raise BadRequestError( + headers=dict(_response.headers), + body=typing.cast( + types_api_error_ApiError, + parse_obj_as( + type_=types_api_error_ApiError, # type: ignore + object_=_response.json(), + ), + ), + ) + if _response.status_code == 401: + raise UnauthorizedError( + headers=dict(_response.headers), + body=typing.cast( + types_api_error_ApiError, + parse_obj_as( + type_=types_api_error_ApiError, # type: ignore + object_=_response.json(), + ), + ), + ) + if _response.status_code == 403: + raise ForbiddenError( + headers=dict(_response.headers), + body=typing.cast( + types_api_error_ApiError, + parse_obj_as( + type_=types_api_error_ApiError, # type: ignore + object_=_response.json(), + ), + ), + ) + if _response.status_code == 404: + raise NotFoundError( + headers=dict(_response.headers), + body=typing.cast( + types_api_error_ApiError, + parse_obj_as( + type_=types_api_error_ApiError, # type: ignore + object_=_response.json(), + ), + ), + ) + if _response.status_code == 500: + raise InternalServerError( + headers=dict(_response.headers), + body=typing.cast( + types_api_error_ApiError, + parse_obj_as( + type_=types_api_error_ApiError, # type: ignore + object_=_response.json(), + ), + ), + ) + _response_json = _response.json() + except JSONDecodeError: + raise core_api_error_ApiError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.text + ) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) + raise core_api_error_ApiError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response_json + ) + + def remove_plan( + self, catalog_id: str, plan_id: str, *, request_options: typing.Optional[RequestOptions] = None + ) -> HttpResponse[None]: + """ + Parameters + ---------- + catalog_id : str + catalog_id + + plan_id : str + plan_id + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + HttpResponse[None] + """ + _response = self._client_wrapper.httpx_client.request( + f"catalogs/{encode_path_param(catalog_id)}/plans/{encode_path_param(plan_id)}", + method="DELETE", + request_options=request_options, + ) + try: + if 200 <= _response.status_code < 300: + return HttpResponse(response=_response, data=None) + if _response.status_code == 400: + raise BadRequestError( + headers=dict(_response.headers), + body=typing.cast( + types_api_error_ApiError, + parse_obj_as( + type_=types_api_error_ApiError, # type: ignore + object_=_response.json(), + ), + ), + ) + if _response.status_code == 401: + raise UnauthorizedError( + headers=dict(_response.headers), + body=typing.cast( + types_api_error_ApiError, + parse_obj_as( + type_=types_api_error_ApiError, # type: ignore + object_=_response.json(), + ), + ), + ) + if _response.status_code == 403: + raise ForbiddenError( + headers=dict(_response.headers), + body=typing.cast( + types_api_error_ApiError, + parse_obj_as( + type_=types_api_error_ApiError, # type: ignore + object_=_response.json(), + ), + ), + ) + if _response.status_code == 404: + raise NotFoundError( + headers=dict(_response.headers), + body=typing.cast( + types_api_error_ApiError, + parse_obj_as( + type_=types_api_error_ApiError, # type: ignore + object_=_response.json(), + ), + ), + ) + if _response.status_code == 500: + raise InternalServerError( + headers=dict(_response.headers), + body=typing.cast( + types_api_error_ApiError, + parse_obj_as( + type_=types_api_error_ApiError, # type: ignore + object_=_response.json(), + ), + ), + ) + _response_json = _response.json() + except JSONDecodeError: + raise core_api_error_ApiError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.text + ) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) + raise core_api_error_ApiError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response_json + ) + + +class AsyncRawCatalogsClient: + def __init__(self, *, client_wrapper: AsyncClientWrapper): + self._client_wrapper = client_wrapper + + async def list_catalogs( + self, + *, + is_default: typing.Optional[bool] = None, + q: typing.Optional[str] = None, + limit: typing.Optional[int] = None, + offset: typing.Optional[int] = None, + request_options: typing.Optional[RequestOptions] = None, + ) -> AsyncHttpResponse[ListCatalogsResponse]: + """ + Parameters + ---------- + is_default : typing.Optional[bool] + + q : typing.Optional[str] + Search by catalog name + + limit : typing.Optional[int] + Page limit (default 100) + + offset : typing.Optional[int] + Page offset (default 0) + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + AsyncHttpResponse[ListCatalogsResponse] + OK + """ + _response = await self._client_wrapper.httpx_client.request( + "catalogs", + method="GET", + params={ + "is_default": is_default, + "q": q, + "limit": limit, + "offset": offset, + }, + request_options=request_options, + ) + try: + if 200 <= _response.status_code < 300: + _data = typing.cast( + ListCatalogsResponse, + parse_obj_as( + type_=ListCatalogsResponse, # type: ignore + object_=_response.json(), + ), + ) + return AsyncHttpResponse(response=_response, data=_data) + if _response.status_code == 400: + raise BadRequestError( + headers=dict(_response.headers), + body=typing.cast( + types_api_error_ApiError, + parse_obj_as( + type_=types_api_error_ApiError, # type: ignore + object_=_response.json(), + ), + ), + ) + if _response.status_code == 401: + raise UnauthorizedError( + headers=dict(_response.headers), + body=typing.cast( + types_api_error_ApiError, + parse_obj_as( + type_=types_api_error_ApiError, # type: ignore + object_=_response.json(), + ), + ), + ) + if _response.status_code == 403: + raise ForbiddenError( + headers=dict(_response.headers), + body=typing.cast( + types_api_error_ApiError, + parse_obj_as( + type_=types_api_error_ApiError, # type: ignore + object_=_response.json(), + ), + ), + ) + if _response.status_code == 404: + raise NotFoundError( + headers=dict(_response.headers), + body=typing.cast( + types_api_error_ApiError, + parse_obj_as( + type_=types_api_error_ApiError, # type: ignore + object_=_response.json(), + ), + ), + ) + if _response.status_code == 500: + raise InternalServerError( + headers=dict(_response.headers), + body=typing.cast( + types_api_error_ApiError, + parse_obj_as( + type_=types_api_error_ApiError, # type: ignore + object_=_response.json(), + ), + ), + ) + _response_json = _response.json() + except JSONDecodeError: + raise core_api_error_ApiError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.text + ) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) + raise core_api_error_ApiError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response_json + ) + + async def create_catalog( + self, + *, + is_default: bool, + name: str, + description: typing.Optional[str] = OMIT, + request_options: typing.Optional[RequestOptions] = None, + ) -> AsyncHttpResponse[CreateCatalogResponse]: + """ + Parameters + ---------- + is_default : bool + + name : str + + description : typing.Optional[str] + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + AsyncHttpResponse[CreateCatalogResponse] + Created + """ + _response = await self._client_wrapper.httpx_client.request( + "catalogs", + method="POST", + json={ + "description": description, + "is_default": is_default, + "name": name, + }, + headers={ + "content-type": "application/json", + }, + request_options=request_options, + omit=OMIT, + ) + try: + if 200 <= _response.status_code < 300: + _data = typing.cast( + CreateCatalogResponse, + parse_obj_as( + type_=CreateCatalogResponse, # type: ignore + object_=_response.json(), + ), + ) + return AsyncHttpResponse(response=_response, data=_data) + if _response.status_code == 400: + raise BadRequestError( + headers=dict(_response.headers), + body=typing.cast( + types_api_error_ApiError, + parse_obj_as( + type_=types_api_error_ApiError, # type: ignore + object_=_response.json(), + ), + ), + ) + if _response.status_code == 401: + raise UnauthorizedError( + headers=dict(_response.headers), + body=typing.cast( + types_api_error_ApiError, + parse_obj_as( + type_=types_api_error_ApiError, # type: ignore + object_=_response.json(), + ), + ), + ) + if _response.status_code == 403: + raise ForbiddenError( + headers=dict(_response.headers), + body=typing.cast( + types_api_error_ApiError, + parse_obj_as( + type_=types_api_error_ApiError, # type: ignore + object_=_response.json(), + ), + ), + ) + if _response.status_code == 404: + raise NotFoundError( + headers=dict(_response.headers), + body=typing.cast( + types_api_error_ApiError, + parse_obj_as( + type_=types_api_error_ApiError, # type: ignore + object_=_response.json(), + ), + ), + ) + if _response.status_code == 500: + raise InternalServerError( + headers=dict(_response.headers), + body=typing.cast( + types_api_error_ApiError, + parse_obj_as( + type_=types_api_error_ApiError, # type: ignore + object_=_response.json(), + ), + ), + ) + _response_json = _response.json() + except JSONDecodeError: + raise core_api_error_ApiError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.text + ) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) + raise core_api_error_ApiError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response_json + ) + + async def get_catalog( + self, catalog_id: str, *, request_options: typing.Optional[RequestOptions] = None + ) -> AsyncHttpResponse[GetCatalogResponse]: + """ + Parameters + ---------- + catalog_id : str + catalog_id + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + AsyncHttpResponse[GetCatalogResponse] + OK + """ + _response = await self._client_wrapper.httpx_client.request( + f"catalogs/{encode_path_param(catalog_id)}", + method="GET", + request_options=request_options, + ) + try: + if 200 <= _response.status_code < 300: + _data = typing.cast( + GetCatalogResponse, + parse_obj_as( + type_=GetCatalogResponse, # type: ignore + object_=_response.json(), + ), + ) + return AsyncHttpResponse(response=_response, data=_data) + if _response.status_code == 401: + raise UnauthorizedError( + headers=dict(_response.headers), + body=typing.cast( + types_api_error_ApiError, + parse_obj_as( + type_=types_api_error_ApiError, # type: ignore + object_=_response.json(), + ), + ), + ) + if _response.status_code == 403: + raise ForbiddenError( + headers=dict(_response.headers), + body=typing.cast( + types_api_error_ApiError, + parse_obj_as( + type_=types_api_error_ApiError, # type: ignore + object_=_response.json(), + ), + ), + ) + if _response.status_code == 404: + raise NotFoundError( + headers=dict(_response.headers), + body=typing.cast( + types_api_error_ApiError, + parse_obj_as( + type_=types_api_error_ApiError, # type: ignore + object_=_response.json(), + ), + ), + ) + if _response.status_code == 500: + raise InternalServerError( + headers=dict(_response.headers), + body=typing.cast( + types_api_error_ApiError, + parse_obj_as( + type_=types_api_error_ApiError, # type: ignore + object_=_response.json(), + ), + ), + ) + _response_json = _response.json() + except JSONDecodeError: + raise core_api_error_ApiError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.text + ) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) + raise core_api_error_ApiError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response_json + ) + + async def update_catalog( + self, + catalog_id: str, + *, + description: typing.Optional[str] = OMIT, + is_default: typing.Optional[bool] = OMIT, + name: typing.Optional[str] = OMIT, + request_options: typing.Optional[RequestOptions] = None, + ) -> AsyncHttpResponse[UpdateCatalogResponse]: + """ + Parameters + ---------- + catalog_id : str + catalog_id + + description : typing.Optional[str] + + is_default : typing.Optional[bool] + + name : typing.Optional[str] + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + AsyncHttpResponse[UpdateCatalogResponse] + OK + """ + _response = await self._client_wrapper.httpx_client.request( + f"catalogs/{encode_path_param(catalog_id)}", + method="PUT", + json={ + "description": description, + "is_default": is_default, + "name": name, + }, + headers={ + "content-type": "application/json", + }, + request_options=request_options, + omit=OMIT, + ) + try: + if 200 <= _response.status_code < 300: + _data = typing.cast( + UpdateCatalogResponse, + parse_obj_as( + type_=UpdateCatalogResponse, # type: ignore + object_=_response.json(), + ), + ) + return AsyncHttpResponse(response=_response, data=_data) + if _response.status_code == 400: + raise BadRequestError( + headers=dict(_response.headers), + body=typing.cast( + types_api_error_ApiError, + parse_obj_as( + type_=types_api_error_ApiError, # type: ignore + object_=_response.json(), + ), + ), + ) + if _response.status_code == 401: + raise UnauthorizedError( + headers=dict(_response.headers), + body=typing.cast( + types_api_error_ApiError, + parse_obj_as( + type_=types_api_error_ApiError, # type: ignore + object_=_response.json(), + ), + ), + ) + if _response.status_code == 403: + raise ForbiddenError( + headers=dict(_response.headers), + body=typing.cast( + types_api_error_ApiError, + parse_obj_as( + type_=types_api_error_ApiError, # type: ignore + object_=_response.json(), + ), + ), + ) + if _response.status_code == 404: + raise NotFoundError( + headers=dict(_response.headers), + body=typing.cast( + types_api_error_ApiError, + parse_obj_as( + type_=types_api_error_ApiError, # type: ignore + object_=_response.json(), + ), + ), + ) + if _response.status_code == 500: + raise InternalServerError( + headers=dict(_response.headers), + body=typing.cast( + types_api_error_ApiError, + parse_obj_as( + type_=types_api_error_ApiError, # type: ignore + object_=_response.json(), + ), + ), + ) + _response_json = _response.json() + except JSONDecodeError: + raise core_api_error_ApiError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.text + ) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) + raise core_api_error_ApiError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response_json + ) + + async def delete_catalog( + self, catalog_id: str, *, request_options: typing.Optional[RequestOptions] = None + ) -> AsyncHttpResponse[DeleteCatalogResponse]: + """ + Parameters + ---------- + catalog_id : str + catalog_id + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + AsyncHttpResponse[DeleteCatalogResponse] + OK + """ + _response = await self._client_wrapper.httpx_client.request( + f"catalogs/{encode_path_param(catalog_id)}", + method="DELETE", + request_options=request_options, + ) + try: + if 200 <= _response.status_code < 300: + _data = typing.cast( + DeleteCatalogResponse, + parse_obj_as( + type_=DeleteCatalogResponse, # type: ignore + object_=_response.json(), + ), + ) + return AsyncHttpResponse(response=_response, data=_data) + if _response.status_code == 400: + raise BadRequestError( + headers=dict(_response.headers), + body=typing.cast( + types_api_error_ApiError, + parse_obj_as( + type_=types_api_error_ApiError, # type: ignore + object_=_response.json(), + ), + ), + ) + if _response.status_code == 401: + raise UnauthorizedError( + headers=dict(_response.headers), + body=typing.cast( + types_api_error_ApiError, + parse_obj_as( + type_=types_api_error_ApiError, # type: ignore + object_=_response.json(), + ), + ), + ) + if _response.status_code == 403: + raise ForbiddenError( + headers=dict(_response.headers), + body=typing.cast( + types_api_error_ApiError, + parse_obj_as( + type_=types_api_error_ApiError, # type: ignore + object_=_response.json(), + ), + ), + ) + if _response.status_code == 404: + raise NotFoundError( + headers=dict(_response.headers), + body=typing.cast( + types_api_error_ApiError, + parse_obj_as( + type_=types_api_error_ApiError, # type: ignore + object_=_response.json(), + ), + ), + ) + if _response.status_code == 500: + raise InternalServerError( + headers=dict(_response.headers), + body=typing.cast( + types_api_error_ApiError, + parse_obj_as( + type_=types_api_error_ApiError, # type: ignore + object_=_response.json(), + ), + ), + ) + _response_json = _response.json() + except JSONDecodeError: + raise core_api_error_ApiError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.text + ) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) + raise core_api_error_ApiError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response_json + ) + + async def get_configuration( + self, catalog_id: str, *, request_options: typing.Optional[RequestOptions] = None + ) -> AsyncHttpResponse[GetConfigurationResponse]: + """ + Parameters + ---------- + catalog_id : str + catalog_id + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + AsyncHttpResponse[GetConfigurationResponse] + OK + """ + _response = await self._client_wrapper.httpx_client.request( + f"catalogs/{encode_path_param(catalog_id)}/configuration", + method="GET", + request_options=request_options, + ) + try: + if 200 <= _response.status_code < 300: + _data = typing.cast( + GetConfigurationResponse, + parse_obj_as( + type_=GetConfigurationResponse, # type: ignore + object_=_response.json(), + ), + ) + return AsyncHttpResponse(response=_response, data=_data) + if _response.status_code == 401: + raise UnauthorizedError( + headers=dict(_response.headers), + body=typing.cast( + types_api_error_ApiError, + parse_obj_as( + type_=types_api_error_ApiError, # type: ignore + object_=_response.json(), + ), + ), + ) + if _response.status_code == 403: + raise ForbiddenError( + headers=dict(_response.headers), + body=typing.cast( + types_api_error_ApiError, + parse_obj_as( + type_=types_api_error_ApiError, # type: ignore + object_=_response.json(), + ), + ), + ) + if _response.status_code == 404: + raise NotFoundError( + headers=dict(_response.headers), + body=typing.cast( + types_api_error_ApiError, + parse_obj_as( + type_=types_api_error_ApiError, # type: ignore + object_=_response.json(), + ), + ), + ) + if _response.status_code == 500: + raise InternalServerError( + headers=dict(_response.headers), + body=typing.cast( + types_api_error_ApiError, + parse_obj_as( + type_=types_api_error_ApiError, # type: ignore + object_=_response.json(), + ), + ), + ) + _response_json = _response.json() + except JSONDecodeError: + raise core_api_error_ApiError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.text + ) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) + raise core_api_error_ApiError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response_json + ) + + async def update_configuration( + self, + catalog_id: str, + *, + custom_plan_cta_text: typing.Optional[str] = OMIT, + custom_plan_cta_url: typing.Optional[str] = OMIT, + custom_plan_price_text: typing.Optional[str] = OMIT, + custom_plans_visible: typing.Optional[bool] = OMIT, + ordered_add_ons: typing.Optional[typing.Sequence[CatalogConfigOrderedPlan]] = OMIT, + ordered_bundles: typing.Optional[typing.Sequence[CatalogConfigOrderedBundle]] = OMIT, + ordered_plans: typing.Optional[typing.Sequence[CatalogConfigOrderedPlan]] = OMIT, + pricing_model: typing.Optional[str] = OMIT, + pricing_url: typing.Optional[str] = OMIT, + request_options: typing.Optional[RequestOptions] = None, + ) -> AsyncHttpResponse[UpdateConfigurationResponse]: + """ + Parameters + ---------- + catalog_id : str + catalog_id + + custom_plan_cta_text : typing.Optional[str] + + custom_plan_cta_url : typing.Optional[str] + + custom_plan_price_text : typing.Optional[str] + + custom_plans_visible : typing.Optional[bool] + + ordered_add_ons : typing.Optional[typing.Sequence[CatalogConfigOrderedPlan]] + + ordered_bundles : typing.Optional[typing.Sequence[CatalogConfigOrderedBundle]] + + ordered_plans : typing.Optional[typing.Sequence[CatalogConfigOrderedPlan]] + + pricing_model : typing.Optional[str] + + pricing_url : typing.Optional[str] + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + AsyncHttpResponse[UpdateConfigurationResponse] + OK + """ + _response = await self._client_wrapper.httpx_client.request( + f"catalogs/{encode_path_param(catalog_id)}/configuration", + method="PUT", + json={ + "custom_plan_cta_text": custom_plan_cta_text, + "custom_plan_cta_url": custom_plan_cta_url, + "custom_plan_price_text": custom_plan_price_text, + "custom_plans_visible": custom_plans_visible, + "ordered_add_ons": convert_and_respect_annotation_metadata( + object_=ordered_add_ons, annotation=typing.Sequence[CatalogConfigOrderedPlan], direction="write" + ), + "ordered_bundles": convert_and_respect_annotation_metadata( + object_=ordered_bundles, annotation=typing.Sequence[CatalogConfigOrderedBundle], direction="write" + ), + "ordered_plans": convert_and_respect_annotation_metadata( + object_=ordered_plans, annotation=typing.Sequence[CatalogConfigOrderedPlan], direction="write" + ), + "pricing_model": pricing_model, + "pricing_url": pricing_url, + }, + headers={ + "content-type": "application/json", + }, + request_options=request_options, + omit=OMIT, + ) + try: + if 200 <= _response.status_code < 300: + _data = typing.cast( + UpdateConfigurationResponse, + parse_obj_as( + type_=UpdateConfigurationResponse, # type: ignore + object_=_response.json(), + ), + ) + return AsyncHttpResponse(response=_response, data=_data) + if _response.status_code == 400: + raise BadRequestError( + headers=dict(_response.headers), + body=typing.cast( + types_api_error_ApiError, + parse_obj_as( + type_=types_api_error_ApiError, # type: ignore + object_=_response.json(), + ), + ), + ) + if _response.status_code == 401: + raise UnauthorizedError( + headers=dict(_response.headers), + body=typing.cast( + types_api_error_ApiError, + parse_obj_as( + type_=types_api_error_ApiError, # type: ignore + object_=_response.json(), + ), + ), + ) + if _response.status_code == 403: + raise ForbiddenError( + headers=dict(_response.headers), + body=typing.cast( + types_api_error_ApiError, + parse_obj_as( + type_=types_api_error_ApiError, # type: ignore + object_=_response.json(), + ), + ), + ) + if _response.status_code == 404: + raise NotFoundError( + headers=dict(_response.headers), + body=typing.cast( + types_api_error_ApiError, + parse_obj_as( + type_=types_api_error_ApiError, # type: ignore + object_=_response.json(), + ), + ), + ) + if _response.status_code == 500: + raise InternalServerError( + headers=dict(_response.headers), + body=typing.cast( + types_api_error_ApiError, + parse_obj_as( + type_=types_api_error_ApiError, # type: ignore + object_=_response.json(), + ), + ), + ) + _response_json = _response.json() + except JSONDecodeError: + raise core_api_error_ApiError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.text + ) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) + raise core_api_error_ApiError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response_json + ) + + async def get_credit_bundles_in_catalog( + self, catalog_id: str, *, request_options: typing.Optional[RequestOptions] = None + ) -> AsyncHttpResponse[GetCreditBundlesInCatalogResponse]: + """ + Parameters + ---------- + catalog_id : str + catalog_id + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + AsyncHttpResponse[GetCreditBundlesInCatalogResponse] + OK + """ + _response = await self._client_wrapper.httpx_client.request( + f"catalogs/{encode_path_param(catalog_id)}/credit-bundles", + method="GET", + request_options=request_options, + ) + try: + if 200 <= _response.status_code < 300: + _data = typing.cast( + GetCreditBundlesInCatalogResponse, + parse_obj_as( + type_=GetCreditBundlesInCatalogResponse, # type: ignore + object_=_response.json(), + ), + ) + return AsyncHttpResponse(response=_response, data=_data) + if _response.status_code == 401: + raise UnauthorizedError( + headers=dict(_response.headers), + body=typing.cast( + types_api_error_ApiError, + parse_obj_as( + type_=types_api_error_ApiError, # type: ignore + object_=_response.json(), + ), + ), + ) + if _response.status_code == 403: + raise ForbiddenError( + headers=dict(_response.headers), + body=typing.cast( + types_api_error_ApiError, + parse_obj_as( + type_=types_api_error_ApiError, # type: ignore + object_=_response.json(), + ), + ), + ) + if _response.status_code == 404: + raise NotFoundError( + headers=dict(_response.headers), + body=typing.cast( + types_api_error_ApiError, + parse_obj_as( + type_=types_api_error_ApiError, # type: ignore + object_=_response.json(), + ), + ), + ) + if _response.status_code == 500: + raise InternalServerError( + headers=dict(_response.headers), + body=typing.cast( + types_api_error_ApiError, + parse_obj_as( + type_=types_api_error_ApiError, # type: ignore + object_=_response.json(), + ), + ), + ) + _response_json = _response.json() + except JSONDecodeError: + raise core_api_error_ApiError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.text + ) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) + raise core_api_error_ApiError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response_json + ) + + async def add_credit_bundle( + self, catalog_id: str, credit_bundle_id: str, *, request_options: typing.Optional[RequestOptions] = None + ) -> AsyncHttpResponse[None]: + """ + Parameters + ---------- + catalog_id : str + catalog_id + + credit_bundle_id : str + credit_bundle_id + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + AsyncHttpResponse[None] + """ + _response = await self._client_wrapper.httpx_client.request( + f"catalogs/{encode_path_param(catalog_id)}/credit-bundles/{encode_path_param(credit_bundle_id)}", + method="POST", + request_options=request_options, + ) + try: + if 200 <= _response.status_code < 300: + return AsyncHttpResponse(response=_response, data=None) + if _response.status_code == 400: + raise BadRequestError( + headers=dict(_response.headers), + body=typing.cast( + types_api_error_ApiError, + parse_obj_as( + type_=types_api_error_ApiError, # type: ignore + object_=_response.json(), + ), + ), + ) + if _response.status_code == 401: + raise UnauthorizedError( + headers=dict(_response.headers), + body=typing.cast( + types_api_error_ApiError, + parse_obj_as( + type_=types_api_error_ApiError, # type: ignore + object_=_response.json(), + ), + ), + ) + if _response.status_code == 403: + raise ForbiddenError( + headers=dict(_response.headers), + body=typing.cast( + types_api_error_ApiError, + parse_obj_as( + type_=types_api_error_ApiError, # type: ignore + object_=_response.json(), + ), + ), + ) + if _response.status_code == 404: + raise NotFoundError( + headers=dict(_response.headers), + body=typing.cast( + types_api_error_ApiError, + parse_obj_as( + type_=types_api_error_ApiError, # type: ignore + object_=_response.json(), + ), + ), + ) + if _response.status_code == 500: + raise InternalServerError( + headers=dict(_response.headers), + body=typing.cast( + types_api_error_ApiError, + parse_obj_as( + type_=types_api_error_ApiError, # type: ignore + object_=_response.json(), + ), + ), + ) + _response_json = _response.json() + except JSONDecodeError: + raise core_api_error_ApiError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.text + ) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) + raise core_api_error_ApiError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response_json + ) + + async def remove_credit_bundle( + self, catalog_id: str, credit_bundle_id: str, *, request_options: typing.Optional[RequestOptions] = None + ) -> AsyncHttpResponse[None]: + """ + Parameters + ---------- + catalog_id : str + catalog_id + + credit_bundle_id : str + credit_bundle_id + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + AsyncHttpResponse[None] + """ + _response = await self._client_wrapper.httpx_client.request( + f"catalogs/{encode_path_param(catalog_id)}/credit-bundles/{encode_path_param(credit_bundle_id)}", + method="DELETE", + request_options=request_options, + ) + try: + if 200 <= _response.status_code < 300: + return AsyncHttpResponse(response=_response, data=None) + if _response.status_code == 400: + raise BadRequestError( + headers=dict(_response.headers), + body=typing.cast( + types_api_error_ApiError, + parse_obj_as( + type_=types_api_error_ApiError, # type: ignore + object_=_response.json(), + ), + ), + ) + if _response.status_code == 401: + raise UnauthorizedError( + headers=dict(_response.headers), + body=typing.cast( + types_api_error_ApiError, + parse_obj_as( + type_=types_api_error_ApiError, # type: ignore + object_=_response.json(), + ), + ), + ) + if _response.status_code == 403: + raise ForbiddenError( + headers=dict(_response.headers), + body=typing.cast( + types_api_error_ApiError, + parse_obj_as( + type_=types_api_error_ApiError, # type: ignore + object_=_response.json(), + ), + ), + ) + if _response.status_code == 404: + raise NotFoundError( + headers=dict(_response.headers), + body=typing.cast( + types_api_error_ApiError, + parse_obj_as( + type_=types_api_error_ApiError, # type: ignore + object_=_response.json(), + ), + ), + ) + if _response.status_code == 500: + raise InternalServerError( + headers=dict(_response.headers), + body=typing.cast( + types_api_error_ApiError, + parse_obj_as( + type_=types_api_error_ApiError, # type: ignore + object_=_response.json(), + ), + ), + ) + _response_json = _response.json() + except JSONDecodeError: + raise core_api_error_ApiError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.text + ) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) + raise core_api_error_ApiError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response_json + ) + + async def get_derived_features( + self, catalog_id: str, *, request_options: typing.Optional[RequestOptions] = None + ) -> AsyncHttpResponse[GetDerivedFeaturesResponse]: + """ + Parameters + ---------- + catalog_id : str + catalog_id + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + AsyncHttpResponse[GetDerivedFeaturesResponse] + OK + """ + _response = await self._client_wrapper.httpx_client.request( + f"catalogs/{encode_path_param(catalog_id)}/features", + method="GET", + request_options=request_options, + ) + try: + if 200 <= _response.status_code < 300: + _data = typing.cast( + GetDerivedFeaturesResponse, + parse_obj_as( + type_=GetDerivedFeaturesResponse, # type: ignore + object_=_response.json(), + ), + ) + return AsyncHttpResponse(response=_response, data=_data) + if _response.status_code == 401: + raise UnauthorizedError( + headers=dict(_response.headers), + body=typing.cast( + types_api_error_ApiError, + parse_obj_as( + type_=types_api_error_ApiError, # type: ignore + object_=_response.json(), + ), + ), + ) + if _response.status_code == 403: + raise ForbiddenError( + headers=dict(_response.headers), + body=typing.cast( + types_api_error_ApiError, + parse_obj_as( + type_=types_api_error_ApiError, # type: ignore + object_=_response.json(), + ), + ), + ) + if _response.status_code == 404: + raise NotFoundError( + headers=dict(_response.headers), + body=typing.cast( + types_api_error_ApiError, + parse_obj_as( + type_=types_api_error_ApiError, # type: ignore + object_=_response.json(), + ), + ), + ) + if _response.status_code == 500: + raise InternalServerError( + headers=dict(_response.headers), + body=typing.cast( + types_api_error_ApiError, + parse_obj_as( + type_=types_api_error_ApiError, # type: ignore + object_=_response.json(), + ), + ), + ) + _response_json = _response.json() + except JSONDecodeError: + raise core_api_error_ApiError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.text + ) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) + raise core_api_error_ApiError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response_json + ) + + async def get_plans_in_catalog( + self, catalog_id: str, *, request_options: typing.Optional[RequestOptions] = None + ) -> AsyncHttpResponse[GetPlansInCatalogResponse]: + """ + Parameters + ---------- + catalog_id : str + catalog_id + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + AsyncHttpResponse[GetPlansInCatalogResponse] + OK + """ + _response = await self._client_wrapper.httpx_client.request( + f"catalogs/{encode_path_param(catalog_id)}/plans", + method="GET", + request_options=request_options, + ) + try: + if 200 <= _response.status_code < 300: + _data = typing.cast( + GetPlansInCatalogResponse, + parse_obj_as( + type_=GetPlansInCatalogResponse, # type: ignore + object_=_response.json(), + ), + ) + return AsyncHttpResponse(response=_response, data=_data) + if _response.status_code == 401: + raise UnauthorizedError( + headers=dict(_response.headers), + body=typing.cast( + types_api_error_ApiError, + parse_obj_as( + type_=types_api_error_ApiError, # type: ignore + object_=_response.json(), + ), + ), + ) + if _response.status_code == 403: + raise ForbiddenError( + headers=dict(_response.headers), + body=typing.cast( + types_api_error_ApiError, + parse_obj_as( + type_=types_api_error_ApiError, # type: ignore + object_=_response.json(), + ), + ), + ) + if _response.status_code == 404: + raise NotFoundError( + headers=dict(_response.headers), + body=typing.cast( + types_api_error_ApiError, + parse_obj_as( + type_=types_api_error_ApiError, # type: ignore + object_=_response.json(), + ), + ), + ) + if _response.status_code == 500: + raise InternalServerError( + headers=dict(_response.headers), + body=typing.cast( + types_api_error_ApiError, + parse_obj_as( + type_=types_api_error_ApiError, # type: ignore + object_=_response.json(), + ), + ), + ) + _response_json = _response.json() + except JSONDecodeError: + raise core_api_error_ApiError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.text + ) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) + raise core_api_error_ApiError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response_json + ) + + async def add_plan( + self, catalog_id: str, plan_id: str, *, request_options: typing.Optional[RequestOptions] = None + ) -> AsyncHttpResponse[None]: + """ + Parameters + ---------- + catalog_id : str + catalog_id + + plan_id : str + plan_id + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + AsyncHttpResponse[None] + """ + _response = await self._client_wrapper.httpx_client.request( + f"catalogs/{encode_path_param(catalog_id)}/plans/{encode_path_param(plan_id)}", + method="POST", + request_options=request_options, + ) + try: + if 200 <= _response.status_code < 300: + return AsyncHttpResponse(response=_response, data=None) + if _response.status_code == 400: + raise BadRequestError( + headers=dict(_response.headers), + body=typing.cast( + types_api_error_ApiError, + parse_obj_as( + type_=types_api_error_ApiError, # type: ignore + object_=_response.json(), + ), + ), + ) + if _response.status_code == 401: + raise UnauthorizedError( + headers=dict(_response.headers), + body=typing.cast( + types_api_error_ApiError, + parse_obj_as( + type_=types_api_error_ApiError, # type: ignore + object_=_response.json(), + ), + ), + ) + if _response.status_code == 403: + raise ForbiddenError( + headers=dict(_response.headers), + body=typing.cast( + types_api_error_ApiError, + parse_obj_as( + type_=types_api_error_ApiError, # type: ignore + object_=_response.json(), + ), + ), + ) + if _response.status_code == 404: + raise NotFoundError( + headers=dict(_response.headers), + body=typing.cast( + types_api_error_ApiError, + parse_obj_as( + type_=types_api_error_ApiError, # type: ignore + object_=_response.json(), + ), + ), + ) + if _response.status_code == 500: + raise InternalServerError( + headers=dict(_response.headers), + body=typing.cast( + types_api_error_ApiError, + parse_obj_as( + type_=types_api_error_ApiError, # type: ignore + object_=_response.json(), + ), + ), + ) + _response_json = _response.json() + except JSONDecodeError: + raise core_api_error_ApiError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.text + ) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) + raise core_api_error_ApiError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response_json + ) + + async def remove_plan( + self, catalog_id: str, plan_id: str, *, request_options: typing.Optional[RequestOptions] = None + ) -> AsyncHttpResponse[None]: + """ + Parameters + ---------- + catalog_id : str + catalog_id + + plan_id : str + plan_id + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + AsyncHttpResponse[None] + """ + _response = await self._client_wrapper.httpx_client.request( + f"catalogs/{encode_path_param(catalog_id)}/plans/{encode_path_param(plan_id)}", + method="DELETE", + request_options=request_options, + ) + try: + if 200 <= _response.status_code < 300: + return AsyncHttpResponse(response=_response, data=None) + if _response.status_code == 400: + raise BadRequestError( + headers=dict(_response.headers), + body=typing.cast( + types_api_error_ApiError, + parse_obj_as( + type_=types_api_error_ApiError, # type: ignore + object_=_response.json(), + ), + ), + ) + if _response.status_code == 401: + raise UnauthorizedError( + headers=dict(_response.headers), + body=typing.cast( + types_api_error_ApiError, + parse_obj_as( + type_=types_api_error_ApiError, # type: ignore + object_=_response.json(), + ), + ), + ) + if _response.status_code == 403: + raise ForbiddenError( + headers=dict(_response.headers), + body=typing.cast( + types_api_error_ApiError, + parse_obj_as( + type_=types_api_error_ApiError, # type: ignore + object_=_response.json(), + ), + ), + ) + if _response.status_code == 404: + raise NotFoundError( + headers=dict(_response.headers), + body=typing.cast( + types_api_error_ApiError, + parse_obj_as( + type_=types_api_error_ApiError, # type: ignore + object_=_response.json(), + ), + ), + ) + if _response.status_code == 500: + raise InternalServerError( + headers=dict(_response.headers), + body=typing.cast( + types_api_error_ApiError, + parse_obj_as( + type_=types_api_error_ApiError, # type: ignore + object_=_response.json(), + ), + ), + ) + _response_json = _response.json() + except JSONDecodeError: + raise core_api_error_ApiError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.text + ) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) + raise core_api_error_ApiError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response_json + ) diff --git a/src/schematic/catalogs/types/__init__.py b/src/schematic/catalogs/types/__init__.py new file mode 100644 index 0000000..b3134c8 --- /dev/null +++ b/src/schematic/catalogs/types/__init__.py @@ -0,0 +1,68 @@ +# 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 .create_catalog_response import CreateCatalogResponse + from .delete_catalog_response import DeleteCatalogResponse + from .get_catalog_response import GetCatalogResponse + from .get_configuration_response import GetConfigurationResponse + from .get_credit_bundles_in_catalog_response import GetCreditBundlesInCatalogResponse + from .get_derived_features_response import GetDerivedFeaturesResponse + from .get_plans_in_catalog_response import GetPlansInCatalogResponse + from .list_catalogs_params import ListCatalogsParams + from .list_catalogs_response import ListCatalogsResponse + from .update_catalog_response import UpdateCatalogResponse + from .update_configuration_response import UpdateConfigurationResponse +_dynamic_imports: typing.Dict[str, str] = { + "CreateCatalogResponse": ".create_catalog_response", + "DeleteCatalogResponse": ".delete_catalog_response", + "GetCatalogResponse": ".get_catalog_response", + "GetConfigurationResponse": ".get_configuration_response", + "GetCreditBundlesInCatalogResponse": ".get_credit_bundles_in_catalog_response", + "GetDerivedFeaturesResponse": ".get_derived_features_response", + "GetPlansInCatalogResponse": ".get_plans_in_catalog_response", + "ListCatalogsParams": ".list_catalogs_params", + "ListCatalogsResponse": ".list_catalogs_response", + "UpdateCatalogResponse": ".update_catalog_response", + "UpdateConfigurationResponse": ".update_configuration_response", +} + + +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__ = [ + "CreateCatalogResponse", + "DeleteCatalogResponse", + "GetCatalogResponse", + "GetConfigurationResponse", + "GetCreditBundlesInCatalogResponse", + "GetDerivedFeaturesResponse", + "GetPlansInCatalogResponse", + "ListCatalogsParams", + "ListCatalogsResponse", + "UpdateCatalogResponse", + "UpdateConfigurationResponse", +] diff --git a/src/schematic/catalogs/types/create_catalog_response.py b/src/schematic/catalogs/types/create_catalog_response.py new file mode 100644 index 0000000..2fadf68 --- /dev/null +++ b/src/schematic/catalogs/types/create_catalog_response.py @@ -0,0 +1,24 @@ +# This file was auto-generated by Fern from our API Definition. + +import typing + +import pydantic +from ...core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel +from ...types.catalog_response_data import CatalogResponseData + + +class CreateCatalogResponse(UniversalBaseModel): + data: CatalogResponseData + params: typing.Dict[str, typing.Any] = pydantic.Field() + """ + Input parameters + """ + + if IS_PYDANTIC_V2: + model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2 + else: + + class Config: + frozen = True + smart_union = True + extra = pydantic.Extra.allow diff --git a/src/schematic/catalogs/types/delete_catalog_response.py b/src/schematic/catalogs/types/delete_catalog_response.py new file mode 100644 index 0000000..ea16c1f --- /dev/null +++ b/src/schematic/catalogs/types/delete_catalog_response.py @@ -0,0 +1,24 @@ +# This file was auto-generated by Fern from our API Definition. + +import typing + +import pydantic +from ...core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel +from ...types.delete_response import DeleteResponse + + +class DeleteCatalogResponse(UniversalBaseModel): + data: DeleteResponse + params: typing.Dict[str, typing.Any] = pydantic.Field() + """ + Input parameters + """ + + if IS_PYDANTIC_V2: + model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2 + else: + + class Config: + frozen = True + smart_union = True + extra = pydantic.Extra.allow diff --git a/src/schematic/catalogs/types/get_catalog_response.py b/src/schematic/catalogs/types/get_catalog_response.py new file mode 100644 index 0000000..cd4630c --- /dev/null +++ b/src/schematic/catalogs/types/get_catalog_response.py @@ -0,0 +1,24 @@ +# This file was auto-generated by Fern from our API Definition. + +import typing + +import pydantic +from ...core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel +from ...types.catalog_response_data import CatalogResponseData + + +class GetCatalogResponse(UniversalBaseModel): + data: CatalogResponseData + params: typing.Dict[str, typing.Any] = pydantic.Field() + """ + Input parameters + """ + + if IS_PYDANTIC_V2: + model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2 + else: + + class Config: + frozen = True + smart_union = True + extra = pydantic.Extra.allow diff --git a/src/schematic/catalogs/types/get_configuration_response.py b/src/schematic/catalogs/types/get_configuration_response.py new file mode 100644 index 0000000..12aae28 --- /dev/null +++ b/src/schematic/catalogs/types/get_configuration_response.py @@ -0,0 +1,24 @@ +# This file was auto-generated by Fern from our API Definition. + +import typing + +import pydantic +from ...core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel +from ...types.catalog_configuration_response_data import CatalogConfigurationResponseData + + +class GetConfigurationResponse(UniversalBaseModel): + data: CatalogConfigurationResponseData + params: typing.Dict[str, typing.Any] = pydantic.Field() + """ + Input parameters + """ + + if IS_PYDANTIC_V2: + model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2 + else: + + class Config: + frozen = True + smart_union = True + extra = pydantic.Extra.allow diff --git a/src/schematic/catalogs/types/get_credit_bundles_in_catalog_response.py b/src/schematic/catalogs/types/get_credit_bundles_in_catalog_response.py new file mode 100644 index 0000000..86cc984 --- /dev/null +++ b/src/schematic/catalogs/types/get_credit_bundles_in_catalog_response.py @@ -0,0 +1,24 @@ +# This file was auto-generated by Fern from our API Definition. + +import typing + +import pydantic +from ...core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel +from ...types.catalog_credit_bundle_i_ds_response_data import CatalogCreditBundleIDsResponseData + + +class GetCreditBundlesInCatalogResponse(UniversalBaseModel): + data: CatalogCreditBundleIDsResponseData + params: typing.Dict[str, typing.Any] = pydantic.Field() + """ + Input parameters + """ + + if IS_PYDANTIC_V2: + model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2 + else: + + class Config: + frozen = True + smart_union = True + extra = pydantic.Extra.allow diff --git a/src/schematic/catalogs/types/get_derived_features_response.py b/src/schematic/catalogs/types/get_derived_features_response.py new file mode 100644 index 0000000..2272c8e --- /dev/null +++ b/src/schematic/catalogs/types/get_derived_features_response.py @@ -0,0 +1,24 @@ +# This file was auto-generated by Fern from our API Definition. + +import typing + +import pydantic +from ...core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel +from ...types.catalog_derived_features_response_data import CatalogDerivedFeaturesResponseData + + +class GetDerivedFeaturesResponse(UniversalBaseModel): + data: CatalogDerivedFeaturesResponseData + params: typing.Dict[str, typing.Any] = pydantic.Field() + """ + Input parameters + """ + + if IS_PYDANTIC_V2: + model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2 + else: + + class Config: + frozen = True + smart_union = True + extra = pydantic.Extra.allow diff --git a/src/schematic/catalogs/types/get_plans_in_catalog_response.py b/src/schematic/catalogs/types/get_plans_in_catalog_response.py new file mode 100644 index 0000000..026dbaa --- /dev/null +++ b/src/schematic/catalogs/types/get_plans_in_catalog_response.py @@ -0,0 +1,24 @@ +# This file was auto-generated by Fern from our API Definition. + +import typing + +import pydantic +from ...core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel +from ...types.catalog_plan_i_ds_response_data import CatalogPlanIDsResponseData + + +class GetPlansInCatalogResponse(UniversalBaseModel): + data: CatalogPlanIDsResponseData + params: typing.Dict[str, typing.Any] = pydantic.Field() + """ + Input parameters + """ + + if IS_PYDANTIC_V2: + model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2 + else: + + class Config: + frozen = True + smart_union = True + extra = pydantic.Extra.allow diff --git a/src/schematic/catalogs/types/list_catalogs_params.py b/src/schematic/catalogs/types/list_catalogs_params.py new file mode 100644 index 0000000..d780840 --- /dev/null +++ b/src/schematic/catalogs/types/list_catalogs_params.py @@ -0,0 +1,37 @@ +# This file was auto-generated by Fern from our API Definition. + +import typing + +import pydantic +from ...core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel + + +class ListCatalogsParams(UniversalBaseModel): + """ + Input parameters + """ + + is_default: typing.Optional[bool] = None + limit: typing.Optional[int] = pydantic.Field(default=None) + """ + Page limit (default 100) + """ + + offset: typing.Optional[int] = pydantic.Field(default=None) + """ + Page offset (default 0) + """ + + q: typing.Optional[str] = pydantic.Field(default=None) + """ + Search by catalog name + """ + + if IS_PYDANTIC_V2: + model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2 + else: + + class Config: + frozen = True + smart_union = True + extra = pydantic.Extra.allow diff --git a/src/schematic/catalogs/types/list_catalogs_response.py b/src/schematic/catalogs/types/list_catalogs_response.py new file mode 100644 index 0000000..6804246 --- /dev/null +++ b/src/schematic/catalogs/types/list_catalogs_response.py @@ -0,0 +1,25 @@ +# This file was auto-generated by Fern from our API Definition. + +import typing + +import pydantic +from ...core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel +from ...types.catalog_response_data import CatalogResponseData +from .list_catalogs_params import ListCatalogsParams + + +class ListCatalogsResponse(UniversalBaseModel): + data: typing.List[CatalogResponseData] + params: ListCatalogsParams = pydantic.Field() + """ + Input parameters + """ + + if IS_PYDANTIC_V2: + model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2 + else: + + class Config: + frozen = True + smart_union = True + extra = pydantic.Extra.allow diff --git a/src/schematic/catalogs/types/update_catalog_response.py b/src/schematic/catalogs/types/update_catalog_response.py new file mode 100644 index 0000000..54500cd --- /dev/null +++ b/src/schematic/catalogs/types/update_catalog_response.py @@ -0,0 +1,24 @@ +# This file was auto-generated by Fern from our API Definition. + +import typing + +import pydantic +from ...core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel +from ...types.catalog_response_data import CatalogResponseData + + +class UpdateCatalogResponse(UniversalBaseModel): + data: CatalogResponseData + params: typing.Dict[str, typing.Any] = pydantic.Field() + """ + Input parameters + """ + + if IS_PYDANTIC_V2: + model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2 + else: + + class Config: + frozen = True + smart_union = True + extra = pydantic.Extra.allow diff --git a/src/schematic/catalogs/types/update_configuration_response.py b/src/schematic/catalogs/types/update_configuration_response.py new file mode 100644 index 0000000..0e05ba5 --- /dev/null +++ b/src/schematic/catalogs/types/update_configuration_response.py @@ -0,0 +1,24 @@ +# This file was auto-generated by Fern from our API Definition. + +import typing + +import pydantic +from ...core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel +from ...types.catalog_response_data import CatalogResponseData + + +class UpdateConfigurationResponse(UniversalBaseModel): + data: CatalogResponseData + params: typing.Dict[str, typing.Any] = pydantic.Field() + """ + Input parameters + """ + + if IS_PYDANTIC_V2: + model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2 + else: + + class Config: + frozen = True + smart_union = True + extra = pydantic.Extra.allow diff --git a/src/schematic/companies/client.py b/src/schematic/companies/client.py index aa396ca..94a71ab 100644 --- a/src/schematic/companies/client.py +++ b/src/schematic/companies/client.py @@ -229,6 +229,8 @@ def upsert_company( self, *, keys: typing.Dict[str, str], + base_plan_id: typing.Optional[str] = OMIT, + base_plan_price_id: typing.Optional[str] = OMIT, id: typing.Optional[str] = OMIT, last_seen_at: typing.Optional[dt.datetime] = OMIT, name: typing.Optional[str] = OMIT, @@ -243,6 +245,12 @@ def upsert_company( keys : typing.Dict[str, str] See [Key Management](https://docs.schematichq.com/developer_resources/key_management) for more information + base_plan_id : typing.Optional[str] + Assign this base plan when creating the company (starts with plan_). Takes precedence over the environment's initial plan and must be provisionable without a payment method. + + base_plan_price_id : typing.Optional[str] + The Schematic price to provision for base_plan_id (starts with bilpp_). Required and must be $0 for a billing-linked plan; omit for a plan that is not billing-linked. + id : typing.Optional[str] If you know the Schematic ID, you can use that here instead of keys @@ -278,6 +286,8 @@ def upsert_company( """ _response = self._raw_client.upsert_company( keys=keys, + base_plan_id=base_plan_id, + base_plan_price_id=base_plan_price_id, id=id, last_seen_at=last_seen_at, name=name, @@ -520,6 +530,8 @@ def create_company( self, *, keys: typing.Dict[str, str], + base_plan_id: typing.Optional[str] = OMIT, + base_plan_price_id: typing.Optional[str] = OMIT, id: typing.Optional[str] = OMIT, last_seen_at: typing.Optional[dt.datetime] = OMIT, name: typing.Optional[str] = OMIT, @@ -534,6 +546,12 @@ def create_company( keys : typing.Dict[str, str] See [Key Management](https://docs.schematichq.com/developer_resources/key_management) for more information + base_plan_id : typing.Optional[str] + Assign this base plan when creating the company (starts with plan_). Takes precedence over the environment's initial plan and must be provisionable without a payment method. + + base_plan_price_id : typing.Optional[str] + The Schematic price to provision for base_plan_id (starts with bilpp_). Required and must be $0 for a billing-linked plan; omit for a plan that is not billing-linked. + id : typing.Optional[str] If you know the Schematic ID, you can use that here instead of keys @@ -569,6 +587,8 @@ def create_company( """ _response = self._raw_client.create_company( keys=keys, + base_plan_id=base_plan_id, + base_plan_price_id=base_plan_price_id, id=id, last_seen_at=last_seen_at, name=name, @@ -2299,6 +2319,8 @@ async def upsert_company( self, *, keys: typing.Dict[str, str], + base_plan_id: typing.Optional[str] = OMIT, + base_plan_price_id: typing.Optional[str] = OMIT, id: typing.Optional[str] = OMIT, last_seen_at: typing.Optional[dt.datetime] = OMIT, name: typing.Optional[str] = OMIT, @@ -2313,6 +2335,12 @@ async def upsert_company( keys : typing.Dict[str, str] See [Key Management](https://docs.schematichq.com/developer_resources/key_management) for more information + base_plan_id : typing.Optional[str] + Assign this base plan when creating the company (starts with plan_). Takes precedence over the environment's initial plan and must be provisionable without a payment method. + + base_plan_price_id : typing.Optional[str] + The Schematic price to provision for base_plan_id (starts with bilpp_). Required and must be $0 for a billing-linked plan; omit for a plan that is not billing-linked. + id : typing.Optional[str] If you know the Schematic ID, you can use that here instead of keys @@ -2356,6 +2384,8 @@ async def main() -> None: """ _response = await self._raw_client.upsert_company( keys=keys, + base_plan_id=base_plan_id, + base_plan_price_id=base_plan_price_id, id=id, last_seen_at=last_seen_at, name=name, @@ -2622,6 +2652,8 @@ async def create_company( self, *, keys: typing.Dict[str, str], + base_plan_id: typing.Optional[str] = OMIT, + base_plan_price_id: typing.Optional[str] = OMIT, id: typing.Optional[str] = OMIT, last_seen_at: typing.Optional[dt.datetime] = OMIT, name: typing.Optional[str] = OMIT, @@ -2636,6 +2668,12 @@ async def create_company( keys : typing.Dict[str, str] See [Key Management](https://docs.schematichq.com/developer_resources/key_management) for more information + base_plan_id : typing.Optional[str] + Assign this base plan when creating the company (starts with plan_). Takes precedence over the environment's initial plan and must be provisionable without a payment method. + + base_plan_price_id : typing.Optional[str] + The Schematic price to provision for base_plan_id (starts with bilpp_). Required and must be $0 for a billing-linked plan; omit for a plan that is not billing-linked. + id : typing.Optional[str] If you know the Schematic ID, you can use that here instead of keys @@ -2679,6 +2717,8 @@ async def main() -> None: """ _response = await self._raw_client.create_company( keys=keys, + base_plan_id=base_plan_id, + base_plan_price_id=base_plan_price_id, id=id, last_seen_at=last_seen_at, name=name, diff --git a/src/schematic/companies/raw_client.py b/src/schematic/companies/raw_client.py index 8a8d119..8b7267a 100644 --- a/src/schematic/companies/raw_client.py +++ b/src/schematic/companies/raw_client.py @@ -281,6 +281,8 @@ def upsert_company( self, *, keys: typing.Dict[str, str], + base_plan_id: typing.Optional[str] = OMIT, + base_plan_price_id: typing.Optional[str] = OMIT, id: typing.Optional[str] = OMIT, last_seen_at: typing.Optional[dt.datetime] = OMIT, name: typing.Optional[str] = OMIT, @@ -295,6 +297,12 @@ def upsert_company( keys : typing.Dict[str, str] See [Key Management](https://docs.schematichq.com/developer_resources/key_management) for more information + base_plan_id : typing.Optional[str] + Assign this base plan when creating the company (starts with plan_). Takes precedence over the environment's initial plan and must be provisionable without a payment method. + + base_plan_price_id : typing.Optional[str] + The Schematic price to provision for base_plan_id (starts with bilpp_). Required and must be $0 for a billing-linked plan; omit for a plan that is not billing-linked. + id : typing.Optional[str] If you know the Schematic ID, you can use that here instead of keys @@ -321,6 +329,8 @@ def upsert_company( "companies", method="POST", json={ + "base_plan_id": base_plan_id, + "base_plan_price_id": base_plan_price_id, "id": id, "keys": keys, "last_seen_at": last_seen_at, @@ -822,6 +832,8 @@ def create_company( self, *, keys: typing.Dict[str, str], + base_plan_id: typing.Optional[str] = OMIT, + base_plan_price_id: typing.Optional[str] = OMIT, id: typing.Optional[str] = OMIT, last_seen_at: typing.Optional[dt.datetime] = OMIT, name: typing.Optional[str] = OMIT, @@ -836,6 +848,12 @@ def create_company( keys : typing.Dict[str, str] See [Key Management](https://docs.schematichq.com/developer_resources/key_management) for more information + base_plan_id : typing.Optional[str] + Assign this base plan when creating the company (starts with plan_). Takes precedence over the environment's initial plan and must be provisionable without a payment method. + + base_plan_price_id : typing.Optional[str] + The Schematic price to provision for base_plan_id (starts with bilpp_). Required and must be $0 for a billing-linked plan; omit for a plan that is not billing-linked. + id : typing.Optional[str] If you know the Schematic ID, you can use that here instead of keys @@ -862,6 +880,8 @@ def create_company( "companies/create", method="POST", json={ + "base_plan_id": base_plan_id, + "base_plan_price_id": base_plan_price_id, "id": id, "keys": keys, "last_seen_at": last_seen_at, @@ -4870,6 +4890,8 @@ async def upsert_company( self, *, keys: typing.Dict[str, str], + base_plan_id: typing.Optional[str] = OMIT, + base_plan_price_id: typing.Optional[str] = OMIT, id: typing.Optional[str] = OMIT, last_seen_at: typing.Optional[dt.datetime] = OMIT, name: typing.Optional[str] = OMIT, @@ -4884,6 +4906,12 @@ async def upsert_company( keys : typing.Dict[str, str] See [Key Management](https://docs.schematichq.com/developer_resources/key_management) for more information + base_plan_id : typing.Optional[str] + Assign this base plan when creating the company (starts with plan_). Takes precedence over the environment's initial plan and must be provisionable without a payment method. + + base_plan_price_id : typing.Optional[str] + The Schematic price to provision for base_plan_id (starts with bilpp_). Required and must be $0 for a billing-linked plan; omit for a plan that is not billing-linked. + id : typing.Optional[str] If you know the Schematic ID, you can use that here instead of keys @@ -4910,6 +4938,8 @@ async def upsert_company( "companies", method="POST", json={ + "base_plan_id": base_plan_id, + "base_plan_price_id": base_plan_price_id, "id": id, "keys": keys, "last_seen_at": last_seen_at, @@ -5411,6 +5441,8 @@ async def create_company( self, *, keys: typing.Dict[str, str], + base_plan_id: typing.Optional[str] = OMIT, + base_plan_price_id: typing.Optional[str] = OMIT, id: typing.Optional[str] = OMIT, last_seen_at: typing.Optional[dt.datetime] = OMIT, name: typing.Optional[str] = OMIT, @@ -5425,6 +5457,12 @@ async def create_company( keys : typing.Dict[str, str] See [Key Management](https://docs.schematichq.com/developer_resources/key_management) for more information + base_plan_id : typing.Optional[str] + Assign this base plan when creating the company (starts with plan_). Takes precedence over the environment's initial plan and must be provisionable without a payment method. + + base_plan_price_id : typing.Optional[str] + The Schematic price to provision for base_plan_id (starts with bilpp_). Required and must be $0 for a billing-linked plan; omit for a plan that is not billing-linked. + id : typing.Optional[str] If you know the Schematic ID, you can use that here instead of keys @@ -5451,6 +5489,8 @@ async def create_company( "companies/create", method="POST", json={ + "base_plan_id": base_plan_id, + "base_plan_price_id": base_plan_price_id, "id": id, "keys": keys, "last_seen_at": last_seen_at, diff --git a/src/schematic/components/__init__.py b/src/schematic/components/__init__.py index 8e8dcba..53796bd 100644 --- a/src/schematic/components/__init__.py +++ b/src/schematic/components/__init__.py @@ -7,6 +7,7 @@ if typing.TYPE_CHECKING: from .types import ( + BindCatalogResponse, CountComponentsParams, CountComponentsResponse, CreateComponentResponse, @@ -19,6 +20,7 @@ UpdateComponentResponse, ) _dynamic_imports: typing.Dict[str, str] = { + "BindCatalogResponse": ".types", "CountComponentsParams": ".types", "CountComponentsResponse": ".types", "CreateComponentResponse": ".types", @@ -54,6 +56,7 @@ def __dir__(): __all__ = [ + "BindCatalogResponse", "CountComponentsParams", "CountComponentsResponse", "CreateComponentResponse", diff --git a/src/schematic/components/client.py b/src/schematic/components/client.py index 46df164..d2d8828 100644 --- a/src/schematic/components/client.py +++ b/src/schematic/components/client.py @@ -7,6 +7,7 @@ from ..types.component_entity_type import ComponentEntityType from ..types.component_state import ComponentState from .raw_client import AsyncRawComponentsClient, RawComponentsClient +from .types.bind_catalog_response import BindCatalogResponse from .types.count_components_response import CountComponentsResponse from .types.create_component_response import CreateComponentResponse from .types.delete_component_response import DeleteComponentResponse @@ -229,6 +230,43 @@ def delete_component( _response = self._raw_client.delete_component(component_id, request_options=request_options) return _response.data + def bind_catalog( + self, + component_id: str, + *, + catalog_id: typing.Optional[str] = OMIT, + request_options: typing.Optional[RequestOptions] = None, + ) -> BindCatalogResponse: + """ + Parameters + ---------- + component_id : str + component_id + + catalog_id : typing.Optional[str] + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + BindCatalogResponse + OK + + Examples + -------- + from schematic import Schematic + + client = Schematic( + api_key="YOUR_API_KEY", + ) + client.components.bind_catalog( + component_id="component_id", + ) + """ + _response = self._raw_client.bind_catalog(component_id, catalog_id=catalog_id, request_options=request_options) + return _response.data + def count_components( self, *, @@ -564,6 +602,53 @@ async def main() -> None: _response = await self._raw_client.delete_component(component_id, request_options=request_options) return _response.data + async def bind_catalog( + self, + component_id: str, + *, + catalog_id: typing.Optional[str] = OMIT, + request_options: typing.Optional[RequestOptions] = None, + ) -> BindCatalogResponse: + """ + Parameters + ---------- + component_id : str + component_id + + catalog_id : typing.Optional[str] + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + BindCatalogResponse + OK + + Examples + -------- + import asyncio + + from schematic import AsyncSchematic + + client = AsyncSchematic( + api_key="YOUR_API_KEY", + ) + + + async def main() -> None: + await client.components.bind_catalog( + component_id="component_id", + ) + + + asyncio.run(main()) + """ + _response = await self._raw_client.bind_catalog( + component_id, catalog_id=catalog_id, request_options=request_options + ) + return _response.data + async def count_components( self, *, diff --git a/src/schematic/components/raw_client.py b/src/schematic/components/raw_client.py index 4857021..f457060 100644 --- a/src/schematic/components/raw_client.py +++ b/src/schematic/components/raw_client.py @@ -18,6 +18,7 @@ from ..types.api_error import ApiError as types_api_error_ApiError from ..types.component_entity_type import ComponentEntityType from ..types.component_state import ComponentState +from .types.bind_catalog_response import BindCatalogResponse from .types.count_components_response import CountComponentsResponse from .types.create_component_response import CreateComponentResponse from .types.delete_component_response import DeleteComponentResponse @@ -581,6 +582,119 @@ def delete_component( status_code=_response.status_code, headers=dict(_response.headers), body=_response_json ) + def bind_catalog( + self, + component_id: str, + *, + catalog_id: typing.Optional[str] = OMIT, + request_options: typing.Optional[RequestOptions] = None, + ) -> HttpResponse[BindCatalogResponse]: + """ + Parameters + ---------- + component_id : str + component_id + + catalog_id : typing.Optional[str] + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + HttpResponse[BindCatalogResponse] + OK + """ + _response = self._client_wrapper.httpx_client.request( + f"components/{encode_path_param(component_id)}/catalog", + method="PUT", + json={ + "catalog_id": catalog_id, + }, + headers={ + "content-type": "application/json", + }, + request_options=request_options, + omit=OMIT, + ) + try: + if 200 <= _response.status_code < 300: + _data = typing.cast( + BindCatalogResponse, + parse_obj_as( + type_=BindCatalogResponse, # type: ignore + object_=_response.json(), + ), + ) + return HttpResponse(response=_response, data=_data) + if _response.status_code == 400: + raise BadRequestError( + headers=dict(_response.headers), + body=typing.cast( + types_api_error_ApiError, + parse_obj_as( + type_=types_api_error_ApiError, # type: ignore + object_=_response.json(), + ), + ), + ) + if _response.status_code == 401: + raise UnauthorizedError( + headers=dict(_response.headers), + body=typing.cast( + types_api_error_ApiError, + parse_obj_as( + type_=types_api_error_ApiError, # type: ignore + object_=_response.json(), + ), + ), + ) + if _response.status_code == 403: + raise ForbiddenError( + headers=dict(_response.headers), + body=typing.cast( + types_api_error_ApiError, + parse_obj_as( + type_=types_api_error_ApiError, # type: ignore + object_=_response.json(), + ), + ), + ) + if _response.status_code == 404: + raise NotFoundError( + headers=dict(_response.headers), + body=typing.cast( + types_api_error_ApiError, + parse_obj_as( + type_=types_api_error_ApiError, # type: ignore + object_=_response.json(), + ), + ), + ) + if _response.status_code == 500: + raise InternalServerError( + headers=dict(_response.headers), + body=typing.cast( + types_api_error_ApiError, + parse_obj_as( + type_=types_api_error_ApiError, # type: ignore + object_=_response.json(), + ), + ), + ) + _response_json = _response.json() + except JSONDecodeError: + raise core_api_error_ApiError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.text + ) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) + raise core_api_error_ApiError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response_json + ) + def count_components( self, *, @@ -1345,6 +1459,119 @@ async def delete_component( status_code=_response.status_code, headers=dict(_response.headers), body=_response_json ) + async def bind_catalog( + self, + component_id: str, + *, + catalog_id: typing.Optional[str] = OMIT, + request_options: typing.Optional[RequestOptions] = None, + ) -> AsyncHttpResponse[BindCatalogResponse]: + """ + Parameters + ---------- + component_id : str + component_id + + catalog_id : typing.Optional[str] + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + AsyncHttpResponse[BindCatalogResponse] + OK + """ + _response = await self._client_wrapper.httpx_client.request( + f"components/{encode_path_param(component_id)}/catalog", + method="PUT", + json={ + "catalog_id": catalog_id, + }, + headers={ + "content-type": "application/json", + }, + request_options=request_options, + omit=OMIT, + ) + try: + if 200 <= _response.status_code < 300: + _data = typing.cast( + BindCatalogResponse, + parse_obj_as( + type_=BindCatalogResponse, # type: ignore + object_=_response.json(), + ), + ) + return AsyncHttpResponse(response=_response, data=_data) + if _response.status_code == 400: + raise BadRequestError( + headers=dict(_response.headers), + body=typing.cast( + types_api_error_ApiError, + parse_obj_as( + type_=types_api_error_ApiError, # type: ignore + object_=_response.json(), + ), + ), + ) + if _response.status_code == 401: + raise UnauthorizedError( + headers=dict(_response.headers), + body=typing.cast( + types_api_error_ApiError, + parse_obj_as( + type_=types_api_error_ApiError, # type: ignore + object_=_response.json(), + ), + ), + ) + if _response.status_code == 403: + raise ForbiddenError( + headers=dict(_response.headers), + body=typing.cast( + types_api_error_ApiError, + parse_obj_as( + type_=types_api_error_ApiError, # type: ignore + object_=_response.json(), + ), + ), + ) + if _response.status_code == 404: + raise NotFoundError( + headers=dict(_response.headers), + body=typing.cast( + types_api_error_ApiError, + parse_obj_as( + type_=types_api_error_ApiError, # type: ignore + object_=_response.json(), + ), + ), + ) + if _response.status_code == 500: + raise InternalServerError( + headers=dict(_response.headers), + body=typing.cast( + types_api_error_ApiError, + parse_obj_as( + type_=types_api_error_ApiError, # type: ignore + object_=_response.json(), + ), + ), + ) + _response_json = _response.json() + except JSONDecodeError: + raise core_api_error_ApiError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.text + ) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) + raise core_api_error_ApiError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response_json + ) + async def count_components( self, *, diff --git a/src/schematic/components/types/__init__.py b/src/schematic/components/types/__init__.py index 34aa0f5..ebf4159 100644 --- a/src/schematic/components/types/__init__.py +++ b/src/schematic/components/types/__init__.py @@ -6,6 +6,7 @@ from importlib import import_module if typing.TYPE_CHECKING: + from .bind_catalog_response import BindCatalogResponse from .count_components_params import CountComponentsParams from .count_components_response import CountComponentsResponse from .create_component_response import CreateComponentResponse @@ -17,6 +18,7 @@ from .preview_component_data_response import PreviewComponentDataResponse from .update_component_response import UpdateComponentResponse _dynamic_imports: typing.Dict[str, str] = { + "BindCatalogResponse": ".bind_catalog_response", "CountComponentsParams": ".count_components_params", "CountComponentsResponse": ".count_components_response", "CreateComponentResponse": ".create_component_response", @@ -52,6 +54,7 @@ def __dir__(): __all__ = [ + "BindCatalogResponse", "CountComponentsParams", "CountComponentsResponse", "CreateComponentResponse", diff --git a/src/schematic/components/types/bind_catalog_response.py b/src/schematic/components/types/bind_catalog_response.py new file mode 100644 index 0000000..4162ba6 --- /dev/null +++ b/src/schematic/components/types/bind_catalog_response.py @@ -0,0 +1,24 @@ +# This file was auto-generated by Fern from our API Definition. + +import typing + +import pydantic +from ...core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel +from ...types.component_response_data import ComponentResponseData + + +class BindCatalogResponse(UniversalBaseModel): + data: ComponentResponseData + params: typing.Dict[str, typing.Any] = pydantic.Field() + """ + Input parameters + """ + + if IS_PYDANTIC_V2: + model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2 + else: + + class Config: + frozen = True + smart_union = True + extra = pydantic.Extra.allow diff --git a/src/schematic/dataexports/__init__.py b/src/schematic/dataexports/__init__.py index 2c0f0da..23ab9c2 100644 --- a/src/schematic/dataexports/__init__.py +++ b/src/schematic/dataexports/__init__.py @@ -6,8 +6,13 @@ from importlib import import_module if typing.TYPE_CHECKING: - from .types import CreateDataExportResponse -_dynamic_imports: typing.Dict[str, str] = {"CreateDataExportResponse": ".types"} + from .types import CreateDataExportResponse, GetDataExportResponse, ListDataExportsParams, ListDataExportsResponse +_dynamic_imports: typing.Dict[str, str] = { + "CreateDataExportResponse": ".types", + "GetDataExportResponse": ".types", + "ListDataExportsParams": ".types", + "ListDataExportsResponse": ".types", +} def __getattr__(attr_name: str) -> typing.Any: @@ -31,4 +36,4 @@ def __dir__(): return sorted(lazy_attrs) -__all__ = ["CreateDataExportResponse"] +__all__ = ["CreateDataExportResponse", "GetDataExportResponse", "ListDataExportsParams", "ListDataExportsResponse"] diff --git a/src/schematic/dataexports/client.py b/src/schematic/dataexports/client.py index 6424cc4..0503677 100644 --- a/src/schematic/dataexports/client.py +++ b/src/schematic/dataexports/client.py @@ -4,8 +4,14 @@ from ..core.client_wrapper import AsyncClientWrapper, SyncClientWrapper from ..core.request_options import RequestOptions +from ..types.data_export_metadata import DataExportMetadata +from ..types.data_export_output_file_type import DataExportOutputFileType +from ..types.data_export_status import DataExportStatus +from ..types.data_export_type import DataExportType from .raw_client import AsyncRawDataexportsClient, RawDataexportsClient from .types.create_data_export_response import CreateDataExportResponse +from .types.get_data_export_response import GetDataExportResponse +from .types.list_data_exports_response import ListDataExportsResponse # this is used as the default value for optional parameters OMIT = typing.cast(typing.Any, ...) @@ -26,13 +32,71 @@ def with_raw_response(self) -> RawDataexportsClient: """ return self._raw_client + def list_data_exports( + self, + *, + export_type: typing.Optional[DataExportType] = None, + status: typing.Optional[DataExportStatus] = None, + limit: typing.Optional[int] = None, + offset: typing.Optional[int] = None, + request_options: typing.Optional[RequestOptions] = None, + ) -> ListDataExportsResponse: + """ + Parameters + ---------- + export_type : typing.Optional[DataExportType] + + status : typing.Optional[DataExportStatus] + + limit : typing.Optional[int] + Page limit (default 100) + + offset : typing.Optional[int] + Page offset (default 0) + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + ListDataExportsResponse + OK + + Examples + -------- + from schematic import Schematic + + client = Schematic( + api_key="YOUR_API_KEY", + ) + client.dataexports.list_data_exports( + export_type="audit-log", + status="failure", + limit=1000000, + offset=1000000, + ) + """ + _response = self._raw_client.list_data_exports( + export_type=export_type, status=status, limit=limit, offset=offset, request_options=request_options + ) + return _response.data + def create_data_export( - self, *, metadata: str, request_options: typing.Optional[RequestOptions] = None + self, + *, + export_type: DataExportType, + output_file_type: DataExportOutputFileType, + metadata: typing.Optional[DataExportMetadata] = OMIT, + request_options: typing.Optional[RequestOptions] = None, ) -> CreateDataExportResponse: """ Parameters ---------- - metadata : str + export_type : DataExportType + + output_file_type : DataExportOutputFileType + + metadata : typing.Optional[DataExportMetadata] request_options : typing.Optional[RequestOptions] Request-specific configuration. @@ -50,10 +114,47 @@ def create_data_export( api_key="YOUR_API_KEY", ) client.dataexports.create_data_export( - metadata="metadata", + export_type="audit-log", + output_file_type="csv", ) """ - _response = self._raw_client.create_data_export(metadata=metadata, request_options=request_options) + _response = self._raw_client.create_data_export( + export_type=export_type, + output_file_type=output_file_type, + metadata=metadata, + request_options=request_options, + ) + return _response.data + + def get_data_export( + self, data_export_id: str, *, request_options: typing.Optional[RequestOptions] = None + ) -> GetDataExportResponse: + """ + Parameters + ---------- + data_export_id : str + data_export_id + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + GetDataExportResponse + OK + + Examples + -------- + from schematic import Schematic + + client = Schematic( + api_key="YOUR_API_KEY", + ) + client.dataexports.get_data_export( + data_export_id="data_export_id", + ) + """ + _response = self._raw_client.get_data_export(data_export_id, request_options=request_options) return _response.data def get_data_export_artifact( @@ -103,13 +204,79 @@ def with_raw_response(self) -> AsyncRawDataexportsClient: """ return self._raw_client + async def list_data_exports( + self, + *, + export_type: typing.Optional[DataExportType] = None, + status: typing.Optional[DataExportStatus] = None, + limit: typing.Optional[int] = None, + offset: typing.Optional[int] = None, + request_options: typing.Optional[RequestOptions] = None, + ) -> ListDataExportsResponse: + """ + Parameters + ---------- + export_type : typing.Optional[DataExportType] + + status : typing.Optional[DataExportStatus] + + limit : typing.Optional[int] + Page limit (default 100) + + offset : typing.Optional[int] + Page offset (default 0) + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + ListDataExportsResponse + OK + + Examples + -------- + import asyncio + + from schematic import AsyncSchematic + + client = AsyncSchematic( + api_key="YOUR_API_KEY", + ) + + + async def main() -> None: + await client.dataexports.list_data_exports( + export_type="audit-log", + status="failure", + limit=1000000, + offset=1000000, + ) + + + asyncio.run(main()) + """ + _response = await self._raw_client.list_data_exports( + export_type=export_type, status=status, limit=limit, offset=offset, request_options=request_options + ) + return _response.data + async def create_data_export( - self, *, metadata: str, request_options: typing.Optional[RequestOptions] = None + self, + *, + export_type: DataExportType, + output_file_type: DataExportOutputFileType, + metadata: typing.Optional[DataExportMetadata] = OMIT, + request_options: typing.Optional[RequestOptions] = None, ) -> CreateDataExportResponse: """ Parameters ---------- - metadata : str + export_type : DataExportType + + output_file_type : DataExportOutputFileType + + metadata : typing.Optional[DataExportMetadata] request_options : typing.Optional[RequestOptions] Request-specific configuration. @@ -132,13 +299,58 @@ async def create_data_export( async def main() -> None: await client.dataexports.create_data_export( - metadata="metadata", + export_type="audit-log", + output_file_type="csv", + ) + + + asyncio.run(main()) + """ + _response = await self._raw_client.create_data_export( + export_type=export_type, + output_file_type=output_file_type, + metadata=metadata, + request_options=request_options, + ) + return _response.data + + async def get_data_export( + self, data_export_id: str, *, request_options: typing.Optional[RequestOptions] = None + ) -> GetDataExportResponse: + """ + Parameters + ---------- + data_export_id : str + data_export_id + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + GetDataExportResponse + OK + + Examples + -------- + import asyncio + + from schematic import AsyncSchematic + + client = AsyncSchematic( + api_key="YOUR_API_KEY", + ) + + + async def main() -> None: + await client.dataexports.get_data_export( + data_export_id="data_export_id", ) asyncio.run(main()) """ - _response = await self._raw_client.create_data_export(metadata=metadata, request_options=request_options) + _response = await self._raw_client.get_data_export(data_export_id, request_options=request_options) return _response.data async def get_data_export_artifact( diff --git a/src/schematic/dataexports/raw_client.py b/src/schematic/dataexports/raw_client.py index b5d39b8..e4a9997 100644 --- a/src/schematic/dataexports/raw_client.py +++ b/src/schematic/dataexports/raw_client.py @@ -11,13 +11,20 @@ from ..core.parse_error import ParsingError from ..core.pydantic_utilities import parse_obj_as from ..core.request_options import RequestOptions +from ..core.serialization import convert_and_respect_annotation_metadata from ..errors.bad_request_error import BadRequestError from ..errors.forbidden_error import ForbiddenError from ..errors.internal_server_error import InternalServerError from ..errors.not_found_error import NotFoundError from ..errors.unauthorized_error import UnauthorizedError from ..types.api_error import ApiError as types_api_error_ApiError +from ..types.data_export_metadata import DataExportMetadata +from ..types.data_export_output_file_type import DataExportOutputFileType +from ..types.data_export_status import DataExportStatus +from ..types.data_export_type import DataExportType from .types.create_data_export_response import CreateDataExportResponse +from .types.get_data_export_response import GetDataExportResponse +from .types.list_data_exports_response import ListDataExportsResponse from pydantic import ValidationError # this is used as the default value for optional parameters @@ -28,13 +35,141 @@ class RawDataexportsClient: def __init__(self, *, client_wrapper: SyncClientWrapper): self._client_wrapper = client_wrapper + def list_data_exports( + self, + *, + export_type: typing.Optional[DataExportType] = None, + status: typing.Optional[DataExportStatus] = None, + limit: typing.Optional[int] = None, + offset: typing.Optional[int] = None, + request_options: typing.Optional[RequestOptions] = None, + ) -> HttpResponse[ListDataExportsResponse]: + """ + Parameters + ---------- + export_type : typing.Optional[DataExportType] + + status : typing.Optional[DataExportStatus] + + limit : typing.Optional[int] + Page limit (default 100) + + offset : typing.Optional[int] + Page offset (default 0) + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + HttpResponse[ListDataExportsResponse] + OK + """ + _response = self._client_wrapper.httpx_client.request( + "data-exports", + method="GET", + params={ + "export_type": export_type, + "status": status, + "limit": limit, + "offset": offset, + }, + request_options=request_options, + ) + try: + if 200 <= _response.status_code < 300: + _data = typing.cast( + ListDataExportsResponse, + parse_obj_as( + type_=ListDataExportsResponse, # type: ignore + object_=_response.json(), + ), + ) + return HttpResponse(response=_response, data=_data) + if _response.status_code == 400: + raise BadRequestError( + headers=dict(_response.headers), + body=typing.cast( + types_api_error_ApiError, + parse_obj_as( + type_=types_api_error_ApiError, # type: ignore + object_=_response.json(), + ), + ), + ) + if _response.status_code == 401: + raise UnauthorizedError( + headers=dict(_response.headers), + body=typing.cast( + types_api_error_ApiError, + parse_obj_as( + type_=types_api_error_ApiError, # type: ignore + object_=_response.json(), + ), + ), + ) + if _response.status_code == 403: + raise ForbiddenError( + headers=dict(_response.headers), + body=typing.cast( + types_api_error_ApiError, + parse_obj_as( + type_=types_api_error_ApiError, # type: ignore + object_=_response.json(), + ), + ), + ) + if _response.status_code == 404: + raise NotFoundError( + headers=dict(_response.headers), + body=typing.cast( + types_api_error_ApiError, + parse_obj_as( + type_=types_api_error_ApiError, # type: ignore + object_=_response.json(), + ), + ), + ) + if _response.status_code == 500: + raise InternalServerError( + headers=dict(_response.headers), + body=typing.cast( + types_api_error_ApiError, + parse_obj_as( + type_=types_api_error_ApiError, # type: ignore + object_=_response.json(), + ), + ), + ) + _response_json = _response.json() + except JSONDecodeError: + raise core_api_error_ApiError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.text + ) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) + raise core_api_error_ApiError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response_json + ) + def create_data_export( - self, *, metadata: str, request_options: typing.Optional[RequestOptions] = None + self, + *, + export_type: DataExportType, + output_file_type: DataExportOutputFileType, + metadata: typing.Optional[DataExportMetadata] = OMIT, + request_options: typing.Optional[RequestOptions] = None, ) -> HttpResponse[CreateDataExportResponse]: """ Parameters ---------- - metadata : str + export_type : DataExportType + + output_file_type : DataExportOutputFileType + + metadata : typing.Optional[DataExportMetadata] request_options : typing.Optional[RequestOptions] Request-specific configuration. @@ -48,9 +183,11 @@ def create_data_export( "data-exports", method="POST", json={ - "metadata": metadata, - "export_type": "company-feature-usage", - "output_file_type": "csv", + "export_type": export_type, + "metadata": convert_and_respect_annotation_metadata( + object_=metadata, annotation=DataExportMetadata, direction="write" + ), + "output_file_type": output_file_type, }, headers={ "content-type": "application/json", @@ -136,6 +273,95 @@ def create_data_export( status_code=_response.status_code, headers=dict(_response.headers), body=_response_json ) + def get_data_export( + self, data_export_id: str, *, request_options: typing.Optional[RequestOptions] = None + ) -> HttpResponse[GetDataExportResponse]: + """ + Parameters + ---------- + data_export_id : str + data_export_id + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + HttpResponse[GetDataExportResponse] + OK + """ + _response = self._client_wrapper.httpx_client.request( + f"data-exports/{encode_path_param(data_export_id)}", + method="GET", + request_options=request_options, + ) + try: + if 200 <= _response.status_code < 300: + _data = typing.cast( + GetDataExportResponse, + parse_obj_as( + type_=GetDataExportResponse, # type: ignore + object_=_response.json(), + ), + ) + return HttpResponse(response=_response, data=_data) + if _response.status_code == 401: + raise UnauthorizedError( + headers=dict(_response.headers), + body=typing.cast( + types_api_error_ApiError, + parse_obj_as( + type_=types_api_error_ApiError, # type: ignore + object_=_response.json(), + ), + ), + ) + if _response.status_code == 403: + raise ForbiddenError( + headers=dict(_response.headers), + body=typing.cast( + types_api_error_ApiError, + parse_obj_as( + type_=types_api_error_ApiError, # type: ignore + object_=_response.json(), + ), + ), + ) + if _response.status_code == 404: + raise NotFoundError( + headers=dict(_response.headers), + body=typing.cast( + types_api_error_ApiError, + parse_obj_as( + type_=types_api_error_ApiError, # type: ignore + object_=_response.json(), + ), + ), + ) + if _response.status_code == 500: + raise InternalServerError( + headers=dict(_response.headers), + body=typing.cast( + types_api_error_ApiError, + parse_obj_as( + type_=types_api_error_ApiError, # type: ignore + object_=_response.json(), + ), + ), + ) + _response_json = _response.json() + except JSONDecodeError: + raise core_api_error_ApiError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.text + ) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) + raise core_api_error_ApiError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response_json + ) + @contextlib.contextmanager def get_data_export_artifact( self, data_export_id: str, *, request_options: typing.Optional[RequestOptions] = None @@ -235,13 +461,141 @@ class AsyncRawDataexportsClient: def __init__(self, *, client_wrapper: AsyncClientWrapper): self._client_wrapper = client_wrapper + async def list_data_exports( + self, + *, + export_type: typing.Optional[DataExportType] = None, + status: typing.Optional[DataExportStatus] = None, + limit: typing.Optional[int] = None, + offset: typing.Optional[int] = None, + request_options: typing.Optional[RequestOptions] = None, + ) -> AsyncHttpResponse[ListDataExportsResponse]: + """ + Parameters + ---------- + export_type : typing.Optional[DataExportType] + + status : typing.Optional[DataExportStatus] + + limit : typing.Optional[int] + Page limit (default 100) + + offset : typing.Optional[int] + Page offset (default 0) + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + AsyncHttpResponse[ListDataExportsResponse] + OK + """ + _response = await self._client_wrapper.httpx_client.request( + "data-exports", + method="GET", + params={ + "export_type": export_type, + "status": status, + "limit": limit, + "offset": offset, + }, + request_options=request_options, + ) + try: + if 200 <= _response.status_code < 300: + _data = typing.cast( + ListDataExportsResponse, + parse_obj_as( + type_=ListDataExportsResponse, # type: ignore + object_=_response.json(), + ), + ) + return AsyncHttpResponse(response=_response, data=_data) + if _response.status_code == 400: + raise BadRequestError( + headers=dict(_response.headers), + body=typing.cast( + types_api_error_ApiError, + parse_obj_as( + type_=types_api_error_ApiError, # type: ignore + object_=_response.json(), + ), + ), + ) + if _response.status_code == 401: + raise UnauthorizedError( + headers=dict(_response.headers), + body=typing.cast( + types_api_error_ApiError, + parse_obj_as( + type_=types_api_error_ApiError, # type: ignore + object_=_response.json(), + ), + ), + ) + if _response.status_code == 403: + raise ForbiddenError( + headers=dict(_response.headers), + body=typing.cast( + types_api_error_ApiError, + parse_obj_as( + type_=types_api_error_ApiError, # type: ignore + object_=_response.json(), + ), + ), + ) + if _response.status_code == 404: + raise NotFoundError( + headers=dict(_response.headers), + body=typing.cast( + types_api_error_ApiError, + parse_obj_as( + type_=types_api_error_ApiError, # type: ignore + object_=_response.json(), + ), + ), + ) + if _response.status_code == 500: + raise InternalServerError( + headers=dict(_response.headers), + body=typing.cast( + types_api_error_ApiError, + parse_obj_as( + type_=types_api_error_ApiError, # type: ignore + object_=_response.json(), + ), + ), + ) + _response_json = _response.json() + except JSONDecodeError: + raise core_api_error_ApiError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.text + ) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) + raise core_api_error_ApiError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response_json + ) + async def create_data_export( - self, *, metadata: str, request_options: typing.Optional[RequestOptions] = None + self, + *, + export_type: DataExportType, + output_file_type: DataExportOutputFileType, + metadata: typing.Optional[DataExportMetadata] = OMIT, + request_options: typing.Optional[RequestOptions] = None, ) -> AsyncHttpResponse[CreateDataExportResponse]: """ Parameters ---------- - metadata : str + export_type : DataExportType + + output_file_type : DataExportOutputFileType + + metadata : typing.Optional[DataExportMetadata] request_options : typing.Optional[RequestOptions] Request-specific configuration. @@ -255,9 +609,11 @@ async def create_data_export( "data-exports", method="POST", json={ - "metadata": metadata, - "export_type": "company-feature-usage", - "output_file_type": "csv", + "export_type": export_type, + "metadata": convert_and_respect_annotation_metadata( + object_=metadata, annotation=DataExportMetadata, direction="write" + ), + "output_file_type": output_file_type, }, headers={ "content-type": "application/json", @@ -343,6 +699,95 @@ async def create_data_export( status_code=_response.status_code, headers=dict(_response.headers), body=_response_json ) + async def get_data_export( + self, data_export_id: str, *, request_options: typing.Optional[RequestOptions] = None + ) -> AsyncHttpResponse[GetDataExportResponse]: + """ + Parameters + ---------- + data_export_id : str + data_export_id + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + AsyncHttpResponse[GetDataExportResponse] + OK + """ + _response = await self._client_wrapper.httpx_client.request( + f"data-exports/{encode_path_param(data_export_id)}", + method="GET", + request_options=request_options, + ) + try: + if 200 <= _response.status_code < 300: + _data = typing.cast( + GetDataExportResponse, + parse_obj_as( + type_=GetDataExportResponse, # type: ignore + object_=_response.json(), + ), + ) + return AsyncHttpResponse(response=_response, data=_data) + if _response.status_code == 401: + raise UnauthorizedError( + headers=dict(_response.headers), + body=typing.cast( + types_api_error_ApiError, + parse_obj_as( + type_=types_api_error_ApiError, # type: ignore + object_=_response.json(), + ), + ), + ) + if _response.status_code == 403: + raise ForbiddenError( + headers=dict(_response.headers), + body=typing.cast( + types_api_error_ApiError, + parse_obj_as( + type_=types_api_error_ApiError, # type: ignore + object_=_response.json(), + ), + ), + ) + if _response.status_code == 404: + raise NotFoundError( + headers=dict(_response.headers), + body=typing.cast( + types_api_error_ApiError, + parse_obj_as( + type_=types_api_error_ApiError, # type: ignore + object_=_response.json(), + ), + ), + ) + if _response.status_code == 500: + raise InternalServerError( + headers=dict(_response.headers), + body=typing.cast( + types_api_error_ApiError, + parse_obj_as( + type_=types_api_error_ApiError, # type: ignore + object_=_response.json(), + ), + ), + ) + _response_json = _response.json() + except JSONDecodeError: + raise core_api_error_ApiError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.text + ) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) + raise core_api_error_ApiError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response_json + ) + @contextlib.asynccontextmanager async def get_data_export_artifact( self, data_export_id: str, *, request_options: typing.Optional[RequestOptions] = None diff --git a/src/schematic/dataexports/types/__init__.py b/src/schematic/dataexports/types/__init__.py index b7cbb54..cc08b50 100644 --- a/src/schematic/dataexports/types/__init__.py +++ b/src/schematic/dataexports/types/__init__.py @@ -7,7 +7,15 @@ if typing.TYPE_CHECKING: from .create_data_export_response import CreateDataExportResponse -_dynamic_imports: typing.Dict[str, str] = {"CreateDataExportResponse": ".create_data_export_response"} + from .get_data_export_response import GetDataExportResponse + from .list_data_exports_params import ListDataExportsParams + from .list_data_exports_response import ListDataExportsResponse +_dynamic_imports: typing.Dict[str, str] = { + "CreateDataExportResponse": ".create_data_export_response", + "GetDataExportResponse": ".get_data_export_response", + "ListDataExportsParams": ".list_data_exports_params", + "ListDataExportsResponse": ".list_data_exports_response", +} def __getattr__(attr_name: str) -> typing.Any: @@ -31,4 +39,4 @@ def __dir__(): return sorted(lazy_attrs) -__all__ = ["CreateDataExportResponse"] +__all__ = ["CreateDataExportResponse", "GetDataExportResponse", "ListDataExportsParams", "ListDataExportsResponse"] diff --git a/src/schematic/dataexports/types/get_data_export_response.py b/src/schematic/dataexports/types/get_data_export_response.py new file mode 100644 index 0000000..c36aa5d --- /dev/null +++ b/src/schematic/dataexports/types/get_data_export_response.py @@ -0,0 +1,24 @@ +# This file was auto-generated by Fern from our API Definition. + +import typing + +import pydantic +from ...core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel +from ...types.data_export_response_data import DataExportResponseData + + +class GetDataExportResponse(UniversalBaseModel): + data: DataExportResponseData + params: typing.Dict[str, typing.Any] = pydantic.Field() + """ + Input parameters + """ + + if IS_PYDANTIC_V2: + model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2 + else: + + class Config: + frozen = True + smart_union = True + extra = pydantic.Extra.allow diff --git a/src/schematic/dataexports/types/list_data_exports_params.py b/src/schematic/dataexports/types/list_data_exports_params.py new file mode 100644 index 0000000..b310f59 --- /dev/null +++ b/src/schematic/dataexports/types/list_data_exports_params.py @@ -0,0 +1,36 @@ +# This file was auto-generated by Fern from our API Definition. + +import typing + +import pydantic +from ...core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel +from ...types.data_export_status import DataExportStatus +from ...types.data_export_type import DataExportType + + +class ListDataExportsParams(UniversalBaseModel): + """ + Input parameters + """ + + export_type: typing.Optional[DataExportType] = None + limit: typing.Optional[int] = pydantic.Field(default=None) + """ + Page limit (default 100) + """ + + offset: typing.Optional[int] = pydantic.Field(default=None) + """ + Page offset (default 0) + """ + + status: typing.Optional[DataExportStatus] = None + + if IS_PYDANTIC_V2: + model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2 + else: + + class Config: + frozen = True + smart_union = True + extra = pydantic.Extra.allow diff --git a/src/schematic/dataexports/types/list_data_exports_response.py b/src/schematic/dataexports/types/list_data_exports_response.py new file mode 100644 index 0000000..c73244d --- /dev/null +++ b/src/schematic/dataexports/types/list_data_exports_response.py @@ -0,0 +1,25 @@ +# This file was auto-generated by Fern from our API Definition. + +import typing + +import pydantic +from ...core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel +from ...types.data_export_response_data import DataExportResponseData +from .list_data_exports_params import ListDataExportsParams + + +class ListDataExportsResponse(UniversalBaseModel): + data: typing.List[DataExportResponseData] + params: ListDataExportsParams = pydantic.Field() + """ + Input parameters + """ + + if IS_PYDANTIC_V2: + model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2 + else: + + class Config: + frozen = True + smart_union = True + extra = pydantic.Extra.allow diff --git a/src/schematic/planbundle/client.py b/src/schematic/planbundle/client.py index aa84b40..9b5e2fa 100644 --- a/src/schematic/planbundle/client.py +++ b/src/schematic/planbundle/client.py @@ -39,6 +39,7 @@ def create_custom_plan_bundle( *, entitlements: typing.Sequence[PlanBundleEntitlementRequestBody], billing_product: typing.Optional[UpsertBillingProductRequestBody] = OMIT, + credit_grants: typing.Optional[typing.Sequence[PlanBundleCreditGrantRequestBody]] = OMIT, plan: typing.Optional[CreateCustomPlanBundlePlanRequestBody] = OMIT, request_options: typing.Optional[RequestOptions] = None, ) -> CreateCustomPlanBundleResponse: @@ -49,6 +50,8 @@ def create_custom_plan_bundle( billing_product : typing.Optional[UpsertBillingProductRequestBody] + credit_grants : typing.Optional[typing.Sequence[PlanBundleCreditGrantRequestBody]] + plan : typing.Optional[CreateCustomPlanBundlePlanRequestBody] request_options : typing.Optional[RequestOptions] @@ -75,7 +78,11 @@ def create_custom_plan_bundle( ) """ _response = self._raw_client.create_custom_plan_bundle( - entitlements=entitlements, billing_product=billing_product, plan=plan, request_options=request_options + entitlements=entitlements, + billing_product=billing_product, + credit_grants=credit_grants, + plan=plan, + request_options=request_options, ) return _response.data @@ -214,6 +221,7 @@ async def create_custom_plan_bundle( *, entitlements: typing.Sequence[PlanBundleEntitlementRequestBody], billing_product: typing.Optional[UpsertBillingProductRequestBody] = OMIT, + credit_grants: typing.Optional[typing.Sequence[PlanBundleCreditGrantRequestBody]] = OMIT, plan: typing.Optional[CreateCustomPlanBundlePlanRequestBody] = OMIT, request_options: typing.Optional[RequestOptions] = None, ) -> CreateCustomPlanBundleResponse: @@ -224,6 +232,8 @@ async def create_custom_plan_bundle( billing_product : typing.Optional[UpsertBillingProductRequestBody] + credit_grants : typing.Optional[typing.Sequence[PlanBundleCreditGrantRequestBody]] + plan : typing.Optional[CreateCustomPlanBundlePlanRequestBody] request_options : typing.Optional[RequestOptions] @@ -258,7 +268,11 @@ async def main() -> None: asyncio.run(main()) """ _response = await self._raw_client.create_custom_plan_bundle( - entitlements=entitlements, billing_product=billing_product, plan=plan, request_options=request_options + entitlements=entitlements, + billing_product=billing_product, + credit_grants=credit_grants, + plan=plan, + request_options=request_options, ) return _response.data diff --git a/src/schematic/planbundle/raw_client.py b/src/schematic/planbundle/raw_client.py index 65be3b7..886efa9 100644 --- a/src/schematic/planbundle/raw_client.py +++ b/src/schematic/planbundle/raw_client.py @@ -41,6 +41,7 @@ def create_custom_plan_bundle( *, entitlements: typing.Sequence[PlanBundleEntitlementRequestBody], billing_product: typing.Optional[UpsertBillingProductRequestBody] = OMIT, + credit_grants: typing.Optional[typing.Sequence[PlanBundleCreditGrantRequestBody]] = OMIT, plan: typing.Optional[CreateCustomPlanBundlePlanRequestBody] = OMIT, request_options: typing.Optional[RequestOptions] = None, ) -> HttpResponse[CreateCustomPlanBundleResponse]: @@ -51,6 +52,8 @@ def create_custom_plan_bundle( billing_product : typing.Optional[UpsertBillingProductRequestBody] + credit_grants : typing.Optional[typing.Sequence[PlanBundleCreditGrantRequestBody]] + plan : typing.Optional[CreateCustomPlanBundlePlanRequestBody] request_options : typing.Optional[RequestOptions] @@ -68,6 +71,11 @@ def create_custom_plan_bundle( "billing_product": convert_and_respect_annotation_metadata( object_=billing_product, annotation=UpsertBillingProductRequestBody, direction="write" ), + "credit_grants": convert_and_respect_annotation_metadata( + object_=credit_grants, + annotation=typing.Sequence[PlanBundleCreditGrantRequestBody], + direction="write", + ), "entitlements": convert_and_respect_annotation_metadata( object_=entitlements, annotation=typing.Sequence[PlanBundleEntitlementRequestBody], @@ -445,6 +453,7 @@ async def create_custom_plan_bundle( *, entitlements: typing.Sequence[PlanBundleEntitlementRequestBody], billing_product: typing.Optional[UpsertBillingProductRequestBody] = OMIT, + credit_grants: typing.Optional[typing.Sequence[PlanBundleCreditGrantRequestBody]] = OMIT, plan: typing.Optional[CreateCustomPlanBundlePlanRequestBody] = OMIT, request_options: typing.Optional[RequestOptions] = None, ) -> AsyncHttpResponse[CreateCustomPlanBundleResponse]: @@ -455,6 +464,8 @@ async def create_custom_plan_bundle( billing_product : typing.Optional[UpsertBillingProductRequestBody] + credit_grants : typing.Optional[typing.Sequence[PlanBundleCreditGrantRequestBody]] + plan : typing.Optional[CreateCustomPlanBundlePlanRequestBody] request_options : typing.Optional[RequestOptions] @@ -472,6 +483,11 @@ async def create_custom_plan_bundle( "billing_product": convert_and_respect_annotation_metadata( object_=billing_product, annotation=UpsertBillingProductRequestBody, direction="write" ), + "credit_grants": convert_and_respect_annotation_metadata( + object_=credit_grants, + annotation=typing.Sequence[PlanBundleCreditGrantRequestBody], + direction="write", + ), "entitlements": convert_and_respect_annotation_metadata( object_=entitlements, annotation=typing.Sequence[PlanBundleEntitlementRequestBody], diff --git a/src/schematic/types/__init__.py b/src/schematic/types/__init__.py index 50b508c..7e59b4e 100644 --- a/src/schematic/types/__init__.py +++ b/src/schematic/types/__init__.py @@ -17,6 +17,7 @@ from .api_key_integration_response_data import ApiKeyIntegrationResponseData from .api_key_response_data import ApiKeyResponseData from .api_key_scope import ApiKeyScope + from .audit_log_export_metadata import AuditLogExportMetadata from .audit_log_list_response_data import AuditLogListResponseData from .audit_log_response_data import AuditLogResponseData from .billing_coupon_response_data import BillingCouponResponseData @@ -67,6 +68,18 @@ from .billing_tiers_mode import BillingTiersMode from .capture_raw_event import CaptureRawEvent from .capture_raw_event_batch import CaptureRawEventBatch + from .catalog_config_ordered_bundle import CatalogConfigOrderedBundle + from .catalog_config_ordered_bundle_response_data import CatalogConfigOrderedBundleResponseData + from .catalog_config_ordered_entitlement import CatalogConfigOrderedEntitlement + from .catalog_config_ordered_entitlement_response_data import CatalogConfigOrderedEntitlementResponseData + from .catalog_config_ordered_plan import CatalogConfigOrderedPlan + from .catalog_config_ordered_plan_response_data import CatalogConfigOrderedPlanResponseData + from .catalog_configuration_response_data import CatalogConfigurationResponseData + from .catalog_credit_bundle_i_ds_response_data import CatalogCreditBundleIDsResponseData + from .catalog_derived_feature_response_data import CatalogDerivedFeatureResponseData + from .catalog_derived_features_response_data import CatalogDerivedFeaturesResponseData + from .catalog_plan_i_ds_response_data import CatalogPlanIDsResponseData + from .catalog_response_data import CatalogResponseData from .change_subscription_internal_request_body import ChangeSubscriptionInternalRequestBody from .change_subscription_request_body import ChangeSubscriptionRequestBody from .charge_type import ChargeType @@ -88,6 +101,7 @@ from .company_credit_balance_response_data import CompanyCreditBalanceResponseData from .company_detail_response_data import CompanyDetailResponseData from .company_event_period_metrics_response_data import CompanyEventPeriodMetricsResponseData + from .company_feature_usage_export_metadata import CompanyFeatureUsageExportMetadata from .company_ledger_response_data import CompanyLedgerResponseData from .company_matching_criteria import CompanyMatchingCriteria from .company_membership_detail_response_data import CompanyMembershipDetailResponseData @@ -166,6 +180,11 @@ from .custom_plan_config import CustomPlanConfig from .custom_plan_view_config_response_data import CustomPlanViewConfigResponseData from .data_event_payload import DataEventPayload + from .data_export_metadata import ( + DataExportMetadata, + DataExportMetadata_AuditLog, + DataExportMetadata_CompanyFeatureUsage, + ) from .data_export_output_file_type import DataExportOutputFileType from .data_export_response_data import DataExportResponseData from .data_export_status import DataExportStatus @@ -269,6 +288,7 @@ from .plan_bundle_credit_grant_request_body import PlanBundleCreditGrantRequestBody from .plan_bundle_entitlement_request_body import PlanBundleEntitlementRequestBody from .plan_bundle_response_data import PlanBundleResponseData + from .plan_catalog_membership_response_data import PlanCatalogMembershipResponseData from .plan_change_action import PlanChangeAction from .plan_change_base_plan_action import PlanChangeBasePlanAction from .plan_change_response_data import PlanChangeResponseData @@ -306,6 +326,7 @@ from .preview_object import PreviewObject from .preview_object_response_data import PreviewObjectResponseData from .preview_subscription_change_response_data import PreviewSubscriptionChangeResponseData + from .preview_subscription_discount_response_data import PreviewSubscriptionDiscountResponseData from .preview_subscription_finance_response_data import PreviewSubscriptionFinanceResponseData from .preview_subscription_upcoming_invoice_line_items import PreviewSubscriptionUpcomingInvoiceLineItems from .proration_behavior import ProrationBehavior @@ -344,6 +365,7 @@ from .rulesengine_trait_definition import RulesengineTraitDefinition from .rulesengine_trait_definition_comparable_type import RulesengineTraitDefinitionComparableType from .rulesengine_user import RulesengineUser + from .rulesengine_warning_tier import RulesengineWarningTier from .scheduled_checkout_response_data import ScheduledCheckoutResponseData from .scheduled_checkout_status import ScheduledCheckoutStatus from .scheduled_downgrade_config_behavior import ScheduledDowngradeConfigBehavior @@ -386,6 +408,7 @@ from .usage_time_series_point_response_data import UsageTimeSeriesPointResponseData from .user_detail_response_data import UserDetailResponseData from .user_response_data import UserResponseData + from .warning_tier import WarningTier from .warning_tier_request_body import WarningTierRequestBody from .warning_tier_response_data import WarningTierResponseData from .web_feature_usage_webhook_output import WebFeatureUsageWebhookOutput @@ -411,6 +434,7 @@ "ApiKeyIntegrationResponseData": ".api_key_integration_response_data", "ApiKeyResponseData": ".api_key_response_data", "ApiKeyScope": ".api_key_scope", + "AuditLogExportMetadata": ".audit_log_export_metadata", "AuditLogListResponseData": ".audit_log_list_response_data", "AuditLogResponseData": ".audit_log_response_data", "BillingCouponResponseData": ".billing_coupon_response_data", @@ -461,6 +485,18 @@ "BillingTiersMode": ".billing_tiers_mode", "CaptureRawEvent": ".capture_raw_event", "CaptureRawEventBatch": ".capture_raw_event_batch", + "CatalogConfigOrderedBundle": ".catalog_config_ordered_bundle", + "CatalogConfigOrderedBundleResponseData": ".catalog_config_ordered_bundle_response_data", + "CatalogConfigOrderedEntitlement": ".catalog_config_ordered_entitlement", + "CatalogConfigOrderedEntitlementResponseData": ".catalog_config_ordered_entitlement_response_data", + "CatalogConfigOrderedPlan": ".catalog_config_ordered_plan", + "CatalogConfigOrderedPlanResponseData": ".catalog_config_ordered_plan_response_data", + "CatalogConfigurationResponseData": ".catalog_configuration_response_data", + "CatalogCreditBundleIDsResponseData": ".catalog_credit_bundle_i_ds_response_data", + "CatalogDerivedFeatureResponseData": ".catalog_derived_feature_response_data", + "CatalogDerivedFeaturesResponseData": ".catalog_derived_features_response_data", + "CatalogPlanIDsResponseData": ".catalog_plan_i_ds_response_data", + "CatalogResponseData": ".catalog_response_data", "ChangeSubscriptionInternalRequestBody": ".change_subscription_internal_request_body", "ChangeSubscriptionRequestBody": ".change_subscription_request_body", "ChargeType": ".charge_type", @@ -482,6 +518,7 @@ "CompanyCreditBalanceResponseData": ".company_credit_balance_response_data", "CompanyDetailResponseData": ".company_detail_response_data", "CompanyEventPeriodMetricsResponseData": ".company_event_period_metrics_response_data", + "CompanyFeatureUsageExportMetadata": ".company_feature_usage_export_metadata", "CompanyLedgerResponseData": ".company_ledger_response_data", "CompanyMatchingCriteria": ".company_matching_criteria", "CompanyMembershipDetailResponseData": ".company_membership_detail_response_data", @@ -560,6 +597,9 @@ "CustomPlanConfig": ".custom_plan_config", "CustomPlanViewConfigResponseData": ".custom_plan_view_config_response_data", "DataEventPayload": ".data_event_payload", + "DataExportMetadata": ".data_export_metadata", + "DataExportMetadata_AuditLog": ".data_export_metadata", + "DataExportMetadata_CompanyFeatureUsage": ".data_export_metadata", "DataExportOutputFileType": ".data_export_output_file_type", "DataExportResponseData": ".data_export_response_data", "DataExportStatus": ".data_export_status", @@ -661,6 +701,7 @@ "PlanBundleCreditGrantRequestBody": ".plan_bundle_credit_grant_request_body", "PlanBundleEntitlementRequestBody": ".plan_bundle_entitlement_request_body", "PlanBundleResponseData": ".plan_bundle_response_data", + "PlanCatalogMembershipResponseData": ".plan_catalog_membership_response_data", "PlanChangeAction": ".plan_change_action", "PlanChangeBasePlanAction": ".plan_change_base_plan_action", "PlanChangeResponseData": ".plan_change_response_data", @@ -698,6 +739,7 @@ "PreviewObject": ".preview_object", "PreviewObjectResponseData": ".preview_object_response_data", "PreviewSubscriptionChangeResponseData": ".preview_subscription_change_response_data", + "PreviewSubscriptionDiscountResponseData": ".preview_subscription_discount_response_data", "PreviewSubscriptionFinanceResponseData": ".preview_subscription_finance_response_data", "PreviewSubscriptionUpcomingInvoiceLineItems": ".preview_subscription_upcoming_invoice_line_items", "ProrationBehavior": ".proration_behavior", @@ -736,6 +778,7 @@ "RulesengineTraitDefinition": ".rulesengine_trait_definition", "RulesengineTraitDefinitionComparableType": ".rulesengine_trait_definition_comparable_type", "RulesengineUser": ".rulesengine_user", + "RulesengineWarningTier": ".rulesengine_warning_tier", "ScheduledCheckoutResponseData": ".scheduled_checkout_response_data", "ScheduledCheckoutStatus": ".scheduled_checkout_status", "ScheduledDowngradeConfigBehavior": ".scheduled_downgrade_config_behavior", @@ -778,6 +821,7 @@ "UsageTimeSeriesPointResponseData": ".usage_time_series_point_response_data", "UserDetailResponseData": ".user_detail_response_data", "UserResponseData": ".user_response_data", + "WarningTier": ".warning_tier", "WarningTierRequestBody": ".warning_tier_request_body", "WarningTierResponseData": ".warning_tier_response_data", "WebFeatureUsageWebhookOutput": ".web_feature_usage_webhook_output", @@ -827,6 +871,7 @@ def __dir__(): "ApiKeyIntegrationResponseData", "ApiKeyResponseData", "ApiKeyScope", + "AuditLogExportMetadata", "AuditLogListResponseData", "AuditLogResponseData", "BillingCouponResponseData", @@ -877,6 +922,18 @@ def __dir__(): "BillingTiersMode", "CaptureRawEvent", "CaptureRawEventBatch", + "CatalogConfigOrderedBundle", + "CatalogConfigOrderedBundleResponseData", + "CatalogConfigOrderedEntitlement", + "CatalogConfigOrderedEntitlementResponseData", + "CatalogConfigOrderedPlan", + "CatalogConfigOrderedPlanResponseData", + "CatalogConfigurationResponseData", + "CatalogCreditBundleIDsResponseData", + "CatalogDerivedFeatureResponseData", + "CatalogDerivedFeaturesResponseData", + "CatalogPlanIDsResponseData", + "CatalogResponseData", "ChangeSubscriptionInternalRequestBody", "ChangeSubscriptionRequestBody", "ChargeType", @@ -898,6 +955,7 @@ def __dir__(): "CompanyCreditBalanceResponseData", "CompanyDetailResponseData", "CompanyEventPeriodMetricsResponseData", + "CompanyFeatureUsageExportMetadata", "CompanyLedgerResponseData", "CompanyMatchingCriteria", "CompanyMembershipDetailResponseData", @@ -976,6 +1034,9 @@ def __dir__(): "CustomPlanConfig", "CustomPlanViewConfigResponseData", "DataEventPayload", + "DataExportMetadata", + "DataExportMetadata_AuditLog", + "DataExportMetadata_CompanyFeatureUsage", "DataExportOutputFileType", "DataExportResponseData", "DataExportStatus", @@ -1077,6 +1138,7 @@ def __dir__(): "PlanBundleCreditGrantRequestBody", "PlanBundleEntitlementRequestBody", "PlanBundleResponseData", + "PlanCatalogMembershipResponseData", "PlanChangeAction", "PlanChangeBasePlanAction", "PlanChangeResponseData", @@ -1114,6 +1176,7 @@ def __dir__(): "PreviewObject", "PreviewObjectResponseData", "PreviewSubscriptionChangeResponseData", + "PreviewSubscriptionDiscountResponseData", "PreviewSubscriptionFinanceResponseData", "PreviewSubscriptionUpcomingInvoiceLineItems", "ProrationBehavior", @@ -1152,6 +1215,7 @@ def __dir__(): "RulesengineTraitDefinition", "RulesengineTraitDefinitionComparableType", "RulesengineUser", + "RulesengineWarningTier", "ScheduledCheckoutResponseData", "ScheduledCheckoutStatus", "ScheduledDowngradeConfigBehavior", @@ -1194,6 +1258,7 @@ def __dir__(): "UsageTimeSeriesPointResponseData", "UserDetailResponseData", "UserResponseData", + "WarningTier", "WarningTierRequestBody", "WarningTierResponseData", "WebFeatureUsageWebhookOutput", diff --git a/src/schematic/types/audit_log_export_metadata.py b/src/schematic/types/audit_log_export_metadata.py new file mode 100644 index 0000000..7e87b59 --- /dev/null +++ b/src/schematic/types/audit_log_export_metadata.py @@ -0,0 +1,43 @@ +# This file was auto-generated by Fern from our API Definition. + +import datetime as dt +import typing + +import pydantic +from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel + + +class AuditLogExportMetadata(UniversalBaseModel): + actor_type: typing.Optional[str] = pydantic.Field(default=None) + """ + Restrict the export to audit log entries from this actor type + """ + + end_time: typing.Optional[dt.datetime] = pydantic.Field(default=None) + """ + Restrict the export to audit log entries that started before this time + """ + + notification_email_recipient_email_addresses: typing.Optional[typing.List[str]] = pydantic.Field(default=None) + """ + Account member emails to notify when the export completes; empty means the artifact is only retrievable via the API + """ + + q: typing.Optional[str] = pydantic.Field(default=None) + """ + Free-text search over audit log entries + """ + + start_time: typing.Optional[dt.datetime] = pydantic.Field(default=None) + """ + Restrict the export to audit log entries that started at or after this time + """ + + if IS_PYDANTIC_V2: + model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2 + else: + + class Config: + frozen = True + smart_union = True + extra = pydantic.Extra.allow diff --git a/src/schematic/types/catalog_config_ordered_bundle.py b/src/schematic/types/catalog_config_ordered_bundle.py new file mode 100644 index 0000000..a622f96 --- /dev/null +++ b/src/schematic/types/catalog_config_ordered_bundle.py @@ -0,0 +1,19 @@ +# This file was auto-generated by Fern from our API Definition. + +import typing + +import pydantic +from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel + + +class CatalogConfigOrderedBundle(UniversalBaseModel): + bundle_id: str + + if IS_PYDANTIC_V2: + model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2 + else: + + class Config: + frozen = True + smart_union = True + extra = pydantic.Extra.allow diff --git a/src/schematic/types/catalog_config_ordered_bundle_response_data.py b/src/schematic/types/catalog_config_ordered_bundle_response_data.py new file mode 100644 index 0000000..0d6e682 --- /dev/null +++ b/src/schematic/types/catalog_config_ordered_bundle_response_data.py @@ -0,0 +1,19 @@ +# This file was auto-generated by Fern from our API Definition. + +import typing + +import pydantic +from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel + + +class CatalogConfigOrderedBundleResponseData(UniversalBaseModel): + bundle_id: str + + if IS_PYDANTIC_V2: + model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2 + else: + + class Config: + frozen = True + smart_union = True + extra = pydantic.Extra.allow diff --git a/src/schematic/types/catalog_config_ordered_entitlement.py b/src/schematic/types/catalog_config_ordered_entitlement.py new file mode 100644 index 0000000..13e3f78 --- /dev/null +++ b/src/schematic/types/catalog_config_ordered_entitlement.py @@ -0,0 +1,20 @@ +# This file was auto-generated by Fern from our API Definition. + +import typing + +import pydantic +from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel + + +class CatalogConfigOrderedEntitlement(UniversalBaseModel): + plan_entitlement_id: str + visible: typing.Optional[bool] = None + + if IS_PYDANTIC_V2: + model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2 + else: + + class Config: + frozen = True + smart_union = True + extra = pydantic.Extra.allow diff --git a/src/schematic/types/catalog_config_ordered_entitlement_response_data.py b/src/schematic/types/catalog_config_ordered_entitlement_response_data.py new file mode 100644 index 0000000..f1e73d3 --- /dev/null +++ b/src/schematic/types/catalog_config_ordered_entitlement_response_data.py @@ -0,0 +1,20 @@ +# This file was auto-generated by Fern from our API Definition. + +import typing + +import pydantic +from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel + + +class CatalogConfigOrderedEntitlementResponseData(UniversalBaseModel): + plan_entitlement_id: str + visible: bool + + if IS_PYDANTIC_V2: + model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2 + else: + + class Config: + frozen = True + smart_union = True + extra = pydantic.Extra.allow diff --git a/src/schematic/types/catalog_config_ordered_plan.py b/src/schematic/types/catalog_config_ordered_plan.py new file mode 100644 index 0000000..72e78bb --- /dev/null +++ b/src/schematic/types/catalog_config_ordered_plan.py @@ -0,0 +1,21 @@ +# This file was auto-generated by Fern from our API Definition. + +import typing + +import pydantic +from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel +from .catalog_config_ordered_entitlement import CatalogConfigOrderedEntitlement + + +class CatalogConfigOrderedPlan(UniversalBaseModel): + entitlements: typing.Optional[typing.List[CatalogConfigOrderedEntitlement]] = None + plan_id: str + + if IS_PYDANTIC_V2: + model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2 + else: + + class Config: + frozen = True + smart_union = True + extra = pydantic.Extra.allow diff --git a/src/schematic/types/catalog_config_ordered_plan_response_data.py b/src/schematic/types/catalog_config_ordered_plan_response_data.py new file mode 100644 index 0000000..86c16e9 --- /dev/null +++ b/src/schematic/types/catalog_config_ordered_plan_response_data.py @@ -0,0 +1,21 @@ +# This file was auto-generated by Fern from our API Definition. + +import typing + +import pydantic +from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel +from .catalog_config_ordered_entitlement_response_data import CatalogConfigOrderedEntitlementResponseData + + +class CatalogConfigOrderedPlanResponseData(UniversalBaseModel): + entitlements: typing.List[CatalogConfigOrderedEntitlementResponseData] + plan_id: str + + if IS_PYDANTIC_V2: + model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2 + else: + + class Config: + frozen = True + smart_union = True + extra = pydantic.Extra.allow diff --git a/src/schematic/types/catalog_configuration_response_data.py b/src/schematic/types/catalog_configuration_response_data.py new file mode 100644 index 0000000..d173395 --- /dev/null +++ b/src/schematic/types/catalog_configuration_response_data.py @@ -0,0 +1,32 @@ +# This file was auto-generated by Fern from our API Definition. + +import typing + +import pydantic +from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel +from .catalog_config_ordered_bundle_response_data import CatalogConfigOrderedBundleResponseData +from .catalog_config_ordered_plan_response_data import CatalogConfigOrderedPlanResponseData +from .plan_group_plan_detail_response_data import PlanGroupPlanDetailResponseData + + +class CatalogConfigurationResponseData(UniversalBaseModel): + add_ons: typing.List[PlanGroupPlanDetailResponseData] + custom_plan_cta_text: typing.Optional[str] = None + custom_plan_cta_url: typing.Optional[str] = None + custom_plan_price_text: typing.Optional[str] = None + custom_plans_visible: bool + ordered_add_ons: typing.List[CatalogConfigOrderedPlanResponseData] + ordered_bundles: typing.List[CatalogConfigOrderedBundleResponseData] + ordered_plans: typing.List[CatalogConfigOrderedPlanResponseData] + plans: typing.List[PlanGroupPlanDetailResponseData] + pricing_model: typing.Optional[str] = None + pricing_url: typing.Optional[str] = None + + if IS_PYDANTIC_V2: + model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2 + else: + + class Config: + frozen = True + smart_union = True + extra = pydantic.Extra.allow diff --git a/src/schematic/types/catalog_credit_bundle_i_ds_response_data.py b/src/schematic/types/catalog_credit_bundle_i_ds_response_data.py new file mode 100644 index 0000000..675685a --- /dev/null +++ b/src/schematic/types/catalog_credit_bundle_i_ds_response_data.py @@ -0,0 +1,19 @@ +# This file was auto-generated by Fern from our API Definition. + +import typing + +import pydantic +from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel + + +class CatalogCreditBundleIDsResponseData(UniversalBaseModel): + credit_bundle_ids: typing.List[str] + + if IS_PYDANTIC_V2: + model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2 + else: + + class Config: + frozen = True + smart_union = True + extra = pydantic.Extra.allow diff --git a/src/schematic/types/catalog_derived_feature_response_data.py b/src/schematic/types/catalog_derived_feature_response_data.py new file mode 100644 index 0000000..8295913 --- /dev/null +++ b/src/schematic/types/catalog_derived_feature_response_data.py @@ -0,0 +1,21 @@ +# This file was auto-generated by Fern from our API Definition. + +import typing + +import pydantic +from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel + + +class CatalogDerivedFeatureResponseData(UniversalBaseModel): + icon: str + id: str + name: str + + if IS_PYDANTIC_V2: + model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2 + else: + + class Config: + frozen = True + smart_union = True + extra = pydantic.Extra.allow diff --git a/src/schematic/types/catalog_derived_features_response_data.py b/src/schematic/types/catalog_derived_features_response_data.py new file mode 100644 index 0000000..cdf7357 --- /dev/null +++ b/src/schematic/types/catalog_derived_features_response_data.py @@ -0,0 +1,20 @@ +# This file was auto-generated by Fern from our API Definition. + +import typing + +import pydantic +from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel +from .catalog_derived_feature_response_data import CatalogDerivedFeatureResponseData + + +class CatalogDerivedFeaturesResponseData(UniversalBaseModel): + features: typing.List[CatalogDerivedFeatureResponseData] + + if IS_PYDANTIC_V2: + model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2 + else: + + class Config: + frozen = True + smart_union = True + extra = pydantic.Extra.allow diff --git a/src/schematic/types/catalog_plan_i_ds_response_data.py b/src/schematic/types/catalog_plan_i_ds_response_data.py new file mode 100644 index 0000000..093668c --- /dev/null +++ b/src/schematic/types/catalog_plan_i_ds_response_data.py @@ -0,0 +1,19 @@ +# This file was auto-generated by Fern from our API Definition. + +import typing + +import pydantic +from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel + + +class CatalogPlanIDsResponseData(UniversalBaseModel): + plan_ids: typing.List[str] + + if IS_PYDANTIC_V2: + model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2 + else: + + class Config: + frozen = True + smart_union = True + extra = pydantic.Extra.allow diff --git a/src/schematic/types/catalog_response_data.py b/src/schematic/types/catalog_response_data.py new file mode 100644 index 0000000..36d0692 --- /dev/null +++ b/src/schematic/types/catalog_response_data.py @@ -0,0 +1,33 @@ +# This file was auto-generated by Fern from our API Definition. + +import datetime as dt +import typing + +import pydantic +from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel + + +class CatalogResponseData(UniversalBaseModel): + account_id: str + created_at: dt.datetime + custom_plan_cta_text: typing.Optional[str] = None + custom_plan_cta_url: typing.Optional[str] = None + custom_plan_price_text: typing.Optional[str] = None + custom_plans_visible: bool + description: typing.Optional[str] = None + environment_id: str + id: str + is_default: bool + name: str + pricing_model: typing.Optional[str] = None + pricing_url: typing.Optional[str] = None + updated_at: dt.datetime + + if IS_PYDANTIC_V2: + model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2 + else: + + class Config: + frozen = True + smart_union = True + extra = pydantic.Extra.allow diff --git a/src/schematic/types/company_feature_usage_export_metadata.py b/src/schematic/types/company_feature_usage_export_metadata.py new file mode 100644 index 0000000..1b2cb8c --- /dev/null +++ b/src/schematic/types/company_feature_usage_export_metadata.py @@ -0,0 +1,102 @@ +# This file was auto-generated by Fern from our API Definition. + +import typing + +import pydantic +from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel + + +class CompanyFeatureUsageExportMetadata(UniversalBaseModel): + company_ids: typing.Optional[typing.List[str]] = pydantic.Field(default=None) + """ + Restrict the export to these Schematic company IDs (starting with 'comp_') + """ + + credit_type_ids: typing.Optional[typing.List[str]] = pydantic.Field(default=None) + """ + Restrict the export to companies with these billing credit type IDs + """ + + feature_ids: typing.List[str] = pydantic.Field() + """ + Schematic feature IDs (starting with 'feat_') to include as usage columns; at least one is required + """ + + has_scheduled_downgrade: typing.Optional[bool] = pydantic.Field(default=None) + """ + Restrict the export to companies that do (or do not) have a scheduled downgrade + """ + + monetized_subscriptions: typing.Optional[bool] = pydantic.Field(default=None) + """ + Restrict the export to companies with (or without) a monetized subscription + """ + + notification_email_recipient_email_addresses: typing.Optional[typing.List[str]] = pydantic.Field(default=None) + """ + Account member emails to notify when the export completes; empty means the artifact is only retrievable via the API + """ + + plan_id: typing.Optional[str] = pydantic.Field(default=None) + """ + Restrict the export to companies on this plan ID (starting with 'plan_') + """ + + plan_ids: typing.Optional[typing.List[str]] = pydantic.Field(default=None) + """ + Restrict the export to companies on any of these plan IDs + """ + + plan_version_id: typing.Optional[str] = pydantic.Field(default=None) + """ + Restrict the export to companies on this plan version ID + """ + + q: typing.Optional[str] = pydantic.Field(default=None) + """ + Free-text search over company name and keys + """ + + subscription_statuses: typing.Optional[typing.List[str]] = pydantic.Field(default=None) + """ + Restrict the export to companies whose subscription has one of these statuses + """ + + subscription_types: typing.Optional[typing.List[str]] = pydantic.Field(default=None) + """ + Restrict the export to companies whose subscription has one of these types + """ + + with_entitlement_for: typing.Optional[str] = pydantic.Field(default=None) + """ + Restrict the export to companies that have an entitlement for this feature ID + """ + + with_subscription: typing.Optional[bool] = pydantic.Field(default=None) + """ + Restrict the export to companies with a subscription + """ + + without_feature_override_for: typing.Optional[str] = pydantic.Field(default=None) + """ + Restrict the export to companies without a company-level override for this feature ID + """ + + without_plan: typing.Optional[bool] = pydantic.Field(default=None) + """ + Restrict the export to companies without a plan + """ + + without_subscription: typing.Optional[bool] = pydantic.Field(default=None) + """ + Restrict the export to companies without a subscription + """ + + if IS_PYDANTIC_V2: + model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2 + else: + + class Config: + frozen = True + smart_union = True + extra = pydantic.Extra.allow diff --git a/src/schematic/types/company_plan_detail_response_data.py b/src/schematic/types/company_plan_detail_response_data.py index 7796e6c..1171169 100644 --- a/src/schematic/types/company_plan_detail_response_data.py +++ b/src/schematic/types/company_plan_detail_response_data.py @@ -16,6 +16,7 @@ from .custom_plan_config import CustomPlanConfig from .feature_in_plan_response_data import FeatureInPlanResponseData from .feature_usage_response_data import FeatureUsageResponseData +from .plan_catalog_membership_response_data import PlanCatalogMembershipResponseData from .plan_credit_grant_view import PlanCreditGrantView from .plan_currency_prices_response_data import PlanCurrencyPricesResponseData from .plan_entitlement_response_data import PlanEntitlementResponseData @@ -32,6 +33,7 @@ class CompanyPlanDetailResponseData(UniversalBaseModel): billing_linked_resource: typing.Optional[BillingLinkedResourceResponseData] = None billing_product: typing.Optional[BillingProductDetailResponseData] = None billing_strategy: BillingStrategy + catalogs: typing.Optional[typing.List[PlanCatalogMembershipResponseData]] = None charge_type: ChargeType company_can_trial: bool company_count: int diff --git a/src/schematic/types/component_response_data.py b/src/schematic/types/component_response_data.py index deddd0b..e10ce08 100644 --- a/src/schematic/types/component_response_data.py +++ b/src/schematic/types/component_response_data.py @@ -11,6 +11,7 @@ class ComponentResponseData(UniversalBaseModel): ast: typing.Optional[typing.Dict[str, float]] = None + catalog_id: typing.Optional[str] = None created_at: dt.datetime id: str name: str diff --git a/src/schematic/types/data_export_metadata.py b/src/schematic/types/data_export_metadata.py new file mode 100644 index 0000000..8e9d68f --- /dev/null +++ b/src/schematic/types/data_export_metadata.py @@ -0,0 +1,64 @@ +# This file was auto-generated by Fern from our API Definition. + +from __future__ import annotations + +import datetime as dt +import typing + +import pydantic +import typing_extensions +from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel + + +class DataExportMetadata_AuditLog(UniversalBaseModel): + export_type: typing.Literal["audit-log"] = "audit-log" + actor_type: typing.Optional[str] = None + end_time: typing.Optional[dt.datetime] = None + notification_email_recipient_email_addresses: typing.Optional[typing.List[str]] = None + q: typing.Optional[str] = None + start_time: typing.Optional[dt.datetime] = None + + if IS_PYDANTIC_V2: + model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2 + else: + + class Config: + frozen = True + smart_union = True + extra = pydantic.Extra.allow + + +class DataExportMetadata_CompanyFeatureUsage(UniversalBaseModel): + export_type: typing.Literal["company-feature-usage"] = "company-feature-usage" + company_ids: typing.Optional[typing.List[str]] = None + credit_type_ids: typing.Optional[typing.List[str]] = None + feature_ids: typing.List[str] + has_scheduled_downgrade: typing.Optional[bool] = None + monetized_subscriptions: typing.Optional[bool] = None + notification_email_recipient_email_addresses: typing.Optional[typing.List[str]] = None + plan_id: typing.Optional[str] = None + plan_ids: typing.Optional[typing.List[str]] = None + plan_version_id: typing.Optional[str] = None + q: typing.Optional[str] = None + subscription_statuses: typing.Optional[typing.List[str]] = None + subscription_types: typing.Optional[typing.List[str]] = None + with_entitlement_for: typing.Optional[str] = None + with_subscription: typing.Optional[bool] = None + without_feature_override_for: typing.Optional[str] = None + without_plan: typing.Optional[bool] = None + without_subscription: typing.Optional[bool] = None + + if IS_PYDANTIC_V2: + model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2 + else: + + class Config: + frozen = True + smart_union = True + extra = pydantic.Extra.allow + + +DataExportMetadata = typing_extensions.Annotated[ + typing.Union[DataExportMetadata_AuditLog, DataExportMetadata_CompanyFeatureUsage], + pydantic.Field(discriminator="export_type"), +] diff --git a/src/schematic/types/data_export_output_file_type.py b/src/schematic/types/data_export_output_file_type.py index b1fa266..273e87e 100644 --- a/src/schematic/types/data_export_output_file_type.py +++ b/src/schematic/types/data_export_output_file_type.py @@ -2,4 +2,4 @@ import typing -DataExportOutputFileType = typing.Literal["csv"] +DataExportOutputFileType = typing.Union[typing.Literal["csv", "csv.gz"], typing.Any] diff --git a/src/schematic/types/data_export_response_data.py b/src/schematic/types/data_export_response_data.py index 9974bd1..22e367b 100644 --- a/src/schematic/types/data_export_response_data.py +++ b/src/schematic/types/data_export_response_data.py @@ -5,6 +5,7 @@ import pydantic from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel +from .data_export_metadata import DataExportMetadata from .data_export_output_file_type import DataExportOutputFileType from .data_export_status import DataExportStatus from .data_export_type import DataExportType @@ -14,10 +15,10 @@ class DataExportResponseData(UniversalBaseModel): account_id: str created_at: dt.datetime environment_id: str - export_type: DataExportType = "company-feature-usage" + export_type: DataExportType id: str - metadata: str - output_file_type: DataExportOutputFileType = "csv" + metadata: typing.Optional[DataExportMetadata] = None + output_file_type: DataExportOutputFileType status: DataExportStatus updated_at: dt.datetime diff --git a/src/schematic/types/data_export_type.py b/src/schematic/types/data_export_type.py index 0a2408a..6c073cc 100644 --- a/src/schematic/types/data_export_type.py +++ b/src/schematic/types/data_export_type.py @@ -2,4 +2,4 @@ import typing -DataExportType = typing.Literal["company-feature-usage"] +DataExportType = typing.Union[typing.Literal["audit-log", "company-feature-usage"], typing.Any] diff --git a/src/schematic/types/feature_entitlement.py b/src/schematic/types/feature_entitlement.py index 5b076e7..85351c9 100644 --- a/src/schematic/types/feature_entitlement.py +++ b/src/schematic/types/feature_entitlement.py @@ -8,6 +8,7 @@ from .entitlement_value_type import EntitlementValueType from .metric_period import MetricPeriod from .metric_period_month_reset import MetricPeriodMonthReset +from .warning_tier import WarningTier class FeatureEntitlement(UniversalBaseModel): @@ -101,6 +102,11 @@ class FeatureEntitlement(UniversalBaseModel): The type of the entitlement value """ + warning_tiers: typing.Optional[typing.List[WarningTier]] = pydantic.Field(default=None) + """ + Customer-defined usage warning thresholds configured on this entitlement + """ + if IS_PYDANTIC_V2: model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2 else: diff --git a/src/schematic/types/plan_catalog_membership_response_data.py b/src/schematic/types/plan_catalog_membership_response_data.py new file mode 100644 index 0000000..2efb198 --- /dev/null +++ b/src/schematic/types/plan_catalog_membership_response_data.py @@ -0,0 +1,20 @@ +# This file was auto-generated by Fern from our API Definition. + +import typing + +import pydantic +from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel + + +class PlanCatalogMembershipResponseData(UniversalBaseModel): + id: str + name: str + + if IS_PYDANTIC_V2: + model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2 + else: + + class Config: + frozen = True + smart_union = True + extra = pydantic.Extra.allow diff --git a/src/schematic/types/plan_detail_response_data.py b/src/schematic/types/plan_detail_response_data.py index 38b58e7..4bc1bb5 100644 --- a/src/schematic/types/plan_detail_response_data.py +++ b/src/schematic/types/plan_detail_response_data.py @@ -14,6 +14,7 @@ from .billing_strategy import BillingStrategy from .charge_type import ChargeType from .feature_in_plan_response_data import FeatureInPlanResponseData +from .plan_catalog_membership_response_data import PlanCatalogMembershipResponseData from .plan_currency_prices_response_data import PlanCurrencyPricesResponseData from .plan_entitlement_response_data import PlanEntitlementResponseData from .plan_icon import PlanIcon @@ -27,6 +28,7 @@ class PlanDetailResponseData(UniversalBaseModel): billing_linked_resource: typing.Optional[BillingLinkedResourceResponseData] = None billing_product: typing.Optional[BillingProductDetailResponseData] = None billing_strategy: BillingStrategy + catalogs: typing.Optional[typing.List[PlanCatalogMembershipResponseData]] = None charge_type: ChargeType company_count: int company_id: typing.Optional[str] = None diff --git a/src/schematic/types/plan_group_plan_detail_response_data.py b/src/schematic/types/plan_group_plan_detail_response_data.py index 3f78c5c..8aefcc3 100644 --- a/src/schematic/types/plan_group_plan_detail_response_data.py +++ b/src/schematic/types/plan_group_plan_detail_response_data.py @@ -15,6 +15,7 @@ from .charge_type import ChargeType from .custom_plan_view_config_response_data import CustomPlanViewConfigResponseData from .feature_in_plan_response_data import FeatureInPlanResponseData +from .plan_catalog_membership_response_data import PlanCatalogMembershipResponseData from .plan_currency_prices_response_data import PlanCurrencyPricesResponseData from .plan_entitlement_response_data import PlanEntitlementResponseData from .plan_icon import PlanIcon @@ -30,6 +31,7 @@ class PlanGroupPlanDetailResponseData(UniversalBaseModel): billing_linked_resource: typing.Optional[BillingLinkedResourceResponseData] = None billing_product: typing.Optional[BillingProductDetailResponseData] = None billing_strategy: BillingStrategy + catalogs: typing.Optional[typing.List[PlanCatalogMembershipResponseData]] = None charge_type: ChargeType company_count: int company_id: typing.Optional[str] = None diff --git a/src/schematic/types/plan_view_public_response_data.py b/src/schematic/types/plan_view_public_response_data.py index d7d952f..31deaf8 100644 --- a/src/schematic/types/plan_view_public_response_data.py +++ b/src/schematic/types/plan_view_public_response_data.py @@ -14,6 +14,7 @@ from .charge_type import ChargeType from .custom_plan_config import CustomPlanConfig from .feature_in_plan_response_data import FeatureInPlanResponseData +from .plan_catalog_membership_response_data import PlanCatalogMembershipResponseData from .plan_credit_grant_view import PlanCreditGrantView from .plan_currency_prices_response_data import PlanCurrencyPricesResponseData from .plan_entitlement_response_data import PlanEntitlementResponseData @@ -30,6 +31,7 @@ class PlanViewPublicResponseData(UniversalBaseModel): billing_linked_resource: typing.Optional[BillingLinkedResourceResponseData] = None billing_product: typing.Optional[BillingProductDetailResponseData] = None billing_strategy: BillingStrategy + catalogs: typing.Optional[typing.List[PlanCatalogMembershipResponseData]] = None charge_type: ChargeType company_count: int company_id: typing.Optional[str] = None diff --git a/src/schematic/types/preview_subscription_discount_response_data.py b/src/schematic/types/preview_subscription_discount_response_data.py new file mode 100644 index 0000000..8d426ce --- /dev/null +++ b/src/schematic/types/preview_subscription_discount_response_data.py @@ -0,0 +1,30 @@ +# This file was auto-generated by Fern from our API Definition. + +import datetime as dt +import typing + +import pydantic +from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel + + +class PreviewSubscriptionDiscountResponseData(UniversalBaseModel): + amount_off: typing.Optional[int] = None + coupon_name: str + currency: typing.Optional[str] = None + customer_facing_code: typing.Optional[str] = None + duration: str + duration_in_months: typing.Optional[int] = None + ended_at: typing.Optional[dt.datetime] = None + is_active: bool + percent_off: typing.Optional[float] = None + promo_code_external_id: typing.Optional[str] = None + started_at: dt.datetime + + if IS_PYDANTIC_V2: + model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2 + else: + + class Config: + frozen = True + smart_union = True + extra = pydantic.Extra.allow diff --git a/src/schematic/types/preview_subscription_finance_response_data.py b/src/schematic/types/preview_subscription_finance_response_data.py index 9f6fc15..ceaa47d 100644 --- a/src/schematic/types/preview_subscription_finance_response_data.py +++ b/src/schematic/types/preview_subscription_finance_response_data.py @@ -5,14 +5,17 @@ import pydantic from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel +from .preview_subscription_discount_response_data import PreviewSubscriptionDiscountResponseData from .preview_subscription_upcoming_invoice_line_items import PreviewSubscriptionUpcomingInvoiceLineItems class PreviewSubscriptionFinanceResponseData(UniversalBaseModel): amount_off: int + discounts: typing.List[PreviewSubscriptionDiscountResponseData] due_now: int new_charges: int percent_off: float + period_end: dt.datetime period_start: dt.datetime promo_code_applied: bool proration: int diff --git a/src/schematic/types/rulesengine_feature_entitlement.py b/src/schematic/types/rulesengine_feature_entitlement.py index f236814..4926352 100644 --- a/src/schematic/types/rulesengine_feature_entitlement.py +++ b/src/schematic/types/rulesengine_feature_entitlement.py @@ -8,6 +8,7 @@ from .rulesengine_entitlement_value_type import RulesengineEntitlementValueType from .rulesengine_metric_period import RulesengineMetricPeriod from .rulesengine_metric_period_month_reset import RulesengineMetricPeriodMonthReset +from .rulesengine_warning_tier import RulesengineWarningTier class RulesengineFeatureEntitlement(UniversalBaseModel): @@ -101,6 +102,11 @@ class RulesengineFeatureEntitlement(UniversalBaseModel): The type of the entitlement value """ + warning_tiers: typing.Optional[typing.List[RulesengineWarningTier]] = pydantic.Field(default=None) + """ + Customer-defined usage warning thresholds configured on this entitlement + """ + if IS_PYDANTIC_V2: model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2 else: diff --git a/src/schematic/types/rulesengine_warning_tier.py b/src/schematic/types/rulesengine_warning_tier.py new file mode 100644 index 0000000..585a4e2 --- /dev/null +++ b/src/schematic/types/rulesengine_warning_tier.py @@ -0,0 +1,27 @@ +# This file was auto-generated by Fern from our API Definition. + +import typing + +import pydantic +from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel + + +class RulesengineWarningTier(UniversalBaseModel): + key: str = pydantic.Field() + """ + A customer-defined identifier for the warning tier + """ + + value: int = pydantic.Field() + """ + The warning threshold, in the entitlement's usage units + """ + + if IS_PYDANTIC_V2: + model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2 + else: + + class Config: + frozen = True + smart_union = True + extra = pydantic.Extra.allow diff --git a/src/schematic/types/upsert_company_request_body.py b/src/schematic/types/upsert_company_request_body.py index 4bd62aa..ba8ada6 100644 --- a/src/schematic/types/upsert_company_request_body.py +++ b/src/schematic/types/upsert_company_request_body.py @@ -8,6 +8,16 @@ class UpsertCompanyRequestBody(UniversalBaseModel): + base_plan_id: typing.Optional[str] = pydantic.Field(default=None) + """ + Assign this base plan when creating the company (starts with plan_). Takes precedence over the environment's initial plan and must be provisionable without a payment method. + """ + + base_plan_price_id: typing.Optional[str] = pydantic.Field(default=None) + """ + The Schematic price to provision for base_plan_id (starts with bilpp_). Required and must be $0 for a billing-linked plan; omit for a plan that is not billing-linked. + """ + id: typing.Optional[str] = pydantic.Field(default=None) """ If you know the Schematic ID, you can use that here instead of keys diff --git a/src/schematic/types/warning_tier.py b/src/schematic/types/warning_tier.py new file mode 100644 index 0000000..ae59ee4 --- /dev/null +++ b/src/schematic/types/warning_tier.py @@ -0,0 +1,27 @@ +# This file was auto-generated by Fern from our API Definition. + +import typing + +import pydantic +from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel + + +class WarningTier(UniversalBaseModel): + key: str = pydantic.Field() + """ + A customer-defined identifier for the warning tier + """ + + value: int = pydantic.Field() + """ + The warning threshold, in the entitlement's usage units + """ + + if IS_PYDANTIC_V2: + model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2 + else: + + class Config: + frozen = True + smart_union = True + extra = pydantic.Extra.allow