diff --git a/.fern/metadata.json b/.fern/metadata.json
index d05d804e..ce714085 100644
--- a/.fern/metadata.json
+++ b/.fern/metadata.json
@@ -1,7 +1,7 @@
{
"cliVersion": "5.50.0",
"generatorName": "fernapi/fern-python-sdk",
- "generatorVersion": "5.41.10",
+ "generatorVersion": "5.41.16",
"generatorConfig": {
"inline_request_params": true,
"client": {
@@ -52,10 +52,10 @@
},
"pyproject_toml": "[[tool.poetry.include]]\npath = \"src/schematic/datastream/wasm/*.wasm\"\nformat = [\"sdist\", \"wheel\"]\n\n[[tool.mypy.overrides]]\nmodule = \"redis.*\"\nignore_missing_imports = true\n"
},
- "originGitCommit": "6d2cbedf447a3e0916031392e5a8ec1c46d245d3",
+ "originGitCommit": "e6a4fb2c8313262a81b70c5f06e15eaeb196abba",
"originGitCommitIsDirty": false,
"invokedBy": "ci",
- "requestedVersion": "1.4.7",
+ "requestedVersion": "1.4.8",
"ciProvider": "github",
- "sdkVersion": "1.4.7"
+ "sdkVersion": "1.4.8"
}
\ No newline at end of file
diff --git a/.fern/replay.lock b/.fern/replay.lock
index 4f70e207..62c2b5a0 100644
--- a/.fern/replay.lock
+++ b/.fern/replay.lock
@@ -132,7 +132,13 @@ generations:
cli_version: unknown
generator_versions:
fernapi/fern-python-sdk: 5.41.10
-current_generation: 5e46d4d4d4fe2d0227eee853538a0474112ed89b
+ - commit_sha: 5416d29614b67201dfc49e8044b69f64315f61b5
+ tree_hash: a68708e307db10a0767bd371322a20a60f7464f2
+ timestamp: 2026-11-02T10:03:15.632Z
+ cli_version: unknown
+ generator_versions:
+ fernapi/fern-python-sdk: 5.41.16
+current_generation: 5416d29614b67201dfc49e8044b69f64315f61b5
patches: []
dismissals:
- patch_id: patch-f12c60b5
diff --git a/poetry.lock b/poetry.lock
index a3a66595..92ee705d 100644
--- a/poetry.lock
+++ b/poetry.lock
@@ -230,14 +230,14 @@ files = [
[[package]]
name = "anyio"
-version = "4.15.1"
+version = "4.16.0"
description = "High-level concurrency and networking framework on top of asyncio or Trio"
optional = false
python-versions = ">=3.10"
groups = ["main"]
files = [
- {file = "anyio-4.15.1-py3-none-any.whl", hash = "sha256:6152fdbbf9a77fdec97731721bebf7c4c44f7c29b424b0065826173efc7ed101"},
- {file = "anyio-4.15.1.tar.gz", hash = "sha256:9f28306018cbd6d329e64a36d58256edff76dd996fe423bc957326e578b82a94"},
+ {file = "anyio-4.16.0-py3-none-any.whl", hash = "sha256:c66ae634e0b8228396b801741beb3294326d4b6102f7bba4041c0dfb58c29026"},
+ {file = "anyio-4.16.0.tar.gz", hash = "sha256:59bb03251907983d1603d27c3087ddb1e93299ea2163adcdba37899a4fb12ffb"},
]
[package.dependencies]
@@ -1121,19 +1121,19 @@ files = [
[[package]]
name = "pydantic"
-version = "2.14.1"
+version = "2.14.2"
description = "Data validation using Python type hints"
optional = false
python-versions = ">=3.10"
groups = ["main"]
files = [
- {file = "pydantic-2.14.1-py3-none-any.whl", hash = "sha256:9195d967ec791692a04438115466764fb8b9a27b31f14a760437694f40d6b454"},
- {file = "pydantic-2.14.1.tar.gz", hash = "sha256:94f478203dd03404682a1ada216965651dd74b1d2d5ffd62e00e0837caab5c26"},
+ {file = "pydantic-2.14.2-py3-none-any.whl", hash = "sha256:7efbf7507b937931cd32a5755acb00ea1cf5ccb1d4e8067a5850d5069e382118"},
+ {file = "pydantic-2.14.2.tar.gz", hash = "sha256:fb7b2db6cefe8414dd612edeede49c4c433acb0432b0f92b95024e45f66c505d"},
]
[package.dependencies]
annotated-types = ">=0.6.0"
-pydantic-core = "2.50.1"
+pydantic-core = "2.50.2"
typing-extensions = ">=4.16.0"
typing-inspection = ">=0.4.4"
@@ -1143,149 +1143,153 @@ timezone = ["tzdata ; platform_system == \"Windows\""]
[[package]]
name = "pydantic-core"
-version = "2.50.1"
+version = "2.50.2"
description = "Core functionality for Pydantic validation and serialization"
optional = false
python-versions = ">=3.10"
groups = ["main"]
files = [
- {file = "pydantic_core-2.50.1-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:b281a3b0f0822618fe5e3e0d8a2048b6356b14388505dc9374ccffeb69989713"},
- {file = "pydantic_core-2.50.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:1fa4c8bc12c1354c5550c0c35c1852c8c1901e89e06561724e03f8d0342e1f87"},
- {file = "pydantic_core-2.50.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3aa9de446b793de2beb6fa2d9d0961803126c4e2a99c2f25ab59b9fd6ea125c0"},
- {file = "pydantic_core-2.50.1-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:de531ce1e2a3364e8767878b58f4ff728a434b4fde089781fe30b1e08e2396e0"},
- {file = "pydantic_core-2.50.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a7c58106de36ac6a56314182958de20db8d3a29dfd5db527192cc754e4f8e7fb"},
- {file = "pydantic_core-2.50.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8b4c3df25bd323bf1d36a648d563cf1fc69d717451569927151bdad7cad07a77"},
- {file = "pydantic_core-2.50.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f77ac30b19221cd9bd3fcfa3d4614eff93140d0572ab730cded17b64adca05f3"},
- {file = "pydantic_core-2.50.1-cp310-cp310-manylinux_2_31_riscv64.whl", hash = "sha256:d939de9c82e2126f7f48a7e658f8a85ed46d57662d53f44c49b8895fe94a3eb7"},
- {file = "pydantic_core-2.50.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:30ddf019d082c117b5d309e5b86710c2a78909907ec1a9381feec3eec02eca0b"},
- {file = "pydantic_core-2.50.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:2ab756b72bd5054e4c7ef3ded331b35786cbd3cf931531a508f79a9537517064"},
- {file = "pydantic_core-2.50.1-cp310-cp310-musllinux_1_1_armv7l.whl", hash = "sha256:b087b1c5be7ac687cf22eabfe4b6b608d40df23610651e93611e1f49118baf84"},
- {file = "pydantic_core-2.50.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:a44101320cfe99432db74237545a63057dc7a88dfe792cbcad0647f2af56cb81"},
- {file = "pydantic_core-2.50.1-cp310-cp310-win32.whl", hash = "sha256:a4aaaa791bdae1c972a7e81765f4f3571c926b8e0b9b6e47346499fb80079665"},
- {file = "pydantic_core-2.50.1-cp310-cp310-win_amd64.whl", hash = "sha256:2eedf82ee4753cdab8e50044c6bd569577eebc3859b11fecf4eb9223761ff966"},
- {file = "pydantic_core-2.50.1-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:c531166c42ea7bdfecc8c50049581f05dd1993b09cc7c52bb36a14e96deaec7d"},
- {file = "pydantic_core-2.50.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:b6d0c2183008c188e19f4906d426b293bdc4f67ab17df8e180fe16cda208fa71"},
- {file = "pydantic_core-2.50.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:94be440c03fede26969a5ce75468e0e6a9927a1b46d9b679ee8adc1b057b0350"},
- {file = "pydantic_core-2.50.1-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:36c426eac0af8d1529ff8467e612b933346caec1fdc0d774f78f67a1a11e16c1"},
- {file = "pydantic_core-2.50.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:028e2f212273d4a39b1ec1e0de8166b1165a65fc0f1111452a9d94fc7c625c63"},
- {file = "pydantic_core-2.50.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e6f0cc1bb9900dc558960894adeb30b0c083366fc1d69b856209fb2ca5c36fe5"},
- {file = "pydantic_core-2.50.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8812592c85d0edf423f10eadcef42716d71e8219085ad9e85b775057b7306133"},
- {file = "pydantic_core-2.50.1-cp311-cp311-manylinux_2_31_riscv64.whl", hash = "sha256:bbce99252ba3167b2b6277f1829d5bf4b43b754524bddf7f944707c3db7d2253"},
- {file = "pydantic_core-2.50.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:476f6ed8e43cd1e0b460920e23571700872b284e77331cb30c4faf459cf48a4b"},
- {file = "pydantic_core-2.50.1-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:2cbd1b75b09e976ed0d6b6ca297675632ca35df86130088457cdc60ef36970ae"},
- {file = "pydantic_core-2.50.1-cp311-cp311-musllinux_1_1_armv7l.whl", hash = "sha256:5958c72adb417c39b12ac87525ac60b0d73315fcdc59e21f44ee4a5e2512c9ef"},
- {file = "pydantic_core-2.50.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:d8f9e8a6c4ab04b78d61f78627370d834eb004b2869dcb28cfffa647b4ea1980"},
- {file = "pydantic_core-2.50.1-cp311-cp311-win32.whl", hash = "sha256:4be846f55c9477f5f3ddde8f2ce941137e16862a56d018ed885d422bb6ae02f2"},
- {file = "pydantic_core-2.50.1-cp311-cp311-win_amd64.whl", hash = "sha256:0048b6dddc8ef4b64fccaad878bd143b0c3882ea9936279dc11d613f6b7dd1bc"},
- {file = "pydantic_core-2.50.1-cp311-cp311-win_arm64.whl", hash = "sha256:6a733778df2f7087ec1100ed0b41533e4f3001976e99570fa34f57c66e7f8e3e"},
- {file = "pydantic_core-2.50.1-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:704075d10b74f2f3c6e15407c696d88701df35fc8953f434a431add0d0074db0"},
- {file = "pydantic_core-2.50.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:e8e1d6ce820aa23317e8209a86bd65a540973c12dc7552b48a4f6c8e9926815e"},
- {file = "pydantic_core-2.50.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c18db21573bd2c6489f9a544b7499f0df2853958c568e5e783536ee1f690af41"},
- {file = "pydantic_core-2.50.1-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:cb57f304525a5e3c13333b772bf9a473f36326e9c821b2e8e1b2fd36f80ae2c3"},
- {file = "pydantic_core-2.50.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a27c09d86600f1bf2fe3f37e1ae697faf3143931c09322cd799da94deee923b5"},
- {file = "pydantic_core-2.50.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:46b3301d3b5c886f77de7546e47274a5842c622ea2020b8c6524c6b66913b4a6"},
- {file = "pydantic_core-2.50.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:93ba4e9d8210d941c200431a56b2c0400b131865947903937ed3ec5404307d2e"},
- {file = "pydantic_core-2.50.1-cp312-cp312-manylinux_2_31_riscv64.whl", hash = "sha256:e5faeaee74a57d32b3ab3aebad2e348f06d3ba946fc5d28c1728455f00a3d13a"},
- {file = "pydantic_core-2.50.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:a3cda0e538208e5d722bbf3698b24f19c0a7d05bc8d5f8a7f9b121ea7fa243d9"},
- {file = "pydantic_core-2.50.1-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:57f51b31ff826e2859120cf4737c5a758a48d96f3e97da40ccee1796d58078ff"},
- {file = "pydantic_core-2.50.1-cp312-cp312-musllinux_1_1_armv7l.whl", hash = "sha256:8daa7ee75245d43ad7d747e5c9ecc1b1d06552f72b14887e9276f787d57375f4"},
- {file = "pydantic_core-2.50.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:acbf31f37c53a5ac0c34706c80b4f5107ba20b05fdd3816124bf236ef0c57dd2"},
- {file = "pydantic_core-2.50.1-cp312-cp312-win32.whl", hash = "sha256:45b11cac094aa25725581d9304eee93c9028516b9ea80dd9e175e13a5a2c840e"},
- {file = "pydantic_core-2.50.1-cp312-cp312-win_amd64.whl", hash = "sha256:132529c83901437ff642f585216831bf5fd7a91df66829907e155192ead62498"},
- {file = "pydantic_core-2.50.1-cp312-cp312-win_arm64.whl", hash = "sha256:4e834f6a8e4ff772dcc34f58ef5504147a3ea5b0f4eeb13b0f8eb2ca75ac57f1"},
- {file = "pydantic_core-2.50.1-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:d5e062c01286d861fd6a1c4ff6e063547b3e713067f2df033c0ff97ac2ca006b"},
- {file = "pydantic_core-2.50.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:0c003c3b7f49debb893d2d85ae099ac5959c9839e2f330fadb1fcdf7a6594482"},
- {file = "pydantic_core-2.50.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:409e0ea40ec30d9158f33574fd758e689f6045a0f2596701828c27816ca9687d"},
- {file = "pydantic_core-2.50.1-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:131059670f1d2444269b8585cb888963994871932447c08b39ac6a51fcfef658"},
- {file = "pydantic_core-2.50.1-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:6dbcbee53bf17196a7f745aa9bf5a9603953a1e365b1f020be3207c676a3e7c4"},
- {file = "pydantic_core-2.50.1-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:325c23f3e35cfbf0fe3486fa5f7260d1e45885173002d30a28ca019994124255"},
- {file = "pydantic_core-2.50.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:17e722e156d0444ecaefbe640bdb60928752bf2013e2b7a11cdb099aaae19bec"},
- {file = "pydantic_core-2.50.1-cp313-cp313-manylinux_2_31_riscv64.whl", hash = "sha256:aa8224f10880d9bf1b5993988ba153d42a8b4f3f4f511f93b1f09c93ff613c72"},
- {file = "pydantic_core-2.50.1-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:41bc8237121bd8dc8d888dfd6279fc166ffc88c1f1bf3a8bf00869680533ca4c"},
- {file = "pydantic_core-2.50.1-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:45c6266d071c241f2a168d45bf8c54344f0effce35e7e6b73afdec11f3687568"},
- {file = "pydantic_core-2.50.1-cp313-cp313-musllinux_1_1_armv7l.whl", hash = "sha256:1deeacb112d14d3f4fcb16b165f7dbaf76c70ba6e82f37ba042bdab51970a0b8"},
- {file = "pydantic_core-2.50.1-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:1c96fd793b73d1b92e65570132505498fe7b21eaef73cdf74e67e5dfba7ac9e4"},
- {file = "pydantic_core-2.50.1-cp313-cp313-win32.whl", hash = "sha256:06ead20d39ffd6f2f6f2a8f8a6de67ff8bb1b4f14a8a30e058502514ee2ac685"},
- {file = "pydantic_core-2.50.1-cp313-cp313-win_amd64.whl", hash = "sha256:7816e98acc08119dc0f340ab167048ecc54126316330c1f0caf7c6756c88e28f"},
- {file = "pydantic_core-2.50.1-cp313-cp313-win_arm64.whl", hash = "sha256:c17799a62c142d61b8a3c51752a7cbc87fe2ad4ccfab10e628a77b405075c662"},
- {file = "pydantic_core-2.50.1-cp314-cp314-macosx_10_12_x86_64.whl", hash = "sha256:1cf41f1ae3fa155cf167a72689ad044bcc1e3c97e064123677149bdfb5dafc4a"},
- {file = "pydantic_core-2.50.1-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:4df197990c15b5a37c5a277d131d9f2c67de6133f2e5dafd80d9bba4b99f46f9"},
- {file = "pydantic_core-2.50.1-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0036473f5583e6a60e50b8b21651511564277a3f05cc5dab8cf579f552cd5f6c"},
- {file = "pydantic_core-2.50.1-cp314-cp314-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:992c3514ec891fa7858099183e4d64e6bd5a5d4ff452fae29df22faa77a006bb"},
- {file = "pydantic_core-2.50.1-cp314-cp314-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:739dc730e6be3bd5ec2f4ab5cfc7eb047cc45fc1497b3bafec74ff2ed07df597"},
- {file = "pydantic_core-2.50.1-cp314-cp314-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:32fad3a91e51b6d2039c572db04a5a873260b399f6bd62c3552671fa7a4a2899"},
- {file = "pydantic_core-2.50.1-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:42b54c2c90ad348b5e3a85e03e715d572c1fde357ef104cdfe3b03b697a404ea"},
- {file = "pydantic_core-2.50.1-cp314-cp314-manylinux_2_31_riscv64.whl", hash = "sha256:2df1ff41884de2bc4b307bafd7c40a691094fad2ff8e767e5b45a319257bcf4e"},
- {file = "pydantic_core-2.50.1-cp314-cp314-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:fe90228920fd8ff2be62622b6bb8a2b11acd65046d50c6b130614b5879605a20"},
- {file = "pydantic_core-2.50.1-cp314-cp314-musllinux_1_1_aarch64.whl", hash = "sha256:844b869f118e22a41a091bdcedda8a71bc1b0f62c38d1a0c3211cece47e1d8fc"},
- {file = "pydantic_core-2.50.1-cp314-cp314-musllinux_1_1_armv7l.whl", hash = "sha256:2eb75304506894a281d346220a4f7481a1b8729577c5ed2a05395991966a8396"},
- {file = "pydantic_core-2.50.1-cp314-cp314-musllinux_1_1_x86_64.whl", hash = "sha256:6b20a4bffabdad0db2927ac034ae3b8a681b1f7a0182f3e60b479ad2fde21ebb"},
- {file = "pydantic_core-2.50.1-cp314-cp314-pyemscripten_2026_0_wasm32.whl", hash = "sha256:99ba9bc2b8062ea0c326a990f7f00e6530c23579de66dd246e72c4cafef950a5"},
- {file = "pydantic_core-2.50.1-cp314-cp314-win32.whl", hash = "sha256:cf356f70551d40374eaffb1aa63f1eb6d2006681cbd7a9faea173ce0f4dd7cd2"},
- {file = "pydantic_core-2.50.1-cp314-cp314-win_amd64.whl", hash = "sha256:d32f3acc081cc3923386d88f422cde8892335e95f034e0104bb4cf9310d9915f"},
- {file = "pydantic_core-2.50.1-cp314-cp314-win_arm64.whl", hash = "sha256:bed5163e03b98bc1fa2eb05d74c63d9c5c95d8ed6254985481640fbf5e237dea"},
- {file = "pydantic_core-2.50.1-cp314-cp314t-macosx_10_12_x86_64.whl", hash = "sha256:9572c1369e9c9da2d64a7b7992c786d90ff295abc93964cfe3125e4290768070"},
- {file = "pydantic_core-2.50.1-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:2005207aafe1231315718bf6ed5d064a7300fb4772754af35ee72fc68159492e"},
- {file = "pydantic_core-2.50.1-cp314-cp314t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:64f6047f62a6c5ae08d0a6afb035667aa2d97c3d20d69762e034c5ea144d92a5"},
- {file = "pydantic_core-2.50.1-cp314-cp314t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:1ef800dd7d85bcdadf4c3076e4c94e43939493558a3b69a1ea830c706d4617bb"},
- {file = "pydantic_core-2.50.1-cp314-cp314t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b0135bcdcaa0f23573f286e4cb5e0fd2962700964ed13df085b85f2b97aeab9e"},
- {file = "pydantic_core-2.50.1-cp314-cp314t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:0b3a6f334c6a2345ca15318ff894502a90012536404b37c844a976c76c846e0b"},
- {file = "pydantic_core-2.50.1-cp314-cp314t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:06e01fbbfdb9be777b316a71b6c49efaf4a08b615d0a98d678cda3023f79d019"},
- {file = "pydantic_core-2.50.1-cp314-cp314t-manylinux_2_31_riscv64.whl", hash = "sha256:a29a061fec0b4e2d714f277e70a3a18125ecff803f2fea6eade2f2e53711d112"},
- {file = "pydantic_core-2.50.1-cp314-cp314t-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:f5187624823423e1d1b82b1072ac41dc837389e18d3d0572cc19bbee46cd550a"},
- {file = "pydantic_core-2.50.1-cp314-cp314t-musllinux_1_1_aarch64.whl", hash = "sha256:3e46a9eb0a0901dd6275e6b06ac3a464885ef350ec4121fe486869de8053e4bb"},
- {file = "pydantic_core-2.50.1-cp314-cp314t-musllinux_1_1_armv7l.whl", hash = "sha256:756d669f04e62ec4148ecfe22be6a4484d9b1181a6ef32e205ebfd200540858b"},
- {file = "pydantic_core-2.50.1-cp314-cp314t-musllinux_1_1_x86_64.whl", hash = "sha256:c516cc5367ca3448995d42cb994bf3f4c9002d2a7c22eac9622551269ad1b807"},
- {file = "pydantic_core-2.50.1-cp314-cp314t-win32.whl", hash = "sha256:9d1bed94af6a63835461f3cf7502058eb166c58c4778e11d0f433cfb1bd69e19"},
- {file = "pydantic_core-2.50.1-cp314-cp314t-win_amd64.whl", hash = "sha256:c8dce1f1e0e5358b682a6ad3fa5e31b31d4560997b8e61417e9217c8d60f8a0c"},
- {file = "pydantic_core-2.50.1-cp314-cp314t-win_arm64.whl", hash = "sha256:ceff0acc940be2715bd6ad17b24c0e5304abf44f6efd0f81ee8499e640f9dc86"},
- {file = "pydantic_core-2.50.1-cp315-cp315-macosx_10_12_x86_64.whl", hash = "sha256:8a6791afa2245e6c6b180122d105941644f5bd410bb18623b408808cc41a3102"},
- {file = "pydantic_core-2.50.1-cp315-cp315-macosx_11_0_arm64.whl", hash = "sha256:84f34323a61a365b4e9295de6028474754829aaddd59c7bf1a040e7487ef8f3c"},
- {file = "pydantic_core-2.50.1-cp315-cp315-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:23edad659e8dbd8ca7e4e877fe6c81573abbdf215bd25a68b53e1272f58b80c7"},
- {file = "pydantic_core-2.50.1-cp315-cp315-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:3a5fce22f1e87d181e924e12da7d81cfe031fb3881a5ddf26ad28f141756ca43"},
- {file = "pydantic_core-2.50.1-cp315-cp315-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c73622ef819328873b53109ee4f77ceb598bffedd02daf916102be3228866b78"},
- {file = "pydantic_core-2.50.1-cp315-cp315-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ce8c25ca38cc0e3d7753ba180808de2c0c8cb24eae0df64491e40921454e9831"},
- {file = "pydantic_core-2.50.1-cp315-cp315-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7689580e72a642ab5ec64d5f55b2e33636fa43b4ebe63c0c2c965ef307c7d1aa"},
- {file = "pydantic_core-2.50.1-cp315-cp315-manylinux_2_31_riscv64.whl", hash = "sha256:d5c0e32fdbce7f1e8ef4d11f655694bf5f4175c757a9f1dc2be09b8864e5bcf5"},
- {file = "pydantic_core-2.50.1-cp315-cp315-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:40f523349960fa30f3ea51404308ff50f9997a90df639590f47a057c1f32b415"},
- {file = "pydantic_core-2.50.1-cp315-cp315-musllinux_1_1_aarch64.whl", hash = "sha256:d4193206b6587047437f6f11d7e776df23e1c1e23af2a54d9347275614791e10"},
- {file = "pydantic_core-2.50.1-cp315-cp315-musllinux_1_1_armv7l.whl", hash = "sha256:84bc765b282a9d5b7fe0348b8648904f25a6a04b2139da52b1dd30c8ac3a2c8f"},
- {file = "pydantic_core-2.50.1-cp315-cp315-musllinux_1_1_x86_64.whl", hash = "sha256:ed1e728b39a383c81035b2459cfcb35d99dfb01f7d6ebe3a913bc1cc5b81e459"},
- {file = "pydantic_core-2.50.1-cp315-cp315-win32.whl", hash = "sha256:bc94f474417604bd383d2cd445d071b07dd55fedceed3ce33407bf1fcc107290"},
- {file = "pydantic_core-2.50.1-cp315-cp315-win_amd64.whl", hash = "sha256:983a662de2571cb2502fc8ff47b6770b03d025d2eb314c92f77b3f07c74720ed"},
- {file = "pydantic_core-2.50.1-cp315-cp315-win_arm64.whl", hash = "sha256:94845ff54dc5193f228cab81b2662a04bfbb892e95bdc15edf7399000ce57d54"},
- {file = "pydantic_core-2.50.1-cp315-cp315t-macosx_10_12_x86_64.whl", hash = "sha256:4a53d13cdfbedbfa87f08b83c1a0a5efcc767d785a4b41934fa9cb672670493a"},
- {file = "pydantic_core-2.50.1-cp315-cp315t-macosx_11_0_arm64.whl", hash = "sha256:efbecf43d321f7b9281441f1f213f7c21c66988b0e06c2730ba13ed47a46bb08"},
- {file = "pydantic_core-2.50.1-cp315-cp315t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bc1f08f68dac9f9e83845a8039880aba2ab553eb9b2259c3243a313182c253fe"},
- {file = "pydantic_core-2.50.1-cp315-cp315t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:5dfe41f232befddb9c4377f6cfc702b51595e2d78ed082672adf8758d2c4619f"},
- {file = "pydantic_core-2.50.1-cp315-cp315t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:adc06d218a1cadfd2ec4628424d7d79ce4eba69c2965e7e7b55106f0da5208c8"},
- {file = "pydantic_core-2.50.1-cp315-cp315t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2cf91809d0721ab81592ba67bea7694821679c10b1a2e3c3460082b286c1918a"},
- {file = "pydantic_core-2.50.1-cp315-cp315t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:23923ab9292c40da026330b1ecf4dc2618c8e86e0422e5d1fbf50d94d64ca4f8"},
- {file = "pydantic_core-2.50.1-cp315-cp315t-manylinux_2_31_riscv64.whl", hash = "sha256:f3377c8c2b3ce898423c5e5dd94c7982e30aa7717a7e6ab2470b9de364963709"},
- {file = "pydantic_core-2.50.1-cp315-cp315t-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:455a773617b5913bf5c20d0692e5787b119e52c4d40ea644ca31f5758fd31be2"},
- {file = "pydantic_core-2.50.1-cp315-cp315t-musllinux_1_1_aarch64.whl", hash = "sha256:1a9006395dece0e32e704c315eff8a00bede494f6108546cfc5539c89fef4f9a"},
- {file = "pydantic_core-2.50.1-cp315-cp315t-musllinux_1_1_armv7l.whl", hash = "sha256:d2d82aa62521c55ddfb000ae70f88cdd8de974078f6024e821dfe5addd0c818f"},
- {file = "pydantic_core-2.50.1-cp315-cp315t-musllinux_1_1_x86_64.whl", hash = "sha256:009634b83993777ddcd69cad0ffcace43dabde692109528e35f0fde91e386a8b"},
- {file = "pydantic_core-2.50.1-cp315-cp315t-win32.whl", hash = "sha256:3fde4fdc6487a58d944ca87cf5adc95d5f266e872c19599f5f4c0a8a1b1f9f9f"},
- {file = "pydantic_core-2.50.1-cp315-cp315t-win_amd64.whl", hash = "sha256:1c8632d4ac04e6f91128fca584b3a8a507d81604c24eeaaad00d4be42765c32b"},
- {file = "pydantic_core-2.50.1-cp315-cp315t-win_arm64.whl", hash = "sha256:c3ede305158e75510be50869b319550ab072008c13d64d4ab1e094fb286b6f44"},
- {file = "pydantic_core-2.50.1-graalpy311-graalpy242_311_native-macosx_10_12_x86_64.whl", hash = "sha256:062e891facce5ca296a1c37098e5e466780457f86413894b399f0cf22934f769"},
- {file = "pydantic_core-2.50.1-graalpy311-graalpy242_311_native-macosx_11_0_arm64.whl", hash = "sha256:49c2cbb2397fe4d0987e84606e691af6cb87bc0ee1bd3e7b737f7e10b4c142f9"},
- {file = "pydantic_core-2.50.1-graalpy311-graalpy242_311_native-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9e4472072de0137ee0d8e72d6620e85939c271d2f90f6bbb4b15c24638b79f92"},
- {file = "pydantic_core-2.50.1-graalpy311-graalpy242_311_native-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6ed4f3cef55164b026fefb41341b7754cc6b624c75dfe7142d2ecceb5ad21c87"},
- {file = "pydantic_core-2.50.1-graalpy312-graalpy250_312_native-macosx_10_12_x86_64.whl", hash = "sha256:76e2e83fa6ec8cdc972d438dafc2522b3a47bee4ec0ae668b29cfb1977ab5242"},
- {file = "pydantic_core-2.50.1-graalpy312-graalpy250_312_native-macosx_11_0_arm64.whl", hash = "sha256:a51eee75939cf811ac09b278745a6cee7dc873ccfbc8b9af3cc88fe4b7ce25b5"},
- {file = "pydantic_core-2.50.1-graalpy312-graalpy250_312_native-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ae28183297fb0d2b8dc46a1f01d51f5e45825fc5afe76a835a6cb7fb34821295"},
- {file = "pydantic_core-2.50.1-graalpy312-graalpy250_312_native-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:88e492e8b9d0312e7dc13667c30222abf284dc3b79b5302b3607b41a5784ce61"},
- {file = "pydantic_core-2.50.1-pp311-pypy311_pp73-macosx_10_12_x86_64.whl", hash = "sha256:7456d699b13954e9c0164dcb267250a10ae0dfb03e6e26d6796ab0d46e189c84"},
- {file = "pydantic_core-2.50.1-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:b0d955195bbbe489ad343fcc956eacea9357b79cb22192c66cacdefcbc14b32f"},
- {file = "pydantic_core-2.50.1-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f2c634642694e6a0dad2ab1d375589fa671fd442edd5caf7d9737b8f6ca22906"},
- {file = "pydantic_core-2.50.1-pp311-pypy311_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:ee6db2fbed51a7991302e8fac498cd67e336246026d0dfa84cf5166ce1412760"},
- {file = "pydantic_core-2.50.1-pp311-pypy311_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:79490e33c4c0fcb933bbbcfc3a62184d8803b99f535863dfbb925e1bcb6945ad"},
- {file = "pydantic_core-2.50.1-pp311-pypy311_pp73-musllinux_1_1_armv7l.whl", hash = "sha256:48569b0ade9edfbe065cad1d700175546592aebbb42f02adcebcc26e75b896fe"},
- {file = "pydantic_core-2.50.1-pp311-pypy311_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:5f3cae32fc46121f787cb2486de9cf95a8bf72aec5cc78f64c606fa1735a6ef5"},
- {file = "pydantic_core-2.50.1-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:7f476456ac2bb0d937f75191494a09c83a30765fea4f70f3b404942fe25f6cdf"},
- {file = "pydantic_core-2.50.1.tar.gz", hash = "sha256:e50d7b94baac6c7d09927fa5ca5800a0c7ee5015c7fcff65beb3a1931b5a6e09"},
+ {file = "pydantic_core-2.50.2-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:6258754c473b3045a7aa30b833a8a331a1ab36c6147cb230789861d80bb26f83"},
+ {file = "pydantic_core-2.50.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:a786cf782ebb2e45a43c7118d75d452aac982b79577dfe804d8dbf2878f0b589"},
+ {file = "pydantic_core-2.50.2-cp310-cp310-manylinux1_i686.manylinux_2_5_i686.whl", hash = "sha256:ea71b94a2eb5d2fc102926321f56d2ee8eddfad2673eadb1d23e9f287a492715"},
+ {file = "pydantic_core-2.50.2-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:71615edeaf1ae70f5f3f558426072eede0168b7e5190fd9633878e29a0b85732"},
+ {file = "pydantic_core-2.50.2-cp310-cp310-manylinux2014_armv7l.manylinux_2_17_armv7l.whl", hash = "sha256:1a5e859f5a8a6d834b0a13acaa0eaddf1a9b4b015fcda13bab7b471e18299d32"},
+ {file = "pydantic_core-2.50.2-cp310-cp310-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:d71a9a9352acbcb5c73d39dd003383599428067b6eda5cf7c5d335a7a0da37e1"},
+ {file = "pydantic_core-2.50.2-cp310-cp310-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:bf7f99a0e6616cea754e2334d129091f3260d011369d9b8c658522bfb2427619"},
+ {file = "pydantic_core-2.50.2-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:5c12a5a080570a91bbcbf6d10db008b80e3f5dea015ef2f0137bbec70f24f3f3"},
+ {file = "pydantic_core-2.50.2-cp310-cp310-manylinux_2_31_riscv64.whl", hash = "sha256:89213368eef163350af37127939ace099010e8102757905c3e329f1175950ed8"},
+ {file = "pydantic_core-2.50.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:d93c066a38f83376b5bc020e563666784d1b680a70d6ceb625fdb541af7a312e"},
+ {file = "pydantic_core-2.50.2-cp310-cp310-musllinux_1_1_armv7l.whl", hash = "sha256:eec187d2876abb6a74203efbe2aa796455c1809334acf4e739dde35da8cfb69f"},
+ {file = "pydantic_core-2.50.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:701bc55d08c22f981973ca4f6fdf4ea102ee1ee3a21b818b66fdb161ea711a4a"},
+ {file = "pydantic_core-2.50.2-cp310-cp310-win32.whl", hash = "sha256:7f9821dfc0c473c96ad55ce4189c7cb4f9c94e7d4f563afb874173243dec1162"},
+ {file = "pydantic_core-2.50.2-cp310-cp310-win_amd64.whl", hash = "sha256:3939538e640c94ab779a05f2d45dafedd01d65d93e1290797f3ac5b59fcb6455"},
+ {file = "pydantic_core-2.50.2-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:2115d7ca6d58554af8a14da3dd32d361a4fe999fae52f115a6155679b5b00e72"},
+ {file = "pydantic_core-2.50.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:b2dd65864aad38dbcc57c3d0e2c978d4286e063378137d8fc0c9fcd558943285"},
+ {file = "pydantic_core-2.50.2-cp311-cp311-manylinux1_i686.manylinux_2_5_i686.whl", hash = "sha256:26b778d4ebb75f181d36220ff0f54a513fc46f053d9b09ce79993c2f00bc45cc"},
+ {file = "pydantic_core-2.50.2-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:e80c47314c7233e7105a7efcfffd89d56e479e558189d1959eeeaf2639a27680"},
+ {file = "pydantic_core-2.50.2-cp311-cp311-manylinux2014_armv7l.manylinux_2_17_armv7l.whl", hash = "sha256:3bfe12243b3ded517c6734d91f127489e2f51bf95cb533b53130fe360333db80"},
+ {file = "pydantic_core-2.50.2-cp311-cp311-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:01eb0282d0b3a065d55956d1be9ce398c46db3dd6d277a6cb2358c8aa8c53179"},
+ {file = "pydantic_core-2.50.2-cp311-cp311-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:196b87b48b2695426920e8470d20f9e99f019ebd86f15808aa018b68086840cd"},
+ {file = "pydantic_core-2.50.2-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:86e7abd24a67f61a4bfe8df059b67a2bdd8bf33705178e98463195d140bd3780"},
+ {file = "pydantic_core-2.50.2-cp311-cp311-manylinux_2_31_riscv64.whl", hash = "sha256:aff31602e8518594e6f6bc670cdb27e37cb7dbeb2d5d0b76a7707b70fe951ddf"},
+ {file = "pydantic_core-2.50.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:a88851e8e332588cb8cced8b5318d1163c7d0bb87830aa8dcafbc4ae9602b73c"},
+ {file = "pydantic_core-2.50.2-cp311-cp311-musllinux_1_1_armv7l.whl", hash = "sha256:3b1bb3950e0794a795c9344d818d5b476189b0c9c9755e8eb8fde87c3acee17a"},
+ {file = "pydantic_core-2.50.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:928a44ad1e21a7e923eb924d601605f0694cd187d2ce5d40bf7ad76650f4627d"},
+ {file = "pydantic_core-2.50.2-cp311-cp311-win32.whl", hash = "sha256:9a87744e683d9a13f60b7fa5242c17f8d283ffa94ad727cb19063b48c3d34960"},
+ {file = "pydantic_core-2.50.2-cp311-cp311-win_amd64.whl", hash = "sha256:b958c217c6e56bef261f516e4caf5d490b079ad6a428752afada5a764cca6c71"},
+ {file = "pydantic_core-2.50.2-cp311-cp311-win_arm64.whl", hash = "sha256:b0e6a2152706d84f7da8b9d34dcecc7e9bde678af32c40bd5b405f427ae0fbdb"},
+ {file = "pydantic_core-2.50.2-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:e3d824b6152e1c0fd58dc6266f2de470eb7b2286135294f5f7cd26a0f0693738"},
+ {file = "pydantic_core-2.50.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:596921489390a002d6a5e303384a0f1f98384f8bb550fbf38a1aafa6093da0f9"},
+ {file = "pydantic_core-2.50.2-cp312-cp312-manylinux1_i686.manylinux_2_5_i686.whl", hash = "sha256:36d8b9725684ca3bf658b90a101d335fc8cae405bb22196b7b5ef41344913756"},
+ {file = "pydantic_core-2.50.2-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:43a8fd56f3c681f3cda2d5c842ad28e88241df742dfcbe8fd1dd437a3056e1f6"},
+ {file = "pydantic_core-2.50.2-cp312-cp312-manylinux2014_armv7l.manylinux_2_17_armv7l.whl", hash = "sha256:6f5a432c6c1ef18a1a02a04b3616b8d3f2f88b13faa46caae1ac6559ab202234"},
+ {file = "pydantic_core-2.50.2-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:5d3cd8be71c4da3c9b42cc92f17e5e3036bdca98bf18555a0e072c3fe87abbb4"},
+ {file = "pydantic_core-2.50.2-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:6a438cb8a3f87f2c49e82e43fb19511d4d5043f53e0787dc4df937ccb904373a"},
+ {file = "pydantic_core-2.50.2-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:9667637665acba166a7dbbc786f14c50512d3a01f7199e0e1a13b929e92d7c7a"},
+ {file = "pydantic_core-2.50.2-cp312-cp312-manylinux_2_31_riscv64.whl", hash = "sha256:b3e681208e2d39fde13fbea449ef2736a85ec1ea2afa41e9193a8c536e71dafe"},
+ {file = "pydantic_core-2.50.2-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:6eb6ff07964f39e33c6f57fefe939514e76b8c0d4a694e5663e2e04e80cc1798"},
+ {file = "pydantic_core-2.50.2-cp312-cp312-musllinux_1_1_armv7l.whl", hash = "sha256:4eb54c25e3463d73e1e4ed439ffc45d1d7e590df40bc7bb06f11a906afd996c3"},
+ {file = "pydantic_core-2.50.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:91238117cd296352f54f24117ff5a227bdea428865dba1244aa0cdd1424c0bc2"},
+ {file = "pydantic_core-2.50.2-cp312-cp312-win32.whl", hash = "sha256:98722314e12a8e4fa346e0afd3fff2098b5732875ff45592b450a7b589b43c4f"},
+ {file = "pydantic_core-2.50.2-cp312-cp312-win_amd64.whl", hash = "sha256:b381574614245f18fdb2d6d1aa8f149e225869c47b5ee7f81812de8977817314"},
+ {file = "pydantic_core-2.50.2-cp312-cp312-win_arm64.whl", hash = "sha256:f07c965a8aa6d62145f122641f292129984f39a3e3697585b19298a1488287db"},
+ {file = "pydantic_core-2.50.2-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:93eb41d626d9a2749a678823c70bba8c25033cef474ae8001fd7621adbbd8437"},
+ {file = "pydantic_core-2.50.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:7c539d452cba22f250103c7d1c00cbe9038eb705e657476e701c43374efd9f2e"},
+ {file = "pydantic_core-2.50.2-cp313-cp313-manylinux1_i686.manylinux_2_5_i686.whl", hash = "sha256:53bd25e8ab54c02bb4c55d4848c1d36f75f3b9a7356e83179fe27794d9e9e6c4"},
+ {file = "pydantic_core-2.50.2-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:f142cd663d1148ed32993ed9a58e5c67ea312f446a01a6c13a956945aafc9f23"},
+ {file = "pydantic_core-2.50.2-cp313-cp313-manylinux2014_armv7l.manylinux_2_17_armv7l.whl", hash = "sha256:126f158474346f457c0759c29c1a6334acd5f7f99dd272bb27d19314f3d81b4d"},
+ {file = "pydantic_core-2.50.2-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:0b94a515f44f1ebcb25395bcdba506c4cdaf6d3fcb0466b9658521b41e5ff057"},
+ {file = "pydantic_core-2.50.2-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:a55c1163e829a08707b4a92c8ee02a5a3a3847ced74aa4da94e3e975ffe1ec63"},
+ {file = "pydantic_core-2.50.2-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:31a1fb3ffbd1195b24490f671d12623dd4c9bfa56d6af0a299fa43b516134f5b"},
+ {file = "pydantic_core-2.50.2-cp313-cp313-manylinux_2_31_riscv64.whl", hash = "sha256:83d6f42ae6eba44548a1a3d4f900a5b1500fdd14f09f04754a8800ab0d544432"},
+ {file = "pydantic_core-2.50.2-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:9fcde11462e0faab4c2a2ae8cd4516f7dd8239eec583bd88c5524d8064ad2d0c"},
+ {file = "pydantic_core-2.50.2-cp313-cp313-musllinux_1_1_armv7l.whl", hash = "sha256:848984e231190ae49bc8b5229e64d2a6fba4231dc6046e1b6b28ddc060bc7601"},
+ {file = "pydantic_core-2.50.2-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:8772c2c0091e6fc2d0499151793d31bf811826986b0727052935a95104845544"},
+ {file = "pydantic_core-2.50.2-cp313-cp313-win32.whl", hash = "sha256:bd6ecae08c0d871cf93b6f0d4ee76b06c65be44ea22311981a022b2f1948cf9d"},
+ {file = "pydantic_core-2.50.2-cp313-cp313-win_amd64.whl", hash = "sha256:e5c801bdf3cc92274b8fc2c7023c8751e5ae81260c009ac558ff55ce712a2d45"},
+ {file = "pydantic_core-2.50.2-cp313-cp313-win_arm64.whl", hash = "sha256:fd9aa71a800c87c0f7ab53fa38009169a23a82c685989626ca74a4bd483e1b67"},
+ {file = "pydantic_core-2.50.2-cp314-cp314-macosx_10_12_x86_64.whl", hash = "sha256:efad0bdc67d3b119c3bab6b94d341a27333c2bb89ed75dfa182a4a06cd0ea329"},
+ {file = "pydantic_core-2.50.2-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:6ffb4dce3ecb2cd563aa30f9eb5088a1cf1f4f688b90cbb374fa96e49fc50b02"},
+ {file = "pydantic_core-2.50.2-cp314-cp314-manylinux1_i686.manylinux_2_5_i686.whl", hash = "sha256:150f6e101f575c21a4ecfed1be1c05bb89a0ad49cb9c846ed377583bd71b32c2"},
+ {file = "pydantic_core-2.50.2-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:1db9cab6197e797824f0479dd2ae5fd2e272aa61c61b7faa5a6e450ca7a0d3b7"},
+ {file = "pydantic_core-2.50.2-cp314-cp314-manylinux2014_armv7l.manylinux_2_17_armv7l.whl", hash = "sha256:1b9f652e17a13bbc09b45f74c3c326cca72059ce4dcdef687fcb04389db413a9"},
+ {file = "pydantic_core-2.50.2-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:823b222c4fc861a82c650998a6117ecbd150cc71bf8b78f9a31bf3f48c456108"},
+ {file = "pydantic_core-2.50.2-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:783abdfac21247d33bec40aa683d26bba30d61655c40de38b2decc4797aabf92"},
+ {file = "pydantic_core-2.50.2-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:b29b7c5adf4b2be7c941f7f76432aa3269cd5052ff8610376b8ece24d7b02c51"},
+ {file = "pydantic_core-2.50.2-cp314-cp314-manylinux_2_31_riscv64.whl", hash = "sha256:4ac996e42a93d80122a23edce44e02c6b9c4913f5c6198a077da31475341a39a"},
+ {file = "pydantic_core-2.50.2-cp314-cp314-musllinux_1_1_aarch64.whl", hash = "sha256:99e1d482138a71902415ba375bb4627679a5fefd3bd07803c3a8f37632f4981d"},
+ {file = "pydantic_core-2.50.2-cp314-cp314-musllinux_1_1_armv7l.whl", hash = "sha256:a53d5f11cd6d15569ba3e53f3498077f0d5e633f6ec604d2ea613e895017ebee"},
+ {file = "pydantic_core-2.50.2-cp314-cp314-musllinux_1_1_x86_64.whl", hash = "sha256:23385c4626f8b5a7792aa381ea573d9432cfbf4c21375a0a5eed2a4fb64e0e58"},
+ {file = "pydantic_core-2.50.2-cp314-cp314-pyemscripten_2026_0_wasm32.whl", hash = "sha256:9a8a62281fd9c6a373b3fd3d473685e6838d43341eecde5f47729748e2c11ee3"},
+ {file = "pydantic_core-2.50.2-cp314-cp314-win32.whl", hash = "sha256:18f008ef58cd30782f81b6e0119e20b7e884edcefbc2d370162ebe033f6e5c99"},
+ {file = "pydantic_core-2.50.2-cp314-cp314-win_amd64.whl", hash = "sha256:b62c89545d21d930c333208fd548e7b4f262228ba3a322fd75c987a75ab11f31"},
+ {file = "pydantic_core-2.50.2-cp314-cp314-win_arm64.whl", hash = "sha256:6e731bf5a5e8e25398544d7709e39068ec4230b0177e4db7fa955692fd415ba3"},
+ {file = "pydantic_core-2.50.2-cp314-cp314t-macosx_10_12_x86_64.whl", hash = "sha256:33c6800ab9563adaa0d7893e9cd8f5b972ef1e6a23df70498e05c24f3fcec5e1"},
+ {file = "pydantic_core-2.50.2-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:f81df206b937d0dca5efb38c25fc99037d82dbcd3740e34c3f81997d2322ac1c"},
+ {file = "pydantic_core-2.50.2-cp314-cp314t-manylinux1_i686.manylinux_2_5_i686.whl", hash = "sha256:21ea3b00f1e87c66f3f9e92f9f6fec20495ac0e60d7d2e68ba1fc49739d7cf40"},
+ {file = "pydantic_core-2.50.2-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:9eff570402175c7d5fff8497d5a9c05580664a79bb66c07b8f205d17f69e580b"},
+ {file = "pydantic_core-2.50.2-cp314-cp314t-manylinux2014_armv7l.manylinux_2_17_armv7l.whl", hash = "sha256:240fec32a74af0979f7253532859b3fd209ad5eea822416bb010929dba445c3d"},
+ {file = "pydantic_core-2.50.2-cp314-cp314t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:92acf02c770b9d5c4e9a3e8d64e9d95ae26456a86ebb7b7cf64a97f899e5871b"},
+ {file = "pydantic_core-2.50.2-cp314-cp314t-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:1ac5b99bc7b0a68ec64f5f75a6828a7bab5535c8df0cdc07901deb50e0815910"},
+ {file = "pydantic_core-2.50.2-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:713d7c33c0e231e3786eb0ec95885814dd65d5f3a09754399b6acbf5e9365f11"},
+ {file = "pydantic_core-2.50.2-cp314-cp314t-manylinux_2_31_riscv64.whl", hash = "sha256:61e13100b30d8d25fc0d1f0297014b32941bf0975a3584bd08f3adebb68d1ead"},
+ {file = "pydantic_core-2.50.2-cp314-cp314t-musllinux_1_1_aarch64.whl", hash = "sha256:523fe6574aea50f456cbc301c1cdddcbf237939f7657f9af99b4f0f71942b59c"},
+ {file = "pydantic_core-2.50.2-cp314-cp314t-musllinux_1_1_armv7l.whl", hash = "sha256:6c25b8826be85714b27dafe908d3461e1b09e3e31c0279a7029040c832c781ef"},
+ {file = "pydantic_core-2.50.2-cp314-cp314t-musllinux_1_1_x86_64.whl", hash = "sha256:a59db03b80a156a6fbeae41096866d1cb89cdf31031ba44c768a804538880636"},
+ {file = "pydantic_core-2.50.2-cp314-cp314t-win32.whl", hash = "sha256:0d090ae76d5b09c003600c7779b3adcf3d1b49268f616c5c51d844e54c8e318d"},
+ {file = "pydantic_core-2.50.2-cp314-cp314t-win_amd64.whl", hash = "sha256:9b01a092955c1c7530196ad526755cff4f2d11f37ca9a6fc9ebe37ca49a48977"},
+ {file = "pydantic_core-2.50.2-cp314-cp314t-win_arm64.whl", hash = "sha256:4ea01f30e119f1ec7a2034e85c40f491d469896aef02cd6436fd9292fe1be3fb"},
+ {file = "pydantic_core-2.50.2-cp315-cp315-macosx_10_12_x86_64.whl", hash = "sha256:a3317630e2791f56071b82f89bb71624146125e4311e6643f708c6ba744b5ac5"},
+ {file = "pydantic_core-2.50.2-cp315-cp315-macosx_11_0_arm64.whl", hash = "sha256:f73930dacad5e611fe019e18df6f53c30629b1843d038d303b8dec86a32493bd"},
+ {file = "pydantic_core-2.50.2-cp315-cp315-manylinux1_i686.manylinux_2_5_i686.whl", hash = "sha256:e2e6240a0a5ad847017b3d65187877fdb7a11d5a58d43c30736f9f523478913b"},
+ {file = "pydantic_core-2.50.2-cp315-cp315-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:1fdf5b52ed22f1404c2433d0b46df2d86d9befb742d0b9b4042a2325c43cdb97"},
+ {file = "pydantic_core-2.50.2-cp315-cp315-manylinux2014_armv7l.manylinux_2_17_armv7l.whl", hash = "sha256:4e9392ddf67fe97ab9889f796d468c9908a8754b8b6c7520eb03a65012b9a1e7"},
+ {file = "pydantic_core-2.50.2-cp315-cp315-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:48e944091b7bff233920bed8a60b0ed6c96c73d3c5836bf51c4b9a4bfb58e4ca"},
+ {file = "pydantic_core-2.50.2-cp315-cp315-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:91c92856b846aa690ea6239ffd6c5003c5e3e296a69095570bf4efee5bfa0bdc"},
+ {file = "pydantic_core-2.50.2-cp315-cp315-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:5299296ff5cafcb69851fd652de8f9268a0bb036bcbedbfcaa94cf743baf3986"},
+ {file = "pydantic_core-2.50.2-cp315-cp315-manylinux_2_31_riscv64.whl", hash = "sha256:d3d049b557875f9d15230eec8a731749a7a873d8ed6a051903b05bdf46e0e65f"},
+ {file = "pydantic_core-2.50.2-cp315-cp315-musllinux_1_1_aarch64.whl", hash = "sha256:b0b25d647036972c2951059046cb498f72b7af5a2def27bf8e5f44c3067ab7dd"},
+ {file = "pydantic_core-2.50.2-cp315-cp315-musllinux_1_1_armv7l.whl", hash = "sha256:8835566b3e94026da3ce2249f9ee35c9d2ebe4cd131f6a39bfc82708d3010a46"},
+ {file = "pydantic_core-2.50.2-cp315-cp315-musllinux_1_1_x86_64.whl", hash = "sha256:3fbcd402e4b607d4b8de5d4591215f31f042af03f9d09e58f693a6221e32833f"},
+ {file = "pydantic_core-2.50.2-cp315-cp315-win32.whl", hash = "sha256:8431ecb131489cbdaf6f51f7ade47475f73aff4f1912552f75ba19a6cfe233a8"},
+ {file = "pydantic_core-2.50.2-cp315-cp315-win_amd64.whl", hash = "sha256:04cf672960b8c4fc28bb159c8cdd101fbd311c520237a5c0360448b851adfb41"},
+ {file = "pydantic_core-2.50.2-cp315-cp315-win_arm64.whl", hash = "sha256:36917e29c0b815d6b940bc91560fcf453b5b85d55c579796373f0ea11d1c111a"},
+ {file = "pydantic_core-2.50.2-cp315-cp315t-macosx_10_12_x86_64.whl", hash = "sha256:bd1fe69056a19c377a6c6de2c1240fb8676ba0512a969965efb486510c5e0f1f"},
+ {file = "pydantic_core-2.50.2-cp315-cp315t-macosx_11_0_arm64.whl", hash = "sha256:9b2383933b1dd7a8c93e02f99ebfd305f1286057172483b8e6898bed3fef69d3"},
+ {file = "pydantic_core-2.50.2-cp315-cp315t-manylinux1_i686.manylinux_2_5_i686.whl", hash = "sha256:a1b4d60bad57d6e0e7cd30cc4d1dc646d258dd6dfb7935ce76c7dd72dd1e98b0"},
+ {file = "pydantic_core-2.50.2-cp315-cp315t-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:93bedc68c4138088ea3c042189c01d2945f530f0dcc36e1ea02df8418bd4f1cd"},
+ {file = "pydantic_core-2.50.2-cp315-cp315t-manylinux2014_armv7l.manylinux_2_17_armv7l.whl", hash = "sha256:d684ff87d00de2f6abcbbfa9b0fdce8b513dd799a900809dcfa7eb62ad69832a"},
+ {file = "pydantic_core-2.50.2-cp315-cp315t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:bb6d49f00e2babd40af4889d6b9f4bf50879f522dd4e2e22cb705cac5e0c5e8e"},
+ {file = "pydantic_core-2.50.2-cp315-cp315t-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:6d47b2d0e00e030e0ebdb08115a37da7294e7a6d196d134a77ed7ee6c142284b"},
+ {file = "pydantic_core-2.50.2-cp315-cp315t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:95838be125133fa314753f8cc5168f7c41e3a9dd5eef5383dbbbeed511bd4853"},
+ {file = "pydantic_core-2.50.2-cp315-cp315t-manylinux_2_31_riscv64.whl", hash = "sha256:2d4a043c820363359e40ac96270e1915e5376e116be1f59cee0701775de3e376"},
+ {file = "pydantic_core-2.50.2-cp315-cp315t-musllinux_1_1_aarch64.whl", hash = "sha256:57bccd3e1128736c792094da1feac6da46ec3feb1957ef649a9b3e4f8de6fa04"},
+ {file = "pydantic_core-2.50.2-cp315-cp315t-musllinux_1_1_armv7l.whl", hash = "sha256:24120c644322a35b5eb765416ac8442214c45689e255f5fc6e761e7e7c743c8b"},
+ {file = "pydantic_core-2.50.2-cp315-cp315t-musllinux_1_1_x86_64.whl", hash = "sha256:b1adf2f37521b578c438f6ec61d1c1d0c20b076863ddd5d8b6f3ab658857db3f"},
+ {file = "pydantic_core-2.50.2-cp315-cp315t-win32.whl", hash = "sha256:d79aaa468193c1bed6b0560d3c5c9f9e369e3efb0b128b38a2537e2d51d42773"},
+ {file = "pydantic_core-2.50.2-cp315-cp315t-win_amd64.whl", hash = "sha256:cc488daac19e6f5292180fac5e0ef7efffabeef4e096af9a17a75a7d3d6781f6"},
+ {file = "pydantic_core-2.50.2-cp315-cp315t-win_arm64.whl", hash = "sha256:91315aea7adb51821d4a3378ede953bfdd76e3bf71551de4a82d7638cef7dc02"},
+ {file = "pydantic_core-2.50.2-graalpy311-graalpy242_311_native-macosx_10_12_x86_64.whl", hash = "sha256:adec010c824290d4ca87047e8d8bfa4f85ac29f545f326cd5321696805d311ed"},
+ {file = "pydantic_core-2.50.2-graalpy311-graalpy242_311_native-macosx_11_0_arm64.whl", hash = "sha256:f47c1349c3b4274aeb18459d54244881a5c0dee0fdccedffca45704ba5c9e0a0"},
+ {file = "pydantic_core-2.50.2-graalpy311-graalpy242_311_native-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:4ee64baeab403b9de9c92846c5c1abec28ffb046cbc023bfae059897841f88af"},
+ {file = "pydantic_core-2.50.2-graalpy311-graalpy242_311_native-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:16ec8e07c37f02dcf68939cc7f202ba9a148cc155ee2acf22d337e10b24c2cb7"},
+ {file = "pydantic_core-2.50.2-graalpy312-graalpy250_312_native-macosx_10_12_x86_64.whl", hash = "sha256:d18d56c1ec63b304f4bb3c7db7e0d311e61cca1b1c944590a4b13ac39b2ca92b"},
+ {file = "pydantic_core-2.50.2-graalpy312-graalpy250_312_native-macosx_11_0_arm64.whl", hash = "sha256:41ed8abeffda6a880207fdc0cd1343a448cec3cc6b38b53f730c0745f745292d"},
+ {file = "pydantic_core-2.50.2-graalpy312-graalpy250_312_native-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:b7abcfaf66c1dc14c5ed928c349614f223c972a8b021b4be9548dbea6c817371"},
+ {file = "pydantic_core-2.50.2-graalpy312-graalpy250_312_native-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:9e7460abce637f90e37f8c443559fbd687c38884d05cb69ef265e634945f4324"},
+ {file = "pydantic_core-2.50.2-pp311-pypy311_pp73-macosx_10_12_x86_64.whl", hash = "sha256:b583ddeee6a6bb5bbc04462167c68034913221139d52d9f155ca6d1637a2fdcf"},
+ {file = "pydantic_core-2.50.2-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:5ab5738c39b25b5dc5a721270e2269a2f5e86e614375e6c07ee6caab8cbc0f2f"},
+ {file = "pydantic_core-2.50.2-pp311-pypy311_pp73-manylinux1_i686.manylinux_2_5_i686.whl", hash = "sha256:21a902e546032c82b7275552345a2342d862e0541aea7226c91067c396e68b3f"},
+ {file = "pydantic_core-2.50.2-pp311-pypy311_pp73-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:92ada606285dab054e40848a951f583c537cde1e54701ea1305ec0096877012d"},
+ {file = "pydantic_core-2.50.2-pp311-pypy311_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:c1b65a42afc73b39e6ae908ec7b9c3b9898676a7b15ce4c66d4965f7071007c8"},
+ {file = "pydantic_core-2.50.2-pp311-pypy311_pp73-musllinux_1_1_armv7l.whl", hash = "sha256:c324a7e0c0012e3974053f81a270d8f1aa23227571f4ddd3254c911bb356459b"},
+ {file = "pydantic_core-2.50.2-pp311-pypy311_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:cb8d2d7b07cbe2d7488de7e53671f836c4f4a8032dcda079df33dc1b7e2397c0"},
+ {file = "pydantic_core-2.50.2-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:7c6e1bd6cadae13958e52897ef020e85c9916a95917149fca463bb0c0421a7c6"},
+ {file = "pydantic_core-2.50.2-pp311-pypy311_pp80-macosx_10_12_x86_64.whl", hash = "sha256:f078e276848bc23d1f92f46fc88d5b9cbb824b9acc60d9e07116620e502e16a9"},
+ {file = "pydantic_core-2.50.2-pp311-pypy311_pp80-macosx_11_0_arm64.whl", hash = "sha256:3435c443da7510a6de1a30c68beae338852a11f0440cc8320ea756a162f38dbe"},
+ {file = "pydantic_core-2.50.2-pp311-pypy311_pp80-manylinux_2_28_x86_64.whl", hash = "sha256:b5675a12a7b67063fe3ca187e735b0463cf13fabc10166ae4d4b2f775fd0632d"},
+ {file = "pydantic_core-2.50.2-pp311-pypy311_pp80-win_amd64.whl", hash = "sha256:f5ba7ef10ce82737e173fa95cafa1c8210918f7e653715b2c7a7a31877a74848"},
+ {file = "pydantic_core-2.50.2.tar.gz", hash = "sha256:1b0e8dc3932cf4e9ed5727570325cacc716b9409ffc794a221c0ccc72e8eb775"},
]
[package.dependencies]
@@ -1350,19 +1354,19 @@ dev = ["argcomplete", "asynctest ; python_version < \"3.11\"", "attrs (>=23.1)",
[[package]]
name = "pytest-asyncio"
-version = "1.4.1"
+version = "1.4.1.post1"
description = "Pytest support for asyncio"
optional = false
python-versions = ">=3.10"
groups = ["dev"]
files = [
- {file = "pytest_asyncio-1.4.1-py3-none-any.whl", hash = "sha256:507afa78ec77c6661164ef1a2368bc7820383fd1a14b2a7f813de8b5a92949cc"},
- {file = "pytest_asyncio-1.4.1.tar.gz", hash = "sha256:e8266eb094e5ee9ffdb2068c9836f33e209ea77a970eb846933d416b5602669b"},
+ {file = "pytest_asyncio-1.4.1.post1-py3-none-any.whl", hash = "sha256:0755e488cc0a2b9bd2eab7292cc6390d4cbb8390f1020745647bae5a708e0165"},
+ {file = "pytest_asyncio-1.4.1.post1.tar.gz", hash = "sha256:f582d9ea4a1c082195abe8bd29a1fe106aeb1cd435e3dad2d3bc2749935c36a2"},
]
[package.dependencies]
backports-asyncio-runner = {version = ">=1.1,<2", markers = "python_version < \"3.11\""}
-pytest = ">=8.4,<10"
+pytest = ">=8.4"
typing-extensions = {version = ">=4.12", markers = "python_version < \"3.13\""}
[package.extras]
@@ -1555,14 +1559,14 @@ files = [
[[package]]
name = "types-python-dateutil"
-version = "2.9.0.20261021"
+version = "2.9.0.20261029"
description = "Typing stubs for python-dateutil"
optional = false
python-versions = ">=3.10"
groups = ["dev"]
files = [
- {file = "types_python_dateutil-2.9.0.20261021-py3-none-any.whl", hash = "sha256:12aab3bdfe55e1d9de7f54301e025d6276ce17e6a08e31644f2202d59c8d1fca"},
- {file = "types_python_dateutil-2.9.0.20261021.tar.gz", hash = "sha256:62d66fcdd293e38745eae644e5da4cb399b98799c0ae61f03a54896fb51b3140"},
+ {file = "types_python_dateutil-2.9.0.20261029-py3-none-any.whl", hash = "sha256:8fd04c6e1722d2523a74d6670596fc0007077651465b686f144ae1d200dcacf5"},
+ {file = "types_python_dateutil-2.9.0.20261029.tar.gz", hash = "sha256:3258b491686c441d8074cfc8712308741900c9ff128a06421baec3767c503511"},
]
[[package]]
diff --git a/pyproject.toml b/pyproject.toml
index c3cd8196..c7e1896a 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -6,7 +6,7 @@ license-files = ["LICENSE"]
[tool.poetry]
name = "schematichq"
-version = "1.4.7"
+version = "1.4.8"
description = ""
readme = "README.md"
authors = []
diff --git a/reference.md b/reference.md
index 74cc6e05..8d1afb52 100644
--- a/reference.md
+++ b/reference.md
@@ -891,6 +891,7 @@ client = Schematic(
client.accounts.list_audit_logs(
actor_type="api_key",
+ company_id="company_id",
end_time=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"),
environment_id="environment_id",
q="q",
@@ -921,6 +922,14 @@ client.accounts.list_audit_logs(
-
+**company_id:** `typing.Optional[str]`
+
+
+
+
+
+-
+
**end_time:** `typing.Optional[datetime.datetime]`
@@ -1064,6 +1073,7 @@ client = Schematic(
client.accounts.count_audit_logs(
actor_type="api_key",
+ company_id="company_id",
end_time=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"),
environment_id="environment_id",
q="q",
@@ -1094,6 +1104,14 @@ client.accounts.count_audit_logs(
-
+**company_id:** `typing.Optional[str]`
+
+
+
+
+
+-
+
**end_time:** `typing.Optional[datetime.datetime]`
@@ -4338,6 +4356,14 @@ client.billing.update_company_billing_profile(
-
+**currency:** `typing.Optional[Currency]`
+
+
+
+
+
+-
+
**days_until_due:** `typing.Optional[int]`
@@ -4346,6 +4372,14 @@ client.billing.update_company_billing_profile(
-
+**gating_days:** `typing.Optional[int]`
+
+
+
+
+
+-
+
**is_default:** `typing.Optional[bool]`
@@ -4362,6 +4396,22 @@ client.billing.update_company_billing_profile(
-
+**overdraft_limit:** `typing.Optional[int]`
+
+
+
+
+
+-
+
+**payment_gating:** `typing.Optional[PaymentGating]`
+
+
+
+
+
+-
+
**payment_method_id:** `typing.Optional[str]`
@@ -8255,7 +8305,7 @@ client.credits.reserve_credits(
-
-**expires_at:** `typing.Optional[datetime.datetime]` — When the hold lapses if no track event settles it; defaults to one minute from now and may be at most one hour out. The unspent hold is refunded on expiry
+**expires_at:** `typing.Optional[datetime.datetime]` — When the hold lapses if no track event settles it; defaults to one minute from now and may be at most 24 hours out. The unspent hold is refunded on expiry
@@ -11141,6 +11191,7 @@ client = Schematic(
)
client.companies.list_companies(
+ cancel_at_period_end=True,
credit_type_ids=[
"credit_type_ids"
],
@@ -11190,6 +11241,14 @@ client.companies.list_companies(
-
+**cancel_at_period_end:** `typing.Optional[bool]` — If true, filter companies with an active subscription that is set to cancel at the end of the current period; if false, filter companies without one
+
+
+
+
+
+-
+
**credit_type_ids:** `typing.Optional[typing.Union[str, typing.Sequence[str]]]` — Filter companies by one or more credit type IDs (each ID starts with bcrd_)
@@ -11198,7 +11257,7 @@ client.companies.list_companies(
-
-**has_scheduled_downgrade:** `typing.Optional[bool]` — Filter companies that have a pending scheduled downgrade
+**has_scheduled_downgrade:** `typing.Optional[bool]` — If true, filter companies that have a pending scheduled downgrade; if false, filter companies that do not
@@ -11563,6 +11622,84 @@ client.companies.delete_company(
+
+
+
+
+client.companies.get_company_inference_cost(...) -> GetCompanyInferenceCostResponse
+
+-
+
+#### 🔌 Usage
+
+
+-
+
+
+-
+
+```python
+from schematic import Schematic
+from schematic.environment import SchematicEnvironment
+import datetime
+
+client = Schematic(
+ api_key="",
+ environment=SchematicEnvironment.DEFAULT,
+)
+
+client.companies.get_company_inference_cost(
+ company_id="company_id",
+ end_time=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"),
+ start_time=datetime.datetime.fromisoformat("2024-01-15T09:30:00+00:00"),
+)
+
+```
+
+
+
+
+
+#### ⚙️ Parameters
+
+
+-
+
+
+-
+
+**company_id:** `str` — company_id
+
+
+
+
+
+-
+
+**end_time:** `typing.Optional[datetime.datetime]` — End of the window (exclusive). Pass together with start_time; when both are omitted, the company's current billing period is used
+
+
+
+
+
+-
+
+**start_time:** `typing.Optional[datetime.datetime]` — Start of the window (inclusive). Pass together with end_time; when both are omitted, the company's current billing period is used
+
+
+
+
+
+-
+
+**request_options:** `typing.Optional[RequestOptions]` — Request-specific configuration.
+
+
+
+
+
+
+
@@ -11589,6 +11726,7 @@ client = Schematic(
)
client.companies.count_companies(
+ cancel_at_period_end=True,
credit_type_ids=[
"credit_type_ids"
],
@@ -11638,6 +11776,14 @@ client.companies.count_companies(
-
+**cancel_at_period_end:** `typing.Optional[bool]` — If true, filter companies with an active subscription that is set to cancel at the end of the current period; if false, filter companies without one
+
+
+
+
+
+-
+
**credit_type_ids:** `typing.Optional[typing.Union[str, typing.Sequence[str]]]` — Filter companies by one or more credit type IDs (each ID starts with bcrd_)
@@ -11646,7 +11792,7 @@ client.companies.count_companies(
-
-**has_scheduled_downgrade:** `typing.Optional[bool]` — Filter companies that have a pending scheduled downgrade
+**has_scheduled_downgrade:** `typing.Optional[bool]` — If true, filter companies that have a pending scheduled downgrade; if false, filter companies that do not
@@ -13607,7 +13753,7 @@ client = Schematic(
)
client.companies.list_plan_changes(
- action="amendment",
+ action="access_reinstated",
base_plan_action="fallback",
company_id="company_id",
company_ids=[
@@ -23524,7 +23670,7 @@ client.features.check_and_reserve_flag(
-
-**expires_at:** `typing.Optional[datetime.datetime]` — When the hold lapses if no track or inference event settles it; defaults to one minute from now and may be at most one hour out. The unspent hold is refunded on expiry
+**expires_at:** `typing.Optional[datetime.datetime]` — When the hold lapses if no track or inference event settles it; defaults to one minute from now and may be at most 24 hours out. The unspent hold is refunded on expiry
diff --git a/src/schematic/__init__.py b/src/schematic/__init__.py
index af4236d4..9baf082a 100644
--- a/src/schematic/__init__.py
+++ b/src/schematic/__init__.py
@@ -18,6 +18,7 @@
ApiKeyIntegrationResponseData,
ApiKeyResponseData,
ApiKeyScope,
+ AuditLogCompanyResponseData,
AuditLogExportMetadata,
AuditLogListResponseData,
AuditLogResponseData,
@@ -52,6 +53,7 @@
BillingInvoiceSettlementResponseData,
BillingInvoiceTaxIdResponseData,
BillingInvoiceTermsResponseData,
+ BillingInvoiceWebhook,
BillingLinkedResourceResponseData,
BillingMeterResponseData,
BillingNativeSubscriptionChangeResponseData,
@@ -84,6 +86,8 @@
BillingStrategy,
BillingSubscriptionDiscount,
BillingSubscriptionDiscountView,
+ BillingSubscriptionPeriodLineWebhook,
+ BillingSubscriptionPeriodWebhook,
BillingSubscriptionResponseData,
BillingSubscriptionTrialEndSetting,
BillingSubscriptionView,
@@ -154,6 +158,7 @@
CompanyFeatureUsageExportMetadata,
CompanyFeatureUsageExportMetadataSortOrderDirection,
CompanyFeatureUsageExportMetadataVisibleColumnsItem,
+ CompanyInferenceCostResponseData,
CompanyLedgerResponseData,
CompanyMatchingCriteria,
CompanyMembershipDetailResponseData,
@@ -328,6 +333,9 @@
FlagView,
GenericPreviewObject,
GetOnboardingStateResp,
+ InferenceCostAmountResponseData,
+ InferenceCostSource,
+ InferenceModelCostResponseData,
InsightsSummaryResponseData,
InstallIntegrationRequestBody,
IntegrationCapabilities,
@@ -743,6 +751,8 @@
GetBillingEntityChildSubscriptionsResponse,
GetCompanyBillingEntityParams,
GetCompanyBillingEntityResponse,
+ GetCompanyInferenceCostParams,
+ GetCompanyInferenceCostResponse,
GetCompanyResponse,
GetEntityTraitDefinitionResponse,
GetEntityTraitDefinitionUsageResponse,
@@ -1072,6 +1082,7 @@
"AssumeStripeInstalledResponse": ".integrationsapi",
"AsyncSchematic": ".client",
"AsyncSchematicConfig": ".client",
+ "AuditLogCompanyResponseData": ".types",
"AuditLogExportMetadata": ".types",
"AuditLogListResponseData": ".types",
"AuditLogResponseData": ".types",
@@ -1107,6 +1118,7 @@
"BillingInvoiceSettlementResponseData": ".types",
"BillingInvoiceTaxIdResponseData": ".types",
"BillingInvoiceTermsResponseData": ".types",
+ "BillingInvoiceWebhook": ".types",
"BillingLinkedResourceResponseData": ".types",
"BillingMeterResponseData": ".types",
"BillingNativeSubscriptionChangeResponseData": ".types",
@@ -1139,6 +1151,8 @@
"BillingStrategy": ".types",
"BillingSubscriptionDiscount": ".types",
"BillingSubscriptionDiscountView": ".types",
+ "BillingSubscriptionPeriodLineWebhook": ".types",
+ "BillingSubscriptionPeriodWebhook": ".types",
"BillingSubscriptionResponseData": ".types",
"BillingSubscriptionTrialEndSetting": ".types",
"BillingSubscriptionView": ".types",
@@ -1218,6 +1232,7 @@
"CompanyFeatureUsageExportMetadata": ".types",
"CompanyFeatureUsageExportMetadataSortOrderDirection": ".types",
"CompanyFeatureUsageExportMetadataVisibleColumnsItem": ".types",
+ "CompanyInferenceCostResponseData": ".types",
"CompanyLedgerResponseData": ".types",
"CompanyMatchingCriteria": ".types",
"CompanyMembershipDetailResponseData": ".types",
@@ -1538,6 +1553,8 @@
"GetCompanyBillingDetailsResponse": ".checkout",
"GetCompanyBillingEntityParams": ".companies",
"GetCompanyBillingEntityResponse": ".companies",
+ "GetCompanyInferenceCostParams": ".companies",
+ "GetCompanyInferenceCostResponse": ".companies",
"GetCompanyNativeSubscriptionResponse": ".billing",
"GetCompanyOverrideResponse": ".entitlements",
"GetCompanyResponse": ".companies",
@@ -1614,6 +1631,9 @@
"GetWebhookResponse": ".webhooks",
"GetWhoAmIResponse": ".accounts",
"GrantBillingCreditsToCompanyResponse": ".credits",
+ "InferenceCostAmountResponseData": ".types",
+ "InferenceCostSource": ".types",
+ "InferenceModelCostResponseData": ".types",
"InsightsSummaryResponseData": ".types",
"InstallIntegrationRequestBody": ".types",
"InstallIntegrationResponse": ".integrationsapi",
@@ -2115,6 +2135,7 @@ def __dir__():
"AssumeStripeInstalledResponse",
"AsyncSchematic",
"AsyncSchematicConfig",
+ "AuditLogCompanyResponseData",
"AuditLogExportMetadata",
"AuditLogListResponseData",
"AuditLogResponseData",
@@ -2150,6 +2171,7 @@ def __dir__():
"BillingInvoiceSettlementResponseData",
"BillingInvoiceTaxIdResponseData",
"BillingInvoiceTermsResponseData",
+ "BillingInvoiceWebhook",
"BillingLinkedResourceResponseData",
"BillingMeterResponseData",
"BillingNativeSubscriptionChangeResponseData",
@@ -2182,6 +2204,8 @@ def __dir__():
"BillingStrategy",
"BillingSubscriptionDiscount",
"BillingSubscriptionDiscountView",
+ "BillingSubscriptionPeriodLineWebhook",
+ "BillingSubscriptionPeriodWebhook",
"BillingSubscriptionResponseData",
"BillingSubscriptionTrialEndSetting",
"BillingSubscriptionView",
@@ -2261,6 +2285,7 @@ def __dir__():
"CompanyFeatureUsageExportMetadata",
"CompanyFeatureUsageExportMetadataSortOrderDirection",
"CompanyFeatureUsageExportMetadataVisibleColumnsItem",
+ "CompanyInferenceCostResponseData",
"CompanyLedgerResponseData",
"CompanyMatchingCriteria",
"CompanyMembershipDetailResponseData",
@@ -2581,6 +2606,8 @@ def __dir__():
"GetCompanyBillingDetailsResponse",
"GetCompanyBillingEntityParams",
"GetCompanyBillingEntityResponse",
+ "GetCompanyInferenceCostParams",
+ "GetCompanyInferenceCostResponse",
"GetCompanyNativeSubscriptionResponse",
"GetCompanyOverrideResponse",
"GetCompanyResponse",
@@ -2657,6 +2684,9 @@ def __dir__():
"GetWebhookResponse",
"GetWhoAmIResponse",
"GrantBillingCreditsToCompanyResponse",
+ "InferenceCostAmountResponseData",
+ "InferenceCostSource",
+ "InferenceModelCostResponseData",
"InsightsSummaryResponseData",
"InstallIntegrationRequestBody",
"InstallIntegrationResponse",
diff --git a/src/schematic/accounts/client.py b/src/schematic/accounts/client.py
index f3b61719..cc10d3e0 100644
--- a/src/schematic/accounts/client.py
+++ b/src/schematic/accounts/client.py
@@ -327,6 +327,7 @@ def list_audit_logs(
self,
*,
actor_type: typing.Optional[ActorType] = None,
+ company_id: typing.Optional[str] = None,
end_time: typing.Optional[dt.datetime] = None,
environment_id: typing.Optional[str] = None,
q: typing.Optional[str] = None,
@@ -340,6 +341,8 @@ def list_audit_logs(
----------
actor_type : typing.Optional[ActorType]
+ company_id : typing.Optional[str]
+
end_time : typing.Optional[dt.datetime]
environment_id : typing.Optional[str]
@@ -373,6 +376,7 @@ def list_audit_logs(
)
client.accounts.list_audit_logs(
actor_type="api_key",
+ company_id="company_id",
end_time=datetime.datetime.fromisoformat(
"2024-01-15 09:30:00+00:00",
),
@@ -387,6 +391,7 @@ def list_audit_logs(
"""
_response = self._raw_client.list_audit_logs(
actor_type=actor_type,
+ company_id=company_id,
end_time=end_time,
environment_id=environment_id,
q=q,
@@ -432,6 +437,7 @@ def count_audit_logs(
self,
*,
actor_type: typing.Optional[ActorType] = None,
+ company_id: typing.Optional[str] = None,
end_time: typing.Optional[dt.datetime] = None,
environment_id: typing.Optional[str] = None,
q: typing.Optional[str] = None,
@@ -445,6 +451,8 @@ def count_audit_logs(
----------
actor_type : typing.Optional[ActorType]
+ company_id : typing.Optional[str]
+
end_time : typing.Optional[dt.datetime]
environment_id : typing.Optional[str]
@@ -478,6 +486,7 @@ def count_audit_logs(
)
client.accounts.count_audit_logs(
actor_type="api_key",
+ company_id="company_id",
end_time=datetime.datetime.fromisoformat(
"2024-01-15 09:30:00+00:00",
),
@@ -492,6 +501,7 @@ def count_audit_logs(
"""
_response = self._raw_client.count_audit_logs(
actor_type=actor_type,
+ company_id=company_id,
end_time=end_time,
environment_id=environment_id,
q=q,
@@ -1052,6 +1062,7 @@ async def list_audit_logs(
self,
*,
actor_type: typing.Optional[ActorType] = None,
+ company_id: typing.Optional[str] = None,
end_time: typing.Optional[dt.datetime] = None,
environment_id: typing.Optional[str] = None,
q: typing.Optional[str] = None,
@@ -1065,6 +1076,8 @@ async def list_audit_logs(
----------
actor_type : typing.Optional[ActorType]
+ company_id : typing.Optional[str]
+
end_time : typing.Optional[dt.datetime]
environment_id : typing.Optional[str]
@@ -1102,6 +1115,7 @@ async def list_audit_logs(
async def main() -> None:
await client.accounts.list_audit_logs(
actor_type="api_key",
+ company_id="company_id",
end_time=datetime.datetime.fromisoformat(
"2024-01-15 09:30:00+00:00",
),
@@ -1119,6 +1133,7 @@ async def main() -> None:
"""
_response = await self._raw_client.list_audit_logs(
actor_type=actor_type,
+ company_id=company_id,
end_time=end_time,
environment_id=environment_id,
q=q,
@@ -1172,6 +1187,7 @@ async def count_audit_logs(
self,
*,
actor_type: typing.Optional[ActorType] = None,
+ company_id: typing.Optional[str] = None,
end_time: typing.Optional[dt.datetime] = None,
environment_id: typing.Optional[str] = None,
q: typing.Optional[str] = None,
@@ -1185,6 +1201,8 @@ async def count_audit_logs(
----------
actor_type : typing.Optional[ActorType]
+ company_id : typing.Optional[str]
+
end_time : typing.Optional[dt.datetime]
environment_id : typing.Optional[str]
@@ -1222,6 +1240,7 @@ async def count_audit_logs(
async def main() -> None:
await client.accounts.count_audit_logs(
actor_type="api_key",
+ company_id="company_id",
end_time=datetime.datetime.fromisoformat(
"2024-01-15 09:30:00+00:00",
),
@@ -1239,6 +1258,7 @@ async def main() -> None:
"""
_response = await self._raw_client.count_audit_logs(
actor_type=actor_type,
+ company_id=company_id,
end_time=end_time,
environment_id=environment_id,
q=q,
diff --git a/src/schematic/accounts/raw_client.py b/src/schematic/accounts/raw_client.py
index aa2db284..b247637d 100644
--- a/src/schematic/accounts/raw_client.py
+++ b/src/schematic/accounts/raw_client.py
@@ -717,6 +717,7 @@ def list_audit_logs(
self,
*,
actor_type: typing.Optional[ActorType] = None,
+ company_id: typing.Optional[str] = None,
end_time: typing.Optional[dt.datetime] = None,
environment_id: typing.Optional[str] = None,
q: typing.Optional[str] = None,
@@ -730,6 +731,8 @@ def list_audit_logs(
----------
actor_type : typing.Optional[ActorType]
+ company_id : typing.Optional[str]
+
end_time : typing.Optional[dt.datetime]
environment_id : typing.Optional[str]
@@ -757,6 +760,7 @@ def list_audit_logs(
method="GET",
params={
"actor_type": actor_type,
+ "company_id": company_id,
"end_time": serialize_datetime(end_time) if end_time is not None else None,
"environment_id": environment_id,
"q": q,
@@ -937,6 +941,7 @@ def count_audit_logs(
self,
*,
actor_type: typing.Optional[ActorType] = None,
+ company_id: typing.Optional[str] = None,
end_time: typing.Optional[dt.datetime] = None,
environment_id: typing.Optional[str] = None,
q: typing.Optional[str] = None,
@@ -950,6 +955,8 @@ def count_audit_logs(
----------
actor_type : typing.Optional[ActorType]
+ company_id : typing.Optional[str]
+
end_time : typing.Optional[dt.datetime]
environment_id : typing.Optional[str]
@@ -977,6 +984,7 @@ def count_audit_logs(
method="GET",
params={
"actor_type": actor_type,
+ "company_id": company_id,
"end_time": serialize_datetime(end_time) if end_time is not None else None,
"environment_id": environment_id,
"q": q,
@@ -2341,6 +2349,7 @@ async def list_audit_logs(
self,
*,
actor_type: typing.Optional[ActorType] = None,
+ company_id: typing.Optional[str] = None,
end_time: typing.Optional[dt.datetime] = None,
environment_id: typing.Optional[str] = None,
q: typing.Optional[str] = None,
@@ -2354,6 +2363,8 @@ async def list_audit_logs(
----------
actor_type : typing.Optional[ActorType]
+ company_id : typing.Optional[str]
+
end_time : typing.Optional[dt.datetime]
environment_id : typing.Optional[str]
@@ -2381,6 +2392,7 @@ async def list_audit_logs(
method="GET",
params={
"actor_type": actor_type,
+ "company_id": company_id,
"end_time": serialize_datetime(end_time) if end_time is not None else None,
"environment_id": environment_id,
"q": q,
@@ -2561,6 +2573,7 @@ async def count_audit_logs(
self,
*,
actor_type: typing.Optional[ActorType] = None,
+ company_id: typing.Optional[str] = None,
end_time: typing.Optional[dt.datetime] = None,
environment_id: typing.Optional[str] = None,
q: typing.Optional[str] = None,
@@ -2574,6 +2587,8 @@ async def count_audit_logs(
----------
actor_type : typing.Optional[ActorType]
+ company_id : typing.Optional[str]
+
end_time : typing.Optional[dt.datetime]
environment_id : typing.Optional[str]
@@ -2601,6 +2616,7 @@ async def count_audit_logs(
method="GET",
params={
"actor_type": actor_type,
+ "company_id": company_id,
"end_time": serialize_datetime(end_time) if end_time is not None else None,
"environment_id": environment_id,
"q": q,
diff --git a/src/schematic/accounts/types/count_audit_logs_params.py b/src/schematic/accounts/types/count_audit_logs_params.py
index 126b8df4..93a90a5c 100644
--- a/src/schematic/accounts/types/count_audit_logs_params.py
+++ b/src/schematic/accounts/types/count_audit_logs_params.py
@@ -14,6 +14,7 @@ class CountAuditLogsParams(UniversalBaseModel):
"""
actor_type: typing.Optional[ActorType] = None
+ company_id: typing.Optional[str] = None
end_time: typing.Optional[dt.datetime] = None
environment_id: typing.Optional[str] = None
limit: typing.Optional[int] = pydantic.Field(default=None)
diff --git a/src/schematic/accounts/types/list_audit_logs_params.py b/src/schematic/accounts/types/list_audit_logs_params.py
index e8ba7b0b..ddc789e7 100644
--- a/src/schematic/accounts/types/list_audit_logs_params.py
+++ b/src/schematic/accounts/types/list_audit_logs_params.py
@@ -14,6 +14,7 @@ class ListAuditLogsParams(UniversalBaseModel):
"""
actor_type: typing.Optional[ActorType] = None
+ company_id: typing.Optional[str] = None
end_time: typing.Optional[dt.datetime] = None
environment_id: typing.Optional[str] = None
limit: typing.Optional[int] = pydantic.Field(default=None)
diff --git a/src/schematic/billing/client.py b/src/schematic/billing/client.py
index 2e01b1a6..dc99fb4a 100644
--- a/src/schematic/billing/client.py
+++ b/src/schematic/billing/client.py
@@ -17,6 +17,7 @@
from ..types.currency import Currency
from ..types.invoice_document_state import InvoiceDocumentState
from ..types.invoice_status import InvoiceStatus
+from ..types.payment_gating import PaymentGating
from ..types.payment_method_billing_details_request_body import PaymentMethodBillingDetailsRequestBody
from ..types.proration_behavior import ProrationBehavior
from .raw_client import AsyncRawBillingClient, RawBillingClient
@@ -1670,9 +1671,13 @@ def update_company_billing_profile(
billing_profile_id: str,
*,
collection_method: BillingCollectionMethod,
+ currency: typing.Optional[Currency] = OMIT,
days_until_due: typing.Optional[int] = OMIT,
+ gating_days: typing.Optional[int] = OMIT,
is_default: typing.Optional[bool] = OMIT,
name: typing.Optional[str] = OMIT,
+ overdraft_limit: typing.Optional[int] = OMIT,
+ payment_gating: typing.Optional[PaymentGating] = OMIT,
payment_method_id: typing.Optional[str] = OMIT,
proration_behavior: typing.Optional[ProrationBehavior] = OMIT,
request_options: typing.Optional[RequestOptions] = None,
@@ -1685,12 +1690,20 @@ def update_company_billing_profile(
collection_method : BillingCollectionMethod
+ currency : typing.Optional[Currency]
+
days_until_due : typing.Optional[int]
+ gating_days : typing.Optional[int]
+
is_default : typing.Optional[bool]
name : typing.Optional[str]
+ overdraft_limit : typing.Optional[int]
+
+ payment_gating : typing.Optional[PaymentGating]
+
payment_method_id : typing.Optional[str]
proration_behavior : typing.Optional[ProrationBehavior]
@@ -1718,9 +1731,13 @@ def update_company_billing_profile(
_response = self._raw_client.update_company_billing_profile(
billing_profile_id,
collection_method=collection_method,
+ currency=currency,
days_until_due=days_until_due,
+ gating_days=gating_days,
is_default=is_default,
name=name,
+ overdraft_limit=overdraft_limit,
+ payment_gating=payment_gating,
payment_method_id=payment_method_id,
proration_behavior=proration_behavior,
request_options=request_options,
@@ -4151,9 +4168,13 @@ async def update_company_billing_profile(
billing_profile_id: str,
*,
collection_method: BillingCollectionMethod,
+ currency: typing.Optional[Currency] = OMIT,
days_until_due: typing.Optional[int] = OMIT,
+ gating_days: typing.Optional[int] = OMIT,
is_default: typing.Optional[bool] = OMIT,
name: typing.Optional[str] = OMIT,
+ overdraft_limit: typing.Optional[int] = OMIT,
+ payment_gating: typing.Optional[PaymentGating] = OMIT,
payment_method_id: typing.Optional[str] = OMIT,
proration_behavior: typing.Optional[ProrationBehavior] = OMIT,
request_options: typing.Optional[RequestOptions] = None,
@@ -4166,12 +4187,20 @@ async def update_company_billing_profile(
collection_method : BillingCollectionMethod
+ currency : typing.Optional[Currency]
+
days_until_due : typing.Optional[int]
+ gating_days : typing.Optional[int]
+
is_default : typing.Optional[bool]
name : typing.Optional[str]
+ overdraft_limit : typing.Optional[int]
+
+ payment_gating : typing.Optional[PaymentGating]
+
payment_method_id : typing.Optional[str]
proration_behavior : typing.Optional[ProrationBehavior]
@@ -4207,9 +4236,13 @@ async def main() -> None:
_response = await self._raw_client.update_company_billing_profile(
billing_profile_id,
collection_method=collection_method,
+ currency=currency,
days_until_due=days_until_due,
+ gating_days=gating_days,
is_default=is_default,
name=name,
+ overdraft_limit=overdraft_limit,
+ payment_gating=payment_gating,
payment_method_id=payment_method_id,
proration_behavior=proration_behavior,
request_options=request_options,
diff --git a/src/schematic/billing/raw_client.py b/src/schematic/billing/raw_client.py
index 35a4e90e..e24764f0 100644
--- a/src/schematic/billing/raw_client.py
+++ b/src/schematic/billing/raw_client.py
@@ -31,6 +31,7 @@
from ..types.currency import Currency
from ..types.invoice_document_state import InvoiceDocumentState
from ..types.invoice_status import InvoiceStatus
+from ..types.payment_gating import PaymentGating
from ..types.payment_method_billing_details_request_body import PaymentMethodBillingDetailsRequestBody
from ..types.proration_behavior import ProrationBehavior
from .types.count_billing_invoices_response import CountBillingInvoicesResponse
@@ -3253,9 +3254,13 @@ def update_company_billing_profile(
billing_profile_id: str,
*,
collection_method: BillingCollectionMethod,
+ currency: typing.Optional[Currency] = OMIT,
days_until_due: typing.Optional[int] = OMIT,
+ gating_days: typing.Optional[int] = OMIT,
is_default: typing.Optional[bool] = OMIT,
name: typing.Optional[str] = OMIT,
+ overdraft_limit: typing.Optional[int] = OMIT,
+ payment_gating: typing.Optional[PaymentGating] = OMIT,
payment_method_id: typing.Optional[str] = OMIT,
proration_behavior: typing.Optional[ProrationBehavior] = OMIT,
request_options: typing.Optional[RequestOptions] = None,
@@ -3268,12 +3273,20 @@ def update_company_billing_profile(
collection_method : BillingCollectionMethod
+ currency : typing.Optional[Currency]
+
days_until_due : typing.Optional[int]
+ gating_days : typing.Optional[int]
+
is_default : typing.Optional[bool]
name : typing.Optional[str]
+ overdraft_limit : typing.Optional[int]
+
+ payment_gating : typing.Optional[PaymentGating]
+
payment_method_id : typing.Optional[str]
proration_behavior : typing.Optional[ProrationBehavior]
@@ -3291,9 +3304,13 @@ def update_company_billing_profile(
method="PUT",
json={
"collection_method": collection_method,
+ "currency": currency,
"days_until_due": days_until_due,
+ "gating_days": gating_days,
"is_default": is_default,
"name": name,
+ "overdraft_limit": overdraft_limit,
+ "payment_gating": payment_gating,
"payment_method_id": payment_method_id,
"proration_behavior": proration_behavior,
},
@@ -7932,9 +7949,13 @@ async def update_company_billing_profile(
billing_profile_id: str,
*,
collection_method: BillingCollectionMethod,
+ currency: typing.Optional[Currency] = OMIT,
days_until_due: typing.Optional[int] = OMIT,
+ gating_days: typing.Optional[int] = OMIT,
is_default: typing.Optional[bool] = OMIT,
name: typing.Optional[str] = OMIT,
+ overdraft_limit: typing.Optional[int] = OMIT,
+ payment_gating: typing.Optional[PaymentGating] = OMIT,
payment_method_id: typing.Optional[str] = OMIT,
proration_behavior: typing.Optional[ProrationBehavior] = OMIT,
request_options: typing.Optional[RequestOptions] = None,
@@ -7947,12 +7968,20 @@ async def update_company_billing_profile(
collection_method : BillingCollectionMethod
+ currency : typing.Optional[Currency]
+
days_until_due : typing.Optional[int]
+ gating_days : typing.Optional[int]
+
is_default : typing.Optional[bool]
name : typing.Optional[str]
+ overdraft_limit : typing.Optional[int]
+
+ payment_gating : typing.Optional[PaymentGating]
+
payment_method_id : typing.Optional[str]
proration_behavior : typing.Optional[ProrationBehavior]
@@ -7970,9 +7999,13 @@ async def update_company_billing_profile(
method="PUT",
json={
"collection_method": collection_method,
+ "currency": currency,
"days_until_due": days_until_due,
+ "gating_days": gating_days,
"is_default": is_default,
"name": name,
+ "overdraft_limit": overdraft_limit,
+ "payment_gating": payment_gating,
"payment_method_id": payment_method_id,
"proration_behavior": proration_behavior,
},
diff --git a/src/schematic/companies/__init__.py b/src/schematic/companies/__init__.py
index 80d297bd..497e8978 100644
--- a/src/schematic/companies/__init__.py
+++ b/src/schematic/companies/__init__.py
@@ -37,6 +37,8 @@
GetBillingEntityChildSubscriptionsResponse,
GetCompanyBillingEntityParams,
GetCompanyBillingEntityResponse,
+ GetCompanyInferenceCostParams,
+ GetCompanyInferenceCostResponse,
GetCompanyResponse,
GetEntityTraitDefinitionResponse,
GetEntityTraitDefinitionUsageResponse,
@@ -103,6 +105,8 @@
"GetBillingEntityChildSubscriptionsResponse": ".types",
"GetCompanyBillingEntityParams": ".types",
"GetCompanyBillingEntityResponse": ".types",
+ "GetCompanyInferenceCostParams": ".types",
+ "GetCompanyInferenceCostResponse": ".types",
"GetCompanyResponse": ".types",
"GetEntityTraitDefinitionResponse": ".types",
"GetEntityTraitDefinitionUsageResponse": ".types",
@@ -192,6 +196,8 @@ def __dir__():
"GetBillingEntityChildSubscriptionsResponse",
"GetCompanyBillingEntityParams",
"GetCompanyBillingEntityResponse",
+ "GetCompanyInferenceCostParams",
+ "GetCompanyInferenceCostResponse",
"GetCompanyResponse",
"GetEntityTraitDefinitionResponse",
"GetEntityTraitDefinitionUsageResponse",
diff --git a/src/schematic/companies/client.py b/src/schematic/companies/client.py
index e1801223..9f1c08d8 100644
--- a/src/schematic/companies/client.py
+++ b/src/schematic/companies/client.py
@@ -33,6 +33,7 @@
from .types.get_active_company_subscription_response import GetActiveCompanySubscriptionResponse
from .types.get_billing_entity_child_subscriptions_response import GetBillingEntityChildSubscriptionsResponse
from .types.get_company_billing_entity_response import GetCompanyBillingEntityResponse
+from .types.get_company_inference_cost_response import GetCompanyInferenceCostResponse
from .types.get_company_response import GetCompanyResponse
from .types.get_entity_trait_definition_response import GetEntityTraitDefinitionResponse
from .types.get_entity_trait_definition_usage_response import GetEntityTraitDefinitionUsageResponse
@@ -80,6 +81,7 @@ def with_raw_response(self) -> RawCompaniesClient:
def list_companies(
self,
*,
+ cancel_at_period_end: typing.Optional[bool] = None,
credit_type_ids: typing.Optional[typing.Union[str, typing.Sequence[str]]] = None,
has_scheduled_downgrade: typing.Optional[bool] = None,
ids: typing.Optional[typing.Union[str, typing.Sequence[str]]] = None,
@@ -108,11 +110,14 @@ def list_companies(
"""
Parameters
----------
+ cancel_at_period_end : typing.Optional[bool]
+ If true, filter companies with an active subscription that is set to cancel at the end of the current period; if false, filter companies without one
+
credit_type_ids : typing.Optional[typing.Union[str, typing.Sequence[str]]]
Filter companies by one or more credit type IDs (each ID starts with bcrd_)
has_scheduled_downgrade : typing.Optional[bool]
- Filter companies that have a pending scheduled downgrade
+ If true, filter companies that have a pending scheduled downgrade; if false, filter companies that do not
ids : typing.Optional[typing.Union[str, typing.Sequence[str]]]
Filter companies by multiple company IDs (starts with comp_)
@@ -187,6 +192,7 @@ def list_companies(
api_key="YOUR_API_KEY",
)
client.companies.list_companies(
+ cancel_at_period_end=True,
credit_type_ids=["credit_type_ids"],
has_scheduled_downgrade=True,
ids=["ids"],
@@ -211,6 +217,7 @@ def list_companies(
)
"""
_response = self._raw_client.list_companies(
+ cancel_at_period_end=cancel_at_period_end,
credit_type_ids=credit_type_ids,
has_scheduled_downgrade=has_scheduled_downgrade,
ids=ids,
@@ -389,9 +396,62 @@ def delete_company(
)
return _response.data
+ def get_company_inference_cost(
+ self,
+ company_id: str,
+ *,
+ end_time: typing.Optional[dt.datetime] = None,
+ start_time: typing.Optional[dt.datetime] = None,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> GetCompanyInferenceCostResponse:
+ """
+ Parameters
+ ----------
+ company_id : str
+ company_id
+
+ end_time : typing.Optional[dt.datetime]
+ End of the window (exclusive). Pass together with start_time; when both are omitted, the company's current billing period is used
+
+ start_time : typing.Optional[dt.datetime]
+ Start of the window (inclusive). Pass together with end_time; when both are omitted, the company's current billing period is used
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ GetCompanyInferenceCostResponse
+ OK
+
+ Examples
+ --------
+ import datetime
+
+ from schematic import Schematic
+
+ client = Schematic(
+ api_key="YOUR_API_KEY",
+ )
+ client.companies.get_company_inference_cost(
+ company_id="company_id",
+ end_time=datetime.datetime.fromisoformat(
+ "2024-01-15 09:30:00+00:00",
+ ),
+ start_time=datetime.datetime.fromisoformat(
+ "2024-01-15 09:30:00+00:00",
+ ),
+ )
+ """
+ _response = self._raw_client.get_company_inference_cost(
+ company_id, end_time=end_time, start_time=start_time, request_options=request_options
+ )
+ return _response.data
+
def count_companies(
self,
*,
+ cancel_at_period_end: typing.Optional[bool] = None,
credit_type_ids: typing.Optional[typing.Union[str, typing.Sequence[str]]] = None,
has_scheduled_downgrade: typing.Optional[bool] = None,
ids: typing.Optional[typing.Union[str, typing.Sequence[str]]] = None,
@@ -420,11 +480,14 @@ def count_companies(
"""
Parameters
----------
+ cancel_at_period_end : typing.Optional[bool]
+ If true, filter companies with an active subscription that is set to cancel at the end of the current period; if false, filter companies without one
+
credit_type_ids : typing.Optional[typing.Union[str, typing.Sequence[str]]]
Filter companies by one or more credit type IDs (each ID starts with bcrd_)
has_scheduled_downgrade : typing.Optional[bool]
- Filter companies that have a pending scheduled downgrade
+ If true, filter companies that have a pending scheduled downgrade; if false, filter companies that do not
ids : typing.Optional[typing.Union[str, typing.Sequence[str]]]
Filter companies by multiple company IDs (starts with comp_)
@@ -499,6 +562,7 @@ def count_companies(
api_key="YOUR_API_KEY",
)
client.companies.count_companies(
+ cancel_at_period_end=True,
credit_type_ids=["credit_type_ids"],
has_scheduled_downgrade=True,
ids=["ids"],
@@ -523,6 +587,7 @@ def count_companies(
)
"""
_response = self._raw_client.count_companies(
+ cancel_at_period_end=cancel_at_period_end,
credit_type_ids=credit_type_ids,
has_scheduled_downgrade=has_scheduled_downgrade,
ids=ids,
@@ -1641,7 +1706,7 @@ def list_plan_changes(
api_key="YOUR_API_KEY",
)
client.companies.list_plan_changes(
- action="amendment",
+ action="access_reinstated",
base_plan_action="fallback",
company_id="company_id",
company_ids=["company_ids"],
@@ -2394,6 +2459,7 @@ def with_raw_response(self) -> AsyncRawCompaniesClient:
async def list_companies(
self,
*,
+ cancel_at_period_end: typing.Optional[bool] = None,
credit_type_ids: typing.Optional[typing.Union[str, typing.Sequence[str]]] = None,
has_scheduled_downgrade: typing.Optional[bool] = None,
ids: typing.Optional[typing.Union[str, typing.Sequence[str]]] = None,
@@ -2422,11 +2488,14 @@ async def list_companies(
"""
Parameters
----------
+ cancel_at_period_end : typing.Optional[bool]
+ If true, filter companies with an active subscription that is set to cancel at the end of the current period; if false, filter companies without one
+
credit_type_ids : typing.Optional[typing.Union[str, typing.Sequence[str]]]
Filter companies by one or more credit type IDs (each ID starts with bcrd_)
has_scheduled_downgrade : typing.Optional[bool]
- Filter companies that have a pending scheduled downgrade
+ If true, filter companies that have a pending scheduled downgrade; if false, filter companies that do not
ids : typing.Optional[typing.Union[str, typing.Sequence[str]]]
Filter companies by multiple company IDs (starts with comp_)
@@ -2506,6 +2575,7 @@ async def list_companies(
async def main() -> None:
await client.companies.list_companies(
+ cancel_at_period_end=True,
credit_type_ids=["credit_type_ids"],
has_scheduled_downgrade=True,
ids=["ids"],
@@ -2533,6 +2603,7 @@ async def main() -> None:
asyncio.run(main())
"""
_response = await self._raw_client.list_companies(
+ cancel_at_period_end=cancel_at_period_end,
credit_type_ids=credit_type_ids,
has_scheduled_downgrade=has_scheduled_downgrade,
ids=ids,
@@ -2735,9 +2806,69 @@ async def main() -> None:
)
return _response.data
+ async def get_company_inference_cost(
+ self,
+ company_id: str,
+ *,
+ end_time: typing.Optional[dt.datetime] = None,
+ start_time: typing.Optional[dt.datetime] = None,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> GetCompanyInferenceCostResponse:
+ """
+ Parameters
+ ----------
+ company_id : str
+ company_id
+
+ end_time : typing.Optional[dt.datetime]
+ End of the window (exclusive). Pass together with start_time; when both are omitted, the company's current billing period is used
+
+ start_time : typing.Optional[dt.datetime]
+ Start of the window (inclusive). Pass together with end_time; when both are omitted, the company's current billing period is used
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ GetCompanyInferenceCostResponse
+ OK
+
+ Examples
+ --------
+ import asyncio
+ import datetime
+
+ from schematic import AsyncSchematic
+
+ client = AsyncSchematic(
+ api_key="YOUR_API_KEY",
+ )
+
+
+ async def main() -> None:
+ await client.companies.get_company_inference_cost(
+ company_id="company_id",
+ end_time=datetime.datetime.fromisoformat(
+ "2024-01-15 09:30:00+00:00",
+ ),
+ start_time=datetime.datetime.fromisoformat(
+ "2024-01-15 09:30:00+00:00",
+ ),
+ )
+
+
+ asyncio.run(main())
+ """
+ _response = await self._raw_client.get_company_inference_cost(
+ company_id, end_time=end_time, start_time=start_time, request_options=request_options
+ )
+ return _response.data
+
async def count_companies(
self,
*,
+ cancel_at_period_end: typing.Optional[bool] = None,
credit_type_ids: typing.Optional[typing.Union[str, typing.Sequence[str]]] = None,
has_scheduled_downgrade: typing.Optional[bool] = None,
ids: typing.Optional[typing.Union[str, typing.Sequence[str]]] = None,
@@ -2766,11 +2897,14 @@ async def count_companies(
"""
Parameters
----------
+ cancel_at_period_end : typing.Optional[bool]
+ If true, filter companies with an active subscription that is set to cancel at the end of the current period; if false, filter companies without one
+
credit_type_ids : typing.Optional[typing.Union[str, typing.Sequence[str]]]
Filter companies by one or more credit type IDs (each ID starts with bcrd_)
has_scheduled_downgrade : typing.Optional[bool]
- Filter companies that have a pending scheduled downgrade
+ If true, filter companies that have a pending scheduled downgrade; if false, filter companies that do not
ids : typing.Optional[typing.Union[str, typing.Sequence[str]]]
Filter companies by multiple company IDs (starts with comp_)
@@ -2850,6 +2984,7 @@ async def count_companies(
async def main() -> None:
await client.companies.count_companies(
+ cancel_at_period_end=True,
credit_type_ids=["credit_type_ids"],
has_scheduled_downgrade=True,
ids=["ids"],
@@ -2877,6 +3012,7 @@ async def main() -> None:
asyncio.run(main())
"""
_response = await self._raw_client.count_companies(
+ cancel_at_period_end=cancel_at_period_end,
credit_type_ids=credit_type_ids,
has_scheduled_downgrade=has_scheduled_downgrade,
ids=ids,
@@ -4188,7 +4324,7 @@ async def list_plan_changes(
async def main() -> None:
await client.companies.list_plan_changes(
- action="amendment",
+ action="access_reinstated",
base_plan_action="fallback",
company_id="company_id",
company_ids=["company_ids"],
diff --git a/src/schematic/companies/raw_client.py b/src/schematic/companies/raw_client.py
index c5dcd019..694c3345 100644
--- a/src/schematic/companies/raw_client.py
+++ b/src/schematic/companies/raw_client.py
@@ -6,6 +6,7 @@
from ..core.api_error import ApiError as core_api_error_ApiError
from ..core.client_wrapper import AsyncClientWrapper, SyncClientWrapper
+from ..core.datetime_utils import serialize_datetime
from ..core.http_response import AsyncHttpResponse, HttpResponse
from ..core.jsonable_encoder import encode_path_param
from ..core.parse_error import ParsingError
@@ -45,6 +46,7 @@
from .types.get_active_company_subscription_response import GetActiveCompanySubscriptionResponse
from .types.get_billing_entity_child_subscriptions_response import GetBillingEntityChildSubscriptionsResponse
from .types.get_company_billing_entity_response import GetCompanyBillingEntityResponse
+from .types.get_company_inference_cost_response import GetCompanyInferenceCostResponse
from .types.get_company_response import GetCompanyResponse
from .types.get_entity_trait_definition_response import GetEntityTraitDefinitionResponse
from .types.get_entity_trait_definition_usage_response import GetEntityTraitDefinitionUsageResponse
@@ -82,6 +84,7 @@ def __init__(self, *, client_wrapper: SyncClientWrapper):
def list_companies(
self,
*,
+ cancel_at_period_end: typing.Optional[bool] = None,
credit_type_ids: typing.Optional[typing.Union[str, typing.Sequence[str]]] = None,
has_scheduled_downgrade: typing.Optional[bool] = None,
ids: typing.Optional[typing.Union[str, typing.Sequence[str]]] = None,
@@ -110,11 +113,14 @@ def list_companies(
"""
Parameters
----------
+ cancel_at_period_end : typing.Optional[bool]
+ If true, filter companies with an active subscription that is set to cancel at the end of the current period; if false, filter companies without one
+
credit_type_ids : typing.Optional[typing.Union[str, typing.Sequence[str]]]
Filter companies by one or more credit type IDs (each ID starts with bcrd_)
has_scheduled_downgrade : typing.Optional[bool]
- Filter companies that have a pending scheduled downgrade
+ If true, filter companies that have a pending scheduled downgrade; if false, filter companies that do not
ids : typing.Optional[typing.Union[str, typing.Sequence[str]]]
Filter companies by multiple company IDs (starts with comp_)
@@ -185,6 +191,7 @@ def list_companies(
"companies",
method="GET",
params={
+ "cancel_at_period_end": cancel_at_period_end,
"credit_type_ids": credit_type_ids,
"has_scheduled_downgrade": has_scheduled_downgrade,
"ids": ids,
@@ -640,9 +647,114 @@ def delete_company(
status_code=_response.status_code, headers=dict(_response.headers), body=_response_json
)
+ def get_company_inference_cost(
+ self,
+ company_id: str,
+ *,
+ end_time: typing.Optional[dt.datetime] = None,
+ start_time: typing.Optional[dt.datetime] = None,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> HttpResponse[GetCompanyInferenceCostResponse]:
+ """
+ Parameters
+ ----------
+ company_id : str
+ company_id
+
+ end_time : typing.Optional[dt.datetime]
+ End of the window (exclusive). Pass together with start_time; when both are omitted, the company's current billing period is used
+
+ start_time : typing.Optional[dt.datetime]
+ Start of the window (inclusive). Pass together with end_time; when both are omitted, the company's current billing period is used
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ HttpResponse[GetCompanyInferenceCostResponse]
+ OK
+ """
+ _response = self._client_wrapper.httpx_client.request(
+ f"companies/{encode_path_param(company_id)}/inference-cost",
+ method="GET",
+ params={
+ "end_time": serialize_datetime(end_time) if end_time is not None else None,
+ "start_time": serialize_datetime(start_time) if start_time is not None else None,
+ },
+ request_options=request_options,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ _data = typing.cast(
+ GetCompanyInferenceCostResponse,
+ parse_obj_as(
+ type_=GetCompanyInferenceCostResponse, # type: ignore
+ object_=_response.json(),
+ ),
+ )
+ return HttpResponse(response=_response, data=_data)
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ types_api_error_ApiError,
+ parse_obj_as(
+ type_=types_api_error_ApiError, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ types_api_error_ApiError,
+ parse_obj_as(
+ type_=types_api_error_ApiError, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 404:
+ raise NotFoundError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ types_api_error_ApiError,
+ parse_obj_as(
+ type_=types_api_error_ApiError, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 500:
+ raise InternalServerError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ types_api_error_ApiError,
+ parse_obj_as(
+ type_=types_api_error_ApiError, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise core_api_error_ApiError(
+ status_code=_response.status_code, headers=dict(_response.headers), body=_response.text
+ )
+ except ValidationError as e:
+ raise ParsingError(
+ status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e
+ )
+ raise core_api_error_ApiError(
+ status_code=_response.status_code, headers=dict(_response.headers), body=_response_json
+ )
+
def count_companies(
self,
*,
+ cancel_at_period_end: typing.Optional[bool] = None,
credit_type_ids: typing.Optional[typing.Union[str, typing.Sequence[str]]] = None,
has_scheduled_downgrade: typing.Optional[bool] = None,
ids: typing.Optional[typing.Union[str, typing.Sequence[str]]] = None,
@@ -671,11 +783,14 @@ def count_companies(
"""
Parameters
----------
+ cancel_at_period_end : typing.Optional[bool]
+ If true, filter companies with an active subscription that is set to cancel at the end of the current period; if false, filter companies without one
+
credit_type_ids : typing.Optional[typing.Union[str, typing.Sequence[str]]]
Filter companies by one or more credit type IDs (each ID starts with bcrd_)
has_scheduled_downgrade : typing.Optional[bool]
- Filter companies that have a pending scheduled downgrade
+ If true, filter companies that have a pending scheduled downgrade; if false, filter companies that do not
ids : typing.Optional[typing.Union[str, typing.Sequence[str]]]
Filter companies by multiple company IDs (starts with comp_)
@@ -746,6 +861,7 @@ def count_companies(
"companies/count",
method="GET",
params={
+ "cancel_at_period_end": cancel_at_period_end,
"credit_type_ids": credit_type_ids,
"has_scheduled_downgrade": has_scheduled_downgrade,
"ids": ids,
@@ -5244,6 +5360,7 @@ def __init__(self, *, client_wrapper: AsyncClientWrapper):
async def list_companies(
self,
*,
+ cancel_at_period_end: typing.Optional[bool] = None,
credit_type_ids: typing.Optional[typing.Union[str, typing.Sequence[str]]] = None,
has_scheduled_downgrade: typing.Optional[bool] = None,
ids: typing.Optional[typing.Union[str, typing.Sequence[str]]] = None,
@@ -5272,11 +5389,14 @@ async def list_companies(
"""
Parameters
----------
+ cancel_at_period_end : typing.Optional[bool]
+ If true, filter companies with an active subscription that is set to cancel at the end of the current period; if false, filter companies without one
+
credit_type_ids : typing.Optional[typing.Union[str, typing.Sequence[str]]]
Filter companies by one or more credit type IDs (each ID starts with bcrd_)
has_scheduled_downgrade : typing.Optional[bool]
- Filter companies that have a pending scheduled downgrade
+ If true, filter companies that have a pending scheduled downgrade; if false, filter companies that do not
ids : typing.Optional[typing.Union[str, typing.Sequence[str]]]
Filter companies by multiple company IDs (starts with comp_)
@@ -5347,6 +5467,7 @@ async def list_companies(
"companies",
method="GET",
params={
+ "cancel_at_period_end": cancel_at_period_end,
"credit_type_ids": credit_type_ids,
"has_scheduled_downgrade": has_scheduled_downgrade,
"ids": ids,
@@ -5802,9 +5923,114 @@ async def delete_company(
status_code=_response.status_code, headers=dict(_response.headers), body=_response_json
)
+ async def get_company_inference_cost(
+ self,
+ company_id: str,
+ *,
+ end_time: typing.Optional[dt.datetime] = None,
+ start_time: typing.Optional[dt.datetime] = None,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> AsyncHttpResponse[GetCompanyInferenceCostResponse]:
+ """
+ Parameters
+ ----------
+ company_id : str
+ company_id
+
+ end_time : typing.Optional[dt.datetime]
+ End of the window (exclusive). Pass together with start_time; when both are omitted, the company's current billing period is used
+
+ start_time : typing.Optional[dt.datetime]
+ Start of the window (inclusive). Pass together with end_time; when both are omitted, the company's current billing period is used
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ AsyncHttpResponse[GetCompanyInferenceCostResponse]
+ OK
+ """
+ _response = await self._client_wrapper.httpx_client.request(
+ f"companies/{encode_path_param(company_id)}/inference-cost",
+ method="GET",
+ params={
+ "end_time": serialize_datetime(end_time) if end_time is not None else None,
+ "start_time": serialize_datetime(start_time) if start_time is not None else None,
+ },
+ request_options=request_options,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ _data = typing.cast(
+ GetCompanyInferenceCostResponse,
+ parse_obj_as(
+ type_=GetCompanyInferenceCostResponse, # type: ignore
+ object_=_response.json(),
+ ),
+ )
+ return AsyncHttpResponse(response=_response, data=_data)
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ types_api_error_ApiError,
+ parse_obj_as(
+ type_=types_api_error_ApiError, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ types_api_error_ApiError,
+ parse_obj_as(
+ type_=types_api_error_ApiError, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 404:
+ raise NotFoundError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ types_api_error_ApiError,
+ parse_obj_as(
+ type_=types_api_error_ApiError, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 500:
+ raise InternalServerError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ types_api_error_ApiError,
+ parse_obj_as(
+ type_=types_api_error_ApiError, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise core_api_error_ApiError(
+ status_code=_response.status_code, headers=dict(_response.headers), body=_response.text
+ )
+ except ValidationError as e:
+ raise ParsingError(
+ status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e
+ )
+ raise core_api_error_ApiError(
+ status_code=_response.status_code, headers=dict(_response.headers), body=_response_json
+ )
+
async def count_companies(
self,
*,
+ cancel_at_period_end: typing.Optional[bool] = None,
credit_type_ids: typing.Optional[typing.Union[str, typing.Sequence[str]]] = None,
has_scheduled_downgrade: typing.Optional[bool] = None,
ids: typing.Optional[typing.Union[str, typing.Sequence[str]]] = None,
@@ -5833,11 +6059,14 @@ async def count_companies(
"""
Parameters
----------
+ cancel_at_period_end : typing.Optional[bool]
+ If true, filter companies with an active subscription that is set to cancel at the end of the current period; if false, filter companies without one
+
credit_type_ids : typing.Optional[typing.Union[str, typing.Sequence[str]]]
Filter companies by one or more credit type IDs (each ID starts with bcrd_)
has_scheduled_downgrade : typing.Optional[bool]
- Filter companies that have a pending scheduled downgrade
+ If true, filter companies that have a pending scheduled downgrade; if false, filter companies that do not
ids : typing.Optional[typing.Union[str, typing.Sequence[str]]]
Filter companies by multiple company IDs (starts with comp_)
@@ -5908,6 +6137,7 @@ async def count_companies(
"companies/count",
method="GET",
params={
+ "cancel_at_period_end": cancel_at_period_end,
"credit_type_ids": credit_type_ids,
"has_scheduled_downgrade": has_scheduled_downgrade,
"ids": ids,
diff --git a/src/schematic/companies/types/__init__.py b/src/schematic/companies/types/__init__.py
index 79a8ca10..b24d41bb 100644
--- a/src/schematic/companies/types/__init__.py
+++ b/src/schematic/companies/types/__init__.py
@@ -36,6 +36,8 @@
from .get_billing_entity_child_subscriptions_response import GetBillingEntityChildSubscriptionsResponse
from .get_company_billing_entity_params import GetCompanyBillingEntityParams
from .get_company_billing_entity_response import GetCompanyBillingEntityResponse
+ from .get_company_inference_cost_params import GetCompanyInferenceCostParams
+ from .get_company_inference_cost_response import GetCompanyInferenceCostResponse
from .get_company_response import GetCompanyResponse
from .get_entity_trait_definition_response import GetEntityTraitDefinitionResponse
from .get_entity_trait_definition_usage_response import GetEntityTraitDefinitionUsageResponse
@@ -101,6 +103,8 @@
"GetBillingEntityChildSubscriptionsResponse": ".get_billing_entity_child_subscriptions_response",
"GetCompanyBillingEntityParams": ".get_company_billing_entity_params",
"GetCompanyBillingEntityResponse": ".get_company_billing_entity_response",
+ "GetCompanyInferenceCostParams": ".get_company_inference_cost_params",
+ "GetCompanyInferenceCostResponse": ".get_company_inference_cost_response",
"GetCompanyResponse": ".get_company_response",
"GetEntityTraitDefinitionResponse": ".get_entity_trait_definition_response",
"GetEntityTraitDefinitionUsageResponse": ".get_entity_trait_definition_usage_response",
@@ -190,6 +194,8 @@ def __dir__():
"GetBillingEntityChildSubscriptionsResponse",
"GetCompanyBillingEntityParams",
"GetCompanyBillingEntityResponse",
+ "GetCompanyInferenceCostParams",
+ "GetCompanyInferenceCostResponse",
"GetCompanyResponse",
"GetEntityTraitDefinitionResponse",
"GetEntityTraitDefinitionUsageResponse",
diff --git a/src/schematic/companies/types/count_companies_params.py b/src/schematic/companies/types/count_companies_params.py
index a1ec6cf1..a0683325 100644
--- a/src/schematic/companies/types/count_companies_params.py
+++ b/src/schematic/companies/types/count_companies_params.py
@@ -14,6 +14,11 @@ class CountCompaniesParams(UniversalBaseModel):
Input parameters
"""
+ cancel_at_period_end: typing.Optional[bool] = pydantic.Field(default=None)
+ """
+ If true, filter companies with an active subscription that is set to cancel at the end of the current period; if false, filter companies without one
+ """
+
credit_type_ids: typing.Optional[typing.List[str]] = pydantic.Field(default=None)
"""
Filter companies by one or more credit type IDs (each ID starts with bcrd_)
@@ -21,7 +26,7 @@ class CountCompaniesParams(UniversalBaseModel):
has_scheduled_downgrade: typing.Optional[bool] = pydantic.Field(default=None)
"""
- Filter companies that have a pending scheduled downgrade
+ If true, filter companies that have a pending scheduled downgrade; if false, filter companies that do not
"""
ids: typing.Optional[typing.List[str]] = pydantic.Field(default=None)
diff --git a/src/schematic/companies/types/get_company_inference_cost_params.py b/src/schematic/companies/types/get_company_inference_cost_params.py
new file mode 100644
index 00000000..a23d5619
--- /dev/null
+++ b/src/schematic/companies/types/get_company_inference_cost_params.py
@@ -0,0 +1,32 @@
+# 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 GetCompanyInferenceCostParams(UniversalBaseModel):
+ """
+ Input parameters
+ """
+
+ end_time: typing.Optional[dt.datetime] = pydantic.Field(default=None)
+ """
+ End of the window (exclusive). Pass together with start_time; when both are omitted, the company's current billing period is used
+ """
+
+ start_time: typing.Optional[dt.datetime] = pydantic.Field(default=None)
+ """
+ Start of the window (inclusive). Pass together with end_time; when both are omitted, the company's current billing period is used
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/schematic/companies/types/get_company_inference_cost_response.py b/src/schematic/companies/types/get_company_inference_cost_response.py
new file mode 100644
index 00000000..6f5bb627
--- /dev/null
+++ b/src/schematic/companies/types/get_company_inference_cost_response.py
@@ -0,0 +1,25 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ...core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from ...types.company_inference_cost_response_data import CompanyInferenceCostResponseData
+from .get_company_inference_cost_params import GetCompanyInferenceCostParams
+
+
+class GetCompanyInferenceCostResponse(UniversalBaseModel):
+ data: CompanyInferenceCostResponseData
+ params: GetCompanyInferenceCostParams = pydantic.Field()
+ """
+ Input parameters
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/schematic/companies/types/list_companies_params.py b/src/schematic/companies/types/list_companies_params.py
index 28684ac9..9d897564 100644
--- a/src/schematic/companies/types/list_companies_params.py
+++ b/src/schematic/companies/types/list_companies_params.py
@@ -14,6 +14,11 @@ class ListCompaniesParams(UniversalBaseModel):
Input parameters
"""
+ cancel_at_period_end: typing.Optional[bool] = pydantic.Field(default=None)
+ """
+ If true, filter companies with an active subscription that is set to cancel at the end of the current period; if false, filter companies without one
+ """
+
credit_type_ids: typing.Optional[typing.List[str]] = pydantic.Field(default=None)
"""
Filter companies by one or more credit type IDs (each ID starts with bcrd_)
@@ -21,7 +26,7 @@ class ListCompaniesParams(UniversalBaseModel):
has_scheduled_downgrade: typing.Optional[bool] = pydantic.Field(default=None)
"""
- Filter companies that have a pending scheduled downgrade
+ If true, filter companies that have a pending scheduled downgrade; if false, filter companies that do not
"""
ids: typing.Optional[typing.List[str]] = pydantic.Field(default=None)
diff --git a/src/schematic/core/client_wrapper.py b/src/schematic/core/client_wrapper.py
index 7b5aeb53..1dec00bc 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.4.7",
+ "User-Agent": "schematichq/1.4.8",
"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.4.7",
+ "X-Fern-SDK-Version": "1.4.8",
**(self.get_custom_headers() or {}),
}
headers["X-Schematic-Api-Key"] = self.api_key
diff --git a/src/schematic/core/file.py b/src/schematic/core/file.py
index 44b0d27c..91777934 100644
--- a/src/schematic/core/file.py
+++ b/src/schematic/core/file.py
@@ -2,8 +2,37 @@
from typing import IO, Dict, List, Mapping, Optional, Tuple, Union, cast
-# File typing inspired by the flexibility of types within the httpx library
-# https://github.com/encode/httpx/blob/master/httpx/_types.py
+# The file types below are adapted from httpx
+# (https://github.com/encode/httpx/blob/master/httpx/_types.py), used under the following license:
+#
+# Copyright © 2019, [Encode OSS Ltd](https://www.encode.io/).
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are met:
+#
+# * Redistributions of source code must retain the above copyright notice, this
+# list of conditions and the following disclaimer.
+#
+# * Redistributions in binary form must reproduce the above copyright notice,
+# this list of conditions and the following disclaimer in the documentation
+# and/or other materials provided with the distribution.
+#
+# * Neither the name of the copyright holder nor the names of its contributors
+# may be used to endorse or promote products derived from this software
+# without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
FileContent = Union[IO[bytes], bytes, str]
File = Union[
# file (or bytes)
diff --git a/src/schematic/core/http_client.py b/src/schematic/core/http_client.py
index c069b268..13a73fbb 100644
--- a/src/schematic/core/http_client.py
+++ b/src/schematic/core/http_client.py
@@ -100,6 +100,32 @@ def get_async_keepalive_proxy_mounts(
}
+# The Retry-After date parsing in _parse_retry_after is adapted from urllib3 1.26
+# (https://github.com/urllib3/urllib3/blob/1.26.x/src/urllib3/util/retry.py), used under the following license:
+#
+# MIT License
+#
+# Copyright (c) 2008-2020 Andrey Petrov and contributors (see CONTRIBUTORS.txt)
+#
+# Permission is hereby granted, free of charge, to any person obtaining a copy
+# of this software and associated documentation files (the "Software"), to deal
+# in the Software without restriction, including without limitation the rights
+# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+# copies of the Software, and to permit persons to whom the Software is
+# furnished to do so, subject to the following conditions:
+#
+# The above copyright notice and this permission notice shall be included in all
+# copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+# SOFTWARE.
+
+
def _parse_retry_after(response_headers: httpx.Headers) -> typing.Optional[float]:
"""
This function parses the `Retry-After` header in a HTTP response and returns the number of seconds to wait.
diff --git a/src/schematic/core/http_sse/_api.py b/src/schematic/core/http_sse/_api.py
index 9ca5602c..84f2b98e 100644
--- a/src/schematic/core/http_sse/_api.py
+++ b/src/schematic/core/http_sse/_api.py
@@ -1,5 +1,30 @@
# This file was auto-generated by Fern from our API Definition.
+# This file is adapted from httpx-sse 0.4.1
+# (https://github.com/florimondmanca/httpx-sse), used under the following license:
+#
+# MIT License
+#
+# Copyright (c) 2022 Florimond Manca
+#
+# Permission is hereby granted, free of charge, to any person obtaining a copy
+# of this software and associated documentation files (the "Software"), to deal
+# in the Software without restriction, including without limitation the rights
+# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+# copies of the Software, and to permit persons to whom the Software is
+# furnished to do so, subject to the following conditions:
+#
+# The above copyright notice and this permission notice shall be included in all
+# copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+# SOFTWARE.
+
import codecs
import re
import time
diff --git a/src/schematic/core/http_sse/_decoders.py b/src/schematic/core/http_sse/_decoders.py
index 1f6b35ec..bf0b0e1e 100644
--- a/src/schematic/core/http_sse/_decoders.py
+++ b/src/schematic/core/http_sse/_decoders.py
@@ -1,5 +1,30 @@
# This file was auto-generated by Fern from our API Definition.
+# This file is adapted from httpx-sse 0.4.1
+# (https://github.com/florimondmanca/httpx-sse), used under the following license:
+#
+# MIT License
+#
+# Copyright (c) 2022 Florimond Manca
+#
+# Permission is hereby granted, free of charge, to any person obtaining a copy
+# of this software and associated documentation files (the "Software"), to deal
+# in the Software without restriction, including without limitation the rights
+# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+# copies of the Software, and to permit persons to whom the Software is
+# furnished to do so, subject to the following conditions:
+#
+# The above copyright notice and this permission notice shall be included in all
+# copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+# SOFTWARE.
+
from typing import List, Optional
from ._models import ServerSentEvent
diff --git a/src/schematic/core/http_sse/_exceptions.py b/src/schematic/core/http_sse/_exceptions.py
index 81605a8a..16479794 100644
--- a/src/schematic/core/http_sse/_exceptions.py
+++ b/src/schematic/core/http_sse/_exceptions.py
@@ -1,5 +1,30 @@
# This file was auto-generated by Fern from our API Definition.
+# This file is adapted from httpx-sse 0.4.1
+# (https://github.com/florimondmanca/httpx-sse), used under the following license:
+#
+# MIT License
+#
+# Copyright (c) 2022 Florimond Manca
+#
+# Permission is hereby granted, free of charge, to any person obtaining a copy
+# of this software and associated documentation files (the "Software"), to deal
+# in the Software without restriction, including without limitation the rights
+# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+# copies of the Software, and to permit persons to whom the Software is
+# furnished to do so, subject to the following conditions:
+#
+# The above copyright notice and this permission notice shall be included in all
+# copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+# SOFTWARE.
+
import httpx
diff --git a/src/schematic/core/http_sse/_models.py b/src/schematic/core/http_sse/_models.py
index 1af57f8f..6ae228d3 100644
--- a/src/schematic/core/http_sse/_models.py
+++ b/src/schematic/core/http_sse/_models.py
@@ -1,5 +1,30 @@
# This file was auto-generated by Fern from our API Definition.
+# This file is adapted from httpx-sse 0.4.1
+# (https://github.com/florimondmanca/httpx-sse), used under the following license:
+#
+# MIT License
+#
+# Copyright (c) 2022 Florimond Manca
+#
+# Permission is hereby granted, free of charge, to any person obtaining a copy
+# of this software and associated documentation files (the "Software"), to deal
+# in the Software without restriction, including without limitation the rights
+# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+# copies of the Software, and to permit persons to whom the Software is
+# furnished to do so, subject to the following conditions:
+#
+# The above copyright notice and this permission notice shall be included in all
+# copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+# SOFTWARE.
+
import json
from dataclasses import dataclass
from typing import Any, Optional
diff --git a/src/schematic/core/jsonable_encoder.py b/src/schematic/core/jsonable_encoder.py
index 2608ce6b..5b9a26c7 100644
--- a/src/schematic/core/jsonable_encoder.py
+++ b/src/schematic/core/jsonable_encoder.py
@@ -8,6 +8,31 @@
https://github.com/tiangolo/fastapi/blob/master/fastapi/encoders.py
"""
+# jsonable_encoder is adapted from FastAPI
+# (https://github.com/fastapi/fastapi/blob/master/fastapi/encoders.py), used under the following license:
+#
+# The MIT License (MIT)
+#
+# Copyright (c) 2018 Sebastián Ramírez
+#
+# Permission is hereby granted, free of charge, to any person obtaining a copy
+# of this software and associated documentation files (the "Software"), to deal
+# in the Software without restriction, including without limitation the rights
+# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+# copies of the Software, and to permit persons to whom the Software is
+# furnished to do so, subject to the following conditions:
+#
+# The above copyright notice and this permission notice shall be included in
+# all copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+# THE SOFTWARE.
+
import base64
import dataclasses
import datetime as dt
diff --git a/src/schematic/credits/client.py b/src/schematic/credits/client.py
index 29b655ad..ebe5b423 100644
--- a/src/schematic/credits/client.py
+++ b/src/schematic/credits/client.py
@@ -1984,7 +1984,7 @@ def reserve_credits(
credit_type_id : str
expires_at : typing.Optional[dt.datetime]
- When the hold lapses if no track event settles it; defaults to one minute from now and may be at most one hour out. The unspent hold is refunded on expiry
+ When the hold lapses if no track event settles it; defaults to one minute from now and may be at most 24 hours out. The unspent hold is refunded on expiry
idempotency_key : typing.Optional[str]
A caller-chosen key for safe retries: a second request with the same key returns the original reservation instead of taking another hold
@@ -4738,7 +4738,7 @@ async def reserve_credits(
credit_type_id : str
expires_at : typing.Optional[dt.datetime]
- When the hold lapses if no track event settles it; defaults to one minute from now and may be at most one hour out. The unspent hold is refunded on expiry
+ When the hold lapses if no track event settles it; defaults to one minute from now and may be at most 24 hours out. The unspent hold is refunded on expiry
idempotency_key : typing.Optional[str]
A caller-chosen key for safe retries: a second request with the same key returns the original reservation instead of taking another hold
diff --git a/src/schematic/credits/raw_client.py b/src/schematic/credits/raw_client.py
index f132bf43..995bd493 100644
--- a/src/schematic/credits/raw_client.py
+++ b/src/schematic/credits/raw_client.py
@@ -3987,7 +3987,7 @@ def reserve_credits(
credit_type_id : str
expires_at : typing.Optional[dt.datetime]
- When the hold lapses if no track event settles it; defaults to one minute from now and may be at most one hour out. The unspent hold is refunded on expiry
+ When the hold lapses if no track event settles it; defaults to one minute from now and may be at most 24 hours out. The unspent hold is refunded on expiry
idempotency_key : typing.Optional[str]
A caller-chosen key for safe retries: a second request with the same key returns the original reservation instead of taking another hold
@@ -9294,7 +9294,7 @@ async def reserve_credits(
credit_type_id : str
expires_at : typing.Optional[dt.datetime]
- When the hold lapses if no track event settles it; defaults to one minute from now and may be at most one hour out. The unspent hold is refunded on expiry
+ When the hold lapses if no track event settles it; defaults to one minute from now and may be at most 24 hours out. The unspent hold is refunded on expiry
idempotency_key : typing.Optional[str]
A caller-chosen key for safe retries: a second request with the same key returns the original reservation instead of taking another hold
diff --git a/src/schematic/features/client.py b/src/schematic/features/client.py
index cdac740f..397fef0d 100644
--- a/src/schematic/features/client.py
+++ b/src/schematic/features/client.py
@@ -928,7 +928,7 @@ def check_and_reserve_flag(
company : typing.Optional[typing.Dict[str, str]]
expires_at : typing.Optional[dt.datetime]
- When the hold lapses if no track or inference event settles it; defaults to one minute from now and may be at most one hour out. The unspent hold is refunded on expiry
+ When the hold lapses if no track or inference event settles it; defaults to one minute from now and may be at most 24 hours out. The unspent hold is refunded on expiry
idempotency_key : typing.Optional[str]
A caller-chosen key for safe retries: a second request with the same key returns the original reservation instead of taking another hold
@@ -2105,7 +2105,7 @@ async def check_and_reserve_flag(
company : typing.Optional[typing.Dict[str, str]]
expires_at : typing.Optional[dt.datetime]
- When the hold lapses if no track or inference event settles it; defaults to one minute from now and may be at most one hour out. The unspent hold is refunded on expiry
+ When the hold lapses if no track or inference event settles it; defaults to one minute from now and may be at most 24 hours out. The unspent hold is refunded on expiry
idempotency_key : typing.Optional[str]
A caller-chosen key for safe retries: a second request with the same key returns the original reservation instead of taking another hold
diff --git a/src/schematic/features/raw_client.py b/src/schematic/features/raw_client.py
index 0004152a..ef1fb47f 100644
--- a/src/schematic/features/raw_client.py
+++ b/src/schematic/features/raw_client.py
@@ -1862,7 +1862,7 @@ def check_and_reserve_flag(
company : typing.Optional[typing.Dict[str, str]]
expires_at : typing.Optional[dt.datetime]
- When the hold lapses if no track or inference event settles it; defaults to one minute from now and may be at most one hour out. The unspent hold is refunded on expiry
+ When the hold lapses if no track or inference event settles it; defaults to one minute from now and may be at most 24 hours out. The unspent hold is refunded on expiry
idempotency_key : typing.Optional[str]
A caller-chosen key for safe retries: a second request with the same key returns the original reservation instead of taking another hold
@@ -4148,7 +4148,7 @@ async def check_and_reserve_flag(
company : typing.Optional[typing.Dict[str, str]]
expires_at : typing.Optional[dt.datetime]
- When the hold lapses if no track or inference event settles it; defaults to one minute from now and may be at most one hour out. The unspent hold is refunded on expiry
+ When the hold lapses if no track or inference event settles it; defaults to one minute from now and may be at most 24 hours out. The unspent hold is refunded on expiry
idempotency_key : typing.Optional[str]
A caller-chosen key for safe retries: a second request with the same key returns the original reservation instead of taking another hold
diff --git a/src/schematic/plans/client.py b/src/schematic/plans/client.py
index 0ace8898..54a2abaf 100644
--- a/src/schematic/plans/client.py
+++ b/src/schematic/plans/client.py
@@ -16,6 +16,7 @@
from ..types.customer_billing_address import CustomerBillingAddress
from ..types.mark_custom_plan_billing_paid_request_body import MarkCustomPlanBillingPaidRequestBody
from ..types.migration_proration_behavior import MigrationProrationBehavior
+from ..types.payment_gating import PaymentGating
from ..types.plan_billing_source import PlanBillingSource
from ..types.plan_currency_price_request_body import PlanCurrencyPriceRequestBody
from ..types.plan_icon import PlanIcon
@@ -1224,6 +1225,8 @@ def publish_plan_version(
customer_email: typing.Optional[str] = OMIT,
days_until_due: typing.Optional[int] = OMIT,
end_date: typing.Optional[dt.datetime] = OMIT,
+ gating_days: typing.Optional[int] = OMIT,
+ payment_gating: typing.Optional[PaymentGating] = OMIT,
phone: typing.Optional[str] = OMIT,
prorate_first_period: typing.Optional[bool] = OMIT,
proration_behavior: typing.Optional[MigrationProrationBehavior] = OMIT,
@@ -1270,6 +1273,12 @@ def publish_plan_version(
end_date : typing.Optional[dt.datetime]
When a custom plan that doesn't renew ends: the company moves to the default plan then, and no renewal invoice is raised. Required when the version's renewal_policy is expire_to_default, and refused otherwise. Moved back to the last renewal on or before it, which must leave at least one whole billing period. Only honored on a first publish that starts a subscription.
+ gating_days : typing.Optional[int]
+ With payment_gating revoke_after, how many days past due an invoice may go before the company loses the plan. 0 revokes at once. Only applies when Schematic bills the company. Applies to the company's contract and never creates a plan version. Omitted keeps the contract's setting.
+
+ payment_gating : typing.Optional[PaymentGating]
+ What happens to the company's access when an invoice passes its due date: keep_serving keeps the plan and marks the subscription past due; revoke_after takes the plan away after gating_days. Only applies when Schematic bills the company, to every invoice on its contract, and never creates a plan version. Omitted keeps the contract's setting, which is keep_serving unless changed.
+
phone : typing.Optional[str]
prorate_first_period : typing.Optional[bool]
@@ -1324,6 +1333,8 @@ def publish_plan_version(
customer_email=customer_email,
days_until_due=days_until_due,
end_date=end_date,
+ gating_days=gating_days,
+ payment_gating=payment_gating,
phone=phone,
prorate_first_period=prorate_first_period,
proration_behavior=proration_behavior,
@@ -1351,6 +1362,8 @@ def preview_publish_plan_version(
customer_email: typing.Optional[str] = OMIT,
days_until_due: typing.Optional[int] = OMIT,
end_date: typing.Optional[dt.datetime] = OMIT,
+ gating_days: typing.Optional[int] = OMIT,
+ payment_gating: typing.Optional[PaymentGating] = OMIT,
phone: typing.Optional[str] = OMIT,
prorate_first_period: typing.Optional[bool] = OMIT,
proration_behavior: typing.Optional[MigrationProrationBehavior] = OMIT,
@@ -1397,6 +1410,12 @@ def preview_publish_plan_version(
end_date : typing.Optional[dt.datetime]
When a custom plan that doesn't renew ends: the company moves to the default plan then, and no renewal invoice is raised. Required when the version's renewal_policy is expire_to_default, and refused otherwise. Moved back to the last renewal on or before it, which must leave at least one whole billing period. Only honored on a first publish that starts a subscription.
+ gating_days : typing.Optional[int]
+ With payment_gating revoke_after, how many days past due an invoice may go before the company loses the plan. 0 revokes at once. Only applies when Schematic bills the company. Applies to the company's contract and never creates a plan version. Omitted keeps the contract's setting.
+
+ payment_gating : typing.Optional[PaymentGating]
+ What happens to the company's access when an invoice passes its due date: keep_serving keeps the plan and marks the subscription past due; revoke_after takes the plan away after gating_days. Only applies when Schematic bills the company, to every invoice on its contract, and never creates a plan version. Omitted keeps the contract's setting, which is keep_serving unless changed.
+
phone : typing.Optional[str]
prorate_first_period : typing.Optional[bool]
@@ -1451,6 +1470,8 @@ def preview_publish_plan_version(
customer_email=customer_email,
days_until_due=days_until_due,
end_date=end_date,
+ gating_days=gating_days,
+ payment_gating=payment_gating,
phone=phone,
prorate_first_period=prorate_first_period,
proration_behavior=proration_behavior,
@@ -2785,6 +2806,8 @@ async def publish_plan_version(
customer_email: typing.Optional[str] = OMIT,
days_until_due: typing.Optional[int] = OMIT,
end_date: typing.Optional[dt.datetime] = OMIT,
+ gating_days: typing.Optional[int] = OMIT,
+ payment_gating: typing.Optional[PaymentGating] = OMIT,
phone: typing.Optional[str] = OMIT,
prorate_first_period: typing.Optional[bool] = OMIT,
proration_behavior: typing.Optional[MigrationProrationBehavior] = OMIT,
@@ -2831,6 +2854,12 @@ async def publish_plan_version(
end_date : typing.Optional[dt.datetime]
When a custom plan that doesn't renew ends: the company moves to the default plan then, and no renewal invoice is raised. Required when the version's renewal_policy is expire_to_default, and refused otherwise. Moved back to the last renewal on or before it, which must leave at least one whole billing period. Only honored on a first publish that starts a subscription.
+ gating_days : typing.Optional[int]
+ With payment_gating revoke_after, how many days past due an invoice may go before the company loses the plan. 0 revokes at once. Only applies when Schematic bills the company. Applies to the company's contract and never creates a plan version. Omitted keeps the contract's setting.
+
+ payment_gating : typing.Optional[PaymentGating]
+ What happens to the company's access when an invoice passes its due date: keep_serving keeps the plan and marks the subscription past due; revoke_after takes the plan away after gating_days. Only applies when Schematic bills the company, to every invoice on its contract, and never creates a plan version. Omitted keeps the contract's setting, which is keep_serving unless changed.
+
phone : typing.Optional[str]
prorate_first_period : typing.Optional[bool]
@@ -2893,6 +2922,8 @@ async def main() -> None:
customer_email=customer_email,
days_until_due=days_until_due,
end_date=end_date,
+ gating_days=gating_days,
+ payment_gating=payment_gating,
phone=phone,
prorate_first_period=prorate_first_period,
proration_behavior=proration_behavior,
@@ -2920,6 +2951,8 @@ async def preview_publish_plan_version(
customer_email: typing.Optional[str] = OMIT,
days_until_due: typing.Optional[int] = OMIT,
end_date: typing.Optional[dt.datetime] = OMIT,
+ gating_days: typing.Optional[int] = OMIT,
+ payment_gating: typing.Optional[PaymentGating] = OMIT,
phone: typing.Optional[str] = OMIT,
prorate_first_period: typing.Optional[bool] = OMIT,
proration_behavior: typing.Optional[MigrationProrationBehavior] = OMIT,
@@ -2966,6 +2999,12 @@ async def preview_publish_plan_version(
end_date : typing.Optional[dt.datetime]
When a custom plan that doesn't renew ends: the company moves to the default plan then, and no renewal invoice is raised. Required when the version's renewal_policy is expire_to_default, and refused otherwise. Moved back to the last renewal on or before it, which must leave at least one whole billing period. Only honored on a first publish that starts a subscription.
+ gating_days : typing.Optional[int]
+ With payment_gating revoke_after, how many days past due an invoice may go before the company loses the plan. 0 revokes at once. Only applies when Schematic bills the company. Applies to the company's contract and never creates a plan version. Omitted keeps the contract's setting.
+
+ payment_gating : typing.Optional[PaymentGating]
+ What happens to the company's access when an invoice passes its due date: keep_serving keeps the plan and marks the subscription past due; revoke_after takes the plan away after gating_days. Only applies when Schematic bills the company, to every invoice on its contract, and never creates a plan version. Omitted keeps the contract's setting, which is keep_serving unless changed.
+
phone : typing.Optional[str]
prorate_first_period : typing.Optional[bool]
@@ -3028,6 +3067,8 @@ async def main() -> None:
customer_email=customer_email,
days_until_due=days_until_due,
end_date=end_date,
+ gating_days=gating_days,
+ payment_gating=payment_gating,
phone=phone,
prorate_first_period=prorate_first_period,
proration_behavior=proration_behavior,
diff --git a/src/schematic/plans/raw_client.py b/src/schematic/plans/raw_client.py
index ee4eb19e..5dcba065 100644
--- a/src/schematic/plans/raw_client.py
+++ b/src/schematic/plans/raw_client.py
@@ -29,6 +29,7 @@
from ..types.customer_billing_address import CustomerBillingAddress
from ..types.mark_custom_plan_billing_paid_request_body import MarkCustomPlanBillingPaidRequestBody
from ..types.migration_proration_behavior import MigrationProrationBehavior
+from ..types.payment_gating import PaymentGating
from ..types.plan_billing_source import PlanBillingSource
from ..types.plan_currency_price_request_body import PlanCurrencyPriceRequestBody
from ..types.plan_icon import PlanIcon
@@ -2434,6 +2435,8 @@ def publish_plan_version(
customer_email: typing.Optional[str] = OMIT,
days_until_due: typing.Optional[int] = OMIT,
end_date: typing.Optional[dt.datetime] = OMIT,
+ gating_days: typing.Optional[int] = OMIT,
+ payment_gating: typing.Optional[PaymentGating] = OMIT,
phone: typing.Optional[str] = OMIT,
prorate_first_period: typing.Optional[bool] = OMIT,
proration_behavior: typing.Optional[MigrationProrationBehavior] = OMIT,
@@ -2480,6 +2483,12 @@ def publish_plan_version(
end_date : typing.Optional[dt.datetime]
When a custom plan that doesn't renew ends: the company moves to the default plan then, and no renewal invoice is raised. Required when the version's renewal_policy is expire_to_default, and refused otherwise. Moved back to the last renewal on or before it, which must leave at least one whole billing period. Only honored on a first publish that starts a subscription.
+ gating_days : typing.Optional[int]
+ With payment_gating revoke_after, how many days past due an invoice may go before the company loses the plan. 0 revokes at once. Only applies when Schematic bills the company. Applies to the company's contract and never creates a plan version. Omitted keeps the contract's setting.
+
+ payment_gating : typing.Optional[PaymentGating]
+ What happens to the company's access when an invoice passes its due date: keep_serving keeps the plan and marks the subscription past due; revoke_after takes the plan away after gating_days. Only applies when Schematic bills the company, to every invoice on its contract, and never creates a plan version. Omitted keeps the contract's setting, which is keep_serving unless changed.
+
phone : typing.Optional[str]
prorate_first_period : typing.Optional[bool]
@@ -2526,7 +2535,9 @@ def publish_plan_version(
"days_until_due": days_until_due,
"end_date": end_date,
"excluded_company_ids": excluded_company_ids,
+ "gating_days": gating_days,
"migration_strategy": migration_strategy,
+ "payment_gating": payment_gating,
"phone": phone,
"prorate_first_period": prorate_first_period,
"proration_behavior": proration_behavior,
@@ -2637,6 +2648,8 @@ def preview_publish_plan_version(
customer_email: typing.Optional[str] = OMIT,
days_until_due: typing.Optional[int] = OMIT,
end_date: typing.Optional[dt.datetime] = OMIT,
+ gating_days: typing.Optional[int] = OMIT,
+ payment_gating: typing.Optional[PaymentGating] = OMIT,
phone: typing.Optional[str] = OMIT,
prorate_first_period: typing.Optional[bool] = OMIT,
proration_behavior: typing.Optional[MigrationProrationBehavior] = OMIT,
@@ -2683,6 +2696,12 @@ def preview_publish_plan_version(
end_date : typing.Optional[dt.datetime]
When a custom plan that doesn't renew ends: the company moves to the default plan then, and no renewal invoice is raised. Required when the version's renewal_policy is expire_to_default, and refused otherwise. Moved back to the last renewal on or before it, which must leave at least one whole billing period. Only honored on a first publish that starts a subscription.
+ gating_days : typing.Optional[int]
+ With payment_gating revoke_after, how many days past due an invoice may go before the company loses the plan. 0 revokes at once. Only applies when Schematic bills the company. Applies to the company's contract and never creates a plan version. Omitted keeps the contract's setting.
+
+ payment_gating : typing.Optional[PaymentGating]
+ What happens to the company's access when an invoice passes its due date: keep_serving keeps the plan and marks the subscription past due; revoke_after takes the plan away after gating_days. Only applies when Schematic bills the company, to every invoice on its contract, and never creates a plan version. Omitted keeps the contract's setting, which is keep_serving unless changed.
+
phone : typing.Optional[str]
prorate_first_period : typing.Optional[bool]
@@ -2729,7 +2748,9 @@ def preview_publish_plan_version(
"days_until_due": days_until_due,
"end_date": end_date,
"excluded_company_ids": excluded_company_ids,
+ "gating_days": gating_days,
"migration_strategy": migration_strategy,
+ "payment_gating": payment_gating,
"phone": phone,
"prorate_first_period": prorate_first_period,
"proration_behavior": proration_behavior,
@@ -5198,6 +5219,8 @@ async def publish_plan_version(
customer_email: typing.Optional[str] = OMIT,
days_until_due: typing.Optional[int] = OMIT,
end_date: typing.Optional[dt.datetime] = OMIT,
+ gating_days: typing.Optional[int] = OMIT,
+ payment_gating: typing.Optional[PaymentGating] = OMIT,
phone: typing.Optional[str] = OMIT,
prorate_first_period: typing.Optional[bool] = OMIT,
proration_behavior: typing.Optional[MigrationProrationBehavior] = OMIT,
@@ -5244,6 +5267,12 @@ async def publish_plan_version(
end_date : typing.Optional[dt.datetime]
When a custom plan that doesn't renew ends: the company moves to the default plan then, and no renewal invoice is raised. Required when the version's renewal_policy is expire_to_default, and refused otherwise. Moved back to the last renewal on or before it, which must leave at least one whole billing period. Only honored on a first publish that starts a subscription.
+ gating_days : typing.Optional[int]
+ With payment_gating revoke_after, how many days past due an invoice may go before the company loses the plan. 0 revokes at once. Only applies when Schematic bills the company. Applies to the company's contract and never creates a plan version. Omitted keeps the contract's setting.
+
+ payment_gating : typing.Optional[PaymentGating]
+ What happens to the company's access when an invoice passes its due date: keep_serving keeps the plan and marks the subscription past due; revoke_after takes the plan away after gating_days. Only applies when Schematic bills the company, to every invoice on its contract, and never creates a plan version. Omitted keeps the contract's setting, which is keep_serving unless changed.
+
phone : typing.Optional[str]
prorate_first_period : typing.Optional[bool]
@@ -5290,7 +5319,9 @@ async def publish_plan_version(
"days_until_due": days_until_due,
"end_date": end_date,
"excluded_company_ids": excluded_company_ids,
+ "gating_days": gating_days,
"migration_strategy": migration_strategy,
+ "payment_gating": payment_gating,
"phone": phone,
"prorate_first_period": prorate_first_period,
"proration_behavior": proration_behavior,
@@ -5401,6 +5432,8 @@ async def preview_publish_plan_version(
customer_email: typing.Optional[str] = OMIT,
days_until_due: typing.Optional[int] = OMIT,
end_date: typing.Optional[dt.datetime] = OMIT,
+ gating_days: typing.Optional[int] = OMIT,
+ payment_gating: typing.Optional[PaymentGating] = OMIT,
phone: typing.Optional[str] = OMIT,
prorate_first_period: typing.Optional[bool] = OMIT,
proration_behavior: typing.Optional[MigrationProrationBehavior] = OMIT,
@@ -5447,6 +5480,12 @@ async def preview_publish_plan_version(
end_date : typing.Optional[dt.datetime]
When a custom plan that doesn't renew ends: the company moves to the default plan then, and no renewal invoice is raised. Required when the version's renewal_policy is expire_to_default, and refused otherwise. Moved back to the last renewal on or before it, which must leave at least one whole billing period. Only honored on a first publish that starts a subscription.
+ gating_days : typing.Optional[int]
+ With payment_gating revoke_after, how many days past due an invoice may go before the company loses the plan. 0 revokes at once. Only applies when Schematic bills the company. Applies to the company's contract and never creates a plan version. Omitted keeps the contract's setting.
+
+ payment_gating : typing.Optional[PaymentGating]
+ What happens to the company's access when an invoice passes its due date: keep_serving keeps the plan and marks the subscription past due; revoke_after takes the plan away after gating_days. Only applies when Schematic bills the company, to every invoice on its contract, and never creates a plan version. Omitted keeps the contract's setting, which is keep_serving unless changed.
+
phone : typing.Optional[str]
prorate_first_period : typing.Optional[bool]
@@ -5493,7 +5532,9 @@ async def preview_publish_plan_version(
"days_until_due": days_until_due,
"end_date": end_date,
"excluded_company_ids": excluded_company_ids,
+ "gating_days": gating_days,
"migration_strategy": migration_strategy,
+ "payment_gating": payment_gating,
"phone": phone,
"prorate_first_period": prorate_first_period,
"proration_behavior": proration_behavior,
diff --git a/src/schematic/types/__init__.py b/src/schematic/types/__init__.py
index 8b393e98..96b13398 100644
--- a/src/schematic/types/__init__.py
+++ b/src/schematic/types/__init__.py
@@ -17,6 +17,7 @@
from .api_key_integration_response_data import ApiKeyIntegrationResponseData
from .api_key_response_data import ApiKeyResponseData
from .api_key_scope import ApiKeyScope
+ from .audit_log_company_response_data import AuditLogCompanyResponseData
from .audit_log_export_metadata import AuditLogExportMetadata
from .audit_log_list_response_data import AuditLogListResponseData
from .audit_log_response_data import AuditLogResponseData
@@ -51,6 +52,7 @@
from .billing_invoice_settlement_response_data import BillingInvoiceSettlementResponseData
from .billing_invoice_tax_id_response_data import BillingInvoiceTaxIdResponseData
from .billing_invoice_terms_response_data import BillingInvoiceTermsResponseData
+ from .billing_invoice_webhook import BillingInvoiceWebhook
from .billing_linked_resource_response_data import BillingLinkedResourceResponseData
from .billing_meter_response_data import BillingMeterResponseData
from .billing_native_subscription_change_response_data import BillingNativeSubscriptionChangeResponseData
@@ -83,6 +85,8 @@
from .billing_strategy import BillingStrategy
from .billing_subscription_discount import BillingSubscriptionDiscount
from .billing_subscription_discount_view import BillingSubscriptionDiscountView
+ from .billing_subscription_period_line_webhook import BillingSubscriptionPeriodLineWebhook
+ from .billing_subscription_period_webhook import BillingSubscriptionPeriodWebhook
from .billing_subscription_response_data import BillingSubscriptionResponseData
from .billing_subscription_trial_end_setting import BillingSubscriptionTrialEndSetting
from .billing_subscription_view import BillingSubscriptionView
@@ -157,6 +161,7 @@
from .company_feature_usage_export_metadata_visible_columns_item import (
CompanyFeatureUsageExportMetadataVisibleColumnsItem,
)
+ from .company_inference_cost_response_data import CompanyInferenceCostResponseData
from .company_ledger_response_data import CompanyLedgerResponseData
from .company_matching_criteria import CompanyMatchingCriteria
from .company_membership_detail_response_data import CompanyMembershipDetailResponseData
@@ -333,6 +338,9 @@
from .flag_view import FlagView
from .generic_preview_object import GenericPreviewObject
from .get_onboarding_state_resp import GetOnboardingStateResp
+ from .inference_cost_amount_response_data import InferenceCostAmountResponseData
+ from .inference_cost_source import InferenceCostSource
+ from .inference_model_cost_response_data import InferenceModelCostResponseData
from .insights_summary_response_data import InsightsSummaryResponseData
from .install_integration_request_body import InstallIntegrationRequestBody
from .integration_capabilities import IntegrationCapabilities
@@ -595,6 +603,7 @@
"ApiKeyIntegrationResponseData": ".api_key_integration_response_data",
"ApiKeyResponseData": ".api_key_response_data",
"ApiKeyScope": ".api_key_scope",
+ "AuditLogCompanyResponseData": ".audit_log_company_response_data",
"AuditLogExportMetadata": ".audit_log_export_metadata",
"AuditLogListResponseData": ".audit_log_list_response_data",
"AuditLogResponseData": ".audit_log_response_data",
@@ -629,6 +638,7 @@
"BillingInvoiceSettlementResponseData": ".billing_invoice_settlement_response_data",
"BillingInvoiceTaxIdResponseData": ".billing_invoice_tax_id_response_data",
"BillingInvoiceTermsResponseData": ".billing_invoice_terms_response_data",
+ "BillingInvoiceWebhook": ".billing_invoice_webhook",
"BillingLinkedResourceResponseData": ".billing_linked_resource_response_data",
"BillingMeterResponseData": ".billing_meter_response_data",
"BillingNativeSubscriptionChangeResponseData": ".billing_native_subscription_change_response_data",
@@ -661,6 +671,8 @@
"BillingStrategy": ".billing_strategy",
"BillingSubscriptionDiscount": ".billing_subscription_discount",
"BillingSubscriptionDiscountView": ".billing_subscription_discount_view",
+ "BillingSubscriptionPeriodLineWebhook": ".billing_subscription_period_line_webhook",
+ "BillingSubscriptionPeriodWebhook": ".billing_subscription_period_webhook",
"BillingSubscriptionResponseData": ".billing_subscription_response_data",
"BillingSubscriptionTrialEndSetting": ".billing_subscription_trial_end_setting",
"BillingSubscriptionView": ".billing_subscription_view",
@@ -731,6 +743,7 @@
"CompanyFeatureUsageExportMetadata": ".company_feature_usage_export_metadata",
"CompanyFeatureUsageExportMetadataSortOrderDirection": ".company_feature_usage_export_metadata_sort_order_direction",
"CompanyFeatureUsageExportMetadataVisibleColumnsItem": ".company_feature_usage_export_metadata_visible_columns_item",
+ "CompanyInferenceCostResponseData": ".company_inference_cost_response_data",
"CompanyLedgerResponseData": ".company_ledger_response_data",
"CompanyMatchingCriteria": ".company_matching_criteria",
"CompanyMembershipDetailResponseData": ".company_membership_detail_response_data",
@@ -905,6 +918,9 @@
"FlagView": ".flag_view",
"GenericPreviewObject": ".generic_preview_object",
"GetOnboardingStateResp": ".get_onboarding_state_resp",
+ "InferenceCostAmountResponseData": ".inference_cost_amount_response_data",
+ "InferenceCostSource": ".inference_cost_source",
+ "InferenceModelCostResponseData": ".inference_model_cost_response_data",
"InsightsSummaryResponseData": ".insights_summary_response_data",
"InstallIntegrationRequestBody": ".install_integration_request_body",
"IntegrationCapabilities": ".integration_capabilities",
@@ -1189,6 +1205,7 @@ def __dir__():
"ApiKeyIntegrationResponseData",
"ApiKeyResponseData",
"ApiKeyScope",
+ "AuditLogCompanyResponseData",
"AuditLogExportMetadata",
"AuditLogListResponseData",
"AuditLogResponseData",
@@ -1223,6 +1240,7 @@ def __dir__():
"BillingInvoiceSettlementResponseData",
"BillingInvoiceTaxIdResponseData",
"BillingInvoiceTermsResponseData",
+ "BillingInvoiceWebhook",
"BillingLinkedResourceResponseData",
"BillingMeterResponseData",
"BillingNativeSubscriptionChangeResponseData",
@@ -1255,6 +1273,8 @@ def __dir__():
"BillingStrategy",
"BillingSubscriptionDiscount",
"BillingSubscriptionDiscountView",
+ "BillingSubscriptionPeriodLineWebhook",
+ "BillingSubscriptionPeriodWebhook",
"BillingSubscriptionResponseData",
"BillingSubscriptionTrialEndSetting",
"BillingSubscriptionView",
@@ -1325,6 +1345,7 @@ def __dir__():
"CompanyFeatureUsageExportMetadata",
"CompanyFeatureUsageExportMetadataSortOrderDirection",
"CompanyFeatureUsageExportMetadataVisibleColumnsItem",
+ "CompanyInferenceCostResponseData",
"CompanyLedgerResponseData",
"CompanyMatchingCriteria",
"CompanyMembershipDetailResponseData",
@@ -1499,6 +1520,9 @@ def __dir__():
"FlagView",
"GenericPreviewObject",
"GetOnboardingStateResp",
+ "InferenceCostAmountResponseData",
+ "InferenceCostSource",
+ "InferenceModelCostResponseData",
"InsightsSummaryResponseData",
"InstallIntegrationRequestBody",
"IntegrationCapabilities",
diff --git a/src/schematic/types/audit_log_company_response_data.py b/src/schematic/types/audit_log_company_response_data.py
new file mode 100644
index 00000000..aff50ab2
--- /dev/null
+++ b/src/schematic/types/audit_log_company_response_data.py
@@ -0,0 +1,20 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+
+
+class AuditLogCompanyResponseData(UniversalBaseModel):
+ id: str
+ name: str
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/schematic/types/audit_log_list_response_data.py b/src/schematic/types/audit_log_list_response_data.py
index 8ed5bf09..026d7433 100644
--- a/src/schematic/types/audit_log_list_response_data.py
+++ b/src/schematic/types/audit_log_list_response_data.py
@@ -7,6 +7,7 @@
from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
from .actor_type import ActorType
from .api_key_response_data import ApiKeyResponseData
+from .audit_log_company_response_data import AuditLogCompanyResponseData
from .environment_response_data import EnvironmentResponseData
@@ -14,6 +15,8 @@ class AuditLogListResponseData(UniversalBaseModel):
actor_type: ActorType
api_key: typing.Optional[ApiKeyResponseData] = None
api_key_id: typing.Optional[str] = None
+ company: typing.Optional[AuditLogCompanyResponseData] = None
+ company_id: typing.Optional[str] = None
ended_at: typing.Optional[dt.datetime] = None
environment: typing.Optional[EnvironmentResponseData] = None
environment_id: typing.Optional[str] = None
diff --git a/src/schematic/types/audit_log_response_data.py b/src/schematic/types/audit_log_response_data.py
index 81e7bd2a..4377d5e6 100644
--- a/src/schematic/types/audit_log_response_data.py
+++ b/src/schematic/types/audit_log_response_data.py
@@ -7,6 +7,7 @@
from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
from .actor_type import ActorType
from .api_key_response_data import ApiKeyResponseData
+from .audit_log_company_response_data import AuditLogCompanyResponseData
from .environment_response_data import EnvironmentResponseData
@@ -15,6 +16,8 @@ class AuditLogResponseData(UniversalBaseModel):
actor_type: ActorType
api_key: typing.Optional[ApiKeyResponseData] = None
api_key_id: typing.Optional[str] = None
+ company: typing.Optional[AuditLogCompanyResponseData] = None
+ company_id: typing.Optional[str] = None
ended_at: typing.Optional[dt.datetime] = None
environment: typing.Optional[EnvironmentResponseData] = None
environment_id: typing.Optional[str] = None
diff --git a/src/schematic/types/billing_invoice_detail_response_data.py b/src/schematic/types/billing_invoice_detail_response_data.py
index f7ba4380..c5dd766f 100644
--- a/src/schematic/types/billing_invoice_detail_response_data.py
+++ b/src/schematic/types/billing_invoice_detail_response_data.py
@@ -17,6 +17,11 @@
class BillingInvoiceDetailResponseData(UniversalBaseModel):
+ amount_due: int = pydantic.Field()
+ """
+ What the company is asked to pay: the total less any balance applied to it, never below zero. Zero on a draft.
+ """
+
amount_paid: int
amount_remaining: int
collection_state: typing.Optional[InvoiceCollectionState] = pydantic.Field(default=None)
@@ -44,6 +49,11 @@ class BillingInvoiceDetailResponseData(UniversalBaseModel):
"""
due_at: typing.Optional[dt.datetime] = None
+ ending_balance: int = pydantic.Field()
+ """
+ The company's balance after this invoice, in minor units. Below zero is credit the next invoice takes off what is due.
+ """
+
external_id: typing.Optional[str] = pydantic.Field(default=None)
"""
The billing provider's invoice ID. Null on an invoice Schematic issued.
@@ -70,6 +80,11 @@ class BillingInvoiceDetailResponseData(UniversalBaseModel):
provider_type: BillingProviderType
settlements: typing.List[BillingInvoiceSettlementResponseData]
+ starting_balance: int = pydantic.Field()
+ """
+ The company's balance before this invoice, in minor units. Below zero is credit applied to this invoice.
+ """
+
status: InvoiceStatus
subscription_external_id: typing.Optional[str] = pydantic.Field(default=None)
"""
diff --git a/src/schematic/types/billing_invoice_line_response_data.py b/src/schematic/types/billing_invoice_line_response_data.py
index ebf06dc7..130d61a9 100644
--- a/src/schematic/types/billing_invoice_line_response_data.py
+++ b/src/schematic/types/billing_invoice_line_response_data.py
@@ -21,7 +21,7 @@ class BillingInvoiceLineResponseData(UniversalBaseModel):
description: typing.Optional[str] = pydantic.Field(default=None)
"""
- What the line bills for: the product, plan, add-on or credit. Null when the line has no subscription line behind it.
+ What the line bills for: the product, plan, add-on or credit, and for part of a period, which part. Null when the line has no subscription line behind it.
"""
external_id: typing.Optional[str] = pydantic.Field(default=None)
@@ -37,6 +37,11 @@ class BillingInvoiceLineResponseData(UniversalBaseModel):
kind: InvoiceLineKind
period_end: typing.Optional[dt.datetime] = None
period_start: typing.Optional[dt.datetime] = None
+ proration_fraction: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ The share of a full billing period the line bills, as a decimal from 0 to 1. Null when the line bills a whole period.
+ """
+
quantity: typing.Optional[int] = None
subscription_line_id: typing.Optional[str] = None
taxable: bool
diff --git a/src/schematic/types/billing_invoice_response_data.py b/src/schematic/types/billing_invoice_response_data.py
index 464c4d72..098b26d3 100644
--- a/src/schematic/types/billing_invoice_response_data.py
+++ b/src/schematic/types/billing_invoice_response_data.py
@@ -14,6 +14,11 @@
class BillingInvoiceResponseData(UniversalBaseModel):
+ amount_due: int = pydantic.Field()
+ """
+ What the company is asked to pay: the total less any balance applied to it, never below zero. Zero on a draft.
+ """
+
amount_paid: int
amount_remaining: int
collection_state: typing.Optional[InvoiceCollectionState] = pydantic.Field(default=None)
@@ -36,6 +41,11 @@ class BillingInvoiceResponseData(UniversalBaseModel):
"""
due_at: typing.Optional[dt.datetime] = None
+ ending_balance: int = pydantic.Field()
+ """
+ The company's balance after this invoice, in minor units. Below zero is credit the next invoice takes off what is due.
+ """
+
external_id: typing.Optional[str] = pydantic.Field(default=None)
"""
The billing provider's invoice ID. Null on an invoice Schematic issued.
@@ -55,6 +65,11 @@ class BillingInvoiceResponseData(UniversalBaseModel):
"""
provider_type: BillingProviderType
+ starting_balance: int = pydantic.Field()
+ """
+ The company's balance before this invoice, in minor units. Below zero is credit applied to this invoice.
+ """
+
status: InvoiceStatus
subscription_external_id: typing.Optional[str] = pydantic.Field(default=None)
"""
diff --git a/src/schematic/types/billing_invoice_webhook.py b/src/schematic/types/billing_invoice_webhook.py
new file mode 100644
index 00000000..639242c3
--- /dev/null
+++ b/src/schematic/types/billing_invoice_webhook.py
@@ -0,0 +1,40 @@
+# 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
+from .currency import Currency
+from .invoice_status import InvoiceStatus
+
+
+class BillingInvoiceWebhook(UniversalBaseModel):
+ amount_due: int
+ amount_paid: int
+ amount_remaining: int
+ company_id: str
+ contract_id: typing.Optional[str] = None
+ currency: Currency
+ due_date: typing.Optional[dt.datetime] = None
+ id: str
+ number: typing.Optional[str] = None
+ period_end: typing.Optional[dt.datetime] = None
+ period_start: typing.Optional[dt.datetime] = None
+ status: typing.Optional[InvoiceStatus] = None
+ subtotal: int
+ tax: int
+ total: int
+ url: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ The invoice's hosted page. Null until the invoice has one.
+ """
+
+ 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/billing_native_subscription_response_data.py b/src/schematic/types/billing_native_subscription_response_data.py
index 50a664da..382aeb66 100644
--- a/src/schematic/types/billing_native_subscription_response_data.py
+++ b/src/schematic/types/billing_native_subscription_response_data.py
@@ -14,6 +14,11 @@
class BillingNativeSubscriptionResponseData(UniversalBaseModel):
+ balance: int = pydantic.Field()
+ """
+ The company's balance on its contract, in minor units of the currency. Below zero is credit the next invoice takes off what is due. Zero when the company has no billing profile.
+ """
+
cancel_at: typing.Optional[dt.datetime] = None
company_id: str
currency: Currency
diff --git a/src/schematic/types/billing_statement_line_response_data.py b/src/schematic/types/billing_statement_line_response_data.py
index b3e371b5..66350413 100644
--- a/src/schematic/types/billing_statement_line_response_data.py
+++ b/src/schematic/types/billing_statement_line_response_data.py
@@ -14,9 +14,19 @@ class BillingStatementLineResponseData(UniversalBaseModel):
In minor units of the statement's currency.
"""
+ description: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ What the line bills for, and for part of a period, which part. Null when the line has no subscription line behind it.
+ """
+
kind: InvoiceLineKind
period_end: typing.Optional[dt.datetime] = None
period_start: typing.Optional[dt.datetime] = None
+ proration_fraction: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ The share of a full billing period the line bills, as a decimal from 0 to 1. Null when the line bills a whole period.
+ """
+
quantity: typing.Optional[int] = None
subscription_line_id: typing.Optional[str] = None
unit_amount: typing.Optional[int] = None
diff --git a/src/schematic/types/billing_subscription_period_line_webhook.py b/src/schematic/types/billing_subscription_period_line_webhook.py
new file mode 100644
index 00000000..c24cd8b8
--- /dev/null
+++ b/src/schematic/types/billing_subscription_period_line_webhook.py
@@ -0,0 +1,32 @@
+# 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
+from .currency import Currency
+
+
+class BillingSubscriptionPeriodLineWebhook(UniversalBaseModel):
+ amount: int
+ currency: Currency
+ id: str
+ period_end: dt.datetime
+ period_start: dt.datetime
+ quantity: typing.Optional[int] = None
+ source_id: str = pydantic.Field()
+ """
+ The plan or add-on the line bills for.
+ """
+
+ unit_amount: 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/billing_subscription_period_webhook.py b/src/schematic/types/billing_subscription_period_webhook.py
new file mode 100644
index 00000000..1eebba5b
--- /dev/null
+++ b/src/schematic/types/billing_subscription_period_webhook.py
@@ -0,0 +1,30 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import datetime as dt
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .billing_subscription_period_line_webhook import BillingSubscriptionPeriodLineWebhook
+
+
+class BillingSubscriptionPeriodWebhook(UniversalBaseModel):
+ company_id: str
+ contract_id: str
+ lines: typing.List[BillingSubscriptionPeriodLineWebhook] = pydantic.Field()
+ """
+ The lines charged in advance when the period started.
+ """
+
+ period_end: dt.datetime
+ period_start: dt.datetime
+ subscription_id: str
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/schematic/types/billing_subscription_response_data.py b/src/schematic/types/billing_subscription_response_data.py
index 39026fa9..9550c05f 100644
--- a/src/schematic/types/billing_subscription_response_data.py
+++ b/src/schematic/types/billing_subscription_response_data.py
@@ -11,6 +11,7 @@
class BillingSubscriptionResponseData(UniversalBaseModel):
+ access_revoked_at: typing.Optional[dt.datetime] = None
application_id: typing.Optional[str] = None
cancel_at: typing.Optional[int] = None
cancel_at_period_end: bool
diff --git a/src/schematic/types/billing_subscription_view.py b/src/schematic/types/billing_subscription_view.py
index c65ffd26..4efc77d5 100644
--- a/src/schematic/types/billing_subscription_view.py
+++ b/src/schematic/types/billing_subscription_view.py
@@ -15,6 +15,7 @@
class BillingSubscriptionView(UniversalBaseModel):
+ access_revoked_at: typing.Optional[dt.datetime] = None
application_id: typing.Optional[str] = None
cancel_at: typing.Optional[int] = None
cancel_at_period_end: bool
diff --git a/src/schematic/types/checkout_subscription.py b/src/schematic/types/checkout_subscription.py
index 6e4c2b09..8cf3dcac 100644
--- a/src/schematic/types/checkout_subscription.py
+++ b/src/schematic/types/checkout_subscription.py
@@ -11,6 +11,7 @@
class CheckoutSubscription(UniversalBaseModel):
+ access_revoked_at: typing.Optional[dt.datetime] = None
application_id: typing.Optional[str] = None
cancel_at: typing.Optional[int] = None
cancel_at_period_end: bool
diff --git a/src/schematic/types/company_feature_usage_export_metadata.py b/src/schematic/types/company_feature_usage_export_metadata.py
index 62dd0cc4..e18457cb 100644
--- a/src/schematic/types/company_feature_usage_export_metadata.py
+++ b/src/schematic/types/company_feature_usage_export_metadata.py
@@ -13,6 +13,11 @@
class CompanyFeatureUsageExportMetadata(UniversalBaseModel):
+ cancel_at_period_end: typing.Optional[bool] = pydantic.Field(default=None)
+ """
+ If true, restrict the export to companies with an active subscription that is set to cancel at the end of the current period; if false, restrict it to companies without one
+ """
+
company_ids: typing.Optional[typing.List[str]] = pydantic.Field(default=None)
"""
Restrict the export to these Schematic company IDs (starting with 'comp_')
diff --git a/src/schematic/types/company_inference_cost_response_data.py b/src/schematic/types/company_inference_cost_response_data.py
new file mode 100644
index 00000000..c3edafbd
--- /dev/null
+++ b/src/schematic/types/company_inference_cost_response_data.py
@@ -0,0 +1,55 @@
+# 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
+from .inference_cost_amount_response_data import InferenceCostAmountResponseData
+from .inference_model_cost_response_data import InferenceModelCostResponseData
+
+
+class CompanyInferenceCostResponseData(UniversalBaseModel):
+ by_model: typing.List[InferenceModelCostResponseData] = pydantic.Field()
+ """
+ Cost and event counts per provider and response model, busiest model first
+ """
+
+ company_id: str = pydantic.Field()
+ """
+ The company the cost belongs to
+ """
+
+ costs: typing.List[InferenceCostAmountResponseData] = pydantic.Field()
+ """
+ Summed cost of priced inference events, one entry per currency. Amounts in different currencies are not converted or combined. Empty when no event in the window was priced
+ """
+
+ end_time: dt.datetime = pydantic.Field()
+ """
+ End of the window (exclusive)
+ """
+
+ event_count: int = pydantic.Field()
+ """
+ Number of inference events the company sent in the window, priced or not
+ """
+
+ start_time: dt.datetime = pydantic.Field()
+ """
+ Start of the window (inclusive)
+ """
+
+ unpriced_event_count: int = pydantic.Field()
+ """
+ Number of inference events in the window with no known cost: the event carried none and none could be derived from a price for its model. These add nothing to costs, so a non-zero count means the real cost is higher than reported
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/schematic/types/data_export_metadata.py b/src/schematic/types/data_export_metadata.py
index 76678180..ca896508 100644
--- a/src/schematic/types/data_export_metadata.py
+++ b/src/schematic/types/data_export_metadata.py
@@ -37,6 +37,7 @@ class Config:
class DataExportMetadata_CompanyFeatureUsage(UniversalBaseModel):
export_type: typing.Literal["company-feature-usage"] = "company-feature-usage"
+ cancel_at_period_end: typing.Optional[bool] = None
company_ids: typing.Optional[typing.List[str]] = None
credit_type_ids: typing.Optional[typing.List[str]] = None
entity_key_definition_ids: typing.Optional[typing.List[str]] = None
diff --git a/src/schematic/types/event_detail_response_data.py b/src/schematic/types/event_detail_response_data.py
index a55d5275..bbd138a3 100644
--- a/src/schematic/types/event_detail_response_data.py
+++ b/src/schematic/types/event_detail_response_data.py
@@ -8,6 +8,7 @@
from .api_key_response_data import ApiKeyResponseData
from .event_status import EventStatus
from .event_type import EventType
+from .inference_cost_source import InferenceCostSource
from .preview_object import PreviewObject
@@ -19,6 +20,21 @@ class EventDetailResponseData(UniversalBaseModel):
captured_at: dt.datetime
company: typing.Optional[PreviewObject] = None
company_id: typing.Optional[str] = None
+ cost: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ What the inference call cost, as a decimal amount in currency (dollars, not cents, for usd). Absent when the call has no price, for other event types, and when listing events.
+ """
+
+ cost_source: typing.Optional[InferenceCostSource] = pydantic.Field(default=None)
+ """
+ Where the inference call's cost came from: provided when the request reported it, list_price when Schematic priced it from the model's list price, unpriced when neither applied. Absent for other event types and when listing events.
+ """
+
+ currency: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ Lowercase ISO currency code for cost. Absent for other event types and when listing events.
+ """
+
enriched_at: typing.Optional[dt.datetime] = None
environment_id: typing.Optional[str] = None
error_message: typing.Optional[str] = None
diff --git a/src/schematic/types/inference_cost_amount_response_data.py b/src/schematic/types/inference_cost_amount_response_data.py
new file mode 100644
index 00000000..a2b9546f
--- /dev/null
+++ b/src/schematic/types/inference_cost_amount_response_data.py
@@ -0,0 +1,32 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+
+
+class InferenceCostAmountResponseData(UniversalBaseModel):
+ cost: str = pydantic.Field()
+ """
+ Summed cost as a decimal string in the currency's major unit (dollars, not cents), with up to 8 decimal places
+ """
+
+ currency: str = pydantic.Field()
+ """
+ Lowercase ISO 4217 currency code of the cost
+ """
+
+ event_count: int = pydantic.Field()
+ """
+ Number of priced events summed into this cost
+ """
+
+ 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/inference_cost_source.py b/src/schematic/types/inference_cost_source.py
new file mode 100644
index 00000000..4c65e728
--- /dev/null
+++ b/src/schematic/types/inference_cost_source.py
@@ -0,0 +1,5 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+InferenceCostSource = typing.Union[typing.Literal["list_price", "provided", "unpriced"], typing.Any]
diff --git a/src/schematic/types/inference_model_cost_response_data.py b/src/schematic/types/inference_model_cost_response_data.py
new file mode 100644
index 00000000..18f8760c
--- /dev/null
+++ b/src/schematic/types/inference_model_cost_response_data.py
@@ -0,0 +1,43 @@
+# 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 .inference_cost_amount_response_data import InferenceCostAmountResponseData
+
+
+class InferenceModelCostResponseData(UniversalBaseModel):
+ costs: typing.List[InferenceCostAmountResponseData] = pydantic.Field()
+ """
+ Summed cost of this model's priced events, one entry per currency
+ """
+
+ event_count: int = pydantic.Field()
+ """
+ Number of inference events for this model, priced or not
+ """
+
+ provider: str = pydantic.Field()
+ """
+ The model provider the events reported, such as openai or anthropic
+ """
+
+ response_model: str = pydantic.Field()
+ """
+ The model the provider reported answering the call
+ """
+
+ unpriced_event_count: int = pydantic.Field()
+ """
+ Number of this model's events with no known cost
+ """
+
+ 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_change_action.py b/src/schematic/types/plan_change_action.py
index 05947322..39007fa4 100644
--- a/src/schematic/types/plan_change_action.py
+++ b/src/schematic/types/plan_change_action.py
@@ -4,10 +4,13 @@
PlanChangeAction = typing.Union[
typing.Literal[
+ "access_reinstated",
+ "access_revoked",
"amendment",
"checkout",
"company_upsert",
"fallback_plan",
+ "invoice_past_due",
"manage_plan",
"migration",
"plan_billing_product_changed",
diff --git a/src/schematic/types/publish_plan_version_request_body.py b/src/schematic/types/publish_plan_version_request_body.py
index aa58cfab..62ed0cea 100644
--- a/src/schematic/types/publish_plan_version_request_body.py
+++ b/src/schematic/types/publish_plan_version_request_body.py
@@ -10,6 +10,7 @@
from .custom_plan_activation_strategy import CustomPlanActivationStrategy
from .customer_billing_address import CustomerBillingAddress
from .migration_proration_behavior import MigrationProrationBehavior
+from .payment_gating import PaymentGating
from .plan_version_migration_strategy import PlanVersionMigrationStrategy
from .tax_id_input import TaxIdInput
@@ -54,7 +55,17 @@ class PublishPlanVersionRequestBody(UniversalBaseModel):
"""
excluded_company_ids: typing.List[str]
+ gating_days: typing.Optional[int] = pydantic.Field(default=None)
+ """
+ With payment_gating revoke_after, how many days past due an invoice may go before the company loses the plan. 0 revokes at once. Only applies when Schematic bills the company. Applies to the company's contract and never creates a plan version. Omitted keeps the contract's setting.
+ """
+
migration_strategy: PlanVersionMigrationStrategy
+ payment_gating: typing.Optional[PaymentGating] = pydantic.Field(default=None)
+ """
+ What happens to the company's access when an invoice passes its due date: keep_serving keeps the plan and marks the subscription past due; revoke_after takes the plan away after gating_days. Only applies when Schematic bills the company, to every invoice on its contract, and never creates a plan version. Omitted keeps the contract's setting, which is keep_serving unless changed.
+ """
+
phone: typing.Optional[str] = None
prorate_first_period: typing.Optional[bool] = pydantic.Field(default=None)
"""
diff --git a/src/schematic/types/webhook_request_type.py b/src/schematic/types/webhook_request_type.py
index 79d16dec..5e6ea493 100644
--- a/src/schematic/types/webhook_request_type.py
+++ b/src/schematic/types/webhook_request_type.py
@@ -31,6 +31,10 @@
"flag.deleted",
"flag_rules.updated",
"flag.updated",
+ "invoice.finalized",
+ "invoice.paid",
+ "invoice.past_due",
+ "invoice.voided",
"plan.created",
"plan.deleted",
"plan.entitlement.created",
@@ -39,6 +43,7 @@
"plan.updated",
"plan_version.deleted",
"rule.deleted",
+ "subscription.period.started",
"test.send",
"user.created",
"user.deleted",
diff --git a/tests/utils/assets/models/__init__.py b/tests/utils/assets/models/__init__.py
index 2cf01263..50b11af4 100644
--- a/tests/utils/assets/models/__init__.py
+++ b/tests/utils/assets/models/__init__.py
@@ -1,7 +1,5 @@
# This file was auto-generated by Fern from our API Definition.
-# This file was auto-generated by Fern from our API Definition.
-
from .circle import CircleParams
from .object_with_defaults import ObjectWithDefaultsParams
from .object_with_optional_field import ObjectWithOptionalFieldParams
diff --git a/tests/utils/assets/models/circle.py b/tests/utils/assets/models/circle.py
index 951a8a8a..bf69aea9 100644
--- a/tests/utils/assets/models/circle.py
+++ b/tests/utils/assets/models/circle.py
@@ -1,7 +1,5 @@
# This file was auto-generated by Fern from our API Definition.
-# This file was auto-generated by Fern from our API Definition.
-
import typing_extensions
from schematic.core.serialization import FieldMetadata
diff --git a/tests/utils/assets/models/color.py b/tests/utils/assets/models/color.py
index 2aa2c4c5..61d663a7 100644
--- a/tests/utils/assets/models/color.py
+++ b/tests/utils/assets/models/color.py
@@ -1,7 +1,5 @@
# This file was auto-generated by Fern from our API Definition.
-# This file was auto-generated by Fern from our API Definition.
-
import typing
Color = typing.Union[typing.Literal["red", "blue"], typing.Any]
diff --git a/tests/utils/assets/models/object_with_defaults.py b/tests/utils/assets/models/object_with_defaults.py
index a977b1d2..304c9f61 100644
--- a/tests/utils/assets/models/object_with_defaults.py
+++ b/tests/utils/assets/models/object_with_defaults.py
@@ -1,7 +1,5 @@
# This file was auto-generated by Fern from our API Definition.
-# This file was auto-generated by Fern from our API Definition.
-
import typing_extensions
diff --git a/tests/utils/assets/models/object_with_optional_field.py b/tests/utils/assets/models/object_with_optional_field.py
index 126ba874..25d8763c 100644
--- a/tests/utils/assets/models/object_with_optional_field.py
+++ b/tests/utils/assets/models/object_with_optional_field.py
@@ -1,7 +1,5 @@
# This file was auto-generated by Fern from our API Definition.
-# This file was auto-generated by Fern from our API Definition.
-
import datetime as dt
import typing
import uuid
diff --git a/tests/utils/assets/models/shape.py b/tests/utils/assets/models/shape.py
index 8b7ecdc5..81e1132e 100644
--- a/tests/utils/assets/models/shape.py
+++ b/tests/utils/assets/models/shape.py
@@ -1,7 +1,5 @@
# This file was auto-generated by Fern from our API Definition.
-# This file was auto-generated by Fern from our API Definition.
-
from __future__ import annotations
import typing
diff --git a/tests/utils/assets/models/square.py b/tests/utils/assets/models/square.py
index 4ac1536b..5dc48b18 100644
--- a/tests/utils/assets/models/square.py
+++ b/tests/utils/assets/models/square.py
@@ -1,7 +1,5 @@
# This file was auto-generated by Fern from our API Definition.
-# This file was auto-generated by Fern from our API Definition.
-
import typing_extensions
from schematic.core.serialization import FieldMetadata
diff --git a/tests/utils/assets/models/undiscriminated_shape.py b/tests/utils/assets/models/undiscriminated_shape.py
index 99f12b30..e61e343a 100644
--- a/tests/utils/assets/models/undiscriminated_shape.py
+++ b/tests/utils/assets/models/undiscriminated_shape.py
@@ -1,7 +1,5 @@
# This file was auto-generated by Fern from our API Definition.
-# This file was auto-generated by Fern from our API Definition.
-
import typing
from .circle import CircleParams