runloop-api-client 0.36.0__tar.gz → 0.37.0__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.37.0/.release-please-manifest.json +3 -0
- {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/CHANGELOG.md +15 -0
- {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/CONTRIBUTING.md +1 -2
- {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/PKG-INFO +2 -18
- {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/README.md +1 -17
- {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/api.md +1 -0
- {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/pyproject.toml +1 -1
- {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/src/runloop_api_client/_base_client.py +6 -0
- {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/src/runloop_api_client/_models.py +2 -0
- {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/src/runloop_api_client/_types.py +2 -0
- {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/src/runloop_api_client/_version.py +1 -1
- {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/src/runloop_api_client/resources/benchmarks/runs.py +114 -1
- {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/src/runloop_api_client/types/benchmarks/__init__.py +1 -0
- runloop_api_client-0.37.0/src/runloop_api_client/types/benchmarks/run_list_scenario_runs_params.py +15 -0
- {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/tests/api_resources/benchmarks/test_runs.py +95 -1
- {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/tests/test_client.py +54 -0
- runloop_api_client-0.36.0/.release-please-manifest.json +0 -3
- {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/.gitignore +0 -0
- {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/LICENSE +0 -0
- {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/SECURITY.md +0 -0
- {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/bin/check-release-environment +0 -0
- {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/bin/publish-pypi +0 -0
- {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/examples/.keep +0 -0
- {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/mypy.ini +0 -0
- {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/noxfile.py +0 -0
- {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/release-please-config.json +0 -0
- {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/requirements-dev.lock +0 -0
- {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/requirements.lock +0 -0
- {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/src/runloop/lib/.keep +0 -0
- {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/src/runloop_api_client/__init__.py +0 -0
- {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/src/runloop_api_client/_client.py +0 -0
- {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/src/runloop_api_client/_compat.py +0 -0
- {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/src/runloop_api_client/_constants.py +0 -0
- {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/src/runloop_api_client/_exceptions.py +0 -0
- {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/src/runloop_api_client/_files.py +0 -0
- {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/src/runloop_api_client/_qs.py +0 -0
- {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/src/runloop_api_client/_resource.py +0 -0
- {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/src/runloop_api_client/_response.py +0 -0
- {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/src/runloop_api_client/_streaming.py +0 -0
- {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/src/runloop_api_client/_utils/__init__.py +0 -0
- {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/src/runloop_api_client/_utils/_logs.py +0 -0
- {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/src/runloop_api_client/_utils/_proxy.py +0 -0
- {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/src/runloop_api_client/_utils/_reflection.py +0 -0
- {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/src/runloop_api_client/_utils/_resources_proxy.py +0 -0
- {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/src/runloop_api_client/_utils/_streams.py +0 -0
- {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/src/runloop_api_client/_utils/_sync.py +0 -0
- {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/src/runloop_api_client/_utils/_transform.py +0 -0
- {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/src/runloop_api_client/_utils/_typing.py +0 -0
- {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/src/runloop_api_client/_utils/_utils.py +0 -0
- {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/src/runloop_api_client/lib/.keep +0 -0
- {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/src/runloop_api_client/lib/polling.py +0 -0
- {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/src/runloop_api_client/lib/polling_async.py +0 -0
- {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/src/runloop_api_client/pagination.py +0 -0
- {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/src/runloop_api_client/py.typed +0 -0
- {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/src/runloop_api_client/resources/__init__.py +0 -0
- {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/src/runloop_api_client/resources/benchmarks/__init__.py +0 -0
- {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/src/runloop_api_client/resources/benchmarks/benchmarks.py +0 -0
- {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/src/runloop_api_client/resources/blueprints.py +0 -0
- {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/src/runloop_api_client/resources/devboxes/__init__.py +0 -0
- {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/src/runloop_api_client/resources/devboxes/browsers.py +0 -0
- {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/src/runloop_api_client/resources/devboxes/computers.py +0 -0
- {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/src/runloop_api_client/resources/devboxes/devboxes.py +0 -0
- {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/src/runloop_api_client/resources/devboxes/disk_snapshots.py +0 -0
- {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/src/runloop_api_client/resources/devboxes/executions.py +0 -0
- {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/src/runloop_api_client/resources/devboxes/logs.py +0 -0
- {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/src/runloop_api_client/resources/devboxes/lsp.py +0 -0
- {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/src/runloop_api_client/resources/repositories.py +0 -0
- {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/src/runloop_api_client/resources/scenarios/__init__.py +0 -0
- {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/src/runloop_api_client/resources/scenarios/runs.py +0 -0
- {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/src/runloop_api_client/resources/scenarios/scenarios.py +0 -0
- {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/src/runloop_api_client/resources/scenarios/scorers.py +0 -0
- {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/src/runloop_api_client/types/__init__.py +0 -0
- {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/src/runloop_api_client/types/benchmark_create_params.py +0 -0
- {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/src/runloop_api_client/types/benchmark_list_params.py +0 -0
- {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/src/runloop_api_client/types/benchmark_list_public_params.py +0 -0
- {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/src/runloop_api_client/types/benchmark_run_list_view.py +0 -0
- {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/src/runloop_api_client/types/benchmark_run_view.py +0 -0
- {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/src/runloop_api_client/types/benchmark_start_run_params.py +0 -0
- {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/src/runloop_api_client/types/benchmark_update_params.py +0 -0
- {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/src/runloop_api_client/types/benchmark_view.py +0 -0
- {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/src/runloop_api_client/types/benchmarks/run_list_params.py +0 -0
- {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/src/runloop_api_client/types/blueprint_build_log.py +0 -0
- {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/src/runloop_api_client/types/blueprint_build_logs_list_view.py +0 -0
- {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/src/runloop_api_client/types/blueprint_build_parameters.py +0 -0
- {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/src/runloop_api_client/types/blueprint_create_params.py +0 -0
- {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/src/runloop_api_client/types/blueprint_list_params.py +0 -0
- {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/src/runloop_api_client/types/blueprint_list_view.py +0 -0
- {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/src/runloop_api_client/types/blueprint_preview_params.py +0 -0
- {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/src/runloop_api_client/types/blueprint_preview_view.py +0 -0
- {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/src/runloop_api_client/types/blueprint_view.py +0 -0
- {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/src/runloop_api_client/types/devbox_async_execution_detail_view.py +0 -0
- {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/src/runloop_api_client/types/devbox_create_params.py +0 -0
- {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/src/runloop_api_client/types/devbox_create_ssh_key_response.py +0 -0
- {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/src/runloop_api_client/types/devbox_create_tunnel_params.py +0 -0
- {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/src/runloop_api_client/types/devbox_download_file_params.py +0 -0
- {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/src/runloop_api_client/types/devbox_execute_async_params.py +0 -0
- {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/src/runloop_api_client/types/devbox_execute_sync_params.py +0 -0
- {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/src/runloop_api_client/types/devbox_execution_detail_view.py +0 -0
- {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/src/runloop_api_client/types/devbox_list_disk_snapshots_params.py +0 -0
- {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/src/runloop_api_client/types/devbox_list_params.py +0 -0
- {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/src/runloop_api_client/types/devbox_list_view.py +0 -0
- {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/src/runloop_api_client/types/devbox_read_file_contents_params.py +0 -0
- {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/src/runloop_api_client/types/devbox_read_file_contents_response.py +0 -0
- {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/src/runloop_api_client/types/devbox_remove_tunnel_params.py +0 -0
- {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/src/runloop_api_client/types/devbox_snapshot_disk_async_params.py +0 -0
- {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/src/runloop_api_client/types/devbox_snapshot_disk_params.py +0 -0
- {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/src/runloop_api_client/types/devbox_snapshot_list_view.py +0 -0
- {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/src/runloop_api_client/types/devbox_snapshot_view.py +0 -0
- {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/src/runloop_api_client/types/devbox_tunnel_view.py +0 -0
- {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/src/runloop_api_client/types/devbox_update_params.py +0 -0
- {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/src/runloop_api_client/types/devbox_upload_file_params.py +0 -0
- {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/src/runloop_api_client/types/devbox_view.py +0 -0
- {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/src/runloop_api_client/types/devbox_write_file_contents_params.py +0 -0
- {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/src/runloop_api_client/types/devboxes/__init__.py +0 -0
- {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/src/runloop_api_client/types/devboxes/base_code_action.py +0 -0
- {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/src/runloop_api_client/types/devboxes/base_command.py +0 -0
- {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/src/runloop_api_client/types/devboxes/base_command_param.py +0 -0
- {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/src/runloop_api_client/types/devboxes/base_diagnostic.py +0 -0
- {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/src/runloop_api_client/types/devboxes/base_diagnostic_param.py +0 -0
- {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/src/runloop_api_client/types/devboxes/base_location.py +0 -0
- {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/src/runloop_api_client/types/devboxes/base_markup_content.py +0 -0
- {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/src/runloop_api_client/types/devboxes/base_parameter_information.py +0 -0
- {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/src/runloop_api_client/types/devboxes/base_range.py +0 -0
- {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/src/runloop_api_client/types/devboxes/base_range_param.py +0 -0
- {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/src/runloop_api_client/types/devboxes/base_signature.py +0 -0
- {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/src/runloop_api_client/types/devboxes/base_workspace_edit.py +0 -0
- {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/src/runloop_api_client/types/devboxes/base_workspace_edit_param.py +0 -0
- {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/src/runloop_api_client/types/devboxes/browser_create_params.py +0 -0
- {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/src/runloop_api_client/types/devboxes/browser_view.py +0 -0
- {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/src/runloop_api_client/types/devboxes/code_action_application_result.py +0 -0
- {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/src/runloop_api_client/types/devboxes/code_action_context_param.py +0 -0
- {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/src/runloop_api_client/types/devboxes/code_action_kind.py +0 -0
- {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/src/runloop_api_client/types/devboxes/code_action_trigger_kind.py +0 -0
- {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/src/runloop_api_client/types/devboxes/code_actions_response.py +0 -0
- {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/src/runloop_api_client/types/devboxes/code_description_param.py +0 -0
- {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/src/runloop_api_client/types/devboxes/code_segment_info_response.py +0 -0
- {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/src/runloop_api_client/types/devboxes/computer_create_params.py +0 -0
- {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/src/runloop_api_client/types/devboxes/computer_keyboard_interaction_params.py +0 -0
- {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/src/runloop_api_client/types/devboxes/computer_keyboard_interaction_response.py +0 -0
- {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/src/runloop_api_client/types/devboxes/computer_mouse_interaction_params.py +0 -0
- {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/src/runloop_api_client/types/devboxes/computer_mouse_interaction_response.py +0 -0
- {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/src/runloop_api_client/types/devboxes/computer_screen_interaction_params.py +0 -0
- {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/src/runloop_api_client/types/devboxes/computer_screen_interaction_response.py +0 -0
- {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/src/runloop_api_client/types/devboxes/computer_view.py +0 -0
- {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/src/runloop_api_client/types/devboxes/devbox_logs_list_view.py +0 -0
- {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/src/runloop_api_client/types/devboxes/devbox_snapshot_async_status_view.py +0 -0
- {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/src/runloop_api_client/types/devboxes/diagnostic_param.py +0 -0
- {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/src/runloop_api_client/types/devboxes/diagnostic_related_information_param.py +0 -0
- {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/src/runloop_api_client/types/devboxes/diagnostic_severity.py +0 -0
- {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/src/runloop_api_client/types/devboxes/diagnostic_tag.py +0 -0
- {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/src/runloop_api_client/types/devboxes/diagnostics_response.py +0 -0
- {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/src/runloop_api_client/types/devboxes/disk_snapshot_list_params.py +0 -0
- {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/src/runloop_api_client/types/devboxes/disk_snapshot_update_params.py +0 -0
- {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/src/runloop_api_client/types/devboxes/document_symbol.py +0 -0
- {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/src/runloop_api_client/types/devboxes/document_symbol_response.py +0 -0
- {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/src/runloop_api_client/types/devboxes/document_uri.py +0 -0
- {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/src/runloop_api_client/types/devboxes/execution_execute_async_params.py +0 -0
- {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/src/runloop_api_client/types/devboxes/execution_execute_sync_params.py +0 -0
- {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/src/runloop_api_client/types/devboxes/execution_retrieve_params.py +0 -0
- {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/src/runloop_api_client/types/devboxes/file_contents_response.py +0 -0
- {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/src/runloop_api_client/types/devboxes/file_definition_response.py +0 -0
- {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/src/runloop_api_client/types/devboxes/file_path.py +0 -0
- {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/src/runloop_api_client/types/devboxes/file_uri.py +0 -0
- {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/src/runloop_api_client/types/devboxes/formatting_response.py +0 -0
- {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/src/runloop_api_client/types/devboxes/health_status_response.py +0 -0
- {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/src/runloop_api_client/types/devboxes/integer.py +0 -0
- {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/src/runloop_api_client/types/devboxes/l_sp_any_param.py +0 -0
- {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/src/runloop_api_client/types/devboxes/location_param.py +0 -0
- {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/src/runloop_api_client/types/devboxes/log_list_params.py +0 -0
- {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/src/runloop_api_client/types/devboxes/lsp_apply_code_action_params.py +0 -0
- {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/src/runloop_api_client/types/devboxes/lsp_code_actions_params.py +0 -0
- {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/src/runloop_api_client/types/devboxes/lsp_diagnostics_params.py +0 -0
- {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/src/runloop_api_client/types/devboxes/lsp_document_symbols_params.py +0 -0
- {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/src/runloop_api_client/types/devboxes/lsp_file_definition_params.py +0 -0
- {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/src/runloop_api_client/types/devboxes/lsp_file_params.py +0 -0
- {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/src/runloop_api_client/types/devboxes/lsp_files_response.py +0 -0
- {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/src/runloop_api_client/types/devboxes/lsp_formatting_params.py +0 -0
- {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/src/runloop_api_client/types/devboxes/lsp_get_code_actions_for_diagnostic_params.py +0 -0
- {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/src/runloop_api_client/types/devboxes/lsp_get_code_actions_for_diagnostic_response.py +0 -0
- {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/src/runloop_api_client/types/devboxes/lsp_get_code_segment_info_params.py +0 -0
- {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/src/runloop_api_client/types/devboxes/lsp_get_signature_help_params.py +0 -0
- {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/src/runloop_api_client/types/devboxes/lsp_references_params.py +0 -0
- {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/src/runloop_api_client/types/devboxes/lsp_set_watch_directory_params.py +0 -0
- {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/src/runloop_api_client/types/devboxes/lsp_set_watch_directory_response.py +0 -0
- {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/src/runloop_api_client/types/devboxes/position.py +0 -0
- {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/src/runloop_api_client/types/devboxes/position_param.py +0 -0
- {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/src/runloop_api_client/types/devboxes/range.py +0 -0
- {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/src/runloop_api_client/types/devboxes/range_param.py +0 -0
- {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/src/runloop_api_client/types/devboxes/record_string_text_edit_array.py +0 -0
- {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/src/runloop_api_client/types/devboxes/record_string_text_edit_array_param.py +0 -0
- {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/src/runloop_api_client/types/devboxes/references_response.py +0 -0
- {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/src/runloop_api_client/types/devboxes/signature_help_response.py +0 -0
- {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/src/runloop_api_client/types/devboxes/symbol_kind.py +0 -0
- {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/src/runloop_api_client/types/devboxes/symbol_tag.py +0 -0
- {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/src/runloop_api_client/types/devboxes/symbol_type.py +0 -0
- {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/src/runloop_api_client/types/devboxes/text_edit.py +0 -0
- {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/src/runloop_api_client/types/devboxes/text_edit_param.py +0 -0
- {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/src/runloop_api_client/types/devboxes/u_ri.py +0 -0
- {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/src/runloop_api_client/types/devboxes/uinteger.py +0 -0
- {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/src/runloop_api_client/types/devboxes/watched_file_response.py +0 -0
- {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/src/runloop_api_client/types/input_context.py +0 -0
- {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/src/runloop_api_client/types/input_context_param.py +0 -0
- {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/src/runloop_api_client/types/repository_connection_list_view.py +0 -0
- {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/src/runloop_api_client/types/repository_connection_view.py +0 -0
- {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/src/runloop_api_client/types/repository_create_params.py +0 -0
- {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/src/runloop_api_client/types/repository_inspection_details.py +0 -0
- {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/src/runloop_api_client/types/repository_inspection_list_view.py +0 -0
- {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/src/runloop_api_client/types/repository_list_params.py +0 -0
- {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/src/runloop_api_client/types/repository_manifest_view.py +0 -0
- {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/src/runloop_api_client/types/scenario_create_params.py +0 -0
- {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/src/runloop_api_client/types/scenario_environment.py +0 -0
- {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/src/runloop_api_client/types/scenario_environment_param.py +0 -0
- {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/src/runloop_api_client/types/scenario_list_params.py +0 -0
- {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/src/runloop_api_client/types/scenario_list_public_params.py +0 -0
- {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/src/runloop_api_client/types/scenario_run_list_view.py +0 -0
- {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/src/runloop_api_client/types/scenario_run_view.py +0 -0
- {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/src/runloop_api_client/types/scenario_start_run_params.py +0 -0
- {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/src/runloop_api_client/types/scenario_update_params.py +0 -0
- {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/src/runloop_api_client/types/scenario_view.py +0 -0
- {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/src/runloop_api_client/types/scenarios/__init__.py +0 -0
- {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/src/runloop_api_client/types/scenarios/run_list_params.py +0 -0
- {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/src/runloop_api_client/types/scenarios/scorer_create_params.py +0 -0
- {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/src/runloop_api_client/types/scenarios/scorer_create_response.py +0 -0
- {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/src/runloop_api_client/types/scenarios/scorer_list_params.py +0 -0
- {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/src/runloop_api_client/types/scenarios/scorer_list_response.py +0 -0
- {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/src/runloop_api_client/types/scenarios/scorer_retrieve_response.py +0 -0
- {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/src/runloop_api_client/types/scenarios/scorer_update_params.py +0 -0
- {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/src/runloop_api_client/types/scenarios/scorer_update_response.py +0 -0
- {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/src/runloop_api_client/types/scenarios/scorer_validate_params.py +0 -0
- {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/src/runloop_api_client/types/scenarios/scorer_validate_response.py +0 -0
- {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/src/runloop_api_client/types/scoring_contract.py +0 -0
- {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/src/runloop_api_client/types/scoring_contract_param.py +0 -0
- {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/src/runloop_api_client/types/scoring_contract_result_view.py +0 -0
- {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/src/runloop_api_client/types/scoring_function.py +0 -0
- {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/src/runloop_api_client/types/scoring_function_param.py +0 -0
- {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/src/runloop_api_client/types/scoring_function_result_view.py +0 -0
- {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/src/runloop_api_client/types/shared/__init__.py +0 -0
- {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/src/runloop_api_client/types/shared/after_idle.py +0 -0
- {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/src/runloop_api_client/types/shared/code_mount_parameters.py +0 -0
- {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/src/runloop_api_client/types/shared/launch_parameters.py +0 -0
- {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/src/runloop_api_client/types/shared_params/__init__.py +0 -0
- {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/src/runloop_api_client/types/shared_params/after_idle.py +0 -0
- {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/src/runloop_api_client/types/shared_params/code_mount_parameters.py +0 -0
- {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/src/runloop_api_client/types/shared_params/launch_parameters.py +0 -0
- {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/tests/__init__.py +0 -0
- {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/tests/api_resources/__init__.py +0 -0
- {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/tests/api_resources/benchmarks/__init__.py +0 -0
- {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/tests/api_resources/devboxes/__init__.py +0 -0
- {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/tests/api_resources/devboxes/test_browsers.py +0 -0
- {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/tests/api_resources/devboxes/test_computers.py +0 -0
- {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/tests/api_resources/devboxes/test_disk_snapshots.py +0 -0
- {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/tests/api_resources/devboxes/test_executions.py +0 -0
- {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/tests/api_resources/devboxes/test_logs.py +0 -0
- {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/tests/api_resources/devboxes/test_lsp.py +0 -0
- {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/tests/api_resources/scenarios/__init__.py +0 -0
- {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/tests/api_resources/scenarios/test_runs.py +0 -0
- {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/tests/api_resources/scenarios/test_scorers.py +0 -0
- {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/tests/api_resources/test_benchmarks.py +0 -0
- {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/tests/api_resources/test_blueprints.py +0 -0
- {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/tests/api_resources/test_devboxes.py +0 -0
- {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/tests/api_resources/test_repositories.py +0 -0
- {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/tests/api_resources/test_scenarios.py +0 -0
- {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/tests/conftest.py +0 -0
- {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/tests/sample_file.txt +0 -0
- {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/tests/test_deepcopy.py +0 -0
- {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/tests/test_extract_files.py +0 -0
- {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/tests/test_files.py +0 -0
- {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/tests/test_models.py +0 -0
- {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/tests/test_qs.py +0 -0
- {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/tests/test_required_args.py +0 -0
- {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/tests/test_response.py +0 -0
- {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/tests/test_streaming.py +0 -0
- {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/tests/test_transform.py +0 -0
- {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/tests/test_utils/test_proxy.py +0 -0
- {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/tests/test_utils/test_typing.py +0 -0
- {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/tests/utils.py +0 -0
- {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/uv.lock +0 -0
|
@@ -1,5 +1,20 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## 0.37.0 (2025-06-04)
|
|
4
|
+
|
|
5
|
+
Full Changelog: [v0.36.0...v0.37.0](https://github.com/runloopai/api-client-python/compare/v0.36.0...v0.37.0)
|
|
6
|
+
|
|
7
|
+
### Features
|
|
8
|
+
|
|
9
|
+
* **api:** api update ([a167d0b](https://github.com/runloopai/api-client-python/commit/a167d0b2dbab59cb4ffbb029ea6dae22d0d7c2f4))
|
|
10
|
+
* **client:** add follow_redirects request option ([c29d24c](https://github.com/runloopai/api-client-python/commit/c29d24c5483ee2ca7e4d53dfdf8d40278f04f1fe))
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
### Chores
|
|
14
|
+
|
|
15
|
+
* **docs:** remove reference to rye shell ([af51a95](https://github.com/runloopai/api-client-python/commit/af51a958afb08cc728959b154c52d0ca31f4206c))
|
|
16
|
+
* **docs:** remove unnecessary param examples ([a29553d](https://github.com/runloopai/api-client-python/commit/a29553d048fa85207e28e5b3dbc4ad9ea326ad86))
|
|
17
|
+
|
|
3
18
|
## 0.36.0 (2025-06-02)
|
|
4
19
|
|
|
5
20
|
Full Changelog: [v0.35.0...v0.36.0](https://github.com/runloopai/api-client-python/compare/v0.35.0...v0.36.0)
|
|
@@ -17,8 +17,7 @@ $ rye sync --all-features
|
|
|
17
17
|
You can then run scripts using `rye run python script.py` or by activating the virtual environment:
|
|
18
18
|
|
|
19
19
|
```sh
|
|
20
|
-
|
|
21
|
-
# or manually activate - https://docs.python.org/3/library/venv.html#how-venvs-work
|
|
20
|
+
# Activate the virtual environment - https://docs.python.org/3/library/venv.html#how-venvs-work
|
|
22
21
|
$ source .venv/bin/activate
|
|
23
22
|
|
|
24
23
|
# now you can omit the `rye run` prefix
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.3
|
|
2
2
|
Name: runloop_api_client
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.37.0
|
|
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
|
|
@@ -177,23 +177,7 @@ from runloop_api_client import Runloop
|
|
|
177
177
|
client = Runloop()
|
|
178
178
|
|
|
179
179
|
devbox_view = client.devboxes.create(
|
|
180
|
-
launch_parameters={
|
|
181
|
-
"after_idle": {
|
|
182
|
-
"idle_time_seconds": 0,
|
|
183
|
-
"on_idle": "shutdown",
|
|
184
|
-
},
|
|
185
|
-
"architecture": "x86_64",
|
|
186
|
-
"available_ports": [0],
|
|
187
|
-
"custom_cpu_cores": 0,
|
|
188
|
-
"custom_gb_memory": 0,
|
|
189
|
-
"keep_alive_time_seconds": 0,
|
|
190
|
-
"launch_commands": ["string"],
|
|
191
|
-
"resource_size_request": "X_SMALL",
|
|
192
|
-
"user_parameters": {
|
|
193
|
-
"uid": 0,
|
|
194
|
-
"username": "username",
|
|
195
|
-
},
|
|
196
|
-
},
|
|
180
|
+
launch_parameters={},
|
|
197
181
|
)
|
|
198
182
|
print(devbox_view.launch_parameters)
|
|
199
183
|
```
|
|
@@ -146,23 +146,7 @@ from runloop_api_client import Runloop
|
|
|
146
146
|
client = Runloop()
|
|
147
147
|
|
|
148
148
|
devbox_view = client.devboxes.create(
|
|
149
|
-
launch_parameters={
|
|
150
|
-
"after_idle": {
|
|
151
|
-
"idle_time_seconds": 0,
|
|
152
|
-
"on_idle": "shutdown",
|
|
153
|
-
},
|
|
154
|
-
"architecture": "x86_64",
|
|
155
|
-
"available_ports": [0],
|
|
156
|
-
"custom_cpu_cores": 0,
|
|
157
|
-
"custom_gb_memory": 0,
|
|
158
|
-
"keep_alive_time_seconds": 0,
|
|
159
|
-
"launch_commands": ["string"],
|
|
160
|
-
"resource_size_request": "X_SMALL",
|
|
161
|
-
"user_parameters": {
|
|
162
|
-
"uid": 0,
|
|
163
|
-
"username": "username",
|
|
164
|
-
},
|
|
165
|
-
},
|
|
149
|
+
launch_parameters={},
|
|
166
150
|
)
|
|
167
151
|
print(devbox_view.launch_parameters)
|
|
168
152
|
```
|
|
@@ -35,6 +35,7 @@ Methods:
|
|
|
35
35
|
- <code title="get /v1/benchmarks/runs">client.benchmarks.runs.<a href="./src/runloop_api_client/resources/benchmarks/runs.py">list</a>(\*\*<a href="src/runloop_api_client/types/benchmarks/run_list_params.py">params</a>) -> <a href="./src/runloop_api_client/types/benchmark_run_view.py">SyncBenchmarkRunsCursorIDPage[BenchmarkRunView]</a></code>
|
|
36
36
|
- <code title="post /v1/benchmarks/runs/{id}/cancel">client.benchmarks.runs.<a href="./src/runloop_api_client/resources/benchmarks/runs.py">cancel</a>(id) -> <a href="./src/runloop_api_client/types/benchmark_run_view.py">BenchmarkRunView</a></code>
|
|
37
37
|
- <code title="post /v1/benchmarks/runs/{id}/complete">client.benchmarks.runs.<a href="./src/runloop_api_client/resources/benchmarks/runs.py">complete</a>(id) -> <a href="./src/runloop_api_client/types/benchmark_run_view.py">BenchmarkRunView</a></code>
|
|
38
|
+
- <code title="get /v1/benchmarks/runs/{id}/scenario_runs">client.benchmarks.runs.<a href="./src/runloop_api_client/resources/benchmarks/runs.py">list_scenario_runs</a>(id, \*\*<a href="src/runloop_api_client/types/benchmarks/run_list_scenario_runs_params.py">params</a>) -> <a href="./src/runloop_api_client/types/scenario_run_view.py">SyncBenchmarkRunsCursorIDPage[ScenarioRunView]</a></code>
|
|
38
39
|
|
|
39
40
|
# Blueprints
|
|
40
41
|
|
{runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/src/runloop_api_client/_base_client.py
RENAMED
|
@@ -960,6 +960,9 @@ class SyncAPIClient(BaseClient[httpx.Client, Stream[Any]]):
|
|
|
960
960
|
if self.custom_auth is not None:
|
|
961
961
|
kwargs["auth"] = self.custom_auth
|
|
962
962
|
|
|
963
|
+
if options.follow_redirects is not None:
|
|
964
|
+
kwargs["follow_redirects"] = options.follow_redirects
|
|
965
|
+
|
|
963
966
|
log.debug("Sending HTTP Request: %s %s", request.method, request.url)
|
|
964
967
|
|
|
965
968
|
response = None
|
|
@@ -1460,6 +1463,9 @@ class AsyncAPIClient(BaseClient[httpx.AsyncClient, AsyncStream[Any]]):
|
|
|
1460
1463
|
if self.custom_auth is not None:
|
|
1461
1464
|
kwargs["auth"] = self.custom_auth
|
|
1462
1465
|
|
|
1466
|
+
if options.follow_redirects is not None:
|
|
1467
|
+
kwargs["follow_redirects"] = options.follow_redirects
|
|
1468
|
+
|
|
1463
1469
|
log.debug("Sending HTTP Request: %s %s", request.method, request.url)
|
|
1464
1470
|
|
|
1465
1471
|
response = None
|
|
@@ -737,6 +737,7 @@ class FinalRequestOptionsInput(TypedDict, total=False):
|
|
|
737
737
|
idempotency_key: str
|
|
738
738
|
json_data: Body
|
|
739
739
|
extra_json: AnyMapping
|
|
740
|
+
follow_redirects: bool
|
|
740
741
|
|
|
741
742
|
|
|
742
743
|
@final
|
|
@@ -750,6 +751,7 @@ class FinalRequestOptions(pydantic.BaseModel):
|
|
|
750
751
|
files: Union[HttpxRequestFiles, None] = None
|
|
751
752
|
idempotency_key: Union[str, None] = None
|
|
752
753
|
post_parser: Union[Callable[[Any], Any], NotGiven] = NotGiven()
|
|
754
|
+
follow_redirects: Union[bool, None] = None
|
|
753
755
|
|
|
754
756
|
# It should be noted that we cannot use `json` here as that would override
|
|
755
757
|
# a BaseModel method in an incompatible fashion.
|
|
@@ -100,6 +100,7 @@ class RequestOptions(TypedDict, total=False):
|
|
|
100
100
|
params: Query
|
|
101
101
|
extra_json: AnyMapping
|
|
102
102
|
idempotency_key: str
|
|
103
|
+
follow_redirects: bool
|
|
103
104
|
|
|
104
105
|
|
|
105
106
|
# Sentinel class used until PEP 0661 is accepted
|
|
@@ -215,3 +216,4 @@ class _GenericAlias(Protocol):
|
|
|
215
216
|
|
|
216
217
|
class HttpxSendArgs(TypedDict, total=False):
|
|
217
218
|
auth: httpx.Auth
|
|
219
|
+
follow_redirects: bool
|
|
@@ -16,7 +16,8 @@ from ..._response import (
|
|
|
16
16
|
)
|
|
17
17
|
from ...pagination import SyncBenchmarkRunsCursorIDPage, AsyncBenchmarkRunsCursorIDPage
|
|
18
18
|
from ..._base_client import AsyncPaginator, make_request_options
|
|
19
|
-
from ...types.benchmarks import run_list_params
|
|
19
|
+
from ...types.benchmarks import run_list_params, run_list_scenario_runs_params
|
|
20
|
+
from ...types.scenario_run_view import ScenarioRunView
|
|
20
21
|
from ...types.benchmark_run_view import BenchmarkRunView
|
|
21
22
|
|
|
22
23
|
__all__ = ["RunsResource", "AsyncRunsResource"]
|
|
@@ -206,6 +207,56 @@ class RunsResource(SyncAPIResource):
|
|
|
206
207
|
cast_to=BenchmarkRunView,
|
|
207
208
|
)
|
|
208
209
|
|
|
210
|
+
def list_scenario_runs(
|
|
211
|
+
self,
|
|
212
|
+
id: str,
|
|
213
|
+
*,
|
|
214
|
+
limit: int | NotGiven = NOT_GIVEN,
|
|
215
|
+
starting_after: str | NotGiven = NOT_GIVEN,
|
|
216
|
+
# Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
|
|
217
|
+
# The extra values given here take precedence over values defined on the client or passed to this method.
|
|
218
|
+
extra_headers: Headers | None = None,
|
|
219
|
+
extra_query: Query | None = None,
|
|
220
|
+
extra_body: Body | None = None,
|
|
221
|
+
timeout: float | httpx.Timeout | None | NotGiven = NOT_GIVEN,
|
|
222
|
+
) -> SyncBenchmarkRunsCursorIDPage[ScenarioRunView]:
|
|
223
|
+
"""
|
|
224
|
+
List started scenario runs for a benchmark run.
|
|
225
|
+
|
|
226
|
+
Args:
|
|
227
|
+
limit: The limit of items to return. Default is 20.
|
|
228
|
+
|
|
229
|
+
starting_after: Load the next page of data starting after the item with the given ID.
|
|
230
|
+
|
|
231
|
+
extra_headers: Send extra headers
|
|
232
|
+
|
|
233
|
+
extra_query: Add additional query parameters to the request
|
|
234
|
+
|
|
235
|
+
extra_body: Add additional JSON properties to the request
|
|
236
|
+
|
|
237
|
+
timeout: Override the client-level default timeout for this request, in seconds
|
|
238
|
+
"""
|
|
239
|
+
if not id:
|
|
240
|
+
raise ValueError(f"Expected a non-empty value for `id` but received {id!r}")
|
|
241
|
+
return self._get_api_list(
|
|
242
|
+
f"/v1/benchmarks/runs/{id}/scenario_runs",
|
|
243
|
+
page=SyncBenchmarkRunsCursorIDPage[ScenarioRunView],
|
|
244
|
+
options=make_request_options(
|
|
245
|
+
extra_headers=extra_headers,
|
|
246
|
+
extra_query=extra_query,
|
|
247
|
+
extra_body=extra_body,
|
|
248
|
+
timeout=timeout,
|
|
249
|
+
query=maybe_transform(
|
|
250
|
+
{
|
|
251
|
+
"limit": limit,
|
|
252
|
+
"starting_after": starting_after,
|
|
253
|
+
},
|
|
254
|
+
run_list_scenario_runs_params.RunListScenarioRunsParams,
|
|
255
|
+
),
|
|
256
|
+
),
|
|
257
|
+
model=ScenarioRunView,
|
|
258
|
+
)
|
|
259
|
+
|
|
209
260
|
|
|
210
261
|
class AsyncRunsResource(AsyncAPIResource):
|
|
211
262
|
@cached_property
|
|
@@ -391,6 +442,56 @@ class AsyncRunsResource(AsyncAPIResource):
|
|
|
391
442
|
cast_to=BenchmarkRunView,
|
|
392
443
|
)
|
|
393
444
|
|
|
445
|
+
def list_scenario_runs(
|
|
446
|
+
self,
|
|
447
|
+
id: str,
|
|
448
|
+
*,
|
|
449
|
+
limit: int | NotGiven = NOT_GIVEN,
|
|
450
|
+
starting_after: str | NotGiven = NOT_GIVEN,
|
|
451
|
+
# Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
|
|
452
|
+
# The extra values given here take precedence over values defined on the client or passed to this method.
|
|
453
|
+
extra_headers: Headers | None = None,
|
|
454
|
+
extra_query: Query | None = None,
|
|
455
|
+
extra_body: Body | None = None,
|
|
456
|
+
timeout: float | httpx.Timeout | None | NotGiven = NOT_GIVEN,
|
|
457
|
+
) -> AsyncPaginator[ScenarioRunView, AsyncBenchmarkRunsCursorIDPage[ScenarioRunView]]:
|
|
458
|
+
"""
|
|
459
|
+
List started scenario runs for a benchmark run.
|
|
460
|
+
|
|
461
|
+
Args:
|
|
462
|
+
limit: The limit of items to return. Default is 20.
|
|
463
|
+
|
|
464
|
+
starting_after: Load the next page of data starting after the item with the given ID.
|
|
465
|
+
|
|
466
|
+
extra_headers: Send extra headers
|
|
467
|
+
|
|
468
|
+
extra_query: Add additional query parameters to the request
|
|
469
|
+
|
|
470
|
+
extra_body: Add additional JSON properties to the request
|
|
471
|
+
|
|
472
|
+
timeout: Override the client-level default timeout for this request, in seconds
|
|
473
|
+
"""
|
|
474
|
+
if not id:
|
|
475
|
+
raise ValueError(f"Expected a non-empty value for `id` but received {id!r}")
|
|
476
|
+
return self._get_api_list(
|
|
477
|
+
f"/v1/benchmarks/runs/{id}/scenario_runs",
|
|
478
|
+
page=AsyncBenchmarkRunsCursorIDPage[ScenarioRunView],
|
|
479
|
+
options=make_request_options(
|
|
480
|
+
extra_headers=extra_headers,
|
|
481
|
+
extra_query=extra_query,
|
|
482
|
+
extra_body=extra_body,
|
|
483
|
+
timeout=timeout,
|
|
484
|
+
query=maybe_transform(
|
|
485
|
+
{
|
|
486
|
+
"limit": limit,
|
|
487
|
+
"starting_after": starting_after,
|
|
488
|
+
},
|
|
489
|
+
run_list_scenario_runs_params.RunListScenarioRunsParams,
|
|
490
|
+
),
|
|
491
|
+
),
|
|
492
|
+
model=ScenarioRunView,
|
|
493
|
+
)
|
|
494
|
+
|
|
394
495
|
|
|
395
496
|
class RunsResourceWithRawResponse:
|
|
396
497
|
def __init__(self, runs: RunsResource) -> None:
|
|
@@ -408,6 +509,9 @@ class RunsResourceWithRawResponse:
|
|
|
408
509
|
self.complete = to_raw_response_wrapper(
|
|
409
510
|
runs.complete,
|
|
410
511
|
)
|
|
512
|
+
self.list_scenario_runs = to_raw_response_wrapper(
|
|
513
|
+
runs.list_scenario_runs,
|
|
514
|
+
)
|
|
411
515
|
|
|
412
516
|
|
|
413
517
|
class AsyncRunsResourceWithRawResponse:
|
|
@@ -426,6 +530,9 @@ class AsyncRunsResourceWithRawResponse:
|
|
|
426
530
|
self.complete = async_to_raw_response_wrapper(
|
|
427
531
|
runs.complete,
|
|
428
532
|
)
|
|
533
|
+
self.list_scenario_runs = async_to_raw_response_wrapper(
|
|
534
|
+
runs.list_scenario_runs,
|
|
535
|
+
)
|
|
429
536
|
|
|
430
537
|
|
|
431
538
|
class RunsResourceWithStreamingResponse:
|
|
@@ -444,6 +551,9 @@ class RunsResourceWithStreamingResponse:
|
|
|
444
551
|
self.complete = to_streamed_response_wrapper(
|
|
445
552
|
runs.complete,
|
|
446
553
|
)
|
|
554
|
+
self.list_scenario_runs = to_streamed_response_wrapper(
|
|
555
|
+
runs.list_scenario_runs,
|
|
556
|
+
)
|
|
447
557
|
|
|
448
558
|
|
|
449
559
|
class AsyncRunsResourceWithStreamingResponse:
|
|
@@ -462,3 +572,6 @@ class AsyncRunsResourceWithStreamingResponse:
|
|
|
462
572
|
self.complete = async_to_streamed_response_wrapper(
|
|
463
573
|
runs.complete,
|
|
464
574
|
)
|
|
575
|
+
self.list_scenario_runs = async_to_streamed_response_wrapper(
|
|
576
|
+
runs.list_scenario_runs,
|
|
577
|
+
)
|
runloop_api_client-0.37.0/src/runloop_api_client/types/benchmarks/run_list_scenario_runs_params.py
ADDED
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
|
|
2
|
+
|
|
3
|
+
from __future__ import annotations
|
|
4
|
+
|
|
5
|
+
from typing_extensions import TypedDict
|
|
6
|
+
|
|
7
|
+
__all__ = ["RunListScenarioRunsParams"]
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
class RunListScenarioRunsParams(TypedDict, total=False):
|
|
11
|
+
limit: int
|
|
12
|
+
"""The limit of items to return. Default is 20."""
|
|
13
|
+
|
|
14
|
+
starting_after: str
|
|
15
|
+
"""Load the next page of data starting after the item with the given ID."""
|
{runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/tests/api_resources/benchmarks/test_runs.py
RENAMED
|
@@ -9,7 +9,7 @@ import pytest
|
|
|
9
9
|
|
|
10
10
|
from tests.utils import assert_matches_type
|
|
11
11
|
from runloop_api_client import Runloop, AsyncRunloop
|
|
12
|
-
from runloop_api_client.types import BenchmarkRunView
|
|
12
|
+
from runloop_api_client.types import ScenarioRunView, BenchmarkRunView
|
|
13
13
|
from runloop_api_client.pagination import SyncBenchmarkRunsCursorIDPage, AsyncBenchmarkRunsCursorIDPage
|
|
14
14
|
|
|
15
15
|
base_url = os.environ.get("TEST_API_BASE_URL", "http://127.0.0.1:4010")
|
|
@@ -166,6 +166,53 @@ class TestRuns:
|
|
|
166
166
|
"",
|
|
167
167
|
)
|
|
168
168
|
|
|
169
|
+
@parametrize
|
|
170
|
+
def test_method_list_scenario_runs(self, client: Runloop) -> None:
|
|
171
|
+
run = client.benchmarks.runs.list_scenario_runs(
|
|
172
|
+
id="id",
|
|
173
|
+
)
|
|
174
|
+
assert_matches_type(SyncBenchmarkRunsCursorIDPage[ScenarioRunView], run, path=["response"])
|
|
175
|
+
|
|
176
|
+
@parametrize
|
|
177
|
+
def test_method_list_scenario_runs_with_all_params(self, client: Runloop) -> None:
|
|
178
|
+
run = client.benchmarks.runs.list_scenario_runs(
|
|
179
|
+
id="id",
|
|
180
|
+
limit=0,
|
|
181
|
+
starting_after="starting_after",
|
|
182
|
+
)
|
|
183
|
+
assert_matches_type(SyncBenchmarkRunsCursorIDPage[ScenarioRunView], run, path=["response"])
|
|
184
|
+
|
|
185
|
+
@parametrize
|
|
186
|
+
def test_raw_response_list_scenario_runs(self, client: Runloop) -> None:
|
|
187
|
+
response = client.benchmarks.runs.with_raw_response.list_scenario_runs(
|
|
188
|
+
id="id",
|
|
189
|
+
)
|
|
190
|
+
|
|
191
|
+
assert response.is_closed is True
|
|
192
|
+
assert response.http_request.headers.get("X-Stainless-Lang") == "python"
|
|
193
|
+
run = response.parse()
|
|
194
|
+
assert_matches_type(SyncBenchmarkRunsCursorIDPage[ScenarioRunView], run, path=["response"])
|
|
195
|
+
|
|
196
|
+
@parametrize
|
|
197
|
+
def test_streaming_response_list_scenario_runs(self, client: Runloop) -> None:
|
|
198
|
+
with client.benchmarks.runs.with_streaming_response.list_scenario_runs(
|
|
199
|
+
id="id",
|
|
200
|
+
) as response:
|
|
201
|
+
assert not response.is_closed
|
|
202
|
+
assert response.http_request.headers.get("X-Stainless-Lang") == "python"
|
|
203
|
+
|
|
204
|
+
run = response.parse()
|
|
205
|
+
assert_matches_type(SyncBenchmarkRunsCursorIDPage[ScenarioRunView], run, path=["response"])
|
|
206
|
+
|
|
207
|
+
assert cast(Any, response.is_closed) is True
|
|
208
|
+
|
|
209
|
+
@parametrize
|
|
210
|
+
def test_path_params_list_scenario_runs(self, client: Runloop) -> None:
|
|
211
|
+
with pytest.raises(ValueError, match=r"Expected a non-empty value for `id` but received ''"):
|
|
212
|
+
client.benchmarks.runs.with_raw_response.list_scenario_runs(
|
|
213
|
+
id="",
|
|
214
|
+
)
|
|
215
|
+
|
|
169
216
|
|
|
170
217
|
class TestAsyncRuns:
|
|
171
218
|
parametrize = pytest.mark.parametrize("async_client", [False, True], indirect=True, ids=["loose", "strict"])
|
|
@@ -317,3 +364,50 @@ class TestAsyncRuns:
|
|
|
317
364
|
await async_client.benchmarks.runs.with_raw_response.complete(
|
|
318
365
|
"",
|
|
319
366
|
)
|
|
367
|
+
|
|
368
|
+
@parametrize
|
|
369
|
+
async def test_method_list_scenario_runs(self, async_client: AsyncRunloop) -> None:
|
|
370
|
+
run = await async_client.benchmarks.runs.list_scenario_runs(
|
|
371
|
+
id="id",
|
|
372
|
+
)
|
|
373
|
+
assert_matches_type(AsyncBenchmarkRunsCursorIDPage[ScenarioRunView], run, path=["response"])
|
|
374
|
+
|
|
375
|
+
@parametrize
|
|
376
|
+
async def test_method_list_scenario_runs_with_all_params(self, async_client: AsyncRunloop) -> None:
|
|
377
|
+
run = await async_client.benchmarks.runs.list_scenario_runs(
|
|
378
|
+
id="id",
|
|
379
|
+
limit=0,
|
|
380
|
+
starting_after="starting_after",
|
|
381
|
+
)
|
|
382
|
+
assert_matches_type(AsyncBenchmarkRunsCursorIDPage[ScenarioRunView], run, path=["response"])
|
|
383
|
+
|
|
384
|
+
@parametrize
|
|
385
|
+
async def test_raw_response_list_scenario_runs(self, async_client: AsyncRunloop) -> None:
|
|
386
|
+
response = await async_client.benchmarks.runs.with_raw_response.list_scenario_runs(
|
|
387
|
+
id="id",
|
|
388
|
+
)
|
|
389
|
+
|
|
390
|
+
assert response.is_closed is True
|
|
391
|
+
assert response.http_request.headers.get("X-Stainless-Lang") == "python"
|
|
392
|
+
run = await response.parse()
|
|
393
|
+
assert_matches_type(AsyncBenchmarkRunsCursorIDPage[ScenarioRunView], run, path=["response"])
|
|
394
|
+
|
|
395
|
+
@parametrize
|
|
396
|
+
async def test_streaming_response_list_scenario_runs(self, async_client: AsyncRunloop) -> None:
|
|
397
|
+
async with async_client.benchmarks.runs.with_streaming_response.list_scenario_runs(
|
|
398
|
+
id="id",
|
|
399
|
+
) as response:
|
|
400
|
+
assert not response.is_closed
|
|
401
|
+
assert response.http_request.headers.get("X-Stainless-Lang") == "python"
|
|
402
|
+
|
|
403
|
+
run = await response.parse()
|
|
404
|
+
assert_matches_type(AsyncBenchmarkRunsCursorIDPage[ScenarioRunView], run, path=["response"])
|
|
405
|
+
|
|
406
|
+
assert cast(Any, response.is_closed) is True
|
|
407
|
+
|
|
408
|
+
@parametrize
|
|
409
|
+
async def test_path_params_list_scenario_runs(self, async_client: AsyncRunloop) -> None:
|
|
410
|
+
with pytest.raises(ValueError, match=r"Expected a non-empty value for `id` but received ''"):
|
|
411
|
+
await async_client.benchmarks.runs.with_raw_response.list_scenario_runs(
|
|
412
|
+
id="",
|
|
413
|
+
)
|
|
@@ -873,6 +873,33 @@ class TestRunloop:
|
|
|
873
873
|
|
|
874
874
|
assert response.http_request.headers.get("x-stainless-retry-count") == "42"
|
|
875
875
|
|
|
876
|
+
@pytest.mark.respx(base_url=base_url)
|
|
877
|
+
def test_follow_redirects(self, respx_mock: MockRouter) -> None:
|
|
878
|
+
# Test that the default follow_redirects=True allows following redirects
|
|
879
|
+
respx_mock.post("/redirect").mock(
|
|
880
|
+
return_value=httpx.Response(302, headers={"Location": f"{base_url}/redirected"})
|
|
881
|
+
)
|
|
882
|
+
respx_mock.get("/redirected").mock(return_value=httpx.Response(200, json={"status": "ok"}))
|
|
883
|
+
|
|
884
|
+
response = self.client.post("/redirect", body={"key": "value"}, cast_to=httpx.Response)
|
|
885
|
+
assert response.status_code == 200
|
|
886
|
+
assert response.json() == {"status": "ok"}
|
|
887
|
+
|
|
888
|
+
@pytest.mark.respx(base_url=base_url)
|
|
889
|
+
def test_follow_redirects_disabled(self, respx_mock: MockRouter) -> None:
|
|
890
|
+
# Test that follow_redirects=False prevents following redirects
|
|
891
|
+
respx_mock.post("/redirect").mock(
|
|
892
|
+
return_value=httpx.Response(302, headers={"Location": f"{base_url}/redirected"})
|
|
893
|
+
)
|
|
894
|
+
|
|
895
|
+
with pytest.raises(APIStatusError) as exc_info:
|
|
896
|
+
self.client.post(
|
|
897
|
+
"/redirect", body={"key": "value"}, options={"follow_redirects": False}, cast_to=httpx.Response
|
|
898
|
+
)
|
|
899
|
+
|
|
900
|
+
assert exc_info.value.response.status_code == 302
|
|
901
|
+
assert exc_info.value.response.headers["Location"] == f"{base_url}/redirected"
|
|
902
|
+
|
|
876
903
|
|
|
877
904
|
class TestAsyncRunloop:
|
|
878
905
|
client = AsyncRunloop(base_url=base_url, bearer_token=bearer_token, _strict_response_validation=True)
|
|
@@ -1741,3 +1768,30 @@ class TestAsyncRunloop:
|
|
|
1741
1768
|
raise AssertionError("calling get_platform using asyncify resulted in a hung process")
|
|
1742
1769
|
|
|
1743
1770
|
time.sleep(0.1)
|
|
1771
|
+
|
|
1772
|
+
@pytest.mark.respx(base_url=base_url)
|
|
1773
|
+
async def test_follow_redirects(self, respx_mock: MockRouter) -> None:
|
|
1774
|
+
# Test that the default follow_redirects=True allows following redirects
|
|
1775
|
+
respx_mock.post("/redirect").mock(
|
|
1776
|
+
return_value=httpx.Response(302, headers={"Location": f"{base_url}/redirected"})
|
|
1777
|
+
)
|
|
1778
|
+
respx_mock.get("/redirected").mock(return_value=httpx.Response(200, json={"status": "ok"}))
|
|
1779
|
+
|
|
1780
|
+
response = await self.client.post("/redirect", body={"key": "value"}, cast_to=httpx.Response)
|
|
1781
|
+
assert response.status_code == 200
|
|
1782
|
+
assert response.json() == {"status": "ok"}
|
|
1783
|
+
|
|
1784
|
+
@pytest.mark.respx(base_url=base_url)
|
|
1785
|
+
async def test_follow_redirects_disabled(self, respx_mock: MockRouter) -> None:
|
|
1786
|
+
# Test that follow_redirects=False prevents following redirects
|
|
1787
|
+
respx_mock.post("/redirect").mock(
|
|
1788
|
+
return_value=httpx.Response(302, headers={"Location": f"{base_url}/redirected"})
|
|
1789
|
+
)
|
|
1790
|
+
|
|
1791
|
+
with pytest.raises(APIStatusError) as exc_info:
|
|
1792
|
+
await self.client.post(
|
|
1793
|
+
"/redirect", body={"key": "value"}, options={"follow_redirects": False}, cast_to=httpx.Response
|
|
1794
|
+
)
|
|
1795
|
+
|
|
1796
|
+
assert exc_info.value.response.status_code == 302
|
|
1797
|
+
assert exc_info.value.response.headers["Location"] == f"{base_url}/redirected"
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/src/runloop_api_client/_constants.py
RENAMED
|
File without changes
|
{runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/src/runloop_api_client/_exceptions.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/src/runloop_api_client/_streaming.py
RENAMED
|
File without changes
|
{runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/src/runloop_api_client/_utils/__init__.py
RENAMED
|
File without changes
|
{runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/src/runloop_api_client/_utils/_logs.py
RENAMED
|
File without changes
|
{runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/src/runloop_api_client/_utils/_proxy.py
RENAMED
|
File without changes
|
{runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/src/runloop_api_client/_utils/_reflection.py
RENAMED
|
File without changes
|
|
File without changes
|
{runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/src/runloop_api_client/_utils/_streams.py
RENAMED
|
File without changes
|
{runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/src/runloop_api_client/_utils/_sync.py
RENAMED
|
File without changes
|
{runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/src/runloop_api_client/_utils/_transform.py
RENAMED
|
File without changes
|
{runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/src/runloop_api_client/_utils/_typing.py
RENAMED
|
File without changes
|
{runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/src/runloop_api_client/_utils/_utils.py
RENAMED
|
File without changes
|
|
File without changes
|
{runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/src/runloop_api_client/lib/polling.py
RENAMED
|
File without changes
|
{runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/src/runloop_api_client/lib/polling_async.py
RENAMED
|
File without changes
|
{runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/src/runloop_api_client/pagination.py
RENAMED
|
File without changes
|
|
File without changes
|
{runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/src/runloop_api_client/resources/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|