runloop-api-client 0.46.0__tar.gz → 0.47.1__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (288) hide show
  1. runloop_api_client-0.47.1/.release-please-manifest.json +3 -0
  2. {runloop_api_client-0.46.0 → runloop_api_client-0.47.1}/CHANGELOG.md +17 -0
  3. {runloop_api_client-0.46.0 → runloop_api_client-0.47.1}/PKG-INFO +2 -2
  4. {runloop_api_client-0.46.0 → runloop_api_client-0.47.1}/README.md +1 -1
  5. {runloop_api_client-0.46.0 → runloop_api_client-0.47.1}/pyproject.toml +1 -1
  6. {runloop_api_client-0.46.0 → runloop_api_client-0.47.1}/requirements-dev.lock +1 -1
  7. {runloop_api_client-0.46.0 → runloop_api_client-0.47.1}/requirements.lock +1 -1
  8. {runloop_api_client-0.46.0 → runloop_api_client-0.47.1}/src/runloop_api_client/_constants.py +2 -2
  9. {runloop_api_client-0.46.0 → runloop_api_client-0.47.1}/src/runloop_api_client/_version.py +1 -1
  10. {runloop_api_client-0.46.0 → runloop_api_client-0.47.1}/src/runloop_api_client/lib/polling.py +10 -1
  11. {runloop_api_client-0.46.0 → runloop_api_client-0.47.1}/src/runloop_api_client/lib/polling_async.py +10 -1
  12. {runloop_api_client-0.46.0 → runloop_api_client-0.47.1}/src/runloop_api_client/resources/devboxes/devboxes.py +69 -30
  13. {runloop_api_client-0.46.0 → runloop_api_client-0.47.1}/src/runloop_api_client/resources/devboxes/executions.py +2 -4
  14. {runloop_api_client-0.46.0 → runloop_api_client-0.47.1}/tests/test_client.py +4 -4
  15. runloop_api_client-0.46.0/.release-please-manifest.json +0 -3
  16. {runloop_api_client-0.46.0 → runloop_api_client-0.47.1}/.gitignore +0 -0
  17. {runloop_api_client-0.46.0 → runloop_api_client-0.47.1}/CONTRIBUTING.md +0 -0
  18. {runloop_api_client-0.46.0 → runloop_api_client-0.47.1}/LICENSE +0 -0
  19. {runloop_api_client-0.46.0 → runloop_api_client-0.47.1}/SECURITY.md +0 -0
  20. {runloop_api_client-0.46.0 → runloop_api_client-0.47.1}/api.md +0 -0
  21. {runloop_api_client-0.46.0 → runloop_api_client-0.47.1}/bin/check-release-environment +0 -0
  22. {runloop_api_client-0.46.0 → runloop_api_client-0.47.1}/bin/publish-pypi +0 -0
  23. {runloop_api_client-0.46.0 → runloop_api_client-0.47.1}/examples/.keep +0 -0
  24. {runloop_api_client-0.46.0 → runloop_api_client-0.47.1}/mypy.ini +0 -0
  25. {runloop_api_client-0.46.0 → runloop_api_client-0.47.1}/noxfile.py +0 -0
  26. {runloop_api_client-0.46.0 → runloop_api_client-0.47.1}/release-please-config.json +0 -0
  27. {runloop_api_client-0.46.0 → runloop_api_client-0.47.1}/src/runloop/lib/.keep +0 -0
  28. {runloop_api_client-0.46.0 → runloop_api_client-0.47.1}/src/runloop_api_client/__init__.py +0 -0
  29. {runloop_api_client-0.46.0 → runloop_api_client-0.47.1}/src/runloop_api_client/_base_client.py +0 -0
  30. {runloop_api_client-0.46.0 → runloop_api_client-0.47.1}/src/runloop_api_client/_client.py +0 -0
  31. {runloop_api_client-0.46.0 → runloop_api_client-0.47.1}/src/runloop_api_client/_compat.py +0 -0
  32. {runloop_api_client-0.46.0 → runloop_api_client-0.47.1}/src/runloop_api_client/_exceptions.py +0 -0
  33. {runloop_api_client-0.46.0 → runloop_api_client-0.47.1}/src/runloop_api_client/_files.py +0 -0
  34. {runloop_api_client-0.46.0 → runloop_api_client-0.47.1}/src/runloop_api_client/_models.py +0 -0
  35. {runloop_api_client-0.46.0 → runloop_api_client-0.47.1}/src/runloop_api_client/_qs.py +0 -0
  36. {runloop_api_client-0.46.0 → runloop_api_client-0.47.1}/src/runloop_api_client/_resource.py +0 -0
  37. {runloop_api_client-0.46.0 → runloop_api_client-0.47.1}/src/runloop_api_client/_response.py +0 -0
  38. {runloop_api_client-0.46.0 → runloop_api_client-0.47.1}/src/runloop_api_client/_streaming.py +0 -0
  39. {runloop_api_client-0.46.0 → runloop_api_client-0.47.1}/src/runloop_api_client/_types.py +0 -0
  40. {runloop_api_client-0.46.0 → runloop_api_client-0.47.1}/src/runloop_api_client/_utils/__init__.py +0 -0
  41. {runloop_api_client-0.46.0 → runloop_api_client-0.47.1}/src/runloop_api_client/_utils/_logs.py +0 -0
  42. {runloop_api_client-0.46.0 → runloop_api_client-0.47.1}/src/runloop_api_client/_utils/_proxy.py +0 -0
  43. {runloop_api_client-0.46.0 → runloop_api_client-0.47.1}/src/runloop_api_client/_utils/_reflection.py +0 -0
  44. {runloop_api_client-0.46.0 → runloop_api_client-0.47.1}/src/runloop_api_client/_utils/_resources_proxy.py +0 -0
  45. {runloop_api_client-0.46.0 → runloop_api_client-0.47.1}/src/runloop_api_client/_utils/_streams.py +0 -0
  46. {runloop_api_client-0.46.0 → runloop_api_client-0.47.1}/src/runloop_api_client/_utils/_sync.py +0 -0
  47. {runloop_api_client-0.46.0 → runloop_api_client-0.47.1}/src/runloop_api_client/_utils/_transform.py +0 -0
  48. {runloop_api_client-0.46.0 → runloop_api_client-0.47.1}/src/runloop_api_client/_utils/_typing.py +0 -0
  49. {runloop_api_client-0.46.0 → runloop_api_client-0.47.1}/src/runloop_api_client/_utils/_utils.py +0 -0
  50. {runloop_api_client-0.46.0 → runloop_api_client-0.47.1}/src/runloop_api_client/lib/.keep +0 -0
  51. {runloop_api_client-0.46.0 → runloop_api_client-0.47.1}/src/runloop_api_client/pagination.py +0 -0
  52. {runloop_api_client-0.46.0 → runloop_api_client-0.47.1}/src/runloop_api_client/py.typed +0 -0
  53. {runloop_api_client-0.46.0 → runloop_api_client-0.47.1}/src/runloop_api_client/resources/__init__.py +0 -0
  54. {runloop_api_client-0.46.0 → runloop_api_client-0.47.1}/src/runloop_api_client/resources/benchmarks/__init__.py +0 -0
  55. {runloop_api_client-0.46.0 → runloop_api_client-0.47.1}/src/runloop_api_client/resources/benchmarks/benchmarks.py +0 -0
  56. {runloop_api_client-0.46.0 → runloop_api_client-0.47.1}/src/runloop_api_client/resources/benchmarks/runs.py +0 -0
  57. {runloop_api_client-0.46.0 → runloop_api_client-0.47.1}/src/runloop_api_client/resources/blueprints.py +0 -0
  58. {runloop_api_client-0.46.0 → runloop_api_client-0.47.1}/src/runloop_api_client/resources/devboxes/__init__.py +0 -0
  59. {runloop_api_client-0.46.0 → runloop_api_client-0.47.1}/src/runloop_api_client/resources/devboxes/browsers.py +0 -0
  60. {runloop_api_client-0.46.0 → runloop_api_client-0.47.1}/src/runloop_api_client/resources/devboxes/computers.py +0 -0
  61. {runloop_api_client-0.46.0 → runloop_api_client-0.47.1}/src/runloop_api_client/resources/devboxes/disk_snapshots.py +0 -0
  62. {runloop_api_client-0.46.0 → runloop_api_client-0.47.1}/src/runloop_api_client/resources/devboxes/logs.py +0 -0
  63. {runloop_api_client-0.46.0 → runloop_api_client-0.47.1}/src/runloop_api_client/resources/devboxes/lsp.py +0 -0
  64. {runloop_api_client-0.46.0 → runloop_api_client-0.47.1}/src/runloop_api_client/resources/repositories.py +0 -0
  65. {runloop_api_client-0.46.0 → runloop_api_client-0.47.1}/src/runloop_api_client/resources/scenarios/__init__.py +0 -0
  66. {runloop_api_client-0.46.0 → runloop_api_client-0.47.1}/src/runloop_api_client/resources/scenarios/runs.py +0 -0
  67. {runloop_api_client-0.46.0 → runloop_api_client-0.47.1}/src/runloop_api_client/resources/scenarios/scenarios.py +0 -0
  68. {runloop_api_client-0.46.0 → runloop_api_client-0.47.1}/src/runloop_api_client/resources/scenarios/scorers.py +0 -0
  69. {runloop_api_client-0.46.0 → runloop_api_client-0.47.1}/src/runloop_api_client/resources/secrets.py +0 -0
  70. {runloop_api_client-0.46.0 → runloop_api_client-0.47.1}/src/runloop_api_client/types/__init__.py +0 -0
  71. {runloop_api_client-0.46.0 → runloop_api_client-0.47.1}/src/runloop_api_client/types/benchmark_create_params.py +0 -0
  72. {runloop_api_client-0.46.0 → runloop_api_client-0.47.1}/src/runloop_api_client/types/benchmark_definitions_params.py +0 -0
  73. {runloop_api_client-0.46.0 → runloop_api_client-0.47.1}/src/runloop_api_client/types/benchmark_list_params.py +0 -0
  74. {runloop_api_client-0.46.0 → runloop_api_client-0.47.1}/src/runloop_api_client/types/benchmark_list_public_params.py +0 -0
  75. {runloop_api_client-0.46.0 → runloop_api_client-0.47.1}/src/runloop_api_client/types/benchmark_run_list_view.py +0 -0
  76. {runloop_api_client-0.46.0 → runloop_api_client-0.47.1}/src/runloop_api_client/types/benchmark_run_view.py +0 -0
  77. {runloop_api_client-0.46.0 → runloop_api_client-0.47.1}/src/runloop_api_client/types/benchmark_start_run_params.py +0 -0
  78. {runloop_api_client-0.46.0 → runloop_api_client-0.47.1}/src/runloop_api_client/types/benchmark_update_params.py +0 -0
  79. {runloop_api_client-0.46.0 → runloop_api_client-0.47.1}/src/runloop_api_client/types/benchmark_view.py +0 -0
  80. {runloop_api_client-0.46.0 → runloop_api_client-0.47.1}/src/runloop_api_client/types/benchmarks/__init__.py +0 -0
  81. {runloop_api_client-0.46.0 → runloop_api_client-0.47.1}/src/runloop_api_client/types/benchmarks/run_list_params.py +0 -0
  82. {runloop_api_client-0.46.0 → runloop_api_client-0.47.1}/src/runloop_api_client/types/benchmarks/run_list_scenario_runs_params.py +0 -0
  83. {runloop_api_client-0.46.0 → runloop_api_client-0.47.1}/src/runloop_api_client/types/blueprint_build_log.py +0 -0
  84. {runloop_api_client-0.46.0 → runloop_api_client-0.47.1}/src/runloop_api_client/types/blueprint_build_logs_list_view.py +0 -0
  85. {runloop_api_client-0.46.0 → runloop_api_client-0.47.1}/src/runloop_api_client/types/blueprint_build_parameters.py +0 -0
  86. {runloop_api_client-0.46.0 → runloop_api_client-0.47.1}/src/runloop_api_client/types/blueprint_create_params.py +0 -0
  87. {runloop_api_client-0.46.0 → runloop_api_client-0.47.1}/src/runloop_api_client/types/blueprint_list_params.py +0 -0
  88. {runloop_api_client-0.46.0 → runloop_api_client-0.47.1}/src/runloop_api_client/types/blueprint_list_view.py +0 -0
  89. {runloop_api_client-0.46.0 → runloop_api_client-0.47.1}/src/runloop_api_client/types/blueprint_preview_params.py +0 -0
  90. {runloop_api_client-0.46.0 → runloop_api_client-0.47.1}/src/runloop_api_client/types/blueprint_preview_view.py +0 -0
  91. {runloop_api_client-0.46.0 → runloop_api_client-0.47.1}/src/runloop_api_client/types/blueprint_view.py +0 -0
  92. {runloop_api_client-0.46.0 → runloop_api_client-0.47.1}/src/runloop_api_client/types/devbox_async_execution_detail_view.py +0 -0
  93. {runloop_api_client-0.46.0 → runloop_api_client-0.47.1}/src/runloop_api_client/types/devbox_create_params.py +0 -0
  94. {runloop_api_client-0.46.0 → runloop_api_client-0.47.1}/src/runloop_api_client/types/devbox_create_ssh_key_response.py +0 -0
  95. {runloop_api_client-0.46.0 → runloop_api_client-0.47.1}/src/runloop_api_client/types/devbox_create_tunnel_params.py +0 -0
  96. {runloop_api_client-0.46.0 → runloop_api_client-0.47.1}/src/runloop_api_client/types/devbox_download_file_params.py +0 -0
  97. {runloop_api_client-0.46.0 → runloop_api_client-0.47.1}/src/runloop_api_client/types/devbox_execute_async_params.py +0 -0
  98. {runloop_api_client-0.46.0 → runloop_api_client-0.47.1}/src/runloop_api_client/types/devbox_execute_sync_params.py +0 -0
  99. {runloop_api_client-0.46.0 → runloop_api_client-0.47.1}/src/runloop_api_client/types/devbox_execution_detail_view.py +0 -0
  100. {runloop_api_client-0.46.0 → runloop_api_client-0.47.1}/src/runloop_api_client/types/devbox_list_disk_snapshots_params.py +0 -0
  101. {runloop_api_client-0.46.0 → runloop_api_client-0.47.1}/src/runloop_api_client/types/devbox_list_params.py +0 -0
  102. {runloop_api_client-0.46.0 → runloop_api_client-0.47.1}/src/runloop_api_client/types/devbox_list_view.py +0 -0
  103. {runloop_api_client-0.46.0 → runloop_api_client-0.47.1}/src/runloop_api_client/types/devbox_read_file_contents_params.py +0 -0
  104. {runloop_api_client-0.46.0 → runloop_api_client-0.47.1}/src/runloop_api_client/types/devbox_read_file_contents_response.py +0 -0
  105. {runloop_api_client-0.46.0 → runloop_api_client-0.47.1}/src/runloop_api_client/types/devbox_remove_tunnel_params.py +0 -0
  106. {runloop_api_client-0.46.0 → runloop_api_client-0.47.1}/src/runloop_api_client/types/devbox_snapshot_disk_async_params.py +0 -0
  107. {runloop_api_client-0.46.0 → runloop_api_client-0.47.1}/src/runloop_api_client/types/devbox_snapshot_disk_params.py +0 -0
  108. {runloop_api_client-0.46.0 → runloop_api_client-0.47.1}/src/runloop_api_client/types/devbox_snapshot_list_view.py +0 -0
  109. {runloop_api_client-0.46.0 → runloop_api_client-0.47.1}/src/runloop_api_client/types/devbox_snapshot_view.py +0 -0
  110. {runloop_api_client-0.46.0 → runloop_api_client-0.47.1}/src/runloop_api_client/types/devbox_tunnel_view.py +0 -0
  111. {runloop_api_client-0.46.0 → runloop_api_client-0.47.1}/src/runloop_api_client/types/devbox_update_params.py +0 -0
  112. {runloop_api_client-0.46.0 → runloop_api_client-0.47.1}/src/runloop_api_client/types/devbox_upload_file_params.py +0 -0
  113. {runloop_api_client-0.46.0 → runloop_api_client-0.47.1}/src/runloop_api_client/types/devbox_view.py +0 -0
  114. {runloop_api_client-0.46.0 → runloop_api_client-0.47.1}/src/runloop_api_client/types/devbox_write_file_contents_params.py +0 -0
  115. {runloop_api_client-0.46.0 → runloop_api_client-0.47.1}/src/runloop_api_client/types/devboxes/__init__.py +0 -0
  116. {runloop_api_client-0.46.0 → runloop_api_client-0.47.1}/src/runloop_api_client/types/devboxes/base_code_action.py +0 -0
  117. {runloop_api_client-0.46.0 → runloop_api_client-0.47.1}/src/runloop_api_client/types/devboxes/base_command.py +0 -0
  118. {runloop_api_client-0.46.0 → runloop_api_client-0.47.1}/src/runloop_api_client/types/devboxes/base_command_param.py +0 -0
  119. {runloop_api_client-0.46.0 → runloop_api_client-0.47.1}/src/runloop_api_client/types/devboxes/base_diagnostic.py +0 -0
  120. {runloop_api_client-0.46.0 → runloop_api_client-0.47.1}/src/runloop_api_client/types/devboxes/base_diagnostic_param.py +0 -0
  121. {runloop_api_client-0.46.0 → runloop_api_client-0.47.1}/src/runloop_api_client/types/devboxes/base_location.py +0 -0
  122. {runloop_api_client-0.46.0 → runloop_api_client-0.47.1}/src/runloop_api_client/types/devboxes/base_markup_content.py +0 -0
  123. {runloop_api_client-0.46.0 → runloop_api_client-0.47.1}/src/runloop_api_client/types/devboxes/base_parameter_information.py +0 -0
  124. {runloop_api_client-0.46.0 → runloop_api_client-0.47.1}/src/runloop_api_client/types/devboxes/base_range.py +0 -0
  125. {runloop_api_client-0.46.0 → runloop_api_client-0.47.1}/src/runloop_api_client/types/devboxes/base_range_param.py +0 -0
  126. {runloop_api_client-0.46.0 → runloop_api_client-0.47.1}/src/runloop_api_client/types/devboxes/base_signature.py +0 -0
  127. {runloop_api_client-0.46.0 → runloop_api_client-0.47.1}/src/runloop_api_client/types/devboxes/base_workspace_edit.py +0 -0
  128. {runloop_api_client-0.46.0 → runloop_api_client-0.47.1}/src/runloop_api_client/types/devboxes/base_workspace_edit_param.py +0 -0
  129. {runloop_api_client-0.46.0 → runloop_api_client-0.47.1}/src/runloop_api_client/types/devboxes/browser_create_params.py +0 -0
  130. {runloop_api_client-0.46.0 → runloop_api_client-0.47.1}/src/runloop_api_client/types/devboxes/browser_view.py +0 -0
  131. {runloop_api_client-0.46.0 → runloop_api_client-0.47.1}/src/runloop_api_client/types/devboxes/code_action_application_result.py +0 -0
  132. {runloop_api_client-0.46.0 → runloop_api_client-0.47.1}/src/runloop_api_client/types/devboxes/code_action_context_param.py +0 -0
  133. {runloop_api_client-0.46.0 → runloop_api_client-0.47.1}/src/runloop_api_client/types/devboxes/code_action_kind.py +0 -0
  134. {runloop_api_client-0.46.0 → runloop_api_client-0.47.1}/src/runloop_api_client/types/devboxes/code_action_trigger_kind.py +0 -0
  135. {runloop_api_client-0.46.0 → runloop_api_client-0.47.1}/src/runloop_api_client/types/devboxes/code_actions_response.py +0 -0
  136. {runloop_api_client-0.46.0 → runloop_api_client-0.47.1}/src/runloop_api_client/types/devboxes/code_description_param.py +0 -0
  137. {runloop_api_client-0.46.0 → runloop_api_client-0.47.1}/src/runloop_api_client/types/devboxes/code_segment_info_response.py +0 -0
  138. {runloop_api_client-0.46.0 → runloop_api_client-0.47.1}/src/runloop_api_client/types/devboxes/computer_create_params.py +0 -0
  139. {runloop_api_client-0.46.0 → runloop_api_client-0.47.1}/src/runloop_api_client/types/devboxes/computer_keyboard_interaction_params.py +0 -0
  140. {runloop_api_client-0.46.0 → runloop_api_client-0.47.1}/src/runloop_api_client/types/devboxes/computer_keyboard_interaction_response.py +0 -0
  141. {runloop_api_client-0.46.0 → runloop_api_client-0.47.1}/src/runloop_api_client/types/devboxes/computer_mouse_interaction_params.py +0 -0
  142. {runloop_api_client-0.46.0 → runloop_api_client-0.47.1}/src/runloop_api_client/types/devboxes/computer_mouse_interaction_response.py +0 -0
  143. {runloop_api_client-0.46.0 → runloop_api_client-0.47.1}/src/runloop_api_client/types/devboxes/computer_screen_interaction_params.py +0 -0
  144. {runloop_api_client-0.46.0 → runloop_api_client-0.47.1}/src/runloop_api_client/types/devboxes/computer_screen_interaction_response.py +0 -0
  145. {runloop_api_client-0.46.0 → runloop_api_client-0.47.1}/src/runloop_api_client/types/devboxes/computer_view.py +0 -0
  146. {runloop_api_client-0.46.0 → runloop_api_client-0.47.1}/src/runloop_api_client/types/devboxes/devbox_logs_list_view.py +0 -0
  147. {runloop_api_client-0.46.0 → runloop_api_client-0.47.1}/src/runloop_api_client/types/devboxes/devbox_snapshot_async_status_view.py +0 -0
  148. {runloop_api_client-0.46.0 → runloop_api_client-0.47.1}/src/runloop_api_client/types/devboxes/diagnostic_param.py +0 -0
  149. {runloop_api_client-0.46.0 → runloop_api_client-0.47.1}/src/runloop_api_client/types/devboxes/diagnostic_related_information_param.py +0 -0
  150. {runloop_api_client-0.46.0 → runloop_api_client-0.47.1}/src/runloop_api_client/types/devboxes/diagnostic_severity.py +0 -0
  151. {runloop_api_client-0.46.0 → runloop_api_client-0.47.1}/src/runloop_api_client/types/devboxes/diagnostic_tag.py +0 -0
  152. {runloop_api_client-0.46.0 → runloop_api_client-0.47.1}/src/runloop_api_client/types/devboxes/diagnostics_response.py +0 -0
  153. {runloop_api_client-0.46.0 → runloop_api_client-0.47.1}/src/runloop_api_client/types/devboxes/disk_snapshot_list_params.py +0 -0
  154. {runloop_api_client-0.46.0 → runloop_api_client-0.47.1}/src/runloop_api_client/types/devboxes/disk_snapshot_update_params.py +0 -0
  155. {runloop_api_client-0.46.0 → runloop_api_client-0.47.1}/src/runloop_api_client/types/devboxes/document_symbol.py +0 -0
  156. {runloop_api_client-0.46.0 → runloop_api_client-0.47.1}/src/runloop_api_client/types/devboxes/document_symbol_response.py +0 -0
  157. {runloop_api_client-0.46.0 → runloop_api_client-0.47.1}/src/runloop_api_client/types/devboxes/document_uri.py +0 -0
  158. {runloop_api_client-0.46.0 → runloop_api_client-0.47.1}/src/runloop_api_client/types/devboxes/execution_execute_async_params.py +0 -0
  159. {runloop_api_client-0.46.0 → runloop_api_client-0.47.1}/src/runloop_api_client/types/devboxes/execution_execute_sync_params.py +0 -0
  160. {runloop_api_client-0.46.0 → runloop_api_client-0.47.1}/src/runloop_api_client/types/devboxes/execution_retrieve_params.py +0 -0
  161. {runloop_api_client-0.46.0 → runloop_api_client-0.47.1}/src/runloop_api_client/types/devboxes/file_contents_response.py +0 -0
  162. {runloop_api_client-0.46.0 → runloop_api_client-0.47.1}/src/runloop_api_client/types/devboxes/file_definition_response.py +0 -0
  163. {runloop_api_client-0.46.0 → runloop_api_client-0.47.1}/src/runloop_api_client/types/devboxes/file_path.py +0 -0
  164. {runloop_api_client-0.46.0 → runloop_api_client-0.47.1}/src/runloop_api_client/types/devboxes/file_uri.py +0 -0
  165. {runloop_api_client-0.46.0 → runloop_api_client-0.47.1}/src/runloop_api_client/types/devboxes/formatting_response.py +0 -0
  166. {runloop_api_client-0.46.0 → runloop_api_client-0.47.1}/src/runloop_api_client/types/devboxes/health_status_response.py +0 -0
  167. {runloop_api_client-0.46.0 → runloop_api_client-0.47.1}/src/runloop_api_client/types/devboxes/integer.py +0 -0
  168. {runloop_api_client-0.46.0 → runloop_api_client-0.47.1}/src/runloop_api_client/types/devboxes/l_sp_any_param.py +0 -0
  169. {runloop_api_client-0.46.0 → runloop_api_client-0.47.1}/src/runloop_api_client/types/devboxes/location_param.py +0 -0
  170. {runloop_api_client-0.46.0 → runloop_api_client-0.47.1}/src/runloop_api_client/types/devboxes/log_list_params.py +0 -0
  171. {runloop_api_client-0.46.0 → runloop_api_client-0.47.1}/src/runloop_api_client/types/devboxes/lsp_apply_code_action_params.py +0 -0
  172. {runloop_api_client-0.46.0 → runloop_api_client-0.47.1}/src/runloop_api_client/types/devboxes/lsp_code_actions_params.py +0 -0
  173. {runloop_api_client-0.46.0 → runloop_api_client-0.47.1}/src/runloop_api_client/types/devboxes/lsp_diagnostics_params.py +0 -0
  174. {runloop_api_client-0.46.0 → runloop_api_client-0.47.1}/src/runloop_api_client/types/devboxes/lsp_document_symbols_params.py +0 -0
  175. {runloop_api_client-0.46.0 → runloop_api_client-0.47.1}/src/runloop_api_client/types/devboxes/lsp_file_definition_params.py +0 -0
  176. {runloop_api_client-0.46.0 → runloop_api_client-0.47.1}/src/runloop_api_client/types/devboxes/lsp_file_params.py +0 -0
  177. {runloop_api_client-0.46.0 → runloop_api_client-0.47.1}/src/runloop_api_client/types/devboxes/lsp_files_response.py +0 -0
  178. {runloop_api_client-0.46.0 → runloop_api_client-0.47.1}/src/runloop_api_client/types/devboxes/lsp_formatting_params.py +0 -0
  179. {runloop_api_client-0.46.0 → runloop_api_client-0.47.1}/src/runloop_api_client/types/devboxes/lsp_get_code_actions_for_diagnostic_params.py +0 -0
  180. {runloop_api_client-0.46.0 → runloop_api_client-0.47.1}/src/runloop_api_client/types/devboxes/lsp_get_code_actions_for_diagnostic_response.py +0 -0
  181. {runloop_api_client-0.46.0 → runloop_api_client-0.47.1}/src/runloop_api_client/types/devboxes/lsp_get_code_segment_info_params.py +0 -0
  182. {runloop_api_client-0.46.0 → runloop_api_client-0.47.1}/src/runloop_api_client/types/devboxes/lsp_get_signature_help_params.py +0 -0
  183. {runloop_api_client-0.46.0 → runloop_api_client-0.47.1}/src/runloop_api_client/types/devboxes/lsp_references_params.py +0 -0
  184. {runloop_api_client-0.46.0 → runloop_api_client-0.47.1}/src/runloop_api_client/types/devboxes/lsp_set_watch_directory_params.py +0 -0
  185. {runloop_api_client-0.46.0 → runloop_api_client-0.47.1}/src/runloop_api_client/types/devboxes/lsp_set_watch_directory_response.py +0 -0
  186. {runloop_api_client-0.46.0 → runloop_api_client-0.47.1}/src/runloop_api_client/types/devboxes/position.py +0 -0
  187. {runloop_api_client-0.46.0 → runloop_api_client-0.47.1}/src/runloop_api_client/types/devboxes/position_param.py +0 -0
  188. {runloop_api_client-0.46.0 → runloop_api_client-0.47.1}/src/runloop_api_client/types/devboxes/range.py +0 -0
  189. {runloop_api_client-0.46.0 → runloop_api_client-0.47.1}/src/runloop_api_client/types/devboxes/range_param.py +0 -0
  190. {runloop_api_client-0.46.0 → runloop_api_client-0.47.1}/src/runloop_api_client/types/devboxes/record_string_text_edit_array.py +0 -0
  191. {runloop_api_client-0.46.0 → runloop_api_client-0.47.1}/src/runloop_api_client/types/devboxes/record_string_text_edit_array_param.py +0 -0
  192. {runloop_api_client-0.46.0 → runloop_api_client-0.47.1}/src/runloop_api_client/types/devboxes/references_response.py +0 -0
  193. {runloop_api_client-0.46.0 → runloop_api_client-0.47.1}/src/runloop_api_client/types/devboxes/signature_help_response.py +0 -0
  194. {runloop_api_client-0.46.0 → runloop_api_client-0.47.1}/src/runloop_api_client/types/devboxes/symbol_kind.py +0 -0
  195. {runloop_api_client-0.46.0 → runloop_api_client-0.47.1}/src/runloop_api_client/types/devboxes/symbol_tag.py +0 -0
  196. {runloop_api_client-0.46.0 → runloop_api_client-0.47.1}/src/runloop_api_client/types/devboxes/symbol_type.py +0 -0
  197. {runloop_api_client-0.46.0 → runloop_api_client-0.47.1}/src/runloop_api_client/types/devboxes/text_edit.py +0 -0
  198. {runloop_api_client-0.46.0 → runloop_api_client-0.47.1}/src/runloop_api_client/types/devboxes/text_edit_param.py +0 -0
  199. {runloop_api_client-0.46.0 → runloop_api_client-0.47.1}/src/runloop_api_client/types/devboxes/u_ri.py +0 -0
  200. {runloop_api_client-0.46.0 → runloop_api_client-0.47.1}/src/runloop_api_client/types/devboxes/uinteger.py +0 -0
  201. {runloop_api_client-0.46.0 → runloop_api_client-0.47.1}/src/runloop_api_client/types/devboxes/watched_file_response.py +0 -0
  202. {runloop_api_client-0.46.0 → runloop_api_client-0.47.1}/src/runloop_api_client/types/input_context.py +0 -0
  203. {runloop_api_client-0.46.0 → runloop_api_client-0.47.1}/src/runloop_api_client/types/input_context_param.py +0 -0
  204. {runloop_api_client-0.46.0 → runloop_api_client-0.47.1}/src/runloop_api_client/types/input_context_update_param.py +0 -0
  205. {runloop_api_client-0.46.0 → runloop_api_client-0.47.1}/src/runloop_api_client/types/repository_connection_list_view.py +0 -0
  206. {runloop_api_client-0.46.0 → runloop_api_client-0.47.1}/src/runloop_api_client/types/repository_connection_view.py +0 -0
  207. {runloop_api_client-0.46.0 → runloop_api_client-0.47.1}/src/runloop_api_client/types/repository_create_params.py +0 -0
  208. {runloop_api_client-0.46.0 → runloop_api_client-0.47.1}/src/runloop_api_client/types/repository_inspection_details.py +0 -0
  209. {runloop_api_client-0.46.0 → runloop_api_client-0.47.1}/src/runloop_api_client/types/repository_inspection_list_view.py +0 -0
  210. {runloop_api_client-0.46.0 → runloop_api_client-0.47.1}/src/runloop_api_client/types/repository_list_params.py +0 -0
  211. {runloop_api_client-0.46.0 → runloop_api_client-0.47.1}/src/runloop_api_client/types/repository_manifest_view.py +0 -0
  212. {runloop_api_client-0.46.0 → runloop_api_client-0.47.1}/src/runloop_api_client/types/repository_refresh_params.py +0 -0
  213. {runloop_api_client-0.46.0 → runloop_api_client-0.47.1}/src/runloop_api_client/types/scenario_create_params.py +0 -0
  214. {runloop_api_client-0.46.0 → runloop_api_client-0.47.1}/src/runloop_api_client/types/scenario_definition_list_view.py +0 -0
  215. {runloop_api_client-0.46.0 → runloop_api_client-0.47.1}/src/runloop_api_client/types/scenario_environment.py +0 -0
  216. {runloop_api_client-0.46.0 → runloop_api_client-0.47.1}/src/runloop_api_client/types/scenario_environment_param.py +0 -0
  217. {runloop_api_client-0.46.0 → runloop_api_client-0.47.1}/src/runloop_api_client/types/scenario_list_params.py +0 -0
  218. {runloop_api_client-0.46.0 → runloop_api_client-0.47.1}/src/runloop_api_client/types/scenario_list_public_params.py +0 -0
  219. {runloop_api_client-0.46.0 → runloop_api_client-0.47.1}/src/runloop_api_client/types/scenario_run_list_view.py +0 -0
  220. {runloop_api_client-0.46.0 → runloop_api_client-0.47.1}/src/runloop_api_client/types/scenario_run_view.py +0 -0
  221. {runloop_api_client-0.46.0 → runloop_api_client-0.47.1}/src/runloop_api_client/types/scenario_start_run_params.py +0 -0
  222. {runloop_api_client-0.46.0 → runloop_api_client-0.47.1}/src/runloop_api_client/types/scenario_update_params.py +0 -0
  223. {runloop_api_client-0.46.0 → runloop_api_client-0.47.1}/src/runloop_api_client/types/scenario_view.py +0 -0
  224. {runloop_api_client-0.46.0 → runloop_api_client-0.47.1}/src/runloop_api_client/types/scenarios/__init__.py +0 -0
  225. {runloop_api_client-0.46.0 → runloop_api_client-0.47.1}/src/runloop_api_client/types/scenarios/run_list_params.py +0 -0
  226. {runloop_api_client-0.46.0 → runloop_api_client-0.47.1}/src/runloop_api_client/types/scenarios/scorer_create_params.py +0 -0
  227. {runloop_api_client-0.46.0 → runloop_api_client-0.47.1}/src/runloop_api_client/types/scenarios/scorer_create_response.py +0 -0
  228. {runloop_api_client-0.46.0 → runloop_api_client-0.47.1}/src/runloop_api_client/types/scenarios/scorer_list_params.py +0 -0
  229. {runloop_api_client-0.46.0 → runloop_api_client-0.47.1}/src/runloop_api_client/types/scenarios/scorer_list_response.py +0 -0
  230. {runloop_api_client-0.46.0 → runloop_api_client-0.47.1}/src/runloop_api_client/types/scenarios/scorer_retrieve_response.py +0 -0
  231. {runloop_api_client-0.46.0 → runloop_api_client-0.47.1}/src/runloop_api_client/types/scenarios/scorer_update_params.py +0 -0
  232. {runloop_api_client-0.46.0 → runloop_api_client-0.47.1}/src/runloop_api_client/types/scenarios/scorer_update_response.py +0 -0
  233. {runloop_api_client-0.46.0 → runloop_api_client-0.47.1}/src/runloop_api_client/types/scenarios/scorer_validate_params.py +0 -0
  234. {runloop_api_client-0.46.0 → runloop_api_client-0.47.1}/src/runloop_api_client/types/scenarios/scorer_validate_response.py +0 -0
  235. {runloop_api_client-0.46.0 → runloop_api_client-0.47.1}/src/runloop_api_client/types/scoring_contract.py +0 -0
  236. {runloop_api_client-0.46.0 → runloop_api_client-0.47.1}/src/runloop_api_client/types/scoring_contract_param.py +0 -0
  237. {runloop_api_client-0.46.0 → runloop_api_client-0.47.1}/src/runloop_api_client/types/scoring_contract_result_view.py +0 -0
  238. {runloop_api_client-0.46.0 → runloop_api_client-0.47.1}/src/runloop_api_client/types/scoring_contract_update_param.py +0 -0
  239. {runloop_api_client-0.46.0 → runloop_api_client-0.47.1}/src/runloop_api_client/types/scoring_function.py +0 -0
  240. {runloop_api_client-0.46.0 → runloop_api_client-0.47.1}/src/runloop_api_client/types/scoring_function_param.py +0 -0
  241. {runloop_api_client-0.46.0 → runloop_api_client-0.47.1}/src/runloop_api_client/types/scoring_function_result_view.py +0 -0
  242. {runloop_api_client-0.46.0 → runloop_api_client-0.47.1}/src/runloop_api_client/types/secret_create_params.py +0 -0
  243. {runloop_api_client-0.46.0 → runloop_api_client-0.47.1}/src/runloop_api_client/types/secret_list_view.py +0 -0
  244. {runloop_api_client-0.46.0 → runloop_api_client-0.47.1}/src/runloop_api_client/types/secret_update_params.py +0 -0
  245. {runloop_api_client-0.46.0 → runloop_api_client-0.47.1}/src/runloop_api_client/types/secret_view.py +0 -0
  246. {runloop_api_client-0.46.0 → runloop_api_client-0.47.1}/src/runloop_api_client/types/shared/__init__.py +0 -0
  247. {runloop_api_client-0.46.0 → runloop_api_client-0.47.1}/src/runloop_api_client/types/shared/after_idle.py +0 -0
  248. {runloop_api_client-0.46.0 → runloop_api_client-0.47.1}/src/runloop_api_client/types/shared/code_mount_parameters.py +0 -0
  249. {runloop_api_client-0.46.0 → runloop_api_client-0.47.1}/src/runloop_api_client/types/shared/launch_parameters.py +0 -0
  250. {runloop_api_client-0.46.0 → runloop_api_client-0.47.1}/src/runloop_api_client/types/shared_params/__init__.py +0 -0
  251. {runloop_api_client-0.46.0 → runloop_api_client-0.47.1}/src/runloop_api_client/types/shared_params/after_idle.py +0 -0
  252. {runloop_api_client-0.46.0 → runloop_api_client-0.47.1}/src/runloop_api_client/types/shared_params/code_mount_parameters.py +0 -0
  253. {runloop_api_client-0.46.0 → runloop_api_client-0.47.1}/src/runloop_api_client/types/shared_params/launch_parameters.py +0 -0
  254. {runloop_api_client-0.46.0 → runloop_api_client-0.47.1}/tests/__init__.py +0 -0
  255. {runloop_api_client-0.46.0 → runloop_api_client-0.47.1}/tests/api_resources/__init__.py +0 -0
  256. {runloop_api_client-0.46.0 → runloop_api_client-0.47.1}/tests/api_resources/benchmarks/__init__.py +0 -0
  257. {runloop_api_client-0.46.0 → runloop_api_client-0.47.1}/tests/api_resources/benchmarks/test_runs.py +0 -0
  258. {runloop_api_client-0.46.0 → runloop_api_client-0.47.1}/tests/api_resources/devboxes/__init__.py +0 -0
  259. {runloop_api_client-0.46.0 → runloop_api_client-0.47.1}/tests/api_resources/devboxes/test_browsers.py +0 -0
  260. {runloop_api_client-0.46.0 → runloop_api_client-0.47.1}/tests/api_resources/devboxes/test_computers.py +0 -0
  261. {runloop_api_client-0.46.0 → runloop_api_client-0.47.1}/tests/api_resources/devboxes/test_disk_snapshots.py +0 -0
  262. {runloop_api_client-0.46.0 → runloop_api_client-0.47.1}/tests/api_resources/devboxes/test_executions.py +0 -0
  263. {runloop_api_client-0.46.0 → runloop_api_client-0.47.1}/tests/api_resources/devboxes/test_logs.py +0 -0
  264. {runloop_api_client-0.46.0 → runloop_api_client-0.47.1}/tests/api_resources/devboxes/test_lsp.py +0 -0
  265. {runloop_api_client-0.46.0 → runloop_api_client-0.47.1}/tests/api_resources/scenarios/__init__.py +0 -0
  266. {runloop_api_client-0.46.0 → runloop_api_client-0.47.1}/tests/api_resources/scenarios/test_runs.py +0 -0
  267. {runloop_api_client-0.46.0 → runloop_api_client-0.47.1}/tests/api_resources/scenarios/test_scorers.py +0 -0
  268. {runloop_api_client-0.46.0 → runloop_api_client-0.47.1}/tests/api_resources/test_benchmarks.py +0 -0
  269. {runloop_api_client-0.46.0 → runloop_api_client-0.47.1}/tests/api_resources/test_blueprints.py +0 -0
  270. {runloop_api_client-0.46.0 → runloop_api_client-0.47.1}/tests/api_resources/test_devboxes.py +0 -0
  271. {runloop_api_client-0.46.0 → runloop_api_client-0.47.1}/tests/api_resources/test_repositories.py +0 -0
  272. {runloop_api_client-0.46.0 → runloop_api_client-0.47.1}/tests/api_resources/test_scenarios.py +0 -0
  273. {runloop_api_client-0.46.0 → runloop_api_client-0.47.1}/tests/api_resources/test_secrets.py +0 -0
  274. {runloop_api_client-0.46.0 → runloop_api_client-0.47.1}/tests/conftest.py +0 -0
  275. {runloop_api_client-0.46.0 → runloop_api_client-0.47.1}/tests/sample_file.txt +0 -0
  276. {runloop_api_client-0.46.0 → runloop_api_client-0.47.1}/tests/test_deepcopy.py +0 -0
  277. {runloop_api_client-0.46.0 → runloop_api_client-0.47.1}/tests/test_extract_files.py +0 -0
  278. {runloop_api_client-0.46.0 → runloop_api_client-0.47.1}/tests/test_files.py +0 -0
  279. {runloop_api_client-0.46.0 → runloop_api_client-0.47.1}/tests/test_models.py +0 -0
  280. {runloop_api_client-0.46.0 → runloop_api_client-0.47.1}/tests/test_qs.py +0 -0
  281. {runloop_api_client-0.46.0 → runloop_api_client-0.47.1}/tests/test_required_args.py +0 -0
  282. {runloop_api_client-0.46.0 → runloop_api_client-0.47.1}/tests/test_response.py +0 -0
  283. {runloop_api_client-0.46.0 → runloop_api_client-0.47.1}/tests/test_streaming.py +0 -0
  284. {runloop_api_client-0.46.0 → runloop_api_client-0.47.1}/tests/test_transform.py +0 -0
  285. {runloop_api_client-0.46.0 → runloop_api_client-0.47.1}/tests/test_utils/test_proxy.py +0 -0
  286. {runloop_api_client-0.46.0 → runloop_api_client-0.47.1}/tests/test_utils/test_typing.py +0 -0
  287. {runloop_api_client-0.46.0 → runloop_api_client-0.47.1}/tests/utils.py +0 -0
  288. {runloop_api_client-0.46.0 → runloop_api_client-0.47.1}/uv.lock +0 -0
