runloop-api-client 0.2.2__tar.gz → 0.4.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 (138) hide show
  1. runloop_api_client-0.4.0/.release-please-manifest.json +3 -0
  2. {runloop_api_client-0.2.2 → runloop_api_client-0.4.0}/CHANGELOG.md +31 -0
  3. {runloop_api_client-0.2.2 → runloop_api_client-0.4.0}/PKG-INFO +1 -1
  4. {runloop_api_client-0.2.2 → runloop_api_client-0.4.0}/api.md +1 -1
  5. {runloop_api_client-0.2.2 → runloop_api_client-0.4.0}/pyproject.toml +3 -7
  6. {runloop_api_client-0.2.2 → runloop_api_client-0.4.0}/requirements-dev.lock +1 -1
  7. {runloop_api_client-0.2.2 → runloop_api_client-0.4.0}/src/runloop_api_client/_base_client.py +1 -1
  8. {runloop_api_client-0.2.2 → runloop_api_client-0.4.0}/src/runloop_api_client/_version.py +1 -1
  9. {runloop_api_client-0.2.2 → runloop_api_client-0.4.0}/src/runloop_api_client/resources/devboxes/devboxes.py +6 -7
  10. {runloop_api_client-0.2.2 → runloop_api_client-0.4.0}/src/runloop_api_client/types/blueprint_build_log.py +0 -1
  11. {runloop_api_client-0.2.2 → runloop_api_client-0.4.0}/src/runloop_api_client/types/blueprint_preview_view.py +0 -1
  12. {runloop_api_client-0.2.2 → runloop_api_client-0.4.0}/src/runloop_api_client/types/devbox_create_ssh_key_response.py +0 -1
  13. {runloop_api_client-0.2.2 → runloop_api_client-0.4.0}/src/runloop_api_client/types/devbox_snapshot_view.py +3 -0
  14. {runloop_api_client-0.2.2 → runloop_api_client-0.4.0}/src/runloop_api_client/types/devbox_view.py +3 -1
  15. {runloop_api_client-0.2.2 → runloop_api_client-0.4.0}/tests/api_resources/test_devboxes.py +9 -8
  16. {runloop_api_client-0.2.2 → runloop_api_client-0.4.0}/tests/test_client.py +19 -2
  17. {runloop_api_client-0.2.2 → runloop_api_client-0.4.0}/tests/test_models.py +1 -1
  18. runloop_api_client-0.2.2/.release-please-manifest.json +0 -3
  19. {runloop_api_client-0.2.2 → runloop_api_client-0.4.0}/.gitignore +0 -0
  20. {runloop_api_client-0.2.2 → runloop_api_client-0.4.0}/CONTRIBUTING.md +0 -0
  21. {runloop_api_client-0.2.2 → runloop_api_client-0.4.0}/LICENSE +0 -0
  22. {runloop_api_client-0.2.2 → runloop_api_client-0.4.0}/README.md +0 -0
  23. {runloop_api_client-0.2.2 → runloop_api_client-0.4.0}/SECURITY.md +0 -0
  24. {runloop_api_client-0.2.2 → runloop_api_client-0.4.0}/bin/check-release-environment +0 -0
  25. {runloop_api_client-0.2.2 → runloop_api_client-0.4.0}/bin/publish-pypi +0 -0
  26. {runloop_api_client-0.2.2 → runloop_api_client-0.4.0}/examples/.keep +0 -0
  27. {runloop_api_client-0.2.2 → runloop_api_client-0.4.0}/mypy.ini +0 -0
  28. {runloop_api_client-0.2.2 → runloop_api_client-0.4.0}/noxfile.py +0 -0
  29. {runloop_api_client-0.2.2 → runloop_api_client-0.4.0}/release-please-config.json +0 -0
  30. {runloop_api_client-0.2.2 → runloop_api_client-0.4.0}/requirements.lock +0 -0
  31. {runloop_api_client-0.2.2 → runloop_api_client-0.4.0}/src/runloop/lib/.keep +0 -0
  32. {runloop_api_client-0.2.2 → runloop_api_client-0.4.0}/src/runloop_api_client/__init__.py +0 -0
  33. {runloop_api_client-0.2.2 → runloop_api_client-0.4.0}/src/runloop_api_client/_client.py +0 -0
  34. {runloop_api_client-0.2.2 → runloop_api_client-0.4.0}/src/runloop_api_client/_compat.py +0 -0
  35. {runloop_api_client-0.2.2 → runloop_api_client-0.4.0}/src/runloop_api_client/_constants.py +0 -0
  36. {runloop_api_client-0.2.2 → runloop_api_client-0.4.0}/src/runloop_api_client/_exceptions.py +0 -0
  37. {runloop_api_client-0.2.2 → runloop_api_client-0.4.0}/src/runloop_api_client/_files.py +0 -0
  38. {runloop_api_client-0.2.2 → runloop_api_client-0.4.0}/src/runloop_api_client/_models.py +0 -0
  39. {runloop_api_client-0.2.2 → runloop_api_client-0.4.0}/src/runloop_api_client/_qs.py +0 -0
  40. {runloop_api_client-0.2.2 → runloop_api_client-0.4.0}/src/runloop_api_client/_resource.py +0 -0
  41. {runloop_api_client-0.2.2 → runloop_api_client-0.4.0}/src/runloop_api_client/_response.py +0 -0
  42. {runloop_api_client-0.2.2 → runloop_api_client-0.4.0}/src/runloop_api_client/_streaming.py +0 -0
  43. {runloop_api_client-0.2.2 → runloop_api_client-0.4.0}/src/runloop_api_client/_types.py +0 -0
  44. {runloop_api_client-0.2.2 → runloop_api_client-0.4.0}/src/runloop_api_client/_utils/__init__.py +0 -0
  45. {runloop_api_client-0.2.2 → runloop_api_client-0.4.0}/src/runloop_api_client/_utils/_logs.py +0 -0
  46. {runloop_api_client-0.2.2 → runloop_api_client-0.4.0}/src/runloop_api_client/_utils/_proxy.py +0 -0
  47. {runloop_api_client-0.2.2 → runloop_api_client-0.4.0}/src/runloop_api_client/_utils/_reflection.py +0 -0
  48. {runloop_api_client-0.2.2 → runloop_api_client-0.4.0}/src/runloop_api_client/_utils/_streams.py +0 -0
  49. {runloop_api_client-0.2.2 → runloop_api_client-0.4.0}/src/runloop_api_client/_utils/_sync.py +0 -0
  50. {runloop_api_client-0.2.2 → runloop_api_client-0.4.0}/src/runloop_api_client/_utils/_transform.py +0 -0
  51. {runloop_api_client-0.2.2 → runloop_api_client-0.4.0}/src/runloop_api_client/_utils/_typing.py +0 -0
  52. {runloop_api_client-0.2.2 → runloop_api_client-0.4.0}/src/runloop_api_client/_utils/_utils.py +0 -0
  53. {runloop_api_client-0.2.2 → runloop_api_client-0.4.0}/src/runloop_api_client/lib/.keep +0 -0
  54. {runloop_api_client-0.2.2 → runloop_api_client-0.4.0}/src/runloop_api_client/py.typed +0 -0
  55. {runloop_api_client-0.2.2 → runloop_api_client-0.4.0}/src/runloop_api_client/resources/__init__.py +0 -0
  56. {runloop_api_client-0.2.2 → runloop_api_client-0.4.0}/src/runloop_api_client/resources/blueprints.py +0 -0
  57. {runloop_api_client-0.2.2 → runloop_api_client-0.4.0}/src/runloop_api_client/resources/devboxes/__init__.py +0 -0
  58. {runloop_api_client-0.2.2 → runloop_api_client-0.4.0}/src/runloop_api_client/resources/devboxes/executions.py +0 -0
  59. {runloop_api_client-0.2.2 → runloop_api_client-0.4.0}/src/runloop_api_client/resources/devboxes/logs.py +0 -0
  60. {runloop_api_client-0.2.2 → runloop_api_client-0.4.0}/src/runloop_api_client/resources/functions/__init__.py +0 -0
  61. {runloop_api_client-0.2.2 → runloop_api_client-0.4.0}/src/runloop_api_client/resources/functions/functions.py +0 -0
  62. {runloop_api_client-0.2.2 → runloop_api_client-0.4.0}/src/runloop_api_client/resources/functions/invocations.py +0 -0
  63. {runloop_api_client-0.2.2 → runloop_api_client-0.4.0}/src/runloop_api_client/resources/projects/__init__.py +0 -0
  64. {runloop_api_client-0.2.2 → runloop_api_client-0.4.0}/src/runloop_api_client/resources/projects/logs.py +0 -0
  65. {runloop_api_client-0.2.2 → runloop_api_client-0.4.0}/src/runloop_api_client/resources/projects/projects.py +0 -0
  66. {runloop_api_client-0.2.2 → runloop_api_client-0.4.0}/src/runloop_api_client/types/__init__.py +0 -0
  67. {runloop_api_client-0.2.2 → runloop_api_client-0.4.0}/src/runloop_api_client/types/blueprint_build_logs_list_view.py +0 -0
  68. {runloop_api_client-0.2.2 → runloop_api_client-0.4.0}/src/runloop_api_client/types/blueprint_build_parameters.py +0 -0
  69. {runloop_api_client-0.2.2 → runloop_api_client-0.4.0}/src/runloop_api_client/types/blueprint_create_params.py +0 -0
  70. {runloop_api_client-0.2.2 → runloop_api_client-0.4.0}/src/runloop_api_client/types/blueprint_list_params.py +0 -0
  71. {runloop_api_client-0.2.2 → runloop_api_client-0.4.0}/src/runloop_api_client/types/blueprint_list_view.py +0 -0
  72. {runloop_api_client-0.2.2 → runloop_api_client-0.4.0}/src/runloop_api_client/types/blueprint_preview_params.py +0 -0
  73. {runloop_api_client-0.2.2 → runloop_api_client-0.4.0}/src/runloop_api_client/types/blueprint_view.py +0 -0
  74. {runloop_api_client-0.2.2 → runloop_api_client-0.4.0}/src/runloop_api_client/types/code_mount_parameters.py +0 -0
  75. {runloop_api_client-0.2.2 → runloop_api_client-0.4.0}/src/runloop_api_client/types/code_mount_parameters_param.py +0 -0
  76. {runloop_api_client-0.2.2 → runloop_api_client-0.4.0}/src/runloop_api_client/types/devbox_async_execution_detail_view.py +0 -0
  77. {runloop_api_client-0.2.2 → runloop_api_client-0.4.0}/src/runloop_api_client/types/devbox_create_params.py +0 -0
  78. {runloop_api_client-0.2.2 → runloop_api_client-0.4.0}/src/runloop_api_client/types/devbox_disk_snapshots_params.py +0 -0
  79. {runloop_api_client-0.2.2 → runloop_api_client-0.4.0}/src/runloop_api_client/types/devbox_disk_snapshots_response.py +0 -0
  80. {runloop_api_client-0.2.2 → runloop_api_client-0.4.0}/src/runloop_api_client/types/devbox_download_file_params.py +0 -0
  81. {runloop_api_client-0.2.2 → runloop_api_client-0.4.0}/src/runloop_api_client/types/devbox_execute_async_params.py +0 -0
  82. {runloop_api_client-0.2.2 → runloop_api_client-0.4.0}/src/runloop_api_client/types/devbox_execute_sync_params.py +0 -0
  83. {runloop_api_client-0.2.2 → runloop_api_client-0.4.0}/src/runloop_api_client/types/devbox_execution_detail_view.py +0 -0
  84. {runloop_api_client-0.2.2 → runloop_api_client-0.4.0}/src/runloop_api_client/types/devbox_list_params.py +0 -0
  85. {runloop_api_client-0.2.2 → runloop_api_client-0.4.0}/src/runloop_api_client/types/devbox_list_view.py +0 -0
  86. {runloop_api_client-0.2.2 → runloop_api_client-0.4.0}/src/runloop_api_client/types/devbox_read_file_contents_params.py +0 -0
  87. {runloop_api_client-0.2.2 → runloop_api_client-0.4.0}/src/runloop_api_client/types/devbox_read_file_contents_response.py +0 -0
  88. {runloop_api_client-0.2.2 → runloop_api_client-0.4.0}/src/runloop_api_client/types/devbox_snapshot_disk_params.py +0 -0
  89. {runloop_api_client-0.2.2 → runloop_api_client-0.4.0}/src/runloop_api_client/types/devbox_snapshot_list_view.py +0 -0
  90. {runloop_api_client-0.2.2 → runloop_api_client-0.4.0}/src/runloop_api_client/types/devbox_upload_file_params.py +0 -0
  91. {runloop_api_client-0.2.2 → runloop_api_client-0.4.0}/src/runloop_api_client/types/devbox_write_file_params.py +0 -0
  92. {runloop_api_client-0.2.2 → runloop_api_client-0.4.0}/src/runloop_api_client/types/devboxes/__init__.py +0 -0
  93. {runloop_api_client-0.2.2 → runloop_api_client-0.4.0}/src/runloop_api_client/types/devboxes/devbox_logs_list_view.py +0 -0
  94. {runloop_api_client-0.2.2 → runloop_api_client-0.4.0}/src/runloop_api_client/types/devboxes/execution_execute_async_params.py +0 -0
  95. {runloop_api_client-0.2.2 → runloop_api_client-0.4.0}/src/runloop_api_client/types/devboxes/execution_execute_sync_params.py +0 -0
  96. {runloop_api_client-0.2.2 → runloop_api_client-0.4.0}/src/runloop_api_client/types/devboxes/execution_retrieve_params.py +0 -0
  97. {runloop_api_client-0.2.2 → runloop_api_client-0.4.0}/src/runloop_api_client/types/devboxes/log_list_params.py +0 -0
  98. {runloop_api_client-0.2.2 → runloop_api_client-0.4.0}/src/runloop_api_client/types/function_invoke_async_params.py +0 -0
  99. {runloop_api_client-0.2.2 → runloop_api_client-0.4.0}/src/runloop_api_client/types/function_invoke_sync_params.py +0 -0
  100. {runloop_api_client-0.2.2 → runloop_api_client-0.4.0}/src/runloop_api_client/types/function_list_view.py +0 -0
  101. {runloop_api_client-0.2.2 → runloop_api_client-0.4.0}/src/runloop_api_client/types/functions/__init__.py +0 -0
  102. {runloop_api_client-0.2.2 → runloop_api_client-0.4.0}/src/runloop_api_client/types/functions/function_invocation_list_view.py +0 -0
  103. {runloop_api_client-0.2.2 → runloop_api_client-0.4.0}/src/runloop_api_client/types/functions/invocation_list_params.py +0 -0
  104. {runloop_api_client-0.2.2 → runloop_api_client-0.4.0}/src/runloop_api_client/types/project_list_view.py +0 -0
  105. {runloop_api_client-0.2.2 → runloop_api_client-0.4.0}/src/runloop_api_client/types/projects/__init__.py +0 -0
  106. {runloop_api_client-0.2.2 → runloop_api_client-0.4.0}/src/runloop_api_client/types/resource_size.py +0 -0
  107. {runloop_api_client-0.2.2 → runloop_api_client-0.4.0}/src/runloop_api_client/types/shared/__init__.py +0 -0
  108. {runloop_api_client-0.2.2 → runloop_api_client-0.4.0}/src/runloop_api_client/types/shared/function_invocation_execution_detail_view.py +0 -0
  109. {runloop_api_client-0.2.2 → runloop_api_client-0.4.0}/src/runloop_api_client/types/shared/launch_parameters.py +0 -0
  110. {runloop_api_client-0.2.2 → runloop_api_client-0.4.0}/src/runloop_api_client/types/shared/project_logs_view.py +0 -0
  111. {runloop_api_client-0.2.2 → runloop_api_client-0.4.0}/src/runloop_api_client/types/shared/resource_size.py +0 -0
  112. {runloop_api_client-0.2.2 → runloop_api_client-0.4.0}/src/runloop_api_client/types/shared_params/__init__.py +0 -0
  113. {runloop_api_client-0.2.2 → runloop_api_client-0.4.0}/src/runloop_api_client/types/shared_params/launch_parameters.py +0 -0
  114. {runloop_api_client-0.2.2 → runloop_api_client-0.4.0}/tests/__init__.py +0 -0
  115. {runloop_api_client-0.2.2 → runloop_api_client-0.4.0}/tests/api_resources/__init__.py +0 -0
  116. {runloop_api_client-0.2.2 → runloop_api_client-0.4.0}/tests/api_resources/devboxes/__init__.py +0 -0
  117. {runloop_api_client-0.2.2 → runloop_api_client-0.4.0}/tests/api_resources/devboxes/test_executions.py +0 -0
  118. {runloop_api_client-0.2.2 → runloop_api_client-0.4.0}/tests/api_resources/devboxes/test_logs.py +0 -0
  119. {runloop_api_client-0.2.2 → runloop_api_client-0.4.0}/tests/api_resources/functions/__init__.py +0 -0
  120. {runloop_api_client-0.2.2 → runloop_api_client-0.4.0}/tests/api_resources/functions/test_invocations.py +0 -0
  121. {runloop_api_client-0.2.2 → runloop_api_client-0.4.0}/tests/api_resources/projects/__init__.py +0 -0
  122. {runloop_api_client-0.2.2 → runloop_api_client-0.4.0}/tests/api_resources/projects/test_logs.py +0 -0
  123. {runloop_api_client-0.2.2 → runloop_api_client-0.4.0}/tests/api_resources/test_blueprints.py +0 -0
  124. {runloop_api_client-0.2.2 → runloop_api_client-0.4.0}/tests/api_resources/test_functions.py +0 -0
  125. {runloop_api_client-0.2.2 → runloop_api_client-0.4.0}/tests/api_resources/test_projects.py +0 -0
  126. {runloop_api_client-0.2.2 → runloop_api_client-0.4.0}/tests/conftest.py +0 -0
  127. {runloop_api_client-0.2.2 → runloop_api_client-0.4.0}/tests/sample_file.txt +0 -0
  128. {runloop_api_client-0.2.2 → runloop_api_client-0.4.0}/tests/test_deepcopy.py +0 -0
  129. {runloop_api_client-0.2.2 → runloop_api_client-0.4.0}/tests/test_extract_files.py +0 -0
  130. {runloop_api_client-0.2.2 → runloop_api_client-0.4.0}/tests/test_files.py +0 -0
  131. {runloop_api_client-0.2.2 → runloop_api_client-0.4.0}/tests/test_qs.py +0 -0
  132. {runloop_api_client-0.2.2 → runloop_api_client-0.4.0}/tests/test_required_args.py +0 -0
  133. {runloop_api_client-0.2.2 → runloop_api_client-0.4.0}/tests/test_response.py +0 -0
  134. {runloop_api_client-0.2.2 → runloop_api_client-0.4.0}/tests/test_streaming.py +0 -0
  135. {runloop_api_client-0.2.2 → runloop_api_client-0.4.0}/tests/test_transform.py +0 -0
  136. {runloop_api_client-0.2.2 → runloop_api_client-0.4.0}/tests/test_utils/test_proxy.py +0 -0
  137. {runloop_api_client-0.2.2 → runloop_api_client-0.4.0}/tests/test_utils/test_typing.py +0 -0
  138. {runloop_api_client-0.2.2 → runloop_api_client-0.4.0}/tests/utils.py +0 -0
