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.
Files changed (277) hide show
  1. runloop_api_client-0.37.0/.release-please-manifest.json +3 -0
  2. {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/CHANGELOG.md +15 -0
  3. {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/CONTRIBUTING.md +1 -2
  4. {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/PKG-INFO +2 -18
  5. {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/README.md +1 -17
  6. {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/api.md +1 -0
  7. {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/pyproject.toml +1 -1
  8. {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/src/runloop_api_client/_base_client.py +6 -0
  9. {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/src/runloop_api_client/_models.py +2 -0
  10. {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/src/runloop_api_client/_types.py +2 -0
  11. {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/src/runloop_api_client/_version.py +1 -1
  12. {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/src/runloop_api_client/resources/benchmarks/runs.py +114 -1
  13. {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/src/runloop_api_client/types/benchmarks/__init__.py +1 -0
  14. runloop_api_client-0.37.0/src/runloop_api_client/types/benchmarks/run_list_scenario_runs_params.py +15 -0
  15. {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/tests/api_resources/benchmarks/test_runs.py +95 -1
  16. {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/tests/test_client.py +54 -0
  17. runloop_api_client-0.36.0/.release-please-manifest.json +0 -3
  18. {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/.gitignore +0 -0
  19. {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/LICENSE +0 -0
  20. {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/SECURITY.md +0 -0
  21. {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/bin/check-release-environment +0 -0
  22. {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/bin/publish-pypi +0 -0
  23. {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/examples/.keep +0 -0
  24. {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/mypy.ini +0 -0
  25. {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/noxfile.py +0 -0
  26. {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/release-please-config.json +0 -0
  27. {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/requirements-dev.lock +0 -0
  28. {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/requirements.lock +0 -0
  29. {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/src/runloop/lib/.keep +0 -0
  30. {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/src/runloop_api_client/__init__.py +0 -0
  31. {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/src/runloop_api_client/_client.py +0 -0
  32. {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/src/runloop_api_client/_compat.py +0 -0
  33. {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/src/runloop_api_client/_constants.py +0 -0
  34. {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/src/runloop_api_client/_exceptions.py +0 -0
  35. {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/src/runloop_api_client/_files.py +0 -0
  36. {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/src/runloop_api_client/_qs.py +0 -0
  37. {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/src/runloop_api_client/_resource.py +0 -0
  38. {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/src/runloop_api_client/_response.py +0 -0
  39. {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/src/runloop_api_client/_streaming.py +0 -0
  40. {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/src/runloop_api_client/_utils/__init__.py +0 -0
  41. {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/src/runloop_api_client/_utils/_logs.py +0 -0
  42. {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/src/runloop_api_client/_utils/_proxy.py +0 -0
  43. {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/src/runloop_api_client/_utils/_reflection.py +0 -0
  44. {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/src/runloop_api_client/_utils/_resources_proxy.py +0 -0
  45. {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/src/runloop_api_client/_utils/_streams.py +0 -0
  46. {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/src/runloop_api_client/_utils/_sync.py +0 -0
  47. {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/src/runloop_api_client/_utils/_transform.py +0 -0
  48. {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/src/runloop_api_client/_utils/_typing.py +0 -0
  49. {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/src/runloop_api_client/_utils/_utils.py +0 -0
  50. {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/src/runloop_api_client/lib/.keep +0 -0
  51. {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/src/runloop_api_client/lib/polling.py +0 -0
  52. {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/src/runloop_api_client/lib/polling_async.py +0 -0
  53. {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/src/runloop_api_client/pagination.py +0 -0
  54. {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/src/runloop_api_client/py.typed +0 -0
  55. {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/src/runloop_api_client/resources/__init__.py +0 -0
  56. {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/src/runloop_api_client/resources/benchmarks/__init__.py +0 -0
  57. {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/src/runloop_api_client/resources/benchmarks/benchmarks.py +0 -0
  58. {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/src/runloop_api_client/resources/blueprints.py +0 -0
  59. {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/src/runloop_api_client/resources/devboxes/__init__.py +0 -0
  60. {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/src/runloop_api_client/resources/devboxes/browsers.py +0 -0
  61. {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/src/runloop_api_client/resources/devboxes/computers.py +0 -0
  62. {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/src/runloop_api_client/resources/devboxes/devboxes.py +0 -0
  63. {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/src/runloop_api_client/resources/devboxes/disk_snapshots.py +0 -0
  64. {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/src/runloop_api_client/resources/devboxes/executions.py +0 -0
  65. {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/src/runloop_api_client/resources/devboxes/logs.py +0 -0
  66. {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/src/runloop_api_client/resources/devboxes/lsp.py +0 -0
  67. {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/src/runloop_api_client/resources/repositories.py +0 -0
  68. {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/src/runloop_api_client/resources/scenarios/__init__.py +0 -0
  69. {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/src/runloop_api_client/resources/scenarios/runs.py +0 -0
  70. {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/src/runloop_api_client/resources/scenarios/scenarios.py +0 -0
  71. {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/src/runloop_api_client/resources/scenarios/scorers.py +0 -0
  72. {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/src/runloop_api_client/types/__init__.py +0 -0
  73. {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/src/runloop_api_client/types/benchmark_create_params.py +0 -0
  74. {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/src/runloop_api_client/types/benchmark_list_params.py +0 -0
  75. {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/src/runloop_api_client/types/benchmark_list_public_params.py +0 -0
  76. {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/src/runloop_api_client/types/benchmark_run_list_view.py +0 -0
  77. {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/src/runloop_api_client/types/benchmark_run_view.py +0 -0
  78. {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/src/runloop_api_client/types/benchmark_start_run_params.py +0 -0
  79. {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/src/runloop_api_client/types/benchmark_update_params.py +0 -0
  80. {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/src/runloop_api_client/types/benchmark_view.py +0 -0
  81. {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/src/runloop_api_client/types/benchmarks/run_list_params.py +0 -0
  82. {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/src/runloop_api_client/types/blueprint_build_log.py +0 -0
  83. {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
  84. {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/src/runloop_api_client/types/blueprint_build_parameters.py +0 -0
  85. {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/src/runloop_api_client/types/blueprint_create_params.py +0 -0
  86. {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/src/runloop_api_client/types/blueprint_list_params.py +0 -0
  87. {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/src/runloop_api_client/types/blueprint_list_view.py +0 -0
  88. {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/src/runloop_api_client/types/blueprint_preview_params.py +0 -0
  89. {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/src/runloop_api_client/types/blueprint_preview_view.py +0 -0
  90. {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/src/runloop_api_client/types/blueprint_view.py +0 -0
  91. {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
  92. {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/src/runloop_api_client/types/devbox_create_params.py +0 -0
  93. {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
  94. {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/src/runloop_api_client/types/devbox_create_tunnel_params.py +0 -0
  95. {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/src/runloop_api_client/types/devbox_download_file_params.py +0 -0
  96. {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/src/runloop_api_client/types/devbox_execute_async_params.py +0 -0
  97. {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/src/runloop_api_client/types/devbox_execute_sync_params.py +0 -0
  98. {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/src/runloop_api_client/types/devbox_execution_detail_view.py +0 -0
  99. {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
  100. {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/src/runloop_api_client/types/devbox_list_params.py +0 -0
  101. {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/src/runloop_api_client/types/devbox_list_view.py +0 -0
  102. {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
  103. {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
  104. {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/src/runloop_api_client/types/devbox_remove_tunnel_params.py +0 -0
  105. {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
  106. {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/src/runloop_api_client/types/devbox_snapshot_disk_params.py +0 -0
  107. {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/src/runloop_api_client/types/devbox_snapshot_list_view.py +0 -0
  108. {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/src/runloop_api_client/types/devbox_snapshot_view.py +0 -0
  109. {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/src/runloop_api_client/types/devbox_tunnel_view.py +0 -0
  110. {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/src/runloop_api_client/types/devbox_update_params.py +0 -0
  111. {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/src/runloop_api_client/types/devbox_upload_file_params.py +0 -0
  112. {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/src/runloop_api_client/types/devbox_view.py +0 -0
  113. {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
  114. {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/src/runloop_api_client/types/devboxes/__init__.py +0 -0
  115. {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/src/runloop_api_client/types/devboxes/base_code_action.py +0 -0
  116. {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/src/runloop_api_client/types/devboxes/base_command.py +0 -0
  117. {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/src/runloop_api_client/types/devboxes/base_command_param.py +0 -0
  118. {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/src/runloop_api_client/types/devboxes/base_diagnostic.py +0 -0
  119. {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/src/runloop_api_client/types/devboxes/base_diagnostic_param.py +0 -0
  120. {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/src/runloop_api_client/types/devboxes/base_location.py +0 -0
  121. {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/src/runloop_api_client/types/devboxes/base_markup_content.py +0 -0
  122. {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/src/runloop_api_client/types/devboxes/base_parameter_information.py +0 -0
  123. {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/src/runloop_api_client/types/devboxes/base_range.py +0 -0
  124. {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/src/runloop_api_client/types/devboxes/base_range_param.py +0 -0
  125. {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/src/runloop_api_client/types/devboxes/base_signature.py +0 -0
  126. {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/src/runloop_api_client/types/devboxes/base_workspace_edit.py +0 -0
  127. {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
  128. {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/src/runloop_api_client/types/devboxes/browser_create_params.py +0 -0
  129. {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/src/runloop_api_client/types/devboxes/browser_view.py +0 -0
  130. {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
  131. {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
  132. {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/src/runloop_api_client/types/devboxes/code_action_kind.py +0 -0
  133. {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
  134. {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/src/runloop_api_client/types/devboxes/code_actions_response.py +0 -0
  135. {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/src/runloop_api_client/types/devboxes/code_description_param.py +0 -0
  136. {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
  137. {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/src/runloop_api_client/types/devboxes/computer_create_params.py +0 -0
  138. {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
  139. {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
  140. {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
  141. {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
  142. {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
  143. {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
  144. {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/src/runloop_api_client/types/devboxes/computer_view.py +0 -0
  145. {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
  146. {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
  147. {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/src/runloop_api_client/types/devboxes/diagnostic_param.py +0 -0
  148. {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
  149. {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/src/runloop_api_client/types/devboxes/diagnostic_severity.py +0 -0
  150. {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/src/runloop_api_client/types/devboxes/diagnostic_tag.py +0 -0
  151. {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/src/runloop_api_client/types/devboxes/diagnostics_response.py +0 -0
  152. {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
  153. {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
  154. {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/src/runloop_api_client/types/devboxes/document_symbol.py +0 -0
  155. {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/src/runloop_api_client/types/devboxes/document_symbol_response.py +0 -0
  156. {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/src/runloop_api_client/types/devboxes/document_uri.py +0 -0
  157. {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
  158. {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
  159. {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/src/runloop_api_client/types/devboxes/execution_retrieve_params.py +0 -0
  160. {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/src/runloop_api_client/types/devboxes/file_contents_response.py +0 -0
  161. {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/src/runloop_api_client/types/devboxes/file_definition_response.py +0 -0
  162. {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/src/runloop_api_client/types/devboxes/file_path.py +0 -0
  163. {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/src/runloop_api_client/types/devboxes/file_uri.py +0 -0
  164. {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/src/runloop_api_client/types/devboxes/formatting_response.py +0 -0
  165. {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/src/runloop_api_client/types/devboxes/health_status_response.py +0 -0
  166. {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/src/runloop_api_client/types/devboxes/integer.py +0 -0
  167. {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
  168. {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/src/runloop_api_client/types/devboxes/location_param.py +0 -0
  169. {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/src/runloop_api_client/types/devboxes/log_list_params.py +0 -0
  170. {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
  171. {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
  172. {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/src/runloop_api_client/types/devboxes/lsp_diagnostics_params.py +0 -0
  173. {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
  174. {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
  175. {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/src/runloop_api_client/types/devboxes/lsp_file_params.py +0 -0
  176. {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/src/runloop_api_client/types/devboxes/lsp_files_response.py +0 -0
  177. {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/src/runloop_api_client/types/devboxes/lsp_formatting_params.py +0 -0
  178. {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
  179. {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
  180. {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
  181. {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
  182. {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/src/runloop_api_client/types/devboxes/lsp_references_params.py +0 -0
  183. {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
  184. {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
  185. {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/src/runloop_api_client/types/devboxes/position.py +0 -0
  186. {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/src/runloop_api_client/types/devboxes/position_param.py +0 -0
  187. {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/src/runloop_api_client/types/devboxes/range.py +0 -0
  188. {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/src/runloop_api_client/types/devboxes/range_param.py +0 -0
  189. {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
  190. {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
  191. {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/src/runloop_api_client/types/devboxes/references_response.py +0 -0
  192. {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/src/runloop_api_client/types/devboxes/signature_help_response.py +0 -0
  193. {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/src/runloop_api_client/types/devboxes/symbol_kind.py +0 -0
  194. {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/src/runloop_api_client/types/devboxes/symbol_tag.py +0 -0
  195. {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/src/runloop_api_client/types/devboxes/symbol_type.py +0 -0
  196. {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/src/runloop_api_client/types/devboxes/text_edit.py +0 -0
  197. {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/src/runloop_api_client/types/devboxes/text_edit_param.py +0 -0
  198. {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/src/runloop_api_client/types/devboxes/u_ri.py +0 -0
  199. {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/src/runloop_api_client/types/devboxes/uinteger.py +0 -0
  200. {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/src/runloop_api_client/types/devboxes/watched_file_response.py +0 -0
  201. {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/src/runloop_api_client/types/input_context.py +0 -0
  202. {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/src/runloop_api_client/types/input_context_param.py +0 -0
  203. {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/src/runloop_api_client/types/repository_connection_list_view.py +0 -0
  204. {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/src/runloop_api_client/types/repository_connection_view.py +0 -0
  205. {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/src/runloop_api_client/types/repository_create_params.py +0 -0
  206. {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/src/runloop_api_client/types/repository_inspection_details.py +0 -0
  207. {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/src/runloop_api_client/types/repository_inspection_list_view.py +0 -0
  208. {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/src/runloop_api_client/types/repository_list_params.py +0 -0
  209. {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/src/runloop_api_client/types/repository_manifest_view.py +0 -0
  210. {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/src/runloop_api_client/types/scenario_create_params.py +0 -0
  211. {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/src/runloop_api_client/types/scenario_environment.py +0 -0
  212. {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/src/runloop_api_client/types/scenario_environment_param.py +0 -0
  213. {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/src/runloop_api_client/types/scenario_list_params.py +0 -0
  214. {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/src/runloop_api_client/types/scenario_list_public_params.py +0 -0
  215. {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/src/runloop_api_client/types/scenario_run_list_view.py +0 -0
  216. {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/src/runloop_api_client/types/scenario_run_view.py +0 -0
  217. {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/src/runloop_api_client/types/scenario_start_run_params.py +0 -0
  218. {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/src/runloop_api_client/types/scenario_update_params.py +0 -0
  219. {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/src/runloop_api_client/types/scenario_view.py +0 -0
  220. {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/src/runloop_api_client/types/scenarios/__init__.py +0 -0
  221. {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/src/runloop_api_client/types/scenarios/run_list_params.py +0 -0
  222. {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/src/runloop_api_client/types/scenarios/scorer_create_params.py +0 -0
  223. {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/src/runloop_api_client/types/scenarios/scorer_create_response.py +0 -0
  224. {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/src/runloop_api_client/types/scenarios/scorer_list_params.py +0 -0
  225. {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/src/runloop_api_client/types/scenarios/scorer_list_response.py +0 -0
  226. {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/src/runloop_api_client/types/scenarios/scorer_retrieve_response.py +0 -0
  227. {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/src/runloop_api_client/types/scenarios/scorer_update_params.py +0 -0
  228. {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/src/runloop_api_client/types/scenarios/scorer_update_response.py +0 -0
  229. {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/src/runloop_api_client/types/scenarios/scorer_validate_params.py +0 -0
  230. {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/src/runloop_api_client/types/scenarios/scorer_validate_response.py +0 -0
  231. {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/src/runloop_api_client/types/scoring_contract.py +0 -0
  232. {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/src/runloop_api_client/types/scoring_contract_param.py +0 -0
  233. {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/src/runloop_api_client/types/scoring_contract_result_view.py +0 -0
  234. {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/src/runloop_api_client/types/scoring_function.py +0 -0
  235. {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/src/runloop_api_client/types/scoring_function_param.py +0 -0
  236. {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/src/runloop_api_client/types/scoring_function_result_view.py +0 -0
  237. {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/src/runloop_api_client/types/shared/__init__.py +0 -0
  238. {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/src/runloop_api_client/types/shared/after_idle.py +0 -0
  239. {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/src/runloop_api_client/types/shared/code_mount_parameters.py +0 -0
  240. {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/src/runloop_api_client/types/shared/launch_parameters.py +0 -0
  241. {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/src/runloop_api_client/types/shared_params/__init__.py +0 -0
  242. {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/src/runloop_api_client/types/shared_params/after_idle.py +0 -0
  243. {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
  244. {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/src/runloop_api_client/types/shared_params/launch_parameters.py +0 -0
  245. {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/tests/__init__.py +0 -0
  246. {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/tests/api_resources/__init__.py +0 -0
  247. {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/tests/api_resources/benchmarks/__init__.py +0 -0
  248. {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/tests/api_resources/devboxes/__init__.py +0 -0
  249. {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/tests/api_resources/devboxes/test_browsers.py +0 -0
  250. {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/tests/api_resources/devboxes/test_computers.py +0 -0
  251. {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/tests/api_resources/devboxes/test_disk_snapshots.py +0 -0
  252. {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/tests/api_resources/devboxes/test_executions.py +0 -0
  253. {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/tests/api_resources/devboxes/test_logs.py +0 -0
  254. {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/tests/api_resources/devboxes/test_lsp.py +0 -0
  255. {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/tests/api_resources/scenarios/__init__.py +0 -0
  256. {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/tests/api_resources/scenarios/test_runs.py +0 -0
  257. {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/tests/api_resources/scenarios/test_scorers.py +0 -0
  258. {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/tests/api_resources/test_benchmarks.py +0 -0
  259. {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/tests/api_resources/test_blueprints.py +0 -0
  260. {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/tests/api_resources/test_devboxes.py +0 -0
  261. {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/tests/api_resources/test_repositories.py +0 -0
  262. {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/tests/api_resources/test_scenarios.py +0 -0
  263. {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/tests/conftest.py +0 -0
  264. {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/tests/sample_file.txt +0 -0
  265. {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/tests/test_deepcopy.py +0 -0
  266. {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/tests/test_extract_files.py +0 -0
  267. {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/tests/test_files.py +0 -0
  268. {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/tests/test_models.py +0 -0
  269. {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/tests/test_qs.py +0 -0
  270. {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/tests/test_required_args.py +0 -0
  271. {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/tests/test_response.py +0 -0
  272. {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/tests/test_streaming.py +0 -0
  273. {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/tests/test_transform.py +0 -0
  274. {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/tests/test_utils/test_proxy.py +0 -0
  275. {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/tests/test_utils/test_typing.py +0 -0
  276. {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/tests/utils.py +0 -0
  277. {runloop_api_client-0.36.0 → runloop_api_client-0.37.0}/uv.lock +0 -0
@@ -0,0 +1,3 @@
1
+ {
2
+ ".": "0.37.0"
3
+ }
@@ -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
- $ rye shell
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.36.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
 
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "runloop_api_client"
3
- version = "0.36.0"
3
+ version = "0.37.0"
4
4
  description = "The official Python library for the runloop API"
5
5
  dynamic = ["readme"]
6
6
  license = "MIT"
@@ -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
@@ -1,4 +1,4 @@
1
1
  # File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
2
2
 
3
3
  __title__ = "runloop_api_client"
4
- __version__ = "0.36.0" # x-release-please-version
4
+ __version__ = "0.37.0" # x-release-please-version
@@ -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
+ )
@@ -3,3 +3,4 @@
3
3
  from __future__ import annotations
4
4
 
5
5
  from .run_list_params import RunListParams as RunListParams
6
+ from .run_list_scenario_runs_params import RunListScenarioRunsParams as RunListScenarioRunsParams
@@ -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."""
@@ -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"
@@ -1,3 +0,0 @@
1
- {
2
- ".": "0.36.0"
3
- }