diff --git a/.fern/metadata.json b/.fern/metadata.json
index 5363cfd..14bf66f 100644
--- a/.fern/metadata.json
+++ b/.fern/metadata.json
@@ -23,10 +23,10 @@
}
]
},
- "originGitCommit": "19cafdf92ab056ef6ba803bf1e352b0422a8ec45",
+ "originGitCommit": "75191b40ce7af084ca4fb11f623ab59c57cf97e3",
"originGitCommitIsDirty": false,
"invokedBy": "ci",
- "requestedVersion": "1.3.0",
+ "requestedVersion": "1.3.1",
"ciProvider": "github",
- "sdkVersion": "1.3.0"
+ "sdkVersion": "1.3.1"
}
\ No newline at end of file
diff --git a/.fern/replay.lock b/.fern/replay.lock
index 02e46bf..ce4eaf6 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: 4f33f9ff3d27d8f158c3e08583a8f953c32f9f12
+ tree_hash: b14ec0fd5a517636a2053d99a18cb0783b7924b6
+ timestamp: 2026-07-22T19:22:48.096Z
+ cli_version: unknown
+ generator_versions:
+ fernapi/fern-python-sdk: 5.14.20
+current_generation: 4f33f9ff3d27d8f158c3e08583a8f953c32f9f12
patches: []
diff --git a/poetry.lock b/poetry.lock
index 0eba3e4..d4e1dd0 100644
--- a/poetry.lock
+++ b/poetry.lock
@@ -15,131 +15,131 @@ markers = {main = "extra == \"aiohttp\""}
[[package]]
name = "aiohttp"
-version = "3.14.1"
+version = "3.14.2"
description = "Async http client/server framework (asyncio)"
optional = false
python-versions = ">=3.10"
groups = ["main", "dev"]
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"},
- {file = "aiohttp-3.14.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:d9d4e294455b23a68c9b8f042d0e8e377a265bcb15332753695f6e5b6819e0ce"},
- {file = "aiohttp-3.14.1-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:b238af795833d5731d049d82bc84b768ae6f8f97f0495963b3ed9935c5901cc3"},
- {file = "aiohttp-3.14.1-cp310-cp310-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:e4e5e0ae56914ecdbf446493addefc0159053dd53962cef37d7839f37f73d505"},
- {file = "aiohttp-3.14.1-cp310-cp310-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:092e4ce3619a7c6dee52a6bdabda973d9b34b66781f840ce93c7e0cec30cf521"},
- {file = "aiohttp-3.14.1-cp310-cp310-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:bb33777ea21e8b7ecde0e6fc84f598be0a1192eab1a63bc746d75aa75d38e7bd"},
- {file = "aiohttp-3.14.1-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:23119f8fd4f5d16902ed459b63b100bcd269628075162bddac56cc7b5273b3fb"},
- {file = "aiohttp-3.14.1-cp310-cp310-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:57fc6745a4b7d0f5a9eb4f40a69718be6c0bc1b8368cc9fe89e90118719f4f42"},
- {file = "aiohttp-3.14.1-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:6fd35beba67c4183b09375c5fff9accb47524191a244a99f95fd4472f5402c2b"},
- {file = "aiohttp-3.14.1-cp310-cp310-musllinux_1_2_armv7l.whl", hash = "sha256:672b9d65f42eb877f5c3f234a4547e4e1a226ca8c2eed879bb34670a0ce51192"},
- {file = "aiohttp-3.14.1-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:24ba13339fed9251d9b1a1bec8c7ab84c0d1675d79d33501e11f94f8b9a84e05"},
- {file = "aiohttp-3.14.1-cp310-cp310-musllinux_1_2_riscv64.whl", hash = "sha256:94da27378da0610e341c4d30de29a191672683cc82b8f9556e8f7c7212a020fe"},
- {file = "aiohttp-3.14.1-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:52cdac9432d8b4a719f35094a818d95adcae0f0b4fe9b9b921909e0c87de9e7d"},
- {file = "aiohttp-3.14.1-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:672ac254412a24d0d0cf00a9e6c238877e4be5e5fa2d188832c1244f45f31966"},
- {file = "aiohttp-3.14.1-cp310-cp310-win32.whl", hash = "sha256:2fe3607e71acc6ebb0ec8e492a247bf7a291226192dc0084236dfc12478916f6"},
- {file = "aiohttp-3.14.1-cp310-cp310-win_amd64.whl", hash = "sha256:30099eda75a53c32efb0920e9c33c195314d2cc1c680fbfd30894932ac5f27df"},
- {file = "aiohttp-3.14.1-cp310-cp310-win_arm64.whl", hash = "sha256:5a837f49d901f9e368651b676912bff1104ed8c1a83b280bcd7b29adccef5c9c"},
- {file = "aiohttp-3.14.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:aa00140699487bd435fde4342d85c94cb256b7cd3a5b9c3396c67f19922afda2"},
- {file = "aiohttp-3.14.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:1c1af67559445498b502030c35c59db59966f47041ca9de5b4e707f86bd10b5f"},
- {file = "aiohttp-3.14.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:d44ec478e713ee7f29b439f7eb8dc2b9d4079e11ae114d2c2ac3d5daf30516c8"},
- {file = "aiohttp-3.14.1-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:d3b1a184a9a8f548a6b73f1e26b96b052193e4b3175ed7342aaf1151a1f00a04"},
- {file = "aiohttp-3.14.1-cp311-cp311-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:5f2504bc0322437c9a1ff6d3333ca56c7477b727c995f036b976ae17b98372c8"},
- {file = "aiohttp-3.14.1-cp311-cp311-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:73f05ea02013e02512c3bf42714f1208c57168c779cc6fe23516e4543089d0a6"},
- {file = "aiohttp-3.14.1-cp311-cp311-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:797457503c2d426bee06eef808d07b31ede30b65e054444e7de64cad0061b7af"},
- {file = "aiohttp-3.14.1-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:b821a1f7dedf7e37450654e620038ac3b2e81e8fa6ea269337e97101978ec730"},
- {file = "aiohttp-3.14.1-cp311-cp311-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:4cd96b5ba05d67ed0cf00b5b405c8cd99586d8e3481e8ee0a831057591af7621"},
- {file = "aiohttp-3.14.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:1d459b98a932296c6f0e94f87511a0b1b90a8a02c30a50e60a297619cd5a58ee"},
- {file = "aiohttp-3.14.1-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:764457a7be60825fb770a644852ff717bcbb5042f189f2bd16df61a81b3f6573"},
- {file = "aiohttp-3.14.1-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:f7a16ef45b081454ef844502d87a848876c490c4cb5c650c230f6ec79ed2c1e7"},
- {file = "aiohttp-3.14.1-cp311-cp311-musllinux_1_2_riscv64.whl", hash = "sha256:2fbc3ed048b3475b9f0cbcb9978e9d2d3511acd91ead203af26ed9f0056004cf"},
- {file = "aiohttp-3.14.1-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:bedb0cd073cc2dc035e30aeb99444389d3cd2113afe4ef9fcd23d439f5bade85"},
- {file = "aiohttp-3.14.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:b6feea921016eb3d4e04d65fc4e9ca402d1a3801f562aef94989f54694917af3"},
- {file = "aiohttp-3.14.1-cp311-cp311-win32.whl", hash = "sha256:313701e488100074ce99850404ee36e741abf6330179fec908a1944ecf570126"},
- {file = "aiohttp-3.14.1-cp311-cp311-win_amd64.whl", hash = "sha256:03ab4530fdcb3a543a122ba4b65ac9919da9fe9f78a03d328a6e38ff962f7aa5"},
- {file = "aiohttp-3.14.1-cp311-cp311-win_arm64.whl", hash = "sha256:486f7d16ed54c39c2cbd7ca71fd8ba2b8bb7860df65bd7b6ed640bab96a38a8b"},
- {file = "aiohttp-3.14.1-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:d35143e27778b4bb0fb189562d7f275bff79c62ab8e98459717c0ea617ff2480"},
- {file = "aiohttp-3.14.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:bcfb80a2cc36fba2534e5e5b5264dc7ae6fcd9bf15256da3e53d2f499e6fa29d"},
- {file = "aiohttp-3.14.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:27fd7c91e51729b4f7e1577865fa6d34c9adccbc39aabe9000285b48af9f0ec2"},
- {file = "aiohttp-3.14.1-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:64c567bf9eaf664280116a8688f63016e6b32db2505908e2bdaca1b6438142f2"},
- {file = "aiohttp-3.14.1-cp312-cp312-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:f5e6ff2bdbb8f4cd3fbe41f99e25bbcd58e3bf9f13d3dd31a11e7917251cc77a"},
- {file = "aiohttp-3.14.1-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:2f73e01dc37122325caf079982621262f96d74823c179038a82fddfc50359264"},
- {file = "aiohttp-3.14.1-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:bb2c0c80d431c0d03f2c7dbf125150fedd4f0de17366a7ca33f7ccb822391842"},
- {file = "aiohttp-3.14.1-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:3e6fc1a85fa7194a1a7d19f44e8609180f4a8eb5fa4c7ed8b4355f080fad235c"},
- {file = "aiohttp-3.14.1-cp312-cp312-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:686b6c0d3911ec387b444ddf5dc62fb7f7c0a7d5186a7861626496a5ab4aff95"},
- {file = "aiohttp-3.14.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:c6fa4dc7ad6f8109c70bb1499e589f76b0b792baf39f9b017eb92c8a81d0a199"},
- {file = "aiohttp-3.14.1-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:87a5eea1b2a5e21e1ebdbb33ad4165359189327e63fc4e4894693e7f821ac817"},
- {file = "aiohttp-3.14.1-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:1c1421eb01d4fd608d88cc8290211d177a58532b55ad94076fb349c5bf467f0a"},
- {file = "aiohttp-3.14.1-cp312-cp312-musllinux_1_2_riscv64.whl", hash = "sha256:34b257ec41345c1e8f2df68fa908a7952f5de932723871eb633ecbbff396c9a4"},
- {file = "aiohttp-3.14.1-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:de538791a80e5d862addbc183f70f0158ac9b9bb872bb147f1fd2a683691e087"},
- {file = "aiohttp-3.14.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:6f71173be42d3241d428f760122febb748de0623f44308a6f120d0dd9ec572e3"},
- {file = "aiohttp-3.14.1-cp312-cp312-win32.whl", hash = "sha256:ec8dc383ee57ea3e883477dcca3f11b65d58199f1080acaf4cd6ad9a99698be4"},
- {file = "aiohttp-3.14.1-cp312-cp312-win_amd64.whl", hash = "sha256:2aa92c87868cd13674989f9ee83e5f9f7ea4237589b728048e1f0c8f6caa3271"},
- {file = "aiohttp-3.14.1-cp312-cp312-win_arm64.whl", hash = "sha256:2c840c90759922cb5e6dda94596e079a30fb5a5ba548e7e0dc00574703940847"},
- {file = "aiohttp-3.14.1-cp313-cp313-android_21_arm64_v8a.whl", hash = "sha256:b3a03285a7f9c7b016324574a6d92a1c895da6b978cb8f1deee3ac72bc6da178"},
- {file = "aiohttp-3.14.1-cp313-cp313-android_21_x86_64.whl", hash = "sha256:2a73f487ab8ef5abbb24b7aa9b73e98eaba9e9e031804ff2416f02eca315ccaf"},
- {file = "aiohttp-3.14.1-cp313-cp313-ios_13_0_arm64_iphoneos.whl", hash = "sha256:915fbb7b41b115192259f8c9ae58f3ddc444d2b5579917270211858e606a4afd"},
- {file = "aiohttp-3.14.1-cp313-cp313-ios_13_0_arm64_iphonesimulator.whl", hash = "sha256:7fb4bdf95b0561a79f259f9d28fbc109728c5ee7f27aff6391f0ca703a329abe"},
- {file = "aiohttp-3.14.1-cp313-cp313-ios_13_0_x86_64_iphonesimulator.whl", hash = "sha256:1b9748363260121d2927704f5d4fc498150669ca3ae93625986ee89c8f80dcd4"},
- {file = "aiohttp-3.14.1-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:86a6dab78b0e43e2897a3bbe15745aa60dc5423ca437b7b0b164c069bf91b876"},
- {file = "aiohttp-3.14.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:4dfd6e47d3c44c2279907607f73a4240b88c69eb8b90da7e2441a8045dfd21da"},
- {file = "aiohttp-3.14.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:317acd9f8602858dc7d59679812c376c7f0b97bcbbf16e0d6237f54141d8a8a6"},
- {file = "aiohttp-3.14.1-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:bd869c427324e5cb15195793de951295710db28be7d818247f3097b4ab5d4b96"},
- {file = "aiohttp-3.14.1-cp313-cp313-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:93b032b5ec3255473c143627d21a69ac74ae12f7f33974cb587c564d11b1066f"},
- {file = "aiohttp-3.14.1-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:f234b4deb12f3ad59127e037bc57c40c21e45b45282df7d3a55a0f409f595296"},
- {file = "aiohttp-3.14.1-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:9af6779bfb46abf124068327abcdf9ce95c9ef8287a3e8da76ccf2d0f16c28fa"},
- {file = "aiohttp-3.14.1-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:faccab372e66bc76d5731525e7f1143c922271725b9d38c9f97edcc66266b451"},
- {file = "aiohttp-3.14.1-cp313-cp313-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:f380468b09d2a81633ee863b0ec5648d364bd17bb8ecfb8c2f387f7ac1faf42c"},
- {file = "aiohttp-3.14.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:97e704dcd26271f5bda3fa07c3ce0fb76d6d3f8659f4baa1a24442cc9ba177ca"},
- {file = "aiohttp-3.14.1-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:269b76ac5394092b95bc4a098f4fc6c191c083c3bd12775d1e30e663132f6a09"},
- {file = "aiohttp-3.14.1-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:5c0b3e614340c889d575451696374c9d17affd54cd607ca0babed8f8c37b9397"},
- {file = "aiohttp-3.14.1-cp313-cp313-musllinux_1_2_riscv64.whl", hash = "sha256:5663ee9257cfa1add7253a7da3035a02f31b6600ec48261585e1800a81533080"},
- {file = "aiohttp-3.14.1-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:603a2c834142172ffddc054067f5ec0ca65d57a0aa98a71bc81952573208e345"},
- {file = "aiohttp-3.14.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:cb21957bb8aca671c1765e32f58164cf0c50e6bf41c0bbbd16da20732ecaf588"},
- {file = "aiohttp-3.14.1-cp313-cp313-win32.whl", hash = "sha256:e509a55f681e6158c20f70f102f9cf61fb20fbc382272bc6d94b7343f2582780"},
- {file = "aiohttp-3.14.1-cp313-cp313-win_amd64.whl", hash = "sha256:1ac8531b638959718e18c2207fbfe297819875da46a740b29dfa29beba64355a"},
- {file = "aiohttp-3.14.1-cp313-cp313-win_arm64.whl", hash = "sha256:250d14af67f6b6a1a4a811049b1afa69d61d617fca6bf33149b3ab1a6dbcf7b8"},
- {file = "aiohttp-3.14.1-cp314-cp314-android_24_arm64_v8a.whl", hash = "sha256:7c106c26852ca1c2047c6b80384f17100b4e439af276f21ef3d4e2f450ae7e15"},
- {file = "aiohttp-3.14.1-cp314-cp314-android_24_x86_64.whl", hash = "sha256:20205f7f5ade7aaec9f4b500549bbc071b046453aed72f9c06dcab87896a83e8"},
- {file = "aiohttp-3.14.1-cp314-cp314-ios_13_0_arm64_iphoneos.whl", hash = "sha256:62a759436b29e677181a9e76bab8b8f689a29cb9c535f45f7c48c9c830d3f8c3"},
- {file = "aiohttp-3.14.1-cp314-cp314-ios_13_0_arm64_iphonesimulator.whl", hash = "sha256:2964cbf553df4d7a57348da44d961d871895fc1ee4e8c322b2a95612c7b17fba"},
- {file = "aiohttp-3.14.1-cp314-cp314-ios_13_0_x86_64_iphonesimulator.whl", hash = "sha256:237651caadc3a59badd39319c54642b5299e9cc98a3a194310e55d5bb9f5e397"},
- {file = "aiohttp-3.14.1-cp314-cp314-macosx_10_15_universal2.whl", hash = "sha256:896e12dfdbbab9d8f7e16d2b28c6769a60126fa92095d1ebf9473d02593a2448"},
- {file = "aiohttp-3.14.1-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:d03f281ed22579314ba00821ce20115a7c0ac430660b4cc05704a3f818b3e004"},
- {file = "aiohttp-3.14.1-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:07eabb979d236335fed927e137a928c9adfb7df3b9ec7aa31726f133a62be983"},
- {file = "aiohttp-3.14.1-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:4fe1f1087cbadb280b5e1bb054a4f00d1423c74d6626c5e48400d871d34ecefe"},
- {file = "aiohttp-3.14.1-cp314-cp314-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:367a9314fdc79dab0fac96e216cb41dd73c85bdca85306ce8999118ba7e0f333"},
- {file = "aiohttp-3.14.1-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:a24f677ebe83749039e7bdf862ff0bbb16818ae4193d4ef96505e269375bcce0"},
- {file = "aiohttp-3.14.1-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:c83afe0ba876be7e943d2e0ba645809ad441575d2840c895c21ee5de93b9377a"},
- {file = "aiohttp-3.14.1-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:634e385930fb6d2d479cf3aa66515955863b77a5e3c2b5894ca259a25b308602"},
- {file = "aiohttp-3.14.1-cp314-cp314-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:eeea07c4397bbc57719c4eed8f9c284874d4f175f9b6d57f7a1546b976d455ca"},
- {file = "aiohttp-3.14.1-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:335c0cc3e3545ce98dcb9cfcb836f40c3411f43fa03dab757597d80c89af8a35"},
- {file = "aiohttp-3.14.1-cp314-cp314-musllinux_1_2_armv7l.whl", hash = "sha256:ae6be797afdef264e8a84864a85b196ca06045586481b3df8a967322fd2fa844"},
- {file = "aiohttp-3.14.1-cp314-cp314-musllinux_1_2_ppc64le.whl", hash = "sha256:8560b4d712474335d08907db7973f71912d3a9a8f1dee992ec06b5d2fe359496"},
- {file = "aiohttp-3.14.1-cp314-cp314-musllinux_1_2_riscv64.whl", hash = "sha256:2b7edd08e0a5deb1e8564a2fcd8f4561014a3f05252334671bbf55ddd47db0e5"},
- {file = "aiohttp-3.14.1-cp314-cp314-musllinux_1_2_s390x.whl", hash = "sha256:b6ff7fcee63287ae57b5df3e4f5957ce032122802509246dec1a5bcc55904c95"},
- {file = "aiohttp-3.14.1-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:6ffbb2f4ec1ceaff7e07d43922954da26b223d188bf30658e561b98e23089444"},
- {file = "aiohttp-3.14.1-cp314-cp314-win32.whl", hash = "sha256:a9875b46d910cff3ea2f5962f9d266b465459fe634e22556ab9bd6fc1192eea0"},
- {file = "aiohttp-3.14.1-cp314-cp314-win_amd64.whl", hash = "sha256:af8b4b81a960eeaf1234971ac3cd0ba5901f3cd42eae42a46b4d089a8b492719"},
- {file = "aiohttp-3.14.1-cp314-cp314-win_arm64.whl", hash = "sha256:cf4491381b1b57425c315a56a439251b1bdac07b2275f19a8c44bc57744532ec"},
- {file = "aiohttp-3.14.1-cp314-cp314t-macosx_10_15_universal2.whl", hash = "sha256:819c054312f1af92947e6a55883d1b66feefab11531a7fc45e0fb9b63880b5c2"},
- {file = "aiohttp-3.14.1-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:10ee9c1753a8f706345b22496c79fbddb5be0599e0823f3738b1534058e25340"},
- {file = "aiohttp-3.14.1-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:1601cc37baf5750ccacae618ec2daf020769581695550e3b654a911f859c563d"},
- {file = "aiohttp-3.14.1-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:4d6e0ac9da31c9c04c84e1c0182ad8d6df35965a85cae29cd71d089621b3ae94"},
- {file = "aiohttp-3.14.1-cp314-cp314t-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:9e8f2d660c350b3d0e259c7a7e3d9b7fc8b41210cbcc3d4a7076ff0a5e5c2fdc"},
- {file = "aiohttp-3.14.1-cp314-cp314t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:4691802dda97be727f79d86818acaad7eb8e9252626a1d6b519fedbb92d5e251"},
- {file = "aiohttp-3.14.1-cp314-cp314t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:c389c482a7e9b9dc3ee2701ac46c4125297a3818875b9c305ddb603c04828fd1"},
- {file = "aiohttp-3.14.1-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:fc0cacab7ba4e56f0f81c82a98c09bed2f39c940107b03a34b168bdf7597edd3"},
- {file = "aiohttp-3.14.1-cp314-cp314t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:979ed4717f59b8bb12e3963378fa285d93d367e15bcd66c721311826d3c44a6c"},
- {file = "aiohttp-3.14.1-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:38e1e7daaea81df51c952e18483f323d878499a1e2bfe564790e0f9701d6f203"},
- {file = "aiohttp-3.14.1-cp314-cp314t-musllinux_1_2_armv7l.whl", hash = "sha256:4132e72c608fe9fecb8f409113567605915b83e9bdd3ea56538d2f9cd35002f1"},
- {file = "aiohttp-3.14.1-cp314-cp314t-musllinux_1_2_ppc64le.whl", hash = "sha256:eefd9cc9b6d4a2db5f00a26bc3e4f9acf71926a6ec557cd56c9c6f27c290b665"},
- {file = "aiohttp-3.14.1-cp314-cp314t-musllinux_1_2_riscv64.whl", hash = "sha256:b165790117eea512d7f3fb22f1f6dad3d55a7189571993eb015591c1401276d1"},
- {file = "aiohttp-3.14.1-cp314-cp314t-musllinux_1_2_s390x.whl", hash = "sha256:ed09c7eb1c391271c2ed0314a51903e72a3acb653d5ccfc264cdf3ef11f8269d"},
- {file = "aiohttp-3.14.1-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:99abd37084b82f5830c635fddd0b4993b9742a66eb746dacf433c8590e8f9e3c"},
- {file = "aiohttp-3.14.1-cp314-cp314t-win32.whl", hash = "sha256:47ddf841cdecc810749921d25606dee45857d12d2ad5ddb7b5bd7eab12e4b365"},
- {file = "aiohttp-3.14.1-cp314-cp314t-win_amd64.whl", hash = "sha256:5e78b522b7a6e27e0b25d19b247b75039ac4c94f99823e3c9e53ae1603a9f7e9"},
- {file = "aiohttp-3.14.1-cp314-cp314t-win_arm64.whl", hash = "sha256:90d53f1609c29ccc2193945ef732428382a28f78d0456ae4d3daf0d48b74f0f6"},
- {file = "aiohttp-3.14.1.tar.gz", hash = "sha256:307f2cff90a764d329e77040603fa032db89c5c24fdad50c4c15334cba744035"},
+ {file = "aiohttp-3.14.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:ceb77c159b2b4c1a179b96a26af36bcaa68eb79c393ec4f569386a69d013cbe9"},
+ {file = "aiohttp-3.14.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:3f3381f81bc1c6cbe160b2a3708d39d05014329118e6b648b95edc841eeeebd4"},
+ {file = "aiohttp-3.14.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:483b6f964bbbdaa99a0cd7def631208c44e39d243b95cff23ebc812db8a80e03"},
+ {file = "aiohttp-3.14.2-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:dc056948b7a8a40484b4bbc69923fa25cddd80cbc5f236a3a22ad2f836baeed2"},
+ {file = "aiohttp-3.14.2-cp310-cp310-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:135570f5b470c72c4988a58986f1f847ad336721f77fcc18fda8472bd3bbe3db"},
+ {file = "aiohttp-3.14.2-cp310-cp310-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:ee5bdd7933c653e43ef8d720704a4e228e4927121f2f5f598b7efe6a4c18633a"},
+ {file = "aiohttp-3.14.2-cp310-cp310-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:0baed2a2367a28456b612f4c3fd28bb86b00fadfb6454e706d8f65c21636bfd7"},
+ {file = "aiohttp-3.14.2-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:ecdd6b8cab5b7c0ff2988378c11ba7192f076a1864e64dc3ff72f7ba05c71796"},
+ {file = "aiohttp-3.14.2-cp310-cp310-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:a3177e51e26e0158fb3376aebac97e0546c6f175c510f331f585e514a00a302b"},
+ {file = "aiohttp-3.14.2-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:86861a430657bc71e0f89b195de5f8fa495c0b9b5864cf2f89bd5ec1dbb6b77a"},
+ {file = "aiohttp-3.14.2-cp310-cp310-musllinux_1_2_armv7l.whl", hash = "sha256:aac1b05fc5e2ef188b6d74cf151e977db75ab281238f30c3163bbd6f797788e3"},
+ {file = "aiohttp-3.14.2-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:89120e926c68c4e60c78514d76e16fc15689d8df35843b2a6bf6c4cc0d64b11a"},
+ {file = "aiohttp-3.14.2-cp310-cp310-musllinux_1_2_riscv64.whl", hash = "sha256:82d14d66d6147441b6571833405c828980efc17bda98075a248104ffdd330c30"},
+ {file = "aiohttp-3.14.2-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:6cde463b9dd9ce4343785c5a39127b40fce059ae6fbd320f5a045a38c3d25cd0"},
+ {file = "aiohttp-3.14.2-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:2280d165ab38355144d9984cdce77ce506cee019a07390bab7fd13682248ce91"},
+ {file = "aiohttp-3.14.2-cp310-cp310-win32.whl", hash = "sha256:5e94a8c4445bfdaa30773c81f2be7f129673e0f528945e542b8bd024b2979134"},
+ {file = "aiohttp-3.14.2-cp310-cp310-win_amd64.whl", hash = "sha256:65cd3bb118f42fceceb9e8a615c735a01453d019c673f35c57b420601cc1a83a"},
+ {file = "aiohttp-3.14.2-cp310-cp310-win_arm64.whl", hash = "sha256:2a382aa6bb85347515ead043257445baeec0885d42bfedb962093b134c3b4816"},
+ {file = "aiohttp-3.14.2-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:56432ee8f7abe47c97717cfbf5c32430463ea8a7138e12a87b7891fa6084c8ff"},
+ {file = "aiohttp-3.14.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:6c244f7a65cbec04c830a301aae443c529d4dbca5fddfd4b19e5a179d896adfd"},
+ {file = "aiohttp-3.14.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:1c05afdd28ecacce5a1f63275a2e3dce09efddd3a63d143ee9799fda83989c8d"},
+ {file = "aiohttp-3.14.2-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:a57f39d6ec155932853b6b0f130cbbafab3208240fa807f29a2c96ea52b77ae1"},
+ {file = "aiohttp-3.14.2-cp311-cp311-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:1fc31339824ec922cb7424d624b5b6c11d8942d077b2585e5bd602ca1a1e27ed"},
+ {file = "aiohttp-3.14.2-cp311-cp311-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:d93854e215dcc7c88e4f530827193c1a594e2662931d8dbe7cca3abf52a7082d"},
+ {file = "aiohttp-3.14.2-cp311-cp311-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:87c9b03be0c18c3b3587be979149830381e37ac4a6ca8557dbe72e44fcad66c3"},
+ {file = "aiohttp-3.14.2-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:bc1a0793dce8fa9bb6906411e57fb18a2f1c31357b04172541b92b30337362a7"},
+ {file = "aiohttp-3.14.2-cp311-cp311-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:2f1b9540d2d0f2f95590528a1effd0ba5370f6ec189ac925e70b5eecae02dc77"},
+ {file = "aiohttp-3.14.2-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:c0a968b04fecf7c94e502015860ad1e2e112c6b761e97b6fdf65fbb374e22b73"},
+ {file = "aiohttp-3.14.2-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:2d2eedae227cd5cbd0bccc5e759f71e1af2cd77b7f74ce413bb9a2b87f94a272"},
+ {file = "aiohttp-3.14.2-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:9d3f4c68b2c2cd282b65e558cebf4b27c8b440ab511f2b938a643d3598df2ddb"},
+ {file = "aiohttp-3.14.2-cp311-cp311-musllinux_1_2_riscv64.whl", hash = "sha256:d32a70b8bf8836fd80d4169d9e34eb032cd2a7cbccb0b9cf00eac1f40732467c"},
+ {file = "aiohttp-3.14.2-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:386ce4e709b4cc40f9ef9a132ad8e672d2d164a65451305672df656e7794c68e"},
+ {file = "aiohttp-3.14.2-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:bc0ed30b942c3bd755583d74bb00b90248c067d20b1f8301e4489a53a33aa65f"},
+ {file = "aiohttp-3.14.2-cp311-cp311-win32.whl", hash = "sha256:b5ed2c7dacebf4950d6b4a1b22548e4d709bb15e0287e064a7cdb32ada65893a"},
+ {file = "aiohttp-3.14.2-cp311-cp311-win_amd64.whl", hash = "sha256:bf7951959a8e89f2d4a1e719e60d3ea4e8fc26f011ee3aed09598ad786b112f7"},
+ {file = "aiohttp-3.14.2-cp311-cp311-win_arm64.whl", hash = "sha256:c167127a3b6089ef78ac2e33582c38040d51688ee28474b5053acf55f192187b"},
+ {file = "aiohttp-3.14.2-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:30e41662123806e4590a0440585122ac33c89a2465a8be81cc1b50656ca0e432"},
+ {file = "aiohttp-3.14.2-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:dbc45e2773c66d14fbd337754e9bf23932beef539bd539716a721f5b5f372034"},
+ {file = "aiohttp-3.14.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:476cf7fac10619ad6d08e1df0225d07b5a8d57c04963a171ad845d5a349d47ef"},
+ {file = "aiohttp-3.14.2-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:40bedff39ea83185f3f98a41155dd9da28b365c432e5bd90e7be140bcef0b7f3"},
+ {file = "aiohttp-3.14.2-cp312-cp312-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:a26f14006883fc7662e21041b4311eac1acbc977a5c43aacb27ff17f8a4c28b2"},
+ {file = "aiohttp-3.14.2-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:673217cbc9370ebf8cd048b0889d7cbe922b7bb48f4e4c02d31cfefa140bd946"},
+ {file = "aiohttp-3.14.2-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:b39dbdbe30a44958d63f3f8baa2af68f24ec8a631dcd18a33dd76dfa2a0eb917"},
+ {file = "aiohttp-3.14.2-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:d15f618255fcbe5f54689403aa4c2a90b6f2e6ebc96b295b1cb0e868c1c12384"},
+ {file = "aiohttp-3.14.2-cp312-cp312-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:7ae767b7dffd316cc2d0abf3e1f90132b4c1a2819a32d8bcb1ba749800ea6273"},
+ {file = "aiohttp-3.14.2-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:3ec4b6501a076b2f73844256da17d6b7acb15bb74ee0e908a67feb9412371166"},
+ {file = "aiohttp-3.14.2-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:7e328d02fb46b9a8dbfa070d98967e8b7eaa1d9ee10ae03fb664bdf30d58ccf0"},
+ {file = "aiohttp-3.14.2-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:c0c7f2e5fe10910d5ab76438f269cc41bb7e499fd48ded978e926360ab1790c8"},
+ {file = "aiohttp-3.14.2-cp312-cp312-musllinux_1_2_riscv64.whl", hash = "sha256:66de80888db2176655f8df0b705b817f5ae3834e6566cc2caa89360871d90195"},
+ {file = "aiohttp-3.14.2-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:f2f9950b2dd0fc896ab520ea2366b7df6484d3d164a65d5e9f28f7b0e5742d8a"},
+ {file = "aiohttp-3.14.2-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:cc4435b16dc246c5dfa7f2f8ee71b10a30765018a090ee36e99f356b1e9b75cc"},
+ {file = "aiohttp-3.14.2-cp312-cp312-win32.whl", hash = "sha256:4ca802547f1128008addfc21b24959f5cbf30a8952d365e7daa078a0d884b242"},
+ {file = "aiohttp-3.14.2-cp312-cp312-win_amd64.whl", hash = "sha256:e5efff8bfd27c44ce1bfdf92ce838362d9316ed8b2ed2f89f581dbe0bbe05acf"},
+ {file = "aiohttp-3.14.2-cp312-cp312-win_arm64.whl", hash = "sha256:0eb1c9fd51f231ac8dc9d5824d5c2efc45337d429db0123fa9d4c20f570fdfc3"},
+ {file = "aiohttp-3.14.2-cp313-cp313-android_21_arm64_v8a.whl", hash = "sha256:17eecd6ee9bfc8e31b6003137d74f349f0ac3797111a2df87e23acb4a7a912ea"},
+ {file = "aiohttp-3.14.2-cp313-cp313-android_21_x86_64.whl", hash = "sha256:ce8dfb58f012f76258f29951d38935ac928b32ae24a480f30761f2ed5036fa78"},
+ {file = "aiohttp-3.14.2-cp313-cp313-ios_13_0_arm64_iphoneos.whl", hash = "sha256:4181d72e0e6d1735c1fae56381193c6ae211d584d06413980c00775b9b2a176a"},
+ {file = "aiohttp-3.14.2-cp313-cp313-ios_13_0_arm64_iphonesimulator.whl", hash = "sha256:0e56babe35076f69ec9327833b71439eeccd10f51fe56c1a533da8f24923f014"},
+ {file = "aiohttp-3.14.2-cp313-cp313-ios_13_0_x86_64_iphonesimulator.whl", hash = "sha256:6b63709e259e3b3d7922b235606564e91ed4c224e777cc0ca4cae04f5f559206"},
+ {file = "aiohttp-3.14.2-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:f7c10c4d0b33888a68c192d883d1390d4596c116a59bf689e6d352c6739b7940"},
+ {file = "aiohttp-3.14.2-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:8f7b19e27b78a3a927b1932af93af7645806153e8f541cee8fe856426142503f"},
+ {file = "aiohttp-3.14.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:18fcc3a5cc7dde1d8f7903e309055294c28894c9434588645817e374f3b83d03"},
+ {file = "aiohttp-3.14.2-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:09d1b0deec698d1198eb0b8f910dd9432d856985abbfea3f06be8b296a6619b4"},
+ {file = "aiohttp-3.14.2-cp313-cp313-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:cabaaecb4c6888bd9abafac151051377534dad4c3859a386b6325f39d3732f99"},
+ {file = "aiohttp-3.14.2-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:114299c08cce8ad4ebb21fafe766378864109e88ad8cf63cf6acb384ff844a57"},
+ {file = "aiohttp-3.14.2-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:6bea8451e26cd67645d9b2ee18232e438ddfc36cea35feecb4537f2359fc7030"},
+ {file = "aiohttp-3.14.2-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:46b8887aa303075c1e5b24123f314a1a7bbfa03d0213dff8bb70503b2148c853"},
+ {file = "aiohttp-3.14.2-cp313-cp313-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:de3b04a3f7b40ad7f1bcd3540dd447cf9bd93d57a49969bca522cbcf01290f08"},
+ {file = "aiohttp-3.14.2-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:42372e1f1a8dca0dcd5daf922849004ec1120042d0e24f14c926f97d2275ca79"},
+ {file = "aiohttp-3.14.2-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:7871c94f3400358530ac4906dd7a526c5a24099cd5c48f53ffc4b1cb5037d7d7"},
+ {file = "aiohttp-3.14.2-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:f8f371794319a8185e61e15ba5e1be8407b986ebce1ade11856c02d24e090577"},
+ {file = "aiohttp-3.14.2-cp313-cp313-musllinux_1_2_riscv64.whl", hash = "sha256:af63ac06bad85191e6a0c4a733cb3c55adb99f8105bc7ce9913391561159a49a"},
+ {file = "aiohttp-3.14.2-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:8c2cdb684c153f377157e856257ee8535c75d8478343e4bb1e83ca73bdfa3d31"},
+ {file = "aiohttp-3.14.2-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:ceff4f84c1d928654faa6bcb0437ed095b279baae2a35fcfe5a3cbe0d8b9725d"},
+ {file = "aiohttp-3.14.2-cp313-cp313-win32.whl", hash = "sha256:15292b08ce7dd45e268fce542228894b4735102e8ee77163bd665b35fc2b5598"},
+ {file = "aiohttp-3.14.2-cp313-cp313-win_amd64.whl", hash = "sha256:fc2d8e7373ceba7e1c7e9dc00adac854c2701a6d443fd21d4af2e49342d727bd"},
+ {file = "aiohttp-3.14.2-cp313-cp313-win_arm64.whl", hash = "sha256:70570f50bda5037b416db8fcba595cf808ecf0fdce12d64e850b5ae1db7f64d4"},
+ {file = "aiohttp-3.14.2-cp314-cp314-android_24_arm64_v8a.whl", hash = "sha256:7719cef2a9dc5e10cd5f476ec1744b25c5ac4da733a9a687d91c42de7d4afe30"},
+ {file = "aiohttp-3.14.2-cp314-cp314-android_24_x86_64.whl", hash = "sha256:3523ec0cc524a413699f25ec8340f3da368484bc9d5f2a1bf87f233ac20599bf"},
+ {file = "aiohttp-3.14.2-cp314-cp314-ios_13_0_arm64_iphoneos.whl", hash = "sha256:c8ab295ee58332ef8fbd62727df90540836dfcf7a61f545d0f2771223b80bf25"},
+ {file = "aiohttp-3.14.2-cp314-cp314-ios_13_0_arm64_iphonesimulator.whl", hash = "sha256:71501bc03ede681401269c569e6f9306c761c1c7d4296675e8e78dd07147070f"},
+ {file = "aiohttp-3.14.2-cp314-cp314-ios_13_0_x86_64_iphonesimulator.whl", hash = "sha256:052478c7d01035d805302db50c2ef626b1c1ba0fe2f6d4a22ae6eaeb43bf2316"},
+ {file = "aiohttp-3.14.2-cp314-cp314-macosx_10_15_universal2.whl", hash = "sha256:b0d49be9d9a210b2c993bf32b1eda03f949f7bcda68fc4f718ae8085ae3fb4b8"},
+ {file = "aiohttp-3.14.2-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:5fe25c4c44ea5b56fd4512e2065e09384987fc8cc98e41bc8749efe12f653abb"},
+ {file = "aiohttp-3.14.2-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:7e254b0d636957174a03ca210289e867a62bb9502081e1b44a8c2bb1f6266ecd"},
+ {file = "aiohttp-3.14.2-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:a6b0ce033d49dd3c6a2566b387e322a9f9029110d67902f0d64571c0fd4b73d8"},
+ {file = "aiohttp-3.14.2-cp314-cp314-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:41b5b66b1ac2c48b61e420691eb9741d17d9068f2bc23b5ee3e750faa564bc8f"},
+ {file = "aiohttp-3.14.2-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:30a5ed81f752f182961237414a3cd0af209c0f74f06d66f66f9fcb8964f4978d"},
+ {file = "aiohttp-3.14.2-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:1b9251f43d78ff675c0ddfcd53ba61abecc1f74eedc6287bb6657f6c6a033fe7"},
+ {file = "aiohttp-3.14.2-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:cf7930e83a12801b2e253d41cc8bf5553f61c0cfabef182a72ae13472cc81803"},
+ {file = "aiohttp-3.14.2-cp314-cp314-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:abb33120daba5e5643a757790ece44d638a5a11eb0598312e6e7ec2f1bd1a5a3"},
+ {file = "aiohttp-3.14.2-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:983a68048a48f35ed08aadfcc1ba55de9a121aa91be48a764965c9ec532b94b5"},
+ {file = "aiohttp-3.14.2-cp314-cp314-musllinux_1_2_armv7l.whl", hash = "sha256:fef094bfc2f4e991a998af066fc6e3956a409ef799f5cbad2365175357181f2e"},
+ {file = "aiohttp-3.14.2-cp314-cp314-musllinux_1_2_ppc64le.whl", hash = "sha256:2f7ca81d936d820ae479971a6b6214b1b867420b5b58e54a1e7157716a943754"},
+ {file = "aiohttp-3.14.2-cp314-cp314-musllinux_1_2_riscv64.whl", hash = "sha256:da4f142fa078fedbdb3f88d0542ad9315656224e167502ae274cbba818b90c90"},
+ {file = "aiohttp-3.14.2-cp314-cp314-musllinux_1_2_s390x.whl", hash = "sha256:3d4238e50a378f5ac69a1e0162715c676bd082dede2e5c4f67ca7fd0014cb09d"},
+ {file = "aiohttp-3.14.2-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:03330676d8caa28bb33fa7104b0d542d9aac93350abcd91bf68e64abd531c320"},
+ {file = "aiohttp-3.14.2-cp314-cp314-win32.whl", hash = "sha256:43387429e4f2ec4047aaf9f935db003d4aa1268ea9021164877fd6b012b6396a"},
+ {file = "aiohttp-3.14.2-cp314-cp314-win_amd64.whl", hash = "sha256:e3a6302f47518dbf2ffd3cd518f02a1fbf53f85ffeed41a224fa4a6f6a62673b"},
+ {file = "aiohttp-3.14.2-cp314-cp314-win_arm64.whl", hash = "sha256:8d1f3802887f0e0dc07387a081dca3ad0b5758e32bdf5fb619b12ac22b8e9b56"},
+ {file = "aiohttp-3.14.2-cp314-cp314t-macosx_10_15_universal2.whl", hash = "sha256:9094262ae4f2902c7291c14ba915960db5567276690ef9195cdefe8b7cbb3acb"},
+ {file = "aiohttp-3.14.2-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:165b0dcc65960ffc9c99aa4ba1c3c76dbc7a34845c3c23a0bd3fbf33b3d12569"},
+ {file = "aiohttp-3.14.2-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:f518d75c03cd3f7f125eca1baadb56f8b94db94602278d2d0d19af6e177650a7"},
+ {file = "aiohttp-3.14.2-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:9b937d7864ca68f1e8a1c3a4eb2bac1de86a992f86d36492da10a135a482fab6"},
+ {file = "aiohttp-3.14.2-cp314-cp314t-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:b155df7f572c73c6c4108b67be302c8639b96ae56fb02787eeae8cad0a1baf26"},
+ {file = "aiohttp-3.14.2-cp314-cp314t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:0bfea68a48c8071d49aabdf5cd9a6939dcb246db65730e8dc76295fe02f7c73c"},
+ {file = "aiohttp-3.14.2-cp314-cp314t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:8241ee6c7fff3ebb1e6b237bccc1d90b46d07c06cf978e9f2ecad43e29dac67a"},
+ {file = "aiohttp-3.14.2-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:ec64d1c4605d689ed537ba1e572138e2d4ff603a0cb2bbbfe61d4552c73d19e1"},
+ {file = "aiohttp-3.14.2-cp314-cp314t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:0fb26fcc5ebf765095fe0c6ab7501574d3108c57fca9a0d462be15a65c9deb8d"},
+ {file = "aiohttp-3.14.2-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:ef710fbb770aefa4def5484eeddb606e70ab3492aa37390def61b35652f6820a"},
+ {file = "aiohttp-3.14.2-cp314-cp314t-musllinux_1_2_armv7l.whl", hash = "sha256:d813f54560b9e5bce170fff7b0adde54d88253928e4add447c36792f27f92125"},
+ {file = "aiohttp-3.14.2-cp314-cp314t-musllinux_1_2_ppc64le.whl", hash = "sha256:1aa4f3b44563a88da4407cef8a13438e9e386967720a826a10a633493f69208f"},
+ {file = "aiohttp-3.14.2-cp314-cp314t-musllinux_1_2_riscv64.whl", hash = "sha256:4610638d3135afaefadf179bffd1bbf3434d3dc7a5d0a4c4219b99fa976e944d"},
+ {file = "aiohttp-3.14.2-cp314-cp314t-musllinux_1_2_s390x.whl", hash = "sha256:6e30743bd3ab6ad98e9abbad6ccb39c52bcf6f11f9e3d4b6df97afffe8df53f3"},
+ {file = "aiohttp-3.14.2-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:68a6f7cd8d2c70869a2a5fe97a16e86a4e13a6ed6f0d9e6029aef7573e344cd6"},
+ {file = "aiohttp-3.14.2-cp314-cp314t-win32.whl", hash = "sha256:205181d896f73436ac60cf6644e545544c759ab1c3ec8c34cc1e044689611361"},
+ {file = "aiohttp-3.14.2-cp314-cp314t-win_amd64.whl", hash = "sha256:312d414c294a1e26aa12888e8fd37cd2e1131e9c48ddcf2a4c6b590290d52a49"},
+ {file = "aiohttp-3.14.2-cp314-cp314t-win_arm64.whl", hash = "sha256:63b840c03979732ec92e570f0bd6beb6311e2b5d19cacbfcd8cc7f6dd2693900"},
+ {file = "aiohttp-3.14.2.tar.gz", hash = "sha256:f96821eb2ae2f12b0dfa799eafbf221f5621a9220b457b4744a269a63a5f3a6c"},
]
markers = {main = "extra == \"aiohttp\""}
@@ -234,14 +234,14 @@ markers = {main = "extra == \"aiohttp\""}
[[package]]
name = "certifi"
-version = "2026.6.17"
+version = "2026.7.22"
description = "Python package for providing Mozilla's CA Bundle."
optional = false
python-versions = ">=3.7"
groups = ["main"]
files = [
- {file = "certifi-2026.6.17-py3-none-any.whl", hash = "sha256:2227dcbaafe0d2f59279d1762ddddc37783ed4354594f194ffc31d20f41fc3db"},
- {file = "certifi-2026.6.17.tar.gz", hash = "sha256:024c88eeec92ca068db80f02b8b07c9cef7b9fe261d1d535abfd5abd6f6af432"},
+ {file = "certifi-2026.7.22-py3-none-any.whl", hash = "sha256:62f22742b58a1a33014a2b6b706588a8d7e2a88ae7bd1a6ebe8c992928483775"},
+ {file = "certifi-2026.7.22.tar.gz", hash = "sha256:741e2c3b351ddf169a738da9f2c048608ff7f2c5cc02f1ebc6b118bb090d5d55"},
]
[[package]]
@@ -493,15 +493,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]
@@ -1292,14 +1292,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]]
@@ -1331,25 +1331,25 @@ typing-extensions = ">=4.12.0"
[[package]]
name = "wasmtime"
-version = "46.0.1"
+version = "47.0.1"
description = "A WebAssembly runtime powered by Wasmtime"
optional = true
python-versions = ">=3.9"
groups = ["main"]
markers = "extra == \"datastream\" or extra == \"rulesengine\""
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 = "wasmtime-47.0.1-py3-none-android_26_arm64_v8a.whl", hash = "sha256:844d85628e50929143f03af9a34b3cf5c9148747debced80c14776d27e18173c"},
+ {file = "wasmtime-47.0.1-py3-none-android_26_x86_64.whl", hash = "sha256:749c5c1271ca208f1026001ddc65984fa98113e583521d47ae7e11bc96bf337d"},
+ {file = "wasmtime-47.0.1-py3-none-any.whl", hash = "sha256:5146a700c93909e797e0f6c05707c992fc75f4f5f5c5ecf826a9aff689ec6af1"},
+ {file = "wasmtime-47.0.1-py3-none-macosx_10_13_x86_64.whl", hash = "sha256:8b4ec103273ec3dce86efe6793d41f83df713983d9cbc5c9662adbb56cf00ffe"},
+ {file = "wasmtime-47.0.1-py3-none-macosx_11_0_arm64.whl", hash = "sha256:58da69f71750e844e32614c1805246ffca4c8b032d46a8145faa26c228c6c5ac"},
+ {file = "wasmtime-47.0.1-py3-none-manylinux1_x86_64.whl", hash = "sha256:9724600b036c6e95c4fe952e29fad83b4f02bdc11d23f25c4ee3ffff2c1d7257"},
+ {file = "wasmtime-47.0.1-py3-none-manylinux2014_aarch64.whl", hash = "sha256:4f72162ceed1d50de8226fac6b12e1ecce54883a0c3f7355bb141eae40df488a"},
+ {file = "wasmtime-47.0.1-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:0aeb53d4c8e682cccebbaac48882939b34e71a1243b622129de3e6834728044d"},
+ {file = "wasmtime-47.0.1-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:f900fa571a9a5668b6210de9ecca1c5b66db14d85b7c36514c3d307d4f4cdc90"},
+ {file = "wasmtime-47.0.1-py3-none-win_amd64.whl", hash = "sha256:4e46a4a29092a2ac1001159d5673e2a23996f4474261c791401867b1630429f4"},
+ {file = "wasmtime-47.0.1-py3-none-win_arm64.whl", hash = "sha256:812058e7b40b73defa1d5118c25faa674920b7833c0a22cf79f0ff4eadee0c32"},
+ {file = "wasmtime-47.0.1.tar.gz", hash = "sha256:fab6ee0e87354f14ef228fa71b40841dd3c2c713f6efce636af234b4e3e6edcc"},
]
[package.extras]
@@ -1357,236 +1357,236 @@ testing = ["coverage", "pycparser", "pytest", "pytest-mypy"]
[[package]]
name = "websockets"
-version = "16.1"
+version = "16.1.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"},
+ {file = "websockets-16.1.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:49ae99bdfcae803a885c926bf14f886196e84925395bb3f568fef5c0f0979d7d"},
+ {file = "websockets-16.1.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:5bfd1ac19b1b9986a9c95a82d5e23a391ebb09e12c34d7be6094b86efcc35731"},
+ {file = "websockets-16.1.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:9246a0d063cfcbcc85f2359dd6876d681213f4790832272aa16641b4ed5d64d4"},
+ {file = "websockets-16.1.1-cp310-cp310-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:1214e673c404684b9bf7154f5cf43b45025b1a6160fac3a9e438e9c1a97e22cb"},
+ {file = "websockets-16.1.1-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:90001d893bc368e302ef168d82130b4e4fdd27b85fa094682df9b667c2d48838"},
+ {file = "websockets-16.1.1-cp310-cp310-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:130937b167a52af203c8d58e78d67705874e82759862e3b9671a452fec4abc87"},
+ {file = "websockets-16.1.1-cp310-cp310-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:9c9f23004a3d40e89c01a7955d186a6cc83418d93b749701944ce2de3e95a1f3"},
+ {file = "websockets-16.1.1-cp310-cp310-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:f55f0b01956a094c8587146d9558c91937e78789c333860ffaf35931a6e5dbc4"},
+ {file = "websockets-16.1.1-cp310-cp310-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:6aaface73b9c71974c6497366d8b9628357f6c9749e09c4ea3610176c63f2ae3"},
+ {file = "websockets-16.1.1-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:dc0fad4933f427acd5b1cec210f3ea6dce7089e1724e4b9ec6ef47c6c04d1b3b"},
+ {file = "websockets-16.1.1-cp310-cp310-musllinux_1_2_armv7l.whl", hash = "sha256:f2769a0344a09e9ccf5b3cce538bc75a51b53eff3275d3896310c8552049195d"},
+ {file = "websockets-16.1.1-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:f70541f3104339f59f830522d94ebadb1bf47426287381623443d8bb1cdbf33d"},
+ {file = "websockets-16.1.1-cp310-cp310-musllinux_1_2_riscv64.whl", hash = "sha256:dc385593a42e31cd6fb60c19f0ecb015b386603818fc2c6c274fb42bd2bb4165"},
+ {file = "websockets-16.1.1-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:387e8e4aa5df2f90b198fa3cad3478822a89cf905b6a6d6c97dc3664689640cc"},
+ {file = "websockets-16.1.1-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:fd46fff7eb62c24804d234f0051c7a8ea81285ad63e0337d3dcf33ca82aee58a"},
+ {file = "websockets-16.1.1-cp310-cp310-win32.whl", hash = "sha256:7883388947767080f094950b342b30d35a2a06b849cd967c422fa0db72b40ea9"},
+ {file = "websockets-16.1.1-cp310-cp310-win_amd64.whl", hash = "sha256:d57685547e0060cc6fd90ee6a28405d6bd395e525545f13c8d7cd99c78afd79f"},
+ {file = "websockets-16.1.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:d0fcf657e9f13ff4b177960ab2200237b12994232dfb6df16f1cfe1d4339f93c"},
+ {file = "websockets-16.1.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:b852788aa51764e2d8e4cf5493d559326bcae5e38d16ba25ffa322b034df272a"},
+ {file = "websockets-16.1.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:1427fb4cf0d72f66333e2cacc3ff5f575bf2d7008166ce991a4a470b21d51a22"},
+ {file = "websockets-16.1.1-cp311-cp311-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:da4ca1a9d72f9030b3146b8d7022719a9f3d478f61efe6f7dd51d243f61c51b2"},
+ {file = "websockets-16.1.1-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:86d7f0f8bdb25d2c632b72527325e4776430fd5bc61b9118de4e2b8ddb5f5b01"},
+ {file = "websockets-16.1.1-cp311-cp311-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:7dfcad78ea1492ee3a9ec765cb7f51bbc17d477107aaf6b22abf7b2558d1c5a0"},
+ {file = "websockets-16.1.1-cp311-cp311-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:fb9a0a6dc3d1b3986cb88091b6899f0396651e0f74e2c9766ab8d6ffc3842e29"},
+ {file = "websockets-16.1.1-cp311-cp311-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:29dfa8114c4a620c69591c5973860f768eac29d3fd6904f37f34266cb219c512"},
+ {file = "websockets-16.1.1-cp311-cp311-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:6ff9417c0ada4d0f7d212f928303e5579bdf3ace4c802fa4afabb30995da58c3"},
+ {file = "websockets-16.1.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:8fe0b50da2d84535fb4f7b4bfa951280f97ce3d558a0443b541166d609e67b57"},
+ {file = "websockets-16.1.1-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:34420aaa64440ebd51ac72ca8a45ef4626429438c9b02e633ae412ed43f925d3"},
+ {file = "websockets-16.1.1-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:a6a61aff018180c9c50b7b0da33bfd29d378af3497429c95006c589a23a11648"},
+ {file = "websockets-16.1.1-cp311-cp311-musllinux_1_2_riscv64.whl", hash = "sha256:04fd29a0e2fe9414a95b00e92c67ae51bf900c50c0f8a4b2dafdad621f49ea1d"},
+ {file = "websockets-16.1.1-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:5c31aa7e39ee3e8a358573257f1c0bb5c52430d1b637030dd9c8cc2c282926be"},
+ {file = "websockets-16.1.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:d14bfb217eb4701e850f1525c9d29d79c44794cdf1c299ead25f39f8c78dea81"},
+ {file = "websockets-16.1.1-cp311-cp311-win32.whl", hash = "sha256:2e28e602bb13da44fbe518c1781a88e3b9d4c3d48d02c9bad83e546164336f57"},
+ {file = "websockets-16.1.1-cp311-cp311-win_amd64.whl", hash = "sha256:7421fad442de870a8cbf2287d1cad7e706ece0dbfeba5e911df132cbdc1cb56a"},
+ {file = "websockets-16.1.1-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:cc97814dfb786a83b6e2dc2e79351e1b83e6d715647d6887fcabd83026417a00"},
+ {file = "websockets-16.1.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:e047dc87ef7ca50f4d309bf775ad4a71711c58556d75d7bd0604b2317f43e94b"},
+ {file = "websockets-16.1.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:01fbdcbac298efe19360b94bc0039c8f746f0220ba570f327577bfee81059175"},
+ {file = "websockets-16.1.1-cp312-cp312-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:0f62863e8a00a6d33c3d6566ec0b89f23787b747ffe0c3bc71ec0e76b82c94b1"},
+ {file = "websockets-16.1.1-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:8087e82f842609734c9b5a1330464f8e94e346ba0e18c832c08bafa4b0d63c15"},
+ {file = "websockets-16.1.1-cp312-cp312-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:2bb5d041a8307d2e18782e7ce777f6fdb1e8c2f5d09291484b18c294b789d9aa"},
+ {file = "websockets-16.1.1-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:1db4de4a0e95673f7545d393c49eeb0c2f18ac1ef93073218c79d5cdb2ee75ab"},
+ {file = "websockets-16.1.1-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:f17dbe07eb3ea7f99e4df9b7e0efefe80fbf30d37a8cc4d561a0aed310bc8847"},
+ {file = "websockets-16.1.1-cp312-cp312-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:4b57693728576d84ede0a77987ab16881b783d2cd9f1dc180a8fbbc3f79c4428"},
+ {file = "websockets-16.1.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:2a636ff1e7a5c4edf71ef0e79adae7f25dba93b4fcbe3dc958733477ffeb0eaf"},
+ {file = "websockets-16.1.1-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:d6bec75c290fe484a8ba4cacdf838501e17c06ecfbbf31eede81a9e431bd7751"},
+ {file = "websockets-16.1.1-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:54509b8e92fee4453e152b7558ddef37ce9705a044922f2095a6105e3f80c96f"},
+ {file = "websockets-16.1.1-cp312-cp312-musllinux_1_2_riscv64.whl", hash = "sha256:f0aa4aad3b1b69ad3fd85a0fd0952ec64331c762bd77ec51cc814170873890b2"},
+ {file = "websockets-16.1.1-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:42290eb6db4ccaca7012656738214f8514082fb6fa40cdeb61bb9a471b52e383"},
+ {file = "websockets-16.1.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:53260c8930da5771cec89439bff99c20c8cb03ddb9588b980697355a83cd4bd3"},
+ {file = "websockets-16.1.1-cp312-cp312-win32.whl", hash = "sha256:1d27fa8462ad6a1cb36206a3d0640b2333340def181fae11ed7f9adeaa5c0747"},
+ {file = "websockets-16.1.1-cp312-cp312-win_amd64.whl", hash = "sha256:b436f6ec4fc3a6b4237c84d3f83170ed2b40bb584222f0ac47a0c8a5921980c7"},
+ {file = "websockets-16.1.1-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:ab59169ace05dcb49a1d4118f0bde139557adf45091bd85747e36bf5de984dd1"},
+ {file = "websockets-16.1.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:5e3b7d601f6f84156b08cc4a5e541c2b50ad7b36cfc302b657a12477c904a5df"},
+ {file = "websockets-16.1.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:cd2ca96a082a36964aca83e992f72abeb61b7306c1a6cba4c7d06a7b93750cac"},
+ {file = "websockets-16.1.1-cp313-cp313-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:f5d497865f05bb222cab7016c6034542e84e5f29f49c6fd3f4939cda7197b5b8"},
+ {file = "websockets-16.1.1-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:bae954c382e013d5ea5b190d2830526bfa45ad121c326da0049b8c769f185db6"},
+ {file = "websockets-16.1.1-cp313-cp313-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:e09f753a169951eb4f28c2c774f71069304f66e7277e0f5a2892423599cfa854"},
+ {file = "websockets-16.1.1-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:024193f8551a2b0eafbdd160911012c4e6c228c28430c84433253299a9e42d6a"},
+ {file = "websockets-16.1.1-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:aabe464bfd13bd25f4821faf111da6fefdc389f870265a53105580e45b0a2e49"},
+ {file = "websockets-16.1.1-cp313-cp313-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:a28fcbc9b6baf54a2e23f8655f308e4ccc6afdd7266f8fe7954f320dcda0f785"},
+ {file = "websockets-16.1.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:79eace538c6a97e96d0d03d4f9d314f9677f5ed85a8a984992ffd90b13cb8a56"},
+ {file = "websockets-16.1.1-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:496af849a472b531f758dbd4d61338f5000538cb1a7b3d20d9d32a264517f509"},
+ {file = "websockets-16.1.1-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:5283810d2646741a0d8da2aa733d6aefa0545809afccb2a5d105a26bc45125f1"},
+ {file = "websockets-16.1.1-cp313-cp313-musllinux_1_2_riscv64.whl", hash = "sha256:4e3b680b1e0a27457e727a0d572fd81dffa87b6dbf8b228ab57da64f7d85aead"},
+ {file = "websockets-16.1.1-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:69159730a823dde3ea8d08783e8d47ef135a6d7e8d44eb127e32b321c9db8e3e"},
+ {file = "websockets-16.1.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:ed5bb271084b46530ee2ddc0410537a9961152c5ccba2fc98c5276d992ccba87"},
+ {file = "websockets-16.1.1-cp313-cp313-win32.whl", hash = "sha256:cfb70b4eb56cac4da0a83588f3ad50d46beb0690391082f3d4e2d488c70b68ea"},
+ {file = "websockets-16.1.1-cp313-cp313-win_amd64.whl", hash = "sha256:d9531d9cbeac99af6f038fb1bc351403531f7d634a2c2e10e2f7c854c6ed5b68"},
+ {file = "websockets-16.1.1-cp314-cp314-macosx_10_15_universal2.whl", hash = "sha256:443aefe96b7fdb132e2a70806cca1f2af49bb3f28e47abcd7c2e9dcf4d8fa1b8"},
+ {file = "websockets-16.1.1-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:6456ff333092d509127d75a638cb411afae8ff17f092635015d1902efec8a293"},
+ {file = "websockets-16.1.1-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:fce6c48559c86d1ac3632ccb1bebc7d5442fbe79bd9bb0e40379ee54be2a4051"},
+ {file = "websockets-16.1.1-cp314-cp314-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:92b820d345f7a3fc7b8163949ee92df910f290c3fc517b3d5301c78065adafe1"},
+ {file = "websockets-16.1.1-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:2a606d9c24035242a3e256e9d5b77ed9cd6bccfcb7cf993e5ca3c0f6f68fb6a7"},
+ {file = "websockets-16.1.1-cp314-cp314-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:414e596c75f74e0994084694189d7dc9229fb278e33064d6784b73ffbba3ca31"},
+ {file = "websockets-16.1.1-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:536676848fc5961aca9d20389951f59169508f765637a172403dc5434d722fa0"},
+ {file = "websockets-16.1.1-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:97fd3a0e8b53efa41970ac1dff3d8cf0d2884cadeb4caaf95db7ad1526926ee3"},
+ {file = "websockets-16.1.1-cp314-cp314-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:7b1b19636af86a3c7995d4d028dbe376f39b4bf31541146f9c123582a6c94562"},
+ {file = "websockets-16.1.1-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:41c8e77f17294c0ac18008a7309b99b34ee72247ef10b6dff4c3f8b5ac29896b"},
+ {file = "websockets-16.1.1-cp314-cp314-musllinux_1_2_armv7l.whl", hash = "sha256:9f63bcef7f4b02b06b35fc01c93b96c43b5e88e1e8868676caacf493d5a31f3a"},
+ {file = "websockets-16.1.1-cp314-cp314-musllinux_1_2_ppc64le.whl", hash = "sha256:dab9eb87869da2d6ed3af3f3adf28414baae6ec9d4df355ffc18889132f3436c"},
+ {file = "websockets-16.1.1-cp314-cp314-musllinux_1_2_riscv64.whl", hash = "sha256:43e3a9fdd7cbf7ba6040c31fae0faf84ca1474fef777c4e37912f1540f854499"},
+ {file = "websockets-16.1.1-cp314-cp314-musllinux_1_2_s390x.whl", hash = "sha256:056ae37939ed7e9974f364f5864e76e49182622d8f9751ac1903c0d09b013985"},
+ {file = "websockets-16.1.1-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:a0eadbbf2c30f01efa58e1f110eb6fa293261f6b0b1aa38f7f48707107690af9"},
+ {file = "websockets-16.1.1-cp314-cp314-win32.whl", hash = "sha256:195c978b065fa40910582464f99d6b15c8b314c68e0546549a55ed83f4735328"},
+ {file = "websockets-16.1.1-cp314-cp314-win_amd64.whl", hash = "sha256:4e8d01cc3bcae7bbf8167f944aeafefed590fae5693552bba9794a9df68371cc"},
+ {file = "websockets-16.1.1-cp314-cp314t-macosx_10_15_universal2.whl", hash = "sha256:0ffd3031ea8bda8d61762e84220186105ba3b748b3c8da2ae4f7816fac03e573"},
+ {file = "websockets-16.1.1-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:84a2cef8deffbd9ab8ee0ea546a2a6a7030c28f44e6cdd4547dbfeb489eb8999"},
+ {file = "websockets-16.1.1-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:3df13f73af9b3b38ab1195eb299ecb67a4330c911c97ae04043ff74085728abe"},
+ {file = "websockets-16.1.1-cp314-cp314t-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:23253dd5bcae3f9aaee0a1d30967a8dbd52e5d3cff93a2e5b84df57b77d4750d"},
+ {file = "websockets-16.1.1-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:9c1c5705e314449e3308872fe084b8571ce078ee4fc55a98a769bdefe5917392"},
+ {file = "websockets-16.1.1-cp314-cp314t-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:69e52d175a0a7d1e13b4b67ad41c560b7d98e8c6f6126eb0bda496c784faf8c7"},
+ {file = "websockets-16.1.1-cp314-cp314t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:1f79c89b5eb034d1722938a891916582f8f7f503f58ca22518a63c3f2cd18499"},
+ {file = "websockets-16.1.1-cp314-cp314t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:39f2a024af5c345ffe8fcf1ee18c049c024c94df393bb09b044a6917c77bde43"},
+ {file = "websockets-16.1.1-cp314-cp314t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:952303a7318d4cbe1011400839bb2051c9f84fa0a35923267f5daba34b15d458"},
+ {file = "websockets-16.1.1-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:249116b4a76063d930a46391ad56e135c286e4562a18309029fc2c73f4ed4c62"},
+ {file = "websockets-16.1.1-cp314-cp314t-musllinux_1_2_armv7l.whl", hash = "sha256:61922544a0587a13fd3f53e4c0e5e606510c7b0d9d22c8444e5fae22a06b38cb"},
+ {file = "websockets-16.1.1-cp314-cp314t-musllinux_1_2_ppc64le.whl", hash = "sha256:46dcaa042cd1de6c59e7d9269fa63ff7572b6df40510600b678f0826b3c7af51"},
+ {file = "websockets-16.1.1-cp314-cp314t-musllinux_1_2_riscv64.whl", hash = "sha256:38565aca3e01ea8734e578fb2118dade0ecb0250533f29e22b8d1a7a196cf4d0"},
+ {file = "websockets-16.1.1-cp314-cp314t-musllinux_1_2_s390x.whl", hash = "sha256:42f599f4d48c7e1a3338fdaac3acd075be3b3cf02d4b274f3bf2767aedd3d217"},
+ {file = "websockets-16.1.1-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:dcc04fedf83effaeb9cce98abc9469bb1b42ef85f03e01c8c1f4438ef7555737"},
+ {file = "websockets-16.1.1-cp314-cp314t-win32.whl", hash = "sha256:8483c2096363120eea8b07c06ae7304d520f686665fffd4811fad423930a65d7"},
+ {file = "websockets-16.1.1-cp314-cp314t-win_amd64.whl", hash = "sha256:bcce07e23e5769375158f5efdcdafa8d5cd014b93c6683865b840ed65b96f231"},
+ {file = "websockets-16.1.1-pp311-pypy311_pp73-macosx_10_15_x86_64.whl", hash = "sha256:820fb8450edddae3812fd58cbc08e2bf22812cb248ecb5f06dbb82119a56e869"},
+ {file = "websockets-16.1.1-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:125f22dbefaf1554fea66fc83851490edb284ce4f501d37ffed2752f418332d9"},
+ {file = "websockets-16.1.1-pp311-pypy311_pp73-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:30bbe120437b5648a77d3519b7024ea09530e0b5b18d3698c5a0ae536fe0cc2e"},
+ {file = "websockets-16.1.1-pp311-pypy311_pp73-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:b6b9dadbef0cccd9f4c4ee96b08898afa73e26803bbe0f6aeb5bb12b0074206d"},
+ {file = "websockets-16.1.1-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:56cd5fc4f10a9ea8aa0804bddb7b42506cf9e136046f3b4c27de8fec9e2ecba5"},
+ {file = "websockets-16.1.1-py3-none-any.whl", hash = "sha256:6abbd3e82c731c8e531714466acd5d87b5e88ac3243465337ba71d68e23ae7e3"},
+ {file = "websockets-16.1.1.tar.gz", hash = "sha256:db234eda965dcce15df96bb9709f587cd87d4d52aaf0e80e2f34ec04c7670c57"},
]
[[package]]
name = "yarl"
-version = "1.24.2"
+version = "1.24.5"
description = "Yet another URL library"
optional = false
python-versions = ">=3.10"
groups = ["main", "dev"]
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\""}
diff --git a/pyproject.toml b/pyproject.toml
index 54af05a..6fe93cb 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -4,7 +4,7 @@ dynamic = ["version"]
[tool.poetry]
name = "schematichq"
-version = "1.3.0"
+version = "1.3.1"
description = ""
readme = "README.md"
authors = []
diff --git a/reference.md b/reference.md
index b52a43b..8cd1398 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.
+
+
+
+
+
+
+
@@ -7385,15 +8388,139 @@ client.checkout.preview_checkout_internal(
value="value",
)
],
- new_plan_id="new_plan_id",
- new_price_id="new_price_id",
- pay_in_advance=[
- UpdatePayInAdvanceRequestBody(
- price_id="price_id",
- quantity=1000000,
- )
- ],
- skip_trial=True,
+ new_plan_id="new_plan_id",
+ new_price_id="new_price_id",
+ pay_in_advance=[
+ UpdatePayInAdvanceRequestBody(
+ price_id="price_id",
+ quantity=1000000,
+ )
+ ],
+ skip_trial=True,
+)
+
+```
+
+
+
+
+
+#### ⚙️ Parameters
+
+
+-
+
+
+-
+
+**request:** `ChangeSubscriptionInternalRequestBody`
+
+
+
+
+
+-
+
+**request_options:** `typing.Optional[RequestOptions]` — Request-specific configuration.
+
+
+
+
+
+
+
+
+
+
+
+client.checkout.get_company_billing_details(...) -> GetCompanyBillingDetailsResponse
+
+-
+
+#### 🔌 Usage
+
+
+-
+
+
+-
+
+```python
+from schematic import Schematic
+from schematic.environment import SchematicEnvironment
+
+client = Schematic(
+ api_key="",
+ environment=SchematicEnvironment.DEFAULT,
+)
+
+client.checkout.get_company_billing_details(
+ company_id="company_id",
+)
+
+```
+
+
+
+
+
+#### ⚙️ Parameters
+
+
+-
+
+
+-
+
+**company_id:** `str` — company_id
+
+
+
+
+
+-
+
+**request_options:** `typing.Optional[RequestOptions]` — Request-specific configuration.
+
+
+
+
+
+
+
+
+
+
+
+client.checkout.update_company_billing_details(...) -> UpdateCompanyBillingDetailsResponse
+
+-
+
+#### 🔌 Usage
+
+
+-
+
+
+-
+
+```python
+from schematic import Schematic, CheckoutFieldValue
+from schematic.environment import SchematicEnvironment
+
+client = Schematic(
+ api_key="",
+ environment=SchematicEnvironment.DEFAULT,
+)
+
+client.checkout.update_company_billing_details(
+ company_id="company_id",
+ values=[
+ CheckoutFieldValue(
+ id="id",
+ value="value",
+ )
+ ],
)
```
@@ -7410,7 +8537,39 @@ client.checkout.preview_checkout_internal(
-
-**request:** `ChangeSubscriptionInternalRequestBody`
+**company_id:** `str` — company_id
+
+
+
+
+
+-
+
+**values:** `typing.List[CheckoutFieldValue]`
+
+
+
+
+
+-
+
+**address:** `typing.Optional[CustomerBillingAddress]`
+
+
+
+
+
+-
+
+**email:** `typing.Optional[str]`
+
+
+
+
+
+-
+
+**phone:** `typing.Optional[str]`
@@ -15984,6 +17143,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 +17419,14 @@ client.planbundle.create_custom_plan_bundle(
-
+**credit_grants:** `typing.Optional[typing.List[PlanBundleCreditGrantRequestBody]]`
+
+
+
+
+
+-
+
**plan:** `typing.Optional[CreateCustomPlanBundlePlanRequestBody]`
@@ -16405,6 +17639,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 +17747,8 @@ client = Schematic(
)
client.dataexports.create_data_export(
- metadata="metadata",
+ export_type="audit-log",
+ output_file_type="csv",
)
```
@@ -16452,7 +17773,7 @@ client.dataexports.create_data_export(
-
-**metadata:** `str`
+**output_file_type:** `DataExportOutputFileType`
@@ -16460,7 +17781,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..aa47bf7 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,
@@ -83,12 +96,17 @@
CheckoutSettingsResponseData,
CheckoutSubscription,
ClerkIntegrationConfig,
+ CompanyBillingAddressView,
+ CompanyBillingCheckoutSettings,
+ CompanyBillingDetailsResponseData,
+ CompanyBillingDetailsView,
CompanyBillingEntityResponseData,
CompanyBillingEntitySubscriptionResponseData,
CompanyCreditBalance,
CompanyCreditBalanceResponseData,
CompanyDetailResponseData,
CompanyEventPeriodMetricsResponseData,
+ CompanyFeatureUsageExportMetadata,
CompanyLedgerResponseData,
CompanyMatchingCriteria,
CompanyMembershipDetailResponseData,
@@ -160,13 +178,21 @@
CreditsAutoTopupCreditSummary,
CreditsAutoTopupHardFailure,
CreditsAutoTopupRetryFailure,
+ CreditsAutoTopupSuccess,
+ CreditsCreditPurchaseSuccess,
+ CreditsWebhookCompanySummary,
+ CreditsWebhookCreditSummary,
CurrencyPriceRequestBody,
CustomPlanActivationStrategy,
CustomPlanBillingResponseData,
CustomPlanBillingStatus,
CustomPlanConfig,
CustomPlanViewConfigResponseData,
+ CustomerBillingAddress,
DataEventPayload,
+ DataExportMetadata,
+ DataExportMetadata_AuditLog,
+ DataExportMetadata_CompanyFeatureUsage,
DataExportOutputFileType,
DataExportResponseData,
DataExportStatus,
@@ -268,6 +294,7 @@
PlanBundleCreditGrantRequestBody,
PlanBundleEntitlementRequestBody,
PlanBundleResponseData,
+ PlanCatalogMembershipResponseData,
PlanChangeAction,
PlanChangeBasePlanAction,
PlanChangeResponseData,
@@ -305,6 +332,7 @@
PreviewObject,
PreviewObjectResponseData,
PreviewSubscriptionChangeResponseData,
+ PreviewSubscriptionDiscountResponseData,
PreviewSubscriptionFinanceResponseData,
PreviewSubscriptionUpcomingInvoiceLineItems,
ProrationBehavior,
@@ -343,6 +371,7 @@
RulesengineTraitDefinition,
RulesengineTraitDefinitionComparableType,
RulesengineUser,
+ RulesengineWarningTier,
ScheduledCheckoutResponseData,
ScheduledCheckoutStatus,
ScheduledDowngradeConfigBehavior,
@@ -385,6 +414,7 @@
UsageTimeSeriesPointResponseData,
UserDetailResponseData,
UserResponseData,
+ WarningTier,
WarningTierRequestBody,
WarningTierResponseData,
WebFeatureUsageWebhookOutput,
@@ -404,6 +434,7 @@
accesstokens,
accounts,
billing,
+ catalogs,
checkout,
companies,
components,
@@ -488,13 +519,28 @@
UpsertInvoiceResponse,
UpsertPaymentMethodResponse,
)
+ from .catalogs import (
+ CreateCatalogResponse,
+ DeleteCatalogResponse,
+ GetCatalogResponse,
+ GetConfigurationResponse,
+ GetCreditBundlesInCatalogResponse,
+ GetDerivedFeaturesResponse,
+ GetPlansInCatalogResponse,
+ ListCatalogsParams,
+ ListCatalogsResponse,
+ UpdateCatalogResponse,
+ UpdateConfigurationResponse,
+ )
from .checkout import (
CancelSubscriptionResponse,
CheckoutInternalResponse,
GetCheckoutDataResponse,
+ GetCompanyBillingDetailsResponse,
ManagePlanResponse,
PreviewCheckoutInternalResponse,
PreviewManagePlanResponse,
+ UpdateCompanyBillingDetailsResponse,
UpdateCustomerSubscriptionTrialEndResponse,
)
from .client import AsyncSchematic, AsyncSchematicConfig, LocalCache, Schematic, SchematicConfig
@@ -558,6 +604,7 @@
UpsertUserTraitResponse,
)
from .components import (
+ BindCatalogResponse,
CountComponentsParams,
CountComponentsResponse,
CreateComponentResponse,
@@ -616,7 +663,12 @@
UpdateCreditBundleDetailsResponse,
ZeroOutGrantResponse,
)
- from .dataexports import CreateDataExportResponse
+ from .dataexports import (
+ CreateDataExportResponse,
+ GetDataExportResponse,
+ ListDataExportsParams,
+ ListDataExportsResponse,
+ )
from .entitlements import (
CountCompanyOverridesParams,
CountCompanyOverridesResponse,
@@ -796,6 +848,7 @@
"AssumeStripeInstalledResponse": ".integrationsapi",
"AsyncSchematic": ".client",
"AsyncSchematicConfig": ".client",
+ "AuditLogExportMetadata": ".types",
"AuditLogListResponseData": ".types",
"AuditLogResponseData": ".types",
"BadRequestError": ".errors",
@@ -845,9 +898,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",
@@ -867,12 +933,17 @@
"CheckoutSettingsResponseData": ".types",
"CheckoutSubscription": ".types",
"ClerkIntegrationConfig": ".types",
+ "CompanyBillingAddressView": ".types",
+ "CompanyBillingCheckoutSettings": ".types",
+ "CompanyBillingDetailsResponseData": ".types",
+ "CompanyBillingDetailsView": ".types",
"CompanyBillingEntityResponseData": ".types",
"CompanyBillingEntitySubscriptionResponseData": ".types",
"CompanyCreditBalance": ".types",
"CompanyCreditBalanceResponseData": ".types",
"CompanyDetailResponseData": ".types",
"CompanyEventPeriodMetricsResponseData": ".types",
+ "CompanyFeatureUsageExportMetadata": ".types",
"CompanyLedgerResponseData": ".types",
"CompanyMatchingCriteria": ".types",
"CompanyMembershipDetailResponseData": ".types",
@@ -971,6 +1042,7 @@
"CreateBillingPlanCreditGrantRequestBody": ".types",
"CreateBillingPlanCreditGrantResponse": ".credits",
"CreateBillingPriceTierRequestBody": ".types",
+ "CreateCatalogResponse": ".catalogs",
"CreateCompanyOverrideResponse": ".entitlements",
"CreateCompanyResponse": ".companies",
"CreateComponentResponse": ".components",
@@ -1027,13 +1099,21 @@
"CreditsAutoTopupCreditSummary": ".types",
"CreditsAutoTopupHardFailure": ".types",
"CreditsAutoTopupRetryFailure": ".types",
+ "CreditsAutoTopupSuccess": ".types",
+ "CreditsCreditPurchaseSuccess": ".types",
+ "CreditsWebhookCompanySummary": ".types",
+ "CreditsWebhookCreditSummary": ".types",
"CurrencyPriceRequestBody": ".types",
"CustomPlanActivationStrategy": ".types",
"CustomPlanBillingResponseData": ".types",
"CustomPlanBillingStatus": ".types",
"CustomPlanConfig": ".types",
"CustomPlanViewConfigResponseData": ".types",
+ "CustomerBillingAddress": ".types",
"DataEventPayload": ".types",
+ "DataExportMetadata": ".types",
+ "DataExportMetadata_AuditLog": ".types",
+ "DataExportMetadata_CompanyFeatureUsage": ".types",
"DataExportOutputFileType": ".types",
"DataExportResponseData": ".types",
"DataExportStatus": ".types",
@@ -1049,6 +1129,7 @@
"DeleteBillingPlanCreditGrantRequestBody": ".types",
"DeleteBillingPlanCreditGrantResponse": ".credits",
"DeleteBillingProductResponse": ".billing",
+ "DeleteCatalogResponse": ".catalogs",
"DeleteCompanyByKeysResponse": ".companies",
"DeleteCompanyMembershipResponse": ".companies",
"DeleteCompanyOverrideResponse": ".entitlements",
@@ -1133,13 +1214,19 @@
"GetAuditLogResponse": ".accounts",
"GetBillingEntityChildSubscriptionsParams": ".companies",
"GetBillingEntityChildSubscriptionsResponse": ".companies",
+ "GetCatalogResponse": ".catalogs",
"GetCheckoutDataResponse": ".checkout",
+ "GetCompanyBillingDetailsResponse": ".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 +1257,7 @@
"GetPlanParams": ".plans",
"GetPlanResponse": ".plans",
"GetPlanTraitResponse": ".companies",
+ "GetPlansInCatalogResponse": ".catalogs",
"GetPublicPlansResponse": ".componentspublic",
"GetScheduledCheckoutResponse": ".scheduledcheckout",
"GetSegmentIntegrationStatusResponse": ".events",
@@ -1229,6 +1317,8 @@
"ListBillingProductPricesResponse": ".billing",
"ListBillingProductsParams": ".billing",
"ListBillingProductsResponse": ".billing",
+ "ListCatalogsParams": ".catalogs",
+ "ListCatalogsResponse": ".catalogs",
"ListCompaniesParams": ".companies",
"ListCompaniesResponse": ".companies",
"ListCompanyCreditBalancesParams": ".credits",
@@ -1253,6 +1343,8 @@
"ListCustomPlanBillingsResponse": ".plans",
"ListCustomersWithSubscriptionsParams": ".billing",
"ListCustomersWithSubscriptionsResponse": ".billing",
+ "ListDataExportsParams": ".dataexports",
+ "ListDataExportsResponse": ".dataexports",
"ListEntityKeyDefinitionsParams": ".companies",
"ListEntityKeyDefinitionsResponse": ".companies",
"ListEntityTraitDefinitionsParams": ".companies",
@@ -1328,6 +1420,7 @@
"PlanBundleCreditGrantRequestBody": ".types",
"PlanBundleEntitlementRequestBody": ".types",
"PlanBundleResponseData": ".types",
+ "PlanCatalogMembershipResponseData": ".types",
"PlanChangeAction": ".types",
"PlanChangeBasePlanAction": ".types",
"PlanChangeResponseData": ".types",
@@ -1369,6 +1462,7 @@
"PreviewObject": ".types",
"PreviewObjectResponseData": ".types",
"PreviewSubscriptionChangeResponseData": ".types",
+ "PreviewSubscriptionDiscountResponseData": ".types",
"PreviewSubscriptionFinanceResponseData": ".types",
"PreviewSubscriptionUpcomingInvoiceLineItems": ".types",
"ProrationBehavior": ".types",
@@ -1413,6 +1507,7 @@
"RulesengineTraitDefinition": ".types",
"RulesengineTraitDefinitionComparableType": ".types",
"RulesengineUser": ".types",
+ "RulesengineWarningTier": ".types",
"RunIntegrationResponse": ".integrationsapi",
"ScheduledCheckoutResponseData": ".types",
"ScheduledCheckoutStatus": ".types",
@@ -1451,9 +1546,12 @@
"UpdateBillingCreditResponse": ".credits",
"UpdateBillingPlanCreditGrantRequestBody": ".types",
"UpdateBillingPlanCreditGrantResponse": ".credits",
+ "UpdateCatalogResponse": ".catalogs",
+ "UpdateCompanyBillingDetailsResponse": ".checkout",
"UpdateCompanyOverrideResponse": ".entitlements",
"UpdateCompanyPlansResponse": ".plans",
"UpdateComponentResponse": ".components",
+ "UpdateConfigurationResponse": ".catalogs",
"UpdateCreditBundleDetailsResponse": ".credits",
"UpdateCreditBundleRequestBody": ".types",
"UpdateCustomerSubscriptionTrialEndResponse": ".checkout",
@@ -1500,6 +1598,7 @@
"UsageTimeSeriesPointResponseData": ".types",
"UserDetailResponseData": ".types",
"UserResponseData": ".types",
+ "WarningTier": ".types",
"WarningTierRequestBody": ".types",
"WarningTierResponseData": ".types",
"WebFeatureUsageWebhookOutput": ".types",
@@ -1518,6 +1617,7 @@
"accesstokens": ".accesstokens",
"accounts": ".accounts",
"billing": ".billing",
+ "catalogs": ".catalogs",
"checkout": ".checkout",
"companies": ".companies",
"components": ".components",
@@ -1575,6 +1675,7 @@ def __dir__():
"AssumeStripeInstalledResponse",
"AsyncSchematic",
"AsyncSchematicConfig",
+ "AuditLogExportMetadata",
"AuditLogListResponseData",
"AuditLogResponseData",
"BadRequestError",
@@ -1624,9 +1725,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",
@@ -1646,12 +1760,17 @@ def __dir__():
"CheckoutSettingsResponseData",
"CheckoutSubscription",
"ClerkIntegrationConfig",
+ "CompanyBillingAddressView",
+ "CompanyBillingCheckoutSettings",
+ "CompanyBillingDetailsResponseData",
+ "CompanyBillingDetailsView",
"CompanyBillingEntityResponseData",
"CompanyBillingEntitySubscriptionResponseData",
"CompanyCreditBalance",
"CompanyCreditBalanceResponseData",
"CompanyDetailResponseData",
"CompanyEventPeriodMetricsResponseData",
+ "CompanyFeatureUsageExportMetadata",
"CompanyLedgerResponseData",
"CompanyMatchingCriteria",
"CompanyMembershipDetailResponseData",
@@ -1750,6 +1869,7 @@ def __dir__():
"CreateBillingPlanCreditGrantRequestBody",
"CreateBillingPlanCreditGrantResponse",
"CreateBillingPriceTierRequestBody",
+ "CreateCatalogResponse",
"CreateCompanyOverrideResponse",
"CreateCompanyResponse",
"CreateComponentResponse",
@@ -1806,13 +1926,21 @@ def __dir__():
"CreditsAutoTopupCreditSummary",
"CreditsAutoTopupHardFailure",
"CreditsAutoTopupRetryFailure",
+ "CreditsAutoTopupSuccess",
+ "CreditsCreditPurchaseSuccess",
+ "CreditsWebhookCompanySummary",
+ "CreditsWebhookCreditSummary",
"CurrencyPriceRequestBody",
"CustomPlanActivationStrategy",
"CustomPlanBillingResponseData",
"CustomPlanBillingStatus",
"CustomPlanConfig",
"CustomPlanViewConfigResponseData",
+ "CustomerBillingAddress",
"DataEventPayload",
+ "DataExportMetadata",
+ "DataExportMetadata_AuditLog",
+ "DataExportMetadata_CompanyFeatureUsage",
"DataExportOutputFileType",
"DataExportResponseData",
"DataExportStatus",
@@ -1828,6 +1956,7 @@ def __dir__():
"DeleteBillingPlanCreditGrantRequestBody",
"DeleteBillingPlanCreditGrantResponse",
"DeleteBillingProductResponse",
+ "DeleteCatalogResponse",
"DeleteCompanyByKeysResponse",
"DeleteCompanyMembershipResponse",
"DeleteCompanyOverrideResponse",
@@ -1912,13 +2041,19 @@ def __dir__():
"GetAuditLogResponse",
"GetBillingEntityChildSubscriptionsParams",
"GetBillingEntityChildSubscriptionsResponse",
+ "GetCatalogResponse",
"GetCheckoutDataResponse",
+ "GetCompanyBillingDetailsResponse",
"GetCompanyBillingEntityParams",
"GetCompanyBillingEntityResponse",
"GetCompanyOverrideResponse",
"GetCompanyResponse",
"GetComponentResponse",
+ "GetConfigurationResponse",
"GetCreditBundleResponse",
+ "GetCreditBundlesInCatalogResponse",
+ "GetDataExportResponse",
+ "GetDerivedFeaturesResponse",
"GetEntityTraitDefinitionResponse",
"GetEntityTraitValuesParams",
"GetEntityTraitValuesResponse",
@@ -1949,6 +2084,7 @@ def __dir__():
"GetPlanParams",
"GetPlanResponse",
"GetPlanTraitResponse",
+ "GetPlansInCatalogResponse",
"GetPublicPlansResponse",
"GetScheduledCheckoutResponse",
"GetSegmentIntegrationStatusResponse",
@@ -2008,6 +2144,8 @@ def __dir__():
"ListBillingProductPricesResponse",
"ListBillingProductsParams",
"ListBillingProductsResponse",
+ "ListCatalogsParams",
+ "ListCatalogsResponse",
"ListCompaniesParams",
"ListCompaniesResponse",
"ListCompanyCreditBalancesParams",
@@ -2032,6 +2170,8 @@ def __dir__():
"ListCustomPlanBillingsResponse",
"ListCustomersWithSubscriptionsParams",
"ListCustomersWithSubscriptionsResponse",
+ "ListDataExportsParams",
+ "ListDataExportsResponse",
"ListEntityKeyDefinitionsParams",
"ListEntityKeyDefinitionsResponse",
"ListEntityTraitDefinitionsParams",
@@ -2107,6 +2247,7 @@ def __dir__():
"PlanBundleCreditGrantRequestBody",
"PlanBundleEntitlementRequestBody",
"PlanBundleResponseData",
+ "PlanCatalogMembershipResponseData",
"PlanChangeAction",
"PlanChangeBasePlanAction",
"PlanChangeResponseData",
@@ -2148,6 +2289,7 @@ def __dir__():
"PreviewObject",
"PreviewObjectResponseData",
"PreviewSubscriptionChangeResponseData",
+ "PreviewSubscriptionDiscountResponseData",
"PreviewSubscriptionFinanceResponseData",
"PreviewSubscriptionUpcomingInvoiceLineItems",
"ProrationBehavior",
@@ -2192,6 +2334,7 @@ def __dir__():
"RulesengineTraitDefinition",
"RulesengineTraitDefinitionComparableType",
"RulesengineUser",
+ "RulesengineWarningTier",
"RunIntegrationResponse",
"ScheduledCheckoutResponseData",
"ScheduledCheckoutStatus",
@@ -2230,9 +2373,12 @@ def __dir__():
"UpdateBillingCreditResponse",
"UpdateBillingPlanCreditGrantRequestBody",
"UpdateBillingPlanCreditGrantResponse",
+ "UpdateCatalogResponse",
+ "UpdateCompanyBillingDetailsResponse",
"UpdateCompanyOverrideResponse",
"UpdateCompanyPlansResponse",
"UpdateComponentResponse",
+ "UpdateConfigurationResponse",
"UpdateCreditBundleDetailsResponse",
"UpdateCreditBundleRequestBody",
"UpdateCustomerSubscriptionTrialEndResponse",
@@ -2279,6 +2425,7 @@ def __dir__():
"UsageTimeSeriesPointResponseData",
"UserDetailResponseData",
"UserResponseData",
+ "WarningTier",
"WarningTierRequestBody",
"WarningTierResponseData",
"WebFeatureUsageWebhookOutput",
@@ -2297,6 +2444,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/checkout/__init__.py b/src/schematic/checkout/__init__.py
index 1cd93a4..55f6a0e 100644
--- a/src/schematic/checkout/__init__.py
+++ b/src/schematic/checkout/__init__.py
@@ -10,18 +10,22 @@
CancelSubscriptionResponse,
CheckoutInternalResponse,
GetCheckoutDataResponse,
+ GetCompanyBillingDetailsResponse,
ManagePlanResponse,
PreviewCheckoutInternalResponse,
PreviewManagePlanResponse,
+ UpdateCompanyBillingDetailsResponse,
UpdateCustomerSubscriptionTrialEndResponse,
)
_dynamic_imports: typing.Dict[str, str] = {
"CancelSubscriptionResponse": ".types",
"CheckoutInternalResponse": ".types",
"GetCheckoutDataResponse": ".types",
+ "GetCompanyBillingDetailsResponse": ".types",
"ManagePlanResponse": ".types",
"PreviewCheckoutInternalResponse": ".types",
"PreviewManagePlanResponse": ".types",
+ "UpdateCompanyBillingDetailsResponse": ".types",
"UpdateCustomerSubscriptionTrialEndResponse": ".types",
}
@@ -51,8 +55,10 @@ def __dir__():
"CancelSubscriptionResponse",
"CheckoutInternalResponse",
"GetCheckoutDataResponse",
+ "GetCompanyBillingDetailsResponse",
"ManagePlanResponse",
"PreviewCheckoutInternalResponse",
"PreviewManagePlanResponse",
+ "UpdateCompanyBillingDetailsResponse",
"UpdateCustomerSubscriptionTrialEndResponse",
]
diff --git a/src/schematic/checkout/client.py b/src/schematic/checkout/client.py
index 69c7e54..fc0ed86 100644
--- a/src/schematic/checkout/client.py
+++ b/src/schematic/checkout/client.py
@@ -6,6 +6,7 @@
from ..core.client_wrapper import AsyncClientWrapper, SyncClientWrapper
from ..core.request_options import RequestOptions
from ..types.checkout_field_value import CheckoutFieldValue
+from ..types.customer_billing_address import CustomerBillingAddress
from ..types.plan_selection import PlanSelection
from ..types.update_add_on_request_body import UpdateAddOnRequestBody
from ..types.update_auto_topup_override_request_body import UpdateAutoTopupOverrideRequestBody
@@ -15,9 +16,11 @@
from .types.cancel_subscription_response import CancelSubscriptionResponse
from .types.checkout_internal_response import CheckoutInternalResponse
from .types.get_checkout_data_response import GetCheckoutDataResponse
+from .types.get_company_billing_details_response import GetCompanyBillingDetailsResponse
from .types.manage_plan_response import ManagePlanResponse
from .types.preview_checkout_internal_response import PreviewCheckoutInternalResponse
from .types.preview_manage_plan_response import PreviewManagePlanResponse
+from .types.update_company_billing_details_response import UpdateCompanyBillingDetailsResponse
from .types.update_customer_subscription_trial_end_response import UpdateCustomerSubscriptionTrialEndResponse
# this is used as the default value for optional parameters
@@ -334,6 +337,91 @@ def preview_checkout_internal(
)
return _response.data
+ def get_company_billing_details(
+ self, company_id: str, *, request_options: typing.Optional[RequestOptions] = None
+ ) -> GetCompanyBillingDetailsResponse:
+ """
+ Parameters
+ ----------
+ company_id : str
+ company_id
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ GetCompanyBillingDetailsResponse
+ OK
+
+ Examples
+ --------
+ from schematic import Schematic
+
+ client = Schematic(
+ api_key="YOUR_API_KEY",
+ )
+ client.checkout.get_company_billing_details(
+ company_id="company_id",
+ )
+ """
+ _response = self._raw_client.get_company_billing_details(company_id, request_options=request_options)
+ return _response.data
+
+ def update_company_billing_details(
+ self,
+ company_id: str,
+ *,
+ values: typing.Sequence[CheckoutFieldValue],
+ address: typing.Optional[CustomerBillingAddress] = OMIT,
+ email: typing.Optional[str] = OMIT,
+ phone: typing.Optional[str] = OMIT,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> UpdateCompanyBillingDetailsResponse:
+ """
+ Parameters
+ ----------
+ company_id : str
+ company_id
+
+ values : typing.Sequence[CheckoutFieldValue]
+
+ address : typing.Optional[CustomerBillingAddress]
+
+ email : typing.Optional[str]
+
+ phone : typing.Optional[str]
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ UpdateCompanyBillingDetailsResponse
+ OK
+
+ Examples
+ --------
+ from schematic import CheckoutFieldValue, Schematic
+
+ client = Schematic(
+ api_key="YOUR_API_KEY",
+ )
+ client.checkout.update_company_billing_details(
+ company_id="company_id",
+ values=[
+ CheckoutFieldValue(
+ id="id",
+ value="value",
+ )
+ ],
+ )
+ """
+ _response = self._raw_client.update_company_billing_details(
+ company_id, values=values, address=address, email=email, phone=phone, request_options=request_options
+ )
+ return _response.data
+
def manage_plan(
self,
*,
@@ -1002,6 +1090,107 @@ async def main() -> None:
)
return _response.data
+ async def get_company_billing_details(
+ self, company_id: str, *, request_options: typing.Optional[RequestOptions] = None
+ ) -> GetCompanyBillingDetailsResponse:
+ """
+ Parameters
+ ----------
+ company_id : str
+ company_id
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ GetCompanyBillingDetailsResponse
+ OK
+
+ Examples
+ --------
+ import asyncio
+
+ from schematic import AsyncSchematic
+
+ client = AsyncSchematic(
+ api_key="YOUR_API_KEY",
+ )
+
+
+ async def main() -> None:
+ await client.checkout.get_company_billing_details(
+ company_id="company_id",
+ )
+
+
+ asyncio.run(main())
+ """
+ _response = await self._raw_client.get_company_billing_details(company_id, request_options=request_options)
+ return _response.data
+
+ async def update_company_billing_details(
+ self,
+ company_id: str,
+ *,
+ values: typing.Sequence[CheckoutFieldValue],
+ address: typing.Optional[CustomerBillingAddress] = OMIT,
+ email: typing.Optional[str] = OMIT,
+ phone: typing.Optional[str] = OMIT,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> UpdateCompanyBillingDetailsResponse:
+ """
+ Parameters
+ ----------
+ company_id : str
+ company_id
+
+ values : typing.Sequence[CheckoutFieldValue]
+
+ address : typing.Optional[CustomerBillingAddress]
+
+ email : typing.Optional[str]
+
+ phone : typing.Optional[str]
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ UpdateCompanyBillingDetailsResponse
+ OK
+
+ Examples
+ --------
+ import asyncio
+
+ from schematic import AsyncSchematic, CheckoutFieldValue
+
+ client = AsyncSchematic(
+ api_key="YOUR_API_KEY",
+ )
+
+
+ async def main() -> None:
+ await client.checkout.update_company_billing_details(
+ company_id="company_id",
+ values=[
+ CheckoutFieldValue(
+ id="id",
+ value="value",
+ )
+ ],
+ )
+
+
+ asyncio.run(main())
+ """
+ _response = await self._raw_client.update_company_billing_details(
+ company_id, values=values, address=address, email=email, phone=phone, request_options=request_options
+ )
+ return _response.data
+
async def manage_plan(
self,
*,
diff --git a/src/schematic/checkout/raw_client.py b/src/schematic/checkout/raw_client.py
index 7d9b8e2..dccc0d6 100644
--- a/src/schematic/checkout/raw_client.py
+++ b/src/schematic/checkout/raw_client.py
@@ -19,6 +19,7 @@
from ..errors.unauthorized_error import UnauthorizedError
from ..types.api_error import ApiError as types_api_error_ApiError
from ..types.checkout_field_value import CheckoutFieldValue
+from ..types.customer_billing_address import CustomerBillingAddress
from ..types.plan_selection import PlanSelection
from ..types.update_add_on_request_body import UpdateAddOnRequestBody
from ..types.update_auto_topup_override_request_body import UpdateAutoTopupOverrideRequestBody
@@ -27,9 +28,11 @@
from .types.cancel_subscription_response import CancelSubscriptionResponse
from .types.checkout_internal_response import CheckoutInternalResponse
from .types.get_checkout_data_response import GetCheckoutDataResponse
+from .types.get_company_billing_details_response import GetCompanyBillingDetailsResponse
from .types.manage_plan_response import ManagePlanResponse
from .types.preview_checkout_internal_response import PreviewCheckoutInternalResponse
from .types.preview_manage_plan_response import PreviewManagePlanResponse
+from .types.update_company_billing_details_response import UpdateCompanyBillingDetailsResponse
from .types.update_customer_subscription_trial_end_response import UpdateCustomerSubscriptionTrialEndResponse
from pydantic import ValidationError
@@ -504,6 +507,224 @@ def preview_checkout_internal(
status_code=_response.status_code, headers=dict(_response.headers), body=_response_json
)
+ def get_company_billing_details(
+ self, company_id: str, *, request_options: typing.Optional[RequestOptions] = None
+ ) -> HttpResponse[GetCompanyBillingDetailsResponse]:
+ """
+ Parameters
+ ----------
+ company_id : str
+ company_id
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ HttpResponse[GetCompanyBillingDetailsResponse]
+ OK
+ """
+ _response = self._client_wrapper.httpx_client.request(
+ f"companies/{encode_path_param(company_id)}/billing-details",
+ method="GET",
+ request_options=request_options,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ _data = typing.cast(
+ GetCompanyBillingDetailsResponse,
+ parse_obj_as(
+ type_=GetCompanyBillingDetailsResponse, # 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_company_billing_details(
+ self,
+ company_id: str,
+ *,
+ values: typing.Sequence[CheckoutFieldValue],
+ address: typing.Optional[CustomerBillingAddress] = OMIT,
+ email: typing.Optional[str] = OMIT,
+ phone: typing.Optional[str] = OMIT,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> HttpResponse[UpdateCompanyBillingDetailsResponse]:
+ """
+ Parameters
+ ----------
+ company_id : str
+ company_id
+
+ values : typing.Sequence[CheckoutFieldValue]
+
+ address : typing.Optional[CustomerBillingAddress]
+
+ email : typing.Optional[str]
+
+ phone : typing.Optional[str]
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ HttpResponse[UpdateCompanyBillingDetailsResponse]
+ OK
+ """
+ _response = self._client_wrapper.httpx_client.request(
+ f"companies/{encode_path_param(company_id)}/billing-details",
+ method="PUT",
+ json={
+ "address": convert_and_respect_annotation_metadata(
+ object_=address, annotation=CustomerBillingAddress, direction="write"
+ ),
+ "email": email,
+ "phone": phone,
+ "values": convert_and_respect_annotation_metadata(
+ object_=values, annotation=typing.Sequence[CheckoutFieldValue], direction="write"
+ ),
+ },
+ headers={
+ "content-type": "application/json",
+ },
+ request_options=request_options,
+ omit=OMIT,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ _data = typing.cast(
+ UpdateCompanyBillingDetailsResponse,
+ parse_obj_as(
+ type_=UpdateCompanyBillingDetailsResponse, # 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 manage_plan(
self,
*,
@@ -1560,6 +1781,224 @@ async def preview_checkout_internal(
status_code=_response.status_code, headers=dict(_response.headers), body=_response_json
)
+ async def get_company_billing_details(
+ self, company_id: str, *, request_options: typing.Optional[RequestOptions] = None
+ ) -> AsyncHttpResponse[GetCompanyBillingDetailsResponse]:
+ """
+ Parameters
+ ----------
+ company_id : str
+ company_id
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ AsyncHttpResponse[GetCompanyBillingDetailsResponse]
+ OK
+ """
+ _response = await self._client_wrapper.httpx_client.request(
+ f"companies/{encode_path_param(company_id)}/billing-details",
+ method="GET",
+ request_options=request_options,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ _data = typing.cast(
+ GetCompanyBillingDetailsResponse,
+ parse_obj_as(
+ type_=GetCompanyBillingDetailsResponse, # 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_company_billing_details(
+ self,
+ company_id: str,
+ *,
+ values: typing.Sequence[CheckoutFieldValue],
+ address: typing.Optional[CustomerBillingAddress] = OMIT,
+ email: typing.Optional[str] = OMIT,
+ phone: typing.Optional[str] = OMIT,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> AsyncHttpResponse[UpdateCompanyBillingDetailsResponse]:
+ """
+ Parameters
+ ----------
+ company_id : str
+ company_id
+
+ values : typing.Sequence[CheckoutFieldValue]
+
+ address : typing.Optional[CustomerBillingAddress]
+
+ email : typing.Optional[str]
+
+ phone : typing.Optional[str]
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ AsyncHttpResponse[UpdateCompanyBillingDetailsResponse]
+ OK
+ """
+ _response = await self._client_wrapper.httpx_client.request(
+ f"companies/{encode_path_param(company_id)}/billing-details",
+ method="PUT",
+ json={
+ "address": convert_and_respect_annotation_metadata(
+ object_=address, annotation=CustomerBillingAddress, direction="write"
+ ),
+ "email": email,
+ "phone": phone,
+ "values": convert_and_respect_annotation_metadata(
+ object_=values, annotation=typing.Sequence[CheckoutFieldValue], direction="write"
+ ),
+ },
+ headers={
+ "content-type": "application/json",
+ },
+ request_options=request_options,
+ omit=OMIT,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ _data = typing.cast(
+ UpdateCompanyBillingDetailsResponse,
+ parse_obj_as(
+ type_=UpdateCompanyBillingDetailsResponse, # 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 manage_plan(
self,
*,
diff --git a/src/schematic/checkout/types/__init__.py b/src/schematic/checkout/types/__init__.py
index 7a38426..dcf171a 100644
--- a/src/schematic/checkout/types/__init__.py
+++ b/src/schematic/checkout/types/__init__.py
@@ -9,17 +9,21 @@
from .cancel_subscription_response import CancelSubscriptionResponse
from .checkout_internal_response import CheckoutInternalResponse
from .get_checkout_data_response import GetCheckoutDataResponse
+ from .get_company_billing_details_response import GetCompanyBillingDetailsResponse
from .manage_plan_response import ManagePlanResponse
from .preview_checkout_internal_response import PreviewCheckoutInternalResponse
from .preview_manage_plan_response import PreviewManagePlanResponse
+ from .update_company_billing_details_response import UpdateCompanyBillingDetailsResponse
from .update_customer_subscription_trial_end_response import UpdateCustomerSubscriptionTrialEndResponse
_dynamic_imports: typing.Dict[str, str] = {
"CancelSubscriptionResponse": ".cancel_subscription_response",
"CheckoutInternalResponse": ".checkout_internal_response",
"GetCheckoutDataResponse": ".get_checkout_data_response",
+ "GetCompanyBillingDetailsResponse": ".get_company_billing_details_response",
"ManagePlanResponse": ".manage_plan_response",
"PreviewCheckoutInternalResponse": ".preview_checkout_internal_response",
"PreviewManagePlanResponse": ".preview_manage_plan_response",
+ "UpdateCompanyBillingDetailsResponse": ".update_company_billing_details_response",
"UpdateCustomerSubscriptionTrialEndResponse": ".update_customer_subscription_trial_end_response",
}
@@ -49,8 +53,10 @@ def __dir__():
"CancelSubscriptionResponse",
"CheckoutInternalResponse",
"GetCheckoutDataResponse",
+ "GetCompanyBillingDetailsResponse",
"ManagePlanResponse",
"PreviewCheckoutInternalResponse",
"PreviewManagePlanResponse",
+ "UpdateCompanyBillingDetailsResponse",
"UpdateCustomerSubscriptionTrialEndResponse",
]
diff --git a/src/schematic/checkout/types/get_company_billing_details_response.py b/src/schematic/checkout/types/get_company_billing_details_response.py
new file mode 100644
index 0000000..2a1c595
--- /dev/null
+++ b/src/schematic/checkout/types/get_company_billing_details_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.company_billing_details_response_data import CompanyBillingDetailsResponseData
+
+
+class GetCompanyBillingDetailsResponse(UniversalBaseModel):
+ data: CompanyBillingDetailsResponseData
+ 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/checkout/types/update_company_billing_details_response.py b/src/schematic/checkout/types/update_company_billing_details_response.py
new file mode 100644
index 0000000..f57f899
--- /dev/null
+++ b/src/schematic/checkout/types/update_company_billing_details_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.company_billing_details_response_data import CompanyBillingDetailsResponseData
+
+
+class UpdateCompanyBillingDetailsResponse(UniversalBaseModel):
+ data: CompanyBillingDetailsResponseData
+ 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/core/client_wrapper.py b/src/schematic/core/client_wrapper.py
index ac8a485..5a99943 100644
--- a/src/schematic/core/client_wrapper.py
+++ b/src/schematic/core/client_wrapper.py
@@ -29,12 +29,12 @@ def get_headers(self) -> typing.Dict[str, str]:
import platform
headers: typing.Dict[str, str] = {
- "User-Agent": "schematichq/1.3.0",
+ "User-Agent": "schematichq/1.3.1",
"X-Fern-Language": "Python",
"X-Fern-Runtime": f"python/{platform.python_version()}",
"X-Fern-Platform": f"{platform.system().lower()}/{platform.release()}",
"X-Fern-SDK-Name": "schematichq",
- "X-Fern-SDK-Version": "1.3.0",
+ "X-Fern-SDK-Version": "1.3.1",
**(self.get_custom_headers() or {}),
}
headers["X-Schematic-Api-Key"] = self.api_key
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..557fd0d 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
@@ -82,12 +95,17 @@
from .checkout_settings_response_data import CheckoutSettingsResponseData
from .checkout_subscription import CheckoutSubscription
from .clerk_integration_config import ClerkIntegrationConfig
+ from .company_billing_address_view import CompanyBillingAddressView
+ from .company_billing_checkout_settings import CompanyBillingCheckoutSettings
+ from .company_billing_details_response_data import CompanyBillingDetailsResponseData
+ from .company_billing_details_view import CompanyBillingDetailsView
from .company_billing_entity_response_data import CompanyBillingEntityResponseData
from .company_billing_entity_subscription_response_data import CompanyBillingEntitySubscriptionResponseData
from .company_credit_balance import CompanyCreditBalance
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
@@ -159,13 +177,23 @@
from .credits_auto_topup_credit_summary import CreditsAutoTopupCreditSummary
from .credits_auto_topup_hard_failure import CreditsAutoTopupHardFailure
from .credits_auto_topup_retry_failure import CreditsAutoTopupRetryFailure
+ from .credits_auto_topup_success import CreditsAutoTopupSuccess
+ from .credits_credit_purchase_success import CreditsCreditPurchaseSuccess
+ from .credits_webhook_company_summary import CreditsWebhookCompanySummary
+ from .credits_webhook_credit_summary import CreditsWebhookCreditSummary
from .currency_price_request_body import CurrencyPriceRequestBody
from .custom_plan_activation_strategy import CustomPlanActivationStrategy
from .custom_plan_billing_response_data import CustomPlanBillingResponseData
from .custom_plan_billing_status import CustomPlanBillingStatus
from .custom_plan_config import CustomPlanConfig
from .custom_plan_view_config_response_data import CustomPlanViewConfigResponseData
+ from .customer_billing_address import CustomerBillingAddress
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 +297,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 +335,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 +374,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 +417,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 +443,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 +494,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",
@@ -476,12 +521,17 @@
"CheckoutSettingsResponseData": ".checkout_settings_response_data",
"CheckoutSubscription": ".checkout_subscription",
"ClerkIntegrationConfig": ".clerk_integration_config",
+ "CompanyBillingAddressView": ".company_billing_address_view",
+ "CompanyBillingCheckoutSettings": ".company_billing_checkout_settings",
+ "CompanyBillingDetailsResponseData": ".company_billing_details_response_data",
+ "CompanyBillingDetailsView": ".company_billing_details_view",
"CompanyBillingEntityResponseData": ".company_billing_entity_response_data",
"CompanyBillingEntitySubscriptionResponseData": ".company_billing_entity_subscription_response_data",
"CompanyCreditBalance": ".company_credit_balance",
"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",
@@ -553,13 +603,21 @@
"CreditsAutoTopupCreditSummary": ".credits_auto_topup_credit_summary",
"CreditsAutoTopupHardFailure": ".credits_auto_topup_hard_failure",
"CreditsAutoTopupRetryFailure": ".credits_auto_topup_retry_failure",
+ "CreditsAutoTopupSuccess": ".credits_auto_topup_success",
+ "CreditsCreditPurchaseSuccess": ".credits_credit_purchase_success",
+ "CreditsWebhookCompanySummary": ".credits_webhook_company_summary",
+ "CreditsWebhookCreditSummary": ".credits_webhook_credit_summary",
"CurrencyPriceRequestBody": ".currency_price_request_body",
"CustomPlanActivationStrategy": ".custom_plan_activation_strategy",
"CustomPlanBillingResponseData": ".custom_plan_billing_response_data",
"CustomPlanBillingStatus": ".custom_plan_billing_status",
"CustomPlanConfig": ".custom_plan_config",
"CustomPlanViewConfigResponseData": ".custom_plan_view_config_response_data",
+ "CustomerBillingAddress": ".customer_billing_address",
"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 +719,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 +757,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 +796,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 +839,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 +889,7 @@ def __dir__():
"ApiKeyIntegrationResponseData",
"ApiKeyResponseData",
"ApiKeyScope",
+ "AuditLogExportMetadata",
"AuditLogListResponseData",
"AuditLogResponseData",
"BillingCouponResponseData",
@@ -877,6 +940,18 @@ def __dir__():
"BillingTiersMode",
"CaptureRawEvent",
"CaptureRawEventBatch",
+ "CatalogConfigOrderedBundle",
+ "CatalogConfigOrderedBundleResponseData",
+ "CatalogConfigOrderedEntitlement",
+ "CatalogConfigOrderedEntitlementResponseData",
+ "CatalogConfigOrderedPlan",
+ "CatalogConfigOrderedPlanResponseData",
+ "CatalogConfigurationResponseData",
+ "CatalogCreditBundleIDsResponseData",
+ "CatalogDerivedFeatureResponseData",
+ "CatalogDerivedFeaturesResponseData",
+ "CatalogPlanIDsResponseData",
+ "CatalogResponseData",
"ChangeSubscriptionInternalRequestBody",
"ChangeSubscriptionRequestBody",
"ChargeType",
@@ -892,12 +967,17 @@ def __dir__():
"CheckoutSettingsResponseData",
"CheckoutSubscription",
"ClerkIntegrationConfig",
+ "CompanyBillingAddressView",
+ "CompanyBillingCheckoutSettings",
+ "CompanyBillingDetailsResponseData",
+ "CompanyBillingDetailsView",
"CompanyBillingEntityResponseData",
"CompanyBillingEntitySubscriptionResponseData",
"CompanyCreditBalance",
"CompanyCreditBalanceResponseData",
"CompanyDetailResponseData",
"CompanyEventPeriodMetricsResponseData",
+ "CompanyFeatureUsageExportMetadata",
"CompanyLedgerResponseData",
"CompanyMatchingCriteria",
"CompanyMembershipDetailResponseData",
@@ -969,13 +1049,21 @@ def __dir__():
"CreditsAutoTopupCreditSummary",
"CreditsAutoTopupHardFailure",
"CreditsAutoTopupRetryFailure",
+ "CreditsAutoTopupSuccess",
+ "CreditsCreditPurchaseSuccess",
+ "CreditsWebhookCompanySummary",
+ "CreditsWebhookCreditSummary",
"CurrencyPriceRequestBody",
"CustomPlanActivationStrategy",
"CustomPlanBillingResponseData",
"CustomPlanBillingStatus",
"CustomPlanConfig",
"CustomPlanViewConfigResponseData",
+ "CustomerBillingAddress",
"DataEventPayload",
+ "DataExportMetadata",
+ "DataExportMetadata_AuditLog",
+ "DataExportMetadata_CompanyFeatureUsage",
"DataExportOutputFileType",
"DataExportResponseData",
"DataExportStatus",
@@ -1077,6 +1165,7 @@ def __dir__():
"PlanBundleCreditGrantRequestBody",
"PlanBundleEntitlementRequestBody",
"PlanBundleResponseData",
+ "PlanCatalogMembershipResponseData",
"PlanChangeAction",
"PlanChangeBasePlanAction",
"PlanChangeResponseData",
@@ -1114,6 +1203,7 @@ def __dir__():
"PreviewObject",
"PreviewObjectResponseData",
"PreviewSubscriptionChangeResponseData",
+ "PreviewSubscriptionDiscountResponseData",
"PreviewSubscriptionFinanceResponseData",
"PreviewSubscriptionUpcomingInvoiceLineItems",
"ProrationBehavior",
@@ -1152,6 +1242,7 @@ def __dir__():
"RulesengineTraitDefinition",
"RulesengineTraitDefinitionComparableType",
"RulesengineUser",
+ "RulesengineWarningTier",
"ScheduledCheckoutResponseData",
"ScheduledCheckoutStatus",
"ScheduledDowngradeConfigBehavior",
@@ -1194,6 +1285,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_billing_address_view.py b/src/schematic/types/company_billing_address_view.py
new file mode 100644
index 0000000..30ff7c7
--- /dev/null
+++ b/src/schematic/types/company_billing_address_view.py
@@ -0,0 +1,26 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+import typing_extensions
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from ..core.serialization import FieldMetadata
+
+
+class CompanyBillingAddressView(UniversalBaseModel):
+ city: str
+ country: str
+ line_1: typing_extensions.Annotated[str, FieldMetadata(alias="line1"), pydantic.Field(alias="line1")]
+ line_2: typing_extensions.Annotated[str, FieldMetadata(alias="line2"), pydantic.Field(alias="line2")]
+ postal_code: str
+ state: 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/company_billing_checkout_settings.py b/src/schematic/types/company_billing_checkout_settings.py
new file mode 100644
index 0000000..9896040
--- /dev/null
+++ b/src/schematic/types/company_billing_checkout_settings.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 CompanyBillingCheckoutSettings(UniversalBaseModel):
+ collect_address: bool
+ collect_email: bool
+ collect_phone: 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/company_billing_details_response_data.py b/src/schematic/types/company_billing_details_response_data.py
new file mode 100644
index 0000000..eff25df
--- /dev/null
+++ b/src/schematic/types/company_billing_details_response_data.py
@@ -0,0 +1,26 @@
+# 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 .checkout_field_with_value import CheckoutFieldWithValue
+from .company_billing_address_view import CompanyBillingAddressView
+from .company_billing_checkout_settings import CompanyBillingCheckoutSettings
+
+
+class CompanyBillingDetailsResponseData(UniversalBaseModel):
+ address: typing.Optional[CompanyBillingAddressView] = None
+ checkout_settings: CompanyBillingCheckoutSettings
+ custom_fields: typing.List[CheckoutFieldWithValue]
+ email: typing.Optional[str] = None
+ phone: 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/company_billing_details_view.py b/src/schematic/types/company_billing_details_view.py
new file mode 100644
index 0000000..40f14a6
--- /dev/null
+++ b/src/schematic/types/company_billing_details_view.py
@@ -0,0 +1,26 @@
+# 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 .checkout_field_with_value import CheckoutFieldWithValue
+from .company_billing_address_view import CompanyBillingAddressView
+from .company_billing_checkout_settings import CompanyBillingCheckoutSettings
+
+
+class CompanyBillingDetailsView(UniversalBaseModel):
+ address: typing.Optional[CompanyBillingAddressView] = None
+ checkout_settings: CompanyBillingCheckoutSettings
+ custom_fields: typing.List[CheckoutFieldWithValue]
+ email: typing.Optional[str] = None
+ phone: 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/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/create_entitlement_in_bundle_request_body.py b/src/schematic/types/create_entitlement_in_bundle_request_body.py
index db48304..4e74fbb 100644
--- a/src/schematic/types/create_entitlement_in_bundle_request_body.py
+++ b/src/schematic/types/create_entitlement_in_bundle_request_body.py
@@ -11,6 +11,7 @@
from .entitlement_value_type import EntitlementValueType
from .metric_period import MetricPeriod
from .metric_period_month_reset import MetricPeriodMonthReset
+from .warning_tier_request_body import WarningTierRequestBody
class CreateEntitlementInBundleRequestBody(UniversalBaseModel):
@@ -51,6 +52,7 @@ class CreateEntitlementInBundleRequestBody(UniversalBaseModel):
value_numeric: typing.Optional[int] = None
value_trait_id: typing.Optional[str] = None
value_type: EntitlementValueType
+ warning_tiers: typing.Optional[typing.List[WarningTierRequestBody]] = None
yearly_metered_price_id: typing.Optional[str] = None
yearly_price_tiers: typing.Optional[typing.List[CreatePriceTierRequestBody]] = None
yearly_unit_price: typing.Optional[int] = None
diff --git a/src/schematic/types/credits_auto_topup_success.py b/src/schematic/types/credits_auto_topup_success.py
new file mode 100644
index 0000000..45cc5c6
--- /dev/null
+++ b/src/schematic/types/credits_auto_topup_success.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 .credits_auto_topup_company_summary import CreditsAutoTopupCompanySummary
+from .credits_auto_topup_credit_summary import CreditsAutoTopupCreditSummary
+
+
+class CreditsAutoTopupSuccess(UniversalBaseModel):
+ company: typing.Optional[CreditsAutoTopupCompanySummary] = None
+ credit: typing.Optional[CreditsAutoTopupCreditSummary] = None
+ grant_id: str
+ quantity: int
+
+ 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/credits_credit_purchase_success.py b/src/schematic/types/credits_credit_purchase_success.py
new file mode 100644
index 0000000..1260349
--- /dev/null
+++ b/src/schematic/types/credits_credit_purchase_success.py
@@ -0,0 +1,26 @@
+# 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 .credits_webhook_company_summary import CreditsWebhookCompanySummary
+from .credits_webhook_credit_summary import CreditsWebhookCreditSummary
+
+
+class CreditsCreditPurchaseSuccess(UniversalBaseModel):
+ bundle_id: str
+ bundle_name: str
+ company: typing.Optional[CreditsWebhookCompanySummary] = None
+ credit: typing.Optional[CreditsWebhookCreditSummary] = None
+ grant_ids: typing.List[str]
+ quantity: int
+
+ 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/credits_webhook_company_summary.py b/src/schematic/types/credits_webhook_company_summary.py
new file mode 100644
index 0000000..6444aa0
--- /dev/null
+++ b/src/schematic/types/credits_webhook_company_summary.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 CreditsWebhookCompanySummary(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/credits_webhook_credit_summary.py b/src/schematic/types/credits_webhook_credit_summary.py
new file mode 100644
index 0000000..29ce450
--- /dev/null
+++ b/src/schematic/types/credits_webhook_credit_summary.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 CreditsWebhookCreditSummary(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/customer_billing_address.py b/src/schematic/types/customer_billing_address.py
new file mode 100644
index 0000000..3247fe9
--- /dev/null
+++ b/src/schematic/types/customer_billing_address.py
@@ -0,0 +1,26 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+import typing_extensions
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from ..core.serialization import FieldMetadata
+
+
+class CustomerBillingAddress(UniversalBaseModel):
+ city: str
+ country: str
+ line_1: typing_extensions.Annotated[str, FieldMetadata(alias="line1"), pydantic.Field(alias="line1")]
+ line_2: typing_extensions.Annotated[str, FieldMetadata(alias="line2"), pydantic.Field(alias="line2")]
+ postal_code: str
+ state: 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/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
diff --git a/src/schematic/types/webhook_request_type.py b/src/schematic/types/webhook_request_type.py
index 13c7ee4..1691b08 100644
--- a/src/schematic/types/webhook_request_type.py
+++ b/src/schematic/types/webhook_request_type.py
@@ -16,6 +16,7 @@
"company.updated",
"credit.limit.reached",
"credit.limit.warning",
+ "credit.purchase.success",
"entitlement.limit.reached",
"entitlement.limit.warning",
"entitlement.soft_limit.reached",
@@ -43,6 +44,7 @@
"user.updated",
"auto.topup.hard.failure",
"auto.topup.retry.exceeded",
+ "auto.topup.success",
],
typing.Any,
]