@@ -0,0 +1,3 @@
1
+ {
2
+ ".": "0.47.1"
3
+ }
@@ -1,5 +1,22 @@
1
1
  # Changelog
2
2
 
3
+ ## 0.47.1 (2025-07-08)
4
+
5
+ Full Changelog: [v0.47.0...v0.47.1](https://github.com/runloopai/api-client-python/compare/v0.47.0...v0.47.1)
6
+
7
+ ### Chores
8
+
9
+ * **ci:** change upload type ([e8af7c3](https://github.com/runloopai/api-client-python/commit/e8af7c350cf848f0255ffc3ebcaeb339ebcb8ba9))
10
+ * **internal:** codegen related update ([402126e](https://github.com/runloopai/api-client-python/commit/402126e45fbb32556f59b1504ded9581910ee7dd))
11
+
12
+ ## 0.47.0 (2025-07-01)
13
+
14
+ Full Changelog: [v0.46.0...v0.47.0](https://github.com/runloopai/api-client-python/compare/v0.46.0...v0.47.0)
15
+
16
+ ### Features
17
+
18
+ * **api:** api update ([01b01d4](https://github.com/runloopai/api-client-python/commit/01b01d43edfeb15a3f4b56cab6577a4bdd4f75ed))
19
+
3
20
  ## 0.46.0 (2025-07-01)
4
21
 
5
22
  Full Changelog: [v0.45.0...v0.46.0](https://github.com/runloopai/api-client-python/compare/v0.45.0...v0.46.0)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: runloop_api_client
3
- Version: 0.46.0
3
+ Version: 0.47.1
4
4
  Summary: The official Python library for the runloop API
5
5
  Project-URL: Homepage, https://github.com/runloopai/api-client-python
6
6
  Project-URL: Repository, https://github.com/runloopai/api-client-python
@@ -279,7 +279,7 @@ Error codes are as follows:
279
279
 
280
280
  ### Retries
281
281
 
282
- Certain errors are automatically retried 3 times by default, with a short exponential backoff.
282
+ Certain errors are automatically retried 5 times by default, with a short exponential backoff.
283
283
  Connection errors (for example, due to a network connectivity problem), 408 Request Timeout, 409 Conflict,
284
284
  429 Rate Limit, and >=500 Internal errors are all retried by default.
285
285
 
@@ -245,7 +245,7 @@ Error codes are as follows:
245
245
 
246
246
  ### Retries
247
247
 
248
- Certain errors are automatically retried 3 times by default, with a short exponential backoff.
248
+ Certain errors are automatically retried 5 times by default, with a short exponential backoff.
249
249
  Connection errors (for example, due to a network connectivity problem), 408 Request Timeout, 409 Conflict,
250
250
  429 Rate Limit, and >=500 Internal errors are all retried by default.
251
251
 
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "runloop_api_client"
3
- version = "0.46.0"
3
+ version = "0.47.1"
4
4
  description = "The official Python library for the runloop API"
5
5
  dynamic = ["readme"]
6
6
  license = "MIT"
@@ -56,7 +56,7 @@ httpx==0.28.1
56
56
  # via httpx-aiohttp
57
57
  # via respx
58
58
  # via runloop-api-client
59
- httpx-aiohttp==0.1.6
59
+ httpx-aiohttp==0.1.8
60
60
  # via runloop-api-client
61
61
  idna==3.4
62
62
  # via anyio
@@ -43,7 +43,7 @@ httpcore==1.0.2
43
43
  httpx==0.28.1
44
44
  # via httpx-aiohttp
45
45
  # via runloop-api-client
46
- httpx-aiohttp==0.1.6
46
+ httpx-aiohttp==0.1.8
47
47
  # via runloop-api-client
48
48
  idna==3.4
49
49
  # via anyio
@@ -7,8 +7,8 @@ OVERRIDE_CAST_TO_HEADER = "____stainless_override_cast_to"
7
7
 
8
8
  # default timeout is 30 seconds
9
9
  DEFAULT_TIMEOUT = httpx.Timeout(timeout=30, connect=5.0)
10
- DEFAULT_MAX_RETRIES = 3
10
+ DEFAULT_MAX_RETRIES = 5
11
11
  DEFAULT_CONNECTION_LIMITS = httpx.Limits(max_connections=100, max_keepalive_connections=20)
12
12
 
13
13
  INITIAL_RETRY_DELAY = 1.0
14
- MAX_RETRY_DELAY = 15.0
14
+ MAX_RETRY_DELAY = 60.0
@@ -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.46.0" # x-release-please-version
4
+ __version__ = "0.47.1" # x-release-please-version
@@ -21,6 +21,7 @@ def poll_until(
21
21
  retriever: Callable[[], T],
22
22
  is_terminal: Callable[[T], bool],
23
23
  config: Optional[PollingConfig] = None,
24
+ on_error: Optional[Callable[[Exception], T]] = None,
24
25
  ) -> T:
25
26
  """
26
27
  Poll until a condition is met or timeout/max attempts are reached.
@@ -29,6 +30,8 @@ def poll_until(
29
30
  retriever: Callable that returns the object to check
30
31
  is_terminal: Callable that returns True when polling should stop
31
32
  config: Optional polling configuration
33
+ on_error: Optional error handler that can return a value to continue polling
34
+ or re-raise the exception to stop polling
32
35
 
33
36
  Returns:
34
37
  The final state of the polled object
@@ -44,7 +47,13 @@ def poll_until(
44
47
  last_result = None
45
48
 
46
49
  while True:
47
- last_result = retriever()
50
+ try:
51
+ last_result = retriever()
52
+ except Exception as e:
53
+ if on_error is not None:
54
+ last_result = on_error(e)
55
+ else:
56
+ raise
48
57
 
49
58
  if is_terminal(last_result):
50
59
  return last_result
@@ -10,6 +10,7 @@ async def async_poll_until(
10
10
  retriever: Callable[[], Awaitable[T]],
11
11
  is_terminal: Callable[[T], bool],
12
12
  config: Optional[PollingConfig] = None,
13
+ on_error: Optional[Callable[[Exception], T]] = None,
13
14
  ) -> T:
14
15
  """
15
16
  Poll until a condition is met or timeout/max attempts are reached.
@@ -18,6 +19,8 @@ async def async_poll_until(
18
19
  retriever: Async or sync callable that returns the object to check
19
20
  is_terminal: Callable that returns True when polling should stop
20
21
  config: Optional polling configuration
22
+ on_error: Optional error handler that can return a value to continue polling
23
+ or re-raise the exception to stop polling
21
24
 
22
25
  Returns:
23
26
  The final state of the polled object
@@ -33,7 +36,13 @@ async def async_poll_until(
33
36
  last_result: Union[T, None] = None
34
37
 
35
38
  while True:
36
- last_result = await retriever()
39
+ try:
40
+ last_result = await retriever()
41
+ except Exception as e:
42
+ if on_error is not None:
43
+ last_result = on_error(e)
44
+ else:
45
+ raise
37
46
 
38
47
  if is_terminal(last_result):
39
48
  return last_result
@@ -103,6 +103,7 @@ from ...lib.polling_async import async_poll_until
103
103
  from ...types.devbox_view import DevboxView
104
104
  from ...types.devbox_tunnel_view import DevboxTunnelView
105
105
  from ...types.devbox_snapshot_view import DevboxSnapshotView
106
+ from ...types.shared.launch_parameters import LaunchParameters as SharedLaunchParameters
106
107
  from ...types.devbox_execution_detail_view import DevboxExecutionDetailView
107
108
  from ...types.devbox_create_ssh_key_response import DevboxCreateSSHKeyResponse
108
109
  from ...types.shared_params.launch_parameters import LaunchParameters
@@ -111,7 +112,8 @@ from ...types.shared_params.code_mount_parameters import CodeMountParameters
111
112
 
112
113
  __all__ = ["DevboxesResource", "AsyncDevboxesResource"]
113
114
 
114
- DEVBOX_BOOTING_STATES = frozenset(('provisioning', 'initializing'))
115
+ DEVBOX_BOOTING_STATES = frozenset(("provisioning", "initializing"))
116
+
115
117
 
116
118
  class DevboxesResource(SyncAPIResource):
117
119
  @cached_property
@@ -357,7 +359,7 @@ class DevboxesResource(SyncAPIResource):
357
359
  def await_running(
358
360
  self,
359
361
  id: str,
360
- *,
362
+ *,
361
363
  polling_config: PollingConfig | None = None,
362
364
  # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
363
365
  # The extra values given here take precedence over values defined on the client or passed to this method.
@@ -367,7 +369,7 @@ class DevboxesResource(SyncAPIResource):
367
369
  timeout: float | httpx.Timeout | None | NotGiven = NOT_GIVEN,
368
370
  ) -> DevboxView:
369
371
  """Wait for a devbox to be in running state.
370
-
372
+
371
373
  Args:
372
374
  id: The ID of the devbox to wait for
373
375
  config: Optional polling configuration
@@ -383,24 +385,43 @@ class DevboxesResource(SyncAPIResource):
383
385
  PollingTimeout: If polling times out before devbox is running
384
386
  RunloopError: If devbox enters a non-running terminal state
385
387
  """
386
- def retrieve_devbox() -> DevboxView:
387
- return self.retrieve(
388
- id,
389
- extra_headers=extra_headers,
390
- extra_query=extra_query,
391
- extra_body=extra_body,
392
- timeout=timeout
388
+
389
+ def wait_for_devbox_status() -> DevboxView:
390
+ # This wait_for_status endpoint polls the devbox status for 10 seconds until it reaches either running or failure.
391
+ # If it's neither, it will throw an error.
392
+ return self._post(
393
+ f"/v1/devboxes/{id}/wait_for_status",
394
+ body={"statuses": ["running", "failure"]},
395
+ options=make_request_options(
396
+ extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
397
+ ),
398
+ cast_to=DevboxView,
393
399
  )
394
400
 
401
+ def handle_timeout_error(error: Exception) -> DevboxView:
402
+ # Handle 408 timeout errors by returning current devbox state to continue polling
403
+ if isinstance(error, httpx.HTTPStatusError) and error.response.status_code == 408:
404
+ # Return a placeholder result to continue polling
405
+ return DevboxView(
406
+ id=id,
407
+ status="provisioning",
408
+ capabilities=[],
409
+ create_time_ms=0,
410
+ launch_parameters=SharedLaunchParameters(),
411
+ metadata={},
412
+ state_transitions=[],
413
+ )
414
+ else:
415
+ # Re-raise other errors to stop polling
416
+ raise error
417
+
395
418
  def is_done_booting(devbox: DevboxView) -> bool:
396
419
  return devbox.status not in DEVBOX_BOOTING_STATES
397
420
 
398
- devbox = poll_until(retrieve_devbox, is_done_booting, polling_config)
421
+ devbox = poll_until(wait_for_devbox_status, is_done_booting, polling_config, handle_timeout_error)
399
422
 
400
423
  if devbox.status != "running":
401
- raise RunloopError(
402
- f"Devbox entered non-running terminal state: {devbox.status}"
403
- )
424
+ raise RunloopError(f"Devbox entered non-running terminal state: {devbox.status}")
404
425
 
405
426
  return devbox
406
427
 
@@ -427,7 +448,7 @@ class DevboxesResource(SyncAPIResource):
427
448
  timeout: float | httpx.Timeout | None | NotGiven = NOT_GIVEN,
428
449
  ) -> DevboxView:
429
450
  """Create a new devbox and wait for it to be in running state.
430
-
451
+
431
452
  Args:
432
453
  blueprint_id: The ID of the blueprint to use
433
454
  blueprint_name: The name of the blueprint to use
@@ -1660,7 +1681,7 @@ class AsyncDevboxesResource(AsyncAPIResource):
1660
1681
  timeout: float | httpx.Timeout | None | NotGiven = NOT_GIVEN,
1661
1682
  ) -> DevboxView:
1662
1683
  """Wait for a devbox to be in running state.
1663
-
1684
+
1664
1685
  Args:
1665
1686
  id: The ID of the devbox to wait for
1666
1687
  config: Optional polling configuration
@@ -1676,27 +1697,45 @@ class AsyncDevboxesResource(AsyncAPIResource):
1676
1697
  PollingTimeout: If polling times out before devbox is running
1677
1698
  RunloopError: If devbox enters a non-running terminal state
1678
1699
  """
1679
- async def retrieve_devbox() -> DevboxView:
1680
- return await self.retrieve(
1681
- id,
1682
- extra_headers=extra_headers,
1683
- extra_query=extra_query,
1684
- extra_body=extra_body,
1685
- timeout=timeout
1686
- )
1687
-
1700
+
1701
+ async def wait_for_devbox_status() -> DevboxView:
1702
+ # This wait_for_status endpoint polls the devbox status for 10 seconds until it reaches either running or failure.
1703
+ # If it's neither, it will throw an error.
1704
+ try:
1705
+ return await self._post(
1706
+ f"/v1/devboxes/{id}/wait_for_status",
1707
+ body={"statuses": ["running", "failure"]},
1708
+ options=make_request_options(
1709
+ extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
1710
+ ),
1711
+ cast_to=DevboxView,
1712
+ )
1713
+ except httpx.HTTPStatusError as error:
1714
+ if error.response.status_code == 408:
1715
+ # Handle 408 timeout errors by returning a placeholder result to continue polling
1716
+ return DevboxView(
1717
+ id=id,
1718
+ status="provisioning",
1719
+ capabilities=[],
1720
+ create_time_ms=0,
1721
+ launch_parameters=SharedLaunchParameters(),
1722
+ metadata={},
1723
+ state_transitions=[],
1724
+ )
1725
+ else:
1726
+ # Re-raise other errors to stop polling
1727
+ raise
1728
+
1688
1729
  def is_done_booting(devbox: DevboxView) -> bool:
1689
1730
  return devbox.status not in DEVBOX_BOOTING_STATES
1690
1731
 
1691
- devbox = await async_poll_until(retrieve_devbox, is_done_booting, polling_config)
1732
+ devbox = await async_poll_until(wait_for_devbox_status, is_done_booting, polling_config)
1692
1733
 
1693
1734
  if devbox.status != "running":
1694
- raise RunloopError(
1695
- f"Devbox entered non-running terminal state: {devbox.status}"
1696
- )
1735
+ raise RunloopError(f"Devbox entered non-running terminal state: {devbox.status}")
1697
1736
 
1698
1737
  return devbox
1699
-
1738
+
1700
1739
  async def update(
1701
1740
  self,
1702
1741
  id: str,
@@ -16,8 +16,8 @@ from ..._response import (
16
16
  async_to_raw_response_wrapper,
17
17
  async_to_streamed_response_wrapper,
18
18
  )
19
- from ...lib.polling import PollingConfig, poll_until
20
19
  from ..._constants import DEFAULT_TIMEOUT
20
+ from ...lib.polling import PollingConfig, poll_until
21
21
  from ..._base_client import make_request_options
22
22
  from ...types.devboxes import execution_retrieve_params, execution_execute_sync_params, execution_execute_async_params
23
23
  from ...lib.polling_async import async_poll_until
@@ -103,7 +103,6 @@ class ExecutionsResource(SyncAPIResource):
103
103
  extra_query: Query | None = None,
104
104
  extra_body: Body | None = None,
105
105
  timeout: float | httpx.Timeout | None | NotGiven = NOT_GIVEN,
106
- idempotency_key: str | None = None,
107
106
  ) -> DevboxAsyncExecutionDetailView:
108
107
  """Wait for an execution to complete.
109
108
 
@@ -380,7 +379,6 @@ class AsyncExecutionsResource(AsyncAPIResource):
380
379
  extra_query: Query | None = None,
381
380
  extra_body: Body | None = None,
382
381
  timeout: float | httpx.Timeout | None | NotGiven = NOT_GIVEN,
383
- idempotency_key: str | None = None,
384
382
  ) -> DevboxAsyncExecutionDetailView:
385
383
  """Wait for an execution to complete.
386
384
 
@@ -406,7 +404,7 @@ class AsyncExecutionsResource(AsyncAPIResource):
406
404
  extra_headers=extra_headers,
407
405
  extra_query=extra_query,
408
406
  extra_body=extra_body,
409
- timeout=timeout
407
+ timeout=timeout,
410
408
  )
411
409
 
412
410
  def is_done(execution: DevboxAsyncExecutionDetailView) -> bool:
@@ -93,7 +93,7 @@ class TestRunloop:
93
93
  # options that have a default are overridden correctly
94
94
  copied = self.client.copy(max_retries=7)
95
95
  assert copied.max_retries == 7
96
- assert self.client.max_retries == 3
96
+ assert self.client.max_retries == 5
97
97
 
98
98
  copied2 = copied.copy(max_retries=6)
99
99
  assert copied2.max_retries == 6
@@ -754,7 +754,7 @@ class TestRunloop:
754
754
  [3, "", 1],
755
755
  [2, "", 1 * 2.0],
756
756
  [1, "", 1 * 4.0],
757
- [-1100, "", 15], # test large number potentially overflowing
757
+ [-1100, "", 60], # test large number potentially overflowing
758
758
  ],
759
759
  )
760
760
  @mock.patch("time.time", mock.MagicMock(return_value=1696004797))
@@ -949,7 +949,7 @@ class TestAsyncRunloop:
949
949
  # options that have a default are overridden correctly
950
950
  copied = self.client.copy(max_retries=7)
951
951
  assert copied.max_retries == 7
952
- assert self.client.max_retries == 3
952
+ assert self.client.max_retries == 5
953
953
 
954
954
  copied2 = copied.copy(max_retries=6)
955
955
  assert copied2.max_retries == 6
@@ -1613,7 +1613,7 @@ class TestAsyncRunloop:
1613
1613
  [3, "", 1],
1614
1614
  [2, "", 1 * 2.0],
1615
1615
  [1, "", 1 * 4.0],
1616
- [-1100, "", 15], # test large number potentially overflowing
1616
+ [-1100, "", 60], # test large number potentially overflowing
1617
1617
  ],
1618
1618
  )
1619
1619
  @mock.patch("time.time", mock.MagicMock(return_value=1696004797))
@@ -1,3 +0,0 @@
1
- {
2
- ".": "0.46.0"
3
- }