runloop-api-client 0.48.0__tar.gz → 0.48.2__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.2/.release-please-manifest.json +3 -0
- {runloop_api_client-0.48.0 → runloop_api_client-0.48.2}/CHANGELOG.md +22 -0
- {runloop_api_client-0.48.0 → runloop_api_client-0.48.2}/PKG-INFO +8 -5
- {runloop_api_client-0.48.0 → runloop_api_client-0.48.2}/README.md +6 -4
- {runloop_api_client-0.48.0 → runloop_api_client-0.48.2}/pyproject.toml +5 -1
- {runloop_api_client-0.48.0 → runloop_api_client-0.48.2}/requirements-dev.lock +2 -2
- {runloop_api_client-0.48.0 → runloop_api_client-0.48.2}/requirements.lock +2 -2
- {runloop_api_client-0.48.0 → runloop_api_client-0.48.2}/src/runloop_api_client/_models.py +8 -5
- {runloop_api_client-0.48.0 → runloop_api_client-0.48.2}/src/runloop_api_client/_version.py +1 -1
- {runloop_api_client-0.48.0 → runloop_api_client-0.48.2}/src/runloop_api_client/lib/polling.py +17 -18
- {runloop_api_client-0.48.0 → runloop_api_client-0.48.2}/src/runloop_api_client/resources/devboxes/devboxes.py +31 -56
- {runloop_api_client-0.48.0 → runloop_api_client-0.48.2}/src/runloop_api_client/resources/devboxes/executions.py +54 -37
- {runloop_api_client-0.48.0 → runloop_api_client-0.48.2}/src/runloop_api_client/resources/scenarios/scenarios.py +0 -4
- {runloop_api_client-0.48.0 → runloop_api_client-0.48.2}/tests/api_resources/devboxes/test_executions.py +339 -0
- {runloop_api_client-0.48.0 → runloop_api_client-0.48.2}/tests/api_resources/devboxes/test_lsp.py +8 -0
- {runloop_api_client-0.48.0 → runloop_api_client-0.48.2}/tests/api_resources/test_devboxes.py +281 -0
- {runloop_api_client-0.48.0 → runloop_api_client-0.48.2}/tests/conftest.py +29 -0
- {runloop_api_client-0.48.0 → runloop_api_client-0.48.2}/tests/test_models.py +45 -0
- runloop_api_client-0.48.2/tests/test_polling.py +262 -0
- runloop_api_client-0.48.2/uv.lock +1500 -0
- runloop_api_client-0.48.0/.release-please-manifest.json +0 -3
- runloop_api_client-0.48.0/uv.lock +0 -295
- {runloop_api_client-0.48.0 → runloop_api_client-0.48.2}/.gitignore +0 -0
- {runloop_api_client-0.48.0 → runloop_api_client-0.48.2}/CONTRIBUTING.md +0 -0
- {runloop_api_client-0.48.0 → runloop_api_client-0.48.2}/LICENSE +0 -0
- {runloop_api_client-0.48.0 → runloop_api_client-0.48.2}/SECURITY.md +0 -0
- {runloop_api_client-0.48.0 → runloop_api_client-0.48.2}/api.md +0 -0
- {runloop_api_client-0.48.0 → runloop_api_client-0.48.2}/bin/check-release-environment +0 -0
- {runloop_api_client-0.48.0 → runloop_api_client-0.48.2}/bin/publish-pypi +0 -0
- {runloop_api_client-0.48.0 → runloop_api_client-0.48.2}/examples/.keep +0 -0
- {runloop_api_client-0.48.0 → runloop_api_client-0.48.2}/mypy.ini +0 -0
- {runloop_api_client-0.48.0 → runloop_api_client-0.48.2}/noxfile.py +0 -0
- {runloop_api_client-0.48.0 → runloop_api_client-0.48.2}/release-please-config.json +0 -0
- {runloop_api_client-0.48.0 → runloop_api_client-0.48.2}/src/runloop/lib/.keep +0 -0
- {runloop_api_client-0.48.0 → runloop_api_client-0.48.2}/src/runloop_api_client/__init__.py +0 -0
- {runloop_api_client-0.48.0 → runloop_api_client-0.48.2}/src/runloop_api_client/_base_client.py +0 -0
- {runloop_api_client-0.48.0 → runloop_api_client-0.48.2}/src/runloop_api_client/_client.py +0 -0
- {runloop_api_client-0.48.0 → runloop_api_client-0.48.2}/src/runloop_api_client/_compat.py +0 -0
- {runloop_api_client-0.48.0 → runloop_api_client-0.48.2}/src/runloop_api_client/_constants.py +0 -0
- {runloop_api_client-0.48.0 → runloop_api_client-0.48.2}/src/runloop_api_client/_exceptions.py +0 -0
- {runloop_api_client-0.48.0 → runloop_api_client-0.48.2}/src/runloop_api_client/_files.py +0 -0
- {runloop_api_client-0.48.0 → runloop_api_client-0.48.2}/src/runloop_api_client/_qs.py +0 -0
- {runloop_api_client-0.48.0 → runloop_api_client-0.48.2}/src/runloop_api_client/_resource.py +0 -0
- {runloop_api_client-0.48.0 → runloop_api_client-0.48.2}/src/runloop_api_client/_response.py +0 -0
- {runloop_api_client-0.48.0 → runloop_api_client-0.48.2}/src/runloop_api_client/_streaming.py +0 -0
- {runloop_api_client-0.48.0 → runloop_api_client-0.48.2}/src/runloop_api_client/_types.py +0 -0
- {runloop_api_client-0.48.0 → runloop_api_client-0.48.2}/src/runloop_api_client/_utils/__init__.py +0 -0
- {runloop_api_client-0.48.0 → runloop_api_client-0.48.2}/src/runloop_api_client/_utils/_logs.py +0 -0
- {runloop_api_client-0.48.0 → runloop_api_client-0.48.2}/src/runloop_api_client/_utils/_proxy.py +0 -0
- {runloop_api_client-0.48.0 → runloop_api_client-0.48.2}/src/runloop_api_client/_utils/_reflection.py +0 -0
- {runloop_api_client-0.48.0 → runloop_api_client-0.48.2}/src/runloop_api_client/_utils/_resources_proxy.py +0 -0
- {runloop_api_client-0.48.0 → runloop_api_client-0.48.2}/src/runloop_api_client/_utils/_streams.py +0 -0
- {runloop_api_client-0.48.0 → runloop_api_client-0.48.2}/src/runloop_api_client/_utils/_sync.py +0 -0
- {runloop_api_client-0.48.0 → runloop_api_client-0.48.2}/src/runloop_api_client/_utils/_transform.py +0 -0
- {runloop_api_client-0.48.0 → runloop_api_client-0.48.2}/src/runloop_api_client/_utils/_typing.py +0 -0
- {runloop_api_client-0.48.0 → runloop_api_client-0.48.2}/src/runloop_api_client/_utils/_utils.py +0 -0
- {runloop_api_client-0.48.0 → runloop_api_client-0.48.2}/src/runloop_api_client/lib/.keep +0 -0
- {runloop_api_client-0.48.0 → runloop_api_client-0.48.2}/src/runloop_api_client/lib/polling_async.py +0 -0
- {runloop_api_client-0.48.0 → runloop_api_client-0.48.2}/src/runloop_api_client/pagination.py +0 -0
- {runloop_api_client-0.48.0 → runloop_api_client-0.48.2}/src/runloop_api_client/py.typed +0 -0
- {runloop_api_client-0.48.0 → runloop_api_client-0.48.2}/src/runloop_api_client/resources/__init__.py +0 -0
- {runloop_api_client-0.48.0 → runloop_api_client-0.48.2}/src/runloop_api_client/resources/benchmarks/__init__.py +0 -0
- {runloop_api_client-0.48.0 → runloop_api_client-0.48.2}/src/runloop_api_client/resources/benchmarks/benchmarks.py +0 -0
- {runloop_api_client-0.48.0 → runloop_api_client-0.48.2}/src/runloop_api_client/resources/benchmarks/runs.py +0 -0
- {runloop_api_client-0.48.0 → runloop_api_client-0.48.2}/src/runloop_api_client/resources/blueprints.py +0 -0
- {runloop_api_client-0.48.0 → runloop_api_client-0.48.2}/src/runloop_api_client/resources/devboxes/__init__.py +0 -0
- {runloop_api_client-0.48.0 → runloop_api_client-0.48.2}/src/runloop_api_client/resources/devboxes/browsers.py +0 -0
- {runloop_api_client-0.48.0 → runloop_api_client-0.48.2}/src/runloop_api_client/resources/devboxes/computers.py +0 -0
- {runloop_api_client-0.48.0 → runloop_api_client-0.48.2}/src/runloop_api_client/resources/devboxes/disk_snapshots.py +0 -0
- {runloop_api_client-0.48.0 → runloop_api_client-0.48.2}/src/runloop_api_client/resources/devboxes/logs.py +0 -0
- {runloop_api_client-0.48.0 → runloop_api_client-0.48.2}/src/runloop_api_client/resources/devboxes/lsp.py +0 -0
- {runloop_api_client-0.48.0 → runloop_api_client-0.48.2}/src/runloop_api_client/resources/repositories.py +0 -0
- {runloop_api_client-0.48.0 → runloop_api_client-0.48.2}/src/runloop_api_client/resources/scenarios/__init__.py +0 -0
- {runloop_api_client-0.48.0 → runloop_api_client-0.48.2}/src/runloop_api_client/resources/scenarios/runs.py +0 -0
- {runloop_api_client-0.48.0 → runloop_api_client-0.48.2}/src/runloop_api_client/resources/scenarios/scorers.py +0 -0
- {runloop_api_client-0.48.0 → runloop_api_client-0.48.2}/src/runloop_api_client/resources/secrets.py +0 -0
- {runloop_api_client-0.48.0 → runloop_api_client-0.48.2}/src/runloop_api_client/types/__init__.py +0 -0
- {runloop_api_client-0.48.0 → runloop_api_client-0.48.2}/src/runloop_api_client/types/benchmark_create_params.py +0 -0
- {runloop_api_client-0.48.0 → runloop_api_client-0.48.2}/src/runloop_api_client/types/benchmark_definitions_params.py +0 -0
- {runloop_api_client-0.48.0 → runloop_api_client-0.48.2}/src/runloop_api_client/types/benchmark_list_params.py +0 -0
- {runloop_api_client-0.48.0 → runloop_api_client-0.48.2}/src/runloop_api_client/types/benchmark_list_public_params.py +0 -0
- {runloop_api_client-0.48.0 → runloop_api_client-0.48.2}/src/runloop_api_client/types/benchmark_run_list_view.py +0 -0
- {runloop_api_client-0.48.0 → runloop_api_client-0.48.2}/src/runloop_api_client/types/benchmark_run_view.py +0 -0
- {runloop_api_client-0.48.0 → runloop_api_client-0.48.2}/src/runloop_api_client/types/benchmark_start_run_params.py +0 -0
- {runloop_api_client-0.48.0 → runloop_api_client-0.48.2}/src/runloop_api_client/types/benchmark_update_params.py +0 -0
- {runloop_api_client-0.48.0 → runloop_api_client-0.48.2}/src/runloop_api_client/types/benchmark_view.py +0 -0
- {runloop_api_client-0.48.0 → runloop_api_client-0.48.2}/src/runloop_api_client/types/benchmarks/__init__.py +0 -0
- {runloop_api_client-0.48.0 → runloop_api_client-0.48.2}/src/runloop_api_client/types/benchmarks/run_list_params.py +0 -0
- {runloop_api_client-0.48.0 → runloop_api_client-0.48.2}/src/runloop_api_client/types/benchmarks/run_list_scenario_runs_params.py +0 -0
- {runloop_api_client-0.48.0 → runloop_api_client-0.48.2}/src/runloop_api_client/types/blueprint_build_log.py +0 -0
- {runloop_api_client-0.48.0 → runloop_api_client-0.48.2}/src/runloop_api_client/types/blueprint_build_logs_list_view.py +0 -0
- {runloop_api_client-0.48.0 → runloop_api_client-0.48.2}/src/runloop_api_client/types/blueprint_build_parameters.py +0 -0
- {runloop_api_client-0.48.0 → runloop_api_client-0.48.2}/src/runloop_api_client/types/blueprint_create_params.py +0 -0
- {runloop_api_client-0.48.0 → runloop_api_client-0.48.2}/src/runloop_api_client/types/blueprint_list_params.py +0 -0
- {runloop_api_client-0.48.0 → runloop_api_client-0.48.2}/src/runloop_api_client/types/blueprint_list_view.py +0 -0
- {runloop_api_client-0.48.0 → runloop_api_client-0.48.2}/src/runloop_api_client/types/blueprint_preview_params.py +0 -0
- {runloop_api_client-0.48.0 → runloop_api_client-0.48.2}/src/runloop_api_client/types/blueprint_preview_view.py +0 -0
- {runloop_api_client-0.48.0 → runloop_api_client-0.48.2}/src/runloop_api_client/types/blueprint_view.py +0 -0
- {runloop_api_client-0.48.0 → runloop_api_client-0.48.2}/src/runloop_api_client/types/devbox_async_execution_detail_view.py +0 -0
- {runloop_api_client-0.48.0 → runloop_api_client-0.48.2}/src/runloop_api_client/types/devbox_create_params.py +0 -0
- {runloop_api_client-0.48.0 → runloop_api_client-0.48.2}/src/runloop_api_client/types/devbox_create_ssh_key_response.py +0 -0
- {runloop_api_client-0.48.0 → runloop_api_client-0.48.2}/src/runloop_api_client/types/devbox_create_tunnel_params.py +0 -0
- {runloop_api_client-0.48.0 → runloop_api_client-0.48.2}/src/runloop_api_client/types/devbox_download_file_params.py +0 -0
- {runloop_api_client-0.48.0 → runloop_api_client-0.48.2}/src/runloop_api_client/types/devbox_execute_async_params.py +0 -0
- {runloop_api_client-0.48.0 → runloop_api_client-0.48.2}/src/runloop_api_client/types/devbox_execute_sync_params.py +0 -0
- {runloop_api_client-0.48.0 → runloop_api_client-0.48.2}/src/runloop_api_client/types/devbox_execution_detail_view.py +0 -0
- {runloop_api_client-0.48.0 → runloop_api_client-0.48.2}/src/runloop_api_client/types/devbox_list_disk_snapshots_params.py +0 -0
- {runloop_api_client-0.48.0 → runloop_api_client-0.48.2}/src/runloop_api_client/types/devbox_list_params.py +0 -0
- {runloop_api_client-0.48.0 → runloop_api_client-0.48.2}/src/runloop_api_client/types/devbox_list_view.py +0 -0
- {runloop_api_client-0.48.0 → runloop_api_client-0.48.2}/src/runloop_api_client/types/devbox_read_file_contents_params.py +0 -0
- {runloop_api_client-0.48.0 → runloop_api_client-0.48.2}/src/runloop_api_client/types/devbox_read_file_contents_response.py +0 -0
- {runloop_api_client-0.48.0 → runloop_api_client-0.48.2}/src/runloop_api_client/types/devbox_remove_tunnel_params.py +0 -0
- {runloop_api_client-0.48.0 → runloop_api_client-0.48.2}/src/runloop_api_client/types/devbox_snapshot_disk_async_params.py +0 -0
- {runloop_api_client-0.48.0 → runloop_api_client-0.48.2}/src/runloop_api_client/types/devbox_snapshot_disk_params.py +0 -0
- {runloop_api_client-0.48.0 → runloop_api_client-0.48.2}/src/runloop_api_client/types/devbox_snapshot_list_view.py +0 -0
- {runloop_api_client-0.48.0 → runloop_api_client-0.48.2}/src/runloop_api_client/types/devbox_snapshot_view.py +0 -0
- {runloop_api_client-0.48.0 → runloop_api_client-0.48.2}/src/runloop_api_client/types/devbox_tunnel_view.py +0 -0
- {runloop_api_client-0.48.0 → runloop_api_client-0.48.2}/src/runloop_api_client/types/devbox_update_params.py +0 -0
- {runloop_api_client-0.48.0 → runloop_api_client-0.48.2}/src/runloop_api_client/types/devbox_upload_file_params.py +0 -0
- {runloop_api_client-0.48.0 → runloop_api_client-0.48.2}/src/runloop_api_client/types/devbox_view.py +0 -0
- {runloop_api_client-0.48.0 → runloop_api_client-0.48.2}/src/runloop_api_client/types/devbox_write_file_contents_params.py +0 -0
- {runloop_api_client-0.48.0 → runloop_api_client-0.48.2}/src/runloop_api_client/types/devboxes/__init__.py +0 -0
- {runloop_api_client-0.48.0 → runloop_api_client-0.48.2}/src/runloop_api_client/types/devboxes/base_code_action.py +0 -0
- {runloop_api_client-0.48.0 → runloop_api_client-0.48.2}/src/runloop_api_client/types/devboxes/base_command.py +0 -0
- {runloop_api_client-0.48.0 → runloop_api_client-0.48.2}/src/runloop_api_client/types/devboxes/base_command_param.py +0 -0
- {runloop_api_client-0.48.0 → runloop_api_client-0.48.2}/src/runloop_api_client/types/devboxes/base_diagnostic.py +0 -0
- {runloop_api_client-0.48.0 → runloop_api_client-0.48.2}/src/runloop_api_client/types/devboxes/base_diagnostic_param.py +0 -0
- {runloop_api_client-0.48.0 → runloop_api_client-0.48.2}/src/runloop_api_client/types/devboxes/base_location.py +0 -0
- {runloop_api_client-0.48.0 → runloop_api_client-0.48.2}/src/runloop_api_client/types/devboxes/base_markup_content.py +0 -0
- {runloop_api_client-0.48.0 → runloop_api_client-0.48.2}/src/runloop_api_client/types/devboxes/base_parameter_information.py +0 -0
- {runloop_api_client-0.48.0 → runloop_api_client-0.48.2}/src/runloop_api_client/types/devboxes/base_range.py +0 -0
- {runloop_api_client-0.48.0 → runloop_api_client-0.48.2}/src/runloop_api_client/types/devboxes/base_range_param.py +0 -0
- {runloop_api_client-0.48.0 → runloop_api_client-0.48.2}/src/runloop_api_client/types/devboxes/base_signature.py +0 -0
- {runloop_api_client-0.48.0 → runloop_api_client-0.48.2}/src/runloop_api_client/types/devboxes/base_workspace_edit.py +0 -0
- {runloop_api_client-0.48.0 → runloop_api_client-0.48.2}/src/runloop_api_client/types/devboxes/base_workspace_edit_param.py +0 -0
- {runloop_api_client-0.48.0 → runloop_api_client-0.48.2}/src/runloop_api_client/types/devboxes/browser_create_params.py +0 -0
- {runloop_api_client-0.48.0 → runloop_api_client-0.48.2}/src/runloop_api_client/types/devboxes/browser_view.py +0 -0
- {runloop_api_client-0.48.0 → runloop_api_client-0.48.2}/src/runloop_api_client/types/devboxes/code_action_application_result.py +0 -0
- {runloop_api_client-0.48.0 → runloop_api_client-0.48.2}/src/runloop_api_client/types/devboxes/code_action_context_param.py +0 -0
- {runloop_api_client-0.48.0 → runloop_api_client-0.48.2}/src/runloop_api_client/types/devboxes/code_action_kind.py +0 -0
- {runloop_api_client-0.48.0 → runloop_api_client-0.48.2}/src/runloop_api_client/types/devboxes/code_action_trigger_kind.py +0 -0
- {runloop_api_client-0.48.0 → runloop_api_client-0.48.2}/src/runloop_api_client/types/devboxes/code_actions_response.py +0 -0
- {runloop_api_client-0.48.0 → runloop_api_client-0.48.2}/src/runloop_api_client/types/devboxes/code_description_param.py +0 -0
- {runloop_api_client-0.48.0 → runloop_api_client-0.48.2}/src/runloop_api_client/types/devboxes/code_segment_info_response.py +0 -0
- {runloop_api_client-0.48.0 → runloop_api_client-0.48.2}/src/runloop_api_client/types/devboxes/computer_create_params.py +0 -0
- {runloop_api_client-0.48.0 → runloop_api_client-0.48.2}/src/runloop_api_client/types/devboxes/computer_keyboard_interaction_params.py +0 -0
- {runloop_api_client-0.48.0 → runloop_api_client-0.48.2}/src/runloop_api_client/types/devboxes/computer_keyboard_interaction_response.py +0 -0
- {runloop_api_client-0.48.0 → runloop_api_client-0.48.2}/src/runloop_api_client/types/devboxes/computer_mouse_interaction_params.py +0 -0
- {runloop_api_client-0.48.0 → runloop_api_client-0.48.2}/src/runloop_api_client/types/devboxes/computer_mouse_interaction_response.py +0 -0
- {runloop_api_client-0.48.0 → runloop_api_client-0.48.2}/src/runloop_api_client/types/devboxes/computer_screen_interaction_params.py +0 -0
- {runloop_api_client-0.48.0 → runloop_api_client-0.48.2}/src/runloop_api_client/types/devboxes/computer_screen_interaction_response.py +0 -0
- {runloop_api_client-0.48.0 → runloop_api_client-0.48.2}/src/runloop_api_client/types/devboxes/computer_view.py +0 -0
- {runloop_api_client-0.48.0 → runloop_api_client-0.48.2}/src/runloop_api_client/types/devboxes/devbox_logs_list_view.py +0 -0
- {runloop_api_client-0.48.0 → runloop_api_client-0.48.2}/src/runloop_api_client/types/devboxes/devbox_snapshot_async_status_view.py +0 -0
- {runloop_api_client-0.48.0 → runloop_api_client-0.48.2}/src/runloop_api_client/types/devboxes/diagnostic_param.py +0 -0
- {runloop_api_client-0.48.0 → runloop_api_client-0.48.2}/src/runloop_api_client/types/devboxes/diagnostic_related_information_param.py +0 -0
- {runloop_api_client-0.48.0 → runloop_api_client-0.48.2}/src/runloop_api_client/types/devboxes/diagnostic_severity.py +0 -0
- {runloop_api_client-0.48.0 → runloop_api_client-0.48.2}/src/runloop_api_client/types/devboxes/diagnostic_tag.py +0 -0
- {runloop_api_client-0.48.0 → runloop_api_client-0.48.2}/src/runloop_api_client/types/devboxes/diagnostics_response.py +0 -0
- {runloop_api_client-0.48.0 → runloop_api_client-0.48.2}/src/runloop_api_client/types/devboxes/disk_snapshot_list_params.py +0 -0
- {runloop_api_client-0.48.0 → runloop_api_client-0.48.2}/src/runloop_api_client/types/devboxes/disk_snapshot_update_params.py +0 -0
- {runloop_api_client-0.48.0 → runloop_api_client-0.48.2}/src/runloop_api_client/types/devboxes/document_symbol.py +0 -0
- {runloop_api_client-0.48.0 → runloop_api_client-0.48.2}/src/runloop_api_client/types/devboxes/document_symbol_response.py +0 -0
- {runloop_api_client-0.48.0 → runloop_api_client-0.48.2}/src/runloop_api_client/types/devboxes/document_uri.py +0 -0
- {runloop_api_client-0.48.0 → runloop_api_client-0.48.2}/src/runloop_api_client/types/devboxes/execution_execute_async_params.py +0 -0
- {runloop_api_client-0.48.0 → runloop_api_client-0.48.2}/src/runloop_api_client/types/devboxes/execution_execute_sync_params.py +0 -0
- {runloop_api_client-0.48.0 → runloop_api_client-0.48.2}/src/runloop_api_client/types/devboxes/execution_retrieve_params.py +0 -0
- {runloop_api_client-0.48.0 → runloop_api_client-0.48.2}/src/runloop_api_client/types/devboxes/file_contents_response.py +0 -0
- {runloop_api_client-0.48.0 → runloop_api_client-0.48.2}/src/runloop_api_client/types/devboxes/file_definition_response.py +0 -0
- {runloop_api_client-0.48.0 → runloop_api_client-0.48.2}/src/runloop_api_client/types/devboxes/file_path.py +0 -0
- {runloop_api_client-0.48.0 → runloop_api_client-0.48.2}/src/runloop_api_client/types/devboxes/file_uri.py +0 -0
- {runloop_api_client-0.48.0 → runloop_api_client-0.48.2}/src/runloop_api_client/types/devboxes/formatting_response.py +0 -0
- {runloop_api_client-0.48.0 → runloop_api_client-0.48.2}/src/runloop_api_client/types/devboxes/health_status_response.py +0 -0
- {runloop_api_client-0.48.0 → runloop_api_client-0.48.2}/src/runloop_api_client/types/devboxes/integer.py +0 -0
- {runloop_api_client-0.48.0 → runloop_api_client-0.48.2}/src/runloop_api_client/types/devboxes/l_sp_any_param.py +0 -0
- {runloop_api_client-0.48.0 → runloop_api_client-0.48.2}/src/runloop_api_client/types/devboxes/location_param.py +0 -0
- {runloop_api_client-0.48.0 → runloop_api_client-0.48.2}/src/runloop_api_client/types/devboxes/log_list_params.py +0 -0
- {runloop_api_client-0.48.0 → runloop_api_client-0.48.2}/src/runloop_api_client/types/devboxes/lsp_apply_code_action_params.py +0 -0
- {runloop_api_client-0.48.0 → runloop_api_client-0.48.2}/src/runloop_api_client/types/devboxes/lsp_code_actions_params.py +0 -0
- {runloop_api_client-0.48.0 → runloop_api_client-0.48.2}/src/runloop_api_client/types/devboxes/lsp_diagnostics_params.py +0 -0
- {runloop_api_client-0.48.0 → runloop_api_client-0.48.2}/src/runloop_api_client/types/devboxes/lsp_document_symbols_params.py +0 -0
- {runloop_api_client-0.48.0 → runloop_api_client-0.48.2}/src/runloop_api_client/types/devboxes/lsp_file_definition_params.py +0 -0
- {runloop_api_client-0.48.0 → runloop_api_client-0.48.2}/src/runloop_api_client/types/devboxes/lsp_file_params.py +0 -0
- {runloop_api_client-0.48.0 → runloop_api_client-0.48.2}/src/runloop_api_client/types/devboxes/lsp_files_response.py +0 -0
- {runloop_api_client-0.48.0 → runloop_api_client-0.48.2}/src/runloop_api_client/types/devboxes/lsp_formatting_params.py +0 -0
- {runloop_api_client-0.48.0 → runloop_api_client-0.48.2}/src/runloop_api_client/types/devboxes/lsp_get_code_actions_for_diagnostic_params.py +0 -0
- {runloop_api_client-0.48.0 → runloop_api_client-0.48.2}/src/runloop_api_client/types/devboxes/lsp_get_code_actions_for_diagnostic_response.py +0 -0
- {runloop_api_client-0.48.0 → runloop_api_client-0.48.2}/src/runloop_api_client/types/devboxes/lsp_get_code_segment_info_params.py +0 -0
- {runloop_api_client-0.48.0 → runloop_api_client-0.48.2}/src/runloop_api_client/types/devboxes/lsp_get_signature_help_params.py +0 -0
- {runloop_api_client-0.48.0 → runloop_api_client-0.48.2}/src/runloop_api_client/types/devboxes/lsp_references_params.py +0 -0
- {runloop_api_client-0.48.0 → runloop_api_client-0.48.2}/src/runloop_api_client/types/devboxes/lsp_set_watch_directory_params.py +0 -0
- {runloop_api_client-0.48.0 → runloop_api_client-0.48.2}/src/runloop_api_client/types/devboxes/lsp_set_watch_directory_response.py +0 -0
- {runloop_api_client-0.48.0 → runloop_api_client-0.48.2}/src/runloop_api_client/types/devboxes/position.py +0 -0
- {runloop_api_client-0.48.0 → runloop_api_client-0.48.2}/src/runloop_api_client/types/devboxes/position_param.py +0 -0
- {runloop_api_client-0.48.0 → runloop_api_client-0.48.2}/src/runloop_api_client/types/devboxes/range.py +0 -0
- {runloop_api_client-0.48.0 → runloop_api_client-0.48.2}/src/runloop_api_client/types/devboxes/range_param.py +0 -0
- {runloop_api_client-0.48.0 → runloop_api_client-0.48.2}/src/runloop_api_client/types/devboxes/record_string_text_edit_array.py +0 -0
- {runloop_api_client-0.48.0 → runloop_api_client-0.48.2}/src/runloop_api_client/types/devboxes/record_string_text_edit_array_param.py +0 -0
- {runloop_api_client-0.48.0 → runloop_api_client-0.48.2}/src/runloop_api_client/types/devboxes/references_response.py +0 -0
- {runloop_api_client-0.48.0 → runloop_api_client-0.48.2}/src/runloop_api_client/types/devboxes/signature_help_response.py +0 -0
- {runloop_api_client-0.48.0 → runloop_api_client-0.48.2}/src/runloop_api_client/types/devboxes/symbol_kind.py +0 -0
- {runloop_api_client-0.48.0 → runloop_api_client-0.48.2}/src/runloop_api_client/types/devboxes/symbol_tag.py +0 -0
- {runloop_api_client-0.48.0 → runloop_api_client-0.48.2}/src/runloop_api_client/types/devboxes/symbol_type.py +0 -0
- {runloop_api_client-0.48.0 → runloop_api_client-0.48.2}/src/runloop_api_client/types/devboxes/text_edit.py +0 -0
- {runloop_api_client-0.48.0 → runloop_api_client-0.48.2}/src/runloop_api_client/types/devboxes/text_edit_param.py +0 -0
- {runloop_api_client-0.48.0 → runloop_api_client-0.48.2}/src/runloop_api_client/types/devboxes/u_ri.py +0 -0
- {runloop_api_client-0.48.0 → runloop_api_client-0.48.2}/src/runloop_api_client/types/devboxes/uinteger.py +0 -0
- {runloop_api_client-0.48.0 → runloop_api_client-0.48.2}/src/runloop_api_client/types/devboxes/watched_file_response.py +0 -0
- {runloop_api_client-0.48.0 → runloop_api_client-0.48.2}/src/runloop_api_client/types/input_context.py +0 -0
- {runloop_api_client-0.48.0 → runloop_api_client-0.48.2}/src/runloop_api_client/types/input_context_param.py +0 -0
- {runloop_api_client-0.48.0 → runloop_api_client-0.48.2}/src/runloop_api_client/types/input_context_update_param.py +0 -0
- {runloop_api_client-0.48.0 → runloop_api_client-0.48.2}/src/runloop_api_client/types/repository_connection_list_view.py +0 -0
- {runloop_api_client-0.48.0 → runloop_api_client-0.48.2}/src/runloop_api_client/types/repository_connection_view.py +0 -0
- {runloop_api_client-0.48.0 → runloop_api_client-0.48.2}/src/runloop_api_client/types/repository_create_params.py +0 -0
- {runloop_api_client-0.48.0 → runloop_api_client-0.48.2}/src/runloop_api_client/types/repository_inspection_details.py +0 -0
- {runloop_api_client-0.48.0 → runloop_api_client-0.48.2}/src/runloop_api_client/types/repository_inspection_list_view.py +0 -0
- {runloop_api_client-0.48.0 → runloop_api_client-0.48.2}/src/runloop_api_client/types/repository_list_params.py +0 -0
- {runloop_api_client-0.48.0 → runloop_api_client-0.48.2}/src/runloop_api_client/types/repository_manifest_view.py +0 -0
- {runloop_api_client-0.48.0 → runloop_api_client-0.48.2}/src/runloop_api_client/types/repository_refresh_params.py +0 -0
- {runloop_api_client-0.48.0 → runloop_api_client-0.48.2}/src/runloop_api_client/types/scenario_create_params.py +0 -0
- {runloop_api_client-0.48.0 → runloop_api_client-0.48.2}/src/runloop_api_client/types/scenario_definition_list_view.py +0 -0
- {runloop_api_client-0.48.0 → runloop_api_client-0.48.2}/src/runloop_api_client/types/scenario_environment.py +0 -0
- {runloop_api_client-0.48.0 → runloop_api_client-0.48.2}/src/runloop_api_client/types/scenario_environment_param.py +0 -0
- {runloop_api_client-0.48.0 → runloop_api_client-0.48.2}/src/runloop_api_client/types/scenario_list_params.py +0 -0
- {runloop_api_client-0.48.0 → runloop_api_client-0.48.2}/src/runloop_api_client/types/scenario_list_public_params.py +0 -0
- {runloop_api_client-0.48.0 → runloop_api_client-0.48.2}/src/runloop_api_client/types/scenario_run_list_view.py +0 -0
- {runloop_api_client-0.48.0 → runloop_api_client-0.48.2}/src/runloop_api_client/types/scenario_run_view.py +0 -0
- {runloop_api_client-0.48.0 → runloop_api_client-0.48.2}/src/runloop_api_client/types/scenario_start_run_params.py +0 -0
- {runloop_api_client-0.48.0 → runloop_api_client-0.48.2}/src/runloop_api_client/types/scenario_update_params.py +0 -0
- {runloop_api_client-0.48.0 → runloop_api_client-0.48.2}/src/runloop_api_client/types/scenario_view.py +0 -0
- {runloop_api_client-0.48.0 → runloop_api_client-0.48.2}/src/runloop_api_client/types/scenarios/__init__.py +0 -0
- {runloop_api_client-0.48.0 → runloop_api_client-0.48.2}/src/runloop_api_client/types/scenarios/run_list_params.py +0 -0
- {runloop_api_client-0.48.0 → runloop_api_client-0.48.2}/src/runloop_api_client/types/scenarios/scorer_create_params.py +0 -0
- {runloop_api_client-0.48.0 → runloop_api_client-0.48.2}/src/runloop_api_client/types/scenarios/scorer_create_response.py +0 -0
- {runloop_api_client-0.48.0 → runloop_api_client-0.48.2}/src/runloop_api_client/types/scenarios/scorer_list_params.py +0 -0
- {runloop_api_client-0.48.0 → runloop_api_client-0.48.2}/src/runloop_api_client/types/scenarios/scorer_list_response.py +0 -0
- {runloop_api_client-0.48.0 → runloop_api_client-0.48.2}/src/runloop_api_client/types/scenarios/scorer_retrieve_response.py +0 -0
- {runloop_api_client-0.48.0 → runloop_api_client-0.48.2}/src/runloop_api_client/types/scenarios/scorer_update_params.py +0 -0
- {runloop_api_client-0.48.0 → runloop_api_client-0.48.2}/src/runloop_api_client/types/scenarios/scorer_update_response.py +0 -0
- {runloop_api_client-0.48.0 → runloop_api_client-0.48.2}/src/runloop_api_client/types/scenarios/scorer_validate_params.py +0 -0
- {runloop_api_client-0.48.0 → runloop_api_client-0.48.2}/src/runloop_api_client/types/scenarios/scorer_validate_response.py +0 -0
- {runloop_api_client-0.48.0 → runloop_api_client-0.48.2}/src/runloop_api_client/types/scoring_contract.py +0 -0
- {runloop_api_client-0.48.0 → runloop_api_client-0.48.2}/src/runloop_api_client/types/scoring_contract_param.py +0 -0
- {runloop_api_client-0.48.0 → runloop_api_client-0.48.2}/src/runloop_api_client/types/scoring_contract_result_view.py +0 -0
- {runloop_api_client-0.48.0 → runloop_api_client-0.48.2}/src/runloop_api_client/types/scoring_contract_update_param.py +0 -0
- {runloop_api_client-0.48.0 → runloop_api_client-0.48.2}/src/runloop_api_client/types/scoring_function.py +0 -0
- {runloop_api_client-0.48.0 → runloop_api_client-0.48.2}/src/runloop_api_client/types/scoring_function_param.py +0 -0
- {runloop_api_client-0.48.0 → runloop_api_client-0.48.2}/src/runloop_api_client/types/scoring_function_result_view.py +0 -0
- {runloop_api_client-0.48.0 → runloop_api_client-0.48.2}/src/runloop_api_client/types/secret_create_params.py +0 -0
- {runloop_api_client-0.48.0 → runloop_api_client-0.48.2}/src/runloop_api_client/types/secret_list_view.py +0 -0
- {runloop_api_client-0.48.0 → runloop_api_client-0.48.2}/src/runloop_api_client/types/secret_update_params.py +0 -0
- {runloop_api_client-0.48.0 → runloop_api_client-0.48.2}/src/runloop_api_client/types/secret_view.py +0 -0
- {runloop_api_client-0.48.0 → runloop_api_client-0.48.2}/src/runloop_api_client/types/shared/__init__.py +0 -0
- {runloop_api_client-0.48.0 → runloop_api_client-0.48.2}/src/runloop_api_client/types/shared/after_idle.py +0 -0
- {runloop_api_client-0.48.0 → runloop_api_client-0.48.2}/src/runloop_api_client/types/shared/code_mount_parameters.py +0 -0
- {runloop_api_client-0.48.0 → runloop_api_client-0.48.2}/src/runloop_api_client/types/shared/launch_parameters.py +0 -0
- {runloop_api_client-0.48.0 → runloop_api_client-0.48.2}/src/runloop_api_client/types/shared_params/__init__.py +0 -0
- {runloop_api_client-0.48.0 → runloop_api_client-0.48.2}/src/runloop_api_client/types/shared_params/after_idle.py +0 -0
- {runloop_api_client-0.48.0 → runloop_api_client-0.48.2}/src/runloop_api_client/types/shared_params/code_mount_parameters.py +0 -0
- {runloop_api_client-0.48.0 → runloop_api_client-0.48.2}/src/runloop_api_client/types/shared_params/launch_parameters.py +0 -0
- {runloop_api_client-0.48.0 → runloop_api_client-0.48.2}/tests/__init__.py +0 -0
- {runloop_api_client-0.48.0 → runloop_api_client-0.48.2}/tests/api_resources/__init__.py +0 -0
- {runloop_api_client-0.48.0 → runloop_api_client-0.48.2}/tests/api_resources/benchmarks/__init__.py +0 -0
- {runloop_api_client-0.48.0 → runloop_api_client-0.48.2}/tests/api_resources/benchmarks/test_runs.py +0 -0
- {runloop_api_client-0.48.0 → runloop_api_client-0.48.2}/tests/api_resources/devboxes/__init__.py +0 -0
- {runloop_api_client-0.48.0 → runloop_api_client-0.48.2}/tests/api_resources/devboxes/test_browsers.py +0 -0
- {runloop_api_client-0.48.0 → runloop_api_client-0.48.2}/tests/api_resources/devboxes/test_computers.py +0 -0
- {runloop_api_client-0.48.0 → runloop_api_client-0.48.2}/tests/api_resources/devboxes/test_disk_snapshots.py +0 -0
- {runloop_api_client-0.48.0 → runloop_api_client-0.48.2}/tests/api_resources/devboxes/test_logs.py +0 -0
- {runloop_api_client-0.48.0 → runloop_api_client-0.48.2}/tests/api_resources/scenarios/__init__.py +0 -0
- {runloop_api_client-0.48.0 → runloop_api_client-0.48.2}/tests/api_resources/scenarios/test_runs.py +0 -0
- {runloop_api_client-0.48.0 → runloop_api_client-0.48.2}/tests/api_resources/scenarios/test_scorers.py +0 -0
- {runloop_api_client-0.48.0 → runloop_api_client-0.48.2}/tests/api_resources/test_benchmarks.py +0 -0
- {runloop_api_client-0.48.0 → runloop_api_client-0.48.2}/tests/api_resources/test_blueprints.py +0 -0
- {runloop_api_client-0.48.0 → runloop_api_client-0.48.2}/tests/api_resources/test_repositories.py +0 -0
- {runloop_api_client-0.48.0 → runloop_api_client-0.48.2}/tests/api_resources/test_scenarios.py +0 -0
- {runloop_api_client-0.48.0 → runloop_api_client-0.48.2}/tests/api_resources/test_secrets.py +0 -0
- {runloop_api_client-0.48.0 → runloop_api_client-0.48.2}/tests/sample_file.txt +0 -0
- {runloop_api_client-0.48.0 → runloop_api_client-0.48.2}/tests/test_client.py +0 -0
- {runloop_api_client-0.48.0 → runloop_api_client-0.48.2}/tests/test_deepcopy.py +0 -0
- {runloop_api_client-0.48.0 → runloop_api_client-0.48.2}/tests/test_extract_files.py +0 -0
- {runloop_api_client-0.48.0 → runloop_api_client-0.48.2}/tests/test_files.py +0 -0
- {runloop_api_client-0.48.0 → runloop_api_client-0.48.2}/tests/test_qs.py +0 -0
- {runloop_api_client-0.48.0 → runloop_api_client-0.48.2}/tests/test_required_args.py +0 -0
- {runloop_api_client-0.48.0 → runloop_api_client-0.48.2}/tests/test_response.py +0 -0
- {runloop_api_client-0.48.0 → runloop_api_client-0.48.2}/tests/test_streaming.py +0 -0
- {runloop_api_client-0.48.0 → runloop_api_client-0.48.2}/tests/test_transform.py +0 -0
- {runloop_api_client-0.48.0 → runloop_api_client-0.48.2}/tests/test_utils/test_proxy.py +0 -0
- {runloop_api_client-0.48.0 → runloop_api_client-0.48.2}/tests/test_utils/test_typing.py +0 -0
- {runloop_api_client-0.48.0 → runloop_api_client-0.48.2}/tests/utils.py +0 -0
|
@@ -1,5 +1,27 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## 0.48.2 (2025-07-11)
|
|
4
|
+
|
|
5
|
+
Full Changelog: [v0.48.1...v0.48.2](https://github.com/runloopai/api-client-python/compare/v0.48.1...v0.48.2)
|
|
6
|
+
|
|
7
|
+
### Chores
|
|
8
|
+
|
|
9
|
+
* **readme:** fix version rendering on pypi ([73af53e](https://github.com/runloopai/api-client-python/commit/73af53e19889262ac445fc0789999873c411c35a))
|
|
10
|
+
|
|
11
|
+
## 0.48.1 (2025-07-10)
|
|
12
|
+
|
|
13
|
+
Full Changelog: [v0.48.0...v0.48.1](https://github.com/runloopai/api-client-python/compare/v0.48.0...v0.48.1)
|
|
14
|
+
|
|
15
|
+
### Bug Fixes
|
|
16
|
+
|
|
17
|
+
* **parsing:** correctly handle nested discriminated unions ([3312be9](https://github.com/runloopai/api-client-python/commit/3312be9e751dd58396884644be4ceabbaba11014))
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
### Chores
|
|
21
|
+
|
|
22
|
+
* **internal:** bump pinned h11 dep ([80ff87c](https://github.com/runloopai/api-client-python/commit/80ff87cde91eedd2169bd3b3e563545291928cbd))
|
|
23
|
+
* **package:** mark python 3.13 as supported ([7043864](https://github.com/runloopai/api-client-python/commit/70438649e40206746ea1543fc6c29b3c9fb47bd3))
|
|
24
|
+
|
|
3
25
|
## 0.48.0 (2025-07-09)
|
|
4
26
|
|
|
5
27
|
Full Changelog: [v0.47.1...v0.48.0](https://github.com/runloopai/api-client-python/compare/v0.47.1...v0.48.0)
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.3
|
|
2
2
|
Name: runloop_api_client
|
|
3
|
-
Version: 0.48.
|
|
3
|
+
Version: 0.48.2
|
|
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
|
|
@@ -34,7 +35,8 @@ Description-Content-Type: text/markdown
|
|
|
34
35
|
|
|
35
36
|
# Runloop Python API library
|
|
36
37
|
|
|
37
|
-
|
|
38
|
+
<!-- prettier-ignore -->
|
|
39
|
+
[)](https://pypi.org/project/runloop_api_client/)
|
|
38
40
|
|
|
39
41
|
The Runloop Python library provides convenient access to the Runloop REST API from any Python 3.8+
|
|
40
42
|
application. The library includes type definitions for all request params and response fields,
|
|
@@ -281,7 +283,8 @@ Error codes are as follows:
|
|
|
281
283
|
|
|
282
284
|
Certain errors are automatically retried 5 times by default, with a short exponential backoff.
|
|
283
285
|
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.
|
|
286
|
+
429 Rate Limit, and >=500 Internal errors are all retried by default for GET requests. For POST requests, only
|
|
287
|
+
429 errors will be retried.
|
|
285
288
|
|
|
286
289
|
You can use the `max_retries` option to configure or disable retry settings:
|
|
287
290
|
|
|
@@ -290,12 +293,12 @@ from runloop_api_client import Runloop
|
|
|
290
293
|
|
|
291
294
|
# Configure the default for all requests:
|
|
292
295
|
client = Runloop(
|
|
293
|
-
# default is
|
|
296
|
+
# default is 5
|
|
294
297
|
max_retries=0,
|
|
295
298
|
)
|
|
296
299
|
|
|
297
300
|
# Or, configure per-request:
|
|
298
|
-
client.with_options(max_retries=
|
|
301
|
+
client.with_options(max_retries=10).devboxes.create()
|
|
299
302
|
```
|
|
300
303
|
|
|
301
304
|
### Timeouts
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
# Runloop Python API library
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
<!-- prettier-ignore -->
|
|
4
|
+
[)](https://pypi.org/project/runloop_api_client/)
|
|
4
5
|
|
|
5
6
|
The Runloop Python library provides convenient access to the Runloop REST API from any Python 3.8+
|
|
6
7
|
application. The library includes type definitions for all request params and response fields,
|
|
@@ -247,7 +248,8 @@ Error codes are as follows:
|
|
|
247
248
|
|
|
248
249
|
Certain errors are automatically retried 5 times by default, with a short exponential backoff.
|
|
249
250
|
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.
|
|
251
|
+
429 Rate Limit, and >=500 Internal errors are all retried by default for GET requests. For POST requests, only
|
|
252
|
+
429 errors will be retried.
|
|
251
253
|
|
|
252
254
|
You can use the `max_retries` option to configure or disable retry settings:
|
|
253
255
|
|
|
@@ -256,12 +258,12 @@ from runloop_api_client import Runloop
|
|
|
256
258
|
|
|
257
259
|
# Configure the default for all requests:
|
|
258
260
|
client = Runloop(
|
|
259
|
-
# default is
|
|
261
|
+
# default is 5
|
|
260
262
|
max_retries=0,
|
|
261
263
|
)
|
|
262
264
|
|
|
263
265
|
# Or, configure per-request:
|
|
264
|
-
client.with_options(max_retries=
|
|
266
|
+
client.with_options(max_retries=10).devboxes.create()
|
|
265
267
|
```
|
|
266
268
|
|
|
267
269
|
### Timeouts
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
[project]
|
|
2
2
|
name = "runloop_api_client"
|
|
3
|
-
version = "0.48.
|
|
3
|
+
version = "0.48.2"
|
|
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.48.0 → runloop_api_client-0.48.2}/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, APIStatusError
|
|
91
|
+
from ..._exceptions import RunloopError, APIStatusError, APITimeoutError
|
|
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 (
|
|
@@ -115,6 +115,18 @@ __all__ = ["DevboxesResource", "AsyncDevboxesResource"]
|
|
|
115
115
|
DEVBOX_BOOTING_STATES = frozenset(("provisioning", "initializing"))
|
|
116
116
|
|
|
117
117
|
|
|
118
|
+
def placeholder_devbox_view(id: str) -> DevboxView:
|
|
119
|
+
return DevboxView(
|
|
120
|
+
id=id,
|
|
121
|
+
status="provisioning",
|
|
122
|
+
capabilities=[],
|
|
123
|
+
create_time_ms=0,
|
|
124
|
+
launch_parameters=SharedLaunchParameters(),
|
|
125
|
+
metadata={},
|
|
126
|
+
state_transitions=[],
|
|
127
|
+
)
|
|
128
|
+
|
|
129
|
+
|
|
118
130
|
class DevboxesResource(SyncAPIResource):
|
|
119
131
|
@cached_property
|
|
120
132
|
def disk_snapshots(self) -> DiskSnapshotsResource:
|
|
@@ -360,13 +372,8 @@ class DevboxesResource(SyncAPIResource):
|
|
|
360
372
|
self,
|
|
361
373
|
id: str,
|
|
362
374
|
*,
|
|
375
|
+
# Use polling_config to configure the "long" polling behavior.
|
|
363
376
|
polling_config: PollingConfig | None = None,
|
|
364
|
-
# Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
|
|
365
|
-
# The extra values given here take precedence over values defined on the client or passed to this method.
|
|
366
|
-
extra_headers: Headers | None = None,
|
|
367
|
-
extra_query: Query | None = None,
|
|
368
|
-
extra_body: Body | None = None,
|
|
369
|
-
timeout: float | httpx.Timeout | None | NotGiven = NOT_GIVEN,
|
|
370
377
|
) -> DevboxView:
|
|
371
378
|
"""Wait for a devbox to be in running state.
|
|
372
379
|
|
|
@@ -392,28 +399,19 @@ class DevboxesResource(SyncAPIResource):
|
|
|
392
399
|
return self._post(
|
|
393
400
|
f"/v1/devboxes/{id}/wait_for_status",
|
|
394
401
|
body={"statuses": ["running", "failure"]},
|
|
395
|
-
options=make_request_options(
|
|
396
|
-
extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
|
|
397
|
-
),
|
|
398
402
|
cast_to=DevboxView,
|
|
399
403
|
)
|
|
400
404
|
|
|
401
405
|
def handle_timeout_error(error: Exception) -> DevboxView:
|
|
402
|
-
# Handle
|
|
403
|
-
if isinstance(error,
|
|
406
|
+
# Handle timeout errors by returning current devbox state to continue polling
|
|
407
|
+
if isinstance(error, APITimeoutError) or (
|
|
408
|
+
isinstance(error, APIStatusError) and error.response.status_code == 408
|
|
409
|
+
):
|
|
404
410
|
# Return a placeholder result to continue polling
|
|
405
|
-
return
|
|
406
|
-
|
|
407
|
-
|
|
408
|
-
|
|
409
|
-
create_time_ms=0,
|
|
410
|
-
launch_parameters=SharedLaunchParameters(),
|
|
411
|
-
metadata={},
|
|
412
|
-
state_transitions=[],
|
|
413
|
-
)
|
|
414
|
-
else:
|
|
415
|
-
# Re-raise other errors to stop polling
|
|
416
|
-
raise error
|
|
411
|
+
return placeholder_devbox_view(id)
|
|
412
|
+
|
|
413
|
+
# Re-raise other errors to stop polling
|
|
414
|
+
raise error
|
|
417
415
|
|
|
418
416
|
def is_done_booting(devbox: DevboxView) -> bool:
|
|
419
417
|
return devbox.status not in DEVBOX_BOOTING_STATES
|
|
@@ -495,10 +493,6 @@ class DevboxesResource(SyncAPIResource):
|
|
|
495
493
|
return self.await_running(
|
|
496
494
|
devbox.id,
|
|
497
495
|
polling_config=polling_config,
|
|
498
|
-
extra_headers=extra_headers,
|
|
499
|
-
extra_query=extra_query,
|
|
500
|
-
extra_body=extra_body,
|
|
501
|
-
timeout=timeout,
|
|
502
496
|
)
|
|
503
497
|
|
|
504
498
|
def list(
|
|
@@ -1662,23 +1656,14 @@ class AsyncDevboxesResource(AsyncAPIResource):
|
|
|
1662
1656
|
return await self.await_running(
|
|
1663
1657
|
devbox.id,
|
|
1664
1658
|
polling_config=polling_config,
|
|
1665
|
-
extra_headers=extra_headers,
|
|
1666
|
-
extra_query=extra_query,
|
|
1667
|
-
extra_body=extra_body,
|
|
1668
|
-
timeout=timeout,
|
|
1669
1659
|
)
|
|
1670
1660
|
|
|
1671
1661
|
async def await_running(
|
|
1672
1662
|
self,
|
|
1673
1663
|
id: str,
|
|
1674
1664
|
*,
|
|
1665
|
+
# Use polling_config to configure the "long" polling behavior.
|
|
1675
1666
|
polling_config: PollingConfig | None = None,
|
|
1676
|
-
# Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
|
|
1677
|
-
# The extra values given here take precedence over values defined on the client or passed to this method.
|
|
1678
|
-
extra_headers: Headers | None = None,
|
|
1679
|
-
extra_query: Query | None = None,
|
|
1680
|
-
extra_body: Body | None = None,
|
|
1681
|
-
timeout: float | httpx.Timeout | None | NotGiven = NOT_GIVEN,
|
|
1682
1667
|
) -> DevboxView:
|
|
1683
1668
|
"""Wait for a devbox to be in running state.
|
|
1684
1669
|
|
|
@@ -1705,26 +1690,16 @@ class AsyncDevboxesResource(AsyncAPIResource):
|
|
|
1705
1690
|
return await self._post(
|
|
1706
1691
|
f"/v1/devboxes/{id}/wait_for_status",
|
|
1707
1692
|
body={"statuses": ["running", "failure"]},
|
|
1708
|
-
options=make_request_options(
|
|
1709
|
-
extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
|
|
1710
|
-
),
|
|
1711
1693
|
cast_to=DevboxView,
|
|
1712
1694
|
)
|
|
1713
|
-
except APIStatusError as error:
|
|
1714
|
-
|
|
1715
|
-
|
|
1716
|
-
|
|
1717
|
-
|
|
1718
|
-
|
|
1719
|
-
|
|
1720
|
-
|
|
1721
|
-
launch_parameters=SharedLaunchParameters(),
|
|
1722
|
-
metadata={},
|
|
1723
|
-
state_transitions=[],
|
|
1724
|
-
)
|
|
1725
|
-
else:
|
|
1726
|
-
# Re-raise other errors to stop polling
|
|
1727
|
-
raise
|
|
1695
|
+
except (APITimeoutError, APIStatusError) as error:
|
|
1696
|
+
# Handle timeout errors by returning current devbox state to continue polling
|
|
1697
|
+
if isinstance(error, APITimeoutError) or error.response.status_code == 408:
|
|
1698
|
+
# Return a placeholder result to continue polling
|
|
1699
|
+
return placeholder_devbox_view(id)
|
|
1700
|
+
|
|
1701
|
+
# Re-raise other errors to stop polling
|
|
1702
|
+
raise
|
|
1728
1703
|
|
|
1729
1704
|
def is_done_booting(devbox: DevboxView) -> bool:
|
|
1730
1705
|
return devbox.status not in DEVBOX_BOOTING_STATES
|
|
@@ -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, APITimeoutError
|
|
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
|
|
@@ -27,6 +28,16 @@ from ...types.devbox_async_execution_detail_view import DevboxAsyncExecutionDeta
|
|
|
27
28
|
__all__ = ["ExecutionsResource", "AsyncExecutionsResource"]
|
|
28
29
|
|
|
29
30
|
|
|
31
|
+
def placeholder_execution_detail_view(devbox_id: str, execution_id: str) -> DevboxAsyncExecutionDetailView:
|
|
32
|
+
return DevboxAsyncExecutionDetailView(
|
|
33
|
+
devbox_id=devbox_id,
|
|
34
|
+
execution_id=execution_id,
|
|
35
|
+
status="queued",
|
|
36
|
+
stdout="",
|
|
37
|
+
stderr="",
|
|
38
|
+
)
|
|
39
|
+
|
|
40
|
+
|
|
30
41
|
class ExecutionsResource(SyncAPIResource):
|
|
31
42
|
@cached_property
|
|
32
43
|
def with_raw_response(self) -> ExecutionsResourceWithRawResponse:
|
|
@@ -96,16 +107,11 @@ class ExecutionsResource(SyncAPIResource):
|
|
|
96
107
|
execution_id: str,
|
|
97
108
|
devbox_id: str,
|
|
98
109
|
*,
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
# The extra values given here take precedence over values defined on the client or passed to this method.
|
|
102
|
-
extra_headers: Headers | None = None,
|
|
103
|
-
extra_query: Query | None = None,
|
|
104
|
-
extra_body: Body | None = None,
|
|
105
|
-
timeout: float | httpx.Timeout | None | NotGiven = NOT_GIVEN,
|
|
110
|
+
# Use polling_config to configure the "long" polling behavior.
|
|
111
|
+
polling_config: PollingConfig | None = None,
|
|
106
112
|
) -> DevboxAsyncExecutionDetailView:
|
|
107
113
|
"""Wait for an execution to complete.
|
|
108
|
-
|
|
114
|
+
|
|
109
115
|
Args:
|
|
110
116
|
execution_id: The ID of the execution to wait for
|
|
111
117
|
id: The ID of the devbox
|
|
@@ -121,20 +127,30 @@ class ExecutionsResource(SyncAPIResource):
|
|
|
121
127
|
Raises:
|
|
122
128
|
PollingTimeout: If polling times out before execution completes
|
|
123
129
|
"""
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
timeout=timeout
|
|
130
|
+
|
|
131
|
+
def wait_for_execution_status() -> DevboxAsyncExecutionDetailView:
|
|
132
|
+
# This wait_for_status endpoint polls the execution status for 60 seconds until it reaches either completed.
|
|
133
|
+
return self._post(
|
|
134
|
+
f"/v1/devboxes/{devbox_id}/executions/{execution_id}/wait_for_status",
|
|
135
|
+
body={"statuses": ["completed"]},
|
|
136
|
+
cast_to=DevboxAsyncExecutionDetailView,
|
|
132
137
|
)
|
|
133
138
|
|
|
139
|
+
def handle_timeout_error(error: Exception) -> DevboxAsyncExecutionDetailView:
|
|
140
|
+
# Handle timeout errors by returning current execution state to continue polling
|
|
141
|
+
if isinstance(error, APITimeoutError) or (
|
|
142
|
+
isinstance(error, APIStatusError) and error.response.status_code == 408
|
|
143
|
+
):
|
|
144
|
+
# Return a placeholder result to continue polling
|
|
145
|
+
return placeholder_execution_detail_view(devbox_id, execution_id)
|
|
146
|
+
else:
|
|
147
|
+
# Re-raise other errors to stop polling
|
|
148
|
+
raise error
|
|
149
|
+
|
|
134
150
|
def is_done(execution: DevboxAsyncExecutionDetailView) -> bool:
|
|
135
|
-
return execution.status ==
|
|
151
|
+
return execution.status == "completed"
|
|
136
152
|
|
|
137
|
-
return poll_until(
|
|
153
|
+
return poll_until(wait_for_execution_status, is_done, polling_config, handle_timeout_error)
|
|
138
154
|
|
|
139
155
|
def execute_async(
|
|
140
156
|
self,
|
|
@@ -369,19 +385,14 @@ class AsyncExecutionsResource(AsyncAPIResource):
|
|
|
369
385
|
|
|
370
386
|
async def await_completed(
|
|
371
387
|
self,
|
|
372
|
-
execution_id: str,
|
|
388
|
+
execution_id: str,
|
|
373
389
|
*,
|
|
374
390
|
devbox_id: str,
|
|
391
|
+
# Use polling_config to configure the "long" polling behavior.
|
|
375
392
|
polling_config: PollingConfig | None = None,
|
|
376
|
-
# Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
|
|
377
|
-
# The extra values given here take precedence over values defined on the client or passed to this method.
|
|
378
|
-
extra_headers: Headers | None = None,
|
|
379
|
-
extra_query: Query | None = None,
|
|
380
|
-
extra_body: Body | None = None,
|
|
381
|
-
timeout: float | httpx.Timeout | None | NotGiven = NOT_GIVEN,
|
|
382
393
|
) -> DevboxAsyncExecutionDetailView:
|
|
383
394
|
"""Wait for an execution to complete.
|
|
384
|
-
|
|
395
|
+
|
|
385
396
|
Args:
|
|
386
397
|
execution_id: The ID of the execution to wait for
|
|
387
398
|
id: The ID of the devbox
|
|
@@ -397,20 +408,26 @@ class AsyncExecutionsResource(AsyncAPIResource):
|
|
|
397
408
|
Raises:
|
|
398
409
|
PollingTimeout: If polling times out before execution completes
|
|
399
410
|
"""
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
|
|
404
|
-
|
|
405
|
-
|
|
406
|
-
|
|
407
|
-
|
|
408
|
-
)
|
|
411
|
+
|
|
412
|
+
async def wait_for_execution_status() -> DevboxAsyncExecutionDetailView:
|
|
413
|
+
try:
|
|
414
|
+
return await self._post(
|
|
415
|
+
f"/v1/devboxes/{devbox_id}/executions/{execution_id}/wait_for_status",
|
|
416
|
+
body={"statuses": ["completed"]},
|
|
417
|
+
cast_to=DevboxAsyncExecutionDetailView,
|
|
418
|
+
)
|
|
419
|
+
except (APITimeoutError, APIStatusError) as error:
|
|
420
|
+
# Handle timeout errors by returning placeholder to continue polling
|
|
421
|
+
if isinstance(error, APITimeoutError) or error.response.status_code == 408:
|
|
422
|
+
return placeholder_execution_detail_view(devbox_id, execution_id)
|
|
423
|
+
|
|
424
|
+
# Re-raise other errors to stop polling
|
|
425
|
+
raise
|
|
409
426
|
|
|
410
427
|
def is_done(execution: DevboxAsyncExecutionDetailView) -> bool:
|
|
411
|
-
return execution.status ==
|
|
428
|
+
return execution.status == "completed"
|
|
412
429
|
|
|
413
|
-
return await async_poll_until(
|
|
430
|
+
return await async_poll_until(wait_for_execution_status, is_done, polling_config)
|
|
414
431
|
|
|
415
432
|
async def execute_async(
|
|
416
433
|
self,
|
|
@@ -471,10 +471,6 @@ class ScenariosResource(SyncAPIResource):
|
|
|
471
471
|
self._client.devboxes.await_running(
|
|
472
472
|
run.devbox_id,
|
|
473
473
|
polling_config=polling_config,
|
|
474
|
-
extra_headers=extra_headers,
|
|
475
|
-
extra_query=extra_query,
|
|
476
|
-
extra_body=extra_body,
|
|
477
|
-
timeout=timeout,
|
|
478
474
|
)
|
|
479
475
|
|
|
480
476
|
return run
|