runloop_api_client 1.20.1__tar.gz → 1.20.3__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- runloop_api_client-1.20.3/.release-please-manifest.json +3 -0
- {runloop_api_client-1.20.1 → runloop_api_client-1.20.3}/CHANGELOG.md +30 -0
- {runloop_api_client-1.20.1 → runloop_api_client-1.20.3}/PKG-INFO +1 -1
- {runloop_api_client-1.20.1 → runloop_api_client-1.20.3}/api.md +1 -0
- {runloop_api_client-1.20.1 → runloop_api_client-1.20.3}/pyproject.toml +2 -2
- {runloop_api_client-1.20.1 → runloop_api_client-1.20.3}/src/runloop_api_client/_base_client.py +220 -20
- {runloop_api_client-1.20.1 → runloop_api_client-1.20.3}/src/runloop_api_client/_client.py +51 -3
- {runloop_api_client-1.20.1 → runloop_api_client-1.20.3}/src/runloop_api_client/_constants.py +1 -1
- {runloop_api_client-1.20.1 → runloop_api_client-1.20.3}/src/runloop_api_client/_qs.py +2 -6
- {runloop_api_client-1.20.1 → runloop_api_client-1.20.3}/src/runloop_api_client/_types.py +3 -0
- {runloop_api_client-1.20.1 → runloop_api_client-1.20.3}/src/runloop_api_client/_utils/_utils.py +34 -8
- {runloop_api_client-1.20.1 → runloop_api_client-1.20.3}/src/runloop_api_client/_version.py +1 -1
- {runloop_api_client-1.20.1 → runloop_api_client-1.20.3}/src/runloop_api_client/lib/polling.py +44 -1
- {runloop_api_client-1.20.1 → runloop_api_client-1.20.3}/src/runloop_api_client/lib/polling_async.py +1 -1
- runloop_api_client-1.20.3/src/runloop_api_client/lib/wait_for_status.py +99 -0
- {runloop_api_client-1.20.1 → runloop_api_client-1.20.3}/src/runloop_api_client/resources/agents.py +12 -8
- {runloop_api_client-1.20.1 → runloop_api_client-1.20.3}/src/runloop_api_client/resources/devboxes/devboxes.py +39 -89
- {runloop_api_client-1.20.1 → runloop_api_client-1.20.3}/src/runloop_api_client/resources/devboxes/executions.py +23 -50
- {runloop_api_client-1.20.1 → runloop_api_client-1.20.3}/src/runloop_api_client/resources/secrets.py +12 -10
- {runloop_api_client-1.20.1 → runloop_api_client-1.20.3}/src/runloop_api_client/types/agent_create_params.py +8 -3
- {runloop_api_client-1.20.1 → runloop_api_client-1.20.3}/src/runloop_api_client/types/agent_view.py +8 -3
- {runloop_api_client-1.20.1 → runloop_api_client-1.20.3}/tests/api_resources/test_agents.py +2 -8
- {runloop_api_client-1.20.1 → runloop_api_client-1.20.3}/tests/api_resources/test_secrets.py +76 -0
- {runloop_api_client-1.20.1 → runloop_api_client-1.20.3}/tests/test_client.py +5 -1
- {runloop_api_client-1.20.1 → runloop_api_client-1.20.3}/tests/test_extract_files.py +23 -5
- {runloop_api_client-1.20.1 → runloop_api_client-1.20.3}/tests/test_files.py +1 -1
- runloop_api_client-1.20.3/tests/test_shared_pool.py +319 -0
- {runloop_api_client-1.20.1 → runloop_api_client-1.20.3}/uv.lock +1 -1
- runloop_api_client-1.20.1/.release-please-manifest.json +0 -3
- {runloop_api_client-1.20.1 → runloop_api_client-1.20.3}/.gitignore +0 -0
- {runloop_api_client-1.20.1 → runloop_api_client-1.20.3}/CONTRIBUTING.md +0 -0
- {runloop_api_client-1.20.1 → runloop_api_client-1.20.3}/EXAMPLES.md +0 -0
- {runloop_api_client-1.20.1 → runloop_api_client-1.20.3}/LICENSE +0 -0
- {runloop_api_client-1.20.1 → runloop_api_client-1.20.3}/README-SDK.md +0 -0
- {runloop_api_client-1.20.1 → runloop_api_client-1.20.3}/README.md +0 -0
- {runloop_api_client-1.20.1 → runloop_api_client-1.20.3}/SECURITY.md +0 -0
- {runloop_api_client-1.20.1 → runloop_api_client-1.20.3}/bin/check-release-environment +0 -0
- {runloop_api_client-1.20.1 → runloop_api_client-1.20.3}/bin/publish-pypi +0 -0
- {runloop_api_client-1.20.1 → runloop_api_client-1.20.3}/examples/__init__.py +0 -0
- {runloop_api_client-1.20.1 → runloop_api_client-1.20.3}/examples/_harness.py +0 -0
- {runloop_api_client-1.20.1 → runloop_api_client-1.20.3}/examples/blueprint_with_build_context.py +0 -0
- {runloop_api_client-1.20.1 → runloop_api_client-1.20.3}/examples/devbox_from_blueprint_lifecycle.py +0 -0
- {runloop_api_client-1.20.1 → runloop_api_client-1.20.3}/examples/devbox_snapshot_resume.py +0 -0
- {runloop_api_client-1.20.1 → runloop_api_client-1.20.3}/examples/devbox_snapshots.py +0 -0
- {runloop_api_client-1.20.1 → runloop_api_client-1.20.3}/examples/devbox_tunnel.py +0 -0
- {runloop_api_client-1.20.1 → runloop_api_client-1.20.3}/examples/example_types.py +0 -0
- {runloop_api_client-1.20.1 → runloop_api_client-1.20.3}/examples/mcp_github_tools.py +0 -0
- {runloop_api_client-1.20.1 → runloop_api_client-1.20.3}/examples/registry.py +0 -0
- {runloop_api_client-1.20.1 → runloop_api_client-1.20.3}/examples/secrets_with_devbox.py +0 -0
- {runloop_api_client-1.20.1 → runloop_api_client-1.20.3}/release-please-config.json +0 -0
- {runloop_api_client-1.20.1 → runloop_api_client-1.20.3}/requirements-dev.lock +0 -0
- {runloop_api_client-1.20.1 → runloop_api_client-1.20.3}/src/runloop/lib/.keep +0 -0
- {runloop_api_client-1.20.1 → runloop_api_client-1.20.3}/src/runloop_api_client/__init__.py +0 -0
- {runloop_api_client-1.20.1 → runloop_api_client-1.20.3}/src/runloop_api_client/_compat.py +0 -0
- {runloop_api_client-1.20.1 → runloop_api_client-1.20.3}/src/runloop_api_client/_exceptions.py +0 -0
- {runloop_api_client-1.20.1 → runloop_api_client-1.20.3}/src/runloop_api_client/_files.py +0 -0
- {runloop_api_client-1.20.1 → runloop_api_client-1.20.3}/src/runloop_api_client/_models.py +0 -0
- {runloop_api_client-1.20.1 → runloop_api_client-1.20.3}/src/runloop_api_client/_resource.py +0 -0
- {runloop_api_client-1.20.1 → runloop_api_client-1.20.3}/src/runloop_api_client/_response.py +0 -0
- {runloop_api_client-1.20.1 → runloop_api_client-1.20.3}/src/runloop_api_client/_streaming.py +0 -0
- {runloop_api_client-1.20.1 → runloop_api_client-1.20.3}/src/runloop_api_client/_utils/__init__.py +0 -0
- {runloop_api_client-1.20.1 → runloop_api_client-1.20.3}/src/runloop_api_client/_utils/_compat.py +0 -0
- {runloop_api_client-1.20.1 → runloop_api_client-1.20.3}/src/runloop_api_client/_utils/_datetime_parse.py +0 -0
- {runloop_api_client-1.20.1 → runloop_api_client-1.20.3}/src/runloop_api_client/_utils/_json.py +0 -0
- {runloop_api_client-1.20.1 → runloop_api_client-1.20.3}/src/runloop_api_client/_utils/_logs.py +0 -0
- {runloop_api_client-1.20.1 → runloop_api_client-1.20.3}/src/runloop_api_client/_utils/_path.py +0 -0
- {runloop_api_client-1.20.1 → runloop_api_client-1.20.3}/src/runloop_api_client/_utils/_proxy.py +0 -0
- {runloop_api_client-1.20.1 → runloop_api_client-1.20.3}/src/runloop_api_client/_utils/_reflection.py +0 -0
- {runloop_api_client-1.20.1 → runloop_api_client-1.20.3}/src/runloop_api_client/_utils/_resources_proxy.py +0 -0
- {runloop_api_client-1.20.1 → runloop_api_client-1.20.3}/src/runloop_api_client/_utils/_streams.py +0 -0
- {runloop_api_client-1.20.1 → runloop_api_client-1.20.3}/src/runloop_api_client/_utils/_sync.py +0 -0
- {runloop_api_client-1.20.1 → runloop_api_client-1.20.3}/src/runloop_api_client/_utils/_transform.py +0 -0
- {runloop_api_client-1.20.1 → runloop_api_client-1.20.3}/src/runloop_api_client/_utils/_typing.py +0 -0
- {runloop_api_client-1.20.1 → runloop_api_client-1.20.3}/src/runloop_api_client/_utils/_validation.py +0 -0
- {runloop_api_client-1.20.1 → runloop_api_client-1.20.3}/src/runloop_api_client/lib/.keep +0 -0
- {runloop_api_client-1.20.1 → runloop_api_client-1.20.3}/src/runloop_api_client/lib/__init__.py +0 -0
- {runloop_api_client-1.20.1 → runloop_api_client-1.20.3}/src/runloop_api_client/lib/_ignore.py +0 -0
- {runloop_api_client-1.20.1 → runloop_api_client-1.20.3}/src/runloop_api_client/lib/context_loader.py +0 -0
- {runloop_api_client-1.20.1 → runloop_api_client-1.20.3}/src/runloop_api_client/pagination.py +0 -0
- {runloop_api_client-1.20.1 → runloop_api_client-1.20.3}/src/runloop_api_client/py.typed +0 -0
- {runloop_api_client-1.20.1 → runloop_api_client-1.20.3}/src/runloop_api_client/resources/__init__.py +0 -0
- {runloop_api_client-1.20.1 → runloop_api_client-1.20.3}/src/runloop_api_client/resources/apikeys.py +0 -0
- {runloop_api_client-1.20.1 → runloop_api_client-1.20.3}/src/runloop_api_client/resources/axons/__init__.py +0 -0
- {runloop_api_client-1.20.1 → runloop_api_client-1.20.3}/src/runloop_api_client/resources/axons/axons.py +0 -0
- {runloop_api_client-1.20.1 → runloop_api_client-1.20.3}/src/runloop_api_client/resources/axons/events.py +0 -0
- {runloop_api_client-1.20.1 → runloop_api_client-1.20.3}/src/runloop_api_client/resources/axons/sql.py +0 -0
- {runloop_api_client-1.20.1 → runloop_api_client-1.20.3}/src/runloop_api_client/resources/benchmark_jobs.py +0 -0
- {runloop_api_client-1.20.1 → runloop_api_client-1.20.3}/src/runloop_api_client/resources/benchmark_runs.py +0 -0
- {runloop_api_client-1.20.1 → runloop_api_client-1.20.3}/src/runloop_api_client/resources/benchmarks.py +0 -0
- {runloop_api_client-1.20.1 → runloop_api_client-1.20.3}/src/runloop_api_client/resources/blueprints.py +0 -0
- {runloop_api_client-1.20.1 → runloop_api_client-1.20.3}/src/runloop_api_client/resources/devboxes/__init__.py +0 -0
- {runloop_api_client-1.20.1 → runloop_api_client-1.20.3}/src/runloop_api_client/resources/devboxes/disk_snapshots.py +0 -0
- {runloop_api_client-1.20.1 → runloop_api_client-1.20.3}/src/runloop_api_client/resources/devboxes/logs.py +0 -0
- {runloop_api_client-1.20.1 → runloop_api_client-1.20.3}/src/runloop_api_client/resources/gateway_configs.py +0 -0
- {runloop_api_client-1.20.1 → runloop_api_client-1.20.3}/src/runloop_api_client/resources/mcp_configs.py +0 -0
- {runloop_api_client-1.20.1 → runloop_api_client-1.20.3}/src/runloop_api_client/resources/network_policies.py +0 -0
- {runloop_api_client-1.20.1 → runloop_api_client-1.20.3}/src/runloop_api_client/resources/objects.py +0 -0
- {runloop_api_client-1.20.1 → runloop_api_client-1.20.3}/src/runloop_api_client/resources/restricted_keys.py +0 -0
- {runloop_api_client-1.20.1 → runloop_api_client-1.20.3}/src/runloop_api_client/resources/scenarios/__init__.py +0 -0
- {runloop_api_client-1.20.1 → runloop_api_client-1.20.3}/src/runloop_api_client/resources/scenarios/runs.py +0 -0
- {runloop_api_client-1.20.1 → runloop_api_client-1.20.3}/src/runloop_api_client/resources/scenarios/scenarios.py +0 -0
- {runloop_api_client-1.20.1 → runloop_api_client-1.20.3}/src/runloop_api_client/resources/scenarios/scorers.py +0 -0
- {runloop_api_client-1.20.1 → runloop_api_client-1.20.3}/src/runloop_api_client/sdk/__init__.py +0 -0
- {runloop_api_client-1.20.1 → runloop_api_client-1.20.3}/src/runloop_api_client/sdk/_helpers.py +0 -0
- {runloop_api_client-1.20.1 → runloop_api_client-1.20.3}/src/runloop_api_client/sdk/_types.py +0 -0
- {runloop_api_client-1.20.1 → runloop_api_client-1.20.3}/src/runloop_api_client/sdk/agent.py +0 -0
- {runloop_api_client-1.20.1 → runloop_api_client-1.20.3}/src/runloop_api_client/sdk/async_.py +0 -0
- {runloop_api_client-1.20.1 → runloop_api_client-1.20.3}/src/runloop_api_client/sdk/async_agent.py +0 -0
- {runloop_api_client-1.20.1 → runloop_api_client-1.20.3}/src/runloop_api_client/sdk/async_axon.py +0 -0
- {runloop_api_client-1.20.1 → runloop_api_client-1.20.3}/src/runloop_api_client/sdk/async_benchmark.py +0 -0
- {runloop_api_client-1.20.1 → runloop_api_client-1.20.3}/src/runloop_api_client/sdk/async_benchmark_run.py +0 -0
- {runloop_api_client-1.20.1 → runloop_api_client-1.20.3}/src/runloop_api_client/sdk/async_blueprint.py +0 -0
- {runloop_api_client-1.20.1 → runloop_api_client-1.20.3}/src/runloop_api_client/sdk/async_devbox.py +0 -0
- {runloop_api_client-1.20.1 → runloop_api_client-1.20.3}/src/runloop_api_client/sdk/async_execution.py +0 -0
- {runloop_api_client-1.20.1 → runloop_api_client-1.20.3}/src/runloop_api_client/sdk/async_execution_result.py +0 -0
- {runloop_api_client-1.20.1 → runloop_api_client-1.20.3}/src/runloop_api_client/sdk/async_gateway_config.py +0 -0
- {runloop_api_client-1.20.1 → runloop_api_client-1.20.3}/src/runloop_api_client/sdk/async_mcp_config.py +0 -0
- {runloop_api_client-1.20.1 → runloop_api_client-1.20.3}/src/runloop_api_client/sdk/async_network_policy.py +0 -0
- {runloop_api_client-1.20.1 → runloop_api_client-1.20.3}/src/runloop_api_client/sdk/async_scenario.py +0 -0
- {runloop_api_client-1.20.1 → runloop_api_client-1.20.3}/src/runloop_api_client/sdk/async_scenario_builder.py +0 -0
- {runloop_api_client-1.20.1 → runloop_api_client-1.20.3}/src/runloop_api_client/sdk/async_scenario_run.py +0 -0
- {runloop_api_client-1.20.1 → runloop_api_client-1.20.3}/src/runloop_api_client/sdk/async_scorer.py +0 -0
- {runloop_api_client-1.20.1 → runloop_api_client-1.20.3}/src/runloop_api_client/sdk/async_secret.py +0 -0
- {runloop_api_client-1.20.1 → runloop_api_client-1.20.3}/src/runloop_api_client/sdk/async_snapshot.py +0 -0
- {runloop_api_client-1.20.1 → runloop_api_client-1.20.3}/src/runloop_api_client/sdk/async_storage_object.py +0 -0
- {runloop_api_client-1.20.1 → runloop_api_client-1.20.3}/src/runloop_api_client/sdk/axon.py +0 -0
- {runloop_api_client-1.20.1 → runloop_api_client-1.20.3}/src/runloop_api_client/sdk/benchmark.py +0 -0
- {runloop_api_client-1.20.1 → runloop_api_client-1.20.3}/src/runloop_api_client/sdk/benchmark_run.py +0 -0
- {runloop_api_client-1.20.1 → runloop_api_client-1.20.3}/src/runloop_api_client/sdk/blueprint.py +0 -0
- {runloop_api_client-1.20.1 → runloop_api_client-1.20.3}/src/runloop_api_client/sdk/devbox.py +0 -0
- {runloop_api_client-1.20.1 → runloop_api_client-1.20.3}/src/runloop_api_client/sdk/execution.py +0 -0
- {runloop_api_client-1.20.1 → runloop_api_client-1.20.3}/src/runloop_api_client/sdk/execution_result.py +0 -0
- {runloop_api_client-1.20.1 → runloop_api_client-1.20.3}/src/runloop_api_client/sdk/gateway_config.py +0 -0
- {runloop_api_client-1.20.1 → runloop_api_client-1.20.3}/src/runloop_api_client/sdk/mcp_config.py +0 -0
- {runloop_api_client-1.20.1 → runloop_api_client-1.20.3}/src/runloop_api_client/sdk/network_policy.py +0 -0
- {runloop_api_client-1.20.1 → runloop_api_client-1.20.3}/src/runloop_api_client/sdk/scenario.py +0 -0
- {runloop_api_client-1.20.1 → runloop_api_client-1.20.3}/src/runloop_api_client/sdk/scenario_builder.py +0 -0
- {runloop_api_client-1.20.1 → runloop_api_client-1.20.3}/src/runloop_api_client/sdk/scenario_run.py +0 -0
- {runloop_api_client-1.20.1 → runloop_api_client-1.20.3}/src/runloop_api_client/sdk/scorer.py +0 -0
- {runloop_api_client-1.20.1 → runloop_api_client-1.20.3}/src/runloop_api_client/sdk/secret.py +0 -0
- {runloop_api_client-1.20.1 → runloop_api_client-1.20.3}/src/runloop_api_client/sdk/snapshot.py +0 -0
- {runloop_api_client-1.20.1 → runloop_api_client-1.20.3}/src/runloop_api_client/sdk/storage_object.py +0 -0
- {runloop_api_client-1.20.1 → runloop_api_client-1.20.3}/src/runloop_api_client/sdk/sync.py +0 -0
- {runloop_api_client-1.20.1 → runloop_api_client-1.20.3}/src/runloop_api_client/types/__init__.py +0 -0
- {runloop_api_client-1.20.1 → runloop_api_client-1.20.3}/src/runloop_api_client/types/agent_devbox_counts_view.py +0 -0
- {runloop_api_client-1.20.1 → runloop_api_client-1.20.3}/src/runloop_api_client/types/agent_list_params.py +0 -0
- {runloop_api_client-1.20.1 → runloop_api_client-1.20.3}/src/runloop_api_client/types/agent_list_public_params.py +0 -0
- {runloop_api_client-1.20.1 → runloop_api_client-1.20.3}/src/runloop_api_client/types/agent_list_view.py +0 -0
- {runloop_api_client-1.20.1 → runloop_api_client-1.20.3}/src/runloop_api_client/types/api_key_created_view.py +0 -0
- {runloop_api_client-1.20.1 → runloop_api_client-1.20.3}/src/runloop_api_client/types/apikey_create_params.py +0 -0
- {runloop_api_client-1.20.1 → runloop_api_client-1.20.3}/src/runloop_api_client/types/axon_create_params.py +0 -0
- {runloop_api_client-1.20.1 → runloop_api_client-1.20.3}/src/runloop_api_client/types/axon_event_view.py +0 -0
- {runloop_api_client-1.20.1 → runloop_api_client-1.20.3}/src/runloop_api_client/types/axon_list_params.py +0 -0
- {runloop_api_client-1.20.1 → runloop_api_client-1.20.3}/src/runloop_api_client/types/axon_list_view.py +0 -0
- {runloop_api_client-1.20.1 → runloop_api_client-1.20.3}/src/runloop_api_client/types/axon_publish_params.py +0 -0
- {runloop_api_client-1.20.1 → runloop_api_client-1.20.3}/src/runloop_api_client/types/axon_subscribe_sse_params.py +0 -0
- {runloop_api_client-1.20.1 → runloop_api_client-1.20.3}/src/runloop_api_client/types/axon_view.py +0 -0
- {runloop_api_client-1.20.1 → runloop_api_client-1.20.3}/src/runloop_api_client/types/axons/__init__.py +0 -0
- {runloop_api_client-1.20.1 → runloop_api_client-1.20.3}/src/runloop_api_client/types/axons/axon_event_list_view.py +0 -0
- {runloop_api_client-1.20.1 → runloop_api_client-1.20.3}/src/runloop_api_client/types/axons/event_list_params.py +0 -0
- {runloop_api_client-1.20.1 → runloop_api_client-1.20.3}/src/runloop_api_client/types/axons/sql_batch_params.py +0 -0
- {runloop_api_client-1.20.1 → runloop_api_client-1.20.3}/src/runloop_api_client/types/axons/sql_batch_result_view.py +0 -0
- {runloop_api_client-1.20.1 → runloop_api_client-1.20.3}/src/runloop_api_client/types/axons/sql_column_meta_view.py +0 -0
- {runloop_api_client-1.20.1 → runloop_api_client-1.20.3}/src/runloop_api_client/types/axons/sql_query_params.py +0 -0
- {runloop_api_client-1.20.1 → runloop_api_client-1.20.3}/src/runloop_api_client/types/axons/sql_query_result_view.py +0 -0
- {runloop_api_client-1.20.1 → runloop_api_client-1.20.3}/src/runloop_api_client/types/axons/sql_result_meta_view.py +0 -0
- {runloop_api_client-1.20.1 → runloop_api_client-1.20.3}/src/runloop_api_client/types/axons/sql_statement_params.py +0 -0
- {runloop_api_client-1.20.1 → runloop_api_client-1.20.3}/src/runloop_api_client/types/axons/sql_step_error_view.py +0 -0
- {runloop_api_client-1.20.1 → runloop_api_client-1.20.3}/src/runloop_api_client/types/axons/sql_step_result_view.py +0 -0
- {runloop_api_client-1.20.1 → runloop_api_client-1.20.3}/src/runloop_api_client/types/benchmark_create_params.py +0 -0
- {runloop_api_client-1.20.1 → runloop_api_client-1.20.3}/src/runloop_api_client/types/benchmark_definitions_params.py +0 -0
- {runloop_api_client-1.20.1 → runloop_api_client-1.20.3}/src/runloop_api_client/types/benchmark_job_create_params.py +0 -0
- {runloop_api_client-1.20.1 → runloop_api_client-1.20.3}/src/runloop_api_client/types/benchmark_job_list_params.py +0 -0
- {runloop_api_client-1.20.1 → runloop_api_client-1.20.3}/src/runloop_api_client/types/benchmark_job_list_view.py +0 -0
- {runloop_api_client-1.20.1 → runloop_api_client-1.20.3}/src/runloop_api_client/types/benchmark_job_view.py +0 -0
- {runloop_api_client-1.20.1 → runloop_api_client-1.20.3}/src/runloop_api_client/types/benchmark_list_params.py +0 -0
- {runloop_api_client-1.20.1 → runloop_api_client-1.20.3}/src/runloop_api_client/types/benchmark_list_public_params.py +0 -0
- {runloop_api_client-1.20.1 → runloop_api_client-1.20.3}/src/runloop_api_client/types/benchmark_run_list_params.py +0 -0
- {runloop_api_client-1.20.1 → runloop_api_client-1.20.3}/src/runloop_api_client/types/benchmark_run_list_scenario_runs_params.py +0 -0
- {runloop_api_client-1.20.1 → runloop_api_client-1.20.3}/src/runloop_api_client/types/benchmark_run_list_view.py +0 -0
- {runloop_api_client-1.20.1 → runloop_api_client-1.20.3}/src/runloop_api_client/types/benchmark_run_view.py +0 -0
- {runloop_api_client-1.20.1 → runloop_api_client-1.20.3}/src/runloop_api_client/types/benchmark_start_run_params.py +0 -0
- {runloop_api_client-1.20.1 → runloop_api_client-1.20.3}/src/runloop_api_client/types/benchmark_update_params.py +0 -0
- {runloop_api_client-1.20.1 → runloop_api_client-1.20.3}/src/runloop_api_client/types/benchmark_update_scenarios_params.py +0 -0
- {runloop_api_client-1.20.1 → runloop_api_client-1.20.3}/src/runloop_api_client/types/benchmark_view.py +0 -0
- {runloop_api_client-1.20.1 → runloop_api_client-1.20.3}/src/runloop_api_client/types/blueprint_build_log.py +0 -0
- {runloop_api_client-1.20.1 → runloop_api_client-1.20.3}/src/runloop_api_client/types/blueprint_build_logs_list_view.py +0 -0
- {runloop_api_client-1.20.1 → runloop_api_client-1.20.3}/src/runloop_api_client/types/blueprint_build_parameters.py +0 -0
- {runloop_api_client-1.20.1 → runloop_api_client-1.20.3}/src/runloop_api_client/types/blueprint_create_from_inspection_params.py +0 -0
- {runloop_api_client-1.20.1 → runloop_api_client-1.20.3}/src/runloop_api_client/types/blueprint_create_params.py +0 -0
- {runloop_api_client-1.20.1 → runloop_api_client-1.20.3}/src/runloop_api_client/types/blueprint_list_params.py +0 -0
- {runloop_api_client-1.20.1 → runloop_api_client-1.20.3}/src/runloop_api_client/types/blueprint_list_public_params.py +0 -0
- {runloop_api_client-1.20.1 → runloop_api_client-1.20.3}/src/runloop_api_client/types/blueprint_list_view.py +0 -0
- {runloop_api_client-1.20.1 → runloop_api_client-1.20.3}/src/runloop_api_client/types/blueprint_preview_params.py +0 -0
- {runloop_api_client-1.20.1 → runloop_api_client-1.20.3}/src/runloop_api_client/types/blueprint_preview_view.py +0 -0
- {runloop_api_client-1.20.1 → runloop_api_client-1.20.3}/src/runloop_api_client/types/blueprint_view.py +0 -0
- {runloop_api_client-1.20.1 → runloop_api_client-1.20.3}/src/runloop_api_client/types/devbox_async_execution_detail_view.py +0 -0
- {runloop_api_client-1.20.1 → runloop_api_client-1.20.3}/src/runloop_api_client/types/devbox_create_params.py +0 -0
- {runloop_api_client-1.20.1 → runloop_api_client-1.20.3}/src/runloop_api_client/types/devbox_create_ssh_key_response.py +0 -0
- {runloop_api_client-1.20.1 → runloop_api_client-1.20.3}/src/runloop_api_client/types/devbox_download_file_params.py +0 -0
- {runloop_api_client-1.20.1 → runloop_api_client-1.20.3}/src/runloop_api_client/types/devbox_enable_tunnel_params.py +0 -0
- {runloop_api_client-1.20.1 → runloop_api_client-1.20.3}/src/runloop_api_client/types/devbox_execute_async_params.py +0 -0
- {runloop_api_client-1.20.1 → runloop_api_client-1.20.3}/src/runloop_api_client/types/devbox_execute_params.py +0 -0
- {runloop_api_client-1.20.1 → runloop_api_client-1.20.3}/src/runloop_api_client/types/devbox_execute_sync_params.py +0 -0
- {runloop_api_client-1.20.1 → runloop_api_client-1.20.3}/src/runloop_api_client/types/devbox_execution_detail_view.py +0 -0
- {runloop_api_client-1.20.1 → runloop_api_client-1.20.3}/src/runloop_api_client/types/devbox_list_disk_snapshots_params.py +0 -0
- {runloop_api_client-1.20.1 → runloop_api_client-1.20.3}/src/runloop_api_client/types/devbox_list_params.py +0 -0
- {runloop_api_client-1.20.1 → runloop_api_client-1.20.3}/src/runloop_api_client/types/devbox_list_view.py +0 -0
- {runloop_api_client-1.20.1 → runloop_api_client-1.20.3}/src/runloop_api_client/types/devbox_read_file_contents_params.py +0 -0
- {runloop_api_client-1.20.1 → runloop_api_client-1.20.3}/src/runloop_api_client/types/devbox_read_file_contents_response.py +0 -0
- {runloop_api_client-1.20.1 → runloop_api_client-1.20.3}/src/runloop_api_client/types/devbox_resource_usage_view.py +0 -0
- {runloop_api_client-1.20.1 → runloop_api_client-1.20.3}/src/runloop_api_client/types/devbox_send_std_in_result.py +0 -0
- {runloop_api_client-1.20.1 → runloop_api_client-1.20.3}/src/runloop_api_client/types/devbox_shutdown_params.py +0 -0
- {runloop_api_client-1.20.1 → runloop_api_client-1.20.3}/src/runloop_api_client/types/devbox_snapshot_disk_async_params.py +0 -0
- {runloop_api_client-1.20.1 → runloop_api_client-1.20.3}/src/runloop_api_client/types/devbox_snapshot_disk_params.py +0 -0
- {runloop_api_client-1.20.1 → runloop_api_client-1.20.3}/src/runloop_api_client/types/devbox_snapshot_list_view.py +0 -0
- {runloop_api_client-1.20.1 → runloop_api_client-1.20.3}/src/runloop_api_client/types/devbox_snapshot_view.py +0 -0
- {runloop_api_client-1.20.1 → runloop_api_client-1.20.3}/src/runloop_api_client/types/devbox_update_params.py +0 -0
- {runloop_api_client-1.20.1 → runloop_api_client-1.20.3}/src/runloop_api_client/types/devbox_upload_file_params.py +0 -0
- {runloop_api_client-1.20.1 → runloop_api_client-1.20.3}/src/runloop_api_client/types/devbox_view.py +0 -0
- {runloop_api_client-1.20.1 → runloop_api_client-1.20.3}/src/runloop_api_client/types/devbox_wait_for_command_params.py +0 -0
- {runloop_api_client-1.20.1 → runloop_api_client-1.20.3}/src/runloop_api_client/types/devbox_write_file_contents_params.py +0 -0
- {runloop_api_client-1.20.1 → runloop_api_client-1.20.3}/src/runloop_api_client/types/devboxes/__init__.py +0 -0
- {runloop_api_client-1.20.1 → runloop_api_client-1.20.3}/src/runloop_api_client/types/devboxes/devbox_logs_list_view.py +0 -0
- {runloop_api_client-1.20.1 → runloop_api_client-1.20.3}/src/runloop_api_client/types/devboxes/devbox_snapshot_async_status_view.py +0 -0
- {runloop_api_client-1.20.1 → runloop_api_client-1.20.3}/src/runloop_api_client/types/devboxes/disk_snapshot_list_params.py +0 -0
- {runloop_api_client-1.20.1 → runloop_api_client-1.20.3}/src/runloop_api_client/types/devboxes/disk_snapshot_update_params.py +0 -0
- {runloop_api_client-1.20.1 → runloop_api_client-1.20.3}/src/runloop_api_client/types/devboxes/execution_execute_async_params.py +0 -0
- {runloop_api_client-1.20.1 → runloop_api_client-1.20.3}/src/runloop_api_client/types/devboxes/execution_execute_sync_params.py +0 -0
- {runloop_api_client-1.20.1 → runloop_api_client-1.20.3}/src/runloop_api_client/types/devboxes/execution_kill_params.py +0 -0
- {runloop_api_client-1.20.1 → runloop_api_client-1.20.3}/src/runloop_api_client/types/devboxes/execution_retrieve_params.py +0 -0
- {runloop_api_client-1.20.1 → runloop_api_client-1.20.3}/src/runloop_api_client/types/devboxes/execution_send_std_in_params.py +0 -0
- {runloop_api_client-1.20.1 → runloop_api_client-1.20.3}/src/runloop_api_client/types/devboxes/execution_stream_stderr_updates_params.py +0 -0
- {runloop_api_client-1.20.1 → runloop_api_client-1.20.3}/src/runloop_api_client/types/devboxes/execution_stream_stdout_updates_params.py +0 -0
- {runloop_api_client-1.20.1 → runloop_api_client-1.20.3}/src/runloop_api_client/types/devboxes/execution_update_chunk.py +0 -0
- {runloop_api_client-1.20.1 → runloop_api_client-1.20.3}/src/runloop_api_client/types/devboxes/log_list_params.py +0 -0
- {runloop_api_client-1.20.1 → runloop_api_client-1.20.3}/src/runloop_api_client/types/gateway_config_create_params.py +0 -0
- {runloop_api_client-1.20.1 → runloop_api_client-1.20.3}/src/runloop_api_client/types/gateway_config_list_params.py +0 -0
- {runloop_api_client-1.20.1 → runloop_api_client-1.20.3}/src/runloop_api_client/types/gateway_config_list_view.py +0 -0
- {runloop_api_client-1.20.1 → runloop_api_client-1.20.3}/src/runloop_api_client/types/gateway_config_update_params.py +0 -0
- {runloop_api_client-1.20.1 → runloop_api_client-1.20.3}/src/runloop_api_client/types/gateway_config_view.py +0 -0
- {runloop_api_client-1.20.1 → runloop_api_client-1.20.3}/src/runloop_api_client/types/input_context.py +0 -0
- {runloop_api_client-1.20.1 → runloop_api_client-1.20.3}/src/runloop_api_client/types/input_context_param.py +0 -0
- {runloop_api_client-1.20.1 → runloop_api_client-1.20.3}/src/runloop_api_client/types/input_context_update_param.py +0 -0
- {runloop_api_client-1.20.1 → runloop_api_client-1.20.3}/src/runloop_api_client/types/inspection_source_param.py +0 -0
- {runloop_api_client-1.20.1 → runloop_api_client-1.20.3}/src/runloop_api_client/types/mcp_config_create_params.py +0 -0
- {runloop_api_client-1.20.1 → runloop_api_client-1.20.3}/src/runloop_api_client/types/mcp_config_list_params.py +0 -0
- {runloop_api_client-1.20.1 → runloop_api_client-1.20.3}/src/runloop_api_client/types/mcp_config_list_view.py +0 -0
- {runloop_api_client-1.20.1 → runloop_api_client-1.20.3}/src/runloop_api_client/types/mcp_config_update_params.py +0 -0
- {runloop_api_client-1.20.1 → runloop_api_client-1.20.3}/src/runloop_api_client/types/mcp_config_view.py +0 -0
- {runloop_api_client-1.20.1 → runloop_api_client-1.20.3}/src/runloop_api_client/types/network_policy_create_params.py +0 -0
- {runloop_api_client-1.20.1 → runloop_api_client-1.20.3}/src/runloop_api_client/types/network_policy_list_params.py +0 -0
- {runloop_api_client-1.20.1 → runloop_api_client-1.20.3}/src/runloop_api_client/types/network_policy_list_view.py +0 -0
- {runloop_api_client-1.20.1 → runloop_api_client-1.20.3}/src/runloop_api_client/types/network_policy_update_params.py +0 -0
- {runloop_api_client-1.20.1 → runloop_api_client-1.20.3}/src/runloop_api_client/types/network_policy_view.py +0 -0
- {runloop_api_client-1.20.1 → runloop_api_client-1.20.3}/src/runloop_api_client/types/object_create_params.py +0 -0
- {runloop_api_client-1.20.1 → runloop_api_client-1.20.3}/src/runloop_api_client/types/object_download_params.py +0 -0
- {runloop_api_client-1.20.1 → runloop_api_client-1.20.3}/src/runloop_api_client/types/object_download_url_view.py +0 -0
- {runloop_api_client-1.20.1 → runloop_api_client-1.20.3}/src/runloop_api_client/types/object_list_params.py +0 -0
- {runloop_api_client-1.20.1 → runloop_api_client-1.20.3}/src/runloop_api_client/types/object_list_public_params.py +0 -0
- {runloop_api_client-1.20.1 → runloop_api_client-1.20.3}/src/runloop_api_client/types/object_list_view.py +0 -0
- {runloop_api_client-1.20.1 → runloop_api_client-1.20.3}/src/runloop_api_client/types/object_view.py +0 -0
- {runloop_api_client-1.20.1 → runloop_api_client-1.20.3}/src/runloop_api_client/types/publish_result_view.py +0 -0
- {runloop_api_client-1.20.1 → runloop_api_client-1.20.3}/src/runloop_api_client/types/restricted_key_create_params.py +0 -0
- {runloop_api_client-1.20.1 → runloop_api_client-1.20.3}/src/runloop_api_client/types/restricted_key_created_view.py +0 -0
- {runloop_api_client-1.20.1 → runloop_api_client-1.20.3}/src/runloop_api_client/types/scenario_create_params.py +0 -0
- {runloop_api_client-1.20.1 → runloop_api_client-1.20.3}/src/runloop_api_client/types/scenario_definition_list_view.py +0 -0
- {runloop_api_client-1.20.1 → runloop_api_client-1.20.3}/src/runloop_api_client/types/scenario_environment.py +0 -0
- {runloop_api_client-1.20.1 → runloop_api_client-1.20.3}/src/runloop_api_client/types/scenario_environment_param.py +0 -0
- {runloop_api_client-1.20.1 → runloop_api_client-1.20.3}/src/runloop_api_client/types/scenario_list_params.py +0 -0
- {runloop_api_client-1.20.1 → runloop_api_client-1.20.3}/src/runloop_api_client/types/scenario_list_public_params.py +0 -0
- {runloop_api_client-1.20.1 → runloop_api_client-1.20.3}/src/runloop_api_client/types/scenario_run_list_view.py +0 -0
- {runloop_api_client-1.20.1 → runloop_api_client-1.20.3}/src/runloop_api_client/types/scenario_run_view.py +0 -0
- {runloop_api_client-1.20.1 → runloop_api_client-1.20.3}/src/runloop_api_client/types/scenario_start_run_params.py +0 -0
- {runloop_api_client-1.20.1 → runloop_api_client-1.20.3}/src/runloop_api_client/types/scenario_update_params.py +0 -0
- {runloop_api_client-1.20.1 → runloop_api_client-1.20.3}/src/runloop_api_client/types/scenario_view.py +0 -0
- {runloop_api_client-1.20.1 → runloop_api_client-1.20.3}/src/runloop_api_client/types/scenarios/__init__.py +0 -0
- {runloop_api_client-1.20.1 → runloop_api_client-1.20.3}/src/runloop_api_client/types/scenarios/run_list_params.py +0 -0
- {runloop_api_client-1.20.1 → runloop_api_client-1.20.3}/src/runloop_api_client/types/scenarios/scorer_create_params.py +0 -0
- {runloop_api_client-1.20.1 → runloop_api_client-1.20.3}/src/runloop_api_client/types/scenarios/scorer_create_response.py +0 -0
- {runloop_api_client-1.20.1 → runloop_api_client-1.20.3}/src/runloop_api_client/types/scenarios/scorer_list_params.py +0 -0
- {runloop_api_client-1.20.1 → runloop_api_client-1.20.3}/src/runloop_api_client/types/scenarios/scorer_list_response.py +0 -0
- {runloop_api_client-1.20.1 → runloop_api_client-1.20.3}/src/runloop_api_client/types/scenarios/scorer_retrieve_response.py +0 -0
- {runloop_api_client-1.20.1 → runloop_api_client-1.20.3}/src/runloop_api_client/types/scenarios/scorer_update_params.py +0 -0
- {runloop_api_client-1.20.1 → runloop_api_client-1.20.3}/src/runloop_api_client/types/scenarios/scorer_update_response.py +0 -0
- {runloop_api_client-1.20.1 → runloop_api_client-1.20.3}/src/runloop_api_client/types/scope_entry_view.py +0 -0
- {runloop_api_client-1.20.1 → runloop_api_client-1.20.3}/src/runloop_api_client/types/scope_entry_view_param.py +0 -0
- {runloop_api_client-1.20.1 → runloop_api_client-1.20.3}/src/runloop_api_client/types/scoring_contract.py +0 -0
- {runloop_api_client-1.20.1 → runloop_api_client-1.20.3}/src/runloop_api_client/types/scoring_contract_param.py +0 -0
- {runloop_api_client-1.20.1 → runloop_api_client-1.20.3}/src/runloop_api_client/types/scoring_contract_result_view.py +0 -0
- {runloop_api_client-1.20.1 → runloop_api_client-1.20.3}/src/runloop_api_client/types/scoring_contract_update_param.py +0 -0
- {runloop_api_client-1.20.1 → runloop_api_client-1.20.3}/src/runloop_api_client/types/scoring_function.py +0 -0
- {runloop_api_client-1.20.1 → runloop_api_client-1.20.3}/src/runloop_api_client/types/scoring_function_param.py +0 -0
- {runloop_api_client-1.20.1 → runloop_api_client-1.20.3}/src/runloop_api_client/types/scoring_function_result_view.py +0 -0
- {runloop_api_client-1.20.1 → runloop_api_client-1.20.3}/src/runloop_api_client/types/secret_create_params.py +0 -0
- {runloop_api_client-1.20.1 → runloop_api_client-1.20.3}/src/runloop_api_client/types/secret_list_params.py +0 -0
- {runloop_api_client-1.20.1 → runloop_api_client-1.20.3}/src/runloop_api_client/types/secret_list_view.py +0 -0
- {runloop_api_client-1.20.1 → runloop_api_client-1.20.3}/src/runloop_api_client/types/secret_update_params.py +0 -0
- {runloop_api_client-1.20.1 → runloop_api_client-1.20.3}/src/runloop_api_client/types/secret_view.py +0 -0
- {runloop_api_client-1.20.1 → runloop_api_client-1.20.3}/src/runloop_api_client/types/shared/__init__.py +0 -0
- {runloop_api_client-1.20.1 → runloop_api_client-1.20.3}/src/runloop_api_client/types/shared/after_idle.py +0 -0
- {runloop_api_client-1.20.1 → runloop_api_client-1.20.3}/src/runloop_api_client/types/shared/agent_mount.py +0 -0
- {runloop_api_client-1.20.1 → runloop_api_client-1.20.3}/src/runloop_api_client/types/shared/agent_source.py +0 -0
- {runloop_api_client-1.20.1 → runloop_api_client-1.20.3}/src/runloop_api_client/types/shared/broker_mount.py +0 -0
- {runloop_api_client-1.20.1 → runloop_api_client-1.20.3}/src/runloop_api_client/types/shared/code_mount_parameters.py +0 -0
- {runloop_api_client-1.20.1 → runloop_api_client-1.20.3}/src/runloop_api_client/types/shared/launch_parameters.py +0 -0
- {runloop_api_client-1.20.1 → runloop_api_client-1.20.3}/src/runloop_api_client/types/shared/mount.py +0 -0
- {runloop_api_client-1.20.1 → runloop_api_client-1.20.3}/src/runloop_api_client/types/shared/object_mount.py +0 -0
- {runloop_api_client-1.20.1 → runloop_api_client-1.20.3}/src/runloop_api_client/types/shared/run_profile.py +0 -0
- {runloop_api_client-1.20.1 → runloop_api_client-1.20.3}/src/runloop_api_client/types/shared_params/__init__.py +0 -0
- {runloop_api_client-1.20.1 → runloop_api_client-1.20.3}/src/runloop_api_client/types/shared_params/after_idle.py +0 -0
- {runloop_api_client-1.20.1 → runloop_api_client-1.20.3}/src/runloop_api_client/types/shared_params/agent_mount.py +0 -0
- {runloop_api_client-1.20.1 → runloop_api_client-1.20.3}/src/runloop_api_client/types/shared_params/agent_source.py +0 -0
- {runloop_api_client-1.20.1 → runloop_api_client-1.20.3}/src/runloop_api_client/types/shared_params/broker_mount.py +0 -0
- {runloop_api_client-1.20.1 → runloop_api_client-1.20.3}/src/runloop_api_client/types/shared_params/code_mount_parameters.py +0 -0
- {runloop_api_client-1.20.1 → runloop_api_client-1.20.3}/src/runloop_api_client/types/shared_params/launch_parameters.py +0 -0
- {runloop_api_client-1.20.1 → runloop_api_client-1.20.3}/src/runloop_api_client/types/shared_params/mount.py +0 -0
- {runloop_api_client-1.20.1 → runloop_api_client-1.20.3}/src/runloop_api_client/types/shared_params/object_mount.py +0 -0
- {runloop_api_client-1.20.1 → runloop_api_client-1.20.3}/src/runloop_api_client/types/shared_params/run_profile.py +0 -0
- {runloop_api_client-1.20.1 → runloop_api_client-1.20.3}/src/runloop_api_client/types/tunnel_view.py +0 -0
- {runloop_api_client-1.20.1 → runloop_api_client-1.20.3}/tests/__init__.py +0 -0
- {runloop_api_client-1.20.1 → runloop_api_client-1.20.3}/tests/api_resources/__init__.py +0 -0
- {runloop_api_client-1.20.1 → runloop_api_client-1.20.3}/tests/api_resources/axons/__init__.py +0 -0
- {runloop_api_client-1.20.1 → runloop_api_client-1.20.3}/tests/api_resources/axons/test_events.py +0 -0
- {runloop_api_client-1.20.1 → runloop_api_client-1.20.3}/tests/api_resources/axons/test_sql.py +0 -0
- {runloop_api_client-1.20.1 → runloop_api_client-1.20.3}/tests/api_resources/devboxes/__init__.py +0 -0
- {runloop_api_client-1.20.1 → runloop_api_client-1.20.3}/tests/api_resources/devboxes/test_disk_snapshots.py +0 -0
- {runloop_api_client-1.20.1 → runloop_api_client-1.20.3}/tests/api_resources/devboxes/test_executions.py +0 -0
- {runloop_api_client-1.20.1 → runloop_api_client-1.20.3}/tests/api_resources/devboxes/test_logs.py +0 -0
- {runloop_api_client-1.20.1 → runloop_api_client-1.20.3}/tests/api_resources/scenarios/__init__.py +0 -0
- {runloop_api_client-1.20.1 → runloop_api_client-1.20.3}/tests/api_resources/scenarios/test_runs.py +0 -0
- {runloop_api_client-1.20.1 → runloop_api_client-1.20.3}/tests/api_resources/scenarios/test_scorers.py +0 -0
- {runloop_api_client-1.20.1 → runloop_api_client-1.20.3}/tests/api_resources/test_apikeys.py +0 -0
- {runloop_api_client-1.20.1 → runloop_api_client-1.20.3}/tests/api_resources/test_axons.py +0 -0
- {runloop_api_client-1.20.1 → runloop_api_client-1.20.3}/tests/api_resources/test_benchmark_jobs.py +0 -0
- {runloop_api_client-1.20.1 → runloop_api_client-1.20.3}/tests/api_resources/test_benchmark_runs.py +0 -0
- {runloop_api_client-1.20.1 → runloop_api_client-1.20.3}/tests/api_resources/test_benchmarks.py +0 -0
- {runloop_api_client-1.20.1 → runloop_api_client-1.20.3}/tests/api_resources/test_blueprints.py +0 -0
- {runloop_api_client-1.20.1 → runloop_api_client-1.20.3}/tests/api_resources/test_devboxes.py +0 -0
- {runloop_api_client-1.20.1 → runloop_api_client-1.20.3}/tests/api_resources/test_gateway_configs.py +0 -0
- {runloop_api_client-1.20.1 → runloop_api_client-1.20.3}/tests/api_resources/test_mcp_configs.py +0 -0
- {runloop_api_client-1.20.1 → runloop_api_client-1.20.3}/tests/api_resources/test_network_policies.py +0 -0
- {runloop_api_client-1.20.1 → runloop_api_client-1.20.3}/tests/api_resources/test_objects.py +0 -0
- {runloop_api_client-1.20.1 → runloop_api_client-1.20.3}/tests/api_resources/test_restricted_keys.py +0 -0
- {runloop_api_client-1.20.1 → runloop_api_client-1.20.3}/tests/api_resources/test_scenarios.py +0 -0
- {runloop_api_client-1.20.1 → runloop_api_client-1.20.3}/tests/conftest.py +0 -0
- {runloop_api_client-1.20.1 → runloop_api_client-1.20.3}/tests/sample_file.txt +0 -0
- {runloop_api_client-1.20.1 → runloop_api_client-1.20.3}/tests/sdk/__init__.py +0 -0
- {runloop_api_client-1.20.1 → runloop_api_client-1.20.3}/tests/sdk/async_devbox/__init__.py +0 -0
- {runloop_api_client-1.20.1 → runloop_api_client-1.20.3}/tests/sdk/async_devbox/conftest.py +0 -0
- {runloop_api_client-1.20.1 → runloop_api_client-1.20.3}/tests/sdk/async_devbox/test_core.py +0 -0
- {runloop_api_client-1.20.1 → runloop_api_client-1.20.3}/tests/sdk/async_devbox/test_edge_cases.py +0 -0
- {runloop_api_client-1.20.1 → runloop_api_client-1.20.3}/tests/sdk/async_devbox/test_interfaces.py +0 -0
- {runloop_api_client-1.20.1 → runloop_api_client-1.20.3}/tests/sdk/async_devbox/test_streaming.py +0 -0
- {runloop_api_client-1.20.1 → runloop_api_client-1.20.3}/tests/sdk/conftest.py +0 -0
- {runloop_api_client-1.20.1 → runloop_api_client-1.20.3}/tests/sdk/devbox/__init__.py +0 -0
- {runloop_api_client-1.20.1 → runloop_api_client-1.20.3}/tests/sdk/devbox/conftest.py +0 -0
- {runloop_api_client-1.20.1 → runloop_api_client-1.20.3}/tests/sdk/devbox/test_core.py +0 -0
- {runloop_api_client-1.20.1 → runloop_api_client-1.20.3}/tests/sdk/devbox/test_edge_cases.py +0 -0
- {runloop_api_client-1.20.1 → runloop_api_client-1.20.3}/tests/sdk/devbox/test_interfaces.py +0 -0
- {runloop_api_client-1.20.1 → runloop_api_client-1.20.3}/tests/sdk/devbox/test_streaming.py +0 -0
- {runloop_api_client-1.20.1 → runloop_api_client-1.20.3}/tests/sdk/test_agent.py +0 -0
- {runloop_api_client-1.20.1 → runloop_api_client-1.20.3}/tests/sdk/test_async_agent.py +0 -0
- {runloop_api_client-1.20.1 → runloop_api_client-1.20.3}/tests/sdk/test_async_axon.py +0 -0
- {runloop_api_client-1.20.1 → runloop_api_client-1.20.3}/tests/sdk/test_async_benchmark.py +0 -0
- {runloop_api_client-1.20.1 → runloop_api_client-1.20.3}/tests/sdk/test_async_benchmark_run.py +0 -0
- {runloop_api_client-1.20.1 → runloop_api_client-1.20.3}/tests/sdk/test_async_blueprint.py +0 -0
- {runloop_api_client-1.20.1 → runloop_api_client-1.20.3}/tests/sdk/test_async_execution.py +0 -0
- {runloop_api_client-1.20.1 → runloop_api_client-1.20.3}/tests/sdk/test_async_execution_result.py +0 -0
- {runloop_api_client-1.20.1 → runloop_api_client-1.20.3}/tests/sdk/test_async_gateway_config.py +0 -0
- {runloop_api_client-1.20.1 → runloop_api_client-1.20.3}/tests/sdk/test_async_network_policy.py +0 -0
- {runloop_api_client-1.20.1 → runloop_api_client-1.20.3}/tests/sdk/test_async_ops.py +0 -0
- {runloop_api_client-1.20.1 → runloop_api_client-1.20.3}/tests/sdk/test_async_scenario.py +0 -0
- {runloop_api_client-1.20.1 → runloop_api_client-1.20.3}/tests/sdk/test_async_scenario_builder.py +0 -0
- {runloop_api_client-1.20.1 → runloop_api_client-1.20.3}/tests/sdk/test_async_scenario_run.py +0 -0
- {runloop_api_client-1.20.1 → runloop_api_client-1.20.3}/tests/sdk/test_async_scorer.py +0 -0
- {runloop_api_client-1.20.1 → runloop_api_client-1.20.3}/tests/sdk/test_async_snapshot.py +0 -0
- {runloop_api_client-1.20.1 → runloop_api_client-1.20.3}/tests/sdk/test_async_storage_object.py +0 -0
- {runloop_api_client-1.20.1 → runloop_api_client-1.20.3}/tests/sdk/test_axon.py +0 -0
- {runloop_api_client-1.20.1 → runloop_api_client-1.20.3}/tests/sdk/test_benchmark.py +0 -0
- {runloop_api_client-1.20.1 → runloop_api_client-1.20.3}/tests/sdk/test_benchmark_run.py +0 -0
- {runloop_api_client-1.20.1 → runloop_api_client-1.20.3}/tests/sdk/test_blueprint.py +0 -0
- {runloop_api_client-1.20.1 → runloop_api_client-1.20.3}/tests/sdk/test_execution.py +0 -0
- {runloop_api_client-1.20.1 → runloop_api_client-1.20.3}/tests/sdk/test_execution_result.py +0 -0
- {runloop_api_client-1.20.1 → runloop_api_client-1.20.3}/tests/sdk/test_gateway_config.py +0 -0
- {runloop_api_client-1.20.1 → runloop_api_client-1.20.3}/tests/sdk/test_helpers.py +0 -0
- {runloop_api_client-1.20.1 → runloop_api_client-1.20.3}/tests/sdk/test_network_policy.py +0 -0
- {runloop_api_client-1.20.1 → runloop_api_client-1.20.3}/tests/sdk/test_ops.py +0 -0
- {runloop_api_client-1.20.1 → runloop_api_client-1.20.3}/tests/sdk/test_scenario.py +0 -0
- {runloop_api_client-1.20.1 → runloop_api_client-1.20.3}/tests/sdk/test_scenario_builder.py +0 -0
- {runloop_api_client-1.20.1 → runloop_api_client-1.20.3}/tests/sdk/test_scenario_run.py +0 -0
- {runloop_api_client-1.20.1 → runloop_api_client-1.20.3}/tests/sdk/test_scorer.py +0 -0
- {runloop_api_client-1.20.1 → runloop_api_client-1.20.3}/tests/sdk/test_snapshot.py +0 -0
- {runloop_api_client-1.20.1 → runloop_api_client-1.20.3}/tests/sdk/test_storage_object.py +0 -0
- {runloop_api_client-1.20.1 → runloop_api_client-1.20.3}/tests/smoketests/README.md +0 -0
- {runloop_api_client-1.20.1 → runloop_api_client-1.20.3}/tests/smoketests/__init__.py +0 -0
- {runloop_api_client-1.20.1 → runloop_api_client-1.20.3}/tests/smoketests/conftest.py +0 -0
- {runloop_api_client-1.20.1 → runloop_api_client-1.20.3}/tests/smoketests/examples/__init__.py +0 -0
- {runloop_api_client-1.20.1 → runloop_api_client-1.20.3}/tests/smoketests/examples/test_examples.py +0 -0
- {runloop_api_client-1.20.1 → runloop_api_client-1.20.3}/tests/smoketests/sdk/README.md +0 -0
- {runloop_api_client-1.20.1 → runloop_api_client-1.20.3}/tests/smoketests/sdk/__init__.py +0 -0
- {runloop_api_client-1.20.1 → runloop_api_client-1.20.3}/tests/smoketests/sdk/conftest.py +0 -0
- {runloop_api_client-1.20.1 → runloop_api_client-1.20.3}/tests/smoketests/sdk/test_agent.py +0 -0
- {runloop_api_client-1.20.1 → runloop_api_client-1.20.3}/tests/smoketests/sdk/test_async_agent.py +0 -0
- {runloop_api_client-1.20.1 → runloop_api_client-1.20.3}/tests/smoketests/sdk/test_async_axon.py +0 -0
- {runloop_api_client-1.20.1 → runloop_api_client-1.20.3}/tests/smoketests/sdk/test_async_benchmark.py +0 -0
- {runloop_api_client-1.20.1 → runloop_api_client-1.20.3}/tests/smoketests/sdk/test_async_blueprint.py +0 -0
- {runloop_api_client-1.20.1 → runloop_api_client-1.20.3}/tests/smoketests/sdk/test_async_devbox.py +0 -0
- {runloop_api_client-1.20.1 → runloop_api_client-1.20.3}/tests/smoketests/sdk/test_async_gateway_config.py +0 -0
- {runloop_api_client-1.20.1 → runloop_api_client-1.20.3}/tests/smoketests/sdk/test_async_network_policy.py +0 -0
- {runloop_api_client-1.20.1 → runloop_api_client-1.20.3}/tests/smoketests/sdk/test_async_scenario.py +0 -0
- {runloop_api_client-1.20.1 → runloop_api_client-1.20.3}/tests/smoketests/sdk/test_async_scorer.py +0 -0
- {runloop_api_client-1.20.1 → runloop_api_client-1.20.3}/tests/smoketests/sdk/test_async_sdk.py +0 -0
- {runloop_api_client-1.20.1 → runloop_api_client-1.20.3}/tests/smoketests/sdk/test_async_secret.py +0 -0
- {runloop_api_client-1.20.1 → runloop_api_client-1.20.3}/tests/smoketests/sdk/test_async_snapshot.py +0 -0
- {runloop_api_client-1.20.1 → runloop_api_client-1.20.3}/tests/smoketests/sdk/test_async_storage_object.py +0 -0
- {runloop_api_client-1.20.1 → runloop_api_client-1.20.3}/tests/smoketests/sdk/test_axon.py +0 -0
- {runloop_api_client-1.20.1 → runloop_api_client-1.20.3}/tests/smoketests/sdk/test_benchmark.py +0 -0
- {runloop_api_client-1.20.1 → runloop_api_client-1.20.3}/tests/smoketests/sdk/test_blueprint.py +0 -0
- {runloop_api_client-1.20.1 → runloop_api_client-1.20.3}/tests/smoketests/sdk/test_devbox.py +0 -0
- {runloop_api_client-1.20.1 → runloop_api_client-1.20.3}/tests/smoketests/sdk/test_gateway_config.py +0 -0
- {runloop_api_client-1.20.1 → runloop_api_client-1.20.3}/tests/smoketests/sdk/test_mcp_config.py +0 -0
- {runloop_api_client-1.20.1 → runloop_api_client-1.20.3}/tests/smoketests/sdk/test_network_policy.py +0 -0
- {runloop_api_client-1.20.1 → runloop_api_client-1.20.3}/tests/smoketests/sdk/test_scenario.py +0 -0
- {runloop_api_client-1.20.1 → runloop_api_client-1.20.3}/tests/smoketests/sdk/test_scorer.py +0 -0
- {runloop_api_client-1.20.1 → runloop_api_client-1.20.3}/tests/smoketests/sdk/test_sdk.py +0 -0
- {runloop_api_client-1.20.1 → runloop_api_client-1.20.3}/tests/smoketests/sdk/test_secret.py +0 -0
- {runloop_api_client-1.20.1 → runloop_api_client-1.20.3}/tests/smoketests/sdk/test_snapshot.py +0 -0
- {runloop_api_client-1.20.1 → runloop_api_client-1.20.3}/tests/smoketests/sdk/test_storage_object.py +0 -0
- {runloop_api_client-1.20.1 → runloop_api_client-1.20.3}/tests/smoketests/test_blueprints.py +0 -0
- {runloop_api_client-1.20.1 → runloop_api_client-1.20.3}/tests/smoketests/test_devboxes.py +0 -0
- {runloop_api_client-1.20.1 → runloop_api_client-1.20.3}/tests/smoketests/test_executions.py +0 -0
- {runloop_api_client-1.20.1 → runloop_api_client-1.20.3}/tests/smoketests/test_scenarios_benchmarks.py +0 -0
- {runloop_api_client-1.20.1 → runloop_api_client-1.20.3}/tests/smoketests/test_snapshots.py +0 -0
- {runloop_api_client-1.20.1 → runloop_api_client-1.20.3}/tests/smoketests/utils.py +0 -0
- {runloop_api_client-1.20.1 → runloop_api_client-1.20.3}/tests/test_command_id.py +0 -0
- {runloop_api_client-1.20.1 → runloop_api_client-1.20.3}/tests/test_models.py +0 -0
- {runloop_api_client-1.20.1 → runloop_api_client-1.20.3}/tests/test_polling.py +0 -0
- {runloop_api_client-1.20.1 → runloop_api_client-1.20.3}/tests/test_qs.py +0 -0
- {runloop_api_client-1.20.1 → runloop_api_client-1.20.3}/tests/test_required_args.py +0 -0
- {runloop_api_client-1.20.1 → runloop_api_client-1.20.3}/tests/test_response.py +0 -0
- {runloop_api_client-1.20.1 → runloop_api_client-1.20.3}/tests/test_streaming.py +0 -0
- {runloop_api_client-1.20.1 → runloop_api_client-1.20.3}/tests/test_transform.py +0 -0
- {runloop_api_client-1.20.1 → runloop_api_client-1.20.3}/tests/test_utils/test_context_loader.py +0 -0
- {runloop_api_client-1.20.1 → runloop_api_client-1.20.3}/tests/test_utils/test_datetime_parse.py +0 -0
- {runloop_api_client-1.20.1 → runloop_api_client-1.20.3}/tests/test_utils/test_json.py +0 -0
- {runloop_api_client-1.20.1 → runloop_api_client-1.20.3}/tests/test_utils/test_path.py +0 -0
- {runloop_api_client-1.20.1 → runloop_api_client-1.20.3}/tests/test_utils/test_proxy.py +0 -0
- {runloop_api_client-1.20.1 → runloop_api_client-1.20.3}/tests/test_utils/test_typing.py +0 -0
- {runloop_api_client-1.20.1 → runloop_api_client-1.20.3}/tests/utils.py +0 -0
|
@@ -1,5 +1,35 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## 1.20.3 (2026-05-08)
|
|
4
|
+
|
|
5
|
+
Full Changelog: [v1.20.2...v1.20.3](https://github.com/runloopai/api-client-python/compare/v1.20.2...v1.20.3)
|
|
6
|
+
|
|
7
|
+
### Features
|
|
8
|
+
|
|
9
|
+
* make agent version optional in API ([#8858](https://github.com/runloopai/api-client-python/issues/8858)) ([7e11a9d](https://github.com/runloopai/api-client-python/commit/7e11a9db85aff6c28dcc04b8d391979027f38549))
|
|
10
|
+
* share HTTP connection pool across SDK instances; refactor polling ([#797](https://github.com/runloopai/api-client-python/issues/797)) ([4f2fc4c](https://github.com/runloopai/api-client-python/commit/4f2fc4ca6d0b7a0b13b236dafb0e4e3148c2ed58))
|
|
11
|
+
* support setting headers via env ([54ead49](https://github.com/runloopai/api-client-python/commit/54ead49fd28a61f60e18197d727fa57216c785fd))
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
### Bug Fixes
|
|
15
|
+
|
|
16
|
+
* use correct field name format for multipart file arrays ([c564da8](https://github.com/runloopai/api-client-python/commit/c564da85b7dfdbb77edf347f6b25ca4ca57e470e))
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
### Chores
|
|
20
|
+
|
|
21
|
+
* add get secret to stainless ([#7833](https://github.com/runloopai/api-client-python/issues/7833)) ([ce39778](https://github.com/runloopai/api-client-python/commit/ce39778de67907365c90f11ba3b3602cbc7daa2a))
|
|
22
|
+
* **internal:** more robust bootstrap script ([115744e](https://github.com/runloopai/api-client-python/commit/115744e3c181822a1ec172e0526684839e278899))
|
|
23
|
+
* **internal:** reformat pyproject.toml ([89e8401](https://github.com/runloopai/api-client-python/commit/89e8401b518f0ec15cb1e394dde66cb876bf0578))
|
|
24
|
+
|
|
25
|
+
## 1.20.2 (2026-05-01)
|
|
26
|
+
|
|
27
|
+
Full Changelog: [v1.20.1...v1.20.2](https://github.com/runloopai/api-client-python/compare/v1.20.1...v1.20.2)
|
|
28
|
+
|
|
29
|
+
### Bug Fixes
|
|
30
|
+
|
|
31
|
+
* additional polling updates ([#794](https://github.com/runloopai/api-client-python/issues/794)) ([26e409a](https://github.com/runloopai/api-client-python/commit/26e409ae797bfde1bdac90abfd8fc58b6971e8a8))
|
|
32
|
+
|
|
3
33
|
## 1.20.1 (2026-05-01)
|
|
4
34
|
|
|
5
35
|
Full Changelog: [v1.20.0...v1.20.1](https://github.com/runloopai/api-client-python/compare/v1.20.0...v1.20.1)
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.3
|
|
2
2
|
Name: runloop_api_client
|
|
3
|
-
Version: 1.20.
|
|
3
|
+
Version: 1.20.3
|
|
4
4
|
Summary: The official Python library for the runloop API
|
|
5
5
|
Project-URL: Homepage, https://github.com/runloopai/api-client-python
|
|
6
6
|
Project-URL: Repository, https://github.com/runloopai/api-client-python
|
|
@@ -381,6 +381,7 @@ from runloop_api_client.types import (
|
|
|
381
381
|
Methods:
|
|
382
382
|
|
|
383
383
|
- <code title="post /v1/secrets">client.secrets.<a href="./src/runloop_api_client/resources/secrets.py">create</a>(\*\*<a href="src/runloop_api_client/types/secret_create_params.py">params</a>) -> <a href="./src/runloop_api_client/types/secret_view.py">SecretView</a></code>
|
|
384
|
+
- <code title="get /v1/secrets/{name}">client.secrets.<a href="./src/runloop_api_client/resources/secrets.py">retrieve</a>(name) -> <a href="./src/runloop_api_client/types/secret_view.py">SecretView</a></code>
|
|
384
385
|
- <code title="post /v1/secrets/{name}">client.secrets.<a href="./src/runloop_api_client/resources/secrets.py">update</a>(name, \*\*<a href="src/runloop_api_client/types/secret_update_params.py">params</a>) -> <a href="./src/runloop_api_client/types/secret_view.py">SecretView</a></code>
|
|
385
386
|
- <code title="get /v1/secrets">client.secrets.<a href="./src/runloop_api_client/resources/secrets.py">list</a>(\*\*<a href="src/runloop_api_client/types/secret_list_params.py">params</a>) -> <a href="./src/runloop_api_client/types/secret_list_view.py">SecretListView</a></code>
|
|
386
387
|
- <code title="post /v1/secrets/{name}/delete">client.secrets.<a href="./src/runloop_api_client/resources/secrets.py">delete</a>(name) -> <a href="./src/runloop_api_client/types/secret_view.py">SecretView</a></code>
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
[project]
|
|
2
2
|
name = "runloop_api_client"
|
|
3
|
-
version = "1.20.
|
|
3
|
+
version = "1.20.3"
|
|
4
4
|
description = "The official Python library for the runloop API"
|
|
5
5
|
dynamic = ["readme"]
|
|
6
6
|
license = "MIT"
|
|
@@ -157,7 +157,7 @@ show_error_codes = true
|
|
|
157
157
|
#
|
|
158
158
|
# We also exclude our `tests` as mypy doesn't always infer
|
|
159
159
|
# types correctly and Pyright will still catch any type errors.
|
|
160
|
-
exclude = [
|
|
160
|
+
exclude = ["src/runloop_api_client/_files.py", "_dev/.*.py", "tests/.*"]
|
|
161
161
|
|
|
162
162
|
strict_equality = true
|
|
163
163
|
implicit_reexport = true
|
{runloop_api_client-1.20.1 → runloop_api_client-1.20.3}/src/runloop_api_client/_base_client.py
RENAMED
|
@@ -8,8 +8,10 @@ import email
|
|
|
8
8
|
import asyncio
|
|
9
9
|
import inspect
|
|
10
10
|
import logging
|
|
11
|
+
import weakref
|
|
11
12
|
import platform
|
|
12
13
|
import warnings
|
|
14
|
+
import threading
|
|
13
15
|
import email.utils
|
|
14
16
|
from types import TracebackType
|
|
15
17
|
from random import random
|
|
@@ -90,6 +92,88 @@ from ._utils._json import openapi_dumps
|
|
|
90
92
|
|
|
91
93
|
log: logging.Logger = logging.getLogger(__name__)
|
|
92
94
|
|
|
95
|
+
# Shared HTTP transport state. We share transports (connection pools) rather
|
|
96
|
+
# than full httpx clients so each SDK instance keeps its own cookie jar and
|
|
97
|
+
# mutable client state. Refcounted wrappers close the real transport only
|
|
98
|
+
# when the last user releases it.
|
|
99
|
+
# The async transport is keyed by event loop because connections bind to the
|
|
100
|
+
# loop that created them and cannot be reused across asyncio.run() calls.
|
|
101
|
+
_pool_lock = threading.Lock()
|
|
102
|
+
|
|
103
|
+
|
|
104
|
+
class _SharedTransport(httpx.BaseTransport):
|
|
105
|
+
"""Refcounted wrapper: delegates to a real transport, closes it when refcount hits 0."""
|
|
106
|
+
|
|
107
|
+
def __init__(self, transport: httpx.BaseTransport) -> None:
|
|
108
|
+
self._transport = transport
|
|
109
|
+
self._refcount = 1
|
|
110
|
+
self._lock = threading.Lock()
|
|
111
|
+
|
|
112
|
+
@property
|
|
113
|
+
def refcount(self) -> int:
|
|
114
|
+
return self._refcount
|
|
115
|
+
|
|
116
|
+
def acquire(self) -> bool:
|
|
117
|
+
with self._lock:
|
|
118
|
+
if self._refcount <= 0:
|
|
119
|
+
return False
|
|
120
|
+
self._refcount += 1
|
|
121
|
+
return True
|
|
122
|
+
|
|
123
|
+
@override
|
|
124
|
+
def handle_request(self, request: httpx.Request) -> httpx.Response:
|
|
125
|
+
return self._transport.handle_request(request)
|
|
126
|
+
|
|
127
|
+
@override
|
|
128
|
+
def close(self) -> None:
|
|
129
|
+
should_close = False
|
|
130
|
+
with self._lock:
|
|
131
|
+
self._refcount -= 1
|
|
132
|
+
if self._refcount <= 0:
|
|
133
|
+
should_close = True
|
|
134
|
+
if should_close:
|
|
135
|
+
self._transport.close()
|
|
136
|
+
|
|
137
|
+
|
|
138
|
+
class _SharedAsyncTransport(httpx.AsyncBaseTransport):
|
|
139
|
+
"""Async refcounted wrapper: delegates to a real async transport."""
|
|
140
|
+
|
|
141
|
+
def __init__(self, transport: httpx.AsyncBaseTransport) -> None:
|
|
142
|
+
self._transport = transport
|
|
143
|
+
self._refcount = 1
|
|
144
|
+
self._lock = threading.Lock()
|
|
145
|
+
|
|
146
|
+
@property
|
|
147
|
+
def refcount(self) -> int:
|
|
148
|
+
return self._refcount
|
|
149
|
+
|
|
150
|
+
def acquire(self) -> bool:
|
|
151
|
+
with self._lock:
|
|
152
|
+
if self._refcount <= 0:
|
|
153
|
+
return False
|
|
154
|
+
self._refcount += 1
|
|
155
|
+
return True
|
|
156
|
+
|
|
157
|
+
@override
|
|
158
|
+
async def handle_async_request(self, request: httpx.Request) -> httpx.Response:
|
|
159
|
+
return await self._transport.handle_async_request(request)
|
|
160
|
+
|
|
161
|
+
@override
|
|
162
|
+
async def aclose(self) -> None:
|
|
163
|
+
should_close = False
|
|
164
|
+
with self._lock:
|
|
165
|
+
self._refcount -= 1
|
|
166
|
+
if self._refcount <= 0:
|
|
167
|
+
should_close = True
|
|
168
|
+
if should_close:
|
|
169
|
+
await self._transport.aclose()
|
|
170
|
+
|
|
171
|
+
|
|
172
|
+
_shared_sync_transport: _SharedTransport | None = None
|
|
173
|
+
_shared_async_transports: weakref.WeakKeyDictionary[asyncio.AbstractEventLoop, _SharedAsyncTransport] = (
|
|
174
|
+
weakref.WeakKeyDictionary()
|
|
175
|
+
)
|
|
176
|
+
|
|
93
177
|
# TODO: make base page type vars covariant
|
|
94
178
|
SyncPageT = TypeVar("SyncPageT", bound="BaseSyncPage[Any]")
|
|
95
179
|
AsyncPageT = TypeVar("AsyncPageT", bound="BaseAsyncPage[Any]")
|
|
@@ -816,6 +900,7 @@ class _DefaultHttpxClient(httpx.Client):
|
|
|
816
900
|
kwargs.setdefault("timeout", DEFAULT_TIMEOUT)
|
|
817
901
|
kwargs.setdefault("limits", DEFAULT_CONNECTION_LIMITS)
|
|
818
902
|
kwargs.setdefault("follow_redirects", True)
|
|
903
|
+
kwargs.setdefault("http2", True)
|
|
819
904
|
super().__init__(**kwargs)
|
|
820
905
|
|
|
821
906
|
|
|
@@ -845,6 +930,8 @@ class SyncHttpxClientWrapper(DefaultHttpxClient):
|
|
|
845
930
|
class SyncAPIClient(BaseClient[httpx.Client, Stream[Any]]):
|
|
846
931
|
_client: httpx.Client
|
|
847
932
|
_default_stream_cls: type[Stream[Any]] | None = None
|
|
933
|
+
_uses_shared_pool: bool
|
|
934
|
+
_closed: bool
|
|
848
935
|
|
|
849
936
|
def __init__(
|
|
850
937
|
self,
|
|
@@ -857,6 +944,7 @@ class SyncAPIClient(BaseClient[httpx.Client, Stream[Any]]):
|
|
|
857
944
|
custom_headers: Mapping[str, str] | None = None,
|
|
858
945
|
custom_query: Mapping[str, object] | None = None,
|
|
859
946
|
_strict_response_validation: bool,
|
|
947
|
+
shared_http_pool: bool = True,
|
|
860
948
|
) -> None:
|
|
861
949
|
if not is_given(timeout):
|
|
862
950
|
# if the user passed in a custom http client with a non-default
|
|
@@ -886,24 +974,46 @@ class SyncAPIClient(BaseClient[httpx.Client, Stream[Any]]):
|
|
|
886
974
|
custom_headers=custom_headers,
|
|
887
975
|
_strict_response_validation=_strict_response_validation,
|
|
888
976
|
)
|
|
889
|
-
|
|
890
|
-
|
|
891
|
-
|
|
892
|
-
|
|
893
|
-
|
|
977
|
+
|
|
978
|
+
self._closed = False
|
|
979
|
+
|
|
980
|
+
if http_client is not None:
|
|
981
|
+
self._client = http_client
|
|
982
|
+
self._uses_shared_pool = False
|
|
983
|
+
elif shared_http_pool:
|
|
984
|
+
global _shared_sync_transport
|
|
985
|
+
with _pool_lock:
|
|
986
|
+
if _shared_sync_transport is None or not _shared_sync_transport.acquire():
|
|
987
|
+
_shared_sync_transport = _SharedTransport(
|
|
988
|
+
httpx.HTTPTransport(limits=DEFAULT_CONNECTION_LIMITS, http2=True),
|
|
989
|
+
)
|
|
990
|
+
self._client = SyncHttpxClientWrapper(
|
|
991
|
+
base_url=base_url,
|
|
992
|
+
timeout=cast(Timeout, timeout),
|
|
993
|
+
transport=_shared_sync_transport,
|
|
994
|
+
)
|
|
995
|
+
self._uses_shared_pool = True
|
|
996
|
+
else:
|
|
997
|
+
self._client = SyncHttpxClientWrapper(
|
|
998
|
+
base_url=base_url,
|
|
999
|
+
timeout=cast(Timeout, timeout),
|
|
1000
|
+
)
|
|
1001
|
+
self._uses_shared_pool = False
|
|
894
1002
|
|
|
895
1003
|
def is_closed(self) -> bool:
|
|
896
|
-
return self._client.is_closed
|
|
1004
|
+
return self._closed or self._client.is_closed
|
|
897
1005
|
|
|
898
1006
|
def close(self) -> None:
|
|
899
1007
|
"""Close the underlying HTTPX client.
|
|
900
1008
|
|
|
901
1009
|
The client will *not* be usable after this.
|
|
902
1010
|
"""
|
|
903
|
-
|
|
904
|
-
|
|
905
|
-
if
|
|
906
|
-
|
|
1011
|
+
if not hasattr(self, "_client"):
|
|
1012
|
+
return
|
|
1013
|
+
if self._closed:
|
|
1014
|
+
return
|
|
1015
|
+
self._closed = True
|
|
1016
|
+
self._client.close()
|
|
907
1017
|
|
|
908
1018
|
def __enter__(self: _T) -> _T:
|
|
909
1019
|
return self
|
|
@@ -1018,6 +1128,7 @@ class SyncAPIClient(BaseClient[httpx.Client, Stream[Any]]):
|
|
|
1018
1128
|
max_retries=max_retries,
|
|
1019
1129
|
options=input_options,
|
|
1020
1130
|
response=None,
|
|
1131
|
+
error=err,
|
|
1021
1132
|
)
|
|
1022
1133
|
continue
|
|
1023
1134
|
|
|
@@ -1032,6 +1143,7 @@ class SyncAPIClient(BaseClient[httpx.Client, Stream[Any]]):
|
|
|
1032
1143
|
max_retries=max_retries,
|
|
1033
1144
|
options=input_options,
|
|
1034
1145
|
response=None,
|
|
1146
|
+
error=err,
|
|
1035
1147
|
)
|
|
1036
1148
|
continue
|
|
1037
1149
|
|
|
@@ -1083,7 +1195,13 @@ class SyncAPIClient(BaseClient[httpx.Client, Stream[Any]]):
|
|
|
1083
1195
|
)
|
|
1084
1196
|
|
|
1085
1197
|
def _sleep_for_retry(
|
|
1086
|
-
self,
|
|
1198
|
+
self,
|
|
1199
|
+
*,
|
|
1200
|
+
retries_taken: int,
|
|
1201
|
+
max_retries: int,
|
|
1202
|
+
options: FinalRequestOptions,
|
|
1203
|
+
response: httpx.Response | None,
|
|
1204
|
+
error: BaseException | None = None,
|
|
1087
1205
|
) -> None:
|
|
1088
1206
|
remaining_retries = max_retries - retries_taken
|
|
1089
1207
|
if remaining_retries == 1:
|
|
@@ -1092,7 +1210,23 @@ class SyncAPIClient(BaseClient[httpx.Client, Stream[Any]]):
|
|
|
1092
1210
|
log.debug("%i retries left", remaining_retries)
|
|
1093
1211
|
|
|
1094
1212
|
timeout = self._calculate_retry_timeout(remaining_retries, options, response.headers if response else None)
|
|
1095
|
-
|
|
1213
|
+
if response is not None:
|
|
1214
|
+
log.info(
|
|
1215
|
+
"Retrying request to %s in %f seconds (status %d)",
|
|
1216
|
+
options.url,
|
|
1217
|
+
timeout,
|
|
1218
|
+
response.status_code,
|
|
1219
|
+
)
|
|
1220
|
+
elif error is not None:
|
|
1221
|
+
log.info(
|
|
1222
|
+
"Retrying request to %s in %f seconds (%s: %s)",
|
|
1223
|
+
options.url,
|
|
1224
|
+
timeout,
|
|
1225
|
+
type(error).__name__,
|
|
1226
|
+
error,
|
|
1227
|
+
)
|
|
1228
|
+
else:
|
|
1229
|
+
log.info("Retrying request to %s in %f seconds", options.url, timeout)
|
|
1096
1230
|
|
|
1097
1231
|
time.sleep(timeout)
|
|
1098
1232
|
|
|
@@ -1428,6 +1562,8 @@ class AsyncHttpxClientWrapper(DefaultAsyncHttpxClient):
|
|
|
1428
1562
|
class AsyncAPIClient(BaseClient[httpx.AsyncClient, AsyncStream[Any]]):
|
|
1429
1563
|
_client: httpx.AsyncClient
|
|
1430
1564
|
_default_stream_cls: type[AsyncStream[Any]] | None = None
|
|
1565
|
+
_uses_shared_pool: bool
|
|
1566
|
+
_closed: bool
|
|
1431
1567
|
|
|
1432
1568
|
def __init__(
|
|
1433
1569
|
self,
|
|
@@ -1440,6 +1576,7 @@ class AsyncAPIClient(BaseClient[httpx.AsyncClient, AsyncStream[Any]]):
|
|
|
1440
1576
|
http_client: httpx.AsyncClient | None = None,
|
|
1441
1577
|
custom_headers: Mapping[str, str] | None = None,
|
|
1442
1578
|
custom_query: Mapping[str, object] | None = None,
|
|
1579
|
+
shared_http_pool: bool = True,
|
|
1443
1580
|
) -> None:
|
|
1444
1581
|
if not is_given(timeout):
|
|
1445
1582
|
# if the user passed in a custom http client with a non-default
|
|
@@ -1469,20 +1606,59 @@ class AsyncAPIClient(BaseClient[httpx.AsyncClient, AsyncStream[Any]]):
|
|
|
1469
1606
|
custom_headers=custom_headers,
|
|
1470
1607
|
_strict_response_validation=_strict_response_validation,
|
|
1471
1608
|
)
|
|
1472
|
-
|
|
1473
|
-
|
|
1474
|
-
|
|
1475
|
-
|
|
1476
|
-
|
|
1609
|
+
|
|
1610
|
+
self._closed = False
|
|
1611
|
+
|
|
1612
|
+
if http_client is not None:
|
|
1613
|
+
self._client = http_client
|
|
1614
|
+
self._uses_shared_pool = False
|
|
1615
|
+
elif shared_http_pool:
|
|
1616
|
+
try:
|
|
1617
|
+
loop: asyncio.AbstractEventLoop | None = asyncio.get_running_loop()
|
|
1618
|
+
except RuntimeError:
|
|
1619
|
+
loop = None
|
|
1620
|
+
if loop is not None:
|
|
1621
|
+
with _pool_lock:
|
|
1622
|
+
existing = _shared_async_transports.get(loop)
|
|
1623
|
+
if existing is not None and existing.acquire():
|
|
1624
|
+
transport: _SharedAsyncTransport = existing
|
|
1625
|
+
else:
|
|
1626
|
+
transport = _SharedAsyncTransport(
|
|
1627
|
+
httpx.AsyncHTTPTransport(limits=DEFAULT_CONNECTION_LIMITS, http2=True),
|
|
1628
|
+
)
|
|
1629
|
+
_shared_async_transports[loop] = transport
|
|
1630
|
+
self._client = AsyncHttpxClientWrapper(
|
|
1631
|
+
base_url=base_url,
|
|
1632
|
+
timeout=cast(Timeout, timeout),
|
|
1633
|
+
transport=transport,
|
|
1634
|
+
)
|
|
1635
|
+
self._uses_shared_pool = True
|
|
1636
|
+
else:
|
|
1637
|
+
self._client = AsyncHttpxClientWrapper(
|
|
1638
|
+
base_url=base_url,
|
|
1639
|
+
timeout=cast(Timeout, timeout),
|
|
1640
|
+
)
|
|
1641
|
+
self._uses_shared_pool = False
|
|
1642
|
+
else:
|
|
1643
|
+
self._client = AsyncHttpxClientWrapper(
|
|
1644
|
+
base_url=base_url,
|
|
1645
|
+
timeout=cast(Timeout, timeout),
|
|
1646
|
+
)
|
|
1647
|
+
self._uses_shared_pool = False
|
|
1477
1648
|
|
|
1478
1649
|
def is_closed(self) -> bool:
|
|
1479
|
-
return self._client.is_closed
|
|
1650
|
+
return self._closed or self._client.is_closed
|
|
1480
1651
|
|
|
1481
1652
|
async def close(self) -> None:
|
|
1482
1653
|
"""Close the underlying HTTPX client.
|
|
1483
1654
|
|
|
1484
1655
|
The client will *not* be usable after this.
|
|
1485
1656
|
"""
|
|
1657
|
+
if not hasattr(self, "_client"):
|
|
1658
|
+
return
|
|
1659
|
+
if self._closed:
|
|
1660
|
+
return
|
|
1661
|
+
self._closed = True
|
|
1486
1662
|
await self._client.aclose()
|
|
1487
1663
|
|
|
1488
1664
|
async def __aenter__(self: _T) -> _T:
|
|
@@ -1603,6 +1779,7 @@ class AsyncAPIClient(BaseClient[httpx.AsyncClient, AsyncStream[Any]]):
|
|
|
1603
1779
|
max_retries=max_retries,
|
|
1604
1780
|
options=input_options,
|
|
1605
1781
|
response=None,
|
|
1782
|
+
error=err,
|
|
1606
1783
|
)
|
|
1607
1784
|
continue
|
|
1608
1785
|
|
|
@@ -1617,6 +1794,7 @@ class AsyncAPIClient(BaseClient[httpx.AsyncClient, AsyncStream[Any]]):
|
|
|
1617
1794
|
max_retries=max_retries,
|
|
1618
1795
|
options=input_options,
|
|
1619
1796
|
response=None,
|
|
1797
|
+
error=err,
|
|
1620
1798
|
)
|
|
1621
1799
|
continue
|
|
1622
1800
|
|
|
@@ -1668,7 +1846,13 @@ class AsyncAPIClient(BaseClient[httpx.AsyncClient, AsyncStream[Any]]):
|
|
|
1668
1846
|
)
|
|
1669
1847
|
|
|
1670
1848
|
async def _sleep_for_retry(
|
|
1671
|
-
self,
|
|
1849
|
+
self,
|
|
1850
|
+
*,
|
|
1851
|
+
retries_taken: int,
|
|
1852
|
+
max_retries: int,
|
|
1853
|
+
options: FinalRequestOptions,
|
|
1854
|
+
response: httpx.Response | None,
|
|
1855
|
+
error: BaseException | None = None,
|
|
1672
1856
|
) -> None:
|
|
1673
1857
|
remaining_retries = max_retries - retries_taken
|
|
1674
1858
|
if remaining_retries == 1:
|
|
@@ -1677,7 +1861,23 @@ class AsyncAPIClient(BaseClient[httpx.AsyncClient, AsyncStream[Any]]):
|
|
|
1677
1861
|
log.debug("%i retries left", remaining_retries)
|
|
1678
1862
|
|
|
1679
1863
|
timeout = self._calculate_retry_timeout(remaining_retries, options, response.headers if response else None)
|
|
1680
|
-
|
|
1864
|
+
if response is not None:
|
|
1865
|
+
log.info(
|
|
1866
|
+
"Retrying request to %s in %f seconds (status %d)",
|
|
1867
|
+
options.url,
|
|
1868
|
+
timeout,
|
|
1869
|
+
response.status_code,
|
|
1870
|
+
)
|
|
1871
|
+
elif error is not None:
|
|
1872
|
+
log.info(
|
|
1873
|
+
"Retrying request to %s in %f seconds (%s: %s)",
|
|
1874
|
+
options.url,
|
|
1875
|
+
timeout,
|
|
1876
|
+
type(error).__name__,
|
|
1877
|
+
error,
|
|
1878
|
+
)
|
|
1879
|
+
else:
|
|
1880
|
+
log.info("Retrying request to %s in %f seconds", options.url, timeout)
|
|
1681
1881
|
|
|
1682
1882
|
await anyio.sleep(timeout)
|
|
1683
1883
|
|
|
@@ -19,7 +19,11 @@ from ._types import (
|
|
|
19
19
|
RequestOptions,
|
|
20
20
|
not_given,
|
|
21
21
|
)
|
|
22
|
-
from ._utils import
|
|
22
|
+
from ._utils import (
|
|
23
|
+
is_given,
|
|
24
|
+
is_mapping_t,
|
|
25
|
+
get_async_library,
|
|
26
|
+
)
|
|
23
27
|
from ._compat import cached_property
|
|
24
28
|
from ._version import __version__
|
|
25
29
|
from ._streaming import Stream as Stream, AsyncStream as AsyncStream
|
|
@@ -84,6 +88,10 @@ class Runloop(SyncAPIClient):
|
|
|
84
88
|
# We provide a `DefaultHttpxClient` class that you can pass to retain the default values we use for `limits`, `timeout` & `follow_redirects`.
|
|
85
89
|
# See the [httpx documentation](https://www.python-httpx.org/api/#client) for more details.
|
|
86
90
|
http_client: httpx.Client | None = None,
|
|
91
|
+
# Share a single httpx connection pool across all Runloop client instances.
|
|
92
|
+
# Enables HTTP/2 multiplexing and avoids ConnectTimeout storms under high concurrency.
|
|
93
|
+
# Set to False to create a private connection pool (old behavior).
|
|
94
|
+
shared_http_pool: bool = True,
|
|
87
95
|
# Enable or disable schema validation for data returned by the API.
|
|
88
96
|
# When enabled an error APIResponseValidationError is raised
|
|
89
97
|
# if the API responds with invalid data for the expected schema.
|
|
@@ -111,6 +119,15 @@ class Runloop(SyncAPIClient):
|
|
|
111
119
|
if base_url is None:
|
|
112
120
|
base_url = f"https://api.runloop.ai"
|
|
113
121
|
|
|
122
|
+
custom_headers_env = os.environ.get("RUNLOOP_CUSTOM_HEADERS")
|
|
123
|
+
if custom_headers_env is not None:
|
|
124
|
+
parsed: dict[str, str] = {}
|
|
125
|
+
for line in custom_headers_env.split("\n"):
|
|
126
|
+
colon = line.find(":")
|
|
127
|
+
if colon >= 0:
|
|
128
|
+
parsed[line[:colon].strip()] = line[colon + 1 :].strip()
|
|
129
|
+
default_headers = {**parsed, **(default_headers if is_mapping_t(default_headers) else {})}
|
|
130
|
+
|
|
114
131
|
super().__init__(
|
|
115
132
|
version=__version__,
|
|
116
133
|
base_url=base_url,
|
|
@@ -120,6 +137,7 @@ class Runloop(SyncAPIClient):
|
|
|
120
137
|
custom_headers=default_headers,
|
|
121
138
|
custom_query=default_query,
|
|
122
139
|
_strict_response_validation=_strict_response_validation,
|
|
140
|
+
shared_http_pool=shared_http_pool,
|
|
123
141
|
)
|
|
124
142
|
|
|
125
143
|
self._idempotency_header = "x-request-id"
|
|
@@ -249,6 +267,7 @@ class Runloop(SyncAPIClient):
|
|
|
249
267
|
base_url: str | httpx.URL | None = None,
|
|
250
268
|
timeout: float | Timeout | None | NotGiven = not_given,
|
|
251
269
|
http_client: httpx.Client | None = None,
|
|
270
|
+
shared_http_pool: bool | None = None,
|
|
252
271
|
max_retries: int | NotGiven = not_given,
|
|
253
272
|
default_headers: Mapping[str, str] | None = None,
|
|
254
273
|
set_default_headers: Mapping[str, str] | None = None,
|
|
@@ -277,12 +296,19 @@ class Runloop(SyncAPIClient):
|
|
|
277
296
|
elif set_default_query is not None:
|
|
278
297
|
params = set_default_query
|
|
279
298
|
|
|
280
|
-
http_client
|
|
299
|
+
if http_client is not None:
|
|
300
|
+
resolved_shared = False
|
|
301
|
+
elif shared_http_pool is not None:
|
|
302
|
+
resolved_shared = shared_http_pool
|
|
303
|
+
else:
|
|
304
|
+
resolved_shared = self._uses_shared_pool
|
|
305
|
+
|
|
281
306
|
return self.__class__(
|
|
282
307
|
bearer_token=bearer_token or self.bearer_token,
|
|
283
308
|
base_url=base_url or self.base_url,
|
|
284
309
|
timeout=self.timeout if isinstance(timeout, NotGiven) else timeout,
|
|
285
310
|
http_client=http_client,
|
|
311
|
+
shared_http_pool=resolved_shared,
|
|
286
312
|
max_retries=max_retries if is_given(max_retries) else self.max_retries,
|
|
287
313
|
default_headers=headers,
|
|
288
314
|
default_query=params,
|
|
@@ -344,6 +370,10 @@ class AsyncRunloop(AsyncAPIClient):
|
|
|
344
370
|
# We provide a `DefaultAsyncHttpxClient` class that you can pass to retain the default values we use for `limits`, `timeout` & `follow_redirects`.
|
|
345
371
|
# See the [httpx documentation](https://www.python-httpx.org/api/#asyncclient) for more details.
|
|
346
372
|
http_client: httpx.AsyncClient | None = None,
|
|
373
|
+
# Share a single httpx connection pool across all AsyncRunloop client instances.
|
|
374
|
+
# Enables HTTP/2 multiplexing and avoids ConnectTimeout storms under high concurrency.
|
|
375
|
+
# Set to False to create a private connection pool (old behavior).
|
|
376
|
+
shared_http_pool: bool = True,
|
|
347
377
|
# Enable or disable schema validation for data returned by the API.
|
|
348
378
|
# When enabled an error APIResponseValidationError is raised
|
|
349
379
|
# if the API responds with invalid data for the expected schema.
|
|
@@ -371,6 +401,15 @@ class AsyncRunloop(AsyncAPIClient):
|
|
|
371
401
|
if base_url is None:
|
|
372
402
|
base_url = f"https://api.runloop.ai"
|
|
373
403
|
|
|
404
|
+
custom_headers_env = os.environ.get("RUNLOOP_CUSTOM_HEADERS")
|
|
405
|
+
if custom_headers_env is not None:
|
|
406
|
+
parsed: dict[str, str] = {}
|
|
407
|
+
for line in custom_headers_env.split("\n"):
|
|
408
|
+
colon = line.find(":")
|
|
409
|
+
if colon >= 0:
|
|
410
|
+
parsed[line[:colon].strip()] = line[colon + 1 :].strip()
|
|
411
|
+
default_headers = {**parsed, **(default_headers if is_mapping_t(default_headers) else {})}
|
|
412
|
+
|
|
374
413
|
super().__init__(
|
|
375
414
|
version=__version__,
|
|
376
415
|
base_url=base_url,
|
|
@@ -380,6 +419,7 @@ class AsyncRunloop(AsyncAPIClient):
|
|
|
380
419
|
custom_headers=default_headers,
|
|
381
420
|
custom_query=default_query,
|
|
382
421
|
_strict_response_validation=_strict_response_validation,
|
|
422
|
+
shared_http_pool=shared_http_pool,
|
|
383
423
|
)
|
|
384
424
|
|
|
385
425
|
self._idempotency_header = "x-request-id"
|
|
@@ -509,6 +549,7 @@ class AsyncRunloop(AsyncAPIClient):
|
|
|
509
549
|
base_url: str | httpx.URL | None = None,
|
|
510
550
|
timeout: float | Timeout | None | NotGiven = not_given,
|
|
511
551
|
http_client: httpx.AsyncClient | None = None,
|
|
552
|
+
shared_http_pool: bool | None = None,
|
|
512
553
|
max_retries: int | NotGiven = not_given,
|
|
513
554
|
default_headers: Mapping[str, str] | None = None,
|
|
514
555
|
set_default_headers: Mapping[str, str] | None = None,
|
|
@@ -537,12 +578,19 @@ class AsyncRunloop(AsyncAPIClient):
|
|
|
537
578
|
elif set_default_query is not None:
|
|
538
579
|
params = set_default_query
|
|
539
580
|
|
|
540
|
-
http_client
|
|
581
|
+
if http_client is not None:
|
|
582
|
+
resolved_shared = False
|
|
583
|
+
elif shared_http_pool is not None:
|
|
584
|
+
resolved_shared = shared_http_pool
|
|
585
|
+
else:
|
|
586
|
+
resolved_shared = self._uses_shared_pool
|
|
587
|
+
|
|
541
588
|
return self.__class__(
|
|
542
589
|
bearer_token=bearer_token or self.bearer_token,
|
|
543
590
|
base_url=base_url or self.base_url,
|
|
544
591
|
timeout=self.timeout if isinstance(timeout, NotGiven) else timeout,
|
|
545
592
|
http_client=http_client,
|
|
593
|
+
shared_http_pool=resolved_shared,
|
|
546
594
|
max_retries=max_retries if is_given(max_retries) else self.max_retries,
|
|
547
595
|
default_headers=headers,
|
|
548
596
|
default_query=params,
|
{runloop_api_client-1.20.1 → runloop_api_client-1.20.3}/src/runloop_api_client/_constants.py
RENAMED
|
@@ -8,7 +8,7 @@ OVERRIDE_CAST_TO_HEADER = "____stainless_override_cast_to"
|
|
|
8
8
|
# default timeout is 30 seconds
|
|
9
9
|
DEFAULT_TIMEOUT = httpx.Timeout(timeout=30, connect=5.0)
|
|
10
10
|
DEFAULT_MAX_RETRIES = 5
|
|
11
|
-
DEFAULT_CONNECTION_LIMITS = httpx.Limits(max_connections=
|
|
11
|
+
DEFAULT_CONNECTION_LIMITS = httpx.Limits(max_connections=20, max_keepalive_connections=10)
|
|
12
12
|
|
|
13
13
|
INITIAL_RETRY_DELAY = 1.0
|
|
14
14
|
MAX_RETRY_DELAY = 60.0
|
|
@@ -2,17 +2,13 @@ from __future__ import annotations
|
|
|
2
2
|
|
|
3
3
|
from typing import Any, List, Tuple, Union, Mapping, TypeVar
|
|
4
4
|
from urllib.parse import parse_qs, urlencode
|
|
5
|
-
from typing_extensions import
|
|
5
|
+
from typing_extensions import get_args
|
|
6
6
|
|
|
7
|
-
from ._types import NotGiven, not_given
|
|
7
|
+
from ._types import NotGiven, ArrayFormat, NestedFormat, not_given
|
|
8
8
|
from ._utils import flatten
|
|
9
9
|
|
|
10
10
|
_T = TypeVar("_T")
|
|
11
11
|
|
|
12
|
-
|
|
13
|
-
ArrayFormat = Literal["comma", "repeat", "indices", "brackets"]
|
|
14
|
-
NestedFormat = Literal["dots", "brackets"]
|
|
15
|
-
|
|
16
12
|
PrimitiveData = Union[str, int, float, bool, None]
|
|
17
13
|
# this should be Data = Union[PrimitiveData, "List[Data]", "Tuple[Data]", "Mapping[str, Data]"]
|
|
18
14
|
# https://github.com/microsoft/pyright/issues/3555
|
|
@@ -47,6 +47,9 @@ AnyMapping = Mapping[str, object]
|
|
|
47
47
|
ModelT = TypeVar("ModelT", bound=pydantic.BaseModel)
|
|
48
48
|
_T = TypeVar("_T")
|
|
49
49
|
|
|
50
|
+
ArrayFormat = Literal["comma", "repeat", "indices", "brackets"]
|
|
51
|
+
NestedFormat = Literal["dots", "brackets"]
|
|
52
|
+
|
|
50
53
|
|
|
51
54
|
# Approximates httpx internal ProxiesTypes and RequestFiles types
|
|
52
55
|
# while adding support for `PathLike` instances
|