runloop-api-client 0.47.1__tar.gz → 0.48.1__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-0.48.1/.release-please-manifest.json +3 -0
- {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/CHANGELOG.md +18 -0
- {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/PKG-INFO +6 -4
- {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/README.md +4 -3
- {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/pyproject.toml +5 -1
- {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/requirements-dev.lock +2 -2
- {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/requirements.lock +2 -2
- {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/_models.py +8 -5
- {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/_version.py +1 -1
- {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/lib/polling.py +17 -18
- {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/resources/devboxes/devboxes.py +3 -3
- {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/resources/devboxes/executions.py +57 -24
- {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/tests/api_resources/devboxes/test_executions.py +339 -0
- {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/tests/api_resources/devboxes/test_lsp.py +8 -0
- {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/tests/api_resources/test_devboxes.py +285 -0
- {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/tests/conftest.py +29 -0
- {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/tests/test_models.py +45 -0
- runloop_api_client-0.48.1/tests/test_polling.py +262 -0
- runloop_api_client-0.48.1/uv.lock +1500 -0
- runloop_api_client-0.47.1/.release-please-manifest.json +0 -3
- runloop_api_client-0.47.1/uv.lock +0 -295
- {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/.gitignore +0 -0
- {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/CONTRIBUTING.md +0 -0
- {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/LICENSE +0 -0
- {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/SECURITY.md +0 -0
- {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/api.md +0 -0
- {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/bin/check-release-environment +0 -0
- {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/bin/publish-pypi +0 -0
- {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/examples/.keep +0 -0
- {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/mypy.ini +0 -0
- {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/noxfile.py +0 -0
- {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/release-please-config.json +0 -0
- {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop/lib/.keep +0 -0
- {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/__init__.py +0 -0
- {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/_base_client.py +0 -0
- {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/_client.py +0 -0
- {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/_compat.py +0 -0
- {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/_constants.py +0 -0
- {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/_exceptions.py +0 -0
- {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/_files.py +0 -0
- {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/_qs.py +0 -0
- {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/_resource.py +0 -0
- {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/_response.py +0 -0
- {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/_streaming.py +0 -0
- {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/_types.py +0 -0
- {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/_utils/__init__.py +0 -0
- {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/_utils/_logs.py +0 -0
- {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/_utils/_proxy.py +0 -0
- {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/_utils/_reflection.py +0 -0
- {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/_utils/_resources_proxy.py +0 -0
- {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/_utils/_streams.py +0 -0
- {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/_utils/_sync.py +0 -0
- {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/_utils/_transform.py +0 -0
- {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/_utils/_typing.py +0 -0
- {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/_utils/_utils.py +0 -0
- {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/lib/.keep +0 -0
- {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/lib/polling_async.py +0 -0
- {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/pagination.py +0 -0
- {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/py.typed +0 -0
- {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/resources/__init__.py +0 -0
- {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/resources/benchmarks/__init__.py +0 -0
- {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/resources/benchmarks/benchmarks.py +0 -0
- {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/resources/benchmarks/runs.py +0 -0
- {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/resources/blueprints.py +0 -0
- {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/resources/devboxes/__init__.py +0 -0
- {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/resources/devboxes/browsers.py +0 -0
- {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/resources/devboxes/computers.py +0 -0
- {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/resources/devboxes/disk_snapshots.py +0 -0
- {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/resources/devboxes/logs.py +0 -0
- {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/resources/devboxes/lsp.py +0 -0
- {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/resources/repositories.py +0 -0
- {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/resources/scenarios/__init__.py +0 -0
- {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/resources/scenarios/runs.py +0 -0
- {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/resources/scenarios/scenarios.py +0 -0
- {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/resources/scenarios/scorers.py +0 -0
- {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/resources/secrets.py +0 -0
- {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/types/__init__.py +0 -0
- {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/types/benchmark_create_params.py +0 -0
- {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/types/benchmark_definitions_params.py +0 -0
- {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/types/benchmark_list_params.py +0 -0
- {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/types/benchmark_list_public_params.py +0 -0
- {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/types/benchmark_run_list_view.py +0 -0
- {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/types/benchmark_run_view.py +0 -0
- {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/types/benchmark_start_run_params.py +0 -0
- {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/types/benchmark_update_params.py +0 -0
- {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/types/benchmark_view.py +0 -0
- {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/types/benchmarks/__init__.py +0 -0
- {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/types/benchmarks/run_list_params.py +0 -0
- {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/types/benchmarks/run_list_scenario_runs_params.py +0 -0
- {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/types/blueprint_build_log.py +0 -0
- {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/types/blueprint_build_logs_list_view.py +0 -0
- {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/types/blueprint_build_parameters.py +0 -0
- {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/types/blueprint_create_params.py +0 -0
- {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/types/blueprint_list_params.py +0 -0
- {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/types/blueprint_list_view.py +0 -0
- {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/types/blueprint_preview_params.py +0 -0
- {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/types/blueprint_preview_view.py +0 -0
- {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/types/blueprint_view.py +0 -0
- {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/types/devbox_async_execution_detail_view.py +0 -0
- {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/types/devbox_create_params.py +0 -0
- {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/types/devbox_create_ssh_key_response.py +0 -0
- {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/types/devbox_create_tunnel_params.py +0 -0
- {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/types/devbox_download_file_params.py +0 -0
- {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/types/devbox_execute_async_params.py +0 -0
- {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/types/devbox_execute_sync_params.py +0 -0
- {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/types/devbox_execution_detail_view.py +0 -0
- {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/types/devbox_list_disk_snapshots_params.py +0 -0
- {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/types/devbox_list_params.py +0 -0
- {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/types/devbox_list_view.py +0 -0
- {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/types/devbox_read_file_contents_params.py +0 -0
- {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/types/devbox_read_file_contents_response.py +0 -0
- {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/types/devbox_remove_tunnel_params.py +0 -0
- {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/types/devbox_snapshot_disk_async_params.py +0 -0
- {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/types/devbox_snapshot_disk_params.py +0 -0
- {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/types/devbox_snapshot_list_view.py +0 -0
- {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/types/devbox_snapshot_view.py +0 -0
- {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/types/devbox_tunnel_view.py +0 -0
- {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/types/devbox_update_params.py +0 -0
- {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/types/devbox_upload_file_params.py +0 -0
- {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/types/devbox_view.py +0 -0
- {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/types/devbox_write_file_contents_params.py +0 -0
- {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/types/devboxes/__init__.py +0 -0
- {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/types/devboxes/base_code_action.py +0 -0
- {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/types/devboxes/base_command.py +0 -0
- {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/types/devboxes/base_command_param.py +0 -0
- {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/types/devboxes/base_diagnostic.py +0 -0
- {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/types/devboxes/base_diagnostic_param.py +0 -0
- {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/types/devboxes/base_location.py +0 -0
- {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/types/devboxes/base_markup_content.py +0 -0
- {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/types/devboxes/base_parameter_information.py +0 -0
- {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/types/devboxes/base_range.py +0 -0
- {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/types/devboxes/base_range_param.py +0 -0
- {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/types/devboxes/base_signature.py +0 -0
- {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/types/devboxes/base_workspace_edit.py +0 -0
- {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/types/devboxes/base_workspace_edit_param.py +0 -0
- {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/types/devboxes/browser_create_params.py +0 -0
- {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/types/devboxes/browser_view.py +0 -0
- {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/types/devboxes/code_action_application_result.py +0 -0
- {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/types/devboxes/code_action_context_param.py +0 -0
- {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/types/devboxes/code_action_kind.py +0 -0
- {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/types/devboxes/code_action_trigger_kind.py +0 -0
- {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/types/devboxes/code_actions_response.py +0 -0
- {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/types/devboxes/code_description_param.py +0 -0
- {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/types/devboxes/code_segment_info_response.py +0 -0
- {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/types/devboxes/computer_create_params.py +0 -0
- {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/types/devboxes/computer_keyboard_interaction_params.py +0 -0
- {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/types/devboxes/computer_keyboard_interaction_response.py +0 -0
- {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/types/devboxes/computer_mouse_interaction_params.py +0 -0
- {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/types/devboxes/computer_mouse_interaction_response.py +0 -0
- {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/types/devboxes/computer_screen_interaction_params.py +0 -0
- {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/types/devboxes/computer_screen_interaction_response.py +0 -0
- {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/types/devboxes/computer_view.py +0 -0
- {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/types/devboxes/devbox_logs_list_view.py +0 -0
- {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/types/devboxes/devbox_snapshot_async_status_view.py +0 -0
- {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/types/devboxes/diagnostic_param.py +0 -0
- {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/types/devboxes/diagnostic_related_information_param.py +0 -0
- {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/types/devboxes/diagnostic_severity.py +0 -0
- {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/types/devboxes/diagnostic_tag.py +0 -0
- {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/types/devboxes/diagnostics_response.py +0 -0
- {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/types/devboxes/disk_snapshot_list_params.py +0 -0
- {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/types/devboxes/disk_snapshot_update_params.py +0 -0
- {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/types/devboxes/document_symbol.py +0 -0
- {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/types/devboxes/document_symbol_response.py +0 -0
- {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/types/devboxes/document_uri.py +0 -0
- {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/types/devboxes/execution_execute_async_params.py +0 -0
- {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/types/devboxes/execution_execute_sync_params.py +0 -0
- {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/types/devboxes/execution_retrieve_params.py +0 -0
- {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/types/devboxes/file_contents_response.py +0 -0
- {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/types/devboxes/file_definition_response.py +0 -0
- {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/types/devboxes/file_path.py +0 -0
- {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/types/devboxes/file_uri.py +0 -0
- {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/types/devboxes/formatting_response.py +0 -0
- {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/types/devboxes/health_status_response.py +0 -0
- {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/types/devboxes/integer.py +0 -0
- {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/types/devboxes/l_sp_any_param.py +0 -0
- {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/types/devboxes/location_param.py +0 -0
- {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/types/devboxes/log_list_params.py +0 -0
- {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/types/devboxes/lsp_apply_code_action_params.py +0 -0
- {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/types/devboxes/lsp_code_actions_params.py +0 -0
- {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/types/devboxes/lsp_diagnostics_params.py +0 -0
- {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/types/devboxes/lsp_document_symbols_params.py +0 -0
- {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/types/devboxes/lsp_file_definition_params.py +0 -0
- {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/types/devboxes/lsp_file_params.py +0 -0
- {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/types/devboxes/lsp_files_response.py +0 -0
- {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/types/devboxes/lsp_formatting_params.py +0 -0
- {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/types/devboxes/lsp_get_code_actions_for_diagnostic_params.py +0 -0
- {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/types/devboxes/lsp_get_code_actions_for_diagnostic_response.py +0 -0
- {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/types/devboxes/lsp_get_code_segment_info_params.py +0 -0
- {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/types/devboxes/lsp_get_signature_help_params.py +0 -0
- {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/types/devboxes/lsp_references_params.py +0 -0
- {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/types/devboxes/lsp_set_watch_directory_params.py +0 -0
- {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/types/devboxes/lsp_set_watch_directory_response.py +0 -0
- {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/types/devboxes/position.py +0 -0
- {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/types/devboxes/position_param.py +0 -0
- {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/types/devboxes/range.py +0 -0
- {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/types/devboxes/range_param.py +0 -0
- {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/types/devboxes/record_string_text_edit_array.py +0 -0
- {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/types/devboxes/record_string_text_edit_array_param.py +0 -0
- {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/types/devboxes/references_response.py +0 -0
- {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/types/devboxes/signature_help_response.py +0 -0
- {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/types/devboxes/symbol_kind.py +0 -0
- {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/types/devboxes/symbol_tag.py +0 -0
- {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/types/devboxes/symbol_type.py +0 -0
- {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/types/devboxes/text_edit.py +0 -0
- {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/types/devboxes/text_edit_param.py +0 -0
- {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/types/devboxes/u_ri.py +0 -0
- {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/types/devboxes/uinteger.py +0 -0
- {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/types/devboxes/watched_file_response.py +0 -0
- {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/types/input_context.py +0 -0
- {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/types/input_context_param.py +0 -0
- {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/types/input_context_update_param.py +0 -0
- {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/types/repository_connection_list_view.py +0 -0
- {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/types/repository_connection_view.py +0 -0
- {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/types/repository_create_params.py +0 -0
- {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/types/repository_inspection_details.py +0 -0
- {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/types/repository_inspection_list_view.py +0 -0
- {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/types/repository_list_params.py +0 -0
- {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/types/repository_manifest_view.py +0 -0
- {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/types/repository_refresh_params.py +0 -0
- {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/types/scenario_create_params.py +0 -0
- {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/types/scenario_definition_list_view.py +0 -0
- {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/types/scenario_environment.py +0 -0
- {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/types/scenario_environment_param.py +0 -0
- {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/types/scenario_list_params.py +0 -0
- {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/types/scenario_list_public_params.py +0 -0
- {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/types/scenario_run_list_view.py +0 -0
- {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/types/scenario_run_view.py +0 -0
- {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/types/scenario_start_run_params.py +0 -0
- {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/types/scenario_update_params.py +0 -0
- {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/types/scenario_view.py +0 -0
- {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/types/scenarios/__init__.py +0 -0
- {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/types/scenarios/run_list_params.py +0 -0
- {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/types/scenarios/scorer_create_params.py +0 -0
- {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/types/scenarios/scorer_create_response.py +0 -0
- {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/types/scenarios/scorer_list_params.py +0 -0
- {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/types/scenarios/scorer_list_response.py +0 -0
- {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/types/scenarios/scorer_retrieve_response.py +0 -0
- {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/types/scenarios/scorer_update_params.py +0 -0
- {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/types/scenarios/scorer_update_response.py +0 -0
- {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/types/scenarios/scorer_validate_params.py +0 -0
- {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/types/scenarios/scorer_validate_response.py +0 -0
- {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/types/scoring_contract.py +0 -0
- {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/types/scoring_contract_param.py +0 -0
- {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/types/scoring_contract_result_view.py +0 -0
- {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/types/scoring_contract_update_param.py +0 -0
- {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/types/scoring_function.py +0 -0
- {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/types/scoring_function_param.py +0 -0
- {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/types/scoring_function_result_view.py +0 -0
- {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/types/secret_create_params.py +0 -0
- {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/types/secret_list_view.py +0 -0
- {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/types/secret_update_params.py +0 -0
- {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/types/secret_view.py +0 -0
- {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/types/shared/__init__.py +0 -0
- {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/types/shared/after_idle.py +0 -0
- {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/types/shared/code_mount_parameters.py +0 -0
- {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/types/shared/launch_parameters.py +0 -0
- {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/types/shared_params/__init__.py +0 -0
- {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/types/shared_params/after_idle.py +0 -0
- {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/types/shared_params/code_mount_parameters.py +0 -0
- {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/types/shared_params/launch_parameters.py +0 -0
- {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/tests/__init__.py +0 -0
- {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/tests/api_resources/__init__.py +0 -0
- {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/tests/api_resources/benchmarks/__init__.py +0 -0
- {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/tests/api_resources/benchmarks/test_runs.py +0 -0
- {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/tests/api_resources/devboxes/__init__.py +0 -0
- {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/tests/api_resources/devboxes/test_browsers.py +0 -0
- {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/tests/api_resources/devboxes/test_computers.py +0 -0
- {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/tests/api_resources/devboxes/test_disk_snapshots.py +0 -0
- {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/tests/api_resources/devboxes/test_logs.py +0 -0
- {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/tests/api_resources/scenarios/__init__.py +0 -0
- {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/tests/api_resources/scenarios/test_runs.py +0 -0
- {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/tests/api_resources/scenarios/test_scorers.py +0 -0
- {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/tests/api_resources/test_benchmarks.py +0 -0
- {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/tests/api_resources/test_blueprints.py +0 -0
- {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/tests/api_resources/test_repositories.py +0 -0
- {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/tests/api_resources/test_scenarios.py +0 -0
- {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/tests/api_resources/test_secrets.py +0 -0
- {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/tests/sample_file.txt +0 -0
- {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/tests/test_client.py +0 -0
- {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/tests/test_deepcopy.py +0 -0
- {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/tests/test_extract_files.py +0 -0
- {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/tests/test_files.py +0 -0
- {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/tests/test_qs.py +0 -0
- {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/tests/test_required_args.py +0 -0
- {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/tests/test_response.py +0 -0
- {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/tests/test_streaming.py +0 -0
- {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/tests/test_transform.py +0 -0
- {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/tests/test_utils/test_proxy.py +0 -0
- {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/tests/test_utils/test_typing.py +0 -0
- {runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/tests/utils.py +0 -0
|
@@ -1,5 +1,23 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## 0.48.1 (2025-07-10)
|
|
4
|
+
|
|
5
|
+
Full Changelog: [v0.48.0...v0.48.1](https://github.com/runloopai/api-client-python/compare/v0.48.0...v0.48.1)
|
|
6
|
+
|
|
7
|
+
### Bug Fixes
|
|
8
|
+
|
|
9
|
+
* **parsing:** correctly handle nested discriminated unions ([3312be9](https://github.com/runloopai/api-client-python/commit/3312be9e751dd58396884644be4ceabbaba11014))
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
### Chores
|
|
13
|
+
|
|
14
|
+
* **internal:** bump pinned h11 dep ([80ff87c](https://github.com/runloopai/api-client-python/commit/80ff87cde91eedd2169bd3b3e563545291928cbd))
|
|
15
|
+
* **package:** mark python 3.13 as supported ([7043864](https://github.com/runloopai/api-client-python/commit/70438649e40206746ea1543fc6c29b3c9fb47bd3))
|
|
16
|
+
|
|
17
|
+
## 0.48.0 (2025-07-09)
|
|
18
|
+
|
|
19
|
+
Full Changelog: [v0.47.1...v0.48.0](https://github.com/runloopai/api-client-python/compare/v0.47.1...v0.48.0)
|
|
20
|
+
|
|
3
21
|
## 0.47.1 (2025-07-08)
|
|
4
22
|
|
|
5
23
|
Full Changelog: [v0.47.0...v0.47.1](https://github.com/runloopai/api-client-python/compare/v0.47.0...v0.47.1)
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.3
|
|
2
2
|
Name: runloop_api_client
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.48.1
|
|
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
|
|
@@ -18,6 +18,7 @@ Classifier: Programming Language :: Python :: 3.9
|
|
|
18
18
|
Classifier: Programming Language :: Python :: 3.10
|
|
19
19
|
Classifier: Programming Language :: Python :: 3.11
|
|
20
20
|
Classifier: Programming Language :: Python :: 3.12
|
|
21
|
+
Classifier: Programming Language :: Python :: 3.13
|
|
21
22
|
Classifier: Topic :: Software Development :: Libraries :: Python Modules
|
|
22
23
|
Classifier: Typing :: Typed
|
|
23
24
|
Requires-Python: >=3.8
|
|
@@ -281,7 +282,8 @@ Error codes are as follows:
|
|
|
281
282
|
|
|
282
283
|
Certain errors are automatically retried 5 times by default, with a short exponential backoff.
|
|
283
284
|
Connection errors (for example, due to a network connectivity problem), 408 Request Timeout, 409 Conflict,
|
|
284
|
-
429 Rate Limit, and >=500 Internal errors are all retried by default.
|
|
285
|
+
429 Rate Limit, and >=500 Internal errors are all retried by default for GET requests. For POST requests, only
|
|
286
|
+
429 errors will be retried.
|
|
285
287
|
|
|
286
288
|
You can use the `max_retries` option to configure or disable retry settings:
|
|
287
289
|
|
|
@@ -290,12 +292,12 @@ from runloop_api_client import Runloop
|
|
|
290
292
|
|
|
291
293
|
# Configure the default for all requests:
|
|
292
294
|
client = Runloop(
|
|
293
|
-
# default is
|
|
295
|
+
# default is 5
|
|
294
296
|
max_retries=0,
|
|
295
297
|
)
|
|
296
298
|
|
|
297
299
|
# Or, configure per-request:
|
|
298
|
-
client.with_options(max_retries=
|
|
300
|
+
client.with_options(max_retries=10).devboxes.create()
|
|
299
301
|
```
|
|
300
302
|
|
|
301
303
|
### Timeouts
|
|
@@ -247,7 +247,8 @@ Error codes are as follows:
|
|
|
247
247
|
|
|
248
248
|
Certain errors are automatically retried 5 times by default, with a short exponential backoff.
|
|
249
249
|
Connection errors (for example, due to a network connectivity problem), 408 Request Timeout, 409 Conflict,
|
|
250
|
-
429 Rate Limit, and >=500 Internal errors are all retried by default.
|
|
250
|
+
429 Rate Limit, and >=500 Internal errors are all retried by default for GET requests. For POST requests, only
|
|
251
|
+
429 errors will be retried.
|
|
251
252
|
|
|
252
253
|
You can use the `max_retries` option to configure or disable retry settings:
|
|
253
254
|
|
|
@@ -256,12 +257,12 @@ from runloop_api_client import Runloop
|
|
|
256
257
|
|
|
257
258
|
# Configure the default for all requests:
|
|
258
259
|
client = Runloop(
|
|
259
|
-
# default is
|
|
260
|
+
# default is 5
|
|
260
261
|
max_retries=0,
|
|
261
262
|
)
|
|
262
263
|
|
|
263
264
|
# Or, configure per-request:
|
|
264
|
-
client.with_options(max_retries=
|
|
265
|
+
client.with_options(max_retries=10).devboxes.create()
|
|
265
266
|
```
|
|
266
267
|
|
|
267
268
|
### Timeouts
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
[project]
|
|
2
2
|
name = "runloop_api_client"
|
|
3
|
-
version = "0.
|
|
3
|
+
version = "0.48.1"
|
|
4
4
|
description = "The official Python library for the runloop API"
|
|
5
5
|
dynamic = ["readme"]
|
|
6
6
|
license = "MIT"
|
|
@@ -24,6 +24,7 @@ classifiers = [
|
|
|
24
24
|
"Programming Language :: Python :: 3.10",
|
|
25
25
|
"Programming Language :: Python :: 3.11",
|
|
26
26
|
"Programming Language :: Python :: 3.12",
|
|
27
|
+
"Programming Language :: Python :: 3.13",
|
|
27
28
|
"Operating System :: OS Independent",
|
|
28
29
|
"Operating System :: POSIX",
|
|
29
30
|
"Operating System :: MacOS",
|
|
@@ -135,6 +136,9 @@ asyncio_default_fixture_loop_scope = "session"
|
|
|
135
136
|
filterwarnings = [
|
|
136
137
|
"error"
|
|
137
138
|
]
|
|
139
|
+
markers = [
|
|
140
|
+
"skip_if_strict: skip test if using strict validation (for prism mock server issues)"
|
|
141
|
+
]
|
|
138
142
|
|
|
139
143
|
[tool.pyright]
|
|
140
144
|
# this enables practically every flag given by pyright.
|
|
@@ -2,9 +2,10 @@ from __future__ import annotations
|
|
|
2
2
|
|
|
3
3
|
import os
|
|
4
4
|
import inspect
|
|
5
|
-
from typing import TYPE_CHECKING, Any, Type, Union, Generic, TypeVar, Callable, cast
|
|
5
|
+
from typing import TYPE_CHECKING, Any, Type, Union, Generic, TypeVar, Callable, Optional, cast
|
|
6
6
|
from datetime import date, datetime
|
|
7
7
|
from typing_extensions import (
|
|
8
|
+
List,
|
|
8
9
|
Unpack,
|
|
9
10
|
Literal,
|
|
10
11
|
ClassVar,
|
|
@@ -366,7 +367,7 @@ def _construct_field(value: object, field: FieldInfo, key: str) -> object:
|
|
|
366
367
|
if type_ is None:
|
|
367
368
|
raise RuntimeError(f"Unexpected field type is None for {key}")
|
|
368
369
|
|
|
369
|
-
return construct_type(value=value, type_=type_)
|
|
370
|
+
return construct_type(value=value, type_=type_, metadata=getattr(field, "metadata", None))
|
|
370
371
|
|
|
371
372
|
|
|
372
373
|
def is_basemodel(type_: type) -> bool:
|
|
@@ -420,7 +421,7 @@ def construct_type_unchecked(*, value: object, type_: type[_T]) -> _T:
|
|
|
420
421
|
return cast(_T, construct_type(value=value, type_=type_))
|
|
421
422
|
|
|
422
423
|
|
|
423
|
-
def construct_type(*, value: object, type_: object) -> object:
|
|
424
|
+
def construct_type(*, value: object, type_: object, metadata: Optional[List[Any]] = None) -> object:
|
|
424
425
|
"""Loose coercion to the expected type with construction of nested values.
|
|
425
426
|
|
|
426
427
|
If the given value does not match the expected type then it is returned as-is.
|
|
@@ -438,8 +439,10 @@ def construct_type(*, value: object, type_: object) -> object:
|
|
|
438
439
|
type_ = type_.__value__ # type: ignore[unreachable]
|
|
439
440
|
|
|
440
441
|
# unwrap `Annotated[T, ...]` -> `T`
|
|
441
|
-
if
|
|
442
|
-
meta: tuple[Any, ...] =
|
|
442
|
+
if metadata is not None:
|
|
443
|
+
meta: tuple[Any, ...] = tuple(metadata)
|
|
444
|
+
elif is_annotated_type(type_):
|
|
445
|
+
meta = get_args(type_)[1:]
|
|
443
446
|
type_ = extract_type_arg(type_, 0)
|
|
444
447
|
else:
|
|
445
448
|
meta = tuple()
|
{runloop_api_client-0.47.1 → runloop_api_client-0.48.1}/src/runloop_api_client/lib/polling.py
RENAMED
|
@@ -2,21 +2,26 @@ import time
|
|
|
2
2
|
from typing import Any, TypeVar, Callable, Optional
|
|
3
3
|
from dataclasses import dataclass
|
|
4
4
|
|
|
5
|
-
T = TypeVar(
|
|
5
|
+
T = TypeVar("T")
|
|
6
|
+
|
|
6
7
|
|
|
7
8
|
@dataclass
|
|
8
9
|
class PollingConfig:
|
|
9
10
|
"""Configuration for polling behavior"""
|
|
11
|
+
|
|
10
12
|
interval_seconds: float = 1.0
|
|
11
13
|
max_attempts: int = 120
|
|
12
14
|
timeout_seconds: Optional[float] = None
|
|
13
15
|
|
|
16
|
+
|
|
14
17
|
class PollingTimeout(Exception):
|
|
15
18
|
"""Raised when polling exceeds max attempts or timeout"""
|
|
19
|
+
|
|
16
20
|
def __init__(self, message: str, last_value: Any):
|
|
17
21
|
self.last_value = last_value
|
|
18
22
|
super().__init__(f"{message}. Last retrieved value: {last_value}")
|
|
19
23
|
|
|
24
|
+
|
|
20
25
|
def poll_until(
|
|
21
26
|
retriever: Callable[[], T],
|
|
22
27
|
is_terminal: Callable[[T], bool],
|
|
@@ -25,27 +30,27 @@ def poll_until(
|
|
|
25
30
|
) -> T:
|
|
26
31
|
"""
|
|
27
32
|
Poll until a condition is met or timeout/max attempts are reached.
|
|
28
|
-
|
|
33
|
+
|
|
29
34
|
Args:
|
|
30
35
|
retriever: Callable that returns the object to check
|
|
31
36
|
is_terminal: Callable that returns True when polling should stop
|
|
32
37
|
config: Optional polling configuration
|
|
33
38
|
on_error: Optional error handler that can return a value to continue polling
|
|
34
39
|
or re-raise the exception to stop polling
|
|
35
|
-
|
|
40
|
+
|
|
36
41
|
Returns:
|
|
37
42
|
The final state of the polled object
|
|
38
|
-
|
|
43
|
+
|
|
39
44
|
Raises:
|
|
40
45
|
PollingTimeout: When max attempts or timeout is reached
|
|
41
46
|
"""
|
|
42
47
|
if config is None:
|
|
43
48
|
config = PollingConfig()
|
|
44
|
-
|
|
49
|
+
|
|
45
50
|
attempts = 0
|
|
46
51
|
start_time = time.time()
|
|
47
52
|
last_result = None
|
|
48
|
-
|
|
53
|
+
|
|
49
54
|
while True:
|
|
50
55
|
try:
|
|
51
56
|
last_result = retriever()
|
|
@@ -54,23 +59,17 @@ def poll_until(
|
|
|
54
59
|
last_result = on_error(e)
|
|
55
60
|
else:
|
|
56
61
|
raise
|
|
57
|
-
|
|
62
|
+
|
|
58
63
|
if is_terminal(last_result):
|
|
59
64
|
return last_result
|
|
60
|
-
|
|
65
|
+
|
|
61
66
|
attempts += 1
|
|
62
67
|
if attempts >= config.max_attempts:
|
|
63
|
-
raise PollingTimeout(
|
|
64
|
-
|
|
65
|
-
last_result
|
|
66
|
-
)
|
|
67
|
-
|
|
68
|
+
raise PollingTimeout(f"Exceeded maximum attempts ({config.max_attempts})", last_result)
|
|
69
|
+
|
|
68
70
|
if config.timeout_seconds is not None:
|
|
69
71
|
elapsed = time.time() - start_time
|
|
70
72
|
if elapsed >= config.timeout_seconds:
|
|
71
|
-
raise PollingTimeout(
|
|
72
|
-
|
|
73
|
-
last_result
|
|
74
|
-
)
|
|
75
|
-
|
|
73
|
+
raise PollingTimeout(f"Exceeded timeout of {config.timeout_seconds} seconds", last_result)
|
|
74
|
+
|
|
76
75
|
time.sleep(config.interval_seconds)
|
|
@@ -88,7 +88,7 @@ from ...pagination import (
|
|
|
88
88
|
SyncDiskSnapshotsCursorIDPage,
|
|
89
89
|
AsyncDiskSnapshotsCursorIDPage,
|
|
90
90
|
)
|
|
91
|
-
from ..._exceptions import RunloopError
|
|
91
|
+
from ..._exceptions import RunloopError, APIStatusError
|
|
92
92
|
from ...lib.polling import PollingConfig, poll_until
|
|
93
93
|
from ..._base_client import AsyncPaginator, make_request_options
|
|
94
94
|
from .disk_snapshots import (
|
|
@@ -400,7 +400,7 @@ class DevboxesResource(SyncAPIResource):
|
|
|
400
400
|
|
|
401
401
|
def handle_timeout_error(error: Exception) -> DevboxView:
|
|
402
402
|
# Handle 408 timeout errors by returning current devbox state to continue polling
|
|
403
|
-
if isinstance(error,
|
|
403
|
+
if isinstance(error, APIStatusError) and error.response.status_code == 408:
|
|
404
404
|
# Return a placeholder result to continue polling
|
|
405
405
|
return DevboxView(
|
|
406
406
|
id=id,
|
|
@@ -1710,7 +1710,7 @@ class AsyncDevboxesResource(AsyncAPIResource):
|
|
|
1710
1710
|
),
|
|
1711
1711
|
cast_to=DevboxView,
|
|
1712
1712
|
)
|
|
1713
|
-
except
|
|
1713
|
+
except APIStatusError as error:
|
|
1714
1714
|
if error.response.status_code == 408:
|
|
1715
1715
|
# Handle 408 timeout errors by returning a placeholder result to continue polling
|
|
1716
1716
|
return DevboxView(
|
|
@@ -17,6 +17,7 @@ from ..._response import (
|
|
|
17
17
|
async_to_streamed_response_wrapper,
|
|
18
18
|
)
|
|
19
19
|
from ..._constants import DEFAULT_TIMEOUT
|
|
20
|
+
from ..._exceptions import APIStatusError
|
|
20
21
|
from ...lib.polling import PollingConfig, poll_until
|
|
21
22
|
from ..._base_client import make_request_options
|
|
22
23
|
from ...types.devboxes import execution_retrieve_params, execution_execute_sync_params, execution_execute_async_params
|
|
@@ -105,7 +106,7 @@ class ExecutionsResource(SyncAPIResource):
|
|
|
105
106
|
timeout: float | httpx.Timeout | None | NotGiven = NOT_GIVEN,
|
|
106
107
|
) -> DevboxAsyncExecutionDetailView:
|
|
107
108
|
"""Wait for an execution to complete.
|
|
108
|
-
|
|
109
|
+
|
|
109
110
|
Args:
|
|
110
111
|
execution_id: The ID of the execution to wait for
|
|
111
112
|
id: The ID of the devbox
|
|
@@ -121,20 +122,37 @@ class ExecutionsResource(SyncAPIResource):
|
|
|
121
122
|
Raises:
|
|
122
123
|
PollingTimeout: If polling times out before execution completes
|
|
123
124
|
"""
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
125
|
+
|
|
126
|
+
def wait_for_execution_status() -> DevboxAsyncExecutionDetailView:
|
|
127
|
+
# This wait_for_status endpoint polls the execution status for 60 seconds until it reaches either completed.
|
|
128
|
+
return self._post(
|
|
129
|
+
f"/v1/devboxes/{devbox_id}/executions/{execution_id}/wait_for_status",
|
|
130
|
+
body={"statuses": ["completed"]},
|
|
131
|
+
options=make_request_options(
|
|
132
|
+
extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
|
|
133
|
+
),
|
|
134
|
+
cast_to=DevboxAsyncExecutionDetailView,
|
|
132
135
|
)
|
|
133
136
|
|
|
137
|
+
def handle_timeout_error(error: Exception) -> DevboxAsyncExecutionDetailView:
|
|
138
|
+
# Handle 408 timeout errors by returning current execution state to continue polling
|
|
139
|
+
if isinstance(error, APIStatusError) and error.response.status_code == 408:
|
|
140
|
+
# Return a placeholder result to continue polling
|
|
141
|
+
return DevboxAsyncExecutionDetailView(
|
|
142
|
+
devbox_id=devbox_id,
|
|
143
|
+
execution_id=execution_id,
|
|
144
|
+
status="queued",
|
|
145
|
+
stdout="",
|
|
146
|
+
stderr="",
|
|
147
|
+
)
|
|
148
|
+
else:
|
|
149
|
+
# Re-raise other errors to stop polling
|
|
150
|
+
raise error
|
|
151
|
+
|
|
134
152
|
def is_done(execution: DevboxAsyncExecutionDetailView) -> bool:
|
|
135
|
-
return execution.status ==
|
|
153
|
+
return execution.status == "completed"
|
|
136
154
|
|
|
137
|
-
return poll_until(
|
|
155
|
+
return poll_until(wait_for_execution_status, is_done, config, handle_timeout_error)
|
|
138
156
|
|
|
139
157
|
def execute_async(
|
|
140
158
|
self,
|
|
@@ -369,7 +387,7 @@ class AsyncExecutionsResource(AsyncAPIResource):
|
|
|
369
387
|
|
|
370
388
|
async def await_completed(
|
|
371
389
|
self,
|
|
372
|
-
execution_id: str,
|
|
390
|
+
execution_id: str,
|
|
373
391
|
*,
|
|
374
392
|
devbox_id: str,
|
|
375
393
|
polling_config: PollingConfig | None = None,
|
|
@@ -381,7 +399,7 @@ class AsyncExecutionsResource(AsyncAPIResource):
|
|
|
381
399
|
timeout: float | httpx.Timeout | None | NotGiven = NOT_GIVEN,
|
|
382
400
|
) -> DevboxAsyncExecutionDetailView:
|
|
383
401
|
"""Wait for an execution to complete.
|
|
384
|
-
|
|
402
|
+
|
|
385
403
|
Args:
|
|
386
404
|
execution_id: The ID of the execution to wait for
|
|
387
405
|
id: The ID of the devbox
|
|
@@ -397,20 +415,35 @@ class AsyncExecutionsResource(AsyncAPIResource):
|
|
|
397
415
|
Raises:
|
|
398
416
|
PollingTimeout: If polling times out before execution completes
|
|
399
417
|
"""
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
|
|
404
|
-
|
|
405
|
-
|
|
406
|
-
|
|
407
|
-
|
|
408
|
-
|
|
418
|
+
|
|
419
|
+
async def wait_for_execution_status() -> DevboxAsyncExecutionDetailView:
|
|
420
|
+
try:
|
|
421
|
+
return await self._post(
|
|
422
|
+
f"/v1/devboxes/{devbox_id}/executions/{execution_id}/wait_for_status",
|
|
423
|
+
body={"statuses": ["completed"]},
|
|
424
|
+
options=make_request_options(
|
|
425
|
+
extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
|
|
426
|
+
),
|
|
427
|
+
cast_to=DevboxAsyncExecutionDetailView,
|
|
428
|
+
)
|
|
429
|
+
except APIStatusError as error:
|
|
430
|
+
if error.response.status_code == 408:
|
|
431
|
+
# Handle 408 timeout errors by returning current execution state to continue polling
|
|
432
|
+
return DevboxAsyncExecutionDetailView(
|
|
433
|
+
devbox_id=devbox_id,
|
|
434
|
+
execution_id=execution_id,
|
|
435
|
+
status="queued",
|
|
436
|
+
stdout="",
|
|
437
|
+
stderr="",
|
|
438
|
+
)
|
|
439
|
+
else:
|
|
440
|
+
# Re-raise other errors to stop polling
|
|
441
|
+
raise
|
|
409
442
|
|
|
410
443
|
def is_done(execution: DevboxAsyncExecutionDetailView) -> bool:
|
|
411
|
-
return execution.status ==
|
|
444
|
+
return execution.status == "completed"
|
|
412
445
|
|
|
413
|
-
return await async_poll_until(
|
|
446
|
+
return await async_poll_until(wait_for_execution_status, is_done, polling_config)
|
|
414
447
|
|
|
415
448
|
async def execute_async(
|
|
416
449
|
self,
|