From d330877774452739bd929c83a55829d8b7ce00c6 Mon Sep 17 00:00:00 2001 From: "fern-api[bot]" <115122769+fern-api[bot]@users.noreply.github.com> Date: Mon, 31 Aug 2026 10:03:01 +0000 Subject: [PATCH 1/2] [fern-generated] Update SDK Generated by Fern CLI Version: unknown Generators: - fernapi/fern-python-sdk: 5.29.2 --- .fern/metadata.json | 8 +- poetry.lock | 551 +++++++----------- reference.md | 178 +++++- src/schematic/__init__.py | 12 + src/schematic/accounts/client.py | 8 + src/schematic/accounts/raw_client.py | 8 + src/schematic/core/client_wrapper.py | 4 +- src/schematic/planmigrations/__init__.py | 6 + src/schematic/planmigrations/client.py | 178 +++++- src/schematic/planmigrations/raw_client.py | 428 ++++++++++++++ .../planmigrations/types/__init__.py | 6 + .../types/cancel_migration_response.py | 24 + .../types/complete_migration_now_response.py | 24 + src/schematic/plans/client.py | 45 +- src/schematic/plans/raw_client.py | 41 ++ src/schematic/types/__init__.py | 6 + .../types/company_detail_response_data.py | 2 + .../types/credit_lease_response_data.py | 1 + .../custom_plan_billing_response_data.py | 5 + .../types/get_onboarding_state_resp.py | 7 + src/schematic/types/onboarding_requirement.py | 8 +- .../types/onboarding_stripe_import.py | 5 + .../types/pending_migration_response_data.py | 25 + ...version_company_migration_response_data.py | 5 + .../plan_version_company_migration_status.py | 2 +- .../plan_version_migration_response_data.py | 1 + .../types/plan_version_migration_status.py | 4 +- .../types/plan_version_migration_strategy.py | 2 +- 28 files changed, 1222 insertions(+), 372 deletions(-) create mode 100644 src/schematic/planmigrations/types/cancel_migration_response.py create mode 100644 src/schematic/planmigrations/types/complete_migration_now_response.py create mode 100644 src/schematic/types/onboarding_stripe_import.py create mode 100644 src/schematic/types/pending_migration_response_data.py diff --git a/.fern/metadata.json b/.fern/metadata.json index 8e3e742..24e1159 100644 --- a/.fern/metadata.json +++ b/.fern/metadata.json @@ -1,7 +1,7 @@ { "cliVersion": "5.50.0", "generatorName": "fernapi/fern-python-sdk", - "generatorVersion": "5.29.1", + "generatorVersion": "5.29.2", "generatorConfig": { "inline_request_params": true, "client": { @@ -23,10 +23,10 @@ } ] }, - "originGitCommit": "008b7147a27272499bf4b17fa96d4357ca3b62e9", + "originGitCommit": "686551a0297d2f37075b3586b030ff32be5c94f7", "originGitCommitIsDirty": false, "invokedBy": "ci", - "requestedVersion": "1.3.4", + "requestedVersion": "1.3.5", "ciProvider": "github", - "sdkVersion": "1.3.4" + "sdkVersion": "1.3.5" } \ No newline at end of file diff --git a/poetry.lock b/poetry.lock index bd32c51..ac6834c 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1,25 +1,26 @@ -# This file is automatically @generated by Poetry 2.3.2 and should not be changed by hand. +# This file is automatically @generated by Poetry 2.4.1 and should not be changed by hand. [[package]] name = "aiohappyeyeballs" version = "2.7.1" description = "Happy Eyeballs for asyncio" -optional = false +optional = true python-versions = ">=3.10" -groups = ["main", "dev"] +groups = ["main"] +markers = "extra == \"aiohttp\"" files = [ {file = "aiohappyeyeballs-2.7.1-py3-none-any.whl", hash = "sha256:9243213661e29250eb41368e5daa826fc017156c3b8a11440826b2e3ed376472"}, {file = "aiohappyeyeballs-2.7.1.tar.gz", hash = "sha256:065665c041c42a5938ed220bdcd7230f22527fbec085e1853d2402c8a3615d9d"}, ] -markers = {main = "extra == \"aiohttp\""} [[package]] name = "aiohttp" version = "3.14.3" description = "Async http client/server framework (asyncio)" -optional = false +optional = true python-versions = ">=3.10" -groups = ["main", "dev"] +groups = ["main"] +markers = "extra == \"aiohttp\"" files = [ {file = "aiohttp-3.14.3-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:eb0495d778817619273c108784292be161a924b9f5ae5cbbc70a2caa6838250b"}, {file = "aiohttp-3.14.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:c3c200cf9757edd785051dc699c7ecbec22110dbfcb3fefc7a9f9695eda8ea7a"}, @@ -141,7 +142,6 @@ files = [ {file = "aiohttp-3.14.3-cp314-cp314t-win_arm64.whl", hash = "sha256:2e1161602f45a54de2ce0905243a95f58cb42dcd378402f3697f5e0b21e9d2e7"}, {file = "aiohttp-3.14.3.tar.gz", hash = "sha256:9491196535a88924a60afd5b5f434b5b203b6cc616250878dbdb223a8f7844bc"}, ] -markers = {main = "extra == \"aiohttp\""} [package.dependencies] aiohappyeyeballs = ">=2.5.0" @@ -161,14 +161,14 @@ speedups = ["Brotli (>=1.2) ; platform_python_implementation == \"CPython\" and name = "aiosignal" version = "1.4.0" description = "aiosignal: a list of registered asynchronous callbacks" -optional = false +optional = true python-versions = ">=3.9" -groups = ["main", "dev"] +groups = ["main"] +markers = "extra == \"aiohttp\"" files = [ {file = "aiosignal-1.4.0-py3-none-any.whl", hash = "sha256:053243f8b92b990551949e63930a839ff0cf0b0ebbe0597b0f3fb19e1a0fe82e"}, {file = "aiosignal-1.4.0.tar.gz", hash = "sha256:f47eecd9468083c2029cc99945502cb7708b082c232f9aca65da147157b251c7"}, ] -markers = {main = "extra == \"aiohttp\""} [package.dependencies] frozenlist = ">=1.1.0" @@ -210,27 +210,40 @@ trio = ["trio (>=0.32.0)"] name = "async-timeout" version = "5.0.1" description = "Timeout context manager for asyncio programs" -optional = false +optional = true python-versions = ">=3.8" -groups = ["main", "dev"] +groups = ["main"] +markers = "python_version == \"3.10\" and extra == \"aiohttp\"" files = [ {file = "async_timeout-5.0.1-py3-none-any.whl", hash = "sha256:39e3809566ff85354557ec2398b55e096c8364bacac9405a7a1fa429e77fe76c"}, {file = "async_timeout-5.0.1.tar.gz", hash = "sha256:d9321a7a3d5a6a5e187e824d2fa0793ce379a202935782d555d6e9d2735677d3"}, ] -markers = {main = "extra == \"aiohttp\" and python_version == \"3.10\"", dev = "python_full_version < \"3.11.3\""} [[package]] name = "attrs" version = "26.1.0" description = "Classes Without Boilerplate" -optional = false +optional = true python-versions = ">=3.9" -groups = ["main", "dev"] +groups = ["main"] +markers = "extra == \"aiohttp\"" files = [ {file = "attrs-26.1.0-py3-none-any.whl", hash = "sha256:c647aa4a12dfbad9333ca4e71fe62ddc36f4e63b2d260a37a8b83d2f043ac309"}, {file = "attrs-26.1.0.tar.gz", hash = "sha256:d03ceb89cb322a8fd706d4fb91940737b6642aa36998fe130a9bc96c985eff32"}, ] -markers = {main = "extra == \"aiohttp\""} + +[[package]] +name = "backports-asyncio-runner" +version = "1.2.0" +description = "Backport of asyncio.Runner, a context manager that controls event loop life cycle." +optional = false +python-versions = "<3.11,>=3.8" +groups = ["dev"] +markers = "python_version == \"3.10\"" +files = [ + {file = "backports_asyncio_runner-1.2.0-py3-none-any.whl", hash = "sha256:0da0a936a8aeb554eccb426dc55af3ba63bcdc69fa1a600b5bb305413a4477b5"}, + {file = "backports_asyncio_runner-1.2.0.tar.gz", hash = "sha256:a5aa7b2b7d8f8bfcaa2b57313f70792df84e32a2a746f585213373f900b42162"}, +] [[package]] name = "certifi" @@ -295,9 +308,10 @@ testing = ["hatch", "pre-commit", "pytest", "tox"] name = "frozenlist" version = "1.8.0" description = "A list-like structure which implements collections.abc.MutableSequence" -optional = false +optional = true python-versions = ">=3.9" -groups = ["main", "dev"] +groups = ["main"] +markers = "extra == \"aiohttp\"" files = [ {file = "frozenlist-1.8.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:b37f6d31b3dcea7deb5e9696e529a6aa4a898adc33db82da12e4c60a7c4d2011"}, {file = "frozenlist-1.8.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:ef2b7b394f208233e471abc541cc6991f907ffd47dc72584acee3147899d6565"}, @@ -430,7 +444,6 @@ files = [ {file = "frozenlist-1.8.0-py3-none-any.whl", hash = "sha256:0c18a16eab41e82c295618a77502e17b195883241c563b00f0aa5106fc4eaa0d"}, {file = "frozenlist-1.8.0.tar.gz", hash = "sha256:3ede829ed8d842f6cd48fc7081d7a41001a56f1f38603f9d49bf3020d59a31ad"}, ] -markers = {main = "extra == \"aiohttp\""} [[package]] name = "h11" @@ -514,7 +527,7 @@ version = "3.19" description = "Internationalized Domain Names in Applications (IDNA)" optional = false python-versions = ">=3.9" -groups = ["main", "dev"] +groups = ["main"] files = [ {file = "idna-3.19-py3-none-any.whl", hash = "sha256:815e7be7a7806d54abb586dc943addc79e8b2ee16915059658cbeff4b1b43bf4"}, {file = "idna-3.19.tar.gz", hash = "sha256:5e0811a4383b21dc5838069f801c4fb62113b7447663d2530d2bd6e77b49bf15"}, @@ -539,9 +552,10 @@ files = [ name = "multidict" version = "6.7.1" description = "multidict implementation" -optional = false +optional = true python-versions = ">=3.9" -groups = ["main", "dev"] +groups = ["main"] +markers = "extra == \"aiohttp\"" files = [ {file = "multidict-6.7.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:c93c3db7ea657dd4637d57e74ab73de31bccefe144d3d4ce370052035bc85fb5"}, {file = "multidict-6.7.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:974e72a2474600827abaeda71af0c53d9ebbc3c2eb7da37b37d7829ae31232d8"}, @@ -690,7 +704,6 @@ files = [ {file = "multidict-6.7.1-py3-none-any.whl", hash = "sha256:55d97cc6dae627efa6a6e548885712d4864b81110ac76fa4e534c03819fa4a56"}, {file = "multidict-6.7.1.tar.gz", hash = "sha256:ec6652a1bee61c53a3e5776b6049172c53b6aaba34f18c9ad04f82712bac623d"}, ] -markers = {main = "extra == \"aiohttp\""} [package.dependencies] typing-extensions = {version = ">=4.1.0", markers = "python_version < \"3.11\""} @@ -793,9 +806,10 @@ testing = ["coverage", "pytest", "pytest-benchmark"] name = "propcache" version = "0.5.2" description = "Accelerated property cache" -optional = false +optional = true python-versions = ">=3.10" -groups = ["main", "dev"] +groups = ["main"] +markers = "extra == \"aiohttp\"" files = [ {file = "propcache-0.5.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:d5a81be28596d6559f6131ef33e10200de6e17643b3c74ce03f9eb103be6ae8b"}, {file = "propcache-0.5.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:29cbaac5ea0212663e6845e04b5e188d5a6ae6dd919810ac835bf1d3b42c3f4c"}, @@ -919,23 +933,22 @@ files = [ {file = "propcache-0.5.2-py3-none-any.whl", hash = "sha256:be1ddfcbb376e3de5d2e2db1d58d6d67463e6b4f9f040c000de8e300295465fe"}, {file = "propcache-0.5.2.tar.gz", hash = "sha256:01c4fc7480cd0598bb4b57022df55b9ca296da7fc5a8760bd8451a7e63a7d427"}, ] -markers = {main = "extra == \"aiohttp\""} [[package]] name = "pydantic" -version = "2.13.4" +version = "2.13.5" description = "Data validation using Python type hints" optional = false python-versions = ">=3.9" groups = ["main"] files = [ - {file = "pydantic-2.13.4-py3-none-any.whl", hash = "sha256:45a282cde31d808236fd7ea9d919b128653c8b38b393d1c4ab335c62924d9aba"}, - {file = "pydantic-2.13.4.tar.gz", hash = "sha256:c40756b57adaa8b1efeeced5c196f3f3b7c435f90e84ea7f443901bec8099ef6"}, + {file = "pydantic-2.13.5-py3-none-any.whl", hash = "sha256:346a034f080da3755d8e9cb5e00e8b07de1d39e4f6e2c87d8ab7cafa0b269a73"}, + {file = "pydantic-2.13.5.tar.gz", hash = "sha256:51a9c5f7b2f8e636f04c6cada605d9b6a3bf1348fdf945a3d8869b19bba0ee08"}, ] [package.dependencies] annotated-types = ">=0.6.0" -pydantic-core = "2.46.4" +pydantic-core = "2.46.5" typing-extensions = ">=4.14.1" typing-inspection = ">=0.4.2" @@ -945,195 +958,195 @@ timezone = ["tzdata ; python_version >= \"3.9\" and platform_system == \"Windows [[package]] name = "pydantic-core" -version = "2.46.4" +version = "2.46.5" description = "Core functionality for Pydantic validation and serialization" optional = false python-versions = ">=3.9" groups = ["main"] files = [ - {file = "pydantic_core-2.46.4-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:a396dcc17e5a0b164dbe026896245a4fa9ff402edca1dff0be3d53a517f74de4"}, - {file = "pydantic_core-2.46.4-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:da4b951fe36dc7c3a1ccb4e3cd1747c3542b8c9ceede8fc86cae054e764485f5"}, - {file = "pydantic_core-2.46.4-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bb63e0198ca18aad131c089b9204c23079c3afa95487e561f4c522d519e55aba"}, - {file = "pydantic_core-2.46.4-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:f47286a97f0bc9b8859519809077b91b2cefe4ae47fcbf5e466a009c1c5d742b"}, - {file = "pydantic_core-2.46.4-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:905a0ed8ea6f2d61c1738835f99b699348d7857379083e5fc497fa0c967a407c"}, - {file = "pydantic_core-2.46.4-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ea793e075b70290d89d8142074262885d3f7da19634845135751bd6344f73b50"}, - {file = "pydantic_core-2.46.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:395aebd9183f9d112f569aeb5b2214d1a10a33bec8456447f7fbdfa51d38d4cd"}, - {file = "pydantic_core-2.46.4-cp310-cp310-manylinux_2_31_riscv64.whl", hash = "sha256:b078afbc25f3a1436c7a1d2cd3e322497ee99615ba97c563566fdf46aff1ee01"}, - {file = "pydantic_core-2.46.4-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:f747929cf940cddb5b3668a390056ddd5ba2e5010615ea2dcf4f9c4f3ab8791d"}, - {file = "pydantic_core-2.46.4-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:daa27d92c36f24388fe3ad306b174781c747627f134452e4f128ea00ce1fe8c4"}, - {file = "pydantic_core-2.46.4-cp310-cp310-musllinux_1_1_armv7l.whl", hash = "sha256:19e51f073cd3df251856a8a4189fbdf1de4012c3ebacfb1884f94f1eb406079f"}, - {file = "pydantic_core-2.46.4-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:c1747f85cee84c26985853c6f3d9bd3e75da5212912443fa111c113b9c246f39"}, - {file = "pydantic_core-2.46.4-cp310-cp310-win32.whl", hash = "sha256:2f84c03c8607173d16b5a854ec68a2f9079ae03237a54fb506d13af47e1d018d"}, - {file = "pydantic_core-2.46.4-cp310-cp310-win_amd64.whl", hash = "sha256:8358a950c8909158e3df31538a7e4edc2d7265a7c54b47f0864d9e5bae9dcebf"}, - {file = "pydantic_core-2.46.4-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:0e96592440881c74a213e5ad528e2b24d3d4f940de2766bed9010ab1d9e51594"}, - {file = "pydantic_core-2.46.4-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:e0d65b8c354be7fb5f720c3caa8bc940bc2d20ce749c8e06135f07f8ed95dd7c"}, - {file = "pydantic_core-2.46.4-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7bfb192b3f4b9e8a89b6277b6ce787564f62cfd272055f6e685726b111dc7826"}, - {file = "pydantic_core-2.46.4-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:9037063db01f09b09e237c282b6792bd4da634b5402c4e7f0c61effed7701a04"}, - {file = "pydantic_core-2.46.4-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:fc010ab034c8c7452522748bf937df58020d256ccae0874463d1f4d01758af8e"}, - {file = "pydantic_core-2.46.4-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8c5dac79fa1614d1e06ca695109c6105923bd9c7d1d6c918d4e637b7e6b32fd3"}, - {file = "pydantic_core-2.46.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f9fa868638bf362d3d138ea55829cefb3d5f4b0d7f142234382a15e2485dbec4"}, - {file = "pydantic_core-2.46.4-cp311-cp311-manylinux_2_31_riscv64.whl", hash = "sha256:17299feefe090f2caa5b8e37222bb5f663e4935a8bfa6931d4102e5df1a9f398"}, - {file = "pydantic_core-2.46.4-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:4c63ebc82684aa89d9a3bcbd13d515b3be44250dc68dd3bd81526c1cb31286c3"}, - {file = "pydantic_core-2.46.4-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:aaa2a54443eff1950ba5ddc6b6ccda0d9c84a364276a62f969bdf2a390650848"}, - {file = "pydantic_core-2.46.4-cp311-cp311-musllinux_1_1_armv7l.whl", hash = "sha256:18e5ceec2ab67e6d5f1a9085e5a24c9c4e2ac4545730bfe668680bca05e555f3"}, - {file = "pydantic_core-2.46.4-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:a0f62d0a58f4e7da165457e995725421e0064f2255d8eccebc49f41bbc23b109"}, - {file = "pydantic_core-2.46.4-cp311-cp311-win32.whl", hash = "sha256:041bde0a48fd37cf71cab1c9d56d3e8625a3793fef1f7dd232b3ff37e978ecda"}, - {file = "pydantic_core-2.46.4-cp311-cp311-win_amd64.whl", hash = "sha256:6f2eeda33a839975441c86a4119e1383c50b47faf0cbb5176985565c6bb02c33"}, - {file = "pydantic_core-2.46.4-cp311-cp311-win_arm64.whl", hash = "sha256:14f4c5d6db102bd796a627bbb3a17b4cf4574b9ae861d8b7c9a9661c6dd3362d"}, - {file = "pydantic_core-2.46.4-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:3245406455a5d98187ec35530fd772b1d799b26667980872c8d4614991e2c4a2"}, - {file = "pydantic_core-2.46.4-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:962ccbab7b642487b1d8b7df90ef677e03134cf1fd8880bf698649b22a69371f"}, - {file = "pydantic_core-2.46.4-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8233f2947cf85404441fd7e0085f53b10c93e0ee78611099b5c7237e36aacbf7"}, - {file = "pydantic_core-2.46.4-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:3a233125ac121aa3ffba9a2b59edfc4a985a76092dc8279586ab4b71390875e7"}, - {file = "pydantic_core-2.46.4-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5b712b53160b79a5850310b912a5ef8e57e56947c8ad690c227f5c9d7e561712"}, - {file = "pydantic_core-2.46.4-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9401557acd873c3a7f3eb9383edef8ac4968f9510e340f4808d427e75667e7b4"}, - {file = "pydantic_core-2.46.4-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:926c9541b14b12b1681dca8a0b75feb510b06c6341b70a8e500c2fdcff837cce"}, - {file = "pydantic_core-2.46.4-cp312-cp312-manylinux_2_31_riscv64.whl", hash = "sha256:56cb4851bcaf3d117eddcef4fe66afd750a50274b0da8e22be256d10e5611987"}, - {file = "pydantic_core-2.46.4-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:c68fcd102d71ea85c5b2dfac3f4f8476eff42a9e078fd5faefff6d145063536b"}, - {file = "pydantic_core-2.46.4-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:b2f69dec1725e79a012d920df1707de5caf7ed5e08f3be4435e25803efc47458"}, - {file = "pydantic_core-2.46.4-cp312-cp312-musllinux_1_1_armv7l.whl", hash = "sha256:8d0820e8192167f80d88d64038e609c31452eeca865b4e1d9950a27a4609b00b"}, - {file = "pydantic_core-2.46.4-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:fbdb89b3e1c94a30cc5edfce477c6e6a5dc4d8f84665b455c27582f211a1c72c"}, - {file = "pydantic_core-2.46.4-cp312-cp312-win32.whl", hash = "sha256:9aa768456404a8bf48a4406685ac2bec8e72b62c69313734fa3b73cf33b3a894"}, - {file = "pydantic_core-2.46.4-cp312-cp312-win_amd64.whl", hash = "sha256:e9c26f834c65f5752f3f06cb08cb86a913ceb7274d0db6e267808a708b46bc89"}, - {file = "pydantic_core-2.46.4-cp312-cp312-win_arm64.whl", hash = "sha256:4fc73cb559bdb54b1134a706a2802a4cddd27a0633f5abb7e53056268751ac6a"}, - {file = "pydantic_core-2.46.4-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:5d5902252db0d3cedf8d4a1bc68f70eeb430f7e4c7104c8c476753519b423008"}, - {file = "pydantic_core-2.46.4-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:c94f0688e7b8d0a67abf40e57a7eaaecd17cc9586706a31b76c031f63df052b4"}, - {file = "pydantic_core-2.46.4-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f027324c56cd5406ca49c124b0db10e56c69064fec039acc571c29020cc87c76"}, - {file = "pydantic_core-2.46.4-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:e739fee756ba1010f8bcccb534252e85a35fe45ae92c295a06059ce58b74ccd3"}, - {file = "pydantic_core-2.46.4-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9d56801be94b86a9da183e5f3766e6310752b99ff647e38b09a9500d88e46e76"}, - {file = "pydantic_core-2.46.4-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2412e734dcb48da14d4e4006b82b46b74f2518b8a26ee7e58c6844a6cd6d03c4"}, - {file = "pydantic_core-2.46.4-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9551187363ffc0de2a00b2e47c25aeaeb1020b69b668762966df15fc5659dd5a"}, - {file = "pydantic_core-2.46.4-cp313-cp313-manylinux_2_31_riscv64.whl", hash = "sha256:0186750b482eefa11d7f435892b09c5c606193ef3375bcf94aa00ae6bfb66262"}, - {file = "pydantic_core-2.46.4-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:5855698a4856556d86e8e6cd8434bc3ac0314ee8e12089ae0e143f64c6256e4e"}, - {file = "pydantic_core-2.46.4-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:cbaf13819775b7f769bf4a1f066cb6df7a28d4480081a589828ef190226881cd"}, - {file = "pydantic_core-2.46.4-cp313-cp313-musllinux_1_1_armv7l.whl", hash = "sha256:633147d34cf4550417f12e2b1a0383973bdf5cdfde212cb09e9a581cf10820be"}, - {file = "pydantic_core-2.46.4-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:82cf5301172168103724d49a1444d3378cb20cdee30b116a1bd6031236298a5d"}, - {file = "pydantic_core-2.46.4-cp313-cp313-win32.whl", hash = "sha256:9fa8ae11da9e2b3126c6426f147e0fba88d96d65921799bb30c6abd1cb2c97fb"}, - {file = "pydantic_core-2.46.4-cp313-cp313-win_amd64.whl", hash = "sha256:6b3ace8194b0e5204818c92802dcdca7fc6d88aabbb799d7c795540d9cd6d292"}, - {file = "pydantic_core-2.46.4-cp313-cp313-win_arm64.whl", hash = "sha256:184c081504d17f1c1066e430e117142b2c77d9448a97f7b65c6ac9fd9aee238d"}, - {file = "pydantic_core-2.46.4-cp314-cp314-macosx_10_12_x86_64.whl", hash = "sha256:428e04521a40150c85216fc8b85e8d39fece235a9cf5e383761238c7fa9b96fb"}, - {file = "pydantic_core-2.46.4-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:23ace664830ee0bfe014a0c7bc248b1f7f25ed7ad103852c317624a1083af462"}, - {file = "pydantic_core-2.46.4-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ce5c1d2a8b27468f433ca974829c44060b8097eedc39933e3c206a90ee49c4a9"}, - {file = "pydantic_core-2.46.4-cp314-cp314-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:7283d57845ecf5a163403eb0702dfc220cc4fbdd18919cb5ccea4f95ee1cdab4"}, - {file = "pydantic_core-2.46.4-cp314-cp314-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8daafc69c93ee8a0204506a3b6b30f586ef54028f52aeeeb5c4cfc5184fd5914"}, - {file = "pydantic_core-2.46.4-cp314-cp314-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:cd2213145bcc2ba85884d0ac63d222fece9209678f77b9b4d76f054c561adb28"}, - {file = "pydantic_core-2.46.4-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7a5f930472650a82629163023e630d160863fce524c616f4e5186e5de9d9a49b"}, - {file = "pydantic_core-2.46.4-cp314-cp314-manylinux_2_31_riscv64.whl", hash = "sha256:c1b3f518abeca3aa13c712fd202306e145abf59a18b094a6bafb2d2bbf59192c"}, - {file = "pydantic_core-2.46.4-cp314-cp314-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:1a7dd0b3ee80d90150e3495a3a13ac34dbcbfd4f012996a6a1d8900e91b5c0fb"}, - {file = "pydantic_core-2.46.4-cp314-cp314-musllinux_1_1_aarch64.whl", hash = "sha256:3fb702cd90b0446a3a1c5e470bfa0dd23c0233b676a9099ddcc964fa6ca13898"}, - {file = "pydantic_core-2.46.4-cp314-cp314-musllinux_1_1_armv7l.whl", hash = "sha256:b8458003118a712e66286df6a707db01c52c0f52f7db8e4a38f0da1d3b94fc4e"}, - {file = "pydantic_core-2.46.4-cp314-cp314-musllinux_1_1_x86_64.whl", hash = "sha256:372429a130e469c9cd698925ce5fc50940b7a1336b0d82038e63d5bbc4edc519"}, - {file = "pydantic_core-2.46.4-cp314-cp314-win32.whl", hash = "sha256:85bb3611ff1802f3ee7fdd7dbff26b56f343fb432d57a4728fdd49b6ef35e2f4"}, - {file = "pydantic_core-2.46.4-cp314-cp314-win_amd64.whl", hash = "sha256:811ff8e9c313ab425368bcbb36e5c4ebd7108c2bbf4e4089cfbb0b01eff63fac"}, - {file = "pydantic_core-2.46.4-cp314-cp314-win_arm64.whl", hash = "sha256:bfec22eab3c8cc2ceec0248aec886624116dc079afa027ecc8ad4a7e62010f8a"}, - {file = "pydantic_core-2.46.4-cp314-cp314t-macosx_10_12_x86_64.whl", hash = "sha256:af8244b2bef6aaad6d92cda81372de7f8c8d36c9f0c3ea36e827c60e7d9467a0"}, - {file = "pydantic_core-2.46.4-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:5a4330cdbc57162e4b3aa303f588ba752257694c9c9be3e7ebb11b4aca659b5d"}, - {file = "pydantic_core-2.46.4-cp314-cp314t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:29c61fc04a3d840155ff08e475a04809278972fe6aef51e2720554e96367e34b"}, - {file = "pydantic_core-2.46.4-cp314-cp314t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:c50f2528cf200c5eed56faf3f4e22fcd5f38c157a8b78576e6ba3168ec35f000"}, - {file = "pydantic_core-2.46.4-cp314-cp314t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:0cbe8b01f948de4286c74cdd6c667aceb38f5c1e26f0693b3983d9d74887c65e"}, - {file = "pydantic_core-2.46.4-cp314-cp314t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:617d7e2ca7dcb8c5cf6bcb8c59b8832c94b36196bbf1cbd1bfb56ed341905edd"}, - {file = "pydantic_core-2.46.4-cp314-cp314t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7027560ee92211647d0d34e3f7cd6f50da56399d26a9c8ad0da286d3869a53f3"}, - {file = "pydantic_core-2.46.4-cp314-cp314t-manylinux_2_31_riscv64.whl", hash = "sha256:f99626688942fb746e545232e7726926f3be91b5975f8b55327665fafda991c7"}, - {file = "pydantic_core-2.46.4-cp314-cp314t-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:fc3e9034a63de20e15e8ade85358bc6efc614008cab72898b4b4952bea0509ff"}, - {file = "pydantic_core-2.46.4-cp314-cp314t-musllinux_1_1_aarch64.whl", hash = "sha256:97e7cf2be5c77b7d1a9713a05605d49460d02c6078d38d8bef3cbe323c548424"}, - {file = "pydantic_core-2.46.4-cp314-cp314t-musllinux_1_1_armv7l.whl", hash = "sha256:3bf92c5d0e00fefaab325a4d27828fe6b6e2a21848686b5b60d2d9eeb09d76c6"}, - {file = "pydantic_core-2.46.4-cp314-cp314t-musllinux_1_1_x86_64.whl", hash = "sha256:3ecbc122d18468d06ca279dc26a8c2e2d5acb10943bb35e36ae92096dc3b5565"}, - {file = "pydantic_core-2.46.4-cp314-cp314t-win32.whl", hash = "sha256:e846ae7835bf0703ae43f534ab79a867146dadd59dc9ca5c8b53d5c8f7c9ef02"}, - {file = "pydantic_core-2.46.4-cp314-cp314t-win_amd64.whl", hash = "sha256:2108ba5c1c1eca18030634489dc544844144ee36357f2f9f780b93e7ddbb44b5"}, - {file = "pydantic_core-2.46.4-cp314-cp314t-win_arm64.whl", hash = "sha256:4fcbe087dbc2068af7eda3aa87634eba216dbda64d1ae73c8684b621d33f6596"}, - {file = "pydantic_core-2.46.4-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:fd8b3d9fd264be37976686c7f65cd52a83f5e84f4bfd2adf9c1d469676bbb6ae"}, - {file = "pydantic_core-2.46.4-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:9f444c499b3eefd3a92e348059471ea0c3a6e303d9c1cec09fa748fd9f895201"}, - {file = "pydantic_core-2.46.4-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3447661d99f75a3683a4cf5c87da72f2161964611864dbbeac7fbb118bb4bfc0"}, - {file = "pydantic_core-2.46.4-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:8b9bab013d1c7a79d3501ff86d0bc9c31bf587db4551677b96bec07df78c6b15"}, - {file = "pydantic_core-2.46.4-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d995260fdf4e1db774581b4900e0f832abe3c7c84996726bbc161b19c8f29e76"}, - {file = "pydantic_core-2.46.4-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f13a646d65d09fbf1bc6b3a9635d30095c8e7e5cc419ff35ecc563c5fd04cd49"}, - {file = "pydantic_core-2.46.4-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:432c179df7874eeb73307aad2df0755e1ae0efa61ff0ea89b93e194411ae3928"}, - {file = "pydantic_core-2.46.4-cp39-cp39-manylinux_2_31_riscv64.whl", hash = "sha256:e68b7a074f65a2fd746c52a7ce6142ab7006074ac269ace0c25cd8ba171f8066"}, - {file = "pydantic_core-2.46.4-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:4a05d69cba51d852c5c3e92758653245a50c0b646ced0cf05bd793ed592839d6"}, - {file = "pydantic_core-2.46.4-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:228ee9bae8bef5b1e97ec58302f80357c37199e0d0a99174e138d28e6957b9d9"}, - {file = "pydantic_core-2.46.4-cp39-cp39-musllinux_1_1_armv7l.whl", hash = "sha256:10e17cbb10a330363733efc4d7c4d0dd827ac0909b8f6a6542298fed1ea62f29"}, - {file = "pydantic_core-2.46.4-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:91a06d2e259ecfbd8c901d70c3c507900458498142b3026a296b7de4d1322cc9"}, - {file = "pydantic_core-2.46.4-cp39-cp39-win32.whl", hash = "sha256:d80ee3d731373b24cebbc10d689ca4ee1875caf0d5703a245db18efd4dd37fc1"}, - {file = "pydantic_core-2.46.4-cp39-cp39-win_amd64.whl", hash = "sha256:3be77f45df024d789a672ae34f8b06fb346c4f9f46ea714956660ea4862e89ac"}, - {file = "pydantic_core-2.46.4-graalpy311-graalpy242_311_native-macosx_10_12_x86_64.whl", hash = "sha256:14d4edf427bdcf950a8a02d7cb44a08614388dd6e1bdcbf4f67504fa7887da9c"}, - {file = "pydantic_core-2.46.4-graalpy311-graalpy242_311_native-macosx_11_0_arm64.whl", hash = "sha256:0ce40cd7b21210e99342afafbd4d0f76d784eb5b1d60f3bdc566be4983c6c73b"}, - {file = "pydantic_core-2.46.4-graalpy311-graalpy242_311_native-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:90884113d8b48f760e9587002789ddd741e76ab9f89518cd1e43b1f1a52ec44b"}, - {file = "pydantic_core-2.46.4-graalpy311-graalpy242_311_native-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:66ce7632c22d837c95301830e111ad0128a32b8207533b60896a96c4915192ea"}, - {file = "pydantic_core-2.46.4-graalpy312-graalpy250_312_native-macosx_10_12_x86_64.whl", hash = "sha256:1d8ba486450b14f3b1d63bc521d410ec7565e52f887b9fb671791886436a42f7"}, - {file = "pydantic_core-2.46.4-graalpy312-graalpy250_312_native-macosx_11_0_arm64.whl", hash = "sha256:3009f12e4e90b7f88b4f9adb1b0c4a3d58fe7820f3238c190047209d148026df"}, - {file = "pydantic_core-2.46.4-graalpy312-graalpy250_312_native-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ad785e92e6dc634c21555edc8bd6b64957ab844541bcb96a1366c202951ae526"}, - {file = "pydantic_core-2.46.4-graalpy312-graalpy250_312_native-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:00c603d540afdd6b80eb39f078f33ebd46211f02f33e34a32d9f053bba711de0"}, - {file = "pydantic_core-2.46.4-pp311-pypy311_pp73-macosx_10_12_x86_64.whl", hash = "sha256:0c563b08bca408dc7f65f700633d8442fffb2421fc47b8101377e9fd65051ff0"}, - {file = "pydantic_core-2.46.4-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:db06ffe51636ffe9ca531fe9023dd64bdd794be8754cb5df57c5498ae5b518a7"}, - {file = "pydantic_core-2.46.4-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:133878133d271ade3d41d1bfb2a45ec38dbdbda40bc065921c6b04e4630127e2"}, - {file = "pydantic_core-2.46.4-pp311-pypy311_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:9bc519fbf2b7578398853d815009ae5e4d4603d12f4e3f91da8c06852d3da3e9"}, - {file = "pydantic_core-2.46.4-pp311-pypy311_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:c7a7bd4e39e8e4c12c39cd480356842b6a8a06e41b23a55a5e3e191718838ddf"}, - {file = "pydantic_core-2.46.4-pp311-pypy311_pp73-musllinux_1_1_armv7l.whl", hash = "sha256:d396ec2b979760aaf3218e76c24e65bd0aca24983298653b3a9d7a45f9e47b30"}, - {file = "pydantic_core-2.46.4-pp311-pypy311_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:86e1a4418c6cd97d60c95c71164158eaf7324fae7b0923264016baa993eba6fc"}, - {file = "pydantic_core-2.46.4-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:d51026d73fcfd93610abc7b27789c26b313920fcfb20e27462d74a7f8b06e983"}, - {file = "pydantic_core-2.46.4.tar.gz", hash = "sha256:62f875393d7f270851f20523dd2e29f082bcc82292d66db2b64ea71f64b6e1c1"}, + {file = "pydantic_core-2.46.5-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:657b40d6240c0a7b6a64b30f22d1e3aa631c7e846c621b0c0f6d1d75e2e15ea6"}, + {file = "pydantic_core-2.46.5-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:ecb42011e12ee19cafbc312887cbf3546959fe02fbad44f272d4be5baa997615"}, + {file = "pydantic_core-2.46.5-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4dedce55295becb61921e386b99d4f2706045306e7fa52249a33004c837379fb"}, + {file = "pydantic_core-2.46.5-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:9f47b8a949e60f027f0aa0a6f6c7b7e9c55cbf4380d10b344e282fa4e7ab1e1b"}, + {file = "pydantic_core-2.46.5-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:200aa3dc9f8d54f0754f43247c0bad0999fdcfbfd2488384dd44f37279271fe6"}, + {file = "pydantic_core-2.46.5-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:6d30e1a4f138b8951063e9a394752a9179b51da288ffa507b1e659222f4c1793"}, + {file = "pydantic_core-2.46.5-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:850a08d167dde16db8702c274f320c7be9d7da6f6dff2b58b18f9e815bd94f5b"}, + {file = "pydantic_core-2.46.5-cp310-cp310-manylinux_2_31_riscv64.whl", hash = "sha256:c3471e5c4a949c26ec00a77f01df59096aa9495877de76fd60a980f8ee6be461"}, + {file = "pydantic_core-2.46.5-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:3a3e26b6a8274211bddee2d0e4d0d42778f17a34510f49d2ec44b58abfc41736"}, + {file = "pydantic_core-2.46.5-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:fc5d783bd4a2387e97b8a2d5ec781cfb92b3d893bf82370548e99db5915935d3"}, + {file = "pydantic_core-2.46.5-cp310-cp310-musllinux_1_1_armv7l.whl", hash = "sha256:356c8368cbc321050b169595683a2e1d63413b1e0e2868b330af9fc14c616d3f"}, + {file = "pydantic_core-2.46.5-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:eb7d8d0e5886a89a55d2eef490e272fa965a9d57c6b29a5b5088a7997ec2cad1"}, + {file = "pydantic_core-2.46.5-cp310-cp310-win32.whl", hash = "sha256:4d44cf99ddebf875f9b68cc267aa684c99b7b44fe63ee1cac4ec163807290069"}, + {file = "pydantic_core-2.46.5-cp310-cp310-win_amd64.whl", hash = "sha256:1e5aad1220a1192c42341c8fd4a8686657e73ab2a920c970bdc4de334fe3193d"}, + {file = "pydantic_core-2.46.5-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:a1dee1b804ff4d11c663636cf15d2ea47e9f79cd56c033fb1cbf08924842a48f"}, + {file = "pydantic_core-2.46.5-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:d625a186a65201c23a9e3b8ed9c47e90a026e03256608cc91851c6709096844f"}, + {file = "pydantic_core-2.46.5-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4f8507560a9284e1370bb048ed4282012fbef4e8d109875b95e884d228552061"}, + {file = "pydantic_core-2.46.5-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:5f93c5fe914d75fbec9a49209b00da5f08e9e467d69da2b1510c81940cfd10be"}, + {file = "pydantic_core-2.46.5-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:aca6c767f552b21b10f774aeac128e828eafb796adfa1b666a18bf6321453c3a"}, + {file = "pydantic_core-2.46.5-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:701b2e04b560eeb4bddf7a25ab8ca476176e34fdbd9a0e18196f0d12d4685f0b"}, + {file = "pydantic_core-2.46.5-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:49776eab08766a08dfff7012f8b422dcd7e25e43b316eedf0477c24fcfa84b7c"}, + {file = "pydantic_core-2.46.5-cp311-cp311-manylinux_2_31_riscv64.whl", hash = "sha256:a2468d93d181667a7abd66e1b64bb9f76f361b0fef8faddf687456453576f5ee"}, + {file = "pydantic_core-2.46.5-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:53feb344243bb9510a9dec7bf3cf1b64d88a98af5dc7872a5160465f8b198c8e"}, + {file = "pydantic_core-2.46.5-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:cd5214352ae68f3b5e9af7768bdc5253695ee069675db3480518420b3be881f2"}, + {file = "pydantic_core-2.46.5-cp311-cp311-musllinux_1_1_armv7l.whl", hash = "sha256:9432f3598db432cb51c5b37fdbf29a60fcccc79e30d37a05022776a6bc4ab689"}, + {file = "pydantic_core-2.46.5-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:8feeac04b5794e513e710af2f9c87d49f31a6dc47967bb264a1fed61a8989bec"}, + {file = "pydantic_core-2.46.5-cp311-cp311-win32.whl", hash = "sha256:892a881d5f68c2b9ea304b7a6c2c60d9343df578a311b0f86b94bc8f1ffe8129"}, + {file = "pydantic_core-2.46.5-cp311-cp311-win_amd64.whl", hash = "sha256:40375c2d05acec10323e45dfe2077ac44bc74659008614af5069034e2cfc781c"}, + {file = "pydantic_core-2.46.5-cp311-cp311-win_arm64.whl", hash = "sha256:28a6a556cd3b6066bea827857f9d9cce027c96f776e512f544a581f9e42161f8"}, + {file = "pydantic_core-2.46.5-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:b9fe6fb92520e3fd61f2e49000b6911b188824f089b75973ea06d6267f0b476d"}, + {file = "pydantic_core-2.46.5-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:a39ac25a9a2fa4072efdb429833c4a4c8009a51ff9eea3eeae131713cd27991e"}, + {file = "pydantic_core-2.46.5-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4fdc8b93a41521988916eeaa271173fcca7fa0803d62f87675aac8dcec1c8e29"}, + {file = "pydantic_core-2.46.5-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:b98134087d9de723658d17a42c7d0da8d6e2ef08015dee7dc93889047315f5e4"}, + {file = "pydantic_core-2.46.5-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e652ab17569c94bff5475520f907b7148b8c24036a8ebbe5cf7cf7493d28579a"}, + {file = "pydantic_core-2.46.5-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d925f3d9afd05a8c0fb3a1031463a8d59ebe5e2afad297e29c78be19e13b4e62"}, + {file = "pydantic_core-2.46.5-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0fc5be0abd4a407e200d844b404e33639a554e7bd0d448e7b9ae181be4789ac2"}, + {file = "pydantic_core-2.46.5-cp312-cp312-manylinux_2_31_riscv64.whl", hash = "sha256:816ff0a6550ffc06c098ccd2e0698600f9aa7da192a79eaa6f9af504a35db869"}, + {file = "pydantic_core-2.46.5-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:c7ea57fc63aa7da93a1bd2d644e6577befae10c52c4e36377635eea1056a74f5"}, + {file = "pydantic_core-2.46.5-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:efd62a42486f1bda5d24cb4f63d15a3c7768375fe83d36f9417b4ad7a2fb20b3"}, + {file = "pydantic_core-2.46.5-cp312-cp312-musllinux_1_1_armv7l.whl", hash = "sha256:2bc9419666990c06d7397831f2126a1ecc3594aaa3ff7de5bf2d066802f4e07b"}, + {file = "pydantic_core-2.46.5-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:18a09e1e1011b462f2e32774f25859ef1223d5c2b0546a633cf56654710721e0"}, + {file = "pydantic_core-2.46.5-cp312-cp312-win32.whl", hash = "sha256:5cb482e9e84c851f4e623fe4acc1ced89168cf1fe18f7089db4548c8f5bbb65b"}, + {file = "pydantic_core-2.46.5-cp312-cp312-win_amd64.whl", hash = "sha256:5e81740c09e310f5aa5cbd3e434a01c154d4bef93241c7877b39f211d2b78ba8"}, + {file = "pydantic_core-2.46.5-cp312-cp312-win_arm64.whl", hash = "sha256:f7b0ec93a2893de856652154d73b7ba622f26fa97726487dcac373de5f4c6084"}, + {file = "pydantic_core-2.46.5-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:b7ca9034437b6022f941f4857459562ee00a560b97e7cce8a0ec5a74fc6766e0"}, + {file = "pydantic_core-2.46.5-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:f332f0e72a5a0400141f830744e141bf9f97917878dbe968669e8a7fefea78ff"}, + {file = "pydantic_core-2.46.5-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:193375f3548919d3f0b60936ca113ada3e38f264f91b9b8e0508efaad57be931"}, + {file = "pydantic_core-2.46.5-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:79bdfa52f843137045b2d081cc05c120ba6665d29b7559c2c47690906f39279f"}, + {file = "pydantic_core-2.46.5-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:24922243639cbdac66c75fcb6fd6495a9cb52b213d62f9a0d16f0310b1ff8038"}, + {file = "pydantic_core-2.46.5-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c76fe65e607be28c7fd4d56fc3c42b1583aa058ce3408b7ad0fd540171d31f9f"}, + {file = "pydantic_core-2.46.5-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6f7b393a8b3da82f5c1fc0751e6d01ac6c55b93c18226a60bdfba4a724efafd1"}, + {file = "pydantic_core-2.46.5-cp313-cp313-manylinux_2_31_riscv64.whl", hash = "sha256:7ac031912d54f3d83ef3b3eb98dfabc1608802e2202263d25957eeed40b94761"}, + {file = "pydantic_core-2.46.5-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:837b396ca3d7b74091ca623f6cbd8351bd42d670a79c2683e79fb089f06a2de5"}, + {file = "pydantic_core-2.46.5-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:5ee239d575f80b08eca11f6e20f90c4c695de7825c67eefe6091fbf20dda648e"}, + {file = "pydantic_core-2.46.5-cp313-cp313-musllinux_1_1_armv7l.whl", hash = "sha256:e80675d75ae2cd14372cb65cad5400d9347a3d3f6c13000183f22dfd027283ed"}, + {file = "pydantic_core-2.46.5-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:9c4b71f10dd532fb7a5cbc8f58707779e64f03a258c2bf8bfbaecfcd9970b519"}, + {file = "pydantic_core-2.46.5-cp313-cp313-win32.whl", hash = "sha256:97bf8de4d541598c94a59344eeb988a94c08ff76b5723c41f6567ec18c7892ea"}, + {file = "pydantic_core-2.46.5-cp313-cp313-win_amd64.whl", hash = "sha256:15f4a94963c95accac15b7b657bb177d3ad82bb90b0d0526d9a9b85079925db5"}, + {file = "pydantic_core-2.46.5-cp313-cp313-win_arm64.whl", hash = "sha256:d22a945598fb91236b4dd793a6e42e4f3dd7740bb5aace5ebd7d4c08d13bb575"}, + {file = "pydantic_core-2.46.5-cp314-cp314-macosx_10_12_x86_64.whl", hash = "sha256:c1c43ad4339643d70ebb8124e1305a7dab423001eff58bb41a0f731adbc98355"}, + {file = "pydantic_core-2.46.5-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:1a353f84de772f423b5ffb11d7ae352fbbef0f446f3c0b0af0f8236d7233606e"}, + {file = "pydantic_core-2.46.5-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5086029a57366b8cf81b130a43908738095c270c21a8d7f0e8bdfdb89718e2f3"}, + {file = "pydantic_core-2.46.5-cp314-cp314-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:46c25dda9d092a06c08db76ffe0a197107904d0dfac653f7d5306bbcd6d6119c"}, + {file = "pydantic_core-2.46.5-cp314-cp314-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:37ea7b83c935e5b0d68c9449b82651accf78a10828b2c02b2f2d9e9496446c21"}, + {file = "pydantic_core-2.46.5-cp314-cp314-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e64e88d5585bea9ce95861079de72006c7fa6d3df4e3a3b65ba31eb979c15c9f"}, + {file = "pydantic_core-2.46.5-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:54d510bac3ee52247af28ed4bb18a1e799f040ac60fd2bf5ccd4c92f1fbe786f"}, + {file = "pydantic_core-2.46.5-cp314-cp314-manylinux_2_31_riscv64.whl", hash = "sha256:a2a5e1d0ff29adddc9f6d6821a66302e4493f8ca898b715b6b1182c2c201ea0a"}, + {file = "pydantic_core-2.46.5-cp314-cp314-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:03b9666e41e35d8909852ba191a0607520f81b74eaf12ccf8737005dbb313821"}, + {file = "pydantic_core-2.46.5-cp314-cp314-musllinux_1_1_aarch64.whl", hash = "sha256:a91c17edf6eea2402cb5457b4c89e99bc5ed1004aa34c4adf1d4258c1a5c22c2"}, + {file = "pydantic_core-2.46.5-cp314-cp314-musllinux_1_1_armv7l.whl", hash = "sha256:b49924c73a235e969511bf2aabdff3beebf9820931f646c80274d5d780010c47"}, + {file = "pydantic_core-2.46.5-cp314-cp314-musllinux_1_1_x86_64.whl", hash = "sha256:2cbd9a5eff05e51c447c34dfa4632145b26b09120cf04bd0c871e44c1a5e1c9a"}, + {file = "pydantic_core-2.46.5-cp314-cp314-win32.whl", hash = "sha256:2d5d76654becf5efd62c9e51c3756c67b49498b0c9a40884934c40807adbd074"}, + {file = "pydantic_core-2.46.5-cp314-cp314-win_amd64.whl", hash = "sha256:fa10ef4112775900e7a0661068635eb67b2ab824fbde764de6e0e21982a93db0"}, + {file = "pydantic_core-2.46.5-cp314-cp314-win_arm64.whl", hash = "sha256:045ab3b6d308439e32b81cc173bba5b9018bc6ed896afd0c65b3b009b1699af5"}, + {file = "pydantic_core-2.46.5-cp314-cp314t-macosx_10_12_x86_64.whl", hash = "sha256:8816f3d218beb4b787de5c9759c259b8fa61f9dec42dc7811f320a33771778b7"}, + {file = "pydantic_core-2.46.5-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:bce57638e08ac148e5778cce7feb968307a727d66f8e2274a543d0cf0c9ad6a3"}, + {file = "pydantic_core-2.46.5-cp314-cp314t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:976e1128455aa595ea04c79ccfedff1aaeab96ee013fcc916bed120c4f0ad94f"}, + {file = "pydantic_core-2.46.5-cp314-cp314t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:e7b891faeedeafba41b2983e5001a81b6a915b69544c7e7570d1989ce1c36ac7"}, + {file = "pydantic_core-2.46.5-cp314-cp314t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5f194189415698233dd1114a093a9b56e61e2c57e11b469be3b0506f46f0771c"}, + {file = "pydantic_core-2.46.5-cp314-cp314t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:82a36973cf8a2ef5406f4fe2edbf8ed0c99629535d959e0b100c76a32535a111"}, + {file = "pydantic_core-2.46.5-cp314-cp314t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cdbb78909f52b981d3b2d56b97328d71eb0b974c36bd77c920123a7ebb192829"}, + {file = "pydantic_core-2.46.5-cp314-cp314t-manylinux_2_31_riscv64.whl", hash = "sha256:52e24eacdb536cade636aa90fb851835222becff8484b7001fdc78cb0290f2aa"}, + {file = "pydantic_core-2.46.5-cp314-cp314t-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:37ae34309d7bd8c0d61ab839668058f2a7962ea1fc51d105d2db228fe0618034"}, + {file = "pydantic_core-2.46.5-cp314-cp314t-musllinux_1_1_aarch64.whl", hash = "sha256:0cdbada856a1c69a7624a64d3d9aefe79300bd6ef827b43a4f265010b9b55184"}, + {file = "pydantic_core-2.46.5-cp314-cp314t-musllinux_1_1_armv7l.whl", hash = "sha256:545f26c504b27c3758439a5e6d9349931f0a04f855668d5fe323c89e82300a38"}, + {file = "pydantic_core-2.46.5-cp314-cp314t-musllinux_1_1_x86_64.whl", hash = "sha256:ff218293c9c806138dca139765e3b067621be52bcd93cdc14c7711be7ddc90a9"}, + {file = "pydantic_core-2.46.5-cp314-cp314t-win32.whl", hash = "sha256:97cf3eb53a8cccacf9d46686a0926186c9bfb5574f2ed66d3639d5fe117cd3a9"}, + {file = "pydantic_core-2.46.5-cp314-cp314t-win_amd64.whl", hash = "sha256:d2f9fc07a8042a8f95925b35c4f04f469707c981fc33245b6ca187cf5d2dd290"}, + {file = "pydantic_core-2.46.5-cp314-cp314t-win_arm64.whl", hash = "sha256:acf8a67ba51f4ca9ddbd0e6b3000a65ac51ab734661778b3e7ba64d99a710f2f"}, + {file = "pydantic_core-2.46.5-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:c583b927a8838dab890706a6fa7573fbb8b70e24000ef9f7238e2d6f6435a5ed"}, + {file = "pydantic_core-2.46.5-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:cdc8b74ecc48c0cb1e9607a05ec4e9e88db60a19ffcc9a1d5f9088ede40c8dc0"}, + {file = "pydantic_core-2.46.5-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8b10e3e8fd7ddc2bd915848a2768e44c15b22936f1cc54c462ad1164deb02655"}, + {file = "pydantic_core-2.46.5-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:f077d0b97ab11fa7dcc633fca53515f290bca8a8a633e966d5b6d1879d9ed01a"}, + {file = "pydantic_core-2.46.5-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:7b0fc826b16c55e561e5d2a0c5c77b051ba1d92808118c4e4b5390f5e0cf191d"}, + {file = "pydantic_core-2.46.5-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ef3fbbf161dc9351a2fe0422e51b129f9e97e42385bd0320b309c15f7d287dd8"}, + {file = "pydantic_core-2.46.5-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:978e7b97d4824b5be09c69fb70507cbde3b0323fc147332ca40a94d9a6a0ebbf"}, + {file = "pydantic_core-2.46.5-cp39-cp39-manylinux_2_31_riscv64.whl", hash = "sha256:9b68938dd5b0c783d88ff8e2dcc69451b5eb936fe212d516b21b9d5567f6d464"}, + {file = "pydantic_core-2.46.5-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:771cf63ae0b1b50dd22e5f3e3549fab5f3f4ff1635d352a9e1a97fe01c7b2e64"}, + {file = "pydantic_core-2.46.5-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:7c6be839a5a8312626b32029a415644a0846b420bc8b52b95b28cd92da162168"}, + {file = "pydantic_core-2.46.5-cp39-cp39-musllinux_1_1_armv7l.whl", hash = "sha256:895395f8918627b04efb1ad2a4cf605387143300ba03304cd1dfa6d03f5e095e"}, + {file = "pydantic_core-2.46.5-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:fc8515076c11f3cfdf4fb142dcca0fe384b1230a3b5415458ac84f3e0903ec13"}, + {file = "pydantic_core-2.46.5-cp39-cp39-win32.whl", hash = "sha256:3d2652072b2d774947ba5cf78a9e59644ac62ee572daf6dd2e1dfe905e15b2b7"}, + {file = "pydantic_core-2.46.5-cp39-cp39-win_amd64.whl", hash = "sha256:3aa166e99c4f2985407fb8714aebede877ecb5455cf321b606adca926d30d5a0"}, + {file = "pydantic_core-2.46.5-graalpy311-graalpy242_311_native-macosx_10_12_x86_64.whl", hash = "sha256:c14ad3bdc85ee7f318742c457ca3968a92126d144b15721c759033bfb06296c2"}, + {file = "pydantic_core-2.46.5-graalpy311-graalpy242_311_native-macosx_11_0_arm64.whl", hash = "sha256:0bddb4020d8f04175865ccd17eff3040874fc11fb593f424edb452653b4b947c"}, + {file = "pydantic_core-2.46.5-graalpy311-graalpy242_311_native-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2471fd51c61c610e1dcf7de44d7299283661654d11264ab4802b303368d69c47"}, + {file = "pydantic_core-2.46.5-graalpy311-graalpy242_311_native-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b10ec717381bdbfafef34607824db4c91de69ff085e4fca3b2af91b4fa17e68a"}, + {file = "pydantic_core-2.46.5-graalpy312-graalpy250_312_native-macosx_10_12_x86_64.whl", hash = "sha256:013d6f3483d81e02e7c328831808f336c8596ee33b4bd4026b9ffb1e960b8942"}, + {file = "pydantic_core-2.46.5-graalpy312-graalpy250_312_native-macosx_11_0_arm64.whl", hash = "sha256:e9c134bb666dd54b778b9fc0d2b50cbb7f979b9e3716f26a88c9ab3b6fc1dd0f"}, + {file = "pydantic_core-2.46.5-graalpy312-graalpy250_312_native-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:347ec774390c87326a2e4929d58d3f7e8763a104d5d35f4cd595a4c952366433"}, + {file = "pydantic_core-2.46.5-graalpy312-graalpy250_312_native-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8e24d8f05fa2d28513d94e877e9c75ad66175376209b3977f916e240e623193c"}, + {file = "pydantic_core-2.46.5-pp311-pypy311_pp73-macosx_10_12_x86_64.whl", hash = "sha256:ab4b66edffb32d9e951efb3814bd104b8367a7501b81b955cacb5726d897389f"}, + {file = "pydantic_core-2.46.5-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:337639ba62a11acde6ef3aeb08c8ea755f8ef1fe5e513356c0f36a2b0d7568b0"}, + {file = "pydantic_core-2.46.5-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:413a717a410d0c817ef5b786a059415550b3794e1d0c2abffd9efb93a3d9f7b4"}, + {file = "pydantic_core-2.46.5-pp311-pypy311_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:1e449def1945a462c464331254e5a44fca7c3b4f9aedf59ec2f50f8066dd8e25"}, + {file = "pydantic_core-2.46.5-pp311-pypy311_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:a445486499897b88a7d6c310c88ed64dd37b1b59bfd7ae9107490bbb362f47d6"}, + {file = "pydantic_core-2.46.5-pp311-pypy311_pp73-musllinux_1_1_armv7l.whl", hash = "sha256:2d330aaba8621b1edcec8ae2c4050f63b84ccf6d98723a8f212e9684713abf0e"}, + {file = "pydantic_core-2.46.5-pp311-pypy311_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:b6acfb46a814762367fb7ba0828b0a17d441b92ce249a0e007474c9072662dda"}, + {file = "pydantic_core-2.46.5-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:d0a24b40877af2de4950252be9d21eaf7fb07660f3c2cae1f56c6b599ada5266"}, + {file = "pydantic_core-2.46.5.tar.gz", hash = "sha256:10416c15b8839ecc4ef4d0885da76da6fd0f67333a0eb8aff6d93c4b8f2910fc"}, ] [package.dependencies] typing-extensions = ">=4.14.1" [[package]] -name = "pyjwt" -version = "2.13.0" -description = "JSON Web Token implementation in Python" +name = "pygments" +version = "2.21.0" +description = "Pygments is a syntax highlighting package written in Python." optional = false python-versions = ">=3.9" groups = ["dev"] files = [ - {file = "pyjwt-2.13.0-py3-none-any.whl", hash = "sha256:66adcc2aff09b3f1bbd95fc1e1577df8ac8723c978552fd43304c8a290ac5728"}, - {file = "pyjwt-2.13.0.tar.gz", hash = "sha256:41571c89ca91598c79e8ef18a2d07367d4810fbbd6f637794879baf1b7703423"}, + {file = "pygments-2.21.0-py3-none-any.whl", hash = "sha256:2363c69b61c4a97c838da3b130dcd6468f4848992b21a82f2a63ec34377137d9"}, + {file = "pygments-2.21.0.tar.gz", hash = "sha256:610ca751c9bc2492b38eb9a38a7fbc93edbbb2d7182edaf34e66ae493dee5c8c"}, ] -[package.dependencies] -typing_extensions = {version = ">=4.0", markers = "python_version < \"3.11\""} - [package.extras] -crypto = ["cryptography (>=3.4.0)"] +windows-terminal = ["colorama (>=0.4.6)"] [[package]] name = "pytest" -version = "7.4.4" +version = "9.1.1" description = "pytest: simple powerful testing with Python" optional = false -python-versions = ">=3.7" +python-versions = ">=3.10" groups = ["dev"] files = [ - {file = "pytest-7.4.4-py3-none-any.whl", hash = "sha256:b090cdf5ed60bf4c45261be03239c2c1c22df034fbffe691abe93cd80cea01d8"}, - {file = "pytest-7.4.4.tar.gz", hash = "sha256:2cf0005922c6ace4a3e2ec8b4080eb0d9753fdc93107415332f50ce9e7994280"}, + {file = "pytest-9.1.1-py3-none-any.whl", hash = "sha256:37a86b45efb9a47a61a36449063e8e18d0cab3161329fc099eb21783169c4f0c"}, + {file = "pytest-9.1.1.tar.gz", hash = "sha256:1088fbde8f2b49d95a549a195707afa7a76a3ce9bcadc26b6d71f0ffda5fe313"}, ] [package.dependencies] -colorama = {version = "*", markers = "sys_platform == \"win32\""} -exceptiongroup = {version = ">=1.0.0rc8", markers = "python_version < \"3.11\""} -iniconfig = "*" -packaging = "*" -pluggy = ">=0.12,<2.0" -tomli = {version = ">=1.0.0", markers = "python_version < \"3.11\""} +colorama = {version = ">=0.4", markers = "sys_platform == \"win32\""} +exceptiongroup = {version = ">=1", markers = "python_version < \"3.11\""} +iniconfig = ">=1.0.1" +packaging = ">=22" +pluggy = ">=1.5,<2" +pygments = ">=2.7.2" +tomli = {version = ">=1", markers = "python_version < \"3.11\""} [package.extras] -testing = ["argcomplete", "attrs (>=19.2.0)", "hypothesis (>=3.56)", "mock", "nose", "pygments (>=2.7.2)", "requests", "setuptools", "xmlschema"] +dev = ["argcomplete", "attrs (>=19.2)", "hypothesis (>=3.56)", "mock", "requests", "setuptools", "xmlschema"] [[package]] name = "pytest-asyncio" -version = "0.23.8" +version = "1.4.0" description = "Pytest support for asyncio" optional = false -python-versions = ">=3.8" +python-versions = ">=3.10" groups = ["dev"] files = [ - {file = "pytest_asyncio-0.23.8-py3-none-any.whl", hash = "sha256:50265d892689a5faefb84df80819d1ecef566eb3549cf915dfb33569359d1ce2"}, - {file = "pytest_asyncio-0.23.8.tar.gz", hash = "sha256:759b10b33a6dc61cce40a8bd5205e302978bbbcc00e279a8b61d9a6a3c82e4d3"}, + {file = "pytest_asyncio-1.4.0-py3-none-any.whl", hash = "sha256:933ca923a23075a87fb7070c0ec272a6848489824d887c85c812670932835aa1"}, + {file = "pytest_asyncio-1.4.0.tar.gz", hash = "sha256:c6c0d2259945122819f171a32ecea2c349ead889ee28176caaf492143424be42"}, ] [package.dependencies] -pytest = ">=7.0.0,<9" +backports-asyncio-runner = {version = ">=1.1,<2", markers = "python_version < \"3.11\""} +pytest = ">=8.4,<10" +typing-extensions = {version = ">=4.12", markers = "python_version < \"3.13\""} [package.extras] -docs = ["sphinx (>=5.3)", "sphinx-rtd-theme (>=1.0)"] +docs = ["sphinx (>=5.3)", "sphinx-rtd-theme (>=1)", "sphinx-tabs (>=3.5)"] testing = ["coverage (>=6.2)", "hypothesis (>=5.7.1)"] [[package]] @@ -1172,26 +1185,6 @@ files = [ [package.dependencies] six = ">=1.5" -[[package]] -name = "redis" -version = "5.3.1" -description = "Python client for Redis database and key-value store" -optional = false -python-versions = ">=3.8" -groups = ["dev"] -files = [ - {file = "redis-5.3.1-py3-none-any.whl", hash = "sha256:dc1909bd24669cc31b5f67a039700b16ec30571096c5f1f0d9d2324bff31af97"}, - {file = "redis-5.3.1.tar.gz", hash = "sha256:ca49577a531ea64039b5a36db3d6cd1a0c7a60c34124d46924a45b956e8cf14c"}, -] - -[package.dependencies] -async-timeout = {version = ">=4.0.3", markers = "python_full_version < \"3.11.3\""} -PyJWT = ">=2.9.0" - -[package.extras] -hiredis = ["hiredis (>=3.0.0)"] -ocsp = ["cryptography (>=36.0.1)", "pyopenssl (==23.2.1)", "requests (>=2.31.0)"] - [[package]] name = "ruff" version = "0.11.5" @@ -1330,158 +1323,31 @@ files = [ typing-extensions = ">=4.15.0" [[package]] -name = "wasmtime" -version = "48.0.0" -description = "A WebAssembly runtime powered by Wasmtime" -optional = true -python-versions = ">=3.9" -groups = ["main"] -markers = "extra == \"datastream\" or extra == \"rulesengine\"" +name = "urllib3" +version = "2.7.0" +description = "HTTP library with thread-safe connection pooling, file post, and more." +optional = false +python-versions = ">=3.10" +groups = ["dev"] files = [ - {file = "wasmtime-48.0.0-py3-none-android_26_arm64_v8a.whl", hash = "sha256:a55abf132fe238b843a963c68cd1a30d8f686c1bc75d8fbf042d8b7a1d51ee36"}, - {file = "wasmtime-48.0.0-py3-none-android_26_x86_64.whl", hash = "sha256:d8e94276ff6c0c5ce73ee16ccbacb00b3512a4b3a664749380705d81ee06a23c"}, - {file = "wasmtime-48.0.0-py3-none-any.whl", hash = "sha256:49c9ee43e9cf59ad7453ac65dce0cc4b885837904dd3cfd45faafe930defe14a"}, - {file = "wasmtime-48.0.0-py3-none-macosx_10_13_x86_64.whl", hash = "sha256:50e1ea81a3bec537d00e076722dfdc48978a56ea24619d8153aa1f75b11796b9"}, - {file = "wasmtime-48.0.0-py3-none-macosx_11_0_arm64.whl", hash = "sha256:ea69889a3c51702e9da5f5f441027ca934f7758f8926a4ed167b0d6877f092e8"}, - {file = "wasmtime-48.0.0-py3-none-manylinux1_x86_64.whl", hash = "sha256:58544d539053dff7bd4cf30c40d7a540862d683013c0dfa6ba46a063f5b682f7"}, - {file = "wasmtime-48.0.0-py3-none-manylinux2014_aarch64.whl", hash = "sha256:26fce3613fefbe29a28e9d659dca3326e800593858e5758cad086eb802b3b766"}, - {file = "wasmtime-48.0.0-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:77f6b75db20be065e205e7af814d4e4f06784c3a00eb346e8c76148ecb4afe5a"}, - {file = "wasmtime-48.0.0-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:62b241c8d5dfb59ff8af1ccaa5351f0ab7aba8cc872f7d80e0e3c95d54c13562"}, - {file = "wasmtime-48.0.0-py3-none-win_amd64.whl", hash = "sha256:21fa500e70f3819a8c0539c3f0be6b3b81ec3c630bb90c47dba4d8a2c1d4c698"}, - {file = "wasmtime-48.0.0-py3-none-win_arm64.whl", hash = "sha256:09cd5e14df80a3a8d447428a548583181c568ea2e617419d23600deff21d4b82"}, - {file = "wasmtime-48.0.0.tar.gz", hash = "sha256:dba27d59209fac703e7d5753af78c2af2c1cd1ed735f520ec76dc31c60a05815"}, + {file = "urllib3-2.7.0-py3-none-any.whl", hash = "sha256:9fb4c81ebbb1ce9531cce37674bbc6f1360472bc18ca9a553ede278ef7276897"}, + {file = "urllib3-2.7.0.tar.gz", hash = "sha256:231e0ec3b63ceb14667c67be60f2f2c40a518cb38b03af60abc813da26505f4c"}, ] [package.extras] -testing = ["coverage", "pycparser", "pytest", "pytest-mypy"] - -[[package]] -name = "websockets" -version = "16.1.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.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"}, -] +brotli = ["brotli (>=1.2.0) ; platform_python_implementation == \"CPython\"", "brotlicffi (>=1.2.0.0) ; platform_python_implementation != \"CPython\""] +h2 = ["h2 (>=4,<5)"] +socks = ["pysocks (>=1.5.6,!=1.5.7,<2.0)"] +zstd = ["backports-zstd (>=1.0.0) ; python_version < \"3.14\""] [[package]] name = "yarl" version = "1.24.5" description = "Yet another URL library" -optional = false +optional = true python-versions = ">=3.10" -groups = ["main", "dev"] +groups = ["main"] +markers = "extra == \"aiohttp\"" files = [ {file = "yarl-1.24.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"}, @@ -1588,7 +1454,6 @@ files = [ {file = "yarl-1.24.5-py3-none-any.whl", hash = "sha256:a33700d13d9b7d84fd10947b09ff69fb9a792e519c8cb9764a3ca70baa6c23a7"}, {file = "yarl-1.24.5.tar.gz", hash = "sha256:e81b83143bee16329c23db3c1b2d82b29892fcbcb849186d2f6e98a5abe9a57f"}, ] -markers = {main = "extra == \"aiohttp\""} [package.dependencies] idna = ">=2.0" @@ -1596,11 +1461,9 @@ multidict = ">=4.0" propcache = ">=0.2.1" [extras] -aiohttp = ["httpx-aiohttp"] -datastream = ["wasmtime", "websockets"] -rulesengine = ["wasmtime"] +aiohttp = ["aiohttp", "httpx-aiohttp"] [metadata] lock-version = "2.1" python-versions = "^3.10" -content-hash = "d12f2b0714d21d258fab37327fffd7eed95cbda40524b341fc8e0479072c5342" +content-hash = "4eaeff06fb8e558535aa3729ed6f99c2398eaaba665bcdf9c096bb08d9cb5fc6" diff --git a/reference.md b/reference.md index 4f48ef7..797fb24 100644 --- a/reference.md +++ b/reference.md @@ -1479,6 +1479,14 @@ client.accounts.update_onboarding_state()
+**dismissed:** `typing.Optional[bool]` + +
+
+ +
+
+ **path:** `typing.Optional[OnboardingPath]`
@@ -16260,6 +16268,14 @@ client.plans.retry_custom_plan_billing(
+**billing_cycle_anchor:** `typing.Optional[datetime.datetime]` — The date the subscription's billing period renews on. Only honored when the retry creates a subscription. + +
+
+ +
+
+ **days_until_due:** `typing.Optional[int]`
@@ -16268,6 +16284,14 @@ client.plans.retry_custom_plan_billing(
+**prorate_first_period:** `typing.Optional[bool]` — When true, the partial period between the subscription starting and its renewal date is billed pro rata straight away. When false that period is free and no invoice is raised until the renewal date. Only applies alongside billing_cycle_anchor. Defaults to true. + +
+
+ +
+
+ **send_invoice:** `typing.Optional[bool]` — Whether Stripe emails the invoice when it is finalized. Defaults to true.
@@ -17566,7 +17590,7 @@ client.plans.publish_plan_version( excluded_company_ids=[ "excluded_company_ids" ], - migration_strategy="immediate", + migration_strategy="end_of_billing_period", ) ``` @@ -17623,6 +17647,14 @@ client.plans.publish_plan_version(
+**billing_cycle_anchor:** `typing.Optional[datetime.datetime]` — The date the subscription's billing period renews on. Only honored on a first publish that starts a subscription. + +
+
+ +
+
+ **coupon_external_id:** `typing.Optional[str]`
@@ -17663,6 +17695,14 @@ client.plans.publish_plan_version(
+**prorate_first_period:** `typing.Optional[bool]` — When true, the partial period between the subscription starting and its renewal date is billed pro rata straight away. When false that period is free and no invoice is raised until the renewal date. Only applies alongside billing_cycle_anchor. Defaults to true. + +
+
+ +
+
+ **proration_behavior:** `typing.Optional[MigrationProrationBehavior]`
@@ -23022,7 +23062,7 @@ client = Schematic( client.planmigrations.list_company_migrations( migration_id="migration_id", q="q", - status="completed", + status="cancelled", limit=1000000, offset=1000000, ) @@ -23176,7 +23216,7 @@ client = Schematic( client.planmigrations.count_company_migrations( migration_id="migration_id", q="q", - status="completed", + status="cancelled", limit=1000000, offset=1000000, ) @@ -23270,7 +23310,7 @@ client = Schematic( client.planmigrations.list_migrations( plan_version_id="plan_version_id", - status="completed", + status="cancelled", limit=1000000, offset=1000000, ) @@ -23357,7 +23397,7 @@ client = Schematic( client.planmigrations.create_migration( plan_id="plan_id", plan_version_id_to="plan_version_id_to", - strategy="immediate", + strategy="end_of_billing_period", target_plan_type="plan", ) @@ -23506,6 +23546,132 @@ client.planmigrations.get_migration(
+ +
+ + +
client.planmigrations.cancel_migration(...) -> CancelMigrationResponse +
+
+ +#### 🔌 Usage + +
+
+ +
+
+ +```python +from schematic import Schematic +from schematic.environment import SchematicEnvironment + +client = Schematic( + api_key="", + environment=SchematicEnvironment.DEFAULT, +) + +client.planmigrations.cancel_migration( + plan_version_migration_id="plan_version_migration_id", +) + +``` +
+
+
+
+ +#### ⚙️ Parameters + +
+
+ +
+
+ +**plan_version_migration_id:** `str` — plan_version_migration_id + +
+
+ +
+
+ +**request_options:** `typing.Optional[RequestOptions]` — Request-specific configuration. + +
+
+
+
+ + +
+
+
+ +
client.planmigrations.complete_migration_now(...) -> CompleteMigrationNowResponse +
+
+ +#### 🔌 Usage + +
+
+ +
+
+ +```python +from schematic import Schematic +from schematic.environment import SchematicEnvironment + +client = Schematic( + api_key="", + environment=SchematicEnvironment.DEFAULT, +) + +client.planmigrations.complete_migration_now( + plan_version_migration_id="plan_version_migration_id", +) + +``` +
+
+
+
+ +#### ⚙️ Parameters + +
+
+ +
+
+ +**plan_version_migration_id:** `str` — plan_version_migration_id + +
+
+ +
+
+ +**proration_behavior:** `typing.Optional[MigrationProrationBehavior]` + +
+
+ +
+
+ +**request_options:** `typing.Optional[RequestOptions]` — Request-specific configuration. + +
+
+
+
+ +
@@ -23603,7 +23769,7 @@ client = Schematic( client.planmigrations.count_migrations( plan_version_id="plan_version_id", - status="completed", + status="cancelled", limit=1000000, offset=1000000, ) diff --git a/src/schematic/__init__.py b/src/schematic/__init__.py index ccc2e26..72c0d7a 100644 --- a/src/schematic/__init__.py +++ b/src/schematic/__init__.py @@ -306,11 +306,13 @@ OnboardingRequirement, OnboardingRequirementStatus, OnboardingRequirementView, + OnboardingStripeImport, OnboardingTrack, OrbIntegrationConfig, OrderedPlansInGroup, PaymentMethodRequestBody, PaymentMethodResponseData, + PendingMigrationResponseData, PlanBillingSource, PlanBundleAction, PlanBundleCreditGrantRequestBody, @@ -826,6 +828,8 @@ from .planbundle import CreateCustomPlanBundleResponse, CreatePlanBundleResponse, UpdatePlanBundleResponse from .plangroups import CreatePlanGroupResponse, GetPlanGroupParams, GetPlanGroupResponse, UpdatePlanGroupResponse from .planmigrations import ( + CancelMigrationResponse, + CompleteMigrationNowResponse, CountCompanyMigrationsParams, CountCompanyMigrationsResponse, CountMigrationsParams, @@ -961,6 +965,7 @@ "BillingSubscriptionView": ".types", "BillingTiersMode": ".types", "BindCatalogResponse": ".components", + "CancelMigrationResponse": ".planmigrations", "CancelSubscriptionResponse": ".checkout", "CaptureRawEvent": ".types", "CaptureRawEventBatch": ".types", @@ -1025,6 +1030,7 @@ "ComparableOperator": ".types", "CompatiblePlans": ".types", "CompatiblePlansResponseData": ".types", + "CompleteMigrationNowResponse": ".planmigrations", "ComponentCapabilities": ".types", "ComponentCheckoutSettings": ".types", "ComponentDisplaySettings": ".types", @@ -1511,11 +1517,13 @@ "OnboardingRequirement": ".types", "OnboardingRequirementStatus": ".types", "OnboardingRequirementView": ".types", + "OnboardingStripeImport": ".types", "OnboardingTrack": ".types", "OrbIntegrationConfig": ".types", "OrderedPlansInGroup": ".types", "PaymentMethodRequestBody": ".types", "PaymentMethodResponseData": ".types", + "PendingMigrationResponseData": ".types", "PlanBillingSource": ".types", "PlanBundleAction": ".types", "PlanBundleCreditGrantRequestBody": ".types", @@ -1846,6 +1854,7 @@ def __dir__(): "BillingSubscriptionView", "BillingTiersMode", "BindCatalogResponse", + "CancelMigrationResponse", "CancelSubscriptionResponse", "CaptureRawEvent", "CaptureRawEventBatch", @@ -1910,6 +1919,7 @@ def __dir__(): "ComparableOperator", "CompatiblePlans", "CompatiblePlansResponseData", + "CompleteMigrationNowResponse", "ComponentCapabilities", "ComponentCheckoutSettings", "ComponentDisplaySettings", @@ -2396,11 +2406,13 @@ def __dir__(): "OnboardingRequirement", "OnboardingRequirementStatus", "OnboardingRequirementView", + "OnboardingStripeImport", "OnboardingTrack", "OrbIntegrationConfig", "OrderedPlansInGroup", "PaymentMethodRequestBody", "PaymentMethodResponseData", + "PendingMigrationResponseData", "PlanBillingSource", "PlanBundleAction", "PlanBundleCreditGrantRequestBody", diff --git a/src/schematic/accounts/client.py b/src/schematic/accounts/client.py index 760fd4c..19d394a 100644 --- a/src/schematic/accounts/client.py +++ b/src/schematic/accounts/client.py @@ -854,6 +854,7 @@ def get_onboarding_state( def update_onboarding_state( self, *, + dismissed: typing.Optional[bool] = OMIT, path: typing.Optional[OnboardingPath] = OMIT, pricing_page_url: typing.Optional[str] = OMIT, track: typing.Optional[OnboardingTrack] = OMIT, @@ -863,6 +864,8 @@ def update_onboarding_state( """ Parameters ---------- + dismissed : typing.Optional[bool] + path : typing.Optional[OnboardingPath] pricing_page_url : typing.Optional[str] @@ -889,6 +892,7 @@ def update_onboarding_state( client.accounts.update_onboarding_state() """ _response = self._raw_client.update_onboarding_state( + dismissed=dismissed, path=path, pricing_page_url=pricing_page_url, track=track, @@ -1905,6 +1909,7 @@ async def main() -> None: async def update_onboarding_state( self, *, + dismissed: typing.Optional[bool] = OMIT, path: typing.Optional[OnboardingPath] = OMIT, pricing_page_url: typing.Optional[str] = OMIT, track: typing.Optional[OnboardingTrack] = OMIT, @@ -1914,6 +1919,8 @@ async def update_onboarding_state( """ Parameters ---------- + dismissed : typing.Optional[bool] + path : typing.Optional[OnboardingPath] pricing_page_url : typing.Optional[str] @@ -1948,6 +1955,7 @@ async def main() -> None: asyncio.run(main()) """ _response = await self._raw_client.update_onboarding_state( + dismissed=dismissed, path=path, pricing_page_url=pricing_page_url, track=track, diff --git a/src/schematic/accounts/raw_client.py b/src/schematic/accounts/raw_client.py index d5c0121..3167ab0 100644 --- a/src/schematic/accounts/raw_client.py +++ b/src/schematic/accounts/raw_client.py @@ -2036,6 +2036,7 @@ def get_onboarding_state( def update_onboarding_state( self, *, + dismissed: typing.Optional[bool] = OMIT, path: typing.Optional[OnboardingPath] = OMIT, pricing_page_url: typing.Optional[str] = OMIT, track: typing.Optional[OnboardingTrack] = OMIT, @@ -2045,6 +2046,8 @@ def update_onboarding_state( """ Parameters ---------- + dismissed : typing.Optional[bool] + path : typing.Optional[OnboardingPath] pricing_page_url : typing.Optional[str] @@ -2065,6 +2068,7 @@ def update_onboarding_state( "onboarding-state", method="POST", json={ + "dismissed": dismissed, "path": path, "pricing_page_url": pricing_page_url, "track": track, @@ -4324,6 +4328,7 @@ async def get_onboarding_state( async def update_onboarding_state( self, *, + dismissed: typing.Optional[bool] = OMIT, path: typing.Optional[OnboardingPath] = OMIT, pricing_page_url: typing.Optional[str] = OMIT, track: typing.Optional[OnboardingTrack] = OMIT, @@ -4333,6 +4338,8 @@ async def update_onboarding_state( """ Parameters ---------- + dismissed : typing.Optional[bool] + path : typing.Optional[OnboardingPath] pricing_page_url : typing.Optional[str] @@ -4353,6 +4360,7 @@ async def update_onboarding_state( "onboarding-state", method="POST", json={ + "dismissed": dismissed, "path": path, "pricing_page_url": pricing_page_url, "track": track, diff --git a/src/schematic/core/client_wrapper.py b/src/schematic/core/client_wrapper.py index c9f76dc..172198f 100644 --- a/src/schematic/core/client_wrapper.py +++ b/src/schematic/core/client_wrapper.py @@ -33,12 +33,12 @@ def get_headers(self) -> typing.Dict[str, str]: import platform headers: typing.Dict[str, str] = { - "User-Agent": "schematichq/1.3.4", + "User-Agent": "schematichq/1.3.5", "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.4", + "X-Fern-SDK-Version": "1.3.5", **(self.get_custom_headers() or {}), } headers["X-Schematic-Api-Key"] = self.api_key diff --git a/src/schematic/planmigrations/__init__.py b/src/schematic/planmigrations/__init__.py index 665d218..2ee9ce8 100644 --- a/src/schematic/planmigrations/__init__.py +++ b/src/schematic/planmigrations/__init__.py @@ -7,6 +7,8 @@ if typing.TYPE_CHECKING: from .types import ( + CancelMigrationResponse, + CompleteMigrationNowResponse, CountCompanyMigrationsParams, CountCompanyMigrationsResponse, CountMigrationsParams, @@ -22,6 +24,8 @@ RetryMigrationResponse, ) _dynamic_imports: typing.Dict[str, str] = { + "CancelMigrationResponse": ".types", + "CompleteMigrationNowResponse": ".types", "CountCompanyMigrationsParams": ".types", "CountCompanyMigrationsResponse": ".types", "CountMigrationsParams": ".types", @@ -60,6 +64,8 @@ def __dir__(): __all__ = [ + "CancelMigrationResponse", + "CompleteMigrationNowResponse", "CountCompanyMigrationsParams", "CountCompanyMigrationsResponse", "CountMigrationsParams", diff --git a/src/schematic/planmigrations/client.py b/src/schematic/planmigrations/client.py index d20ef8b..b244b87 100644 --- a/src/schematic/planmigrations/client.py +++ b/src/schematic/planmigrations/client.py @@ -11,6 +11,8 @@ from ..types.plan_version_migration_status import PlanVersionMigrationStatus from ..types.plan_version_migration_strategy import PlanVersionMigrationStrategy from .raw_client import AsyncRawPlanmigrationsClient, RawPlanmigrationsClient +from .types.cancel_migration_response import CancelMigrationResponse +from .types.complete_migration_now_response import CompleteMigrationNowResponse from .types.count_company_migrations_response import CountCompanyMigrationsResponse from .types.count_migrations_response import CountMigrationsResponse from .types.create_migration_response import CreateMigrationResponse @@ -83,7 +85,7 @@ def list_company_migrations( client.planmigrations.list_company_migrations( migration_id="migration_id", q="q", - status="completed", + status="cancelled", limit=1000000, offset=1000000, ) @@ -169,7 +171,7 @@ def count_company_migrations( client.planmigrations.count_company_migrations( migration_id="migration_id", q="q", - status="completed", + status="cancelled", limit=1000000, offset=1000000, ) @@ -218,7 +220,7 @@ def list_migrations( ) client.planmigrations.list_migrations( plan_version_id="plan_version_id", - status="completed", + status="cancelled", limit=1000000, offset=1000000, ) @@ -278,7 +280,7 @@ def create_migration( client.planmigrations.create_migration( plan_id="plan_id", plan_version_id_to="plan_version_id_to", - strategy="immediate", + strategy="end_of_billing_period", target_plan_type="plan", ) """ @@ -326,6 +328,76 @@ def get_migration( _response = self._raw_client.get_migration(plan_version_migration_id, request_options=request_options) return _response.data + def cancel_migration( + self, plan_version_migration_id: str, *, request_options: typing.Optional[RequestOptions] = None + ) -> CancelMigrationResponse: + """ + Parameters + ---------- + plan_version_migration_id : str + plan_version_migration_id + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + CancelMigrationResponse + OK + + Examples + -------- + from schematic import Schematic + + client = Schematic( + api_key="YOUR_API_KEY", + ) + client.planmigrations.cancel_migration( + plan_version_migration_id="plan_version_migration_id", + ) + """ + _response = self._raw_client.cancel_migration(plan_version_migration_id, request_options=request_options) + return _response.data + + def complete_migration_now( + self, + plan_version_migration_id: str, + *, + proration_behavior: typing.Optional[MigrationProrationBehavior] = OMIT, + request_options: typing.Optional[RequestOptions] = None, + ) -> CompleteMigrationNowResponse: + """ + Parameters + ---------- + plan_version_migration_id : str + plan_version_migration_id + + proration_behavior : typing.Optional[MigrationProrationBehavior] + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + CompleteMigrationNowResponse + OK + + Examples + -------- + from schematic import Schematic + + client = Schematic( + api_key="YOUR_API_KEY", + ) + client.planmigrations.complete_migration_now( + plan_version_migration_id="plan_version_migration_id", + ) + """ + _response = self._raw_client.complete_migration_now( + plan_version_migration_id, proration_behavior=proration_behavior, request_options=request_options + ) + return _response.data + def retry_migration( self, plan_version_migration_id: str, @@ -405,7 +477,7 @@ def count_migrations( ) client.planmigrations.count_migrations( plan_version_id="plan_version_id", - status="completed", + status="cancelled", limit=1000000, offset=1000000, ) @@ -533,7 +605,7 @@ async def main() -> None: await client.planmigrations.list_company_migrations( migration_id="migration_id", q="q", - status="completed", + status="cancelled", limit=1000000, offset=1000000, ) @@ -635,7 +707,7 @@ async def main() -> None: await client.planmigrations.count_company_migrations( migration_id="migration_id", q="q", - status="completed", + status="cancelled", limit=1000000, offset=1000000, ) @@ -692,7 +764,7 @@ async def list_migrations( async def main() -> None: await client.planmigrations.list_migrations( plan_version_id="plan_version_id", - status="completed", + status="cancelled", limit=1000000, offset=1000000, ) @@ -760,7 +832,7 @@ async def main() -> None: await client.planmigrations.create_migration( plan_id="plan_id", plan_version_id_to="plan_version_id_to", - strategy="immediate", + strategy="end_of_billing_period", target_plan_type="plan", ) @@ -819,6 +891,92 @@ async def main() -> None: _response = await self._raw_client.get_migration(plan_version_migration_id, request_options=request_options) return _response.data + async def cancel_migration( + self, plan_version_migration_id: str, *, request_options: typing.Optional[RequestOptions] = None + ) -> CancelMigrationResponse: + """ + Parameters + ---------- + plan_version_migration_id : str + plan_version_migration_id + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + CancelMigrationResponse + OK + + Examples + -------- + import asyncio + + from schematic import AsyncSchematic + + client = AsyncSchematic( + api_key="YOUR_API_KEY", + ) + + + async def main() -> None: + await client.planmigrations.cancel_migration( + plan_version_migration_id="plan_version_migration_id", + ) + + + asyncio.run(main()) + """ + _response = await self._raw_client.cancel_migration(plan_version_migration_id, request_options=request_options) + return _response.data + + async def complete_migration_now( + self, + plan_version_migration_id: str, + *, + proration_behavior: typing.Optional[MigrationProrationBehavior] = OMIT, + request_options: typing.Optional[RequestOptions] = None, + ) -> CompleteMigrationNowResponse: + """ + Parameters + ---------- + plan_version_migration_id : str + plan_version_migration_id + + proration_behavior : typing.Optional[MigrationProrationBehavior] + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + CompleteMigrationNowResponse + OK + + Examples + -------- + import asyncio + + from schematic import AsyncSchematic + + client = AsyncSchematic( + api_key="YOUR_API_KEY", + ) + + + async def main() -> None: + await client.planmigrations.complete_migration_now( + plan_version_migration_id="plan_version_migration_id", + ) + + + asyncio.run(main()) + """ + _response = await self._raw_client.complete_migration_now( + plan_version_migration_id, proration_behavior=proration_behavior, request_options=request_options + ) + return _response.data + async def retry_migration( self, plan_version_migration_id: str, @@ -911,7 +1069,7 @@ async def count_migrations( async def main() -> None: await client.planmigrations.count_migrations( plan_version_id="plan_version_id", - status="completed", + status="cancelled", limit=1000000, offset=1000000, ) diff --git a/src/schematic/planmigrations/raw_client.py b/src/schematic/planmigrations/raw_client.py index e61e1e8..0765fe0 100644 --- a/src/schematic/planmigrations/raw_client.py +++ b/src/schematic/planmigrations/raw_client.py @@ -22,6 +22,8 @@ from ..types.plan_version_company_migration_status import PlanVersionCompanyMigrationStatus from ..types.plan_version_migration_status import PlanVersionMigrationStatus from ..types.plan_version_migration_strategy import PlanVersionMigrationStrategy +from .types.cancel_migration_response import CancelMigrationResponse +from .types.complete_migration_now_response import CompleteMigrationNowResponse from .types.count_company_migrations_response import CountCompanyMigrationsResponse from .types.count_migrations_response import CountMigrationsResponse from .types.create_migration_response import CreateMigrationResponse @@ -732,6 +734,219 @@ def get_migration( status_code=_response.status_code, headers=dict(_response.headers), body=_response_json ) + def cancel_migration( + self, plan_version_migration_id: str, *, request_options: typing.Optional[RequestOptions] = None + ) -> HttpResponse[CancelMigrationResponse]: + """ + Parameters + ---------- + plan_version_migration_id : str + plan_version_migration_id + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + HttpResponse[CancelMigrationResponse] + OK + """ + _response = self._client_wrapper.httpx_client.request( + f"plan-version-migrations/{encode_path_param(plan_version_migration_id)}/cancel", + method="POST", + request_options=request_options, + ) + try: + if 200 <= _response.status_code < 300: + _data = typing.cast( + CancelMigrationResponse, + parse_obj_as( + type_=CancelMigrationResponse, # 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 complete_migration_now( + self, + plan_version_migration_id: str, + *, + proration_behavior: typing.Optional[MigrationProrationBehavior] = OMIT, + request_options: typing.Optional[RequestOptions] = None, + ) -> HttpResponse[CompleteMigrationNowResponse]: + """ + Parameters + ---------- + plan_version_migration_id : str + plan_version_migration_id + + proration_behavior : typing.Optional[MigrationProrationBehavior] + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + HttpResponse[CompleteMigrationNowResponse] + OK + """ + _response = self._client_wrapper.httpx_client.request( + f"plan-version-migrations/{encode_path_param(plan_version_migration_id)}/complete-now", + method="POST", + json={ + "proration_behavior": proration_behavior, + }, + headers={ + "content-type": "application/json", + }, + request_options=request_options, + omit=OMIT, + ) + try: + if 200 <= _response.status_code < 300: + _data = typing.cast( + CompleteMigrationNowResponse, + parse_obj_as( + type_=CompleteMigrationNowResponse, # 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 retry_migration( self, plan_version_migration_id: str, @@ -1785,6 +2000,219 @@ async def get_migration( status_code=_response.status_code, headers=dict(_response.headers), body=_response_json ) + async def cancel_migration( + self, plan_version_migration_id: str, *, request_options: typing.Optional[RequestOptions] = None + ) -> AsyncHttpResponse[CancelMigrationResponse]: + """ + Parameters + ---------- + plan_version_migration_id : str + plan_version_migration_id + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + AsyncHttpResponse[CancelMigrationResponse] + OK + """ + _response = await self._client_wrapper.httpx_client.request( + f"plan-version-migrations/{encode_path_param(plan_version_migration_id)}/cancel", + method="POST", + request_options=request_options, + ) + try: + if 200 <= _response.status_code < 300: + _data = typing.cast( + CancelMigrationResponse, + parse_obj_as( + type_=CancelMigrationResponse, # 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 complete_migration_now( + self, + plan_version_migration_id: str, + *, + proration_behavior: typing.Optional[MigrationProrationBehavior] = OMIT, + request_options: typing.Optional[RequestOptions] = None, + ) -> AsyncHttpResponse[CompleteMigrationNowResponse]: + """ + Parameters + ---------- + plan_version_migration_id : str + plan_version_migration_id + + proration_behavior : typing.Optional[MigrationProrationBehavior] + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + AsyncHttpResponse[CompleteMigrationNowResponse] + OK + """ + _response = await self._client_wrapper.httpx_client.request( + f"plan-version-migrations/{encode_path_param(plan_version_migration_id)}/complete-now", + method="POST", + json={ + "proration_behavior": proration_behavior, + }, + headers={ + "content-type": "application/json", + }, + request_options=request_options, + omit=OMIT, + ) + try: + if 200 <= _response.status_code < 300: + _data = typing.cast( + CompleteMigrationNowResponse, + parse_obj_as( + type_=CompleteMigrationNowResponse, # 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 retry_migration( self, plan_version_migration_id: str, diff --git a/src/schematic/planmigrations/types/__init__.py b/src/schematic/planmigrations/types/__init__.py index cf21ae0..e32ed52 100644 --- a/src/schematic/planmigrations/types/__init__.py +++ b/src/schematic/planmigrations/types/__init__.py @@ -6,6 +6,8 @@ from importlib import import_module if typing.TYPE_CHECKING: + from .cancel_migration_response import CancelMigrationResponse + from .complete_migration_now_response import CompleteMigrationNowResponse from .count_company_migrations_params import CountCompanyMigrationsParams from .count_company_migrations_response import CountCompanyMigrationsResponse from .count_migrations_params import CountMigrationsParams @@ -20,6 +22,8 @@ from .retry_company_migration_response import RetryCompanyMigrationResponse from .retry_migration_response import RetryMigrationResponse _dynamic_imports: typing.Dict[str, str] = { + "CancelMigrationResponse": ".cancel_migration_response", + "CompleteMigrationNowResponse": ".complete_migration_now_response", "CountCompanyMigrationsParams": ".count_company_migrations_params", "CountCompanyMigrationsResponse": ".count_company_migrations_response", "CountMigrationsParams": ".count_migrations_params", @@ -58,6 +62,8 @@ def __dir__(): __all__ = [ + "CancelMigrationResponse", + "CompleteMigrationNowResponse", "CountCompanyMigrationsParams", "CountCompanyMigrationsResponse", "CountMigrationsParams", diff --git a/src/schematic/planmigrations/types/cancel_migration_response.py b/src/schematic/planmigrations/types/cancel_migration_response.py new file mode 100644 index 0000000..45ebdf0 --- /dev/null +++ b/src/schematic/planmigrations/types/cancel_migration_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.plan_version_migration_response_data import PlanVersionMigrationResponseData + + +class CancelMigrationResponse(UniversalBaseModel): + data: PlanVersionMigrationResponseData + 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/planmigrations/types/complete_migration_now_response.py b/src/schematic/planmigrations/types/complete_migration_now_response.py new file mode 100644 index 0000000..b96e34d --- /dev/null +++ b/src/schematic/planmigrations/types/complete_migration_now_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.plan_version_migration_response_data import PlanVersionMigrationResponseData + + +class CompleteMigrationNowResponse(UniversalBaseModel): + data: PlanVersionMigrationResponseData + 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/plans/client.py b/src/schematic/plans/client.py index 6abab06..d149761 100644 --- a/src/schematic/plans/client.py +++ b/src/schematic/plans/client.py @@ -1,5 +1,6 @@ # This file was auto-generated by Fern from our API Definition. +import datetime as dt import typing from ..core.client_wrapper import AsyncClientWrapper, SyncClientWrapper @@ -222,7 +223,9 @@ def retry_custom_plan_billing( *, customer_email: str, activation_strategy: typing.Optional[CustomPlanActivationStrategy] = OMIT, + billing_cycle_anchor: typing.Optional[dt.datetime] = OMIT, days_until_due: typing.Optional[int] = OMIT, + prorate_first_period: typing.Optional[bool] = OMIT, send_invoice: typing.Optional[bool] = OMIT, request_options: typing.Optional[RequestOptions] = None, ) -> RetryCustomPlanBillingResponse: @@ -236,8 +239,14 @@ def retry_custom_plan_billing( activation_strategy : typing.Optional[CustomPlanActivationStrategy] + billing_cycle_anchor : typing.Optional[dt.datetime] + The date the subscription's billing period renews on. Only honored when the retry creates a subscription. + days_until_due : typing.Optional[int] + prorate_first_period : typing.Optional[bool] + When true, the partial period between the subscription starting and its renewal date is billed pro rata straight away. When false that period is free and no invoice is raised until the renewal date. Only applies alongside billing_cycle_anchor. Defaults to true. + send_invoice : typing.Optional[bool] Whether Stripe emails the invoice when it is finalized. Defaults to true. @@ -265,7 +274,9 @@ def retry_custom_plan_billing( custom_plan_billing_id, customer_email=customer_email, activation_strategy=activation_strategy, + billing_cycle_anchor=billing_cycle_anchor, days_until_due=days_until_due, + prorate_first_period=prorate_first_period, send_invoice=send_invoice, request_options=request_options, ) @@ -1100,11 +1111,13 @@ def publish_plan_version( migration_strategy: PlanVersionMigrationStrategy, activation_strategy: typing.Optional[CustomPlanActivationStrategy] = OMIT, address: typing.Optional[CustomerBillingAddress] = OMIT, + billing_cycle_anchor: typing.Optional[dt.datetime] = OMIT, coupon_external_id: typing.Optional[str] = OMIT, custom_field_values: typing.Optional[typing.Sequence[CheckoutFieldValue]] = OMIT, customer_email: typing.Optional[str] = OMIT, days_until_due: typing.Optional[int] = OMIT, phone: typing.Optional[str] = OMIT, + prorate_first_period: typing.Optional[bool] = OMIT, proration_behavior: typing.Optional[MigrationProrationBehavior] = OMIT, require_no_migration: typing.Optional[bool] = OMIT, send_invoice: typing.Optional[bool] = OMIT, @@ -1125,6 +1138,9 @@ def publish_plan_version( address : typing.Optional[CustomerBillingAddress] + billing_cycle_anchor : typing.Optional[dt.datetime] + The date the subscription's billing period renews on. Only honored on a first publish that starts a subscription. + coupon_external_id : typing.Optional[str] custom_field_values : typing.Optional[typing.Sequence[CheckoutFieldValue]] @@ -1135,6 +1151,9 @@ def publish_plan_version( phone : typing.Optional[str] + prorate_first_period : typing.Optional[bool] + When true, the partial period between the subscription starting and its renewal date is billed pro rata straight away. When false that period is free and no invoice is raised until the renewal date. Only applies alongside billing_cycle_anchor. Defaults to true. + proration_behavior : typing.Optional[MigrationProrationBehavior] require_no_migration : typing.Optional[bool] @@ -1163,7 +1182,7 @@ def publish_plan_version( client.plans.publish_plan_version( plan_version_id="plan_version_id", excluded_company_ids=["excluded_company_ids"], - migration_strategy="immediate", + migration_strategy="end_of_billing_period", ) """ _response = self._raw_client.publish_plan_version( @@ -1172,11 +1191,13 @@ def publish_plan_version( migration_strategy=migration_strategy, activation_strategy=activation_strategy, address=address, + billing_cycle_anchor=billing_cycle_anchor, coupon_external_id=coupon_external_id, custom_field_values=custom_field_values, customer_email=customer_email, days_until_due=days_until_due, phone=phone, + prorate_first_period=prorate_first_period, proration_behavior=proration_behavior, require_no_migration=require_no_migration, send_invoice=send_invoice, @@ -1389,7 +1410,9 @@ async def retry_custom_plan_billing( *, customer_email: str, activation_strategy: typing.Optional[CustomPlanActivationStrategy] = OMIT, + billing_cycle_anchor: typing.Optional[dt.datetime] = OMIT, days_until_due: typing.Optional[int] = OMIT, + prorate_first_period: typing.Optional[bool] = OMIT, send_invoice: typing.Optional[bool] = OMIT, request_options: typing.Optional[RequestOptions] = None, ) -> RetryCustomPlanBillingResponse: @@ -1403,8 +1426,14 @@ async def retry_custom_plan_billing( activation_strategy : typing.Optional[CustomPlanActivationStrategy] + billing_cycle_anchor : typing.Optional[dt.datetime] + The date the subscription's billing period renews on. Only honored when the retry creates a subscription. + days_until_due : typing.Optional[int] + prorate_first_period : typing.Optional[bool] + When true, the partial period between the subscription starting and its renewal date is billed pro rata straight away. When false that period is free and no invoice is raised until the renewal date. Only applies alongside billing_cycle_anchor. Defaults to true. + send_invoice : typing.Optional[bool] Whether Stripe emails the invoice when it is finalized. Defaults to true. @@ -1440,7 +1469,9 @@ async def main() -> None: custom_plan_billing_id, customer_email=customer_email, activation_strategy=activation_strategy, + billing_cycle_anchor=billing_cycle_anchor, days_until_due=days_until_due, + prorate_first_period=prorate_first_period, send_invoice=send_invoice, request_options=request_options, ) @@ -2381,11 +2412,13 @@ async def publish_plan_version( migration_strategy: PlanVersionMigrationStrategy, activation_strategy: typing.Optional[CustomPlanActivationStrategy] = OMIT, address: typing.Optional[CustomerBillingAddress] = OMIT, + billing_cycle_anchor: typing.Optional[dt.datetime] = OMIT, coupon_external_id: typing.Optional[str] = OMIT, custom_field_values: typing.Optional[typing.Sequence[CheckoutFieldValue]] = OMIT, customer_email: typing.Optional[str] = OMIT, days_until_due: typing.Optional[int] = OMIT, phone: typing.Optional[str] = OMIT, + prorate_first_period: typing.Optional[bool] = OMIT, proration_behavior: typing.Optional[MigrationProrationBehavior] = OMIT, require_no_migration: typing.Optional[bool] = OMIT, send_invoice: typing.Optional[bool] = OMIT, @@ -2406,6 +2439,9 @@ async def publish_plan_version( address : typing.Optional[CustomerBillingAddress] + billing_cycle_anchor : typing.Optional[dt.datetime] + The date the subscription's billing period renews on. Only honored on a first publish that starts a subscription. + coupon_external_id : typing.Optional[str] custom_field_values : typing.Optional[typing.Sequence[CheckoutFieldValue]] @@ -2416,6 +2452,9 @@ async def publish_plan_version( phone : typing.Optional[str] + prorate_first_period : typing.Optional[bool] + When true, the partial period between the subscription starting and its renewal date is billed pro rata straight away. When false that period is free and no invoice is raised until the renewal date. Only applies alongside billing_cycle_anchor. Defaults to true. + proration_behavior : typing.Optional[MigrationProrationBehavior] require_no_migration : typing.Optional[bool] @@ -2449,7 +2488,7 @@ async def main() -> None: await client.plans.publish_plan_version( plan_version_id="plan_version_id", excluded_company_ids=["excluded_company_ids"], - migration_strategy="immediate", + migration_strategy="end_of_billing_period", ) @@ -2461,11 +2500,13 @@ async def main() -> None: migration_strategy=migration_strategy, activation_strategy=activation_strategy, address=address, + billing_cycle_anchor=billing_cycle_anchor, coupon_external_id=coupon_external_id, custom_field_values=custom_field_values, customer_email=customer_email, days_until_due=days_until_due, phone=phone, + prorate_first_period=prorate_first_period, proration_behavior=proration_behavior, require_no_migration=require_no_migration, send_invoice=send_invoice, diff --git a/src/schematic/plans/raw_client.py b/src/schematic/plans/raw_client.py index ea79dd8..30f542f 100644 --- a/src/schematic/plans/raw_client.py +++ b/src/schematic/plans/raw_client.py @@ -1,5 +1,6 @@ # This file was auto-generated by Fern from our API Definition. +import datetime as dt import typing from json.decoder import JSONDecodeError @@ -432,7 +433,9 @@ def retry_custom_plan_billing( *, customer_email: str, activation_strategy: typing.Optional[CustomPlanActivationStrategy] = OMIT, + billing_cycle_anchor: typing.Optional[dt.datetime] = OMIT, days_until_due: typing.Optional[int] = OMIT, + prorate_first_period: typing.Optional[bool] = OMIT, send_invoice: typing.Optional[bool] = OMIT, request_options: typing.Optional[RequestOptions] = None, ) -> HttpResponse[RetryCustomPlanBillingResponse]: @@ -446,8 +449,14 @@ def retry_custom_plan_billing( activation_strategy : typing.Optional[CustomPlanActivationStrategy] + billing_cycle_anchor : typing.Optional[dt.datetime] + The date the subscription's billing period renews on. Only honored when the retry creates a subscription. + days_until_due : typing.Optional[int] + prorate_first_period : typing.Optional[bool] + When true, the partial period between the subscription starting and its renewal date is billed pro rata straight away. When false that period is free and no invoice is raised until the renewal date. Only applies alongside billing_cycle_anchor. Defaults to true. + send_invoice : typing.Optional[bool] Whether Stripe emails the invoice when it is finalized. Defaults to true. @@ -464,8 +473,10 @@ def retry_custom_plan_billing( method="PUT", json={ "activation_strategy": activation_strategy, + "billing_cycle_anchor": billing_cycle_anchor, "customer_email": customer_email, "days_until_due": days_until_due, + "prorate_first_period": prorate_first_period, "send_invoice": send_invoice, }, headers={ @@ -2260,11 +2271,13 @@ def publish_plan_version( migration_strategy: PlanVersionMigrationStrategy, activation_strategy: typing.Optional[CustomPlanActivationStrategy] = OMIT, address: typing.Optional[CustomerBillingAddress] = OMIT, + billing_cycle_anchor: typing.Optional[dt.datetime] = OMIT, coupon_external_id: typing.Optional[str] = OMIT, custom_field_values: typing.Optional[typing.Sequence[CheckoutFieldValue]] = OMIT, customer_email: typing.Optional[str] = OMIT, days_until_due: typing.Optional[int] = OMIT, phone: typing.Optional[str] = OMIT, + prorate_first_period: typing.Optional[bool] = OMIT, proration_behavior: typing.Optional[MigrationProrationBehavior] = OMIT, require_no_migration: typing.Optional[bool] = OMIT, send_invoice: typing.Optional[bool] = OMIT, @@ -2285,6 +2298,9 @@ def publish_plan_version( address : typing.Optional[CustomerBillingAddress] + billing_cycle_anchor : typing.Optional[dt.datetime] + The date the subscription's billing period renews on. Only honored on a first publish that starts a subscription. + coupon_external_id : typing.Optional[str] custom_field_values : typing.Optional[typing.Sequence[CheckoutFieldValue]] @@ -2295,6 +2311,9 @@ def publish_plan_version( phone : typing.Optional[str] + prorate_first_period : typing.Optional[bool] + When true, the partial period between the subscription starting and its renewal date is billed pro rata straight away. When false that period is free and no invoice is raised until the renewal date. Only applies alongside billing_cycle_anchor. Defaults to true. + proration_behavior : typing.Optional[MigrationProrationBehavior] require_no_migration : typing.Optional[bool] @@ -2321,6 +2340,7 @@ def publish_plan_version( "address": convert_and_respect_annotation_metadata( object_=address, annotation=CustomerBillingAddress, direction="write" ), + "billing_cycle_anchor": billing_cycle_anchor, "coupon_external_id": coupon_external_id, "custom_field_values": convert_and_respect_annotation_metadata( object_=custom_field_values, annotation=typing.Sequence[CheckoutFieldValue], direction="write" @@ -2330,6 +2350,7 @@ def publish_plan_version( "excluded_company_ids": excluded_company_ids, "migration_strategy": migration_strategy, "phone": phone, + "prorate_first_period": prorate_first_period, "proration_behavior": proration_behavior, "require_no_migration": require_no_migration, "send_invoice": send_invoice, @@ -2798,7 +2819,9 @@ async def retry_custom_plan_billing( *, customer_email: str, activation_strategy: typing.Optional[CustomPlanActivationStrategy] = OMIT, + billing_cycle_anchor: typing.Optional[dt.datetime] = OMIT, days_until_due: typing.Optional[int] = OMIT, + prorate_first_period: typing.Optional[bool] = OMIT, send_invoice: typing.Optional[bool] = OMIT, request_options: typing.Optional[RequestOptions] = None, ) -> AsyncHttpResponse[RetryCustomPlanBillingResponse]: @@ -2812,8 +2835,14 @@ async def retry_custom_plan_billing( activation_strategy : typing.Optional[CustomPlanActivationStrategy] + billing_cycle_anchor : typing.Optional[dt.datetime] + The date the subscription's billing period renews on. Only honored when the retry creates a subscription. + days_until_due : typing.Optional[int] + prorate_first_period : typing.Optional[bool] + When true, the partial period between the subscription starting and its renewal date is billed pro rata straight away. When false that period is free and no invoice is raised until the renewal date. Only applies alongside billing_cycle_anchor. Defaults to true. + send_invoice : typing.Optional[bool] Whether Stripe emails the invoice when it is finalized. Defaults to true. @@ -2830,8 +2859,10 @@ async def retry_custom_plan_billing( method="PUT", json={ "activation_strategy": activation_strategy, + "billing_cycle_anchor": billing_cycle_anchor, "customer_email": customer_email, "days_until_due": days_until_due, + "prorate_first_period": prorate_first_period, "send_invoice": send_invoice, }, headers={ @@ -4626,11 +4657,13 @@ async def publish_plan_version( migration_strategy: PlanVersionMigrationStrategy, activation_strategy: typing.Optional[CustomPlanActivationStrategy] = OMIT, address: typing.Optional[CustomerBillingAddress] = OMIT, + billing_cycle_anchor: typing.Optional[dt.datetime] = OMIT, coupon_external_id: typing.Optional[str] = OMIT, custom_field_values: typing.Optional[typing.Sequence[CheckoutFieldValue]] = OMIT, customer_email: typing.Optional[str] = OMIT, days_until_due: typing.Optional[int] = OMIT, phone: typing.Optional[str] = OMIT, + prorate_first_period: typing.Optional[bool] = OMIT, proration_behavior: typing.Optional[MigrationProrationBehavior] = OMIT, require_no_migration: typing.Optional[bool] = OMIT, send_invoice: typing.Optional[bool] = OMIT, @@ -4651,6 +4684,9 @@ async def publish_plan_version( address : typing.Optional[CustomerBillingAddress] + billing_cycle_anchor : typing.Optional[dt.datetime] + The date the subscription's billing period renews on. Only honored on a first publish that starts a subscription. + coupon_external_id : typing.Optional[str] custom_field_values : typing.Optional[typing.Sequence[CheckoutFieldValue]] @@ -4661,6 +4697,9 @@ async def publish_plan_version( phone : typing.Optional[str] + prorate_first_period : typing.Optional[bool] + When true, the partial period between the subscription starting and its renewal date is billed pro rata straight away. When false that period is free and no invoice is raised until the renewal date. Only applies alongside billing_cycle_anchor. Defaults to true. + proration_behavior : typing.Optional[MigrationProrationBehavior] require_no_migration : typing.Optional[bool] @@ -4687,6 +4726,7 @@ async def publish_plan_version( "address": convert_and_respect_annotation_metadata( object_=address, annotation=CustomerBillingAddress, direction="write" ), + "billing_cycle_anchor": billing_cycle_anchor, "coupon_external_id": coupon_external_id, "custom_field_values": convert_and_respect_annotation_metadata( object_=custom_field_values, annotation=typing.Sequence[CheckoutFieldValue], direction="write" @@ -4696,6 +4736,7 @@ async def publish_plan_version( "excluded_company_ids": excluded_company_ids, "migration_strategy": migration_strategy, "phone": phone, + "prorate_first_period": prorate_first_period, "proration_behavior": proration_behavior, "require_no_migration": require_no_migration, "send_invoice": send_invoice, diff --git a/src/schematic/types/__init__.py b/src/schematic/types/__init__.py index d2e72ba..fffc03f 100644 --- a/src/schematic/types/__init__.py +++ b/src/schematic/types/__init__.py @@ -313,11 +313,13 @@ from .onboarding_requirement import OnboardingRequirement from .onboarding_requirement_status import OnboardingRequirementStatus from .onboarding_requirement_view import OnboardingRequirementView + from .onboarding_stripe_import import OnboardingStripeImport from .onboarding_track import OnboardingTrack from .orb_integration_config import OrbIntegrationConfig from .ordered_plans_in_group import OrderedPlansInGroup from .payment_method_request_body import PaymentMethodRequestBody from .payment_method_response_data import PaymentMethodResponseData + from .pending_migration_response_data import PendingMigrationResponseData from .plan_billing_source import PlanBillingSource from .plan_bundle_action import PlanBundleAction from .plan_bundle_credit_grant_request_body import PlanBundleCreditGrantRequestBody @@ -771,11 +773,13 @@ "OnboardingRequirement": ".onboarding_requirement", "OnboardingRequirementStatus": ".onboarding_requirement_status", "OnboardingRequirementView": ".onboarding_requirement_view", + "OnboardingStripeImport": ".onboarding_stripe_import", "OnboardingTrack": ".onboarding_track", "OrbIntegrationConfig": ".orb_integration_config", "OrderedPlansInGroup": ".ordered_plans_in_group", "PaymentMethodRequestBody": ".payment_method_request_body", "PaymentMethodResponseData": ".payment_method_response_data", + "PendingMigrationResponseData": ".pending_migration_response_data", "PlanBillingSource": ".plan_billing_source", "PlanBundleAction": ".plan_bundle_action", "PlanBundleCreditGrantRequestBody": ".plan_bundle_credit_grant_request_body", @@ -1253,11 +1257,13 @@ def __dir__(): "OnboardingRequirement", "OnboardingRequirementStatus", "OnboardingRequirementView", + "OnboardingStripeImport", "OnboardingTrack", "OrbIntegrationConfig", "OrderedPlansInGroup", "PaymentMethodRequestBody", "PaymentMethodResponseData", + "PendingMigrationResponseData", "PlanBillingSource", "PlanBundleAction", "PlanBundleCreditGrantRequestBody", diff --git a/src/schematic/types/company_detail_response_data.py b/src/schematic/types/company_detail_response_data.py index 9defe7c..e9c0dd2 100644 --- a/src/schematic/types/company_detail_response_data.py +++ b/src/schematic/types/company_detail_response_data.py @@ -14,6 +14,7 @@ from .feature_entitlement import FeatureEntitlement from .generic_preview_object import GenericPreviewObject from .payment_method_response_data import PaymentMethodResponseData +from .pending_migration_response_data import PendingMigrationResponseData from .rule import Rule from .scheduled_downgrade_response_data import ScheduledDowngradeResponseData @@ -36,6 +37,7 @@ class CompanyDetailResponseData(UniversalBaseModel): metrics: typing.List[CompanyEventPeriodMetricsResponseData] name: str payment_methods: typing.List[PaymentMethodResponseData] + pending_migration: typing.Optional[PendingMigrationResponseData] = None plan: typing.Optional[CompanyPlanWithBillingSubView] = None plans: typing.List[GenericPreviewObject] rules: typing.List[Rule] diff --git a/src/schematic/types/credit_lease_response_data.py b/src/schematic/types/credit_lease_response_data.py index cc98f48..28a72b4 100644 --- a/src/schematic/types/credit_lease_response_data.py +++ b/src/schematic/types/credit_lease_response_data.py @@ -15,6 +15,7 @@ class CreditLeaseResponseData(UniversalBaseModel): granted_amount: float id: str released_at: typing.Optional[dt.datetime] = None + tracked_amount: float updated_at: dt.datetime if IS_PYDANTIC_V2: diff --git a/src/schematic/types/custom_plan_billing_response_data.py b/src/schematic/types/custom_plan_billing_response_data.py index 40e3300..d169342 100644 --- a/src/schematic/types/custom_plan_billing_response_data.py +++ b/src/schematic/types/custom_plan_billing_response_data.py @@ -29,6 +29,11 @@ class CustomPlanBillingResponseData(UniversalBaseModel): """ plan_id: str + prorate_first_period: typing.Optional[bool] = pydantic.Field(default=None) + """ + Whether the shortened period the renewal date created was billed pro rata when the subscription started. False means that period is free and the first invoice is the one raised on the renewal date. + """ + published_at: typing.Optional[dt.datetime] = None send_invoice: bool status: CustomPlanBillingStatus diff --git a/src/schematic/types/get_onboarding_state_resp.py b/src/schematic/types/get_onboarding_state_resp.py index 47d3b11..48f0bd2 100644 --- a/src/schematic/types/get_onboarding_state_resp.py +++ b/src/schematic/types/get_onboarding_state_resp.py @@ -1,5 +1,6 @@ # This file was auto-generated by Fern from our API Definition. +import datetime as dt import typing import pydantic @@ -8,16 +9,22 @@ from .onboarding_path import OnboardingPath from .onboarding_requirement import OnboardingRequirement from .onboarding_requirement_view import OnboardingRequirementView +from .onboarding_stripe_import import OnboardingStripeImport from .onboarding_track import OnboardingTrack class GetOnboardingStateResp(UniversalBaseModel): + agent_connected_at: typing.Optional[dt.datetime] = None + dismissed_at: typing.Optional[dt.datetime] = None environment_id: typing.Optional[str] = None milestones: typing.List[OnboardingMilestoneView] path: typing.Optional[OnboardingPath] = None + pricing_page_url: typing.Optional[str] = None requirements: typing.List[OnboardingRequirementView] + stripe_import: typing.Optional[OnboardingStripeImport] = None suggested_next: typing.List[OnboardingRequirement] track: typing.Optional[OnboardingTrack] = None + website_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 diff --git a/src/schematic/types/onboarding_requirement.py b/src/schematic/types/onboarding_requirement.py index cd0ed65..7d00067 100644 --- a/src/schematic/types/onboarding_requirement.py +++ b/src/schematic/types/onboarding_requirement.py @@ -4,7 +4,13 @@ OnboardingRequirement = typing.Union[ typing.Literal[ - "connect_billing", "create_api_key", "first_flag_check", "import_companies", "model_packaging", "send_events" + "connect_agent", + "connect_billing", + "create_api_key", + "first_flag_check", + "import_companies", + "model_packaging", + "send_events", ], typing.Any, ] diff --git a/src/schematic/types/onboarding_stripe_import.py b/src/schematic/types/onboarding_stripe_import.py new file mode 100644 index 0000000..9cfdd25 --- /dev/null +++ b/src/schematic/types/onboarding_stripe_import.py @@ -0,0 +1,5 @@ +# This file was auto-generated by Fern from our API Definition. + +import typing + +OnboardingStripeImport = typing.Union[typing.Literal["complete", "not_started", "running"], typing.Any] diff --git a/src/schematic/types/pending_migration_response_data.py b/src/schematic/types/pending_migration_response_data.py new file mode 100644 index 0000000..4d881db --- /dev/null +++ b/src/schematic/types/pending_migration_response_data.py @@ -0,0 +1,25 @@ +# 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 PendingMigrationResponseData(UniversalBaseModel): + migration_id: str + scheduled_for: typing.Optional[dt.datetime] = None + to_plan_id: str + to_plan_name: str + to_plan_version_id: str + to_plan_version_number: typing.Optional[int] = 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/plan_version_company_migration_response_data.py b/src/schematic/types/plan_version_company_migration_response_data.py index c38c833..6f4100a 100644 --- a/src/schematic/types/plan_version_company_migration_response_data.py +++ b/src/schematic/types/plan_version_company_migration_response_data.py @@ -19,6 +19,11 @@ class PlanVersionCompanyMigrationResponseData(UniversalBaseModel): id: str migration_id: str plan_version_id_from: typing.Optional[str] = None + scheduled_for: typing.Optional[dt.datetime] = pydantic.Field(default=None) + """ + When this company is expected to migrate, for a migration scheduled at the end of the billing period: the end of the company's current billing period. Only set while both the company and the migration are still pending. A value at or before the time of the request means the company has no active subscription and migrates as soon as processing runs. Null means no upcoming renewal could be determined from the company's current billing status (for example, a past-due subscription or one set to cancel); it does not mean the company will never migrate. + """ + started_at: typing.Optional[dt.datetime] = None status: PlanVersionCompanyMigrationStatus updated_at: dt.datetime diff --git a/src/schematic/types/plan_version_company_migration_status.py b/src/schematic/types/plan_version_company_migration_status.py index 4984db4..44093a3 100644 --- a/src/schematic/types/plan_version_company_migration_status.py +++ b/src/schematic/types/plan_version_company_migration_status.py @@ -3,5 +3,5 @@ import typing PlanVersionCompanyMigrationStatus = typing.Union[ - typing.Literal["completed", "failed", "in_progress", "pending", "skipped"], typing.Any + typing.Literal["cancelled", "completed", "failed", "in_progress", "pending", "skipped"], typing.Any ] diff --git a/src/schematic/types/plan_version_migration_response_data.py b/src/schematic/types/plan_version_migration_response_data.py index 31a404d..a78a65e 100644 --- a/src/schematic/types/plan_version_migration_response_data.py +++ b/src/schematic/types/plan_version_migration_response_data.py @@ -17,6 +17,7 @@ class PlanVersionMigrationResponseData(UniversalBaseModel): error: typing.Optional[str] = None failed_companies: int id: str + next_due_at: typing.Optional[dt.datetime] = None plan_id: str plan_version_id_from: typing.Optional[str] = None plan_version_id_to: str diff --git a/src/schematic/types/plan_version_migration_status.py b/src/schematic/types/plan_version_migration_status.py index 68d1d3e..50163d3 100644 --- a/src/schematic/types/plan_version_migration_status.py +++ b/src/schematic/types/plan_version_migration_status.py @@ -2,4 +2,6 @@ import typing -PlanVersionMigrationStatus = typing.Union[typing.Literal["completed", "failed", "in_progress", "pending"], typing.Any] +PlanVersionMigrationStatus = typing.Union[ + typing.Literal["cancelled", "completed", "failed", "in_progress", "pending"], typing.Any +] diff --git a/src/schematic/types/plan_version_migration_strategy.py b/src/schematic/types/plan_version_migration_strategy.py index 8d70b32..a0d3913 100644 --- a/src/schematic/types/plan_version_migration_strategy.py +++ b/src/schematic/types/plan_version_migration_strategy.py @@ -2,4 +2,4 @@ import typing -PlanVersionMigrationStrategy = typing.Union[typing.Literal["immediate", "leave"], typing.Any] +PlanVersionMigrationStrategy = typing.Union[typing.Literal["end_of_billing_period", "immediate", "leave"], typing.Any] From ae3f8880ad233a453bfc6f98401334d706fa9fec Mon Sep 17 00:00:00 2001 From: "fern-api[bot]" <115122769+fern-api[bot]@users.noreply.github.com> Date: Mon, 31 Aug 2026 10:03:02 +0000 Subject: [PATCH 2/2] [fern-replay] advance lockfile --- .fern/replay.lock | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/.fern/replay.lock b/.fern/replay.lock index 9cbd85c..84ce67f 100644 --- a/.fern/replay.lock +++ b/.fern/replay.lock @@ -42,5 +42,11 @@ generations: cli_version: unknown generator_versions: fernapi/fern-python-sdk: 5.29.1 -current_generation: e85d697e829ba85f2c9b84f3613717390fcc3bc0 + - commit_sha: 308f5addafebb8bdbc3829e694b5f3e051580ee4 + tree_hash: 00a6fcd72632825431b7ccbfe321b504e1c19381 + timestamp: 2026-08-31T10:02:58.030Z + cli_version: unknown + generator_versions: + fernapi/fern-python-sdk: 5.29.2 +current_generation: 308f5addafebb8bdbc3829e694b5f3e051580ee4 patches: []