From 625ff1ddbc2fd61517f13c8afb22222cacf1c95b Mon Sep 17 00:00:00 2001 From: "fern-api[bot]" <115122769+fern-api[bot]@users.noreply.github.com> Date: Mon, 2 Nov 2026 10:03:18 +0000 Subject: [PATCH 1/2] [fern-generated] Update SDK Generated by Fern CLI Version: unknown Generators: - fernapi/fern-python-sdk: 5.41.16 --- .fern/metadata.json | 8 +- poetry.lock | 308 +++++++++--------- pyproject.toml | 2 +- reference.md | 156 ++++++++- src/schematic/__init__.py | 30 ++ src/schematic/accounts/client.py | 20 ++ src/schematic/accounts/raw_client.py | 16 + .../accounts/types/count_audit_logs_params.py | 1 + .../accounts/types/list_audit_logs_params.py | 1 + src/schematic/billing/client.py | 33 ++ src/schematic/billing/raw_client.py | 33 ++ src/schematic/companies/__init__.py | 6 + src/schematic/companies/client.py | 148 ++++++++- src/schematic/companies/raw_client.py | 238 +++++++++++++- src/schematic/companies/types/__init__.py | 6 + .../companies/types/count_companies_params.py | 7 +- .../get_company_inference_cost_params.py | 32 ++ .../get_company_inference_cost_response.py | 25 ++ .../companies/types/list_companies_params.py | 7 +- src/schematic/core/client_wrapper.py | 4 +- src/schematic/core/file.py | 33 +- src/schematic/core/http_client.py | 26 ++ src/schematic/core/http_sse/_api.py | 25 ++ src/schematic/core/http_sse/_decoders.py | 25 ++ src/schematic/core/http_sse/_exceptions.py | 25 ++ src/schematic/core/http_sse/_models.py | 25 ++ src/schematic/core/jsonable_encoder.py | 25 ++ src/schematic/credits/client.py | 4 +- src/schematic/credits/raw_client.py | 4 +- src/schematic/features/client.py | 4 +- src/schematic/features/raw_client.py | 4 +- src/schematic/plans/client.py | 41 +++ src/schematic/plans/raw_client.py | 41 +++ src/schematic/types/__init__.py | 24 ++ .../types/audit_log_company_response_data.py | 20 ++ .../types/audit_log_list_response_data.py | 3 + .../types/audit_log_response_data.py | 3 + .../billing_invoice_detail_response_data.py | 15 + .../billing_invoice_line_response_data.py | 7 +- .../types/billing_invoice_response_data.py | 15 + .../types/billing_invoice_webhook.py | 40 +++ ...lling_native_subscription_response_data.py | 5 + .../billing_statement_line_response_data.py | 10 + ...illing_subscription_period_line_webhook.py | 32 ++ .../billing_subscription_period_webhook.py | 30 ++ .../billing_subscription_response_data.py | 1 + .../types/billing_subscription_view.py | 1 + src/schematic/types/checkout_subscription.py | 1 + .../company_feature_usage_export_metadata.py | 5 + .../company_inference_cost_response_data.py | 55 ++++ src/schematic/types/data_export_metadata.py | 1 + .../types/event_detail_response_data.py | 16 + .../inference_cost_amount_response_data.py | 32 ++ src/schematic/types/inference_cost_source.py | 5 + .../inference_model_cost_response_data.py | 43 +++ src/schematic/types/plan_change_action.py | 3 + .../publish_plan_version_request_body.py | 11 + src/schematic/types/webhook_request_type.py | 5 + tests/utils/assets/models/__init__.py | 2 - tests/utils/assets/models/circle.py | 2 - tests/utils/assets/models/color.py | 2 - .../assets/models/object_with_defaults.py | 2 - .../models/object_with_optional_field.py | 2 - tests/utils/assets/models/shape.py | 2 - tests/utils/assets/models/square.py | 2 - .../assets/models/undiscriminated_shape.py | 2 - 66 files changed, 1559 insertions(+), 203 deletions(-) create mode 100644 src/schematic/companies/types/get_company_inference_cost_params.py create mode 100644 src/schematic/companies/types/get_company_inference_cost_response.py create mode 100644 src/schematic/types/audit_log_company_response_data.py create mode 100644 src/schematic/types/billing_invoice_webhook.py create mode 100644 src/schematic/types/billing_subscription_period_line_webhook.py create mode 100644 src/schematic/types/billing_subscription_period_webhook.py create mode 100644 src/schematic/types/company_inference_cost_response_data.py create mode 100644 src/schematic/types/inference_cost_amount_response_data.py create mode 100644 src/schematic/types/inference_cost_source.py create mode 100644 src/schematic/types/inference_model_cost_response_data.py 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/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 From ffed672e7c06f1384845ed511481cd650fc2c8a1 Mon Sep 17 00:00:00 2001 From: "fern-api[bot]" <115122769+fern-api[bot]@users.noreply.github.com> Date: Mon, 2 Nov 2026 10:03:18 +0000 Subject: [PATCH 2/2] [fern-replay] advance lockfile --- .fern/replay.lock | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/.fern/replay.lock b/.fern/replay.lock index 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