From 205bb60b4f76e86843e9133e07c3f84eb279b67f Mon Sep 17 00:00:00 2001 From: "fern-api[bot]" <115122769+fern-api[bot]@users.noreply.github.com> Date: Fri, 30 Jan 2026 17:13:49 +0000 Subject: [PATCH 1/2] SDK regeneration --- .fern/metadata.json | 7 +- README.md | 1 + poetry.lock | 111 ++++--- pyproject.toml | 3 + reference.md | 264 +++++++-------- .../application_versions/raw_client.py | 4 +- .../applications/raw_client.py | 4 +- .../artifact_versions/raw_client.py | 4 +- src/truefoundry_sdk/artifacts/raw_client.py | 4 +- src/truefoundry_sdk/clusters/raw_client.py | 4 +- src/truefoundry_sdk/core/client_wrapper.py | 4 + src/truefoundry_sdk/core/http_client.py | 216 ++++++++----- src/truefoundry_sdk/core/http_response.py | 6 +- src/truefoundry_sdk/core/jsonable_encoder.py | 8 + .../core/pydantic_utilities.py | 304 +++++++++++++++++- .../data_directories/raw_client.py | 4 +- .../environments/raw_client.py | 4 +- .../internal/artifact_versions/raw_client.py | 4 +- ...r_registries_create_repository_response.py | 4 +- ...ker_registries_get_credentials_response.py | 2 +- .../workflows_execute_workflow_response.py | 2 +- src/truefoundry_sdk/jobs/raw_client.py | 4 +- src/truefoundry_sdk/ml_repos/raw_client.py | 4 +- .../model_versions/raw_client.py | 4 +- src/truefoundry_sdk/models/raw_client.py | 4 +- .../personal_access_tokens/raw_client.py | 4 +- .../prompt_versions/raw_client.py | 4 +- src/truefoundry_sdk/prompts/raw_client.py | 4 +- .../secret_groups/raw_client.py | 4 +- src/truefoundry_sdk/secrets/raw_client.py | 4 +- src/truefoundry_sdk/teams/raw_client.py | 4 +- src/truefoundry_sdk/types/account.py | 20 +- src/truefoundry_sdk/types/addon_component.py | 24 +- .../types/addon_component_status.py | 4 +- .../types/ai21provider_account.py | 4 +- src/truefoundry_sdk/types/alert.py | 28 +- .../types/anthropic_provider_account.py | 4 +- src/truefoundry_sdk/types/application.py | 50 ++- .../types/application_debug_info.py | 16 +- .../types/aws_bedrock_provider_account.py | 4 +- .../types/aws_provider_account.py | 4 +- .../types/aws_sagemaker_provider_account.py | 4 +- .../types/azure_foundry_provider_account.py | 4 +- .../types/azure_open_ai_provider_account.py | 4 +- .../types/azure_provider_account.py | 4 +- .../types/bitbucket_provider_account.py | 4 +- .../types/cerebras_provider_account.py | 4 +- .../types/cloudera_provider_account.py | 4 +- src/truefoundry_sdk/types/cluster.py | 22 +- src/truefoundry_sdk/types/cluster_gateway.py | 2 +- src/truefoundry_sdk/types/cluster_manifest.py | 4 +- .../types/cohere_provider_account.py | 4 +- .../types/custom_provider_account.py | 4 +- .../types/databricks_provider_account.py | 4 +- .../types/deepinfra_provider_account.py | 4 +- src/truefoundry_sdk/types/deployment.py | 32 +- src/truefoundry_sdk/types/deployment_build.py | 36 ++- .../types/deployment_status.py | 16 +- .../types/dockerhub_provider_account.py | 4 +- src/truefoundry_sdk/types/environment.py | 18 +- .../types/environment_color.py | 10 +- .../types/environment_manifest.py | 8 +- src/truefoundry_sdk/types/event.py | 8 +- .../types/event_involved_object.py | 8 +- .../types/flyte_launch_plan_id.py | 2 +- .../types/flyte_launch_plan_spec.py | 4 +- src/truefoundry_sdk/types/flyte_task_id.py | 4 +- .../types/flyte_workflow_id.py | 2 +- .../types/gateway_configuration.py | 16 +- .../types/gateway_request_metadata_filter.py | 4 +- src/truefoundry_sdk/types/gcp_api_key_auth.py | 2 +- .../types/gcp_provider_account.py | 4 +- .../get_authenticated_vcsurl_response.py | 4 +- .../types/github_provider_account.py | 4 +- .../types/gitlab_provider_account.py | 4 +- .../types/google_gemini_provider_account.py | 4 +- .../types/google_vertex_provider_account.py | 4 +- src/truefoundry_sdk/types/graph.py | 4 +- .../types/groq_provider_account.py | 4 +- .../types/guardrail_config_group.py | 4 +- .../types/hashicorp_provider_account.py | 4 +- src/truefoundry_sdk/types/helm.py | 2 +- src/truefoundry_sdk/types/http_error.py | 4 +- src/truefoundry_sdk/types/i_change.py | 2 +- .../types/is_cluster_connected_response.py | 4 +- .../types/jfrog_provider_account.py | 4 +- src/truefoundry_sdk/types/job_run.py | 24 +- src/truefoundry_sdk/types/json_schema.py | 4 +- src/truefoundry_sdk/types/jwt.py | 14 +- .../types/list_files_request.py | 4 +- src/truefoundry_sdk/types/log.py | 2 +- .../types/logs_filter_query.py | 4 +- .../types/mcp_server_provider_account.py | 4 +- .../types/mistral_ai_provider_account.py | 4 +- src/truefoundry_sdk/types/ml_repo_manifest.py | 4 +- .../types/multi_part_upload.py | 2 +- .../types/nomic_provider_account.py | 4 +- .../types/ollama_provider_account.py | 4 +- .../types/open_router_provider_account.py | 4 +- .../types/openai_provider_account.py | 4 +- .../types/pager_duty_provider_account.py | 4 +- .../types/palm_provider_account.py | 4 +- .../types/perplexity_ai_provider_account.py | 4 +- .../types/personal_access_token_manifest.py | 4 +- .../types/prometheus_alert_rule.py | 2 +- .../types/quay_provider_account.py | 4 +- src/truefoundry_sdk/types/recommendation.py | 34 +- src/truefoundry_sdk/types/role_manifest.py | 8 +- src/truefoundry_sdk/types/role_permissions.py | 4 +- .../types/samba_nova_provider_account.py | 4 +- src/truefoundry_sdk/types/secret.py | 22 +- src/truefoundry_sdk/types/secret_group.py | 28 +- src/truefoundry_sdk/types/secret_version.py | 12 +- .../self_hosted_model_provider_account.py | 4 +- src/truefoundry_sdk/types/session.py | 24 +- .../types/slack_provider_account.py | 4 +- .../snowflake_cortex_provider_account.py | 4 +- .../types/span_attribute_filter.py | 4 +- .../types/span_field_filter.py | 4 +- .../types/spark_job_trigger_input.py | 4 +- src/truefoundry_sdk/types/subject.py | 10 +- .../types/sync_token_in_secret_store_info.py | 2 +- .../sync_virtual_account_token_response.py | 2 +- src/truefoundry_sdk/types/team.py | 22 +- src/truefoundry_sdk/types/team_manifest.py | 4 +- .../types/terminate_job_response.py | 4 +- .../types/together_ai_provider_account.py | 4 +- src/truefoundry_sdk/types/token_pagination.py | 4 +- src/truefoundry_sdk/types/trace_span.py | 40 ++- .../types/trigger_job_run_response.py | 4 +- .../types/true_foundry_apply_response.py | 2 +- .../types/true_foundry_provider_account.py | 4 +- .../types/ttl_provider_account.py | 4 +- src/truefoundry_sdk/types/upgrade_data.py | 18 +- src/truefoundry_sdk/types/user.py | 14 +- src/truefoundry_sdk/types/user_metadata.py | 28 +- src/truefoundry_sdk/types/user_resource.py | 12 +- .../types/user_role_with_resource.py | 10 +- src/truefoundry_sdk/types/virtual_account.py | 38 ++- .../types/virtual_account_manifest.py | 4 +- .../types/virtual_model_provider_account.py | 4 +- .../types/webhook_provider_account.py | 4 +- src/truefoundry_sdk/types/workspace.py | 34 +- .../types/workspace_manifest.py | 4 +- src/truefoundry_sdk/users/raw_client.py | 4 +- .../virtual_accounts/raw_client.py | 4 +- src/truefoundry_sdk/workspaces/raw_client.py | 4 +- tests/utils/test_http_client.py | 203 +++++++++++- 148 files changed, 1609 insertions(+), 610 deletions(-) diff --git a/.fern/metadata.json b/.fern/metadata.json index 2e534d4b..ab43faf5 100644 --- a/.fern/metadata.json +++ b/.fern/metadata.json @@ -1,7 +1,7 @@ { - "cliVersion": "3.10.0", + "cliVersion": "3.54.1", "generatorName": "fernapi/fern-python-sdk", - "generatorVersion": "4.45.3", + "generatorVersion": "4.54.2", "generatorConfig": { "package_name": "truefoundry_sdk", "pydantic_config": { @@ -21,5 +21,6 @@ "Jinja2": ">=3.1.6,<4.0.0", "numpydoc": ">=1.7.0,<2.0.0" } - } + }, + "sdkVersion": "0.0.0" } \ No newline at end of file diff --git a/README.md b/README.md index fa297659..47831b9f 100644 --- a/README.md +++ b/README.md @@ -191,6 +191,7 @@ client = TrueFoundry( ) response = client.applications.with_raw_response.list(...) print(response.headers) # access the response headers +print(response.status_code) # access the response status code print(response.data) # access the underlying object pager = client.users.list(...) print(pager.response) # access the typed response for the first page diff --git a/poetry.lock b/poetry.lock index 7bde5c80..bc5c4e1d 100644 --- a/poetry.lock +++ b/poetry.lock @@ -103,13 +103,13 @@ files = [ [[package]] name = "certifi" -version = "2025.11.12" +version = "2026.1.4" description = "Python package for providing Mozilla's CA Bundle." optional = false python-versions = ">=3.7" files = [ - {file = "certifi-2025.11.12-py3-none-any.whl", hash = "sha256:97de8790030bbd5c2d96b7ec782fc2f7820ef8dba6db909ccf95449f2d062d4b"}, - {file = "certifi-2025.11.12.tar.gz", hash = "sha256:d8ab5478f2ecd78af242878415affce761ca6bc54a22a27e026d7c25357c3316"}, + {file = "certifi-2026.1.4-py3-none-any.whl", hash = "sha256:9943707519e4add1115f44c2bc244f782c0249876bf51b6599fee1ffbedd685c"}, + {file = "certifi-2026.1.4.tar.gz", hash = "sha256:ac726dd470482006e014ad384921ed6438c457018f4b3d204aea4281258b2120"}, ] [[package]] @@ -672,13 +672,13 @@ test = ["matplotlib", "pytest", "pytest-cov"] [[package]] name = "packaging" -version = "25.0" +version = "26.0" description = "Core utilities for Python packages" optional = false python-versions = ">=3.8" files = [ - {file = "packaging-25.0-py3-none-any.whl", hash = "sha256:29572ef2b1f17581046b3a2227d5c611fb25ec70ca1ba8554b24b0e69331a484"}, - {file = "packaging-25.0.tar.gz", hash = "sha256:d443872c98d677bf60f6a1f2f8c1cb748e8fe762d2bf9d3148b5599295b0fc4f"}, + {file = "packaging-26.0-py3-none-any.whl", hash = "sha256:b36f1fef9334a5588b4166f8bcd26a14e521f2b55e6b9de3aaa80d3ff7a37529"}, + {file = "packaging-26.0.tar.gz", hash = "sha256:00243ae351a257117b6a241061796684b084ed1c516a08c48a3f7e147a9d80b4"}, ] [[package]] @@ -1246,53 +1246,58 @@ widechars = ["wcwidth"] [[package]] name = "tomli" -version = "2.3.0" +version = "2.4.0" description = "A lil' TOML parser" optional = false python-versions = ">=3.8" files = [ - {file = "tomli-2.3.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:88bd15eb972f3664f5ed4b57c1634a97153b4bac4479dcb6a495f41921eb7f45"}, - {file = "tomli-2.3.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:883b1c0d6398a6a9d29b508c331fa56adbcdff647f6ace4dfca0f50e90dfd0ba"}, - {file = "tomli-2.3.0-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:d1381caf13ab9f300e30dd8feadb3de072aeb86f1d34a8569453ff32a7dea4bf"}, - {file = "tomli-2.3.0-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:a0e285d2649b78c0d9027570d4da3425bdb49830a6156121360b3f8511ea3441"}, - {file = "tomli-2.3.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:0a154a9ae14bfcf5d8917a59b51ffd5a3ac1fd149b71b47a3a104ca4edcfa845"}, - {file = "tomli-2.3.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:74bf8464ff93e413514fefd2be591c3b0b23231a77f901db1eb30d6f712fc42c"}, - {file = "tomli-2.3.0-cp311-cp311-win32.whl", hash = "sha256:00b5f5d95bbfc7d12f91ad8c593a1659b6387b43f054104cda404be6bda62456"}, - {file = "tomli-2.3.0-cp311-cp311-win_amd64.whl", hash = "sha256:4dc4ce8483a5d429ab602f111a93a6ab1ed425eae3122032db7e9acf449451be"}, - {file = "tomli-2.3.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:d7d86942e56ded512a594786a5ba0a5e521d02529b3826e7761a05138341a2ac"}, - {file = "tomli-2.3.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:73ee0b47d4dad1c5e996e3cd33b8a76a50167ae5f96a2607cbe8cc773506ab22"}, - {file = "tomli-2.3.0-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:792262b94d5d0a466afb5bc63c7daa9d75520110971ee269152083270998316f"}, - {file = "tomli-2.3.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:4f195fe57ecceac95a66a75ac24d9d5fbc98ef0962e09b2eddec5d39375aae52"}, - {file = "tomli-2.3.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:e31d432427dcbf4d86958c184b9bfd1e96b5b71f8eb17e6d02531f434fd335b8"}, - {file = "tomli-2.3.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:7b0882799624980785240ab732537fcfc372601015c00f7fc367c55308c186f6"}, - {file = "tomli-2.3.0-cp312-cp312-win32.whl", hash = "sha256:ff72b71b5d10d22ecb084d345fc26f42b5143c5533db5e2eaba7d2d335358876"}, - {file = "tomli-2.3.0-cp312-cp312-win_amd64.whl", hash = "sha256:1cb4ed918939151a03f33d4242ccd0aa5f11b3547d0cf30f7c74a408a5b99878"}, - {file = "tomli-2.3.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:5192f562738228945d7b13d4930baffda67b69425a7f0da96d360b0a3888136b"}, - {file = "tomli-2.3.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:be71c93a63d738597996be9528f4abe628d1adf5e6eb11607bc8fe1a510b5dae"}, - {file = "tomli-2.3.0-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c4665508bcbac83a31ff8ab08f424b665200c0e1e645d2bd9ab3d3e557b6185b"}, - {file = "tomli-2.3.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:4021923f97266babc6ccab9f5068642a0095faa0a51a246a6a02fccbb3514eaf"}, - {file = "tomli-2.3.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:a4ea38c40145a357d513bffad0ed869f13c1773716cf71ccaa83b0fa0cc4e42f"}, - {file = "tomli-2.3.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:ad805ea85eda330dbad64c7ea7a4556259665bdf9d2672f5dccc740eb9d3ca05"}, - {file = "tomli-2.3.0-cp313-cp313-win32.whl", hash = "sha256:97d5eec30149fd3294270e889b4234023f2c69747e555a27bd708828353ab606"}, - {file = "tomli-2.3.0-cp313-cp313-win_amd64.whl", hash = "sha256:0c95ca56fbe89e065c6ead5b593ee64b84a26fca063b5d71a1122bf26e533999"}, - {file = "tomli-2.3.0-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:cebc6fe843e0733ee827a282aca4999b596241195f43b4cc371d64fc6639da9e"}, - {file = "tomli-2.3.0-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:4c2ef0244c75aba9355561272009d934953817c49f47d768070c3c94355c2aa3"}, - {file = "tomli-2.3.0-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c22a8bf253bacc0cf11f35ad9808b6cb75ada2631c2d97c971122583b129afbc"}, - {file = "tomli-2.3.0-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:0eea8cc5c5e9f89c9b90c4896a8deefc74f518db5927d0e0e8d4a80953d774d0"}, - {file = "tomli-2.3.0-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:b74a0e59ec5d15127acdabd75ea17726ac4c5178ae51b85bfe39c4f8a278e879"}, - {file = "tomli-2.3.0-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:b5870b50c9db823c595983571d1296a6ff3e1b88f734a4c8f6fc6188397de005"}, - {file = "tomli-2.3.0-cp314-cp314-win32.whl", hash = "sha256:feb0dacc61170ed7ab602d3d972a58f14ee3ee60494292d384649a3dc38ef463"}, - {file = "tomli-2.3.0-cp314-cp314-win_amd64.whl", hash = "sha256:b273fcbd7fc64dc3600c098e39136522650c49bca95df2d11cf3b626422392c8"}, - {file = "tomli-2.3.0-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:940d56ee0410fa17ee1f12b817b37a4d4e4dc4d27340863cc67236c74f582e77"}, - {file = "tomli-2.3.0-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:f85209946d1fe94416debbb88d00eb92ce9cd5266775424ff81bc959e001acaf"}, - {file = "tomli-2.3.0-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:a56212bdcce682e56b0aaf79e869ba5d15a6163f88d5451cbde388d48b13f530"}, - {file = "tomli-2.3.0-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:c5f3ffd1e098dfc032d4d3af5c0ac64f6d286d98bc148698356847b80fa4de1b"}, - {file = "tomli-2.3.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:5e01decd096b1530d97d5d85cb4dff4af2d8347bd35686654a004f8dea20fc67"}, - {file = "tomli-2.3.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:8a35dd0e643bb2610f156cca8db95d213a90015c11fee76c946aa62b7ae7e02f"}, - {file = "tomli-2.3.0-cp314-cp314t-win32.whl", hash = "sha256:a1f7f282fe248311650081faafa5f4732bdbfef5d45fe3f2e702fbc6f2d496e0"}, - {file = "tomli-2.3.0-cp314-cp314t-win_amd64.whl", hash = "sha256:70a251f8d4ba2d9ac2542eecf008b3c8a9fc5c3f9f02c56a9d7952612be2fdba"}, - {file = "tomli-2.3.0-py3-none-any.whl", hash = "sha256:e95b1af3c5b07d9e643909b5abbec77cd9f1217e6d0bca72b0234736b9fb1f1b"}, - {file = "tomli-2.3.0.tar.gz", hash = "sha256:64be704a875d2a59753d80ee8a533c3fe183e3f06807ff7dc2232938ccb01549"}, + {file = "tomli-2.4.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:b5ef256a3fd497d4973c11bf142e9ed78b150d36f5773f1ca6088c230ffc5867"}, + {file = "tomli-2.4.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:5572e41282d5268eb09a697c89a7bee84fae66511f87533a6f88bd2f7b652da9"}, + {file = "tomli-2.4.0-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:551e321c6ba03b55676970b47cb1b73f14a0a4dce6a3e1a9458fd6d921d72e95"}, + {file = "tomli-2.4.0-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:5e3f639a7a8f10069d0e15408c0b96a2a828cfdec6fca05296ebcdcc28ca7c76"}, + {file = "tomli-2.4.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:1b168f2731796b045128c45982d3a4874057626da0e2ef1fdd722848b741361d"}, + {file = "tomli-2.4.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:133e93646ec4300d651839d382d63edff11d8978be23da4cc106f5a18b7d0576"}, + {file = "tomli-2.4.0-cp311-cp311-win32.whl", hash = "sha256:b6c78bdf37764092d369722d9946cb65b8767bfa4110f902a1b2542d8d173c8a"}, + {file = "tomli-2.4.0-cp311-cp311-win_amd64.whl", hash = "sha256:d3d1654e11d724760cdb37a3d7691f0be9db5fbdaef59c9f532aabf87006dbaa"}, + {file = "tomli-2.4.0-cp311-cp311-win_arm64.whl", hash = "sha256:cae9c19ed12d4e8f3ebf46d1a75090e4c0dc16271c5bce1c833ac168f08fb614"}, + {file = "tomli-2.4.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:920b1de295e72887bafa3ad9f7a792f811847d57ea6b1215154030cf131f16b1"}, + {file = "tomli-2.4.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:7d6d9a4aee98fac3eab4952ad1d73aee87359452d1c086b5ceb43ed02ddb16b8"}, + {file = "tomli-2.4.0-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:36b9d05b51e65b254ea6c2585b59d2c4cb91c8a3d91d0ed0f17591a29aaea54a"}, + {file = "tomli-2.4.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:1c8a885b370751837c029ef9bc014f27d80840e48bac415f3412e6593bbc18c1"}, + {file = "tomli-2.4.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:8768715ffc41f0008abe25d808c20c3d990f42b6e2e58305d5da280ae7d1fa3b"}, + {file = "tomli-2.4.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:7b438885858efd5be02a9a133caf5812b8776ee0c969fea02c45e8e3f296ba51"}, + {file = "tomli-2.4.0-cp312-cp312-win32.whl", hash = "sha256:0408e3de5ec77cc7f81960c362543cbbd91ef883e3138e81b729fc3eea5b9729"}, + {file = "tomli-2.4.0-cp312-cp312-win_amd64.whl", hash = "sha256:685306e2cc7da35be4ee914fd34ab801a6acacb061b6a7abca922aaf9ad368da"}, + {file = "tomli-2.4.0-cp312-cp312-win_arm64.whl", hash = "sha256:5aa48d7c2356055feef06a43611fc401a07337d5b006be13a30f6c58f869e3c3"}, + {file = "tomli-2.4.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:84d081fbc252d1b6a982e1870660e7330fb8f90f676f6e78b052ad4e64714bf0"}, + {file = "tomli-2.4.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:9a08144fa4cba33db5255f9b74f0b89888622109bd2776148f2597447f92a94e"}, + {file = "tomli-2.4.0-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c73add4bb52a206fd0c0723432db123c0c75c280cbd67174dd9d2db228ebb1b4"}, + {file = "tomli-2.4.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:1fb2945cbe303b1419e2706e711b7113da57b7db31ee378d08712d678a34e51e"}, + {file = "tomli-2.4.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:bbb1b10aa643d973366dc2cb1ad94f99c1726a02343d43cbc011edbfac579e7c"}, + {file = "tomli-2.4.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:4cbcb367d44a1f0c2be408758b43e1ffb5308abe0ea222897d6bfc8e8281ef2f"}, + {file = "tomli-2.4.0-cp313-cp313-win32.whl", hash = "sha256:7d49c66a7d5e56ac959cb6fc583aff0651094ec071ba9ad43df785abc2320d86"}, + {file = "tomli-2.4.0-cp313-cp313-win_amd64.whl", hash = "sha256:3cf226acb51d8f1c394c1b310e0e0e61fecdd7adcb78d01e294ac297dd2e7f87"}, + {file = "tomli-2.4.0-cp313-cp313-win_arm64.whl", hash = "sha256:d20b797a5c1ad80c516e41bc1fb0443ddb5006e9aaa7bda2d71978346aeb9132"}, + {file = "tomli-2.4.0-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:26ab906a1eb794cd4e103691daa23d95c6919cc2fa9160000ac02370cc9dd3f6"}, + {file = "tomli-2.4.0-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:20cedb4ee43278bc4f2fee6cb50daec836959aadaf948db5172e776dd3d993fc"}, + {file = "tomli-2.4.0-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:39b0b5d1b6dd03684b3fb276407ebed7090bbec989fa55838c98560c01113b66"}, + {file = "tomli-2.4.0-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:a26d7ff68dfdb9f87a016ecfd1e1c2bacbe3108f4e0f8bcd2228ef9a766c787d"}, + {file = "tomli-2.4.0-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:20ffd184fb1df76a66e34bd1b36b4a4641bd2b82954befa32fe8163e79f1a702"}, + {file = "tomli-2.4.0-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:75c2f8bbddf170e8effc98f5e9084a8751f8174ea6ccf4fca5398436e0320bc8"}, + {file = "tomli-2.4.0-cp314-cp314-win32.whl", hash = "sha256:31d556d079d72db7c584c0627ff3a24c5d3fb4f730221d3444f3efb1b2514776"}, + {file = "tomli-2.4.0-cp314-cp314-win_amd64.whl", hash = "sha256:43e685b9b2341681907759cf3a04e14d7104b3580f808cfde1dfdb60ada85475"}, + {file = "tomli-2.4.0-cp314-cp314-win_arm64.whl", hash = "sha256:3d895d56bd3f82ddd6faaff993c275efc2ff38e52322ea264122d72729dca2b2"}, + {file = "tomli-2.4.0-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:5b5807f3999fb66776dbce568cc9a828544244a8eb84b84b9bafc080c99597b9"}, + {file = "tomli-2.4.0-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:c084ad935abe686bd9c898e62a02a19abfc9760b5a79bc29644463eaf2840cb0"}, + {file = "tomli-2.4.0-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:0f2e3955efea4d1cfbcb87bc321e00dc08d2bcb737fd1d5e398af111d86db5df"}, + {file = "tomli-2.4.0-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:0e0fe8a0b8312acf3a88077a0802565cb09ee34107813bba1c7cd591fa6cfc8d"}, + {file = "tomli-2.4.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:413540dce94673591859c4c6f794dfeaa845e98bf35d72ed59636f869ef9f86f"}, + {file = "tomli-2.4.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:0dc56fef0e2c1c470aeac5b6ca8cc7b640bb93e92d9803ddaf9ea03e198f5b0b"}, + {file = "tomli-2.4.0-cp314-cp314t-win32.whl", hash = "sha256:d878f2a6707cc9d53a1be1414bbb419e629c3d6e67f69230217bb663e76b5087"}, + {file = "tomli-2.4.0-cp314-cp314t-win_amd64.whl", hash = "sha256:2add28aacc7425117ff6364fe9e06a183bb0251b03f986df0e78e974047571fd"}, + {file = "tomli-2.4.0-cp314-cp314t-win_arm64.whl", hash = "sha256:2b1e3b80e1d5e52e40e9b924ec43d81570f0e7d09d11081b797bc4692765a3d4"}, + {file = "tomli-2.4.0-py3-none-any.whl", hash = "sha256:1f776e7d669ebceb01dee46484485f43a4048746235e683bcdffacdf1fb4785a"}, + {file = "tomli-2.4.0.tar.gz", hash = "sha256:aa89c3f6c277dd275d8e243ad24f3b5e701491a860d5121f2cdd399fbb31fc9c"}, ] [[package]] @@ -1351,13 +1356,13 @@ zstd = ["zstandard (>=0.18.0)"] [[package]] name = "wcwidth" -version = "0.2.14" +version = "0.5.2" description = "Measures the displayed width of unicode strings in a terminal" optional = false -python-versions = ">=3.6" +python-versions = ">=3.8" files = [ - {file = "wcwidth-0.2.14-py2.py3-none-any.whl", hash = "sha256:a7bb560c8aee30f9957e5f9895805edd20602f2d7f720186dfd906e82b4982e1"}, - {file = "wcwidth-0.2.14.tar.gz", hash = "sha256:4d478375d31bc5395a3c55c40ccdf3354688364cd61c4f6adacaa9215d0b3605"}, + {file = "wcwidth-0.5.2-py3-none-any.whl", hash = "sha256:46912178a64217749bf3426b21e36e849fbc46e05c949407b3e364d9f7ffcadf"}, + {file = "wcwidth-0.5.2.tar.gz", hash = "sha256:c022c39a02a0134d1e10810da36d1f984c79648181efcc70a389f4569695f5ae"}, ] [[package]] diff --git a/pyproject.toml b/pyproject.toml index e8936f12..299affc5 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -19,6 +19,9 @@ classifiers = [ "Programming Language :: Python :: 3.10", "Programming Language :: Python :: 3.11", "Programming Language :: Python :: 3.12", + "Programming Language :: Python :: 3.13", + "Programming Language :: Python :: 3.14", + "Programming Language :: Python :: 3.15", "Operating System :: OS Independent", "Operating System :: POSIX", "Operating System :: MacOS", diff --git a/reference.md b/reference.md index 9c74a3a8..f7ccc8b6 100644 --- a/reference.md +++ b/reference.md @@ -1,5 +1,5 @@ # Reference -
client.apply(...) -> AsyncHttpResponse[TrueFoundryApplyResponse] +
client.apply(...) -> AsyncHttpResponse[TrueFoundryApplyResponse]
@@ -87,7 +87,7 @@ client.apply(
-
client.delete(...) -> AsyncHttpResponse[None] +
client.delete(...) -> AsyncHttpResponse[None]
@@ -168,7 +168,7 @@ client.delete(
## Internal -
client.internal.get_id_from_fqn(...) -> AsyncHttpResponse[typing.Dict[str, typing.Any]] +
client.internal.get_id_from_fqn(...) -> AsyncHttpResponse[typing.Dict[str, typing.Any]]
@@ -249,7 +249,7 @@ client.internal.get_id_from_fqn(
## Users -
client.users.list(...) -> AsyncPager[User, ListUsersResponse] +
client.users.list(...) -> AsyncPager[User, ListUsersResponse]
@@ -361,7 +361,7 @@ for page in response.iter_pages():
-
client.users.pre_register_users(...) -> AsyncHttpResponse[RegisterUsersResponse] +
client.users.pre_register_users(...) -> AsyncHttpResponse[RegisterUsersResponse]
@@ -464,7 +464,7 @@ client.users.pre_register_users(
-
client.users.update_roles(...) -> AsyncHttpResponse[UpdateUserRolesResponse] +
client.users.update_roles(...) -> AsyncHttpResponse[UpdateUserRolesResponse]
@@ -552,7 +552,7 @@ client.users.update_roles(
-
client.users.get(...) -> AsyncHttpResponse[GetUserResponse] +
client.users.get(...) -> AsyncHttpResponse[GetUserResponse]
@@ -623,7 +623,7 @@ client.users.get(
-
client.users.delete(...) -> AsyncHttpResponse[DeleteUserResponse] +
client.users.delete(...) -> AsyncHttpResponse[DeleteUserResponse]
@@ -694,7 +694,7 @@ client.users.delete(
-
client.users.invite_user(...) -> AsyncHttpResponse[InviteUserResponse] +
client.users.invite_user(...) -> AsyncHttpResponse[InviteUserResponse]
@@ -774,7 +774,7 @@ client.users.invite_user(
-
client.users.deactivate(...) -> AsyncHttpResponse[DeactivateUserResponse] +
client.users.deactivate(...) -> AsyncHttpResponse[DeactivateUserResponse]
@@ -845,7 +845,7 @@ client.users.deactivate(
-
client.users.activate(...) -> AsyncHttpResponse[ActivateUserResponse] +
client.users.activate(...) -> AsyncHttpResponse[ActivateUserResponse]
@@ -916,7 +916,7 @@ client.users.activate(
-
client.users.change_password(...) -> AsyncHttpResponse[ChangePasswordResponse] +
client.users.change_password(...) -> AsyncHttpResponse[ChangePasswordResponse]
@@ -1005,7 +1005,7 @@ client.users.change_password(
-
client.users.get_resources(...) -> AsyncHttpResponse[GetUserResourcesResponse] +
client.users.get_resources(...) -> AsyncHttpResponse[GetUserResourcesResponse]
@@ -1076,7 +1076,7 @@ client.users.get_resources(
-
client.users.get_teams(...) -> AsyncHttpResponse[GetUserTeamsResponse] +
client.users.get_teams(...) -> AsyncHttpResponse[GetUserTeamsResponse]
@@ -1148,7 +1148,7 @@ client.users.get_teams(
## Teams -
client.teams.list(...) -> AsyncPager[Team, ListTeamsResponse] +
client.teams.list(...) -> AsyncPager[Team, ListTeamsResponse]
@@ -1243,7 +1243,7 @@ for page in response.iter_pages():
-
client.teams.create_or_update(...) -> AsyncHttpResponse[GetTeamResponse] +
client.teams.create_or_update(...) -> AsyncHttpResponse[GetTeamResponse]
@@ -1325,7 +1325,7 @@ client.teams.create_or_update(
-
client.teams.get(...) -> AsyncHttpResponse[GetTeamResponse] +
client.teams.get(...) -> AsyncHttpResponse[GetTeamResponse]
@@ -1396,7 +1396,7 @@ client.teams.get(
-
client.teams.delete(...) -> AsyncHttpResponse[DeleteTeamResponse] +
client.teams.delete(...) -> AsyncHttpResponse[DeleteTeamResponse]
@@ -1468,7 +1468,7 @@ client.teams.delete(
## PersonalAccessTokens -
client.personal_access_tokens.list(...) -> AsyncPager[VirtualAccount, ListPersonalAccessTokenResponse] +
client.personal_access_tokens.list(...) -> AsyncPager[VirtualAccount, ListPersonalAccessTokenResponse]
@@ -1553,7 +1553,7 @@ for page in response.iter_pages():
-
client.personal_access_tokens.create(...) -> AsyncHttpResponse[CreatePersonalAccessTokenResponse] +
client.personal_access_tokens.create(...) -> AsyncHttpResponse[CreatePersonalAccessTokenResponse]
@@ -1640,7 +1640,7 @@ client.personal_access_tokens.create(
-
client.personal_access_tokens.revoke_all(...) -> AsyncHttpResponse[RevokeAllPersonalAccessTokenResponse] +
client.personal_access_tokens.revoke_all(...) -> AsyncHttpResponse[RevokeAllPersonalAccessTokenResponse]
@@ -1711,7 +1711,7 @@ client.personal_access_tokens.revoke_all(
-
client.personal_access_tokens.delete(...) -> AsyncHttpResponse[DeletePersonalAccessTokenResponse] +
client.personal_access_tokens.delete(...) -> AsyncHttpResponse[DeletePersonalAccessTokenResponse]
@@ -1782,7 +1782,7 @@ client.personal_access_tokens.delete(
-
client.personal_access_tokens.get(...) -> AsyncHttpResponse[GetOrCreatePersonalAccessTokenResponse] +
client.personal_access_tokens.get(...) -> AsyncHttpResponse[GetOrCreatePersonalAccessTokenResponse]
@@ -1854,7 +1854,7 @@ client.personal_access_tokens.get(
## VirtualAccounts -
client.virtual_accounts.list(...) -> AsyncPager[VirtualAccount, ListVirtualAccountResponse] +
client.virtual_accounts.list(...) -> AsyncPager[VirtualAccount, ListVirtualAccountResponse]
@@ -1939,7 +1939,7 @@ for page in response.iter_pages():
-
client.virtual_accounts.create_or_update(...) -> AsyncHttpResponse[GetVirtualAccountResponse] +
client.virtual_accounts.create_or_update(...) -> AsyncHttpResponse[GetVirtualAccountResponse]
@@ -2027,7 +2027,7 @@ client.virtual_accounts.create_or_update(
-
client.virtual_accounts.get(...) -> AsyncHttpResponse[GetVirtualAccountResponse] +
client.virtual_accounts.get(...) -> AsyncHttpResponse[GetVirtualAccountResponse]
@@ -2098,7 +2098,7 @@ client.virtual_accounts.get(
-
client.virtual_accounts.delete(...) -> AsyncHttpResponse[DeleteVirtualAccountResponse] +
client.virtual_accounts.delete(...) -> AsyncHttpResponse[DeleteVirtualAccountResponse]
@@ -2169,7 +2169,7 @@ client.virtual_accounts.delete(
-
client.virtual_accounts.get_token(...) -> AsyncHttpResponse[GetTokenForVirtualAccountResponse] +
client.virtual_accounts.get_token(...) -> AsyncHttpResponse[GetTokenForVirtualAccountResponse]
@@ -2240,7 +2240,7 @@ client.virtual_accounts.get_token(
-
client.virtual_accounts.sync_to_secret_store(...) -> AsyncHttpResponse[SyncVirtualAccountTokenResponse] +
client.virtual_accounts.sync_to_secret_store(...) -> AsyncHttpResponse[SyncVirtualAccountTokenResponse]
@@ -2311,7 +2311,7 @@ client.virtual_accounts.sync_to_secret_store(
-
client.virtual_accounts.regenerate_token(...) -> AsyncHttpResponse[GetTokenForVirtualAccountResponse] +
client.virtual_accounts.regenerate_token(...) -> AsyncHttpResponse[GetTokenForVirtualAccountResponse]
@@ -2391,7 +2391,7 @@ client.virtual_accounts.regenerate_token(
-
client.virtual_accounts.delete_jwt(...) -> AsyncHttpResponse[None] +
client.virtual_accounts.delete_jwt(...) -> AsyncHttpResponse[None]
@@ -2472,7 +2472,7 @@ client.virtual_accounts.delete_jwt(
## Clusters -
client.clusters.list(...) -> AsyncPager[Cluster, ListClustersResponse] +
client.clusters.list(...) -> AsyncPager[Cluster, ListClustersResponse]
@@ -2557,7 +2557,7 @@ for page in response.iter_pages():
-
client.clusters.create_or_update(...) -> AsyncHttpResponse[GetClusterResponse] +
client.clusters.create_or_update(...) -> AsyncHttpResponse[GetClusterResponse]
@@ -2651,7 +2651,7 @@ client.clusters.create_or_update(
-
client.clusters.get(...) -> AsyncHttpResponse[GetClusterResponse] +
client.clusters.get(...) -> AsyncHttpResponse[GetClusterResponse]
@@ -2722,7 +2722,7 @@ client.clusters.get(
-
client.clusters.delete(...) -> AsyncHttpResponse[ClustersDeleteResponse] +
client.clusters.delete(...) -> AsyncHttpResponse[ClustersDeleteResponse]
@@ -2793,7 +2793,7 @@ client.clusters.delete(
-
client.clusters.get_addons(...) -> AsyncHttpResponse[ListClusterAddonsResponse] +
client.clusters.get_addons(...) -> AsyncHttpResponse[ListClusterAddonsResponse]
@@ -2882,7 +2882,7 @@ client.clusters.get_addons(
-
client.clusters.is_connected(...) -> AsyncHttpResponse[IsClusterConnectedResponse] +
client.clusters.is_connected(...) -> AsyncHttpResponse[IsClusterConnectedResponse]
@@ -2954,7 +2954,7 @@ client.clusters.is_connected(
## Applications -
client.applications.list(...) -> AsyncPager[Application, ListApplicationsResponse] +
client.applications.list(...) -> AsyncPager[Application, ListApplicationsResponse]
@@ -3178,7 +3178,7 @@ for page in response.iter_pages():
-
client.applications.create_or_update(...) -> AsyncHttpResponse[GetApplicationDeploymentResponse] +
client.applications.create_or_update(...) -> AsyncHttpResponse[GetApplicationDeploymentResponse]
@@ -3305,7 +3305,7 @@ client.applications.create_or_update(
-
client.applications.get(...) -> AsyncHttpResponse[GetApplicationResponse] +
client.applications.get(...) -> AsyncHttpResponse[GetApplicationResponse]
@@ -3376,7 +3376,7 @@ client.applications.get(
-
client.applications.delete(...) -> AsyncHttpResponse[DeleteApplicationResponse] +
client.applications.delete(...) -> AsyncHttpResponse[DeleteApplicationResponse]
@@ -3447,7 +3447,7 @@ client.applications.delete(
-
client.applications.scale_to_zero(...) -> AsyncHttpResponse[None] +
client.applications.scale_to_zero(...) -> AsyncHttpResponse[None]
@@ -3518,7 +3518,7 @@ client.applications.scale_to_zero(
-
client.applications.scale_to_original(...) -> AsyncHttpResponse[Deployment] +
client.applications.scale_to_original(...) -> AsyncHttpResponse[Deployment]
@@ -3589,7 +3589,7 @@ client.applications.scale_to_original(
-
client.applications.cancel_deployment(...) -> AsyncHttpResponse[ApplicationsCancelDeploymentResponse] +
client.applications.cancel_deployment(...) -> AsyncHttpResponse[ApplicationsCancelDeploymentResponse]
@@ -3670,7 +3670,7 @@ client.applications.cancel_deployment(
## ApplicationVersions -
client.application_versions.list(...) -> AsyncPager[Deployment, ListApplicationDeploymentsResponse] +
client.application_versions.list(...) -> AsyncPager[Deployment, ListApplicationDeploymentsResponse]
@@ -3782,7 +3782,7 @@ for page in response.iter_pages():
-
client.application_versions.get(...) -> AsyncHttpResponse[GetApplicationDeploymentResponse] +
client.application_versions.get(...) -> AsyncHttpResponse[GetApplicationDeploymentResponse]
@@ -3863,7 +3863,7 @@ client.application_versions.get(
## Jobs -
client.jobs.list_runs(...) -> AsyncPager[JobRun, ListJobRunResponse] +
client.jobs.list_runs(...) -> AsyncPager[JobRun, ListJobRunResponse]
@@ -4008,7 +4008,7 @@ for page in response.iter_pages():
-
client.jobs.get_run(...) -> AsyncHttpResponse[GetJobRunResponse] +
client.jobs.get_run(...) -> AsyncHttpResponse[GetJobRunResponse]
@@ -4088,7 +4088,7 @@ client.jobs.get_run(
-
client.jobs.delete_run(...) -> AsyncHttpResponse[DeleteJobRunResponse] +
client.jobs.delete_run(...) -> AsyncHttpResponse[DeleteJobRunResponse]
@@ -4168,7 +4168,7 @@ client.jobs.delete_run(
-
client.jobs.trigger(...) -> AsyncHttpResponse[TriggerJobRunResponse] +
client.jobs.trigger(...) -> AsyncHttpResponse[TriggerJobRunResponse]
@@ -4261,7 +4261,7 @@ client.jobs.trigger()
-
client.jobs.terminate(...) -> AsyncHttpResponse[TerminateJobResponse] +
client.jobs.terminate(...) -> AsyncHttpResponse[TerminateJobResponse]
@@ -4342,7 +4342,7 @@ client.jobs.terminate(
## Workspaces -
client.workspaces.list(...) -> AsyncPager[Workspace, ListWorkspacesResponse] +
client.workspaces.list(...) -> AsyncPager[Workspace, ListWorkspacesResponse]
@@ -4454,7 +4454,7 @@ for page in response.iter_pages():
-
client.workspaces.create_or_update(...) -> AsyncHttpResponse[GetWorkspaceResponse] +
client.workspaces.create_or_update(...) -> AsyncHttpResponse[GetWorkspaceResponse]
@@ -4536,7 +4536,7 @@ client.workspaces.create_or_update(
-
client.workspaces.get(...) -> AsyncHttpResponse[GetWorkspaceResponse] +
client.workspaces.get(...) -> AsyncHttpResponse[GetWorkspaceResponse]
@@ -4607,7 +4607,7 @@ client.workspaces.get(
-
client.workspaces.delete(...) -> AsyncHttpResponse[WorkspacesDeleteResponse] +
client.workspaces.delete(...) -> AsyncHttpResponse[WorkspacesDeleteResponse]
@@ -4681,7 +4681,7 @@ client.workspaces.delete(
## Environments -
client.environments.list(...) -> AsyncPager[Environment, ListEnvironmentsResponse] +
client.environments.list(...) -> AsyncPager[Environment, ListEnvironmentsResponse]
@@ -4766,7 +4766,7 @@ for page in response.iter_pages():
-
client.environments.create_or_update(...) -> AsyncHttpResponse[GetEnvironmentResponse] +
client.environments.create_or_update(...) -> AsyncHttpResponse[GetEnvironmentResponse]
@@ -4855,7 +4855,7 @@ client.environments.create_or_update(
-
client.environments.get(...) -> AsyncHttpResponse[GetEnvironmentResponse] +
client.environments.get(...) -> AsyncHttpResponse[GetEnvironmentResponse]
@@ -4926,7 +4926,7 @@ client.environments.get(
-
client.environments.delete(...) -> AsyncHttpResponse[bool] +
client.environments.delete(...) -> AsyncHttpResponse[bool]
@@ -4998,7 +4998,7 @@ client.environments.delete(
## Secrets -
client.secrets.list(...) -> AsyncPager[Secret, ListSecretsResponse] +
client.secrets.list(...) -> AsyncPager[Secret, ListSecretsResponse]
@@ -5104,7 +5104,7 @@ for page in response.iter_pages():
-
client.secrets.get(...) -> AsyncHttpResponse[GetSecretResponse] +
client.secrets.get(...) -> AsyncHttpResponse[GetSecretResponse]
@@ -5175,7 +5175,7 @@ client.secrets.get(
-
client.secrets.delete(...) -> AsyncHttpResponse[float] +
client.secrets.delete(...) -> AsyncHttpResponse[float]
@@ -5247,7 +5247,7 @@ client.secrets.delete(
## SecretGroups -
client.secret_groups.list(...) -> AsyncPager[SecretGroup, ListSecretGroupResponse] +
client.secret_groups.list(...) -> AsyncPager[SecretGroup, ListSecretGroupResponse]
@@ -5350,7 +5350,7 @@ for page in response.iter_pages():
-
client.secret_groups.create(...) -> AsyncHttpResponse[GetSecretGroupResponse] +
client.secret_groups.create(...) -> AsyncHttpResponse[GetSecretGroupResponse]
@@ -5444,7 +5444,7 @@ client.secret_groups.create(
-
client.secret_groups.create_or_update(...) -> AsyncHttpResponse[GetSecretGroupResponse] +
client.secret_groups.create_or_update(...) -> AsyncHttpResponse[GetSecretGroupResponse]
@@ -5524,7 +5524,7 @@ client.secret_groups.create_or_update(
-
client.secret_groups.get(...) -> AsyncHttpResponse[GetSecretGroupResponse] +
client.secret_groups.get(...) -> AsyncHttpResponse[GetSecretGroupResponse]
@@ -5595,7 +5595,7 @@ client.secret_groups.get(
-
client.secret_groups.update(...) -> AsyncHttpResponse[GetSecretGroupResponse] +
client.secret_groups.update(...) -> AsyncHttpResponse[GetSecretGroupResponse]
@@ -5679,7 +5679,7 @@ client.secret_groups.update(
-
client.secret_groups.delete(...) -> AsyncHttpResponse[DeleteSecretGroupResponse] +
client.secret_groups.delete(...) -> AsyncHttpResponse[DeleteSecretGroupResponse]
@@ -5751,7 +5751,7 @@ client.secret_groups.delete(
## Events -
client.events.get(...) -> AsyncHttpResponse[GetEventsResponse] +
client.events.get(...) -> AsyncHttpResponse[GetEventsResponse]
@@ -5867,7 +5867,7 @@ client.events.get(
## Alerts -
client.alerts.list(...) -> AsyncHttpResponse[GetAlertsResponse] +
client.alerts.list(...) -> AsyncHttpResponse[GetAlertsResponse]
@@ -5975,7 +5975,7 @@ client.alerts.list(
## Logs -
client.logs.get(...) -> AsyncHttpResponse[GetLogsResponse] +
client.logs.get(...) -> AsyncHttpResponse[GetLogsResponse]
@@ -6195,7 +6195,7 @@ client.logs.get(
## MlRepos -
client.ml_repos.create_or_update(...) -> AsyncHttpResponse[GetMlRepoResponse] +
client.ml_repos.create_or_update(...) -> AsyncHttpResponse[GetMlRepoResponse]
@@ -6275,7 +6275,7 @@ client.ml_repos.create_or_update(
-
client.ml_repos.get(...) -> AsyncHttpResponse[GetMlRepoResponse] +
client.ml_repos.get(...) -> AsyncHttpResponse[GetMlRepoResponse]
@@ -6352,7 +6352,7 @@ client.ml_repos.get(
-
client.ml_repos.delete(...) -> AsyncHttpResponse[EmptyResponse] +
client.ml_repos.delete(...) -> AsyncHttpResponse[EmptyResponse]
@@ -6429,7 +6429,7 @@ client.ml_repos.delete(
-
client.ml_repos.list(...) -> AsyncPager[MlRepo, ListMlReposResponse] +
client.ml_repos.list(...) -> AsyncPager[MlRepo, ListMlReposResponse]
@@ -6530,7 +6530,7 @@ for page in response.iter_pages():
## Traces -
client.traces.query_spans(...) -> AsyncPager[TraceSpan, QuerySpansResponse] +
client.traces.query_spans(...) -> AsyncPager[TraceSpan, QuerySpansResponse]
@@ -6690,7 +6690,7 @@ for page in response.iter_pages():
## Artifacts -
client.artifacts.get(...) -> AsyncHttpResponse[GetArtifactResponse] +
client.artifacts.get(...) -> AsyncHttpResponse[GetArtifactResponse]
@@ -6747,7 +6747,7 @@ client.artifacts.get(
-
client.artifacts.delete(...) -> AsyncHttpResponse[EmptyResponse] +
client.artifacts.delete(...) -> AsyncHttpResponse[EmptyResponse]
@@ -6804,7 +6804,7 @@ client.artifacts.delete(
-
client.artifacts.list(...) -> AsyncPager[Artifact, ListArtifactsResponse] +
client.artifacts.list(...) -> AsyncPager[Artifact, ListArtifactsResponse]
@@ -6920,7 +6920,7 @@ for page in response.iter_pages():
-
client.artifacts.create_or_update(...) -> AsyncHttpResponse[GetArtifactVersionResponse] +
client.artifacts.create_or_update(...) -> AsyncHttpResponse[GetArtifactVersionResponse]
@@ -6987,7 +6987,7 @@ client.artifacts.create_or_update(
## Prompts -
client.prompts.get(...) -> AsyncHttpResponse[GetPromptResponse] +
client.prompts.get(...) -> AsyncHttpResponse[GetPromptResponse]
@@ -7044,7 +7044,7 @@ client.prompts.get(
-
client.prompts.delete(...) -> AsyncHttpResponse[EmptyResponse] +
client.prompts.delete(...) -> AsyncHttpResponse[EmptyResponse]
@@ -7101,7 +7101,7 @@ client.prompts.delete(
-
client.prompts.list(...) -> AsyncPager[Prompt, ListPromptsResponse] +
client.prompts.list(...) -> AsyncPager[Prompt, ListPromptsResponse]
@@ -7208,7 +7208,7 @@ for page in response.iter_pages():
-
client.prompts.create_or_update(...) -> AsyncHttpResponse[GetPromptVersionResponse] +
client.prompts.create_or_update(...) -> AsyncHttpResponse[GetPromptVersionResponse]
@@ -7275,7 +7275,7 @@ client.prompts.create_or_update(
## Models -
client.models.get(...) -> AsyncHttpResponse[GetModelResponse] +
client.models.get(...) -> AsyncHttpResponse[GetModelResponse]
@@ -7332,7 +7332,7 @@ client.models.get(
-
client.models.delete(...) -> AsyncHttpResponse[EmptyResponse] +
client.models.delete(...) -> AsyncHttpResponse[EmptyResponse]
@@ -7389,7 +7389,7 @@ client.models.delete(
-
client.models.list(...) -> AsyncPager[Model, ListModelsResponse] +
client.models.list(...) -> AsyncPager[Model, ListModelsResponse]
@@ -7505,7 +7505,7 @@ for page in response.iter_pages():
-
client.models.create_or_update(...) -> AsyncHttpResponse[GetModelVersionResponse] +
client.models.create_or_update(...) -> AsyncHttpResponse[GetModelVersionResponse]
@@ -7568,7 +7568,7 @@ client.models.create_or_update(
## ArtifactVersions -
client.artifact_versions.apply_tags(...) -> AsyncHttpResponse[EmptyResponse] +
client.artifact_versions.apply_tags(...) -> AsyncHttpResponse[EmptyResponse]
@@ -7642,7 +7642,7 @@ client.artifact_versions.apply_tags(
-
client.artifact_versions.get(...) -> AsyncHttpResponse[GetArtifactVersionResponse] +
client.artifact_versions.get(...) -> AsyncHttpResponse[GetArtifactVersionResponse]
@@ -7713,7 +7713,7 @@ client.artifact_versions.get(
-
client.artifact_versions.delete(...) -> AsyncHttpResponse[EmptyResponse] +
client.artifact_versions.delete(...) -> AsyncHttpResponse[EmptyResponse]
@@ -7784,7 +7784,7 @@ client.artifact_versions.delete(
-
client.artifact_versions.list(...) -> AsyncPager[ArtifactVersion, ListArtifactVersionsResponse] +
client.artifact_versions.list(...) -> AsyncPager[ArtifactVersion, ListArtifactVersionsResponse]
@@ -7948,7 +7948,7 @@ for page in response.iter_pages():
-
client.artifact_versions.get_signed_urls(...) -> AsyncHttpResponse[GetSignedUrLsResponse] +
client.artifact_versions.get_signed_urls(...) -> AsyncHttpResponse[GetSignedUrLsResponse]
@@ -8023,7 +8023,7 @@ client.artifact_versions.get_signed_urls(
-
client.artifact_versions.create_multi_part_upload(...) -> AsyncHttpResponse[MultiPartUploadResponse] +
client.artifact_versions.create_multi_part_upload(...) -> AsyncHttpResponse[MultiPartUploadResponse]
@@ -8098,7 +8098,7 @@ client.artifact_versions.create_multi_part_upload(
-
client.artifact_versions.stage(...) -> AsyncHttpResponse[StageArtifactResponse] +
client.artifact_versions.stage(...) -> AsyncHttpResponse[StageArtifactResponse]
@@ -8160,7 +8160,7 @@ client.artifact_versions.stage(
-
client.artifact_versions.list_files(...) -> AsyncPager[FileInfo, ListFilesResponse] +
client.artifact_versions.list_files(...) -> AsyncPager[FileInfo, ListFilesResponse]
@@ -8246,7 +8246,7 @@ for page in response.iter_pages():
-
client.artifact_versions.mark_stage_failure(...) -> AsyncHttpResponse[EmptyResponse] +
client.artifact_versions.mark_stage_failure(...) -> AsyncHttpResponse[EmptyResponse]
@@ -8304,7 +8304,7 @@ client.artifact_versions.mark_stage_failure(
## ModelVersions -
client.model_versions.apply_tags(...) -> AsyncHttpResponse[EmptyResponse] +
client.model_versions.apply_tags(...) -> AsyncHttpResponse[EmptyResponse]
@@ -8378,7 +8378,7 @@ client.model_versions.apply_tags(
-
client.model_versions.get(...) -> AsyncHttpResponse[GetModelVersionResponse] +
client.model_versions.get(...) -> AsyncHttpResponse[GetModelVersionResponse]
@@ -8449,7 +8449,7 @@ client.model_versions.get(
-
client.model_versions.delete(...) -> AsyncHttpResponse[EmptyResponse] +
client.model_versions.delete(...) -> AsyncHttpResponse[EmptyResponse]
@@ -8520,7 +8520,7 @@ client.model_versions.delete(
-
client.model_versions.list(...) -> AsyncPager[ModelVersion, ListModelVersionsResponse] +
client.model_versions.list(...) -> AsyncPager[ModelVersion, ListModelVersionsResponse]
@@ -8685,7 +8685,7 @@ for page in response.iter_pages():
## PromptVersions -
client.prompt_versions.apply_tags(...) -> AsyncHttpResponse[EmptyResponse] +
client.prompt_versions.apply_tags(...) -> AsyncHttpResponse[EmptyResponse]
@@ -8759,7 +8759,7 @@ client.prompt_versions.apply_tags(
-
client.prompt_versions.get(...) -> AsyncHttpResponse[GetPromptVersionResponse] +
client.prompt_versions.get(...) -> AsyncHttpResponse[GetPromptVersionResponse]
@@ -8830,7 +8830,7 @@ client.prompt_versions.get(
-
client.prompt_versions.delete(...) -> AsyncHttpResponse[EmptyResponse] +
client.prompt_versions.delete(...) -> AsyncHttpResponse[EmptyResponse]
@@ -8901,7 +8901,7 @@ client.prompt_versions.delete(
-
client.prompt_versions.list(...) -> AsyncPager[PromptVersion, ListPromptVersionsResponse] +
client.prompt_versions.list(...) -> AsyncPager[PromptVersion, ListPromptVersionsResponse]
@@ -9041,7 +9041,7 @@ for page in response.iter_pages():
## DataDirectories -
client.data_directories.get(...) -> AsyncHttpResponse[GetDataDirectoryResponse] +
client.data_directories.get(...) -> AsyncHttpResponse[GetDataDirectoryResponse]
@@ -9119,7 +9119,7 @@ client.data_directories.get(
-
client.data_directories.delete(...) -> AsyncHttpResponse[EmptyResponse] +
client.data_directories.delete(...) -> AsyncHttpResponse[EmptyResponse]
@@ -9207,7 +9207,7 @@ client.data_directories.delete(
-
client.data_directories.list(...) -> AsyncPager[DataDirectory, ListDataDirectoriesResponse] +
client.data_directories.list(...) -> AsyncPager[DataDirectory, ListDataDirectoriesResponse]
@@ -9330,7 +9330,7 @@ for page in response.iter_pages():
-
client.data_directories.create_or_update(...) -> AsyncHttpResponse[GetDataDirectoryResponse] +
client.data_directories.create_or_update(...) -> AsyncHttpResponse[GetDataDirectoryResponse]
@@ -9396,7 +9396,7 @@ client.data_directories.create_or_update(
-
client.data_directories.list_files(...) -> AsyncPager[FileInfo, ListFilesResponse] +
client.data_directories.list_files(...) -> AsyncPager[FileInfo, ListFilesResponse]
@@ -9503,7 +9503,7 @@ for page in response.iter_pages():
-
client.data_directories.delete_files(...) -> AsyncHttpResponse[EmptyResponse] +
client.data_directories.delete_files(...) -> AsyncHttpResponse[EmptyResponse]
@@ -9590,7 +9590,7 @@ client.data_directories.delete_files(
-
client.data_directories.get_signed_urls(...) -> AsyncHttpResponse[GetSignedUrLsResponse] +
client.data_directories.get_signed_urls(...) -> AsyncHttpResponse[GetSignedUrLsResponse]
@@ -9686,7 +9686,7 @@ client.data_directories.get_signed_urls(
-
client.data_directories.create_multipart_upload(...) -> AsyncHttpResponse[MultiPartUploadResponse] +
client.data_directories.create_multipart_upload(...) -> AsyncHttpResponse[MultiPartUploadResponse]
@@ -9783,7 +9783,7 @@ client.data_directories.create_multipart_upload(
## Internal Users -
client.internal.users.get_info() -> AsyncHttpResponse[Session] +
client.internal.users.get_info() -> AsyncHttpResponse[Session]
@@ -9845,7 +9845,7 @@ client.internal.users.get_info()
## Internal AiGateway -
client.internal.ai_gateway.get_gateway_config(...) -> AsyncHttpResponse[GatewayConfiguration] +
client.internal.ai_gateway.get_gateway_config(...) -> AsyncHttpResponse[GatewayConfiguration]
@@ -9920,7 +9920,7 @@ client.internal.ai_gateway.get_gateway_config(
## Internal Clusters -
client.internal.clusters.get_autoprovisioning_state(...) -> AsyncHttpResponse[GetAutoProvisioningStateResponse] +
client.internal.clusters.get_autoprovisioning_state(...) -> AsyncHttpResponse[GetAutoProvisioningStateResponse]
@@ -9992,7 +9992,7 @@ client.internal.clusters.get_autoprovisioning_state(
## Internal Deployments -
client.internal.deployments.get_deployment_statuses(...) -> AsyncHttpResponse[typing.List[DeploymentStatus]] +
client.internal.deployments.get_deployment_statuses(...) -> AsyncHttpResponse[typing.List[DeploymentStatus]]
@@ -10072,7 +10072,7 @@ client.internal.deployments.get_deployment_statuses(
-
client.internal.deployments.get_builds(...) -> AsyncHttpResponse[typing.List[DeploymentBuild]] +
client.internal.deployments.get_builds(...) -> AsyncHttpResponse[typing.List[DeploymentBuild]]
@@ -10152,7 +10152,7 @@ client.internal.deployments.get_builds(
-
client.internal.deployments.get_code_upload_url(...) -> AsyncHttpResponse[PresignedUrlObject] +
client.internal.deployments.get_code_upload_url(...) -> AsyncHttpResponse[PresignedUrlObject]
@@ -10232,7 +10232,7 @@ client.internal.deployments.get_code_upload_url(
-
client.internal.deployments.get_suggested_endpoint(...) -> AsyncHttpResponse[GetSuggestedDeploymentEndpointResponse] +
client.internal.deployments.get_suggested_endpoint(...) -> AsyncHttpResponse[GetSuggestedDeploymentEndpointResponse]
@@ -10349,7 +10349,7 @@ client.internal.deployments.get_suggested_endpoint(
## Internal Applications -
client.internal.applications.promote_rollout(...) -> AsyncHttpResponse[None] +
client.internal.applications.promote_rollout(...) -> AsyncHttpResponse[None]
@@ -10429,7 +10429,7 @@ client.internal.applications.promote_rollout(
-
client.internal.applications.get_pod_template_hash_to_deployment_version(...) -> AsyncHttpResponse[typing.Dict[str, float]] +
client.internal.applications.get_pod_template_hash_to_deployment_version(...) -> AsyncHttpResponse[typing.Dict[str, float]]
@@ -10510,7 +10510,7 @@ client.internal.applications.get_pod_template_hash_to_deployment_version(
## Internal Metrics -
client.internal.metrics.get_charts(...) -> AsyncHttpResponse[GetChartsResponse] +
client.internal.metrics.get_charts(...) -> AsyncHttpResponse[GetChartsResponse]
@@ -10628,7 +10628,7 @@ client.internal.metrics.get_charts(
## Internal Vcs -
client.internal.vcs.get_repository_details(...) -> AsyncHttpResponse[GitRepositoryExistsResponse] +
client.internal.vcs.get_repository_details(...) -> AsyncHttpResponse[GitRepositoryExistsResponse]
@@ -10693,7 +10693,7 @@ client.internal.vcs.get_repository_details(
-
client.internal.vcs.get_authenticated_url(...) -> AsyncHttpResponse[GetAuthenticatedVcsurlResponse] +
client.internal.vcs.get_authenticated_url(...) -> AsyncHttpResponse[GetAuthenticatedVcsurlResponse]
@@ -10751,7 +10751,7 @@ client.internal.vcs.get_authenticated_url(
## Internal DockerRegistries -
client.internal.docker_registries.create_repository(...) -> AsyncHttpResponse[DockerRegistriesCreateRepositoryResponse] +
client.internal.docker_registries.create_repository(...) -> AsyncHttpResponse[DockerRegistriesCreateRepositoryResponse]
@@ -10840,7 +10840,7 @@ client.internal.docker_registries.create_repository(
-
client.internal.docker_registries.get_credentials(...) -> AsyncHttpResponse[DockerRegistriesGetCredentialsResponse] +
client.internal.docker_registries.get_credentials(...) -> AsyncHttpResponse[DockerRegistriesGetCredentialsResponse]
@@ -10921,7 +10921,7 @@ client.internal.docker_registries.get_credentials(
## Internal Workflows -
client.internal.workflows.execute_workflow(...) -> AsyncHttpResponse[WorkflowsExecuteWorkflowResponse] +
client.internal.workflows.execute_workflow(...) -> AsyncHttpResponse[WorkflowsExecuteWorkflowResponse]
@@ -11009,7 +11009,7 @@ client.internal.workflows.execute_workflow(
## Internal BuildLogs -
client.internal.build_logs.get(...) -> AsyncHttpResponse[LogsResponse] +
client.internal.build_logs.get(...) -> AsyncHttpResponse[LogsResponse]
@@ -11134,7 +11134,7 @@ client.internal.build_logs.get(
## Internal ArtifactVersions -
client.internal.artifact_versions.list(...) -> AsyncPager[ +
client.internal.artifact_versions.list(...) -> AsyncPager[ InternalListArtifactVersionsResponseDataItem, InternalListArtifactVersionsResponse, ] @@ -11311,7 +11311,7 @@ for page in response.iter_pages():
## Internal Ml -
client.internal.ml.apply(...) -> AsyncHttpResponse[ApplyMlEntityResponse] +
client.internal.ml.apply(...) -> AsyncHttpResponse[ApplyMlEntityResponse]
@@ -11373,7 +11373,7 @@ client.internal.ml.apply(
-
client.internal.ml.delete(...) -> AsyncHttpResponse[EmptyResponse] +
client.internal.ml.delete(...) -> AsyncHttpResponse[EmptyResponse]
diff --git a/src/truefoundry_sdk/application_versions/raw_client.py b/src/truefoundry_sdk/application_versions/raw_client.py index f9050ce5..fb685a39 100644 --- a/src/truefoundry_sdk/application_versions/raw_client.py +++ b/src/truefoundry_sdk/application_versions/raw_client.py @@ -87,7 +87,7 @@ def list( _get_next = lambda: self.list( id, limit=limit, - offset=offset + len(_items), + offset=offset + len(_items or []), version=version, deployment_id=deployment_id, request_options=request_options, @@ -256,7 +256,7 @@ async def _get_next(): return await self.list( id, limit=limit, - offset=offset + len(_items), + offset=offset + len(_items or []), version=version, deployment_id=deployment_id, request_options=request_options, diff --git a/src/truefoundry_sdk/applications/raw_client.py b/src/truefoundry_sdk/applications/raw_client.py index 7f4fb398..8fb2e990 100644 --- a/src/truefoundry_sdk/applications/raw_client.py +++ b/src/truefoundry_sdk/applications/raw_client.py @@ -160,7 +160,7 @@ def list( _has_next = True _get_next = lambda: self.list( limit=limit, - offset=offset + len(_items), + offset=offset + len(_items or []), application_id=application_id, workspace_id=workspace_id, application_name=application_name, @@ -800,7 +800,7 @@ async def list( async def _get_next(): return await self.list( limit=limit, - offset=offset + len(_items), + offset=offset + len(_items or []), application_id=application_id, workspace_id=workspace_id, application_name=application_name, diff --git a/src/truefoundry_sdk/artifact_versions/raw_client.py b/src/truefoundry_sdk/artifact_versions/raw_client.py index 62961921..335f56fd 100644 --- a/src/truefoundry_sdk/artifact_versions/raw_client.py +++ b/src/truefoundry_sdk/artifact_versions/raw_client.py @@ -286,7 +286,7 @@ def list( version=version, run_ids=run_ids, run_steps=run_steps, - offset=offset + len(_items), + offset=offset + len(_items or []), limit=limit, include_internal_metadata=include_internal_metadata, request_options=request_options, @@ -886,7 +886,7 @@ async def _get_next(): version=version, run_ids=run_ids, run_steps=run_steps, - offset=offset + len(_items), + offset=offset + len(_items or []), limit=limit, include_internal_metadata=include_internal_metadata, request_options=request_options, diff --git a/src/truefoundry_sdk/artifacts/raw_client.py b/src/truefoundry_sdk/artifacts/raw_client.py index 1160b1ba..4b2b8b32 100644 --- a/src/truefoundry_sdk/artifacts/raw_client.py +++ b/src/truefoundry_sdk/artifacts/raw_client.py @@ -189,7 +189,7 @@ def list( fqn=fqn, ml_repo_id=ml_repo_id, name=name, - offset=offset + len(_items), + offset=offset + len(_items or []), limit=limit, run_id=run_id, include_empty_artifacts=include_empty_artifacts, @@ -437,7 +437,7 @@ async def _get_next(): fqn=fqn, ml_repo_id=ml_repo_id, name=name, - offset=offset + len(_items), + offset=offset + len(_items or []), limit=limit, run_id=run_id, include_empty_artifacts=include_empty_artifacts, diff --git a/src/truefoundry_sdk/clusters/raw_client.py b/src/truefoundry_sdk/clusters/raw_client.py index df051ad0..8bb981dd 100644 --- a/src/truefoundry_sdk/clusters/raw_client.py +++ b/src/truefoundry_sdk/clusters/raw_client.py @@ -82,7 +82,7 @@ def list( _has_next = True _get_next = lambda: self.list( limit=limit, - offset=offset + len(_items), + offset=offset + len(_items or []), request_options=request_options, ) return SyncPager(has_next=_has_next, items=_items, get_next=_get_next, response=_parsed_response) @@ -496,7 +496,7 @@ async def list( async def _get_next(): return await self.list( limit=limit, - offset=offset + len(_items), + offset=offset + len(_items or []), request_options=request_options, ) diff --git a/src/truefoundry_sdk/core/client_wrapper.py b/src/truefoundry_sdk/core/client_wrapper.py index 6cec980f..18d1f335 100644 --- a/src/truefoundry_sdk/core/client_wrapper.py +++ b/src/truefoundry_sdk/core/client_wrapper.py @@ -21,9 +21,13 @@ def __init__( self._timeout = timeout def get_headers(self) -> typing.Dict[str, str]: + import platform + headers: typing.Dict[str, str] = { "User-Agent": "truefoundry-sdk/0.0.0", "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": "truefoundry-sdk", "X-Fern-SDK-Version": "0.0.0", **(self.get_custom_headers() or {}), diff --git a/src/truefoundry_sdk/core/http_client.py b/src/truefoundry_sdk/core/http_client.py index f4a7c071..7c6c936f 100644 --- a/src/truefoundry_sdk/core/http_client.py +++ b/src/truefoundry_sdk/core/http_client.py @@ -5,7 +5,6 @@ import re import time import typing -import urllib.parse from contextlib import asynccontextmanager, contextmanager from random import random @@ -123,6 +122,30 @@ def _should_retry(response: httpx.Response) -> bool: return response.status_code >= 500 or response.status_code in retryable_400s +def _build_url(base_url: str, path: typing.Optional[str]) -> str: + """ + Build a full URL by joining a base URL with a path. + + This function correctly handles base URLs that contain path prefixes (e.g., tenant-based URLs) + by using string concatenation instead of urllib.parse.urljoin(), which would incorrectly + strip path components when the path starts with '/'. + + Example: + >>> _build_url("https://cloud.example.com/org/tenant/api", "/users") + 'https://cloud.example.com/org/tenant/api/users' + + Args: + base_url: The base URL, which may contain path prefixes. + path: The path to append. Can be None or empty string. + + Returns: + The full URL with base_url and path properly joined. + """ + if not path: + return base_url + return f"{base_url.rstrip('/')}/{path.lstrip('/')}" + + def _maybe_filter_none_from_multipart_data( data: typing.Optional[typing.Any], request_files: typing.Optional[RequestFiles], @@ -192,8 +215,19 @@ def get_request_body( # If both data and json are None, we send json data in the event extra properties are specified json_body = maybe_filter_request_body(json, request_options, omit) - # If you have an empty JSON body, you should just send None - return (json_body if json_body != {} else None), data_body if data_body != {} else None + has_additional_body_parameters = bool( + request_options is not None and request_options.get("additional_body_parameters") + ) + + # Only collapse empty dict to None when the body was not explicitly provided + # and there are no additional body parameters. This preserves explicit empty + # bodies (e.g., when an endpoint has a request body type but all fields are optional). + if json_body == {} and json is None and not has_additional_body_parameters: + json_body = None + if data_body == {} and data is None and not has_additional_body_parameters: + data_body = None + + return json_body, data_body class HttpClient: @@ -237,7 +271,7 @@ def request( ] = None, headers: typing.Optional[typing.Dict[str, typing.Any]] = None, request_options: typing.Optional[RequestOptions] = None, - retries: int = 2, + retries: int = 0, omit: typing.Optional[typing.Any] = None, force_multipart: typing.Optional[bool] = None, ) -> httpx.Response: @@ -261,9 +295,29 @@ def request( data_body = _maybe_filter_none_from_multipart_data(data_body, request_files, force_multipart) + # Compute encoded params separately to avoid passing empty list to httpx + # (httpx strips existing query params from URL when params=[] is passed) + _encoded_params = encode_query( + jsonable_encoder( + remove_none_from_dict( + remove_omit_from_dict( + { + **(params if params is not None else {}), + **( + request_options.get("additional_query_parameters", {}) or {} + if request_options is not None + else {} + ), + }, + omit, + ) + ) + ) + ) + response = self.httpx_client.request( method=method, - url=urllib.parse.urljoin(f"{base_url}/", path), + url=_build_url(base_url, path), headers=jsonable_encoder( remove_none_from_dict( { @@ -273,23 +327,7 @@ def request( } ) ), - params=encode_query( - jsonable_encoder( - remove_none_from_dict( - remove_omit_from_dict( - { - **(params if params is not None else {}), - **( - request_options.get("additional_query_parameters", {}) or {} - if request_options is not None - else {} - ), - }, - omit, - ) - ) - ) - ), + params=_encoded_params if _encoded_params else None, json=json_body, data=data_body, content=content, @@ -297,9 +335,9 @@ def request( timeout=timeout, ) - max_retries: int = request_options.get("max_retries", 0) if request_options is not None else 0 + max_retries: int = request_options.get("max_retries", 2) if request_options is not None else 2 if _should_retry(response=response): - if max_retries > retries: + if retries < max_retries: time.sleep(_retry_timeout(response=response, retries=retries)) return self.request( path=path, @@ -336,7 +374,7 @@ def stream( ] = None, headers: typing.Optional[typing.Dict[str, typing.Any]] = None, request_options: typing.Optional[RequestOptions] = None, - retries: int = 2, + retries: int = 0, omit: typing.Optional[typing.Any] = None, force_multipart: typing.Optional[bool] = None, ) -> typing.Iterator[httpx.Response]: @@ -360,9 +398,29 @@ def stream( data_body = _maybe_filter_none_from_multipart_data(data_body, request_files, force_multipart) + # Compute encoded params separately to avoid passing empty list to httpx + # (httpx strips existing query params from URL when params=[] is passed) + _encoded_params = encode_query( + jsonable_encoder( + remove_none_from_dict( + remove_omit_from_dict( + { + **(params if params is not None else {}), + **( + request_options.get("additional_query_parameters", {}) + if request_options is not None + else {} + ), + }, + omit, + ) + ) + ) + ) + with self.httpx_client.stream( method=method, - url=urllib.parse.urljoin(f"{base_url}/", path), + url=_build_url(base_url, path), headers=jsonable_encoder( remove_none_from_dict( { @@ -372,23 +430,7 @@ def stream( } ) ), - params=encode_query( - jsonable_encoder( - remove_none_from_dict( - remove_omit_from_dict( - { - **(params if params is not None else {}), - **( - request_options.get("additional_query_parameters", {}) - if request_options is not None - else {} - ), - }, - omit, - ) - ) - ) - ), + params=_encoded_params if _encoded_params else None, json=json_body, data=data_body, content=content, @@ -446,7 +488,7 @@ async def request( ] = None, headers: typing.Optional[typing.Dict[str, typing.Any]] = None, request_options: typing.Optional[RequestOptions] = None, - retries: int = 2, + retries: int = 0, omit: typing.Optional[typing.Any] = None, force_multipart: typing.Optional[bool] = None, ) -> httpx.Response: @@ -473,10 +515,30 @@ async def request( # Get headers (supports async token providers) _headers = await self._get_headers() + # Compute encoded params separately to avoid passing empty list to httpx + # (httpx strips existing query params from URL when params=[] is passed) + _encoded_params = encode_query( + jsonable_encoder( + remove_none_from_dict( + remove_omit_from_dict( + { + **(params if params is not None else {}), + **( + request_options.get("additional_query_parameters", {}) or {} + if request_options is not None + else {} + ), + }, + omit, + ) + ) + ) + ) + # Add the input to each of these and do None-safety checks response = await self.httpx_client.request( method=method, - url=urllib.parse.urljoin(f"{base_url}/", path), + url=_build_url(base_url, path), headers=jsonable_encoder( remove_none_from_dict( { @@ -486,23 +548,7 @@ async def request( } ) ), - params=encode_query( - jsonable_encoder( - remove_none_from_dict( - remove_omit_from_dict( - { - **(params if params is not None else {}), - **( - request_options.get("additional_query_parameters", {}) or {} - if request_options is not None - else {} - ), - }, - omit, - ) - ) - ) - ), + params=_encoded_params if _encoded_params else None, json=json_body, data=data_body, content=content, @@ -510,9 +556,9 @@ async def request( timeout=timeout, ) - max_retries: int = request_options.get("max_retries", 0) if request_options is not None else 0 + max_retries: int = request_options.get("max_retries", 2) if request_options is not None else 2 if _should_retry(response=response): - if max_retries > retries: + if retries < max_retries: await asyncio.sleep(_retry_timeout(response=response, retries=retries)) return await self.request( path=path, @@ -548,7 +594,7 @@ async def stream( ] = None, headers: typing.Optional[typing.Dict[str, typing.Any]] = None, request_options: typing.Optional[RequestOptions] = None, - retries: int = 2, + retries: int = 0, omit: typing.Optional[typing.Any] = None, force_multipart: typing.Optional[bool] = None, ) -> typing.AsyncIterator[httpx.Response]: @@ -575,9 +621,29 @@ async def stream( # Get headers (supports async token providers) _headers = await self._get_headers() + # Compute encoded params separately to avoid passing empty list to httpx + # (httpx strips existing query params from URL when params=[] is passed) + _encoded_params = encode_query( + jsonable_encoder( + remove_none_from_dict( + remove_omit_from_dict( + { + **(params if params is not None else {}), + **( + request_options.get("additional_query_parameters", {}) + if request_options is not None + else {} + ), + }, + omit=omit, + ) + ) + ) + ) + async with self.httpx_client.stream( method=method, - url=urllib.parse.urljoin(f"{base_url}/", path), + url=_build_url(base_url, path), headers=jsonable_encoder( remove_none_from_dict( { @@ -587,23 +653,7 @@ async def stream( } ) ), - params=encode_query( - jsonable_encoder( - remove_none_from_dict( - remove_omit_from_dict( - { - **(params if params is not None else {}), - **( - request_options.get("additional_query_parameters", {}) - if request_options is not None - else {} - ), - }, - omit=omit, - ) - ) - ) - ), + params=_encoded_params if _encoded_params else None, json=json_body, data=data_body, content=content, diff --git a/src/truefoundry_sdk/core/http_response.py b/src/truefoundry_sdk/core/http_response.py index 2479747e..00bb1096 100644 --- a/src/truefoundry_sdk/core/http_response.py +++ b/src/truefoundry_sdk/core/http_response.py @@ -9,7 +9,7 @@ class BaseHttpResponse: - """Minimalist HTTP response wrapper that exposes response headers.""" + """Minimalist HTTP response wrapper that exposes response headers and status code.""" _response: httpx.Response @@ -20,6 +20,10 @@ def __init__(self, response: httpx.Response): def headers(self) -> Dict[str, str]: return dict(self._response.headers) + @property + def status_code(self) -> int: + return self._response.status_code + class HttpResponse(Generic[T], BaseHttpResponse): """HTTP response wrapper that exposes response headers and data.""" diff --git a/src/truefoundry_sdk/core/jsonable_encoder.py b/src/truefoundry_sdk/core/jsonable_encoder.py index afee3662..f8beaeaf 100644 --- a/src/truefoundry_sdk/core/jsonable_encoder.py +++ b/src/truefoundry_sdk/core/jsonable_encoder.py @@ -30,6 +30,10 @@ def jsonable_encoder(obj: Any, custom_encoder: Optional[Dict[Any, Callable[[Any], Any]]] = None) -> Any: custom_encoder = custom_encoder or {} + # Generated SDKs use Ellipsis (`...`) as the sentinel value for "OMIT". + # OMIT values should be excluded from serialized payloads. + if obj is Ellipsis: + return None if custom_encoder: if type(obj) in custom_encoder: return custom_encoder[type(obj)](obj) @@ -70,6 +74,8 @@ def jsonable_encoder(obj: Any, custom_encoder: Optional[Dict[Any, Callable[[Any] allowed_keys = set(obj.keys()) for key, value in obj.items(): if key in allowed_keys: + if value is Ellipsis: + continue encoded_key = jsonable_encoder(key, custom_encoder=custom_encoder) encoded_value = jsonable_encoder(value, custom_encoder=custom_encoder) encoded_dict[encoded_key] = encoded_value @@ -77,6 +83,8 @@ def jsonable_encoder(obj: Any, custom_encoder: Optional[Dict[Any, Callable[[Any] if isinstance(obj, (list, set, frozenset, GeneratorType, tuple)): encoded_list = [] for item in obj: + if item is Ellipsis: + continue encoded_list.append(jsonable_encoder(item, custom_encoder=custom_encoder)) return encoded_list diff --git a/src/truefoundry_sdk/core/pydantic_utilities.py b/src/truefoundry_sdk/core/pydantic_utilities.py index 185e5c4f..789081b0 100644 --- a/src/truefoundry_sdk/core/pydantic_utilities.py +++ b/src/truefoundry_sdk/core/pydantic_utilities.py @@ -2,10 +2,35 @@ # nopycln: file import datetime as dt +import inspect +import json +import logging from collections import defaultdict -from typing import Any, Callable, ClassVar, Dict, List, Mapping, Optional, Set, Tuple, Type, TypeVar, Union, cast +from dataclasses import asdict +from typing import ( + TYPE_CHECKING, + Any, + Callable, + ClassVar, + Dict, + List, + Mapping, + Optional, + Set, + Tuple, + Type, + TypeVar, + Union, + cast, +) import pydantic +import typing_extensions + +_logger = logging.getLogger(__name__) + +if TYPE_CHECKING: + from .http_sse._models import ServerSentEvent IS_PYDANTIC_V2 = pydantic.VERSION.startswith("2.") @@ -36,8 +61,212 @@ Model = TypeVar("Model", bound=pydantic.BaseModel) +def _get_discriminator_and_variants(type_: Type[Any]) -> Tuple[Optional[str], Optional[List[Type[Any]]]]: + """ + Extract the discriminator field name and union variants from a discriminated union type. + Supports Annotated[Union[...], Field(discriminator=...)] patterns. + Returns (discriminator, variants) or (None, None) if not a discriminated union. + """ + origin = typing_extensions.get_origin(type_) + + if origin is typing_extensions.Annotated: + args = typing_extensions.get_args(type_) + if len(args) >= 2: + inner_type = args[0] + # Check annotations for discriminator + discriminator = None + for annotation in args[1:]: + if hasattr(annotation, "discriminator"): + discriminator = getattr(annotation, "discriminator", None) + break + + if discriminator: + inner_origin = typing_extensions.get_origin(inner_type) + if inner_origin is Union: + variants = list(typing_extensions.get_args(inner_type)) + return discriminator, variants + return None, None + + +def _get_field_annotation(model: Type[Any], field_name: str) -> Optional[Type[Any]]: + """Get the type annotation of a field from a Pydantic model.""" + if IS_PYDANTIC_V2: + fields = getattr(model, "model_fields", {}) + field_info = fields.get(field_name) + if field_info: + return cast(Optional[Type[Any]], field_info.annotation) + else: + fields = getattr(model, "__fields__", {}) + field_info = fields.get(field_name) + if field_info: + return cast(Optional[Type[Any]], field_info.outer_type_) + return None + + +def _find_variant_by_discriminator( + variants: List[Type[Any]], + discriminator: str, + discriminator_value: Any, +) -> Optional[Type[Any]]: + """Find the union variant that matches the discriminator value.""" + for variant in variants: + if not (inspect.isclass(variant) and issubclass(variant, pydantic.BaseModel)): + continue + + disc_annotation = _get_field_annotation(variant, discriminator) + if disc_annotation and is_literal_type(disc_annotation): + literal_args = get_args(disc_annotation) + if literal_args and literal_args[0] == discriminator_value: + return variant + return None + + +def _is_string_type(type_: Type[Any]) -> bool: + """Check if a type is str or Optional[str].""" + if type_ is str: + return True + + origin = typing_extensions.get_origin(type_) + if origin is Union: + args = typing_extensions.get_args(type_) + # Optional[str] = Union[str, None] + non_none_args = [a for a in args if a is not type(None)] + if len(non_none_args) == 1 and non_none_args[0] is str: + return True + + return False + + +def parse_sse_obj(sse: "ServerSentEvent", type_: Type[T]) -> T: + """ + Parse a ServerSentEvent into the appropriate type. + + Handles two scenarios based on where the discriminator field is located: + + 1. Data-level discrimination: The discriminator (e.g., 'type') is inside the 'data' payload. + The union describes the data content, not the SSE envelope. + -> Returns: json.loads(data) parsed into the type + + Example: ChatStreamResponse with discriminator='type' + Input: ServerSentEvent(event="message", data='{"type": "content-delta", ...}', id="") + Output: ContentDeltaEvent (parsed from data, SSE envelope stripped) + + 2. Event-level discrimination: The discriminator (e.g., 'event') is at the SSE event level. + The union describes the full SSE event structure. + -> Returns: SSE envelope with 'data' field JSON-parsed only if the variant expects non-string + + Example: JobStreamResponse with discriminator='event' + Input: ServerSentEvent(event="ERROR", data='{"code": "FAILED", ...}', id="123") + Output: JobStreamResponse_Error with data as ErrorData object + + But for variants where data is str (like STATUS_UPDATE): + Input: ServerSentEvent(event="STATUS_UPDATE", data='{"status": "processing"}', id="1") + Output: JobStreamResponse_StatusUpdate with data as string (not parsed) + + Args: + sse: The ServerSentEvent object to parse + type_: The target discriminated union type + + Returns: + The parsed object of type T + + Note: + This function is only available in SDK contexts where http_sse module exists. + """ + sse_event = asdict(sse) + discriminator, variants = _get_discriminator_and_variants(type_) + + if discriminator is None or variants is None: + # Not a discriminated union - parse the data field as JSON + data_value = sse_event.get("data") + if isinstance(data_value, str) and data_value: + try: + parsed_data = json.loads(data_value) + return parse_obj_as(type_, parsed_data) + except json.JSONDecodeError as e: + _logger.warning( + "Failed to parse SSE data field as JSON: %s, data: %s", + e, + data_value[:100] if len(data_value) > 100 else data_value, + ) + return parse_obj_as(type_, sse_event) + + data_value = sse_event.get("data") + + # Check if discriminator is at the top level (event-level discrimination) + if discriminator in sse_event: + # Case 2: Event-level discrimination + # Find the matching variant to check if 'data' field needs JSON parsing + disc_value = sse_event.get(discriminator) + matching_variant = _find_variant_by_discriminator(variants, discriminator, disc_value) + + if matching_variant is not None: + # Check what type the variant expects for 'data' + data_type = _get_field_annotation(matching_variant, "data") + if data_type is not None and not _is_string_type(data_type): + # Variant expects non-string data - parse JSON + if isinstance(data_value, str) and data_value: + try: + parsed_data = json.loads(data_value) + new_object = dict(sse_event) + new_object["data"] = parsed_data + return parse_obj_as(type_, new_object) + except json.JSONDecodeError as e: + _logger.warning( + "Failed to parse SSE data field as JSON for event-level discrimination: %s, data: %s", + e, + data_value[:100] if len(data_value) > 100 else data_value, + ) + # Either no matching variant, data is string type, or JSON parse failed + return parse_obj_as(type_, sse_event) + + else: + # Case 1: Data-level discrimination + # The discriminator is inside the data payload - extract and parse data only + if isinstance(data_value, str) and data_value: + try: + parsed_data = json.loads(data_value) + return parse_obj_as(type_, parsed_data) + except json.JSONDecodeError as e: + _logger.warning( + "Failed to parse SSE data field as JSON for data-level discrimination: %s, data: %s", + e, + data_value[:100] if len(data_value) > 100 else data_value, + ) + return parse_obj_as(type_, sse_event) + + def parse_obj_as(type_: Type[T], object_: Any) -> T: - dealiased_object = convert_and_respect_annotation_metadata(object_=object_, annotation=type_, direction="read") + # convert_and_respect_annotation_metadata is required for TypedDict aliasing. + # + # For Pydantic models, whether we should pre-dealias depends on how the model encodes aliasing: + # - If the model uses real Pydantic aliases (pydantic.Field(alias=...)), then we must pass wire keys through + # unchanged so Pydantic can validate them. + # - If the model encodes aliasing only via FieldMetadata annotations, then we MUST pre-dealias because Pydantic + # will not recognize those aliases during validation. + if inspect.isclass(type_) and issubclass(type_, pydantic.BaseModel): + has_pydantic_aliases = False + if IS_PYDANTIC_V2: + for field_name, field_info in getattr(type_, "model_fields", {}).items(): # type: ignore[attr-defined] + alias = getattr(field_info, "alias", None) + if alias is not None and alias != field_name: + has_pydantic_aliases = True + break + else: + for field in getattr(type_, "__fields__", {}).values(): + alias = getattr(field, "alias", None) + name = getattr(field, "name", None) + if alias is not None and name is not None and alias != name: + has_pydantic_aliases = True + break + + dealiased_object = ( + object_ + if has_pydantic_aliases + else convert_and_respect_annotation_metadata(object_=object_, annotation=type_, direction="read") + ) + else: + dealiased_object = convert_and_respect_annotation_metadata(object_=object_, annotation=type_, direction="read") if IS_PYDANTIC_V2: adapter = pydantic.TypeAdapter(type_) # type: ignore[attr-defined] return adapter.validate_python(dealiased_object) @@ -59,6 +288,43 @@ class UniversalBaseModel(pydantic.BaseModel): protected_namespaces=(), ) + @pydantic.model_validator(mode="before") # type: ignore[attr-defined] + @classmethod + def _coerce_field_names_to_aliases(cls, data: Any) -> Any: + """ + Accept Python field names in input by rewriting them to their Pydantic aliases, + while avoiding silent collisions when a key could refer to multiple fields. + """ + if not isinstance(data, Mapping): + return data + + fields = getattr(cls, "model_fields", {}) # type: ignore[attr-defined] + name_to_alias: Dict[str, str] = {} + alias_to_name: Dict[str, str] = {} + + for name, field_info in fields.items(): + alias = getattr(field_info, "alias", None) or name + name_to_alias[name] = alias + if alias != name: + alias_to_name[alias] = name + + # Detect ambiguous keys: a key that is an alias for one field and a name for another. + ambiguous_keys = set(alias_to_name.keys()).intersection(set(name_to_alias.keys())) + for key in ambiguous_keys: + if key in data and name_to_alias[key] not in data: + raise ValueError( + f"Ambiguous input key '{key}': it is both a field name and an alias. " + "Provide the explicit alias key to disambiguate." + ) + + original_keys = set(data.keys()) + rewritten: Dict[str, Any] = dict(data) + for name, alias in name_to_alias.items(): + if alias != name and name in original_keys and alias not in rewritten: + rewritten[alias] = rewritten.pop(name) + + return rewritten + @pydantic.model_serializer(mode="plain", when_used="json") # type: ignore[attr-defined] def serialize_model(self) -> Any: # type: ignore[name-defined] serialized = self.dict() # type: ignore[attr-defined] @@ -71,6 +337,40 @@ class Config: smart_union = True json_encoders = {dt.datetime: serialize_datetime} + @pydantic.root_validator(pre=True) + def _coerce_field_names_to_aliases(cls, values: Any) -> Any: + """ + Pydantic v1 equivalent of _coerce_field_names_to_aliases. + """ + if not isinstance(values, Mapping): + return values + + fields = getattr(cls, "__fields__", {}) + name_to_alias: Dict[str, str] = {} + alias_to_name: Dict[str, str] = {} + + for name, field in fields.items(): + alias = getattr(field, "alias", None) or name + name_to_alias[name] = alias + if alias != name: + alias_to_name[alias] = name + + ambiguous_keys = set(alias_to_name.keys()).intersection(set(name_to_alias.keys())) + for key in ambiguous_keys: + if key in values and name_to_alias[key] not in values: + raise ValueError( + f"Ambiguous input key '{key}': it is both a field name and an alias. " + "Provide the explicit alias key to disambiguate." + ) + + original_keys = set(values.keys()) + rewritten: Dict[str, Any] = dict(values) + for name, alias in name_to_alias.items(): + if alias != name and name in original_keys and alias not in rewritten: + rewritten[alias] = rewritten.pop(name) + + return rewritten + @classmethod def model_construct(cls: Type["Model"], _fields_set: Optional[Set[str]] = None, **values: Any) -> "Model": dealiased_object = convert_and_respect_annotation_metadata(object_=values, annotation=cls, direction="read") diff --git a/src/truefoundry_sdk/data_directories/raw_client.py b/src/truefoundry_sdk/data_directories/raw_client.py index 9c3190fd..13c03d74 100644 --- a/src/truefoundry_sdk/data_directories/raw_client.py +++ b/src/truefoundry_sdk/data_directories/raw_client.py @@ -227,7 +227,7 @@ def list( ml_repo_id=ml_repo_id, name=name, limit=limit, - offset=offset + len(_items), + offset=offset + len(_items or []), request_options=request_options, ) return SyncPager(has_next=_has_next, items=_items, get_next=_get_next, response=_parsed_response) @@ -806,7 +806,7 @@ async def _get_next(): ml_repo_id=ml_repo_id, name=name, limit=limit, - offset=offset + len(_items), + offset=offset + len(_items or []), request_options=request_options, ) diff --git a/src/truefoundry_sdk/environments/raw_client.py b/src/truefoundry_sdk/environments/raw_client.py index 779c08c7..42bf0255 100644 --- a/src/truefoundry_sdk/environments/raw_client.py +++ b/src/truefoundry_sdk/environments/raw_client.py @@ -78,7 +78,7 @@ def list( _has_next = True _get_next = lambda: self.list( limit=limit, - offset=offset + len(_items), + offset=offset + len(_items or []), request_options=request_options, ) return SyncPager(has_next=_has_next, items=_items, get_next=_get_next, response=_parsed_response) @@ -309,7 +309,7 @@ async def list( async def _get_next(): return await self.list( limit=limit, - offset=offset + len(_items), + offset=offset + len(_items or []), request_options=request_options, ) diff --git a/src/truefoundry_sdk/internal/artifact_versions/raw_client.py b/src/truefoundry_sdk/internal/artifact_versions/raw_client.py index 4bbee054..56f5859c 100644 --- a/src/truefoundry_sdk/internal/artifact_versions/raw_client.py +++ b/src/truefoundry_sdk/internal/artifact_versions/raw_client.py @@ -112,7 +112,7 @@ def list( version=version, run_ids=run_ids, run_steps=run_steps, - offset=offset + len(_items), + offset=offset + len(_items or []), limit=limit, include_internal_metadata=include_internal_metadata, include_model_versions=include_model_versions, @@ -237,7 +237,7 @@ async def _get_next(): version=version, run_ids=run_ids, run_steps=run_steps, - offset=offset + len(_items), + offset=offset + len(_items or []), limit=limit, include_internal_metadata=include_internal_metadata, include_model_versions=include_model_versions, diff --git a/src/truefoundry_sdk/internal/docker_registries/types/docker_registries_create_repository_response.py b/src/truefoundry_sdk/internal/docker_registries/types/docker_registries_create_repository_response.py index 678c5e4c..68e866dc 100644 --- a/src/truefoundry_sdk/internal/docker_registries/types/docker_registries_create_repository_response.py +++ b/src/truefoundry_sdk/internal/docker_registries/types/docker_registries_create_repository_response.py @@ -9,7 +9,9 @@ class DockerRegistriesCreateRepositoryResponse(UniversalBaseModel): - repo_name: typing_extensions.Annotated[typing.Optional[str], FieldMetadata(alias="repoName")] = None + repo_name: typing_extensions.Annotated[typing.Optional[str], FieldMetadata(alias="repoName")] = pydantic.Field( + alias="repoName", default=None + ) if IS_PYDANTIC_V2: model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow") # type: ignore # Pydantic v2 diff --git a/src/truefoundry_sdk/internal/docker_registries/types/docker_registries_get_credentials_response.py b/src/truefoundry_sdk/internal/docker_registries/types/docker_registries_get_credentials_response.py index 033ffe99..002717a9 100644 --- a/src/truefoundry_sdk/internal/docker_registries/types/docker_registries_get_credentials_response.py +++ b/src/truefoundry_sdk/internal/docker_registries/types/docker_registries_get_credentials_response.py @@ -15,7 +15,7 @@ class DockerRegistriesGetCredentialsResponse(UniversalBaseModel): """ registry_url: typing_extensions.Annotated[typing.Optional[str], FieldMetadata(alias="registryUrl")] = ( - pydantic.Field(default=None) + pydantic.Field(alias="registryUrl", default=None) ) """ Docker registry URL diff --git a/src/truefoundry_sdk/internal/workflows/types/workflows_execute_workflow_response.py b/src/truefoundry_sdk/internal/workflows/types/workflows_execute_workflow_response.py index a1255a82..73238ca3 100644 --- a/src/truefoundry_sdk/internal/workflows/types/workflows_execute_workflow_response.py +++ b/src/truefoundry_sdk/internal/workflows/types/workflows_execute_workflow_response.py @@ -10,7 +10,7 @@ class WorkflowsExecuteWorkflowResponse(UniversalBaseModel): execution_name: typing_extensions.Annotated[typing.Optional[str], FieldMetadata(alias="executionName")] = ( - pydantic.Field(default=None) + pydantic.Field(alias="executionName", default=None) ) """ The name of the execution diff --git a/src/truefoundry_sdk/jobs/raw_client.py b/src/truefoundry_sdk/jobs/raw_client.py index c00e5442..fbc137b4 100644 --- a/src/truefoundry_sdk/jobs/raw_client.py +++ b/src/truefoundry_sdk/jobs/raw_client.py @@ -123,7 +123,7 @@ def list_runs( _get_next = lambda: self.list_runs( job_id, limit=limit, - offset=offset + len(_items), + offset=offset + len(_items or []), search_prefix=search_prefix, sort_by=sort_by, order=order, @@ -604,7 +604,7 @@ async def _get_next(): return await self.list_runs( job_id, limit=limit, - offset=offset + len(_items), + offset=offset + len(_items or []), search_prefix=search_prefix, sort_by=sort_by, order=order, diff --git a/src/truefoundry_sdk/ml_repos/raw_client.py b/src/truefoundry_sdk/ml_repos/raw_client.py index 10afdce8..c63fafe9 100644 --- a/src/truefoundry_sdk/ml_repos/raw_client.py +++ b/src/truefoundry_sdk/ml_repos/raw_client.py @@ -291,7 +291,7 @@ def list( _get_next = lambda: self.list( name=name, limit=limit, - offset=offset + len(_items), + offset=offset + len(_items or []), request_options=request_options, ) return SyncPager(has_next=_has_next, items=_items, get_next=_get_next, response=_parsed_response) @@ -579,7 +579,7 @@ async def _get_next(): return await self.list( name=name, limit=limit, - offset=offset + len(_items), + offset=offset + len(_items or []), request_options=request_options, ) diff --git a/src/truefoundry_sdk/model_versions/raw_client.py b/src/truefoundry_sdk/model_versions/raw_client.py index f7138a4d..2fa4d564 100644 --- a/src/truefoundry_sdk/model_versions/raw_client.py +++ b/src/truefoundry_sdk/model_versions/raw_client.py @@ -278,7 +278,7 @@ def list( version=version, run_ids=run_ids, run_steps=run_steps, - offset=offset + len(_items), + offset=offset + len(_items or []), limit=limit, include_internal_metadata=include_internal_metadata, request_options=request_options, @@ -561,7 +561,7 @@ async def _get_next(): version=version, run_ids=run_ids, run_steps=run_steps, - offset=offset + len(_items), + offset=offset + len(_items or []), limit=limit, include_internal_metadata=include_internal_metadata, request_options=request_options, diff --git a/src/truefoundry_sdk/models/raw_client.py b/src/truefoundry_sdk/models/raw_client.py index eab7680d..96efc07c 100644 --- a/src/truefoundry_sdk/models/raw_client.py +++ b/src/truefoundry_sdk/models/raw_client.py @@ -189,7 +189,7 @@ def list( fqn=fqn, ml_repo_id=ml_repo_id, name=name, - offset=offset + len(_items), + offset=offset + len(_items or []), limit=limit, run_id=run_id, include_empty_models=include_empty_models, @@ -437,7 +437,7 @@ async def _get_next(): fqn=fqn, ml_repo_id=ml_repo_id, name=name, - offset=offset + len(_items), + offset=offset + len(_items or []), limit=limit, run_id=run_id, include_empty_models=include_empty_models, diff --git a/src/truefoundry_sdk/personal_access_tokens/raw_client.py b/src/truefoundry_sdk/personal_access_tokens/raw_client.py index 7234e8fd..5d9707bc 100644 --- a/src/truefoundry_sdk/personal_access_tokens/raw_client.py +++ b/src/truefoundry_sdk/personal_access_tokens/raw_client.py @@ -79,7 +79,7 @@ def list( _has_next = True _get_next = lambda: self.list( limit=limit, - offset=offset + len(_items), + offset=offset + len(_items or []), request_options=request_options, ) return SyncPager(has_next=_has_next, items=_items, get_next=_get_next, response=_parsed_response) @@ -382,7 +382,7 @@ async def list( async def _get_next(): return await self.list( limit=limit, - offset=offset + len(_items), + offset=offset + len(_items or []), request_options=request_options, ) diff --git a/src/truefoundry_sdk/prompt_versions/raw_client.py b/src/truefoundry_sdk/prompt_versions/raw_client.py index 9b62c9f7..41606c88 100644 --- a/src/truefoundry_sdk/prompt_versions/raw_client.py +++ b/src/truefoundry_sdk/prompt_versions/raw_client.py @@ -264,7 +264,7 @@ def list( ml_repo_id=ml_repo_id, name=name, version=version, - offset=offset + len(_items), + offset=offset + len(_items or []), limit=limit, request_options=request_options, ) @@ -532,7 +532,7 @@ async def _get_next(): ml_repo_id=ml_repo_id, name=name, version=version, - offset=offset + len(_items), + offset=offset + len(_items or []), limit=limit, request_options=request_options, ) diff --git a/src/truefoundry_sdk/prompts/raw_client.py b/src/truefoundry_sdk/prompts/raw_client.py index 1eba8eb8..eabef155 100644 --- a/src/truefoundry_sdk/prompts/raw_client.py +++ b/src/truefoundry_sdk/prompts/raw_client.py @@ -185,7 +185,7 @@ def list( fqn=fqn, ml_repo_id=ml_repo_id, name=name, - offset=offset + len(_items), + offset=offset + len(_items or []), limit=limit, include_empty_prompts=include_empty_prompts, request_options=request_options, @@ -428,7 +428,7 @@ async def _get_next(): fqn=fqn, ml_repo_id=ml_repo_id, name=name, - offset=offset + len(_items), + offset=offset + len(_items or []), limit=limit, include_empty_prompts=include_empty_prompts, request_options=request_options, diff --git a/src/truefoundry_sdk/secret_groups/raw_client.py b/src/truefoundry_sdk/secret_groups/raw_client.py index 9cb9943d..6b0b2b22 100644 --- a/src/truefoundry_sdk/secret_groups/raw_client.py +++ b/src/truefoundry_sdk/secret_groups/raw_client.py @@ -94,7 +94,7 @@ def list( _has_next = True _get_next = lambda: self.list( limit=limit, - offset=offset + len(_items), + offset=offset + len(_items or []), fqn=fqn, search=search, request_options=request_options, @@ -578,7 +578,7 @@ async def list( async def _get_next(): return await self.list( limit=limit, - offset=offset + len(_items), + offset=offset + len(_items or []), fqn=fqn, search=search, request_options=request_options, diff --git a/src/truefoundry_sdk/secrets/raw_client.py b/src/truefoundry_sdk/secrets/raw_client.py index 44d1489d..57ca2f8f 100644 --- a/src/truefoundry_sdk/secrets/raw_client.py +++ b/src/truefoundry_sdk/secrets/raw_client.py @@ -95,7 +95,7 @@ def list( _has_next = True _get_next = lambda: self.list( limit=limit, - offset=offset + len(_items), + offset=offset + len(_items or []), secret_fqns=secret_fqns, secret_group_id=secret_group_id, with_value=with_value, @@ -336,7 +336,7 @@ async def list( async def _get_next(): return await self.list( limit=limit, - offset=offset + len(_items), + offset=offset + len(_items or []), secret_fqns=secret_fqns, secret_group_id=secret_group_id, with_value=with_value, diff --git a/src/truefoundry_sdk/teams/raw_client.py b/src/truefoundry_sdk/teams/raw_client.py index a57e0b31..79b17b2a 100644 --- a/src/truefoundry_sdk/teams/raw_client.py +++ b/src/truefoundry_sdk/teams/raw_client.py @@ -85,7 +85,7 @@ def list( _has_next = True _get_next = lambda: self.list( limit=limit, - offset=offset + len(_items), + offset=offset + len(_items or []), type=type, request_options=request_options, ) @@ -344,7 +344,7 @@ async def list( async def _get_next(): return await self.list( limit=limit, - offset=offset + len(_items), + offset=offset + len(_items or []), type=type, request_options=request_options, ) diff --git a/src/truefoundry_sdk/types/account.py b/src/truefoundry_sdk/types/account.py index 9a7f21ea..977ffa09 100644 --- a/src/truefoundry_sdk/types/account.py +++ b/src/truefoundry_sdk/types/account.py @@ -13,16 +13,26 @@ class Account(UniversalBaseModel): id: typing.Optional[str] = None name: typing.Optional[str] = None - tenant_name: typing_extensions.Annotated[str, FieldMetadata(alias="tenantName")] + tenant_name: typing_extensions.Annotated[str, FieldMetadata(alias="tenantName")] = pydantic.Field( + alias="tenantName" + ) manifest: typing.Dict[str, typing.Any] = pydantic.Field() """ Account manifest """ - created_by_subject: typing_extensions.Annotated[Subject, FieldMetadata(alias="createdBySubject")] - created_at: typing_extensions.Annotated[typing.Optional[dt.datetime], FieldMetadata(alias="createdAt")] = None - updated_at: typing_extensions.Annotated[typing.Optional[dt.datetime], FieldMetadata(alias="updatedAt")] = None - is_editable: typing_extensions.Annotated[bool, FieldMetadata(alias="isEditable")] + created_by_subject: typing_extensions.Annotated[Subject, FieldMetadata(alias="createdBySubject")] = pydantic.Field( + alias="createdBySubject" + ) + created_at: typing_extensions.Annotated[typing.Optional[dt.datetime], FieldMetadata(alias="createdAt")] = ( + pydantic.Field(alias="createdAt", default=None) + ) + updated_at: typing_extensions.Annotated[typing.Optional[dt.datetime], FieldMetadata(alias="updatedAt")] = ( + pydantic.Field(alias="updatedAt", default=None) + ) + is_editable: typing_extensions.Annotated[bool, FieldMetadata(alias="isEditable")] = pydantic.Field( + alias="isEditable" + ) if IS_PYDANTIC_V2: model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow") # type: ignore # Pydantic v2 diff --git a/src/truefoundry_sdk/types/addon_component.py b/src/truefoundry_sdk/types/addon_component.py index 806f2c43..dbb0b9cd 100644 --- a/src/truefoundry_sdk/types/addon_component.py +++ b/src/truefoundry_sdk/types/addon_component.py @@ -18,24 +18,32 @@ class AddonComponent(UniversalBaseModel): name: AddonComponentName - app_name: typing_extensions.Annotated[typing.Optional[str], FieldMetadata(alias="appName")] = None + app_name: typing_extensions.Annotated[typing.Optional[str], FieldMetadata(alias="appName")] = pydantic.Field( + alias="appName", default=None + ) namespace: typing.Optional[str] = None - application_id: typing_extensions.Annotated[typing.Optional[str], FieldMetadata(alias="applicationId")] = None + application_id: typing_extensions.Annotated[typing.Optional[str], FieldMetadata(alias="applicationId")] = ( + pydantic.Field(alias="applicationId", default=None) + ) description: typing.Optional[str] = None path: typing.Optional[str] = None - addon_folder: typing_extensions.Annotated[typing.Optional[str], FieldMetadata(alias="addonFolder")] = None + addon_folder: typing_extensions.Annotated[typing.Optional[str], FieldMetadata(alias="addonFolder")] = ( + pydantic.Field(alias="addonFolder", default=None) + ) installed: typing.Optional[bool] = None status: typing.Optional[AddonComponentStatus] = None version: typing.Optional[str] = None manifest: typing.Optional[typing.Dict[str, typing.Any]] = None installation_source: typing_extensions.Annotated[ typing.Optional[str], FieldMetadata(alias="installationSource") - ] = None + ] = pydantic.Field(alias="installationSource", default=None) unsupported_cluster_types: typing_extensions.Annotated[ typing.Optional[typing.List[ClusterType]], FieldMetadata(alias="unsupportedClusterTypes") - ] = None + ] = pydantic.Field(alias="unsupportedClusterTypes", default=None) required: typing.Optional[bool] = None - known_cr_ds: typing_extensions.Annotated[typing.Optional[typing.List[str]], FieldMetadata(alias="knownCRDs")] = None + known_cr_ds: typing_extensions.Annotated[typing.Optional[typing.List[str]], FieldMetadata(alias="knownCRDs")] = ( + pydantic.Field(alias="knownCRDs", default=None) + ) source: typing.Optional[AddOnComponentSource] = None upgrades: typing.Optional[UpgradeData] = None labels: typing.Optional[typing.List[str]] = None @@ -44,7 +52,9 @@ class AddonComponent(UniversalBaseModel): Recommendations """ - workspace_id: typing_extensions.Annotated[typing.Optional[str], FieldMetadata(alias="workspaceId")] = None + workspace_id: typing_extensions.Annotated[typing.Optional[str], FieldMetadata(alias="workspaceId")] = ( + pydantic.Field(alias="workspaceId", default=None) + ) if IS_PYDANTIC_V2: model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow") # type: ignore # Pydantic v2 diff --git a/src/truefoundry_sdk/types/addon_component_status.py b/src/truefoundry_sdk/types/addon_component_status.py index dd261336..ef37f79f 100644 --- a/src/truefoundry_sdk/types/addon_component_status.py +++ b/src/truefoundry_sdk/types/addon_component_status.py @@ -10,14 +10,14 @@ class AddonComponentStatus(UniversalBaseModel): health_status: typing_extensions.Annotated[typing.Optional[str], FieldMetadata(alias="healthStatus")] = ( - pydantic.Field(default=None) + pydantic.Field(alias="healthStatus", default=None) ) """ Health status of the addon """ sync_status: typing_extensions.Annotated[typing.Optional[str], FieldMetadata(alias="syncStatus")] = pydantic.Field( - default=None + alias="syncStatus", default=None ) """ Sync status of the addon diff --git a/src/truefoundry_sdk/types/ai21provider_account.py b/src/truefoundry_sdk/types/ai21provider_account.py index 0cc3195d..2ed1b09b 100644 --- a/src/truefoundry_sdk/types/ai21provider_account.py +++ b/src/truefoundry_sdk/types/ai21provider_account.py @@ -38,7 +38,9 @@ class Ai21ProviderAccount(UniversalBaseModel): List of users who have access to this provider account """ - owned_by: typing_extensions.Annotated[typing.Optional[OwnedBy], FieldMetadata(alias="ownedBy")] = None + owned_by: typing_extensions.Annotated[typing.Optional[OwnedBy], FieldMetadata(alias="ownedBy")] = pydantic.Field( + alias="ownedBy", default=None + ) if IS_PYDANTIC_V2: model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow") # type: ignore # Pydantic v2 diff --git a/src/truefoundry_sdk/types/alert.py b/src/truefoundry_sdk/types/alert.py index 55ee3399..86b6133b 100644 --- a/src/truefoundry_sdk/types/alert.py +++ b/src/truefoundry_sdk/types/alert.py @@ -13,17 +13,29 @@ class Alert(UniversalBaseModel): id: typing.Optional[str] = None name: str timestamps: typing.List[dt.datetime] - start_time: typing_extensions.Annotated[dt.datetime, FieldMetadata(alias="startTime")] - resolved_time: typing_extensions.Annotated[typing.Optional[dt.datetime], FieldMetadata(alias="resolvedTime")] = None - application_id: typing_extensions.Annotated[typing.Optional[str], FieldMetadata(alias="applicationId")] = None - cluster_id: typing_extensions.Annotated[str, FieldMetadata(alias="clusterId")] - tenant_name: typing_extensions.Annotated[typing.Optional[str], FieldMetadata(alias="tenantName")] = None + start_time: typing_extensions.Annotated[dt.datetime, FieldMetadata(alias="startTime")] = pydantic.Field( + alias="startTime" + ) + resolved_time: typing_extensions.Annotated[typing.Optional[dt.datetime], FieldMetadata(alias="resolvedTime")] = ( + pydantic.Field(alias="resolvedTime", default=None) + ) + application_id: typing_extensions.Annotated[typing.Optional[str], FieldMetadata(alias="applicationId")] = ( + pydantic.Field(alias="applicationId", default=None) + ) + cluster_id: typing_extensions.Annotated[str, FieldMetadata(alias="clusterId")] = pydantic.Field(alias="clusterId") + tenant_name: typing_extensions.Annotated[typing.Optional[str], FieldMetadata(alias="tenantName")] = pydantic.Field( + alias="tenantName", default=None + ) fingerprint: str - updated_at: typing_extensions.Annotated[typing.Optional[str], FieldMetadata(alias="updatedAt")] = None - created_at: typing_extensions.Annotated[typing.Optional[str], FieldMetadata(alias="createdAt")] = None + updated_at: typing_extensions.Annotated[typing.Optional[str], FieldMetadata(alias="updatedAt")] = pydantic.Field( + alias="updatedAt", default=None + ) + created_at: typing_extensions.Annotated[typing.Optional[str], FieldMetadata(alias="createdAt")] = pydantic.Field( + alias="createdAt", default=None + ) application_debug_info_id: typing_extensions.Annotated[ typing.Optional[str], FieldMetadata(alias="applicationDebugInfoId") - ] = None + ] = pydantic.Field(alias="applicationDebugInfoId", default=None) if IS_PYDANTIC_V2: model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow") # type: ignore # Pydantic v2 diff --git a/src/truefoundry_sdk/types/anthropic_provider_account.py b/src/truefoundry_sdk/types/anthropic_provider_account.py index b23fe166..79b42e84 100644 --- a/src/truefoundry_sdk/types/anthropic_provider_account.py +++ b/src/truefoundry_sdk/types/anthropic_provider_account.py @@ -38,7 +38,9 @@ class AnthropicProviderAccount(UniversalBaseModel): List of users who have access to this provider account """ - owned_by: typing_extensions.Annotated[typing.Optional[OwnedBy], FieldMetadata(alias="ownedBy")] = None + owned_by: typing_extensions.Annotated[typing.Optional[OwnedBy], FieldMetadata(alias="ownedBy")] = pydantic.Field( + alias="ownedBy", default=None + ) if IS_PYDANTIC_V2: model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow") # type: ignore # Pydantic v2 diff --git a/src/truefoundry_sdk/types/application.py b/src/truefoundry_sdk/types/application.py index acf0a6e3..b64a7ba8 100644 --- a/src/truefoundry_sdk/types/application.py +++ b/src/truefoundry_sdk/types/application.py @@ -23,15 +23,31 @@ class Application(UniversalBaseModel): fqn: typing.Optional[str] = None name: typing.Optional[str] = None type: typing.Optional[ApplicationType] = None - created_by_subject: typing_extensions.Annotated[Subject, FieldMetadata(alias="createdBySubject")] - tenant_name: typing_extensions.Annotated[typing.Optional[str], FieldMetadata(alias="tenantName")] = None + created_by_subject: typing_extensions.Annotated[Subject, FieldMetadata(alias="createdBySubject")] = pydantic.Field( + alias="createdBySubject" + ) + tenant_name: typing_extensions.Annotated[typing.Optional[str], FieldMetadata(alias="tenantName")] = pydantic.Field( + alias="tenantName", default=None + ) metadata: typing.Optional[ApplicationMetadata] = None - lifecycle_stage: typing_extensions.Annotated[ApplicationLifecycleStage, FieldMetadata(alias="lifecycleStage")] - workspace_id: typing_extensions.Annotated[typing.Optional[str], FieldMetadata(alias="workspaceId")] = None - last_version: typing_extensions.Annotated[typing.Optional[int], FieldMetadata(alias="lastVersion")] = None - active_version: typing_extensions.Annotated[typing.Optional[int], FieldMetadata(alias="activeVersion")] = None - created_at: typing_extensions.Annotated[typing.Optional[dt.datetime], FieldMetadata(alias="createdAt")] = None - updated_at: typing_extensions.Annotated[typing.Optional[dt.datetime], FieldMetadata(alias="updatedAt")] = None + lifecycle_stage: typing_extensions.Annotated[ApplicationLifecycleStage, FieldMetadata(alias="lifecycleStage")] = ( + pydantic.Field(alias="lifecycleStage") + ) + workspace_id: typing_extensions.Annotated[typing.Optional[str], FieldMetadata(alias="workspaceId")] = ( + pydantic.Field(alias="workspaceId", default=None) + ) + last_version: typing_extensions.Annotated[typing.Optional[int], FieldMetadata(alias="lastVersion")] = ( + pydantic.Field(alias="lastVersion", default=None) + ) + active_version: typing_extensions.Annotated[typing.Optional[int], FieldMetadata(alias="activeVersion")] = ( + pydantic.Field(alias="activeVersion", default=None) + ) + created_at: typing_extensions.Annotated[typing.Optional[dt.datetime], FieldMetadata(alias="createdAt")] = ( + pydantic.Field(alias="createdAt", default=None) + ) + updated_at: typing_extensions.Annotated[typing.Optional[dt.datetime], FieldMetadata(alias="updatedAt")] = ( + pydantic.Field(alias="updatedAt", default=None) + ) recommendations: typing.Optional[typing.List[Recommendation]] = pydantic.Field(default=None) """ Recommendations for this application @@ -44,34 +60,38 @@ class Application(UniversalBaseModel): alerts_summary: typing_extensions.Annotated[ typing.Optional[typing.Dict[str, typing.Any]], FieldMetadata(alias="alertsSummary") - ] = pydantic.Field(default=None) + ] = pydantic.Field(alias="alertsSummary", default=None) """ Summary of alerts for this application """ application_debug_infos: typing_extensions.Annotated[ typing.Optional[typing.List["ApplicationDebugInfo"]], FieldMetadata(alias="applicationDebugInfos") - ] = pydantic.Field(default=None) + ] = pydantic.Field(alias="applicationDebugInfos", default=None) """ Debug infos for this application """ potential_problems: typing_extensions.Annotated[ typing.Optional[typing.List[ApplicationProblem]], FieldMetadata(alias="potentialProblems") - ] = pydantic.Field(default=None) + ] = pydantic.Field(alias="potentialProblems", default=None) """ Potential problems with the application """ autopilot: typing.Dict[str, typing.Any] - workspace_fqn: typing_extensions.Annotated[typing.Optional[str], FieldMetadata(alias="workspaceFqn")] = None - created_by: typing_extensions.Annotated[typing.Optional[str], FieldMetadata(alias="createdBy")] = None + workspace_fqn: typing_extensions.Annotated[typing.Optional[str], FieldMetadata(alias="workspaceFqn")] = ( + pydantic.Field(alias="workspaceFqn", default=None) + ) + created_by: typing_extensions.Annotated[typing.Optional[str], FieldMetadata(alias="createdBy")] = pydantic.Field( + alias="createdBy", default=None + ) deployment: typing.Optional["Deployment"] = None active_deployment_id: typing_extensions.Annotated[ typing.Optional[str], FieldMetadata(alias="activeDeploymentId") - ] = None + ] = pydantic.Field(alias="activeDeploymentId", default=None) last_deployment_id: typing_extensions.Annotated[typing.Optional[str], FieldMetadata(alias="lastDeploymentId")] = ( - None + pydantic.Field(alias="lastDeploymentId", default=None) ) if IS_PYDANTIC_V2: diff --git a/src/truefoundry_sdk/types/application_debug_info.py b/src/truefoundry_sdk/types/application_debug_info.py index 5a208c93..a06d81d8 100644 --- a/src/truefoundry_sdk/types/application_debug_info.py +++ b/src/truefoundry_sdk/types/application_debug_info.py @@ -13,11 +13,19 @@ class ApplicationDebugInfo(UniversalBaseModel): id: typing.Optional[str] = None - application_id: typing_extensions.Annotated[str, FieldMetadata(alias="applicationId")] + application_id: typing_extensions.Annotated[str, FieldMetadata(alias="applicationId")] = pydantic.Field( + alias="applicationId" + ) application: typing.Optional["Application"] = None - debug_info: typing_extensions.Annotated[typing.Dict[str, typing.Any], FieldMetadata(alias="debugInfo")] - created_at: typing_extensions.Annotated[typing.Optional[dt.datetime], FieldMetadata(alias="createdAt")] = None - updated_at: typing_extensions.Annotated[typing.Optional[dt.datetime], FieldMetadata(alias="updatedAt")] = None + debug_info: typing_extensions.Annotated[typing.Dict[str, typing.Any], FieldMetadata(alias="debugInfo")] = ( + pydantic.Field(alias="debugInfo") + ) + created_at: typing_extensions.Annotated[typing.Optional[dt.datetime], FieldMetadata(alias="createdAt")] = ( + pydantic.Field(alias="createdAt", default=None) + ) + updated_at: typing_extensions.Annotated[typing.Optional[dt.datetime], FieldMetadata(alias="updatedAt")] = ( + pydantic.Field(alias="updatedAt", default=None) + ) if IS_PYDANTIC_V2: model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow") # type: ignore # Pydantic v2 diff --git a/src/truefoundry_sdk/types/aws_bedrock_provider_account.py b/src/truefoundry_sdk/types/aws_bedrock_provider_account.py index 2ef47f25..d2184af6 100644 --- a/src/truefoundry_sdk/types/aws_bedrock_provider_account.py +++ b/src/truefoundry_sdk/types/aws_bedrock_provider_account.py @@ -44,7 +44,9 @@ class AwsBedrockProviderAccount(UniversalBaseModel): List of users who have access to this provider account """ - owned_by: typing_extensions.Annotated[typing.Optional[OwnedBy], FieldMetadata(alias="ownedBy")] = None + owned_by: typing_extensions.Annotated[typing.Optional[OwnedBy], FieldMetadata(alias="ownedBy")] = pydantic.Field( + alias="ownedBy", default=None + ) if IS_PYDANTIC_V2: model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow") # type: ignore # Pydantic v2 diff --git a/src/truefoundry_sdk/types/aws_provider_account.py b/src/truefoundry_sdk/types/aws_provider_account.py index 560da105..49bcd4bb 100644 --- a/src/truefoundry_sdk/types/aws_provider_account.py +++ b/src/truefoundry_sdk/types/aws_provider_account.py @@ -41,7 +41,9 @@ class AwsProviderAccount(UniversalBaseModel): List of integrations that are associated with the AWS provider account. """ - owned_by: typing_extensions.Annotated[typing.Optional[OwnedBy], FieldMetadata(alias="ownedBy")] = None + owned_by: typing_extensions.Annotated[typing.Optional[OwnedBy], FieldMetadata(alias="ownedBy")] = pydantic.Field( + alias="ownedBy", default=None + ) if IS_PYDANTIC_V2: model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow") # type: ignore # Pydantic v2 diff --git a/src/truefoundry_sdk/types/aws_sagemaker_provider_account.py b/src/truefoundry_sdk/types/aws_sagemaker_provider_account.py index 4932841c..fd330ecf 100644 --- a/src/truefoundry_sdk/types/aws_sagemaker_provider_account.py +++ b/src/truefoundry_sdk/types/aws_sagemaker_provider_account.py @@ -44,7 +44,9 @@ class AwsSagemakerProviderAccount(UniversalBaseModel): List of users who have access to this provider account """ - owned_by: typing_extensions.Annotated[typing.Optional[OwnedBy], FieldMetadata(alias="ownedBy")] = None + owned_by: typing_extensions.Annotated[typing.Optional[OwnedBy], FieldMetadata(alias="ownedBy")] = pydantic.Field( + alias="ownedBy", default=None + ) if IS_PYDANTIC_V2: model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow") # type: ignore # Pydantic v2 diff --git a/src/truefoundry_sdk/types/azure_foundry_provider_account.py b/src/truefoundry_sdk/types/azure_foundry_provider_account.py index 03b92abd..1d31e5fb 100644 --- a/src/truefoundry_sdk/types/azure_foundry_provider_account.py +++ b/src/truefoundry_sdk/types/azure_foundry_provider_account.py @@ -36,7 +36,9 @@ class AzureFoundryProviderAccount(UniversalBaseModel): List of users who have access to this provider account """ - owned_by: typing_extensions.Annotated[typing.Optional[OwnedBy], FieldMetadata(alias="ownedBy")] = None + owned_by: typing_extensions.Annotated[typing.Optional[OwnedBy], FieldMetadata(alias="ownedBy")] = pydantic.Field( + alias="ownedBy", default=None + ) if IS_PYDANTIC_V2: model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow") # type: ignore # Pydantic v2 diff --git a/src/truefoundry_sdk/types/azure_open_ai_provider_account.py b/src/truefoundry_sdk/types/azure_open_ai_provider_account.py index 30e9b373..98ce45b9 100644 --- a/src/truefoundry_sdk/types/azure_open_ai_provider_account.py +++ b/src/truefoundry_sdk/types/azure_open_ai_provider_account.py @@ -43,7 +43,9 @@ class AzureOpenAiProviderAccount(UniversalBaseModel): List of users who have access to this provider account """ - owned_by: typing_extensions.Annotated[typing.Optional[OwnedBy], FieldMetadata(alias="ownedBy")] = None + owned_by: typing_extensions.Annotated[typing.Optional[OwnedBy], FieldMetadata(alias="ownedBy")] = pydantic.Field( + alias="ownedBy", default=None + ) if IS_PYDANTIC_V2: model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow") # type: ignore # Pydantic v2 diff --git a/src/truefoundry_sdk/types/azure_provider_account.py b/src/truefoundry_sdk/types/azure_provider_account.py index 23ae16b3..28382900 100644 --- a/src/truefoundry_sdk/types/azure_provider_account.py +++ b/src/truefoundry_sdk/types/azure_provider_account.py @@ -35,7 +35,9 @@ class AzureProviderAccount(UniversalBaseModel): List of integrations that are associated with the Azure provider account. """ - owned_by: typing_extensions.Annotated[typing.Optional[OwnedBy], FieldMetadata(alias="ownedBy")] = None + owned_by: typing_extensions.Annotated[typing.Optional[OwnedBy], FieldMetadata(alias="ownedBy")] = pydantic.Field( + alias="ownedBy", default=None + ) if IS_PYDANTIC_V2: model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow") # type: ignore # Pydantic v2 diff --git a/src/truefoundry_sdk/types/bitbucket_provider_account.py b/src/truefoundry_sdk/types/bitbucket_provider_account.py index fa2f6746..3bf62bc2 100644 --- a/src/truefoundry_sdk/types/bitbucket_provider_account.py +++ b/src/truefoundry_sdk/types/bitbucket_provider_account.py @@ -30,7 +30,9 @@ class BitbucketProviderAccount(UniversalBaseModel): +uiType=IntegrationsGroup """ - owned_by: typing_extensions.Annotated[typing.Optional[OwnedBy], FieldMetadata(alias="ownedBy")] = None + owned_by: typing_extensions.Annotated[typing.Optional[OwnedBy], FieldMetadata(alias="ownedBy")] = pydantic.Field( + alias="ownedBy", default=None + ) if IS_PYDANTIC_V2: model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow") # type: ignore # Pydantic v2 diff --git a/src/truefoundry_sdk/types/cerebras_provider_account.py b/src/truefoundry_sdk/types/cerebras_provider_account.py index ce0d206a..abae3cd9 100644 --- a/src/truefoundry_sdk/types/cerebras_provider_account.py +++ b/src/truefoundry_sdk/types/cerebras_provider_account.py @@ -38,7 +38,9 @@ class CerebrasProviderAccount(UniversalBaseModel): List of users who have access to this provider account """ - owned_by: typing_extensions.Annotated[typing.Optional[OwnedBy], FieldMetadata(alias="ownedBy")] = None + owned_by: typing_extensions.Annotated[typing.Optional[OwnedBy], FieldMetadata(alias="ownedBy")] = pydantic.Field( + alias="ownedBy", default=None + ) if IS_PYDANTIC_V2: model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow") # type: ignore # Pydantic v2 diff --git a/src/truefoundry_sdk/types/cloudera_provider_account.py b/src/truefoundry_sdk/types/cloudera_provider_account.py index 9ea03d8d..740b53b8 100644 --- a/src/truefoundry_sdk/types/cloudera_provider_account.py +++ b/src/truefoundry_sdk/types/cloudera_provider_account.py @@ -42,7 +42,9 @@ class ClouderaProviderAccount(UniversalBaseModel): List of users who have access to this provider account """ - owned_by: typing_extensions.Annotated[typing.Optional[OwnedBy], FieldMetadata(alias="ownedBy")] = None + owned_by: typing_extensions.Annotated[typing.Optional[OwnedBy], FieldMetadata(alias="ownedBy")] = pydantic.Field( + alias="ownedBy", default=None + ) if IS_PYDANTIC_V2: model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow") # type: ignore # Pydantic v2 diff --git a/src/truefoundry_sdk/types/cluster.py b/src/truefoundry_sdk/types/cluster.py index ff87794f..2485466a 100644 --- a/src/truefoundry_sdk/types/cluster.py +++ b/src/truefoundry_sdk/types/cluster.py @@ -16,14 +16,24 @@ class Cluster(UniversalBaseModel): fqn: str name: str manifest: ClusterManifest - tenant_name: typing_extensions.Annotated[str, FieldMetadata(alias="tenantName")] - account_id: typing_extensions.Annotated[typing.Optional[str], FieldMetadata(alias="accountId")] = None + tenant_name: typing_extensions.Annotated[str, FieldMetadata(alias="tenantName")] = pydantic.Field( + alias="tenantName" + ) + account_id: typing_extensions.Annotated[typing.Optional[str], FieldMetadata(alias="accountId")] = pydantic.Field( + alias="accountId", default=None + ) created_by_subject: typing_extensions.Annotated[ typing.Optional[Subject], FieldMetadata(alias="createdBySubject") - ] = None - created_at: typing_extensions.Annotated[dt.datetime, FieldMetadata(alias="createdAt")] - updated_at: typing_extensions.Annotated[dt.datetime, FieldMetadata(alias="updatedAt")] - created_by: typing_extensions.Annotated[typing.Optional[str], FieldMetadata(alias="createdBy")] = None + ] = pydantic.Field(alias="createdBySubject", default=None) + created_at: typing_extensions.Annotated[dt.datetime, FieldMetadata(alias="createdAt")] = pydantic.Field( + alias="createdAt" + ) + updated_at: typing_extensions.Annotated[dt.datetime, FieldMetadata(alias="updatedAt")] = pydantic.Field( + alias="updatedAt" + ) + created_by: typing_extensions.Annotated[typing.Optional[str], FieldMetadata(alias="createdBy")] = pydantic.Field( + alias="createdBy", default=None + ) if IS_PYDANTIC_V2: model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow") # type: ignore # Pydantic v2 diff --git a/src/truefoundry_sdk/types/cluster_gateway.py b/src/truefoundry_sdk/types/cluster_gateway.py index 8463245f..34fa6819 100644 --- a/src/truefoundry_sdk/types/cluster_gateway.py +++ b/src/truefoundry_sdk/types/cluster_gateway.py @@ -13,7 +13,7 @@ class ClusterGateway(UniversalBaseModel): name: str hosts: typing.List[str] is_tie_breaker: typing_extensions.Annotated[typing.Optional[bool], FieldMetadata(alias="isTieBreaker")] = ( - pydantic.Field(default=None) + pydantic.Field(alias="isTieBreaker", default=None) ) """ Used when there are 2 gateways with same host diff --git a/src/truefoundry_sdk/types/cluster_manifest.py b/src/truefoundry_sdk/types/cluster_manifest.py index 7ce604ac..b85d96db 100644 --- a/src/truefoundry_sdk/types/cluster_manifest.py +++ b/src/truefoundry_sdk/types/cluster_manifest.py @@ -89,7 +89,9 @@ class ClusterManifest(UniversalBaseModel): Collaborators who can access this cluster """ - owned_by: typing_extensions.Annotated[typing.Optional[OwnedBy], FieldMetadata(alias="ownedBy")] = None + owned_by: typing_extensions.Annotated[typing.Optional[OwnedBy], FieldMetadata(alias="ownedBy")] = pydantic.Field( + alias="ownedBy", default=None + ) if IS_PYDANTIC_V2: model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow") # type: ignore # Pydantic v2 diff --git a/src/truefoundry_sdk/types/cohere_provider_account.py b/src/truefoundry_sdk/types/cohere_provider_account.py index 3c85b018..fd51ceb8 100644 --- a/src/truefoundry_sdk/types/cohere_provider_account.py +++ b/src/truefoundry_sdk/types/cohere_provider_account.py @@ -38,7 +38,9 @@ class CohereProviderAccount(UniversalBaseModel): List of users who have access to this provider account """ - owned_by: typing_extensions.Annotated[typing.Optional[OwnedBy], FieldMetadata(alias="ownedBy")] = None + owned_by: typing_extensions.Annotated[typing.Optional[OwnedBy], FieldMetadata(alias="ownedBy")] = pydantic.Field( + alias="ownedBy", default=None + ) if IS_PYDANTIC_V2: model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow") # type: ignore # Pydantic v2 diff --git a/src/truefoundry_sdk/types/custom_provider_account.py b/src/truefoundry_sdk/types/custom_provider_account.py index 019b806d..70c8f882 100644 --- a/src/truefoundry_sdk/types/custom_provider_account.py +++ b/src/truefoundry_sdk/types/custom_provider_account.py @@ -32,7 +32,9 @@ class CustomProviderAccount(UniversalBaseModel): List of integrations that are associated with the provider account. """ - owned_by: typing_extensions.Annotated[typing.Optional[OwnedBy], FieldMetadata(alias="ownedBy")] = None + owned_by: typing_extensions.Annotated[typing.Optional[OwnedBy], FieldMetadata(alias="ownedBy")] = pydantic.Field( + alias="ownedBy", default=None + ) if IS_PYDANTIC_V2: model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow") # type: ignore # Pydantic v2 diff --git a/src/truefoundry_sdk/types/databricks_provider_account.py b/src/truefoundry_sdk/types/databricks_provider_account.py index 8ec06bce..39360106 100644 --- a/src/truefoundry_sdk/types/databricks_provider_account.py +++ b/src/truefoundry_sdk/types/databricks_provider_account.py @@ -47,7 +47,9 @@ class DatabricksProviderAccount(UniversalBaseModel): List of users who have access to this provider account """ - owned_by: typing_extensions.Annotated[typing.Optional[OwnedBy], FieldMetadata(alias="ownedBy")] = None + owned_by: typing_extensions.Annotated[typing.Optional[OwnedBy], FieldMetadata(alias="ownedBy")] = pydantic.Field( + alias="ownedBy", default=None + ) if IS_PYDANTIC_V2: model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow") # type: ignore # Pydantic v2 diff --git a/src/truefoundry_sdk/types/deepinfra_provider_account.py b/src/truefoundry_sdk/types/deepinfra_provider_account.py index a87980c6..6d072006 100644 --- a/src/truefoundry_sdk/types/deepinfra_provider_account.py +++ b/src/truefoundry_sdk/types/deepinfra_provider_account.py @@ -38,7 +38,9 @@ class DeepinfraProviderAccount(UniversalBaseModel): List of users who have access to this provider account """ - owned_by: typing_extensions.Annotated[typing.Optional[OwnedBy], FieldMetadata(alias="ownedBy")] = None + owned_by: typing_extensions.Annotated[typing.Optional[OwnedBy], FieldMetadata(alias="ownedBy")] = pydantic.Field( + alias="ownedBy", default=None + ) if IS_PYDANTIC_V2: model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow") # type: ignore # Pydantic v2 diff --git a/src/truefoundry_sdk/types/deployment.py b/src/truefoundry_sdk/types/deployment.py index a4abf408..15d20522 100644 --- a/src/truefoundry_sdk/types/deployment.py +++ b/src/truefoundry_sdk/types/deployment.py @@ -20,30 +20,42 @@ class Deployment(UniversalBaseModel): id: typing.Optional[str] = None version: typing.Optional[float] = None fqn: typing.Optional[str] = None - application_id: typing_extensions.Annotated[typing.Optional[str], FieldMetadata(alias="applicationId")] = None + application_id: typing_extensions.Annotated[typing.Optional[str], FieldMetadata(alias="applicationId")] = ( + pydantic.Field(alias="applicationId", default=None) + ) manifest: DeploymentManifest application: typing.Optional["Application"] = None - created_by_subject: typing_extensions.Annotated[Subject, FieldMetadata(alias="createdBySubject")] - created_at: typing_extensions.Annotated[typing.Optional[dt.datetime], FieldMetadata(alias="createdAt")] = None - updated_at: typing_extensions.Annotated[typing.Optional[dt.datetime], FieldMetadata(alias="updatedAt")] = None + created_by_subject: typing_extensions.Annotated[Subject, FieldMetadata(alias="createdBySubject")] = pydantic.Field( + alias="createdBySubject" + ) + created_at: typing_extensions.Annotated[typing.Optional[dt.datetime], FieldMetadata(alias="createdAt")] = ( + pydantic.Field(alias="createdAt", default=None) + ) + updated_at: typing_extensions.Annotated[typing.Optional[dt.datetime], FieldMetadata(alias="updatedAt")] = ( + pydantic.Field(alias="updatedAt", default=None) + ) deployment_builds: typing_extensions.Annotated[ typing.Optional[typing.List[BuildInfo]], FieldMetadata(alias="deploymentBuilds") - ] = None + ] = pydantic.Field(alias="deploymentBuilds", default=None) deployment_statuses: typing_extensions.Annotated[ typing.Optional[typing.List[DeploymentStatus]], FieldMetadata(alias="deploymentStatuses") - ] = None - current_status_id: typing_extensions.Annotated[typing.Optional[str], FieldMetadata(alias="currentStatusId")] = None + ] = pydantic.Field(alias="deploymentStatuses", default=None) + current_status_id: typing_extensions.Annotated[typing.Optional[str], FieldMetadata(alias="currentStatusId")] = ( + pydantic.Field(alias="currentStatusId", default=None) + ) current_status: typing_extensions.Annotated[ typing.Optional[DeploymentStatus], FieldMetadata(alias="currentStatus") - ] = None + ] = pydantic.Field(alias="currentStatus", default=None) applied_recommendations: typing_extensions.Annotated[ typing.Optional[typing.List[Recommendation]], FieldMetadata(alias="appliedRecommendations") - ] = pydantic.Field(default=None) + ] = pydantic.Field(alias="appliedRecommendations", default=None) """ Applied recommendations for this deployment """ - created_by: typing_extensions.Annotated[typing.Optional[str], FieldMetadata(alias="createdBy")] = None + created_by: typing_extensions.Annotated[typing.Optional[str], FieldMetadata(alias="createdBy")] = pydantic.Field( + alias="createdBy", default=None + ) if IS_PYDANTIC_V2: model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow") # type: ignore # Pydantic v2 diff --git a/src/truefoundry_sdk/types/deployment_build.py b/src/truefoundry_sdk/types/deployment_build.py index e83eccee..8ee5600a 100644 --- a/src/truefoundry_sdk/types/deployment_build.py +++ b/src/truefoundry_sdk/types/deployment_build.py @@ -13,19 +13,37 @@ class DeploymentBuild(UniversalBaseModel): id: typing.Optional[str] = None - deployment_id: typing_extensions.Annotated[typing.Optional[str], FieldMetadata(alias="deploymentId")] = None - component_name: typing_extensions.Annotated[typing.Optional[str], FieldMetadata(alias="componentName")] = None + deployment_id: typing_extensions.Annotated[typing.Optional[str], FieldMetadata(alias="deploymentId")] = ( + pydantic.Field(alias="deploymentId", default=None) + ) + component_name: typing_extensions.Annotated[typing.Optional[str], FieldMetadata(alias="componentName")] = ( + pydantic.Field(alias="componentName", default=None) + ) build: typing.Optional[BuildInfo] = None - build_id: typing_extensions.Annotated[typing.Optional[str], FieldMetadata(alias="buildId")] = None - image_uri: typing_extensions.Annotated[typing.Optional[str], FieldMetadata(alias="imageUri")] = None + build_id: typing_extensions.Annotated[typing.Optional[str], FieldMetadata(alias="buildId")] = pydantic.Field( + alias="buildId", default=None + ) + image_uri: typing_extensions.Annotated[typing.Optional[str], FieldMetadata(alias="imageUri")] = pydantic.Field( + alias="imageUri", default=None + ) name: typing.Optional[str] = None status: typing.Optional[BuildStatus] = None - get_logs_url: typing_extensions.Annotated[typing.Optional[str], FieldMetadata(alias="getLogsUrl")] = None - tail_logs_url: typing_extensions.Annotated[typing.Optional[str], FieldMetadata(alias="tailLogsUrl")] = None - logs_start_ts: typing_extensions.Annotated[typing.Optional[str], FieldMetadata(alias="logsStartTs")] = None + get_logs_url: typing_extensions.Annotated[typing.Optional[str], FieldMetadata(alias="getLogsUrl")] = pydantic.Field( + alias="getLogsUrl", default=None + ) + tail_logs_url: typing_extensions.Annotated[typing.Optional[str], FieldMetadata(alias="tailLogsUrl")] = ( + pydantic.Field(alias="tailLogsUrl", default=None) + ) + logs_start_ts: typing_extensions.Annotated[typing.Optional[str], FieldMetadata(alias="logsStartTs")] = ( + pydantic.Field(alias="logsStartTs", default=None) + ) metadata: typing.Optional[typing.Dict[str, typing.Any]] = None - created_at: typing_extensions.Annotated[typing.Optional[dt.datetime], FieldMetadata(alias="createdAt")] = None - updated_at: typing_extensions.Annotated[typing.Optional[dt.datetime], FieldMetadata(alias="updatedAt")] = None + created_at: typing_extensions.Annotated[typing.Optional[dt.datetime], FieldMetadata(alias="createdAt")] = ( + pydantic.Field(alias="createdAt", default=None) + ) + updated_at: typing_extensions.Annotated[typing.Optional[dt.datetime], FieldMetadata(alias="updatedAt")] = ( + pydantic.Field(alias="updatedAt", default=None) + ) if IS_PYDANTIC_V2: model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow") # type: ignore # Pydantic v2 diff --git a/src/truefoundry_sdk/types/deployment_status.py b/src/truefoundry_sdk/types/deployment_status.py index e48f00b7..c06fe004 100644 --- a/src/truefoundry_sdk/types/deployment_status.py +++ b/src/truefoundry_sdk/types/deployment_status.py @@ -13,14 +13,22 @@ class DeploymentStatus(UniversalBaseModel): id: typing.Optional[str] = None - deployment_id: typing_extensions.Annotated[typing.Optional[str], FieldMetadata(alias="deploymentId")] = None + deployment_id: typing_extensions.Annotated[typing.Optional[str], FieldMetadata(alias="deploymentId")] = ( + pydantic.Field(alias="deploymentId", default=None) + ) status: typing.Optional[DeploymentStatusValue] = None state: typing.Optional[typing.Dict[str, typing.Any]] = None transition: typing.Optional[DeploymentTransition] = None message: typing.Optional[str] = None - retry_count: typing_extensions.Annotated[typing.Optional[float], FieldMetadata(alias="retryCount")] = None - created_at: typing_extensions.Annotated[typing.Optional[dt.datetime], FieldMetadata(alias="createdAt")] = None - updated_at: typing_extensions.Annotated[typing.Optional[dt.datetime], FieldMetadata(alias="updatedAt")] = None + retry_count: typing_extensions.Annotated[typing.Optional[float], FieldMetadata(alias="retryCount")] = ( + pydantic.Field(alias="retryCount", default=None) + ) + created_at: typing_extensions.Annotated[typing.Optional[dt.datetime], FieldMetadata(alias="createdAt")] = ( + pydantic.Field(alias="createdAt", default=None) + ) + updated_at: typing_extensions.Annotated[typing.Optional[dt.datetime], FieldMetadata(alias="updatedAt")] = ( + pydantic.Field(alias="updatedAt", default=None) + ) if IS_PYDANTIC_V2: model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow") # type: ignore # Pydantic v2 diff --git a/src/truefoundry_sdk/types/dockerhub_provider_account.py b/src/truefoundry_sdk/types/dockerhub_provider_account.py index ace85df2..ee292391 100644 --- a/src/truefoundry_sdk/types/dockerhub_provider_account.py +++ b/src/truefoundry_sdk/types/dockerhub_provider_account.py @@ -37,7 +37,9 @@ class DockerhubProviderAccount(UniversalBaseModel): +uiType=IntegrationsGroup """ - owned_by: typing_extensions.Annotated[typing.Optional[OwnedBy], FieldMetadata(alias="ownedBy")] = None + owned_by: typing_extensions.Annotated[typing.Optional[OwnedBy], FieldMetadata(alias="ownedBy")] = pydantic.Field( + alias="ownedBy", default=None + ) if IS_PYDANTIC_V2: model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow") # type: ignore # Pydantic v2 diff --git a/src/truefoundry_sdk/types/environment.py b/src/truefoundry_sdk/types/environment.py index fc651eec..2a4c5a66 100644 --- a/src/truefoundry_sdk/types/environment.py +++ b/src/truefoundry_sdk/types/environment.py @@ -17,14 +17,22 @@ class Environment(UniversalBaseModel): name: str priority: float color: EnvironmentColor - tenant_name: typing_extensions.Annotated[str, FieldMetadata(alias="tenantName")] - created_by_subject: typing_extensions.Annotated[Subject, FieldMetadata(alias="createdBySubject")] - is_production: typing_extensions.Annotated[bool, FieldMetadata(alias="isProduction")] + tenant_name: typing_extensions.Annotated[str, FieldMetadata(alias="tenantName")] = pydantic.Field( + alias="tenantName" + ) + created_by_subject: typing_extensions.Annotated[Subject, FieldMetadata(alias="createdBySubject")] = pydantic.Field( + alias="createdBySubject" + ) + is_production: typing_extensions.Annotated[bool, FieldMetadata(alias="isProduction")] = pydantic.Field( + alias="isProduction" + ) optimize_for: typing_extensions.Annotated[ typing.Optional[EnvironmentOptimizeFor], FieldMetadata(alias="optimizeFor") - ] = None + ] = pydantic.Field(alias="optimizeFor", default=None) manifest: EnvironmentManifest - created_by: typing_extensions.Annotated[typing.Optional[str], FieldMetadata(alias="createdBy")] = None + created_by: typing_extensions.Annotated[typing.Optional[str], FieldMetadata(alias="createdBy")] = pydantic.Field( + alias="createdBy", default=None + ) if IS_PYDANTIC_V2: model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow") # type: ignore # Pydantic v2 diff --git a/src/truefoundry_sdk/types/environment_color.py b/src/truefoundry_sdk/types/environment_color.py index 988a1f88..04de9f59 100644 --- a/src/truefoundry_sdk/types/environment_color.py +++ b/src/truefoundry_sdk/types/environment_color.py @@ -9,12 +9,16 @@ class EnvironmentColor(UniversalBaseModel): - color_hex: typing_extensions.Annotated[typing.Optional[str], FieldMetadata(alias="colorHex")] = None + color_hex: typing_extensions.Annotated[typing.Optional[str], FieldMetadata(alias="colorHex")] = pydantic.Field( + alias="colorHex", default=None + ) background_color_hex: typing_extensions.Annotated[ typing.Optional[str], FieldMetadata(alias="backgroundColorHex") - ] = None + ] = pydantic.Field(alias="backgroundColorHex", default=None) color: typing.Optional[str] = None - background_color: typing_extensions.Annotated[typing.Optional[str], FieldMetadata(alias="backgroundColor")] = None + background_color: typing_extensions.Annotated[typing.Optional[str], FieldMetadata(alias="backgroundColor")] = ( + pydantic.Field(alias="backgroundColor", default=None) + ) if IS_PYDANTIC_V2: model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow") # type: ignore # Pydantic v2 diff --git a/src/truefoundry_sdk/types/environment_manifest.py b/src/truefoundry_sdk/types/environment_manifest.py index 264825c2..29965c62 100644 --- a/src/truefoundry_sdk/types/environment_manifest.py +++ b/src/truefoundry_sdk/types/environment_manifest.py @@ -22,12 +22,16 @@ class EnvironmentManifest(UniversalBaseModel): """ color: EnvironmentColor - is_production: typing_extensions.Annotated[bool, FieldMetadata(alias="isProduction")] = pydantic.Field() + is_production: typing_extensions.Annotated[bool, FieldMetadata(alias="isProduction")] = pydantic.Field( + alias="isProduction" + ) """ Environment Type - Indicates if the environment is for production use """ - optimize_for: typing_extensions.Annotated[EnvironmentOptimizeFor, FieldMetadata(alias="optimizeFor")] + optimize_for: typing_extensions.Annotated[EnvironmentOptimizeFor, FieldMetadata(alias="optimizeFor")] = ( + pydantic.Field(alias="optimizeFor") + ) if IS_PYDANTIC_V2: model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow") # type: ignore # Pydantic v2 diff --git a/src/truefoundry_sdk/types/event.py b/src/truefoundry_sdk/types/event.py index c618662e..675ae1a0 100644 --- a/src/truefoundry_sdk/types/event.py +++ b/src/truefoundry_sdk/types/event.py @@ -17,19 +17,21 @@ class Event(UniversalBaseModel): """ first_timestamp: typing_extensions.Annotated[typing.Optional[str], FieldMetadata(alias="firstTimestamp")] = ( - pydantic.Field(default=None) + pydantic.Field(alias="firstTimestamp", default=None) ) """ Timestamp when the event was first observed """ - last_timestamp: typing_extensions.Annotated[str, FieldMetadata(alias="lastTimestamp")] = pydantic.Field() + last_timestamp: typing_extensions.Annotated[str, FieldMetadata(alias="lastTimestamp")] = pydantic.Field( + alias="lastTimestamp" + ) """ Timestamp when the event was last observed """ involved_object: typing_extensions.Annotated[EventInvolvedObject, FieldMetadata(alias="involvedObject")] = ( - pydantic.Field() + pydantic.Field(alias="involvedObject") ) """ Details of the involved object diff --git a/src/truefoundry_sdk/types/event_involved_object.py b/src/truefoundry_sdk/types/event_involved_object.py index f26d7e29..fdf0f1e7 100644 --- a/src/truefoundry_sdk/types/event_involved_object.py +++ b/src/truefoundry_sdk/types/event_involved_object.py @@ -11,9 +11,13 @@ class EventInvolvedObject(UniversalBaseModel): kind: str name: str - api_version: typing_extensions.Annotated[typing.Optional[str], FieldMetadata(alias="apiVersion")] = None + api_version: typing_extensions.Annotated[typing.Optional[str], FieldMetadata(alias="apiVersion")] = pydantic.Field( + alias="apiVersion", default=None + ) namespace: typing.Optional[str] = None - container_name: typing_extensions.Annotated[typing.Optional[str], FieldMetadata(alias="containerName")] = None + container_name: typing_extensions.Annotated[typing.Optional[str], FieldMetadata(alias="containerName")] = ( + pydantic.Field(alias="containerName", default=None) + ) if IS_PYDANTIC_V2: model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow") # type: ignore # Pydantic v2 diff --git a/src/truefoundry_sdk/types/flyte_launch_plan_id.py b/src/truefoundry_sdk/types/flyte_launch_plan_id.py index bfc7f533..45cdd4a5 100644 --- a/src/truefoundry_sdk/types/flyte_launch_plan_id.py +++ b/src/truefoundry_sdk/types/flyte_launch_plan_id.py @@ -10,7 +10,7 @@ class FlyteLaunchPlanId(UniversalBaseModel): resource_type: typing_extensions.Annotated[typing.Literal["LAUNCH_PLAN"], FieldMetadata(alias="resourceType")] = ( - "LAUNCH_PLAN" + pydantic.Field(alias="resourceType", default="LAUNCH_PLAN") ) name: str diff --git a/src/truefoundry_sdk/types/flyte_launch_plan_spec.py b/src/truefoundry_sdk/types/flyte_launch_plan_spec.py index f6c672b0..0137d92b 100644 --- a/src/truefoundry_sdk/types/flyte_launch_plan_spec.py +++ b/src/truefoundry_sdk/types/flyte_launch_plan_spec.py @@ -10,7 +10,9 @@ class FlyteLaunchPlanSpec(UniversalBaseModel): - workflow_id: typing_extensions.Annotated[FlyteWorkflowId, FieldMetadata(alias="workflowId")] + workflow_id: typing_extensions.Annotated[FlyteWorkflowId, FieldMetadata(alias="workflowId")] = pydantic.Field( + alias="workflowId" + ) if IS_PYDANTIC_V2: model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow") # type: ignore # Pydantic v2 diff --git a/src/truefoundry_sdk/types/flyte_task_id.py b/src/truefoundry_sdk/types/flyte_task_id.py index f31eb859..48526eb7 100644 --- a/src/truefoundry_sdk/types/flyte_task_id.py +++ b/src/truefoundry_sdk/types/flyte_task_id.py @@ -9,7 +9,9 @@ class FlyteTaskId(UniversalBaseModel): - resource_type: typing_extensions.Annotated[typing.Literal["TASK"], FieldMetadata(alias="resourceType")] = "TASK" + resource_type: typing_extensions.Annotated[typing.Literal["TASK"], FieldMetadata(alias="resourceType")] = ( + pydantic.Field(alias="resourceType", default="TASK") + ) name: str if IS_PYDANTIC_V2: diff --git a/src/truefoundry_sdk/types/flyte_workflow_id.py b/src/truefoundry_sdk/types/flyte_workflow_id.py index 757763e3..73aaeeb5 100644 --- a/src/truefoundry_sdk/types/flyte_workflow_id.py +++ b/src/truefoundry_sdk/types/flyte_workflow_id.py @@ -10,7 +10,7 @@ class FlyteWorkflowId(UniversalBaseModel): resource_type: typing_extensions.Annotated[typing.Literal["WORKFLOW"], FieldMetadata(alias="resourceType")] = ( - "WORKFLOW" + pydantic.Field(alias="resourceType", default="WORKFLOW") ) name: str diff --git a/src/truefoundry_sdk/types/gateway_configuration.py b/src/truefoundry_sdk/types/gateway_configuration.py index 8f9a828d..c97385e3 100644 --- a/src/truefoundry_sdk/types/gateway_configuration.py +++ b/src/truefoundry_sdk/types/gateway_configuration.py @@ -13,12 +13,20 @@ class GatewayConfiguration(UniversalBaseModel): id: typing.Optional[str] = None - tenant_name: typing_extensions.Annotated[str, FieldMetadata(alias="tenantName")] + tenant_name: typing_extensions.Annotated[str, FieldMetadata(alias="tenantName")] = pydantic.Field( + alias="tenantName" + ) type: str manifest: types_config_Config - created_by_subject: typing_extensions.Annotated[Subject, FieldMetadata(alias="createdBySubject")] - created_at: typing_extensions.Annotated[typing.Optional[dt.datetime], FieldMetadata(alias="createdAt")] = None - updated_at: typing_extensions.Annotated[typing.Optional[dt.datetime], FieldMetadata(alias="updatedAt")] = None + created_by_subject: typing_extensions.Annotated[Subject, FieldMetadata(alias="createdBySubject")] = pydantic.Field( + alias="createdBySubject" + ) + created_at: typing_extensions.Annotated[typing.Optional[dt.datetime], FieldMetadata(alias="createdAt")] = ( + pydantic.Field(alias="createdAt", default=None) + ) + updated_at: typing_extensions.Annotated[typing.Optional[dt.datetime], FieldMetadata(alias="updatedAt")] = ( + pydantic.Field(alias="updatedAt", default=None) + ) if IS_PYDANTIC_V2: model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow") # type: ignore # Pydantic v2 diff --git a/src/truefoundry_sdk/types/gateway_request_metadata_filter.py b/src/truefoundry_sdk/types/gateway_request_metadata_filter.py index 688bd2be..4d6adbf4 100644 --- a/src/truefoundry_sdk/types/gateway_request_metadata_filter.py +++ b/src/truefoundry_sdk/types/gateway_request_metadata_filter.py @@ -11,7 +11,9 @@ class GatewayRequestMetadataFilter(UniversalBaseModel): - gateway_request_metadata_key: typing_extensions.Annotated[str, FieldMetadata(alias="gatewayRequestMetadataKey")] + gateway_request_metadata_key: typing_extensions.Annotated[str, FieldMetadata(alias="gatewayRequestMetadataKey")] = ( + pydantic.Field(alias="gatewayRequestMetadataKey") + ) operator: GatewayRequestMetadataFilterOperator value: GatewayRequestMetadataFilterValue diff --git a/src/truefoundry_sdk/types/gcp_api_key_auth.py b/src/truefoundry_sdk/types/gcp_api_key_auth.py index 0faf3346..3df7039f 100644 --- a/src/truefoundry_sdk/types/gcp_api_key_auth.py +++ b/src/truefoundry_sdk/types/gcp_api_key_auth.py @@ -18,7 +18,7 @@ class GcpApiKeyAuth(UniversalBaseModel): +value=api-key """ - api_key: typing_extensions.Annotated[str, FieldMetadata(alias="apiKey")] = pydantic.Field() + api_key: typing_extensions.Annotated[str, FieldMetadata(alias="apiKey")] = pydantic.Field(alias="apiKey") """ The API key for Google Cloud authentication """ diff --git a/src/truefoundry_sdk/types/gcp_provider_account.py b/src/truefoundry_sdk/types/gcp_provider_account.py index d4af605c..4774f6e4 100644 --- a/src/truefoundry_sdk/types/gcp_provider_account.py +++ b/src/truefoundry_sdk/types/gcp_provider_account.py @@ -37,7 +37,9 @@ class GcpProviderAccount(UniversalBaseModel): List of integrations that are associated with the GCP provider account. """ - owned_by: typing_extensions.Annotated[typing.Optional[OwnedBy], FieldMetadata(alias="ownedBy")] = None + owned_by: typing_extensions.Annotated[typing.Optional[OwnedBy], FieldMetadata(alias="ownedBy")] = pydantic.Field( + alias="ownedBy", default=None + ) if IS_PYDANTIC_V2: model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow") # type: ignore # Pydantic v2 diff --git a/src/truefoundry_sdk/types/get_authenticated_vcsurl_response.py b/src/truefoundry_sdk/types/get_authenticated_vcsurl_response.py index 5283872b..1f1e47b8 100644 --- a/src/truefoundry_sdk/types/get_authenticated_vcsurl_response.py +++ b/src/truefoundry_sdk/types/get_authenticated_vcsurl_response.py @@ -9,7 +9,9 @@ class GetAuthenticatedVcsurlResponse(UniversalBaseModel): - authenticated_url: typing_extensions.Annotated[str, FieldMetadata(alias="authenticatedURL")] = pydantic.Field() + authenticated_url: typing_extensions.Annotated[str, FieldMetadata(alias="authenticatedURL")] = pydantic.Field( + alias="authenticatedURL" + ) """ Authenticated URL to access the repository """ diff --git a/src/truefoundry_sdk/types/github_provider_account.py b/src/truefoundry_sdk/types/github_provider_account.py index 1a53067b..6bf4bef2 100644 --- a/src/truefoundry_sdk/types/github_provider_account.py +++ b/src/truefoundry_sdk/types/github_provider_account.py @@ -30,7 +30,9 @@ class GithubProviderAccount(UniversalBaseModel): +uiType=IntegrationsGroup """ - owned_by: typing_extensions.Annotated[typing.Optional[OwnedBy], FieldMetadata(alias="ownedBy")] = None + owned_by: typing_extensions.Annotated[typing.Optional[OwnedBy], FieldMetadata(alias="ownedBy")] = pydantic.Field( + alias="ownedBy", default=None + ) if IS_PYDANTIC_V2: model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow") # type: ignore # Pydantic v2 diff --git a/src/truefoundry_sdk/types/gitlab_provider_account.py b/src/truefoundry_sdk/types/gitlab_provider_account.py index 5eed8dc8..b007da8f 100644 --- a/src/truefoundry_sdk/types/gitlab_provider_account.py +++ b/src/truefoundry_sdk/types/gitlab_provider_account.py @@ -30,7 +30,9 @@ class GitlabProviderAccount(UniversalBaseModel): +uiType=IntegrationsGroup """ - owned_by: typing_extensions.Annotated[typing.Optional[OwnedBy], FieldMetadata(alias="ownedBy")] = None + owned_by: typing_extensions.Annotated[typing.Optional[OwnedBy], FieldMetadata(alias="ownedBy")] = pydantic.Field( + alias="ownedBy", default=None + ) if IS_PYDANTIC_V2: model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow") # type: ignore # Pydantic v2 diff --git a/src/truefoundry_sdk/types/google_gemini_provider_account.py b/src/truefoundry_sdk/types/google_gemini_provider_account.py index 467ca54e..04f99568 100644 --- a/src/truefoundry_sdk/types/google_gemini_provider_account.py +++ b/src/truefoundry_sdk/types/google_gemini_provider_account.py @@ -38,7 +38,9 @@ class GoogleGeminiProviderAccount(UniversalBaseModel): List of users who have access to this provider account """ - owned_by: typing_extensions.Annotated[typing.Optional[OwnedBy], FieldMetadata(alias="ownedBy")] = None + owned_by: typing_extensions.Annotated[typing.Optional[OwnedBy], FieldMetadata(alias="ownedBy")] = pydantic.Field( + alias="ownedBy", default=None + ) if IS_PYDANTIC_V2: model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow") # type: ignore # Pydantic v2 diff --git a/src/truefoundry_sdk/types/google_vertex_provider_account.py b/src/truefoundry_sdk/types/google_vertex_provider_account.py index 53a0ef9c..f23b6502 100644 --- a/src/truefoundry_sdk/types/google_vertex_provider_account.py +++ b/src/truefoundry_sdk/types/google_vertex_provider_account.py @@ -45,7 +45,9 @@ class GoogleVertexProviderAccount(UniversalBaseModel): List of users who have access to this provider account """ - owned_by: typing_extensions.Annotated[typing.Optional[OwnedBy], FieldMetadata(alias="ownedBy")] = None + owned_by: typing_extensions.Annotated[typing.Optional[OwnedBy], FieldMetadata(alias="ownedBy")] = pydantic.Field( + alias="ownedBy", default=None + ) if IS_PYDANTIC_V2: model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow") # type: ignore # Pydantic v2 diff --git a/src/truefoundry_sdk/types/graph.py b/src/truefoundry_sdk/types/graph.py index 4e1e7d96..f6f4e0d5 100644 --- a/src/truefoundry_sdk/types/graph.py +++ b/src/truefoundry_sdk/types/graph.py @@ -25,7 +25,9 @@ class Graph(UniversalBaseModel): Chart name """ - chart_type: typing_extensions.Annotated[GraphChartType, FieldMetadata(alias="chartType")] = pydantic.Field() + chart_type: typing_extensions.Annotated[GraphChartType, FieldMetadata(alias="chartType")] = pydantic.Field( + alias="chartType" + ) """ Chart type """ diff --git a/src/truefoundry_sdk/types/groq_provider_account.py b/src/truefoundry_sdk/types/groq_provider_account.py index 76949526..88c726a4 100644 --- a/src/truefoundry_sdk/types/groq_provider_account.py +++ b/src/truefoundry_sdk/types/groq_provider_account.py @@ -38,7 +38,9 @@ class GroqProviderAccount(UniversalBaseModel): List of users who have access to this provider account """ - owned_by: typing_extensions.Annotated[typing.Optional[OwnedBy], FieldMetadata(alias="ownedBy")] = None + owned_by: typing_extensions.Annotated[typing.Optional[OwnedBy], FieldMetadata(alias="ownedBy")] = pydantic.Field( + alias="ownedBy", default=None + ) if IS_PYDANTIC_V2: model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow") # type: ignore # Pydantic v2 diff --git a/src/truefoundry_sdk/types/guardrail_config_group.py b/src/truefoundry_sdk/types/guardrail_config_group.py index 3ae9afed..0c8083de 100644 --- a/src/truefoundry_sdk/types/guardrail_config_group.py +++ b/src/truefoundry_sdk/types/guardrail_config_group.py @@ -39,7 +39,9 @@ class GuardrailConfigGroup(UniversalBaseModel): List of Guardrail Configs, which are part of this Guardrail Config Group. """ - owned_by: typing_extensions.Annotated[typing.Optional[OwnedBy], FieldMetadata(alias="ownedBy")] = None + owned_by: typing_extensions.Annotated[typing.Optional[OwnedBy], FieldMetadata(alias="ownedBy")] = pydantic.Field( + alias="ownedBy", default=None + ) if IS_PYDANTIC_V2: model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow") # type: ignore # Pydantic v2 diff --git a/src/truefoundry_sdk/types/hashicorp_provider_account.py b/src/truefoundry_sdk/types/hashicorp_provider_account.py index 29b98a73..106495b7 100644 --- a/src/truefoundry_sdk/types/hashicorp_provider_account.py +++ b/src/truefoundry_sdk/types/hashicorp_provider_account.py @@ -30,7 +30,9 @@ class HashicorpProviderAccount(UniversalBaseModel): List of integrations that are associated with the HashiCorp Vault provider account. """ - owned_by: typing_extensions.Annotated[typing.Optional[OwnedBy], FieldMetadata(alias="ownedBy")] = None + owned_by: typing_extensions.Annotated[typing.Optional[OwnedBy], FieldMetadata(alias="ownedBy")] = pydantic.Field( + alias="ownedBy", default=None + ) if IS_PYDANTIC_V2: model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow") # type: ignore # Pydantic v2 diff --git a/src/truefoundry_sdk/types/helm.py b/src/truefoundry_sdk/types/helm.py index 3b91cec2..b4b11802 100644 --- a/src/truefoundry_sdk/types/helm.py +++ b/src/truefoundry_sdk/types/helm.py @@ -39,7 +39,7 @@ class Helm(UniversalBaseModel): kustomize: typing.Optional[Kustomize] = None ignore_differences: typing_extensions.Annotated[ typing.Optional[typing.List[typing.Dict[str, typing.Any]]], FieldMetadata(alias="ignoreDifferences") - ] = None + ] = pydantic.Field(alias="ignoreDifferences", default=None) workspace_fqn: typing.Optional[str] = pydantic.Field(default=None) """ Fully qualified name of the workspace diff --git a/src/truefoundry_sdk/types/http_error.py b/src/truefoundry_sdk/types/http_error.py index be737b85..ab62b042 100644 --- a/src/truefoundry_sdk/types/http_error.py +++ b/src/truefoundry_sdk/types/http_error.py @@ -10,7 +10,9 @@ class HttpError(UniversalBaseModel): - status_code: typing_extensions.Annotated[int, FieldMetadata(alias="statusCode")] = pydantic.Field() + status_code: typing_extensions.Annotated[int, FieldMetadata(alias="statusCode")] = pydantic.Field( + alias="statusCode" + ) """ HTTP Status Code """ diff --git a/src/truefoundry_sdk/types/i_change.py b/src/truefoundry_sdk/types/i_change.py index b33918fe..f65921f0 100644 --- a/src/truefoundry_sdk/types/i_change.py +++ b/src/truefoundry_sdk/types/i_change.py @@ -17,7 +17,7 @@ class IChange(UniversalBaseModel): value: typing.Optional[typing.Dict[str, typing.Any]] = None old_value: typing_extensions.Annotated[ typing.Optional[typing.Dict[str, typing.Any]], FieldMetadata(alias="oldValue") - ] = None + ] = pydantic.Field(alias="oldValue", default=None) changes: typing.Optional[typing.List["IChange"]] = None if IS_PYDANTIC_V2: diff --git a/src/truefoundry_sdk/types/is_cluster_connected_response.py b/src/truefoundry_sdk/types/is_cluster_connected_response.py index 9c8710fc..965b09bc 100644 --- a/src/truefoundry_sdk/types/is_cluster_connected_response.py +++ b/src/truefoundry_sdk/types/is_cluster_connected_response.py @@ -9,7 +9,9 @@ class IsClusterConnectedResponse(UniversalBaseModel): - is_connected: typing_extensions.Annotated[bool, FieldMetadata(alias="isConnected")] = pydantic.Field() + is_connected: typing_extensions.Annotated[bool, FieldMetadata(alias="isConnected")] = pydantic.Field( + alias="isConnected" + ) """ Whether the cluster is connected """ diff --git a/src/truefoundry_sdk/types/jfrog_provider_account.py b/src/truefoundry_sdk/types/jfrog_provider_account.py index 17bec8f4..81a76b9f 100644 --- a/src/truefoundry_sdk/types/jfrog_provider_account.py +++ b/src/truefoundry_sdk/types/jfrog_provider_account.py @@ -37,7 +37,9 @@ class JfrogProviderAccount(UniversalBaseModel): List of integrations that are associated with the provider account. """ - owned_by: typing_extensions.Annotated[typing.Optional[OwnedBy], FieldMetadata(alias="ownedBy")] = None + owned_by: typing_extensions.Annotated[typing.Optional[OwnedBy], FieldMetadata(alias="ownedBy")] = pydantic.Field( + alias="ownedBy", default=None + ) if IS_PYDANTIC_V2: model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow") # type: ignore # Pydantic v2 diff --git a/src/truefoundry_sdk/types/job_run.py b/src/truefoundry_sdk/types/job_run.py index a25af964..1dfc04a5 100644 --- a/src/truefoundry_sdk/types/job_run.py +++ b/src/truefoundry_sdk/types/job_run.py @@ -16,23 +16,27 @@ class JobRun(UniversalBaseModel): JobRun Name """ - application_name: typing_extensions.Annotated[str, FieldMetadata(alias="applicationName")] = pydantic.Field() + application_name: typing_extensions.Annotated[str, FieldMetadata(alias="applicationName")] = pydantic.Field( + alias="applicationName" + ) """ Application Name """ - deployment_version: typing_extensions.Annotated[str, FieldMetadata(alias="deploymentVersion")] = pydantic.Field() + deployment_version: typing_extensions.Annotated[str, FieldMetadata(alias="deploymentVersion")] = pydantic.Field( + alias="deploymentVersion" + ) """ Deployment Version """ - created_at: typing_extensions.Annotated[float, FieldMetadata(alias="createdAt")] = pydantic.Field() + created_at: typing_extensions.Annotated[float, FieldMetadata(alias="createdAt")] = pydantic.Field(alias="createdAt") """ Created At """ end_time: typing_extensions.Annotated[typing.Optional[float], FieldMetadata(alias="endTime")] = pydantic.Field( - default=None + alias="endTime", default=None ) """ End Time of JobRun @@ -48,7 +52,9 @@ class JobRun(UniversalBaseModel): Command """ - total_retries: typing_extensions.Annotated[int, FieldMetadata(alias="totalRetries")] = pydantic.Field() + total_retries: typing_extensions.Annotated[int, FieldMetadata(alias="totalRetries")] = pydantic.Field( + alias="totalRetries" + ) """ Total Retries """ @@ -64,7 +70,7 @@ class JobRun(UniversalBaseModel): """ triggered_by: typing_extensions.Annotated[typing.Optional[str], FieldMetadata(alias="triggeredBy")] = ( - pydantic.Field(default=None) + pydantic.Field(alias="triggeredBy", default=None) ) """ Triggered By @@ -72,20 +78,20 @@ class JobRun(UniversalBaseModel): triggered_by_subject: typing_extensions.Annotated[ typing.Optional[Subject], FieldMetadata(alias="triggeredBySubject") - ] = pydantic.Field(default=None) + ] = pydantic.Field(alias="triggeredBySubject", default=None) """ Triggered By Subject """ exit_code: typing_extensions.Annotated[typing.Optional[int], FieldMetadata(alias="exitCode")] = pydantic.Field( - default=None + alias="exitCode", default=None ) """ Exit Code """ spark_ui: typing_extensions.Annotated[typing.Optional[str], FieldMetadata(alias="sparkUi")] = pydantic.Field( - default=None + alias="sparkUi", default=None ) """ Spark UI Url diff --git a/src/truefoundry_sdk/types/json_schema.py b/src/truefoundry_sdk/types/json_schema.py index 4ec32e45..5c6fce32 100644 --- a/src/truefoundry_sdk/types/json_schema.py +++ b/src/truefoundry_sdk/types/json_schema.py @@ -18,7 +18,9 @@ class JsonSchema(UniversalBaseModel): Name of the schema """ - schema_: typing_extensions.Annotated[typing.Dict[str, typing.Any], FieldMetadata(alias="schema")] = pydantic.Field() + schema_: typing_extensions.Annotated[typing.Dict[str, typing.Any], FieldMetadata(alias="schema")] = pydantic.Field( + alias="schema" + ) """ JSON schema object defining the expected structure """ diff --git a/src/truefoundry_sdk/types/jwt.py b/src/truefoundry_sdk/types/jwt.py index 437f3b73..9074fb3f 100644 --- a/src/truefoundry_sdk/types/jwt.py +++ b/src/truefoundry_sdk/types/jwt.py @@ -11,12 +11,18 @@ class Jwt(UniversalBaseModel): id: str - subject_type: typing_extensions.Annotated[str, FieldMetadata(alias="subjectType")] - subject_id: typing_extensions.Annotated[str, FieldMetadata(alias="subjectId")] + subject_type: typing_extensions.Annotated[str, FieldMetadata(alias="subjectType")] = pydantic.Field( + alias="subjectType" + ) + subject_id: typing_extensions.Annotated[str, FieldMetadata(alias="subjectId")] = pydantic.Field(alias="subjectId") metadata: typing.Optional[typing.Dict[str, typing.Any]] = None expiry: dt.datetime - created_at: typing_extensions.Annotated[dt.datetime, FieldMetadata(alias="createdAt")] - updated_at: typing_extensions.Annotated[dt.datetime, FieldMetadata(alias="updatedAt")] + created_at: typing_extensions.Annotated[dt.datetime, FieldMetadata(alias="createdAt")] = pydantic.Field( + alias="createdAt" + ) + updated_at: typing_extensions.Annotated[dt.datetime, FieldMetadata(alias="updatedAt")] = pydantic.Field( + alias="updatedAt" + ) if IS_PYDANTIC_V2: model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow") # type: ignore # Pydantic v2 diff --git a/src/truefoundry_sdk/types/list_files_request.py b/src/truefoundry_sdk/types/list_files_request.py index 9ebbc27a..6eb7e4a7 100644 --- a/src/truefoundry_sdk/types/list_files_request.py +++ b/src/truefoundry_sdk/types/list_files_request.py @@ -12,7 +12,9 @@ class ListFilesRequest(UniversalBaseModel): id: str path: typing.Optional[str] = None limit: typing.Optional[int] = None - page_token: typing_extensions.Annotated[typing.Optional[str], FieldMetadata(alias="pageToken")] = None + page_token: typing_extensions.Annotated[typing.Optional[str], FieldMetadata(alias="pageToken")] = pydantic.Field( + alias="pageToken", default=None + ) if IS_PYDANTIC_V2: model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow") # type: ignore # Pydantic v2 diff --git a/src/truefoundry_sdk/types/log.py b/src/truefoundry_sdk/types/log.py index f1e10fb0..6e4cca73 100644 --- a/src/truefoundry_sdk/types/log.py +++ b/src/truefoundry_sdk/types/log.py @@ -30,7 +30,7 @@ class Log(UniversalBaseModel): """ container_name: typing_extensions.Annotated[typing.Optional[str], FieldMetadata(alias="containerName")] = ( - pydantic.Field(default=None) + pydantic.Field(alias="containerName", default=None) ) """ Container Name diff --git a/src/truefoundry_sdk/types/logs_filter_query.py b/src/truefoundry_sdk/types/logs_filter_query.py index c9075fc3..2e60bb2e 100644 --- a/src/truefoundry_sdk/types/logs_filter_query.py +++ b/src/truefoundry_sdk/types/logs_filter_query.py @@ -11,7 +11,9 @@ class LogsFilterQuery(UniversalBaseModel): - match_string: typing_extensions.Annotated[str, FieldMetadata(alias="matchString")] = pydantic.Field() + match_string: typing_extensions.Annotated[str, FieldMetadata(alias="matchString")] = pydantic.Field( + alias="matchString" + ) """ String that needs to be matched """ diff --git a/src/truefoundry_sdk/types/mcp_server_provider_account.py b/src/truefoundry_sdk/types/mcp_server_provider_account.py index 082f9c07..1fe9283a 100644 --- a/src/truefoundry_sdk/types/mcp_server_provider_account.py +++ b/src/truefoundry_sdk/types/mcp_server_provider_account.py @@ -38,7 +38,9 @@ class McpServerProviderAccount(UniversalBaseModel): List of MCP Servers, which are part of this MCP Server Group. """ - owned_by: typing_extensions.Annotated[typing.Optional[OwnedBy], FieldMetadata(alias="ownedBy")] = None + owned_by: typing_extensions.Annotated[typing.Optional[OwnedBy], FieldMetadata(alias="ownedBy")] = pydantic.Field( + alias="ownedBy", default=None + ) if IS_PYDANTIC_V2: model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow") # type: ignore # Pydantic v2 diff --git a/src/truefoundry_sdk/types/mistral_ai_provider_account.py b/src/truefoundry_sdk/types/mistral_ai_provider_account.py index e972dab9..d1c6040a 100644 --- a/src/truefoundry_sdk/types/mistral_ai_provider_account.py +++ b/src/truefoundry_sdk/types/mistral_ai_provider_account.py @@ -38,7 +38,9 @@ class MistralAiProviderAccount(UniversalBaseModel): List of users who have access to this provider account """ - owned_by: typing_extensions.Annotated[typing.Optional[OwnedBy], FieldMetadata(alias="ownedBy")] = None + owned_by: typing_extensions.Annotated[typing.Optional[OwnedBy], FieldMetadata(alias="ownedBy")] = pydantic.Field( + alias="ownedBy", default=None + ) if IS_PYDANTIC_V2: model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow") # type: ignore # Pydantic v2 diff --git a/src/truefoundry_sdk/types/ml_repo_manifest.py b/src/truefoundry_sdk/types/ml_repo_manifest.py index 910a3f01..d683374b 100644 --- a/src/truefoundry_sdk/types/ml_repo_manifest.py +++ b/src/truefoundry_sdk/types/ml_repo_manifest.py @@ -36,7 +36,9 @@ class MlRepoManifest(UniversalBaseModel): Users and Teams that have access to MLRepo """ - owned_by: typing_extensions.Annotated[typing.Optional[OwnedBy], FieldMetadata(alias="ownedBy")] = None + owned_by: typing_extensions.Annotated[typing.Optional[OwnedBy], FieldMetadata(alias="ownedBy")] = pydantic.Field( + alias="ownedBy", default=None + ) if IS_PYDANTIC_V2: model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow") # type: ignore # Pydantic v2 diff --git a/src/truefoundry_sdk/types/multi_part_upload.py b/src/truefoundry_sdk/types/multi_part_upload.py index 954c0886..3cb7e554 100644 --- a/src/truefoundry_sdk/types/multi_part_upload.py +++ b/src/truefoundry_sdk/types/multi_part_upload.py @@ -15,7 +15,7 @@ class MultiPartUpload(UniversalBaseModel): part_signed_urls: typing.List[SignedUrl] s3compatible_upload_id: typing_extensions.Annotated[ typing.Optional[str], FieldMetadata(alias="s3_compatible_upload_id") - ] = None + ] = pydantic.Field(alias="s3_compatible_upload_id", default=None) azure_blob_block_ids: typing.Optional[typing.List[str]] = None finalize_signed_url: SignedUrl diff --git a/src/truefoundry_sdk/types/nomic_provider_account.py b/src/truefoundry_sdk/types/nomic_provider_account.py index 65cba4d0..13f7a77f 100644 --- a/src/truefoundry_sdk/types/nomic_provider_account.py +++ b/src/truefoundry_sdk/types/nomic_provider_account.py @@ -38,7 +38,9 @@ class NomicProviderAccount(UniversalBaseModel): List of users who have access to this provider account """ - owned_by: typing_extensions.Annotated[typing.Optional[OwnedBy], FieldMetadata(alias="ownedBy")] = None + owned_by: typing_extensions.Annotated[typing.Optional[OwnedBy], FieldMetadata(alias="ownedBy")] = pydantic.Field( + alias="ownedBy", default=None + ) if IS_PYDANTIC_V2: model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow") # type: ignore # Pydantic v2 diff --git a/src/truefoundry_sdk/types/ollama_provider_account.py b/src/truefoundry_sdk/types/ollama_provider_account.py index 30946b04..7e36a568 100644 --- a/src/truefoundry_sdk/types/ollama_provider_account.py +++ b/src/truefoundry_sdk/types/ollama_provider_account.py @@ -38,7 +38,9 @@ class OllamaProviderAccount(UniversalBaseModel): List of users who have access to this provider account """ - owned_by: typing_extensions.Annotated[typing.Optional[OwnedBy], FieldMetadata(alias="ownedBy")] = None + owned_by: typing_extensions.Annotated[typing.Optional[OwnedBy], FieldMetadata(alias="ownedBy")] = pydantic.Field( + alias="ownedBy", default=None + ) if IS_PYDANTIC_V2: model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow") # type: ignore # Pydantic v2 diff --git a/src/truefoundry_sdk/types/open_router_provider_account.py b/src/truefoundry_sdk/types/open_router_provider_account.py index b3c0839c..58ada1c5 100644 --- a/src/truefoundry_sdk/types/open_router_provider_account.py +++ b/src/truefoundry_sdk/types/open_router_provider_account.py @@ -38,7 +38,9 @@ class OpenRouterProviderAccount(UniversalBaseModel): List of users who have access to this provider account """ - owned_by: typing_extensions.Annotated[typing.Optional[OwnedBy], FieldMetadata(alias="ownedBy")] = None + owned_by: typing_extensions.Annotated[typing.Optional[OwnedBy], FieldMetadata(alias="ownedBy")] = pydantic.Field( + alias="ownedBy", default=None + ) if IS_PYDANTIC_V2: model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow") # type: ignore # Pydantic v2 diff --git a/src/truefoundry_sdk/types/openai_provider_account.py b/src/truefoundry_sdk/types/openai_provider_account.py index 4c471818..2da6abe4 100644 --- a/src/truefoundry_sdk/types/openai_provider_account.py +++ b/src/truefoundry_sdk/types/openai_provider_account.py @@ -43,7 +43,9 @@ class OpenaiProviderAccount(UniversalBaseModel): List of users who have access to this provider account """ - owned_by: typing_extensions.Annotated[typing.Optional[OwnedBy], FieldMetadata(alias="ownedBy")] = None + owned_by: typing_extensions.Annotated[typing.Optional[OwnedBy], FieldMetadata(alias="ownedBy")] = pydantic.Field( + alias="ownedBy", default=None + ) if IS_PYDANTIC_V2: model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow") # type: ignore # Pydantic v2 diff --git a/src/truefoundry_sdk/types/pager_duty_provider_account.py b/src/truefoundry_sdk/types/pager_duty_provider_account.py index ac9fbe50..9e4c54a9 100644 --- a/src/truefoundry_sdk/types/pager_duty_provider_account.py +++ b/src/truefoundry_sdk/types/pager_duty_provider_account.py @@ -30,7 +30,9 @@ class PagerDutyProviderAccount(UniversalBaseModel): List of integrations that are associated with the PagerDuty provider account """ - owned_by: typing_extensions.Annotated[typing.Optional[OwnedBy], FieldMetadata(alias="ownedBy")] = None + owned_by: typing_extensions.Annotated[typing.Optional[OwnedBy], FieldMetadata(alias="ownedBy")] = pydantic.Field( + alias="ownedBy", default=None + ) if IS_PYDANTIC_V2: model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow") # type: ignore # Pydantic v2 diff --git a/src/truefoundry_sdk/types/palm_provider_account.py b/src/truefoundry_sdk/types/palm_provider_account.py index 1e44a2dd..8cb316a0 100644 --- a/src/truefoundry_sdk/types/palm_provider_account.py +++ b/src/truefoundry_sdk/types/palm_provider_account.py @@ -38,7 +38,9 @@ class PalmProviderAccount(UniversalBaseModel): List of users who have access to this provider account """ - owned_by: typing_extensions.Annotated[typing.Optional[OwnedBy], FieldMetadata(alias="ownedBy")] = None + owned_by: typing_extensions.Annotated[typing.Optional[OwnedBy], FieldMetadata(alias="ownedBy")] = pydantic.Field( + alias="ownedBy", default=None + ) if IS_PYDANTIC_V2: model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow") # type: ignore # Pydantic v2 diff --git a/src/truefoundry_sdk/types/perplexity_ai_provider_account.py b/src/truefoundry_sdk/types/perplexity_ai_provider_account.py index 17bfdc8e..648745ae 100644 --- a/src/truefoundry_sdk/types/perplexity_ai_provider_account.py +++ b/src/truefoundry_sdk/types/perplexity_ai_provider_account.py @@ -38,7 +38,9 @@ class PerplexityAiProviderAccount(UniversalBaseModel): List of users who have access to this provider account """ - owned_by: typing_extensions.Annotated[typing.Optional[OwnedBy], FieldMetadata(alias="ownedBy")] = None + owned_by: typing_extensions.Annotated[typing.Optional[OwnedBy], FieldMetadata(alias="ownedBy")] = pydantic.Field( + alias="ownedBy", default=None + ) if IS_PYDANTIC_V2: model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow") # type: ignore # Pydantic v2 diff --git a/src/truefoundry_sdk/types/personal_access_token_manifest.py b/src/truefoundry_sdk/types/personal_access_token_manifest.py index 08404df6..071630e0 100644 --- a/src/truefoundry_sdk/types/personal_access_token_manifest.py +++ b/src/truefoundry_sdk/types/personal_access_token_manifest.py @@ -30,7 +30,9 @@ class PersonalAccessTokenManifest(UniversalBaseModel): The fully qualified name of the user """ - owned_by: typing_extensions.Annotated[typing.Optional[OwnedBy], FieldMetadata(alias="ownedBy")] = None + owned_by: typing_extensions.Annotated[typing.Optional[OwnedBy], FieldMetadata(alias="ownedBy")] = pydantic.Field( + alias="ownedBy", default=None + ) if IS_PYDANTIC_V2: model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow") # type: ignore # Pydantic v2 diff --git a/src/truefoundry_sdk/types/prometheus_alert_rule.py b/src/truefoundry_sdk/types/prometheus_alert_rule.py index 749c8007..f9d47e25 100644 --- a/src/truefoundry_sdk/types/prometheus_alert_rule.py +++ b/src/truefoundry_sdk/types/prometheus_alert_rule.py @@ -29,7 +29,7 @@ class PrometheusAlertRule(UniversalBaseModel): Enter a valid PromQL expression that defines the condition for triggering this alert. The alert will fire when this expression evaluates to true for the duration specified in the duration to trigger alert field. """ - for_: typing_extensions.Annotated[float, FieldMetadata(alias="for")] = pydantic.Field() + for_: typing_extensions.Annotated[float, FieldMetadata(alias="for")] = pydantic.Field(alias="for") """ The prometheus expression must remain true for this duration (in seconds) before the alert is triggered. If the condition becomes false before this time elapses, the alert will not fire. """ diff --git a/src/truefoundry_sdk/types/quay_provider_account.py b/src/truefoundry_sdk/types/quay_provider_account.py index 32dafdff..80737060 100644 --- a/src/truefoundry_sdk/types/quay_provider_account.py +++ b/src/truefoundry_sdk/types/quay_provider_account.py @@ -37,7 +37,9 @@ class QuayProviderAccount(UniversalBaseModel): List of integrations that are associated with the provider account. """ - owned_by: typing_extensions.Annotated[typing.Optional[OwnedBy], FieldMetadata(alias="ownedBy")] = None + owned_by: typing_extensions.Annotated[typing.Optional[OwnedBy], FieldMetadata(alias="ownedBy")] = pydantic.Field( + alias="ownedBy", default=None + ) if IS_PYDANTIC_V2: model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow") # type: ignore # Pydantic v2 diff --git a/src/truefoundry_sdk/types/recommendation.py b/src/truefoundry_sdk/types/recommendation.py index c24864e9..c6f01d76 100644 --- a/src/truefoundry_sdk/types/recommendation.py +++ b/src/truefoundry_sdk/types/recommendation.py @@ -11,22 +11,36 @@ class Recommendation(UniversalBaseModel): id: typing.Optional[str] = None - cluster_id: typing_extensions.Annotated[typing.Optional[str], FieldMetadata(alias="clusterId")] = None - application_id: typing_extensions.Annotated[typing.Optional[str], FieldMetadata(alias="applicationId")] = None - deployment_id: typing_extensions.Annotated[typing.Optional[str], FieldMetadata(alias="deploymentId")] = None + cluster_id: typing_extensions.Annotated[typing.Optional[str], FieldMetadata(alias="clusterId")] = pydantic.Field( + alias="clusterId", default=None + ) + application_id: typing_extensions.Annotated[typing.Optional[str], FieldMetadata(alias="applicationId")] = ( + pydantic.Field(alias="applicationId", default=None) + ) + deployment_id: typing_extensions.Annotated[typing.Optional[str], FieldMetadata(alias="deploymentId")] = ( + pydantic.Field(alias="deploymentId", default=None) + ) application_version: typing_extensions.Annotated[ typing.Optional[int], FieldMetadata(alias="applicationVersion") - ] = None + ] = pydantic.Field(alias="applicationVersion", default=None) recommendation_data: typing_extensions.Annotated[ typing.Dict[str, typing.Any], FieldMetadata(alias="recommendationData") - ] - recommendation_type: typing_extensions.Annotated[str, FieldMetadata(alias="recommendationType")] + ] = pydantic.Field(alias="recommendationData") + recommendation_type: typing_extensions.Annotated[str, FieldMetadata(alias="recommendationType")] = pydantic.Field( + alias="recommendationType" + ) applied_deployment_id: typing_extensions.Annotated[ typing.Optional[str], FieldMetadata(alias="appliedDeploymentId") - ] = None - expiry_timestamp: typing_extensions.Annotated[dt.datetime, FieldMetadata(alias="expiryTimestamp")] - created_at: typing_extensions.Annotated[typing.Optional[dt.datetime], FieldMetadata(alias="createdAt")] = None - updated_at: typing_extensions.Annotated[typing.Optional[dt.datetime], FieldMetadata(alias="updatedAt")] = None + ] = pydantic.Field(alias="appliedDeploymentId", default=None) + expiry_timestamp: typing_extensions.Annotated[dt.datetime, FieldMetadata(alias="expiryTimestamp")] = pydantic.Field( + alias="expiryTimestamp" + ) + created_at: typing_extensions.Annotated[typing.Optional[dt.datetime], FieldMetadata(alias="createdAt")] = ( + pydantic.Field(alias="createdAt", default=None) + ) + updated_at: typing_extensions.Annotated[typing.Optional[dt.datetime], FieldMetadata(alias="updatedAt")] = ( + pydantic.Field(alias="updatedAt", default=None) + ) if IS_PYDANTIC_V2: model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow") # type: ignore # Pydantic v2 diff --git a/src/truefoundry_sdk/types/role_manifest.py b/src/truefoundry_sdk/types/role_manifest.py index 2b895964..51351f32 100644 --- a/src/truefoundry_sdk/types/role_manifest.py +++ b/src/truefoundry_sdk/types/role_manifest.py @@ -20,7 +20,9 @@ class RoleManifest(UniversalBaseModel): Unique identifier of the role across the organization """ - display_name: typing_extensions.Annotated[str, FieldMetadata(alias="displayName")] = pydantic.Field() + display_name: typing_extensions.Annotated[str, FieldMetadata(alias="displayName")] = pydantic.Field( + alias="displayName" + ) """ Human-readable name for the role """ @@ -30,7 +32,9 @@ class RoleManifest(UniversalBaseModel): Description of the role that explains its purpose and permissions """ - resource_type: typing_extensions.Annotated[str, FieldMetadata(alias="resourceType")] = pydantic.Field() + resource_type: typing_extensions.Annotated[str, FieldMetadata(alias="resourceType")] = pydantic.Field( + alias="resourceType" + ) """ Type of resource this role applies to """ diff --git a/src/truefoundry_sdk/types/role_permissions.py b/src/truefoundry_sdk/types/role_permissions.py index d618bbc1..7c889490 100644 --- a/src/truefoundry_sdk/types/role_permissions.py +++ b/src/truefoundry_sdk/types/role_permissions.py @@ -9,7 +9,9 @@ class RolePermissions(UniversalBaseModel): - resource_type: typing_extensions.Annotated[str, FieldMetadata(alias="resourceType")] = pydantic.Field() + resource_type: typing_extensions.Annotated[str, FieldMetadata(alias="resourceType")] = pydantic.Field( + alias="resourceType" + ) """ Type of resource this role can perform actions on """ diff --git a/src/truefoundry_sdk/types/samba_nova_provider_account.py b/src/truefoundry_sdk/types/samba_nova_provider_account.py index 91f45eb2..8e27b74d 100644 --- a/src/truefoundry_sdk/types/samba_nova_provider_account.py +++ b/src/truefoundry_sdk/types/samba_nova_provider_account.py @@ -38,7 +38,9 @@ class SambaNovaProviderAccount(UniversalBaseModel): List of users who have access to this provider account """ - owned_by: typing_extensions.Annotated[typing.Optional[OwnedBy], FieldMetadata(alias="ownedBy")] = None + owned_by: typing_extensions.Annotated[typing.Optional[OwnedBy], FieldMetadata(alias="ownedBy")] = pydantic.Field( + alias="ownedBy", default=None + ) if IS_PYDANTIC_V2: model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow") # type: ignore # Pydantic v2 diff --git a/src/truefoundry_sdk/types/secret.py b/src/truefoundry_sdk/types/secret.py index 776c368c..029a74c5 100644 --- a/src/truefoundry_sdk/types/secret.py +++ b/src/truefoundry_sdk/types/secret.py @@ -16,20 +16,28 @@ class Secret(UniversalBaseModel): id: str fqn: str name: str - secret_group_id: typing_extensions.Annotated[str, FieldMetadata(alias="secretGroupId")] + secret_group_id: typing_extensions.Annotated[str, FieldMetadata(alias="secretGroupId")] = pydantic.Field( + alias="secretGroupId" + ) value: typing.Optional[str] = None created_by_subject: typing_extensions.Annotated[ typing.Optional[Subject], FieldMetadata(alias="createdBySubject") - ] = None - created_at: typing_extensions.Annotated[typing.Optional[dt.datetime], FieldMetadata(alias="createdAt")] = None - updated_at: typing_extensions.Annotated[typing.Optional[dt.datetime], FieldMetadata(alias="updatedAt")] = None + ] = pydantic.Field(alias="createdBySubject", default=None) + created_at: typing_extensions.Annotated[typing.Optional[dt.datetime], FieldMetadata(alias="createdAt")] = ( + pydantic.Field(alias="createdAt", default=None) + ) + updated_at: typing_extensions.Annotated[typing.Optional[dt.datetime], FieldMetadata(alias="updatedAt")] = ( + pydantic.Field(alias="updatedAt", default=None) + ) secret_versions: typing_extensions.Annotated[ typing.Optional[typing.List["SecretVersion"]], FieldMetadata(alias="secretVersions") - ] = None + ] = pydantic.Field(alias="secretVersions", default=None) active_deployments_count: typing_extensions.Annotated[ typing.Optional[int], FieldMetadata(alias="activeDeploymentsCount") - ] = None - created_by: typing_extensions.Annotated[typing.Optional[str], FieldMetadata(alias="createdBy")] = None + ] = pydantic.Field(alias="activeDeploymentsCount", default=None) + created_by: typing_extensions.Annotated[typing.Optional[str], FieldMetadata(alias="createdBy")] = pydantic.Field( + alias="createdBy", default=None + ) if IS_PYDANTIC_V2: model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow") # type: ignore # Pydantic v2 diff --git a/src/truefoundry_sdk/types/secret_group.py b/src/truefoundry_sdk/types/secret_group.py index 5976fc90..0270e17a 100644 --- a/src/truefoundry_sdk/types/secret_group.py +++ b/src/truefoundry_sdk/types/secret_group.py @@ -16,14 +16,28 @@ class SecretGroup(UniversalBaseModel): id: typing.Optional[str] = None fqn: typing.Optional[str] = None name: str - tenant_name: typing_extensions.Annotated[str, FieldMetadata(alias="tenantName")] - created_by_subject: typing_extensions.Annotated[Subject, FieldMetadata(alias="createdBySubject")] - associated_secrets: typing_extensions.Annotated[typing.List["Secret"], FieldMetadata(alias="associatedSecrets")] - integration_id: typing_extensions.Annotated[typing.Optional[str], FieldMetadata(alias="integrationId")] = None + tenant_name: typing_extensions.Annotated[str, FieldMetadata(alias="tenantName")] = pydantic.Field( + alias="tenantName" + ) + created_by_subject: typing_extensions.Annotated[Subject, FieldMetadata(alias="createdBySubject")] = pydantic.Field( + alias="createdBySubject" + ) + associated_secrets: typing_extensions.Annotated[typing.List["Secret"], FieldMetadata(alias="associatedSecrets")] = ( + pydantic.Field(alias="associatedSecrets") + ) + integration_id: typing_extensions.Annotated[typing.Optional[str], FieldMetadata(alias="integrationId")] = ( + pydantic.Field(alias="integrationId", default=None) + ) manifest: typing.Optional[typing.Dict[str, typing.Any]] = None - created_at: typing_extensions.Annotated[dt.datetime, FieldMetadata(alias="createdAt")] - updated_at: typing_extensions.Annotated[dt.datetime, FieldMetadata(alias="updatedAt")] - created_by: typing_extensions.Annotated[typing.Optional[str], FieldMetadata(alias="createdBy")] = None + created_at: typing_extensions.Annotated[dt.datetime, FieldMetadata(alias="createdAt")] = pydantic.Field( + alias="createdAt" + ) + updated_at: typing_extensions.Annotated[dt.datetime, FieldMetadata(alias="updatedAt")] = pydantic.Field( + alias="updatedAt" + ) + created_by: typing_extensions.Annotated[typing.Optional[str], FieldMetadata(alias="createdBy")] = pydantic.Field( + alias="createdBy", default=None + ) if IS_PYDANTIC_V2: model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow") # type: ignore # Pydantic v2 diff --git a/src/truefoundry_sdk/types/secret_version.py b/src/truefoundry_sdk/types/secret_version.py index e85cda80..9e91c225 100644 --- a/src/truefoundry_sdk/types/secret_version.py +++ b/src/truefoundry_sdk/types/secret_version.py @@ -17,9 +17,15 @@ class SecretVersion(UniversalBaseModel): value: typing.Optional[str] = None version: typing.Optional[float] = None secret: typing.Optional["Secret"] = None - secret_id: typing_extensions.Annotated[typing.Optional[str], FieldMetadata(alias="secretId")] = None - created_at: typing_extensions.Annotated[typing.Optional[dt.datetime], FieldMetadata(alias="createdAt")] = None - updated_at: typing_extensions.Annotated[typing.Optional[dt.datetime], FieldMetadata(alias="updatedAt")] = None + secret_id: typing_extensions.Annotated[typing.Optional[str], FieldMetadata(alias="secretId")] = pydantic.Field( + alias="secretId", default=None + ) + created_at: typing_extensions.Annotated[typing.Optional[dt.datetime], FieldMetadata(alias="createdAt")] = ( + pydantic.Field(alias="createdAt", default=None) + ) + updated_at: typing_extensions.Annotated[typing.Optional[dt.datetime], FieldMetadata(alias="updatedAt")] = ( + pydantic.Field(alias="updatedAt", default=None) + ) if IS_PYDANTIC_V2: model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow") # type: ignore # Pydantic v2 diff --git a/src/truefoundry_sdk/types/self_hosted_model_provider_account.py b/src/truefoundry_sdk/types/self_hosted_model_provider_account.py index 106a39cb..caf9aa1a 100644 --- a/src/truefoundry_sdk/types/self_hosted_model_provider_account.py +++ b/src/truefoundry_sdk/types/self_hosted_model_provider_account.py @@ -38,7 +38,9 @@ class SelfHostedModelProviderAccount(UniversalBaseModel): Collaborators """ - owned_by: typing_extensions.Annotated[typing.Optional[OwnedBy], FieldMetadata(alias="ownedBy")] = None + owned_by: typing_extensions.Annotated[typing.Optional[OwnedBy], FieldMetadata(alias="ownedBy")] = pydantic.Field( + alias="ownedBy", default=None + ) if IS_PYDANTIC_V2: model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow") # type: ignore # Pydantic v2 diff --git a/src/truefoundry_sdk/types/session.py b/src/truefoundry_sdk/types/session.py index d1b9506e..45a2b2c9 100644 --- a/src/truefoundry_sdk/types/session.py +++ b/src/truefoundry_sdk/types/session.py @@ -13,22 +13,32 @@ class Session(UniversalBaseModel): id: str - user_name: typing_extensions.Annotated[typing.Optional[str], FieldMetadata(alias="userName")] = None - subject_slug: typing_extensions.Annotated[str, FieldMetadata(alias="subjectSlug")] + user_name: typing_extensions.Annotated[typing.Optional[str], FieldMetadata(alias="userName")] = pydantic.Field( + alias="userName", default=None + ) + subject_slug: typing_extensions.Annotated[str, FieldMetadata(alias="subjectSlug")] = pydantic.Field( + alias="subjectSlug" + ) subject_controller_name: typing_extensions.Annotated[ typing.Optional[str], FieldMetadata(alias="subjectControllerName") - ] = None - subject_pat_name: typing_extensions.Annotated[typing.Optional[str], FieldMetadata(alias="subjectPatName")] = None + ] = pydantic.Field(alias="subjectControllerName", default=None) + subject_pat_name: typing_extensions.Annotated[typing.Optional[str], FieldMetadata(alias="subjectPatName")] = ( + pydantic.Field(alias="subjectPatName", default=None) + ) email: typing.Optional[str] = None - subject_type: typing_extensions.Annotated[SubjectType, FieldMetadata(alias="subjectType")] - tenant_name: typing_extensions.Annotated[typing.Optional[str], FieldMetadata(alias="tenantName")] = None + subject_type: typing_extensions.Annotated[SubjectType, FieldMetadata(alias="subjectType")] = pydantic.Field( + alias="subjectType" + ) + tenant_name: typing_extensions.Annotated[typing.Optional[str], FieldMetadata(alias="tenantName")] = pydantic.Field( + alias="tenantName", default=None + ) roles: typing.List[str] teams: typing.List[str] accounts: typing.List[str] metadata: typing.Optional[UserMetadata] = None service_account_metadata: typing_extensions.Annotated[ typing.Optional[typing.Dict[str, typing.Any]], FieldMetadata(alias="serviceAccountMetadata") - ] = None + ] = pydantic.Field(alias="serviceAccountMetadata", default=None) account: typing.Optional[Account] = None if IS_PYDANTIC_V2: diff --git a/src/truefoundry_sdk/types/slack_provider_account.py b/src/truefoundry_sdk/types/slack_provider_account.py index ad69d581..c52f1a8d 100644 --- a/src/truefoundry_sdk/types/slack_provider_account.py +++ b/src/truefoundry_sdk/types/slack_provider_account.py @@ -30,7 +30,9 @@ class SlackProviderAccount(UniversalBaseModel): List of integrations that are associated with the provider account. """ - owned_by: typing_extensions.Annotated[typing.Optional[OwnedBy], FieldMetadata(alias="ownedBy")] = None + owned_by: typing_extensions.Annotated[typing.Optional[OwnedBy], FieldMetadata(alias="ownedBy")] = pydantic.Field( + alias="ownedBy", default=None + ) if IS_PYDANTIC_V2: model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow") # type: ignore # Pydantic v2 diff --git a/src/truefoundry_sdk/types/snowflake_cortex_provider_account.py b/src/truefoundry_sdk/types/snowflake_cortex_provider_account.py index 2f4623e8..7a3df225 100644 --- a/src/truefoundry_sdk/types/snowflake_cortex_provider_account.py +++ b/src/truefoundry_sdk/types/snowflake_cortex_provider_account.py @@ -45,7 +45,9 @@ class SnowflakeCortexProviderAccount(UniversalBaseModel): List of users who have access to this provider account """ - owned_by: typing_extensions.Annotated[typing.Optional[OwnedBy], FieldMetadata(alias="ownedBy")] = None + owned_by: typing_extensions.Annotated[typing.Optional[OwnedBy], FieldMetadata(alias="ownedBy")] = pydantic.Field( + alias="ownedBy", default=None + ) if IS_PYDANTIC_V2: model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow") # type: ignore # Pydantic v2 diff --git a/src/truefoundry_sdk/types/span_attribute_filter.py b/src/truefoundry_sdk/types/span_attribute_filter.py index f5900c04..11edeaa2 100644 --- a/src/truefoundry_sdk/types/span_attribute_filter.py +++ b/src/truefoundry_sdk/types/span_attribute_filter.py @@ -11,7 +11,9 @@ class SpanAttributeFilter(UniversalBaseModel): - span_attribute_key: typing_extensions.Annotated[str, FieldMetadata(alias="spanAttributeKey")] + span_attribute_key: typing_extensions.Annotated[str, FieldMetadata(alias="spanAttributeKey")] = pydantic.Field( + alias="spanAttributeKey" + ) operator: SpanAttributeFilterOperator value: SpanAttributeFilterValue diff --git a/src/truefoundry_sdk/types/span_field_filter.py b/src/truefoundry_sdk/types/span_field_filter.py index cdd5f470..a4eebee7 100644 --- a/src/truefoundry_sdk/types/span_field_filter.py +++ b/src/truefoundry_sdk/types/span_field_filter.py @@ -12,7 +12,9 @@ class SpanFieldFilter(UniversalBaseModel): - span_field_name: typing_extensions.Annotated[SpanFieldFilterSpanFieldName, FieldMetadata(alias="spanFieldName")] + span_field_name: typing_extensions.Annotated[SpanFieldFilterSpanFieldName, FieldMetadata(alias="spanFieldName")] = ( + pydantic.Field(alias="spanFieldName") + ) operator: SpanFieldFilterOperator value: SpanFieldFilterValue diff --git a/src/truefoundry_sdk/types/spark_job_trigger_input.py b/src/truefoundry_sdk/types/spark_job_trigger_input.py index a550a665..57c3fc89 100644 --- a/src/truefoundry_sdk/types/spark_job_trigger_input.py +++ b/src/truefoundry_sdk/types/spark_job_trigger_input.py @@ -10,7 +10,7 @@ class SparkJobTriggerInput(UniversalBaseModel): main_class: typing_extensions.Annotated[typing.Optional[str], FieldMetadata(alias="mainClass")] = pydantic.Field( - default=None + alias="mainClass", default=None ) """ Main Class for Spark Job @@ -18,7 +18,7 @@ class SparkJobTriggerInput(UniversalBaseModel): main_application_file: typing_extensions.Annotated[ typing.Optional[str], FieldMetadata(alias="mainApplicationFile") - ] = pydantic.Field(default=None) + ] = pydantic.Field(alias="mainApplicationFile", default=None) """ Main Application File for Spark Job """ diff --git a/src/truefoundry_sdk/types/subject.py b/src/truefoundry_sdk/types/subject.py index 9609f411..2418a409 100644 --- a/src/truefoundry_sdk/types/subject.py +++ b/src/truefoundry_sdk/types/subject.py @@ -10,18 +10,20 @@ class Subject(UniversalBaseModel): - subject_id: typing_extensions.Annotated[str, FieldMetadata(alias="subjectId")] = pydantic.Field() + subject_id: typing_extensions.Annotated[str, FieldMetadata(alias="subjectId")] = pydantic.Field(alias="subjectId") """ Subject ID """ - subject_type: typing_extensions.Annotated[SubjectType, FieldMetadata(alias="subjectType")] = pydantic.Field() + subject_type: typing_extensions.Annotated[SubjectType, FieldMetadata(alias="subjectType")] = pydantic.Field( + alias="subjectType" + ) """ Subject type """ subject_slug: typing_extensions.Annotated[typing.Optional[str], FieldMetadata(alias="subjectSlug")] = ( - pydantic.Field(default=None) + pydantic.Field(alias="subjectSlug", default=None) ) """ Subject slug @@ -29,7 +31,7 @@ class Subject(UniversalBaseModel): subject_display_name: typing_extensions.Annotated[ typing.Optional[str], FieldMetadata(alias="subjectDisplayName") - ] = pydantic.Field(default=None) + ] = pydantic.Field(alias="subjectDisplayName", default=None) """ Subject display name """ diff --git a/src/truefoundry_sdk/types/sync_token_in_secret_store_info.py b/src/truefoundry_sdk/types/sync_token_in_secret_store_info.py index 36dd1b8b..96bfb467 100644 --- a/src/truefoundry_sdk/types/sync_token_in_secret_store_info.py +++ b/src/truefoundry_sdk/types/sync_token_in_secret_store_info.py @@ -9,7 +9,7 @@ class SyncTokenInSecretStoreInfo(UniversalBaseModel): - updated_at: typing_extensions.Annotated[str, FieldMetadata(alias="updatedAt")] = pydantic.Field() + updated_at: typing_extensions.Annotated[str, FieldMetadata(alias="updatedAt")] = pydantic.Field(alias="updatedAt") """ ISO timestamp of when the token was synced """ diff --git a/src/truefoundry_sdk/types/sync_virtual_account_token_response.py b/src/truefoundry_sdk/types/sync_virtual_account_token_response.py index 097e1c25..ce2caa38 100644 --- a/src/truefoundry_sdk/types/sync_virtual_account_token_response.py +++ b/src/truefoundry_sdk/types/sync_virtual_account_token_response.py @@ -12,7 +12,7 @@ class SyncVirtualAccountTokenResponse(UniversalBaseModel): sync_token_in_secret_store_info: typing_extensions.Annotated[ SyncTokenInSecretStoreInfo, FieldMetadata(alias="syncTokenInSecretStoreInfo") - ] = pydantic.Field() + ] = pydantic.Field(alias="syncTokenInSecretStoreInfo") """ Sync status including timestamp and error (if any) """ diff --git a/src/truefoundry_sdk/types/team.py b/src/truefoundry_sdk/types/team.py index 5b7e720b..9433c76f 100644 --- a/src/truefoundry_sdk/types/team.py +++ b/src/truefoundry_sdk/types/team.py @@ -13,14 +13,24 @@ class Team(UniversalBaseModel): id: str - team_name: typing_extensions.Annotated[str, FieldMetadata(alias="teamName")] + team_name: typing_extensions.Annotated[str, FieldMetadata(alias="teamName")] = pydantic.Field(alias="teamName") description: str - tenant_name: typing_extensions.Annotated[str, FieldMetadata(alias="tenantName")] - account_id: typing_extensions.Annotated[typing.Optional[str], FieldMetadata(alias="accountId")] = None - created_by_subject: typing_extensions.Annotated[Subject, FieldMetadata(alias="createdBySubject")] + tenant_name: typing_extensions.Annotated[str, FieldMetadata(alias="tenantName")] = pydantic.Field( + alias="tenantName" + ) + account_id: typing_extensions.Annotated[typing.Optional[str], FieldMetadata(alias="accountId")] = pydantic.Field( + alias="accountId", default=None + ) + created_by_subject: typing_extensions.Annotated[Subject, FieldMetadata(alias="createdBySubject")] = pydantic.Field( + alias="createdBySubject" + ) members: typing.Optional[typing.List[str]] = None - created_at: typing_extensions.Annotated[dt.datetime, FieldMetadata(alias="createdAt")] - updated_at: typing_extensions.Annotated[dt.datetime, FieldMetadata(alias="updatedAt")] + created_at: typing_extensions.Annotated[dt.datetime, FieldMetadata(alias="createdAt")] = pydantic.Field( + alias="createdAt" + ) + updated_at: typing_extensions.Annotated[dt.datetime, FieldMetadata(alias="updatedAt")] = pydantic.Field( + alias="updatedAt" + ) manifest: TeamManifest if IS_PYDANTIC_V2: diff --git a/src/truefoundry_sdk/types/team_manifest.py b/src/truefoundry_sdk/types/team_manifest.py index 560c4812..210ad43b 100644 --- a/src/truefoundry_sdk/types/team_manifest.py +++ b/src/truefoundry_sdk/types/team_manifest.py @@ -30,7 +30,9 @@ class TeamManifest(UniversalBaseModel): Enter email of each of the user you want to add in the team. """ - owned_by: typing_extensions.Annotated[typing.Optional[TeamOwnedBy], FieldMetadata(alias="ownedBy")] = None + owned_by: typing_extensions.Annotated[typing.Optional[TeamOwnedBy], FieldMetadata(alias="ownedBy")] = ( + pydantic.Field(alias="ownedBy", default=None) + ) if IS_PYDANTIC_V2: model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow") # type: ignore # Pydantic v2 diff --git a/src/truefoundry_sdk/types/terminate_job_response.py b/src/truefoundry_sdk/types/terminate_job_response.py index 91e4bf77..e7d4ed90 100644 --- a/src/truefoundry_sdk/types/terminate_job_response.py +++ b/src/truefoundry_sdk/types/terminate_job_response.py @@ -15,7 +15,9 @@ class TerminateJobResponse(UniversalBaseModel): Terminate Job Message """ - job_run_status: typing_extensions.Annotated[JobRunStatus, FieldMetadata(alias="jobRunStatus")] = pydantic.Field() + job_run_status: typing_extensions.Annotated[JobRunStatus, FieldMetadata(alias="jobRunStatus")] = pydantic.Field( + alias="jobRunStatus" + ) """ Job run status """ diff --git a/src/truefoundry_sdk/types/together_ai_provider_account.py b/src/truefoundry_sdk/types/together_ai_provider_account.py index dcadca78..bd3332eb 100644 --- a/src/truefoundry_sdk/types/together_ai_provider_account.py +++ b/src/truefoundry_sdk/types/together_ai_provider_account.py @@ -38,7 +38,9 @@ class TogetherAiProviderAccount(UniversalBaseModel): List of users who have access to this provider account """ - owned_by: typing_extensions.Annotated[typing.Optional[OwnedBy], FieldMetadata(alias="ownedBy")] = None + owned_by: typing_extensions.Annotated[typing.Optional[OwnedBy], FieldMetadata(alias="ownedBy")] = pydantic.Field( + alias="ownedBy", default=None + ) if IS_PYDANTIC_V2: model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow") # type: ignore # Pydantic v2 diff --git a/src/truefoundry_sdk/types/token_pagination.py b/src/truefoundry_sdk/types/token_pagination.py index 322ccee8..ccb08a2b 100644 --- a/src/truefoundry_sdk/types/token_pagination.py +++ b/src/truefoundry_sdk/types/token_pagination.py @@ -15,14 +15,14 @@ class TokenPagination(UniversalBaseModel): """ next_page_token: typing_extensions.Annotated[typing.Optional[str], FieldMetadata(alias="nextPageToken")] = ( - pydantic.Field(default=None) + pydantic.Field(alias="nextPageToken", default=None) ) """ Base64 encoded token for the next page """ previous_page_token: typing_extensions.Annotated[typing.Optional[str], FieldMetadata(alias="previousPageToken")] = ( - pydantic.Field(default=None) + pydantic.Field(alias="previousPageToken", default=None) ) """ Base64 encoded token for the previous page diff --git a/src/truefoundry_sdk/types/trace_span.py b/src/truefoundry_sdk/types/trace_span.py index d30cbec7..03c8edc3 100644 --- a/src/truefoundry_sdk/types/trace_span.py +++ b/src/truefoundry_sdk/types/trace_span.py @@ -10,42 +10,48 @@ class TraceSpan(UniversalBaseModel): - span_id: typing_extensions.Annotated[str, FieldMetadata(alias="spanId")] = pydantic.Field() + span_id: typing_extensions.Annotated[str, FieldMetadata(alias="spanId")] = pydantic.Field(alias="spanId") """ Unique identifier for the span within the trace. """ - trace_id: typing_extensions.Annotated[str, FieldMetadata(alias="traceId")] = pydantic.Field() + trace_id: typing_extensions.Annotated[str, FieldMetadata(alias="traceId")] = pydantic.Field(alias="traceId") """ Unique identifier for the trace that contains this span. """ - parent_span_id: typing_extensions.Annotated[str, FieldMetadata(alias="parentSpanId")] = pydantic.Field() + parent_span_id: typing_extensions.Annotated[str, FieldMetadata(alias="parentSpanId")] = pydantic.Field( + alias="parentSpanId" + ) """ Identifier of the parent span in the trace hierarchy. """ - service_name: typing_extensions.Annotated[str, FieldMetadata(alias="serviceName")] = pydantic.Field() + service_name: typing_extensions.Annotated[str, FieldMetadata(alias="serviceName")] = pydantic.Field( + alias="serviceName" + ) """ Name of the service that generated this span. """ - span_name: typing_extensions.Annotated[str, FieldMetadata(alias="spanName")] = pydantic.Field() + span_name: typing_extensions.Annotated[str, FieldMetadata(alias="spanName")] = pydantic.Field(alias="spanName") """ Name of the span """ - span_kind: typing_extensions.Annotated[str, FieldMetadata(alias="spanKind")] = pydantic.Field() + span_kind: typing_extensions.Annotated[str, FieldMetadata(alias="spanKind")] = pydantic.Field(alias="spanKind") """ Type of span (e.g., CLIENT, SERVER, INTERNAL, PRODUCER, CONSUMER). """ - scope_name: typing_extensions.Annotated[str, FieldMetadata(alias="scopeName")] = pydantic.Field() + scope_name: typing_extensions.Annotated[str, FieldMetadata(alias="scopeName")] = pydantic.Field(alias="scopeName") """ Name of the instrumentation scope that created this span. """ - scope_version: typing_extensions.Annotated[str, FieldMetadata(alias="scopeVersion")] = pydantic.Field() + scope_version: typing_extensions.Annotated[str, FieldMetadata(alias="scopeVersion")] = pydantic.Field( + alias="scopeVersion" + ) """ Version of the instrumentation scope that created this span. """ @@ -55,24 +61,30 @@ class TraceSpan(UniversalBaseModel): Timestamp in ISO 8601 format (e.g., 2025-03-12T00:00:09.872Z). """ - duration_ns: typing_extensions.Annotated[float, FieldMetadata(alias="durationNs")] = pydantic.Field() + duration_ns: typing_extensions.Annotated[float, FieldMetadata(alias="durationNs")] = pydantic.Field( + alias="durationNs" + ) """ Duration of the span in nanoseconds. """ - status_code: typing_extensions.Annotated[str, FieldMetadata(alias="statusCode")] = pydantic.Field() + status_code: typing_extensions.Annotated[str, FieldMetadata(alias="statusCode")] = pydantic.Field( + alias="statusCode" + ) """ Status code of the span (e.g., OK, ERROR, UNSET). """ - status_message: typing_extensions.Annotated[str, FieldMetadata(alias="statusMessage")] = pydantic.Field() + status_message: typing_extensions.Annotated[str, FieldMetadata(alias="statusMessage")] = pydantic.Field( + alias="statusMessage" + ) """ Human-readable status message describing the span result. """ span_attributes: typing_extensions.Annotated[ typing.Dict[str, typing.Any], FieldMetadata(alias="spanAttributes") - ] = pydantic.Field() + ] = pydantic.Field(alias="spanAttributes") """ Key-value pairs containing additional metadata about the span. """ @@ -82,7 +94,9 @@ class TraceSpan(UniversalBaseModel): Array of events that occurred during the span execution. """ - created_by_subject: typing_extensions.Annotated[Subject, FieldMetadata(alias="createdBySubject")] = pydantic.Field() + created_by_subject: typing_extensions.Annotated[Subject, FieldMetadata(alias="createdBySubject")] = pydantic.Field( + alias="createdBySubject" + ) """ Subject (user or virtualaccount) that created this span. """ diff --git a/src/truefoundry_sdk/types/trigger_job_run_response.py b/src/truefoundry_sdk/types/trigger_job_run_response.py index 8bcdcbab..89ddd003 100644 --- a/src/truefoundry_sdk/types/trigger_job_run_response.py +++ b/src/truefoundry_sdk/types/trigger_job_run_response.py @@ -15,7 +15,9 @@ class TriggerJobRunResponse(UniversalBaseModel): Job triggered """ - job_run_name: typing_extensions.Annotated[str, FieldMetadata(alias="jobRunName")] = pydantic.Field() + job_run_name: typing_extensions.Annotated[str, FieldMetadata(alias="jobRunName")] = pydantic.Field( + alias="jobRunName" + ) """ Name of the job run """ diff --git a/src/truefoundry_sdk/types/true_foundry_apply_response.py b/src/truefoundry_sdk/types/true_foundry_apply_response.py index bfcf75c1..9b553de8 100644 --- a/src/truefoundry_sdk/types/true_foundry_apply_response.py +++ b/src/truefoundry_sdk/types/true_foundry_apply_response.py @@ -13,7 +13,7 @@ class TrueFoundryApplyResponse(UniversalBaseModel): existing_manifest: typing_extensions.Annotated[ typing.Optional[TrueFoundryApplyResponseExistingManifest], FieldMetadata(alias="existingManifest") - ] = pydantic.Field(default=None) + ] = pydantic.Field(alias="existingManifest", default=None) """ The existing manifest of the resource """ diff --git a/src/truefoundry_sdk/types/true_foundry_provider_account.py b/src/truefoundry_sdk/types/true_foundry_provider_account.py index a37187a5..609677d8 100644 --- a/src/truefoundry_sdk/types/true_foundry_provider_account.py +++ b/src/truefoundry_sdk/types/true_foundry_provider_account.py @@ -30,7 +30,9 @@ class TrueFoundryProviderAccount(UniversalBaseModel): List of integrations that are associated with the provider account. """ - owned_by: typing_extensions.Annotated[typing.Optional[OwnedBy], FieldMetadata(alias="ownedBy")] = None + owned_by: typing_extensions.Annotated[typing.Optional[OwnedBy], FieldMetadata(alias="ownedBy")] = pydantic.Field( + alias="ownedBy", default=None + ) if IS_PYDANTIC_V2: model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow") # type: ignore # Pydantic v2 diff --git a/src/truefoundry_sdk/types/ttl_provider_account.py b/src/truefoundry_sdk/types/ttl_provider_account.py index ff0fe4ed..23eb6fdf 100644 --- a/src/truefoundry_sdk/types/ttl_provider_account.py +++ b/src/truefoundry_sdk/types/ttl_provider_account.py @@ -30,7 +30,9 @@ class TtlProviderAccount(UniversalBaseModel): List of integrations that are associated with the provider account. """ - owned_by: typing_extensions.Annotated[typing.Optional[OwnedBy], FieldMetadata(alias="ownedBy")] = None + owned_by: typing_extensions.Annotated[typing.Optional[OwnedBy], FieldMetadata(alias="ownedBy")] = pydantic.Field( + alias="ownedBy", default=None + ) if IS_PYDANTIC_V2: model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow") # type: ignore # Pydantic v2 diff --git a/src/truefoundry_sdk/types/upgrade_data.py b/src/truefoundry_sdk/types/upgrade_data.py index 3008805e..0a7a1f8a 100644 --- a/src/truefoundry_sdk/types/upgrade_data.py +++ b/src/truefoundry_sdk/types/upgrade_data.py @@ -13,13 +13,21 @@ class UpgradeData(UniversalBaseModel): diff: typing.Optional[typing.List["IChange"]] = None - current_manifest: typing_extensions.Annotated[typing.Optional[Helm], FieldMetadata(alias="currentManifest")] = None - desired_manifest: typing_extensions.Annotated[typing.Optional[Helm], FieldMetadata(alias="desiredManifest")] = None - upgrade_possible: typing_extensions.Annotated[typing.Optional[bool], FieldMetadata(alias="upgradePossible")] = None + current_manifest: typing_extensions.Annotated[typing.Optional[Helm], FieldMetadata(alias="currentManifest")] = ( + pydantic.Field(alias="currentManifest", default=None) + ) + desired_manifest: typing_extensions.Annotated[typing.Optional[Helm], FieldMetadata(alias="desiredManifest")] = ( + pydantic.Field(alias="desiredManifest", default=None) + ) + upgrade_possible: typing_extensions.Annotated[typing.Optional[bool], FieldMetadata(alias="upgradePossible")] = ( + pydantic.Field(alias="upgradePossible", default=None) + ) conflict_fields: typing_extensions.Annotated[ typing.Optional[typing.List[str]], FieldMetadata(alias="conflictFields") - ] = None - has_conflict: typing_extensions.Annotated[typing.Optional[bool], FieldMetadata(alias="hasConflict")] = None + ] = pydantic.Field(alias="conflictFields", default=None) + has_conflict: typing_extensions.Annotated[typing.Optional[bool], FieldMetadata(alias="hasConflict")] = ( + pydantic.Field(alias="hasConflict", default=None) + ) if IS_PYDANTIC_V2: model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow") # type: ignore # Pydantic v2 diff --git a/src/truefoundry_sdk/types/user.py b/src/truefoundry_sdk/types/user.py index 2ebdb0ed..5cc8058d 100644 --- a/src/truefoundry_sdk/types/user.py +++ b/src/truefoundry_sdk/types/user.py @@ -14,15 +14,21 @@ class User(UniversalBaseModel): id: str email: str - tenant_name: typing_extensions.Annotated[str, FieldMetadata(alias="tenantName")] + tenant_name: typing_extensions.Annotated[str, FieldMetadata(alias="tenantName")] = pydantic.Field( + alias="tenantName" + ) metadata: UserMetadata roles: typing.Optional[typing.List[str]] = None roles_with_resource: typing_extensions.Annotated[ typing.Optional[typing.List[UserRoleWithResource]], FieldMetadata(alias="rolesWithResource") - ] = None + ] = pydantic.Field(alias="rolesWithResource", default=None) active: bool - created_at: typing_extensions.Annotated[dt.datetime, FieldMetadata(alias="createdAt")] - updated_at: typing_extensions.Annotated[dt.datetime, FieldMetadata(alias="updatedAt")] + created_at: typing_extensions.Annotated[dt.datetime, FieldMetadata(alias="createdAt")] = pydantic.Field( + alias="createdAt" + ) + updated_at: typing_extensions.Annotated[dt.datetime, FieldMetadata(alias="updatedAt")] = pydantic.Field( + alias="updatedAt" + ) if IS_PYDANTIC_V2: model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow") # type: ignore # Pydantic v2 diff --git a/src/truefoundry_sdk/types/user_metadata.py b/src/truefoundry_sdk/types/user_metadata.py index 2b5326b3..299c5c22 100644 --- a/src/truefoundry_sdk/types/user_metadata.py +++ b/src/truefoundry_sdk/types/user_metadata.py @@ -11,20 +11,32 @@ class UserMetadata(UniversalBaseModel): sub: typing.Optional[str] = None - image_url: typing_extensions.Annotated[typing.Optional[str], FieldMetadata(alias="imageURL")] = None - display_name: typing_extensions.Annotated[typing.Optional[str], FieldMetadata(alias="displayName")] = None + image_url: typing_extensions.Annotated[typing.Optional[str], FieldMetadata(alias="imageURL")] = pydantic.Field( + alias="imageURL", default=None + ) + display_name: typing_extensions.Annotated[typing.Optional[str], FieldMetadata(alias="displayName")] = ( + pydantic.Field(alias="displayName", default=None) + ) user_object: typing_extensions.Annotated[ typing.Optional[typing.Dict[str, typing.Any]], FieldMetadata(alias="userObject") - ] = None - invite_accepted: typing_extensions.Annotated[typing.Optional[bool], FieldMetadata(alias="inviteAccepted")] = None - registered_in_idp: typing_extensions.Annotated[typing.Optional[bool], FieldMetadata(alias="registeredInIdp")] = None + ] = pydantic.Field(alias="userObject", default=None) + invite_accepted: typing_extensions.Annotated[typing.Optional[bool], FieldMetadata(alias="inviteAccepted")] = ( + pydantic.Field(alias="inviteAccepted", default=None) + ) + registered_in_idp: typing_extensions.Annotated[typing.Optional[bool], FieldMetadata(alias="registeredInIdp")] = ( + pydantic.Field(alias="registeredInIdp", default=None) + ) preference: typing.Optional[typing.Dict[str, typing.Any]] = None groups: typing.Optional[typing.List[str]] = None tenant_role_managed_by: typing_extensions.Annotated[ typing.Optional[UserMetadataTenantRoleManagedBy], FieldMetadata(alias="tenantRoleManagedBy") - ] = None - sso_name: typing_extensions.Annotated[typing.Optional[str], FieldMetadata(alias="ssoName")] = None - is_primary_sso: typing_extensions.Annotated[typing.Optional[bool], FieldMetadata(alias="isPrimarySSO")] = None + ] = pydantic.Field(alias="tenantRoleManagedBy", default=None) + sso_name: typing_extensions.Annotated[typing.Optional[str], FieldMetadata(alias="ssoName")] = pydantic.Field( + alias="ssoName", default=None + ) + is_primary_sso: typing_extensions.Annotated[typing.Optional[bool], FieldMetadata(alias="isPrimarySSO")] = ( + pydantic.Field(alias="isPrimarySSO", default=None) + ) if IS_PYDANTIC_V2: model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow") # type: ignore # Pydantic v2 diff --git a/src/truefoundry_sdk/types/user_resource.py b/src/truefoundry_sdk/types/user_resource.py index 77e69362..b801485f 100644 --- a/src/truefoundry_sdk/types/user_resource.py +++ b/src/truefoundry_sdk/types/user_resource.py @@ -9,23 +9,27 @@ class UserResource(UniversalBaseModel): - resource_type: typing_extensions.Annotated[str, FieldMetadata(alias="resourceType")] = pydantic.Field() + resource_type: typing_extensions.Annotated[str, FieldMetadata(alias="resourceType")] = pydantic.Field( + alias="resourceType" + ) """ Resource Type """ - resource_id: typing_extensions.Annotated[str, FieldMetadata(alias="resourceId")] = pydantic.Field() + resource_id: typing_extensions.Annotated[str, FieldMetadata(alias="resourceId")] = pydantic.Field( + alias="resourceId" + ) """ Resource ID """ - role_id: typing_extensions.Annotated[str, FieldMetadata(alias="roleId")] = pydantic.Field() + role_id: typing_extensions.Annotated[str, FieldMetadata(alias="roleId")] = pydantic.Field(alias="roleId") """ Role ID """ resource_name: typing_extensions.Annotated[typing.Optional[str], FieldMetadata(alias="resourceName")] = ( - pydantic.Field(default=None) + pydantic.Field(alias="resourceName", default=None) ) """ Resource Name (if available) diff --git a/src/truefoundry_sdk/types/user_role_with_resource.py b/src/truefoundry_sdk/types/user_role_with_resource.py index 7f963840..c90974f7 100644 --- a/src/truefoundry_sdk/types/user_role_with_resource.py +++ b/src/truefoundry_sdk/types/user_role_with_resource.py @@ -10,9 +10,13 @@ class UserRoleWithResource(UniversalBaseModel): - role_id: typing_extensions.Annotated[str, FieldMetadata(alias="roleId")] - resource_type: typing_extensions.Annotated[UserRoleWithResourceResourceType, FieldMetadata(alias="resourceType")] - resource_id: typing_extensions.Annotated[str, FieldMetadata(alias="resourceId")] + role_id: typing_extensions.Annotated[str, FieldMetadata(alias="roleId")] = pydantic.Field(alias="roleId") + resource_type: typing_extensions.Annotated[ + UserRoleWithResourceResourceType, FieldMetadata(alias="resourceType") + ] = pydantic.Field(alias="resourceType") + resource_id: typing_extensions.Annotated[str, FieldMetadata(alias="resourceId")] = pydantic.Field( + alias="resourceId" + ) if IS_PYDANTIC_V2: model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow") # type: ignore # Pydantic v2 diff --git a/src/truefoundry_sdk/types/virtual_account.py b/src/truefoundry_sdk/types/virtual_account.py index 61ed0330..7369f24a 100644 --- a/src/truefoundry_sdk/types/virtual_account.py +++ b/src/truefoundry_sdk/types/virtual_account.py @@ -16,21 +16,39 @@ class VirtualAccount(UniversalBaseModel): id: str name: str type: str - tenant_name: typing_extensions.Annotated[str, FieldMetadata(alias="tenantName")] + tenant_name: typing_extensions.Annotated[str, FieldMetadata(alias="tenantName")] = pydantic.Field( + alias="tenantName" + ) manifest: typing.Optional[VirtualAccountManifest] = None - jwt_id: typing_extensions.Annotated[typing.Optional[str], FieldMetadata(alias="jwtId")] = None - created_by_subject: typing_extensions.Annotated[Subject, FieldMetadata(alias="createdBySubject")] - created_at: typing_extensions.Annotated[dt.datetime, FieldMetadata(alias="createdAt")] - updated_at: typing_extensions.Annotated[dt.datetime, FieldMetadata(alias="updatedAt")] - is_expired: typing_extensions.Annotated[typing.Optional[bool], FieldMetadata(alias="isExpired")] = None + jwt_id: typing_extensions.Annotated[typing.Optional[str], FieldMetadata(alias="jwtId")] = pydantic.Field( + alias="jwtId", default=None + ) + created_by_subject: typing_extensions.Annotated[Subject, FieldMetadata(alias="createdBySubject")] = pydantic.Field( + alias="createdBySubject" + ) + created_at: typing_extensions.Annotated[dt.datetime, FieldMetadata(alias="createdAt")] = pydantic.Field( + alias="createdAt" + ) + updated_at: typing_extensions.Annotated[dt.datetime, FieldMetadata(alias="updatedAt")] = pydantic.Field( + alias="updatedAt" + ) + is_expired: typing_extensions.Annotated[typing.Optional[bool], FieldMetadata(alias="isExpired")] = pydantic.Field( + alias="isExpired", default=None + ) jwts: typing.Optional[typing.List[Jwt]] = None - account_id: typing_extensions.Annotated[typing.Optional[str], FieldMetadata(alias="accountId")] = None + account_id: typing_extensions.Annotated[typing.Optional[str], FieldMetadata(alias="accountId")] = pydantic.Field( + alias="accountId", default=None + ) metadata: typing.Optional[typing.Dict[str, typing.Any]] = None - role_ids: typing_extensions.Annotated[typing.Optional[typing.List[str]], FieldMetadata(alias="roleIds")] = None - created_by: typing_extensions.Annotated[typing.Optional[str], FieldMetadata(alias="createdBy")] = None + role_ids: typing_extensions.Annotated[typing.Optional[typing.List[str]], FieldMetadata(alias="roleIds")] = ( + pydantic.Field(alias="roleIds", default=None) + ) + created_by: typing_extensions.Annotated[typing.Optional[str], FieldMetadata(alias="createdBy")] = pydantic.Field( + alias="createdBy", default=None + ) next_scheduled_rotation: typing_extensions.Annotated[ typing.Optional[str], FieldMetadata(alias="nextScheduledRotation") - ] = None + ] = pydantic.Field(alias="nextScheduledRotation", default=None) if IS_PYDANTIC_V2: model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow") # type: ignore # Pydantic v2 diff --git a/src/truefoundry_sdk/types/virtual_account_manifest.py b/src/truefoundry_sdk/types/virtual_account_manifest.py index 04a080af..3e9ec523 100644 --- a/src/truefoundry_sdk/types/virtual_account_manifest.py +++ b/src/truefoundry_sdk/types/virtual_account_manifest.py @@ -37,7 +37,9 @@ class VirtualAccountManifest(UniversalBaseModel): auto_rotate: typing.Optional[AutoRotate] = None notification_target: typing.Optional[NotificationTarget] = None secret_store_config: typing.Optional[SecretStoreConfig] = None - owned_by: typing_extensions.Annotated[typing.Optional[VirtualAccountOwnedBy], FieldMetadata(alias="ownedBy")] = None + owned_by: typing_extensions.Annotated[typing.Optional[VirtualAccountOwnedBy], FieldMetadata(alias="ownedBy")] = ( + pydantic.Field(alias="ownedBy", default=None) + ) if IS_PYDANTIC_V2: model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow") # type: ignore # Pydantic v2 diff --git a/src/truefoundry_sdk/types/virtual_model_provider_account.py b/src/truefoundry_sdk/types/virtual_model_provider_account.py index 1a9cf17d..a34824c2 100644 --- a/src/truefoundry_sdk/types/virtual_model_provider_account.py +++ b/src/truefoundry_sdk/types/virtual_model_provider_account.py @@ -36,7 +36,9 @@ class VirtualModelProviderAccount(UniversalBaseModel): List of users who have access to this Virtual Model Provider Group """ - owned_by: typing_extensions.Annotated[typing.Optional[OwnedBy], FieldMetadata(alias="ownedBy")] = None + owned_by: typing_extensions.Annotated[typing.Optional[OwnedBy], FieldMetadata(alias="ownedBy")] = pydantic.Field( + alias="ownedBy", default=None + ) if IS_PYDANTIC_V2: model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow") # type: ignore # Pydantic v2 diff --git a/src/truefoundry_sdk/types/webhook_provider_account.py b/src/truefoundry_sdk/types/webhook_provider_account.py index 982f3e25..206972b1 100644 --- a/src/truefoundry_sdk/types/webhook_provider_account.py +++ b/src/truefoundry_sdk/types/webhook_provider_account.py @@ -30,7 +30,9 @@ class WebhookProviderAccount(UniversalBaseModel): List of integrations that are associated with the provider account. """ - owned_by: typing_extensions.Annotated[typing.Optional[OwnedBy], FieldMetadata(alias="ownedBy")] = None + owned_by: typing_extensions.Annotated[typing.Optional[OwnedBy], FieldMetadata(alias="ownedBy")] = pydantic.Field( + alias="ownedBy", default=None + ) if IS_PYDANTIC_V2: model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow") # type: ignore # Pydantic v2 diff --git a/src/truefoundry_sdk/types/workspace.py b/src/truefoundry_sdk/types/workspace.py index 32410f73..9fd31f7d 100644 --- a/src/truefoundry_sdk/types/workspace.py +++ b/src/truefoundry_sdk/types/workspace.py @@ -15,16 +15,32 @@ class Workspace(UniversalBaseModel): id: str fqn: str name: str - tenant_name: typing_extensions.Annotated[str, FieldMetadata(alias="tenantName")] - cluster_id: typing_extensions.Annotated[str, FieldMetadata(alias="clusterId")] - created_by_subject: typing_extensions.Annotated[Subject, FieldMetadata(alias="createdBySubject")] - created_at: typing_extensions.Annotated[dt.datetime, FieldMetadata(alias="createdAt")] - updated_at: typing_extensions.Annotated[dt.datetime, FieldMetadata(alias="updatedAt")] - environment_id: typing_extensions.Annotated[typing.Optional[str], FieldMetadata(alias="environmentId")] = None + tenant_name: typing_extensions.Annotated[str, FieldMetadata(alias="tenantName")] = pydantic.Field( + alias="tenantName" + ) + cluster_id: typing_extensions.Annotated[str, FieldMetadata(alias="clusterId")] = pydantic.Field(alias="clusterId") + created_by_subject: typing_extensions.Annotated[Subject, FieldMetadata(alias="createdBySubject")] = pydantic.Field( + alias="createdBySubject" + ) + created_at: typing_extensions.Annotated[dt.datetime, FieldMetadata(alias="createdAt")] = pydantic.Field( + alias="createdAt" + ) + updated_at: typing_extensions.Annotated[dt.datetime, FieldMetadata(alias="updatedAt")] = pydantic.Field( + alias="updatedAt" + ) + environment_id: typing_extensions.Annotated[typing.Optional[str], FieldMetadata(alias="environmentId")] = ( + pydantic.Field(alias="environmentId", default=None) + ) manifest: WorkspaceManifest - account_id: typing_extensions.Annotated[typing.Optional[str], FieldMetadata(alias="accountId")] = None - is_system_ws: typing_extensions.Annotated[typing.Optional[bool], FieldMetadata(alias="isSystemWs")] = None - created_by: typing_extensions.Annotated[typing.Optional[str], FieldMetadata(alias="createdBy")] = None + account_id: typing_extensions.Annotated[typing.Optional[str], FieldMetadata(alias="accountId")] = pydantic.Field( + alias="accountId", default=None + ) + is_system_ws: typing_extensions.Annotated[typing.Optional[bool], FieldMetadata(alias="isSystemWs")] = ( + pydantic.Field(alias="isSystemWs", default=None) + ) + created_by: typing_extensions.Annotated[typing.Optional[str], FieldMetadata(alias="createdBy")] = pydantic.Field( + alias="createdBy", default=None + ) if IS_PYDANTIC_V2: model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow") # type: ignore # Pydantic v2 diff --git a/src/truefoundry_sdk/types/workspace_manifest.py b/src/truefoundry_sdk/types/workspace_manifest.py index c344e0d4..c113410e 100644 --- a/src/truefoundry_sdk/types/workspace_manifest.py +++ b/src/truefoundry_sdk/types/workspace_manifest.py @@ -52,7 +52,9 @@ class WorkspaceManifest(UniversalBaseModel): Permissions """ - owned_by: typing_extensions.Annotated[typing.Optional[OwnedBy], FieldMetadata(alias="ownedBy")] = None + owned_by: typing_extensions.Annotated[typing.Optional[OwnedBy], FieldMetadata(alias="ownedBy")] = pydantic.Field( + alias="ownedBy", default=None + ) if IS_PYDANTIC_V2: model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow") # type: ignore # Pydantic v2 diff --git a/src/truefoundry_sdk/users/raw_client.py b/src/truefoundry_sdk/users/raw_client.py index 2b4e346c..6c67182d 100644 --- a/src/truefoundry_sdk/users/raw_client.py +++ b/src/truefoundry_sdk/users/raw_client.py @@ -102,7 +102,7 @@ def list( _has_next = True _get_next = lambda: self.list( limit=limit, - offset=offset + len(_items), + offset=offset + len(_items or []), query=query, show_invalid_users=show_invalid_users, include_virtual_accounts=include_virtual_accounts, @@ -899,7 +899,7 @@ async def list( async def _get_next(): return await self.list( limit=limit, - offset=offset + len(_items), + offset=offset + len(_items or []), query=query, show_invalid_users=show_invalid_users, include_virtual_accounts=include_virtual_accounts, diff --git a/src/truefoundry_sdk/virtual_accounts/raw_client.py b/src/truefoundry_sdk/virtual_accounts/raw_client.py index 45181b37..38f4b42a 100644 --- a/src/truefoundry_sdk/virtual_accounts/raw_client.py +++ b/src/truefoundry_sdk/virtual_accounts/raw_client.py @@ -80,7 +80,7 @@ def list( _has_next = True _get_next = lambda: self.list( limit=limit, - offset=offset + len(_items), + offset=offset + len(_items or []), request_options=request_options, ) return SyncPager(has_next=_has_next, items=_items, get_next=_get_next, response=_parsed_response) @@ -507,7 +507,7 @@ async def list( async def _get_next(): return await self.list( limit=limit, - offset=offset + len(_items), + offset=offset + len(_items or []), request_options=request_options, ) diff --git a/src/truefoundry_sdk/workspaces/raw_client.py b/src/truefoundry_sdk/workspaces/raw_client.py index f9fffcc3..7531aea3 100644 --- a/src/truefoundry_sdk/workspaces/raw_client.py +++ b/src/truefoundry_sdk/workspaces/raw_client.py @@ -96,7 +96,7 @@ def list( _has_next = True _get_next = lambda: self.list( limit=limit, - offset=offset + len(_items), + offset=offset + len(_items or []), cluster_id=cluster_id, name=name, fqn=fqn, @@ -395,7 +395,7 @@ async def list( async def _get_next(): return await self.list( limit=limit, - offset=offset + len(_items), + offset=offset + len(_items or []), cluster_id=cluster_id, name=name, fqn=fqn, diff --git a/tests/utils/test_http_client.py b/tests/utils/test_http_client.py index 2e7743f2..e2083580 100644 --- a/tests/utils/test_http_client.py +++ b/tests/utils/test_http_client.py @@ -1,9 +1,49 @@ # This file was auto-generated by Fern from our API Definition. -from truefoundry_sdk.core.http_client import get_request_body, remove_none_from_dict +from typing import Any, Dict + +import pytest + +from truefoundry_sdk.core.http_client import ( + AsyncHttpClient, + HttpClient, + _build_url, + get_request_body, + remove_none_from_dict, +) from truefoundry_sdk.core.request_options import RequestOptions +# Stub clients for testing HttpClient and AsyncHttpClient +class _DummySyncClient: + """A minimal stub for httpx.Client that records request arguments.""" + + def __init__(self) -> None: + self.last_request_kwargs: Dict[str, Any] = {} + + def request(self, **kwargs: Any) -> "_DummyResponse": + self.last_request_kwargs = kwargs + return _DummyResponse() + + +class _DummyAsyncClient: + """A minimal stub for httpx.AsyncClient that records request arguments.""" + + def __init__(self) -> None: + self.last_request_kwargs: Dict[str, Any] = {} + + async def request(self, **kwargs: Any) -> "_DummyResponse": + self.last_request_kwargs = kwargs + return _DummyResponse() + + +class _DummyResponse: + """A minimal stub for httpx.Response.""" + + status_code = 200 + headers: Dict[str, str] = {} + + def get_request_options() -> RequestOptions: return {"additional_body_parameters": {"see you": "later"}} @@ -52,17 +92,30 @@ def test_get_none_request_body() -> None: def test_get_empty_json_request_body() -> None: + """Test that implicit empty bodies (json=None) are collapsed to None.""" unrelated_request_options: RequestOptions = {"max_retries": 3} json_body, data_body = get_request_body(json=None, data=None, request_options=unrelated_request_options, omit=None) assert json_body is None assert data_body is None - json_body_extras, data_body_extras = get_request_body( - json={}, data=None, request_options=unrelated_request_options, omit=None - ) - assert json_body_extras is None - assert data_body_extras is None +def test_explicit_empty_json_body_is_preserved() -> None: + """Test that explicit empty bodies (json={}) are preserved and sent as {}. + + This is important for endpoints where the request body is required but all + fields are optional. The server expects valid JSON ({}) not an empty body. + """ + unrelated_request_options: RequestOptions = {"max_retries": 3} + + # Explicit json={} should be preserved + json_body, data_body = get_request_body(json={}, data=None, request_options=unrelated_request_options, omit=None) + assert json_body == {} + assert data_body is None + + # Explicit data={} should also be preserved + json_body2, data_body2 = get_request_body(json=None, data={}, request_options=unrelated_request_options, omit=None) + assert json_body2 is None + assert data_body2 == {} def test_json_body_preserves_none_values() -> None: @@ -107,3 +160,141 @@ def test_remove_none_from_dict_empty_dict() -> None: def test_remove_none_from_dict_all_none() -> None: """Test that remove_none_from_dict handles dict with all None values.""" assert remove_none_from_dict({"a": None, "b": None}) == {} + + +def test_http_client_does_not_pass_empty_params_list() -> None: + """Test that HttpClient passes params=None when params are empty. + + This prevents httpx from stripping existing query parameters from the URL, + which happens when params=[] or params={} is passed. + """ + dummy_client = _DummySyncClient() + http_client = HttpClient( + httpx_client=dummy_client, # type: ignore[arg-type] + base_timeout=lambda: None, + base_headers=lambda: {}, + base_url=lambda: "https://example.com", + ) + + # Use a path with query params (e.g., pagination cursor URL) + http_client.request( + path="resource?after=123", + method="GET", + params=None, + request_options=None, + ) + + # We care that httpx receives params=None, not [] or {} + assert "params" in dummy_client.last_request_kwargs + assert dummy_client.last_request_kwargs["params"] is None + + # Verify the query string in the URL is preserved + url = str(dummy_client.last_request_kwargs["url"]) + assert "after=123" in url, f"Expected query param 'after=123' in URL, got: {url}" + + +def test_http_client_passes_encoded_params_when_present() -> None: + """Test that HttpClient passes encoded params when params are provided.""" + dummy_client = _DummySyncClient() + http_client = HttpClient( + httpx_client=dummy_client, # type: ignore[arg-type] + base_timeout=lambda: None, + base_headers=lambda: {}, + base_url=lambda: "https://example.com/resource", + ) + + http_client.request( + path="", + method="GET", + params={"after": "456"}, + request_options=None, + ) + + params = dummy_client.last_request_kwargs["params"] + # For a simple dict, encode_query should give a single (key, value) tuple + assert params == [("after", "456")] + + +@pytest.mark.asyncio +async def test_async_http_client_does_not_pass_empty_params_list() -> None: + """Test that AsyncHttpClient passes params=None when params are empty. + + This prevents httpx from stripping existing query parameters from the URL, + which happens when params=[] or params={} is passed. + """ + dummy_client = _DummyAsyncClient() + http_client = AsyncHttpClient( + httpx_client=dummy_client, # type: ignore[arg-type] + base_timeout=lambda: None, + base_headers=lambda: {}, + base_url=lambda: "https://example.com", + async_base_headers=None, + ) + + # Use a path with query params (e.g., pagination cursor URL) + await http_client.request( + path="resource?after=123", + method="GET", + params=None, + request_options=None, + ) + + # We care that httpx receives params=None, not [] or {} + assert "params" in dummy_client.last_request_kwargs + assert dummy_client.last_request_kwargs["params"] is None + + # Verify the query string in the URL is preserved + url = str(dummy_client.last_request_kwargs["url"]) + assert "after=123" in url, f"Expected query param 'after=123' in URL, got: {url}" + + +@pytest.mark.asyncio +async def test_async_http_client_passes_encoded_params_when_present() -> None: + """Test that AsyncHttpClient passes encoded params when params are provided.""" + dummy_client = _DummyAsyncClient() + http_client = AsyncHttpClient( + httpx_client=dummy_client, # type: ignore[arg-type] + base_timeout=lambda: None, + base_headers=lambda: {}, + base_url=lambda: "https://example.com/resource", + async_base_headers=None, + ) + + await http_client.request( + path="", + method="GET", + params={"after": "456"}, + request_options=None, + ) + + params = dummy_client.last_request_kwargs["params"] + # For a simple dict, encode_query should give a single (key, value) tuple + assert params == [("after", "456")] + + +def test_basic_url_joining() -> None: + """Test basic URL joining with a simple base URL and path.""" + result = _build_url("https://api.example.com", "/users") + assert result == "https://api.example.com/users" + + +def test_basic_url_joining_trailing_slash() -> None: + """Test basic URL joining with a simple base URL and path.""" + result = _build_url("https://api.example.com/", "/users") + assert result == "https://api.example.com/users" + + +def test_preserves_base_url_path_prefix() -> None: + """Test that path prefixes in base URL are preserved. + + This is the critical bug fix - urllib.parse.urljoin() would strip + the path prefix when the path starts with '/'. + """ + result = _build_url("https://cloud.example.com/org/tenant/api", "/users") + assert result == "https://cloud.example.com/org/tenant/api/users" + + +def test_preserves_base_url_path_prefix_trailing_slash() -> None: + """Test that path prefixes in base URL are preserved.""" + result = _build_url("https://cloud.example.com/org/tenant/api/", "/users") + assert result == "https://cloud.example.com/org/tenant/api/users" From 7914a37a8664b3a6bae077e4e991c46a2b167e3e Mon Sep 17 00:00:00 2001 From: Chirag Jain Date: Fri, 30 Jan 2026 22:52:24 +0530 Subject: [PATCH 2/2] Fix mypy issue --- src/truefoundry_sdk/_wrapped_clients.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/truefoundry_sdk/_wrapped_clients.py b/src/truefoundry_sdk/_wrapped_clients.py index 6a3388a5..727ddec5 100644 --- a/src/truefoundry_sdk/_wrapped_clients.py +++ b/src/truefoundry_sdk/_wrapped_clients.py @@ -48,7 +48,7 @@ def _get_by_fqn(client: HasListMethod[T, R], *, fqn: str, request_options: Optio raise NotFoundError( body=HttpError( message=f"No entity found with fqn {fqn}", - status_code=404, + statusCode=404, ) ) return result @@ -67,7 +67,7 @@ async def _aget_by_fqn( raise NotFoundError( body=HttpError( message=f"No entity found with fqn {fqn}", - status_code=404, + statusCode=404, ) ) return result