@@ -0,0 +1,3 @@
1
+ {
2
+ ".": "0.4.0"
3
+ }
@@ -1,5 +1,36 @@
1
1
  # Changelog
2
2
 
3
+ ## 0.4.0 (2024-10-22)
4
+
5
+ Full Changelog: [v0.3.0...v0.4.0](https://github.com/runloopai/api-client-python/compare/v0.3.0...v0.4.0)
6
+
7
+ ### Features
8
+
9
+ * **api:** api update ([#206](https://github.com/runloopai/api-client-python/issues/206)) ([1018bb4](https://github.com/runloopai/api-client-python/commit/1018bb4e9416e4d88ba82f435b61c8aba3f1235a))
10
+ * **api:** api update ([#208](https://github.com/runloopai/api-client-python/issues/208)) ([d0c2bd8](https://github.com/runloopai/api-client-python/commit/d0c2bd8ec96edae0a96208d12049991e3ed05a87))
11
+ * **api:** api update ([#209](https://github.com/runloopai/api-client-python/issues/209)) ([5ba4709](https://github.com/runloopai/api-client-python/commit/5ba470949ffd1772f7211769aaf44d848f46fc58))
12
+ * **api:** api update ([#210](https://github.com/runloopai/api-client-python/issues/210)) ([620fcb9](https://github.com/runloopai/api-client-python/commit/620fcb90f24fe01804bd73ed970e3af0d3f65009))
13
+ * **api:** api update ([#211](https://github.com/runloopai/api-client-python/issues/211)) ([b181289](https://github.com/runloopai/api-client-python/commit/b18128942293ab07b3fa1b40cd05061746b5d17c))
14
+ * **api:** api update ([#212](https://github.com/runloopai/api-client-python/issues/212)) ([6410fed](https://github.com/runloopai/api-client-python/commit/6410fed4c958f4d38dea32fa7c2b894fb2424549))
15
+ * **api:** api update ([#213](https://github.com/runloopai/api-client-python/issues/213)) ([4c7552a](https://github.com/runloopai/api-client-python/commit/4c7552ae74d688a75a95cbf9e0147156dd558469))
16
+ * **api:** api update ([#214](https://github.com/runloopai/api-client-python/issues/214)) ([a02b476](https://github.com/runloopai/api-client-python/commit/a02b4763d6c7e2a47b300c6274a9b6b0a5f620dd))
17
+ * **api:** api update ([#215](https://github.com/runloopai/api-client-python/issues/215)) ([87fb66e](https://github.com/runloopai/api-client-python/commit/87fb66ed3d8126db93eb5b7245c10fb2fcf4533b))
18
+ * **api:** api update ([#216](https://github.com/runloopai/api-client-python/issues/216)) ([568d2f8](https://github.com/runloopai/api-client-python/commit/568d2f821df99bff0bd4ea31f1398df94dccbf2d))
19
+ * **api:** api update ([#217](https://github.com/runloopai/api-client-python/issues/217)) ([23902ae](https://github.com/runloopai/api-client-python/commit/23902aead147c749528b726d25c92d72cf0fb5f5))
20
+ * **api:** api update ([#218](https://github.com/runloopai/api-client-python/issues/218)) ([5bd1497](https://github.com/runloopai/api-client-python/commit/5bd1497d6b23f0630b74a38696f52c7d691a9a50))
21
+ * **api:** api update ([#219](https://github.com/runloopai/api-client-python/issues/219)) ([c2f5075](https://github.com/runloopai/api-client-python/commit/c2f5075c8a230524c457b491a8a796550d43695b))
22
+ * **api:** api update ([#220](https://github.com/runloopai/api-client-python/issues/220)) ([6bc6ffb](https://github.com/runloopai/api-client-python/commit/6bc6ffbd7f13204744b9f7e29f129326ea38229a))
23
+ * **api:** api update ([#221](https://github.com/runloopai/api-client-python/issues/221)) ([da27ecc](https://github.com/runloopai/api-client-python/commit/da27eccbfa6df1075e1a20d9e4a4d6abea31f731))
24
+ * **api:** api update ([#222](https://github.com/runloopai/api-client-python/issues/222)) ([753ea7c](https://github.com/runloopai/api-client-python/commit/753ea7cd62cccc384166223f762af1cfea06c08e))
25
+
26
+ ## 0.3.0 (2024-10-14)
27
+
28
+ Full Changelog: [v0.2.2...v0.3.0](https://github.com/runloopai/api-client-python/compare/v0.2.2...v0.3.0)
29
+
30
+ ### Features
31
+
32
+ * **api:** api update ([#203](https://github.com/runloopai/api-client-python/issues/203)) ([596e9db](https://github.com/runloopai/api-client-python/commit/596e9db0165308c969e1c7dc2079d4d12961b382))
33
+
3
34
  ## 0.2.2 (2024-10-11)
4
35
 
5
36
  Full Changelog: [v0.2.0...v0.2.2](https://github.com/runloopai/api-client-python/compare/v0.2.0...v0.2.2)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: runloop_api_client
3
- Version: 0.2.2
3
+ Version: 0.4.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
@@ -69,7 +69,7 @@ Methods:
69
69
  - <code title="post /v1/devboxes/{id}/execute_sync">client.devboxes.<a href="./src/runloop_api_client/resources/devboxes/devboxes.py">execute_sync</a>(id, \*\*<a href="src/runloop_api_client/types/devbox_execute_sync_params.py">params</a>) -> <a href="./src/runloop_api_client/types/devbox_execution_detail_view.py">DevboxExecutionDetailView</a></code>
70
70
  - <code title="post /v1/devboxes/{id}/read_file_contents">client.devboxes.<a href="./src/runloop_api_client/resources/devboxes/devboxes.py">read_file_contents</a>(id, \*\*<a href="src/runloop_api_client/types/devbox_read_file_contents_params.py">params</a>) -> str</code>
71
71
  - <code title="post /v1/devboxes/{id}/shutdown">client.devboxes.<a href="./src/runloop_api_client/resources/devboxes/devboxes.py">shutdown</a>(id) -> <a href="./src/runloop_api_client/types/devbox_view.py">DevboxView</a></code>
72
- - <code title="post /v1/devboxes/{id}/snapshot_disk">client.devboxes.<a href="./src/runloop_api_client/resources/devboxes/devboxes.py">snapshot_disk</a>(id, \*\*<a href="src/runloop_api_client/types/devbox_snapshot_disk_params.py">params</a>) -> None</code>
72
+ - <code title="post /v1/devboxes/{id}/snapshot_disk">client.devboxes.<a href="./src/runloop_api_client/resources/devboxes/devboxes.py">snapshot_disk</a>(id, \*\*<a href="src/runloop_api_client/types/devbox_snapshot_disk_params.py">params</a>) -> <a href="./src/runloop_api_client/types/devbox_snapshot_view.py">DevboxSnapshotView</a></code>
73
73
  - <code title="post /v1/devboxes/{id}/upload_file">client.devboxes.<a href="./src/runloop_api_client/resources/devboxes/devboxes.py">upload_file</a>(id, \*\*<a href="src/runloop_api_client/types/devbox_upload_file_params.py">params</a>) -> <a href="./src/runloop_api_client/types/devbox_upload_file_response.py">object</a></code>
74
74
  - <code title="post /v1/devboxes/{id}/write_file">client.devboxes.<a href="./src/runloop_api_client/resources/devboxes/devboxes.py">write_file</a>(id, \*\*<a href="src/runloop_api_client/types/devbox_write_file_params.py">params</a>) -> <a href="./src/runloop_api_client/types/devbox_execution_detail_view.py">DevboxExecutionDetailView</a></code>
75
75
 
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "runloop_api_client"
3
- version = "0.2.2"
3
+ version = "0.4.0"
4
4
  description = "The official Python library for the runloop API"
5
5
  dynamic = ["readme"]
6
6
  license = "MIT"
@@ -63,11 +63,11 @@ format = { chain = [
63
63
  "format:ruff",
64
64
  "format:docs",
65
65
  "fix:ruff",
66
+ # run formatting again to fix any inconsistencies when imports are stripped
67
+ "format:ruff",
66
68
  ]}
67
- "format:black" = "black ."
68
69
  "format:docs" = "python scripts/utils/ruffen-docs.py README.md api.md"
69
70
  "format:ruff" = "ruff format"
70
- "format:isort" = "isort ."
71
71
 
72
72
  "lint" = { chain = [
73
73
  "check:ruff",
@@ -125,10 +125,6 @@ path = "README.md"
125
125
  pattern = '\[(.+?)\]\(((?!https?://)\S+?)\)'
126
126
  replacement = '[\1](https://github.com/runloopai/api-client-python/tree/main/\g<2>)'
127
127
 
128
- [tool.black]
129
- line-length = 120
130
- target-version = ["py37"]
131
-
132
128
  [tool.pytest.ini_options]
133
129
  testpaths = ["tests"]
134
130
  addopts = "--tb=short"
@@ -80,7 +80,7 @@ pytz==2023.3.post1
80
80
  # via dirty-equals
81
81
  respx==0.20.2
82
82
  rich==13.7.1
83
- ruff==0.6.5
83
+ ruff==0.6.9
84
84
  setuptools==68.2.2
85
85
  # via nodeenv
86
86
  six==1.16.0
@@ -1575,7 +1575,7 @@ class AsyncAPIClient(BaseClient[httpx.AsyncClient, AsyncStream[Any]]):
1575
1575
  except Exception as err:
1576
1576
  log.debug("Encountered Exception", exc_info=True)
1577
1577
 
1578
- if retries_taken > 0:
1578
+ if remaining_retries > 0:
1579
1579
  return await self._retry_request(
1580
1580
  input_options,
1581
1581
  cast_to,
@@ -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.2.2" # x-release-please-version
4
+ __version__ = "0.4.0" # x-release-please-version
@@ -26,7 +26,7 @@ from ...types import (
26
26
  devbox_disk_snapshots_params,
27
27
  devbox_read_file_contents_params,
28
28
  )
29
- from ..._types import NOT_GIVEN, Body, Query, Headers, NoneType, NotGiven, FileTypes
29
+ from ..._types import NOT_GIVEN, Body, Query, Headers, NotGiven, FileTypes
30
30
  from ..._utils import (
31
31
  extract_files,
32
32
  maybe_transform,
@@ -60,6 +60,7 @@ from ..._response import (
60
60
  from ..._base_client import make_request_options
61
61
  from ...types.devbox_view import DevboxView
62
62
  from ...types.devbox_list_view import DevboxListView
63
+ from ...types.devbox_snapshot_view import DevboxSnapshotView
63
64
  from ...types.devbox_snapshot_list_view import DevboxSnapshotListView
64
65
  from ...types.code_mount_parameters_param import CodeMountParametersParam
65
66
  from ...types.devbox_execution_detail_view import DevboxExecutionDetailView
@@ -570,7 +571,7 @@ class DevboxesResource(SyncAPIResource):
570
571
  extra_query: Query | None = None,
571
572
  extra_body: Body | None = None,
572
573
  timeout: float | httpx.Timeout | None | NotGiven = NOT_GIVEN,
573
- ) -> None:
574
+ ) -> DevboxSnapshotView:
574
575
  """
575
576
  Create a filesystem snapshot of a devbox with the specified name and metadata.
576
577
 
@@ -589,7 +590,6 @@ class DevboxesResource(SyncAPIResource):
589
590
  """
590
591
  if not id:
591
592
  raise ValueError(f"Expected a non-empty value for `id` but received {id!r}")
592
- extra_headers = {"Accept": "*/*", **(extra_headers or {})}
593
593
  return self._post(
594
594
  f"/v1/devboxes/{id}/snapshot_disk",
595
595
  body=maybe_transform(
@@ -602,7 +602,7 @@ class DevboxesResource(SyncAPIResource):
602
602
  options=make_request_options(
603
603
  extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
604
604
  ),
605
- cast_to=NoneType,
605
+ cast_to=DevboxSnapshotView,
606
606
  )
607
607
 
608
608
  def upload_file(
@@ -1200,7 +1200,7 @@ class AsyncDevboxesResource(AsyncAPIResource):
1200
1200
  extra_query: Query | None = None,
1201
1201
  extra_body: Body | None = None,
1202
1202
  timeout: float | httpx.Timeout | None | NotGiven = NOT_GIVEN,
1203
- ) -> None:
1203
+ ) -> DevboxSnapshotView:
1204
1204
  """
1205
1205
  Create a filesystem snapshot of a devbox with the specified name and metadata.
1206
1206
 
@@ -1219,7 +1219,6 @@ class AsyncDevboxesResource(AsyncAPIResource):
1219
1219
  """
1220
1220
  if not id:
1221
1221
  raise ValueError(f"Expected a non-empty value for `id` but received {id!r}")
1222
- extra_headers = {"Accept": "*/*", **(extra_headers or {})}
1223
1222
  return await self._post(
1224
1223
  f"/v1/devboxes/{id}/snapshot_disk",
1225
1224
  body=await async_maybe_transform(
@@ -1232,7 +1231,7 @@ class AsyncDevboxesResource(AsyncAPIResource):
1232
1231
  options=make_request_options(
1233
1232
  extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
1234
1233
  ),
1235
- cast_to=NoneType,
1234
+ cast_to=DevboxSnapshotView,
1236
1235
  )
1237
1236
 
1238
1237
  async def upload_file(
@@ -1,7 +1,6 @@
1
1
  # File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
2
2
 
3
3
 
4
-
5
4
  from .._models import BaseModel
6
5
 
7
6
  __all__ = ["BlueprintBuildLog"]
@@ -1,7 +1,6 @@
1
1
  # File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
2
2
 
3
3
 
4
-
5
4
  from .._models import BaseModel
6
5
 
7
6
  __all__ = ["BlueprintPreviewView"]
@@ -1,7 +1,6 @@
1
1
  # File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
2
2
 
3
3
 
4
-
5
4
  from .._models import BaseModel
6
5
 
7
6
  __all__ = ["DevboxCreateSSHKeyResponse"]
@@ -13,6 +13,9 @@ class DevboxSnapshotView(BaseModel):
13
13
  id: str
14
14
  """The unique identifier of the snapshot."""
15
15
 
16
+ create_time_ms: int
17
+ """Creation time of the Snapshot (Unix timestamp milliseconds)."""
18
+
16
19
  metadata: Dict[str, str]
17
20
  """metadata associated with the snapshot."""
18
21
 
@@ -28,7 +28,9 @@ class DevboxView(BaseModel):
28
28
  metadata: Dict[str, str]
29
29
  """The user defined Devbox metadata."""
30
30
 
31
- status: Literal["provisioning", "initializing", "running", "failure", "shutdown"]
31
+ status: Literal[
32
+ "provisioning", "initializing", "running", "suspending", "suspended", "resuming", "failure", "shutdown"
33
+ ]
32
34
  """The current status of the Devbox."""
33
35
 
34
36
  blueprint_id: Optional[str] = None
@@ -14,6 +14,7 @@ from runloop_api_client import Runloop, AsyncRunloop
14
14
  from runloop_api_client.types import (
15
15
  DevboxView,
16
16
  DevboxListView,
17
+ DevboxSnapshotView,
17
18
  DevboxSnapshotListView,
18
19
  DevboxExecutionDetailView,
19
20
  DevboxCreateSSHKeyResponse,
@@ -486,7 +487,7 @@ class TestDevboxes:
486
487
  devbox = client.devboxes.snapshot_disk(
487
488
  id="id",
488
489
  )
489
- assert devbox is None
490
+ assert_matches_type(DevboxSnapshotView, devbox, path=["response"])
490
491
 
491
492
  @parametrize
492
493
  def test_method_snapshot_disk_with_all_params(self, client: Runloop) -> None:
@@ -495,7 +496,7 @@ class TestDevboxes:
495
496
  metadata={"foo": "string"},
496
497
  name="name",
497
498
  )
498
- assert devbox is None
499
+ assert_matches_type(DevboxSnapshotView, devbox, path=["response"])
499
500
 
500
501
  @parametrize
501
502
  def test_raw_response_snapshot_disk(self, client: Runloop) -> None:
@@ -506,7 +507,7 @@ class TestDevboxes:
506
507
  assert response.is_closed is True
507
508
  assert response.http_request.headers.get("X-Stainless-Lang") == "python"
508
509
  devbox = response.parse()
509
- assert devbox is None
510
+ assert_matches_type(DevboxSnapshotView, devbox, path=["response"])
510
511
 
511
512
  @parametrize
512
513
  def test_streaming_response_snapshot_disk(self, client: Runloop) -> None:
@@ -517,7 +518,7 @@ class TestDevboxes:
517
518
  assert response.http_request.headers.get("X-Stainless-Lang") == "python"
518
519
 
519
520
  devbox = response.parse()
520
- assert devbox is None
521
+ assert_matches_type(DevboxSnapshotView, devbox, path=["response"])
521
522
 
522
523
  assert cast(Any, response.is_closed) is True
523
524
 
@@ -1079,7 +1080,7 @@ class TestAsyncDevboxes:
1079
1080
  devbox = await async_client.devboxes.snapshot_disk(
1080
1081
  id="id",
1081
1082
  )
1082
- assert devbox is None
1083
+ assert_matches_type(DevboxSnapshotView, devbox, path=["response"])
1083
1084
 
1084
1085
  @parametrize
1085
1086
  async def test_method_snapshot_disk_with_all_params(self, async_client: AsyncRunloop) -> None:
@@ -1088,7 +1089,7 @@ class TestAsyncDevboxes:
1088
1089
  metadata={"foo": "string"},
1089
1090
  name="name",
1090
1091
  )
1091
- assert devbox is None
1092
+ assert_matches_type(DevboxSnapshotView, devbox, path=["response"])
1092
1093
 
1093
1094
  @parametrize
1094
1095
  async def test_raw_response_snapshot_disk(self, async_client: AsyncRunloop) -> None:
@@ -1099,7 +1100,7 @@ class TestAsyncDevboxes:
1099
1100
  assert response.is_closed is True
1100
1101
  assert response.http_request.headers.get("X-Stainless-Lang") == "python"
1101
1102
  devbox = await response.parse()
1102
- assert devbox is None
1103
+ assert_matches_type(DevboxSnapshotView, devbox, path=["response"])
1103
1104
 
1104
1105
  @parametrize
1105
1106
  async def test_streaming_response_snapshot_disk(self, async_client: AsyncRunloop) -> None:
@@ -1110,7 +1111,7 @@ class TestAsyncDevboxes:
1110
1111
  assert response.http_request.headers.get("X-Stainless-Lang") == "python"
1111
1112
 
1112
1113
  devbox = await response.parse()
1113
- assert devbox is None
1114
+ assert_matches_type(DevboxSnapshotView, devbox, path=["response"])
1114
1115
 
1115
1116
  assert cast(Any, response.is_closed) is True
1116
1117
 
@@ -10,6 +10,7 @@ import inspect
10
10
  import tracemalloc
11
11
  from typing import Any, Union, cast
12
12
  from unittest import mock
13
+ from typing_extensions import Literal
13
14
 
14
15
  import httpx
15
16
  import pytest
@@ -765,7 +766,14 @@ class TestRunloop:
765
766
  @pytest.mark.parametrize("failures_before_success", [0, 2, 4])
766
767
  @mock.patch("runloop_api_client._base_client.BaseClient._calculate_retry_timeout", _low_retry_timeout)
767
768
  @pytest.mark.respx(base_url=base_url)
768
- def test_retries_taken(self, client: Runloop, failures_before_success: int, respx_mock: MockRouter) -> None:
769
+ @pytest.mark.parametrize("failure_mode", ["status", "exception"])
770
+ def test_retries_taken(
771
+ self,
772
+ client: Runloop,
773
+ failures_before_success: int,
774
+ failure_mode: Literal["status", "exception"],
775
+ respx_mock: MockRouter,
776
+ ) -> None:
769
777
  client = client.with_options(max_retries=4)
770
778
 
771
779
  nb_retries = 0
@@ -774,6 +782,8 @@ class TestRunloop:
774
782
  nonlocal nb_retries
775
783
  if nb_retries < failures_before_success:
776
784
  nb_retries += 1
785
+ if failure_mode == "exception":
786
+ raise RuntimeError("oops")
777
787
  return httpx.Response(500)
778
788
  return httpx.Response(200)
779
789
 
@@ -1551,8 +1561,13 @@ class TestAsyncRunloop:
1551
1561
  @mock.patch("runloop_api_client._base_client.BaseClient._calculate_retry_timeout", _low_retry_timeout)
1552
1562
  @pytest.mark.respx(base_url=base_url)
1553
1563
  @pytest.mark.asyncio
1564
+ @pytest.mark.parametrize("failure_mode", ["status", "exception"])
1554
1565
  async def test_retries_taken(
1555
- self, async_client: AsyncRunloop, failures_before_success: int, respx_mock: MockRouter
1566
+ self,
1567
+ async_client: AsyncRunloop,
1568
+ failures_before_success: int,
1569
+ failure_mode: Literal["status", "exception"],
1570
+ respx_mock: MockRouter,
1556
1571
  ) -> None:
1557
1572
  client = async_client.with_options(max_retries=4)
1558
1573
 
@@ -1562,6 +1577,8 @@ class TestAsyncRunloop:
1562
1577
  nonlocal nb_retries
1563
1578
  if nb_retries < failures_before_success:
1564
1579
  nb_retries += 1
1580
+ if failure_mode == "exception":
1581
+ raise RuntimeError("oops")
1565
1582
  return httpx.Response(500)
1566
1583
  return httpx.Response(200)
1567
1584
 
@@ -245,7 +245,7 @@ def test_nested_union_of_mixed_types() -> None:
245
245
  assert m.foo is True
246
246
 
247
247
  m = Model.construct(foo="CARD_HOLDER")
248
- assert m.foo is "CARD_HOLDER"
248
+ assert m.foo == "CARD_HOLDER"
249
249
 
250
250
  m = Model.construct(foo={"bar": False})
251
251
  assert isinstance(m.foo, Submodel1)
@@ -1,3 +0,0 @@
1
- {
2
- ".": "0.2.2"
3
- }