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, ]