code-sandboxes 1.9.32__tar.gz → 1.9.33__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 (266) hide show
  1. {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/PKG-INFO +1 -1
  2. {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/code_sandboxes/__version__.py +1 -1
  3. {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/code_sandboxes/environments/adapters/daytona.py +46 -3
  4. {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/tests/test_environment_daytona_builder.py +44 -0
  5. {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/.github/workflows/build.yml +0 -0
  6. {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/.github/workflows/environments-live.yml +0 -0
  7. {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/.github/workflows/py-code-style.yml +0 -0
  8. {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/.github/workflows/py-tests.yml +0 -0
  9. {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/.github/workflows/py-typing.yml +0 -0
  10. {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/.github/workflows/reusable-python.yml +0 -0
  11. {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/.gitignore +0 -0
  12. {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/.licenserc.yaml +0 -0
  13. {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/.pre-commit-config.yaml +0 -0
  14. {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/.vscode/settings.json +0 -0
  15. {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/CHANGELOG.md +0 -0
  16. {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/Dockerfile +0 -0
  17. {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/LICENSE +0 -0
  18. {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/Makefile +0 -0
  19. {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/README.md +0 -0
  20. {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/code_sandboxes/__init__.py +0 -0
  21. {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/code_sandboxes/base.py +0 -0
  22. {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/code_sandboxes/bridge_mount.py +0 -0
  23. {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/code_sandboxes/builds.py +0 -0
  24. {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/code_sandboxes/cli.py +0 -0
  25. {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/code_sandboxes/client.py +0 -0
  26. {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/code_sandboxes/cloudflare_sandbox.py +0 -0
  27. {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/code_sandboxes/commands.py +0 -0
  28. {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/code_sandboxes/console.py +0 -0
  29. {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/code_sandboxes/contents.py +0 -0
  30. {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/code_sandboxes/coreweave_sandbox.py +0 -0
  31. {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/code_sandboxes/datalayer_sandbox.py +0 -0
  32. {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/code_sandboxes/daytona_sandbox.py +0 -0
  33. {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/code_sandboxes/docker_sandbox.py +0 -0
  34. {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/code_sandboxes/e2b_sandbox.py +0 -0
  35. {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/code_sandboxes/environments/__init__.py +0 -0
  36. {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/code_sandboxes/environments/__main__.py +0 -0
  37. {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/code_sandboxes/environments/accounts.py +0 -0
  38. {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/code_sandboxes/environments/adapters/__init__.py +0 -0
  39. {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/code_sandboxes/environments/adapters/datalayer.py +0 -0
  40. {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/code_sandboxes/environments/adapters/e2b.py +0 -0
  41. {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/code_sandboxes/environments/adapters/managed.py +0 -0
  42. {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/code_sandboxes/environments/adapters/modal.py +0 -0
  43. {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/code_sandboxes/environments/attest.py +0 -0
  44. {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/code_sandboxes/environments/bases.py +0 -0
  45. {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/code_sandboxes/environments/breaker.py +0 -0
  46. {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/code_sandboxes/environments/build_secrets.py +0 -0
  47. {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/code_sandboxes/environments/builders.py +0 -0
  48. {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/code_sandboxes/environments/canonical.py +0 -0
  49. {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/code_sandboxes/environments/conformance.py +0 -0
  50. {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/code_sandboxes/environments/constraints/sandbox-contract-v1.txt +0 -0
  51. {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/code_sandboxes/environments/constraints/wheelhouse/README.md +0 -0
  52. {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/code_sandboxes/environments/constraints/wheelhouse/jupyter_server-2.21.0+datalayer.1-py3-none-any.whl +0 -0
  53. {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/code_sandboxes/environments/contract.py +0 -0
  54. {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/code_sandboxes/environments/doctor/__init__.py +0 -0
  55. {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/code_sandboxes/environments/doctor/build.py +0 -0
  56. {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/code_sandboxes/environments/doctor/datalayer_sandbox.py +0 -0
  57. {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/code_sandboxes/environments/doctor/report.schema.json +0 -0
  58. {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/code_sandboxes/environments/errors.py +0 -0
  59. {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/code_sandboxes/environments/files.py +0 -0
  60. {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/code_sandboxes/environments/image_import.py +0 -0
  61. {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/code_sandboxes/environments/lifecycle.py +0 -0
  62. {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/code_sandboxes/environments/policy.py +0 -0
  63. {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/code_sandboxes/environments/redact.py +0 -0
  64. {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/code_sandboxes/environments/resolve.py +0 -0
  65. {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/code_sandboxes/environments/resolve_conda.py +0 -0
  66. {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/code_sandboxes/environments/schema.py +0 -0
  67. {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/code_sandboxes/environments/spec.py +0 -0
  68. {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/code_sandboxes/eval_sandbox.py +0 -0
  69. {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/code_sandboxes/exceptions.py +0 -0
  70. {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/code_sandboxes/filesystem.py +0 -0
  71. {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/code_sandboxes/google_colab.py +0 -0
  72. {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/code_sandboxes/google_colab_sandbox.py +0 -0
  73. {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/code_sandboxes/interfaces.py +0 -0
  74. {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/code_sandboxes/jupyter_ingress.py +0 -0
  75. {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/code_sandboxes/jupyter_server_sandbox.py +0 -0
  76. {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/code_sandboxes/kaggle.py +0 -0
  77. {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/code_sandboxes/kaggle_execute.py +0 -0
  78. {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/code_sandboxes/kaggle_live.py +0 -0
  79. {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/code_sandboxes/kaggle_sandbox.py +0 -0
  80. {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/code_sandboxes/lifecycle.py +0 -0
  81. {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/code_sandboxes/manage.py +0 -0
  82. {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/code_sandboxes/modal_sandbox.py +0 -0
  83. {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/code_sandboxes/models.py +0 -0
  84. {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/code_sandboxes/monty_sandbox.py +0 -0
  85. {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/code_sandboxes/provider_ingress.py +0 -0
  86. {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/code_sandboxes/providers.py +0 -0
  87. {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/docker/Dockerfile +0 -0
  88. {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/docs/.gitignore +0 -0
  89. {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/docs/LICENSE +0 -0
  90. {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/docs/Makefile +0 -0
  91. {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/docs/README.md +0 -0
  92. {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/docs/babel.config.js +0 -0
  93. {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/docs/docs/api-reference/_category_.yml +0 -0
  94. {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/docs/docs/api-reference/index.mdx +0 -0
  95. {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/docs/docs/cli/_category_.yml +0 -0
  96. {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/docs/docs/cli/index.mdx +0 -0
  97. {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/docs/docs/contribute/_category_.yml +0 -0
  98. {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/docs/docs/contribute/index.mdx +0 -0
  99. {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/docs/docs/environments/_category_.yml +0 -0
  100. {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/docs/docs/environments/contract.mdx +0 -0
  101. {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/docs/docs/environments/index.mdx +0 -0
  102. {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/docs/docs/environments/specification.mdx +0 -0
  103. {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/docs/docs/environments/spike-2026-09.mdx +0 -0
  104. {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/docs/docs/examples/_category_.yml +0 -0
  105. {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/docs/docs/examples/index.mdx +0 -0
  106. {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/docs/docs/guide/_category_.yml +0 -0
  107. {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/docs/docs/guide/index.mdx +0 -0
  108. {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/docs/docs/index.mdx +0 -0
  109. {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/docs/docs/install/_category_.yml +0 -0
  110. {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/docs/docs/install/index.mdx +0 -0
  111. {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/docs/docs/provider-ingress.mdx +0 -0
  112. {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/docs/docs/providers/_category_.yml +0 -0
  113. {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/docs/docs/providers/cloudflare.mdx +0 -0
  114. {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/docs/docs/providers/coreweave.mdx +0 -0
  115. {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/docs/docs/providers/datalayer.mdx +0 -0
  116. {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/docs/docs/providers/daytona.mdx +0 -0
  117. {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/docs/docs/providers/docker.mdx +0 -0
  118. {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/docs/docs/providers/e2b.mdx +0 -0
  119. {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/docs/docs/providers/eval.mdx +0 -0
  120. {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/docs/docs/providers/google-colab.mdx +0 -0
  121. {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/docs/docs/providers/index.mdx +0 -0
  122. {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/docs/docs/providers/jupyter-server.mdx +0 -0
  123. {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/docs/docs/providers/kaggle.mdx +0 -0
  124. {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/docs/docs/providers/modal.mdx +0 -0
  125. {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/docs/docs/providers/monty.mdx +0 -0
  126. {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/docs/docusaurus.config.js +0 -0
  127. {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/docs/package.json +0 -0
  128. {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/docs/sidebars.js +0 -0
  129. {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/docs/src/components/HomepageRow1.js +0 -0
  130. {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/docs/src/components/HomepageRow1.module.css +0 -0
  131. {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/docs/src/components/HomepageRow2.js +0 -0
  132. {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/docs/src/components/HomepageRow2.module.css +0 -0
  133. {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/docs/src/components/HomepageRow3.js +0 -0
  134. {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/docs/src/components/HomepageRow3.module.css +0 -0
  135. {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/docs/src/css/custom.css +0 -0
  136. {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/docs/src/pages/index.module.css +0 -0
  137. {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/docs/src/pages/markdown-page.md +0 -0
  138. {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/docs/src/theme/CustomDocItem.tsx +0 -0
  139. {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/docs/src/theme/IconsTitle.tsx +0 -0
  140. {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/docs/static/img/bricks.svg +0 -0
  141. {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/docs/static/img/building-construction.svg +0 -0
  142. {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/docs/static/img/cloud-sun.svg +0 -0
  143. {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/docs/static/img/cloud.svg +0 -0
  144. {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/docs/static/img/collaboration.svg +0 -0
  145. {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/docs/static/img/copy-left.svg +0 -0
  146. {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/docs/static/img/datalayer/logo.png +0 -0
  147. {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/docs/static/img/datalayer/logo.svg +0 -0
  148. {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/docs/static/img/datalayer/personas/business.svg +0 -0
  149. {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/docs/static/img/datalayer/personas/data-scientist.svg +0 -0
  150. {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/docs/static/img/datalayer/personas/devops.svg +0 -0
  151. {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/docs/static/img/datalayer/project/project-line.svg +0 -0
  152. {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/docs/static/img/favicon.ico +0 -0
  153. {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/docs/static/img/jupyter.svg +0 -0
  154. {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/docs/static/img/open-source.svg +0 -0
  155. {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/docs/static/img/react-js.svg +0 -0
  156. {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/docs/static/img/react-js2.svg +0 -0
  157. {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/docs/static/img/ringed-planet.svg +0 -0
  158. {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/docs/static/img/robot.svg +0 -0
  159. {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/docs/static/img/rocket.svg +0 -0
  160. {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/docs/static/img/shield.svg +0 -0
  161. {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/docs/static/img/sparkles.svg +0 -0
  162. {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/docs/static/img/streamlit.gif +0 -0
  163. {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/docs/static/img/super-hero.svg +0 -0
  164. {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/docs/static/img/target.svg +0 -0
  165. {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/docs/static/img/thumbs-up.svg +0 -0
  166. {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/examples/README.md +0 -0
  167. {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/examples/exec/Makefile +0 -0
  168. {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/examples/exec/cloudflare_sandbox_example.py +0 -0
  169. {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/examples/exec/coreweave_sandbox_example.py +0 -0
  170. {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/examples/exec/datalayer_sandbox_example.py +0 -0
  171. {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/examples/exec/daytona_sandbox_example.py +0 -0
  172. {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/examples/exec/docker_sandbox_example.py +0 -0
  173. {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/examples/exec/e2b_sandbox_example.py +0 -0
  174. {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/examples/exec/eval_sandbox_example.py +0 -0
  175. {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/examples/exec/google_colab_sandbox_example.py +0 -0
  176. {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/examples/exec/jupyter_server_sandbox_example.py +0 -0
  177. {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/examples/exec/kaggle_sandbox_example.py +0 -0
  178. {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/examples/exec/modal_sandbox_example.py +0 -0
  179. {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/examples/exec/monty_sandbox_example.py +0 -0
  180. {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/examples/repl/Makefile +0 -0
  181. {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/examples/repl/cloudflare_sandbox_example.py +0 -0
  182. {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/examples/repl/coreweave_sandbox_example.py +0 -0
  183. {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/examples/repl/datalayer_sandbox_example.py +0 -0
  184. {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/examples/repl/daytona_sandbox_example.py +0 -0
  185. {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/examples/repl/docker_sandbox_example.py +0 -0
  186. {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/examples/repl/e2b_sandbox_example.py +0 -0
  187. {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/examples/repl/eval_sandbox_example.py +0 -0
  188. {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/examples/repl/google_colab_sandbox_example.py +0 -0
  189. {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/examples/repl/jupyter_server_sandbox_example.py +0 -0
  190. {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/examples/repl/kaggle_sandbox_example.py +0 -0
  191. {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/examples/repl/modal_sandbox_example.py +0 -0
  192. {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/examples/repl/monty_sandbox_example.py +0 -0
  193. {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/pyproject.toml +0 -0
  194. {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/schemas/environment-v1alpha1.json +0 -0
  195. {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/tests/__init__.py +0 -0
  196. {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/tests/conftest.py +0 -0
  197. {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/tests/test_a_datalayer_sandbox_can_be_interrupted.py +0 -0
  198. {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/tests/test_bridge_mount.py +0 -0
  199. {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/tests/test_builds.py +0 -0
  200. {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/tests/test_cli_exec.py +0 -0
  201. {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/tests/test_cli_repl.py +0 -0
  202. {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/tests/test_client.py +0 -0
  203. {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/tests/test_client_contents.py +0 -0
  204. {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/tests/test_client_files.py +0 -0
  205. {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/tests/test_client_outcome_error_output.py +0 -0
  206. {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/tests/test_cloudflare.py +0 -0
  207. {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/tests/test_commands_envelope.py +0 -0
  208. {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/tests/test_console.py +0 -0
  209. {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/tests/test_contents_contract.py +0 -0
  210. {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/tests/test_contents_live_matrix.py +0 -0
  211. {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/tests/test_coreweave.py +0 -0
  212. {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/tests/test_datalayer_sandbox.py +0 -0
  213. {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/tests/test_daytona.py +0 -0
  214. {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/tests/test_e2b.py +0 -0
  215. {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/tests/test_environment_accounts.py +0 -0
  216. {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/tests/test_environment_attest.py +0 -0
  217. {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/tests/test_environment_bases.py +0 -0
  218. {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/tests/test_environment_breaker.py +0 -0
  219. {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/tests/test_environment_build_secrets.py +0 -0
  220. {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/tests/test_environment_builders.py +0 -0
  221. {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/tests/test_environment_canonical.py +0 -0
  222. {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/tests/test_environment_conformance.py +0 -0
  223. {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/tests/test_environment_constraints.py +0 -0
  224. {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/tests/test_environment_contract.py +0 -0
  225. {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/tests/test_environment_cross_variant_report.py +0 -0
  226. {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/tests/test_environment_datalayer_builder.py +0 -0
  227. {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/tests/test_environment_dockerfile_source.py +0 -0
  228. {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/tests/test_environment_doctor.py +0 -0
  229. {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/tests/test_environment_e2b_builder.py +0 -0
  230. {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/tests/test_environment_errors.py +0 -0
  231. {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/tests/test_environment_image_import.py +0 -0
  232. {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/tests/test_environment_lifecycle.py +0 -0
  233. {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/tests/test_environment_live_matrix.py +0 -0
  234. {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/tests/test_environment_managed_builders.py +0 -0
  235. {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/tests/test_environment_modal_builder.py +0 -0
  236. {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/tests/test_environment_organization_policy.py +0 -0
  237. {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/tests/test_environment_redact.py +0 -0
  238. {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/tests/test_environment_resolve.py +0 -0
  239. {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/tests/test_environment_resolve_conda.py +0 -0
  240. {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/tests/test_environment_spec.py +0 -0
  241. {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/tests/test_environment_spec_organization_policy.py +0 -0
  242. {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/tests/test_eval.py +0 -0
  243. {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/tests/test_every_variant_has_a_real_interrupt.py +0 -0
  244. {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/tests/test_factory.py +0 -0
  245. {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/tests/test_google_colab.py +0 -0
  246. {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/tests/test_integration.py +0 -0
  247. {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/tests/test_jupyter_ingress.py +0 -0
  248. {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/tests/test_jupyter_server.py +0 -0
  249. {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/tests/test_jupyter_server_streaming.py +0 -0
  250. {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/tests/test_kaggle.py +0 -0
  251. {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/tests/test_kaggle_execute.py +0 -0
  252. {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/tests/test_kaggle_live.py +0 -0
  253. {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/tests/test_kaggle_session.py +0 -0
  254. {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/tests/test_kernel_client_compatibility.py +0 -0
  255. {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/tests/test_lifecycle_vocabulary.py +0 -0
  256. {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/tests/test_manage.py +0 -0
  257. {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/tests/test_manage_datalayer.py +0 -0
  258. {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/tests/test_modal_google_colab_sandbox.py +0 -0
  259. {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/tests/test_modal_session.py +0 -0
  260. {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/tests/test_models.py +0 -0
  261. {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/tests/test_output_line_fidelity.py +0 -0
  262. {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/tests/test_provider_catalog_names.py +0 -0
  263. {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/tests/test_provider_ingress.py +0 -0
  264. {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/tests/test_providers.py +0 -0
  265. {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/tests/test_sandboxes.py +0 -0
  266. {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/tests/test_the_kill_relaunch_drill.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: code_sandboxes
3
- Version: 1.9.32
3
+ Version: 1.9.33
4
4
  Project-URL: Home, https://github.com/datalayer/code-sandboxes
5
5
  Author-email: Datalayer <info@datalayer.io>
6
6
  License: BSD 3-Clause License
@@ -3,4 +3,4 @@
3
3
 
4
4
  """Code Sandboxes."""
5
5
 
6
- __version__ = "1.9.32"
6
+ __version__ = "1.9.33"
@@ -82,6 +82,7 @@ requires of every GPU sandbox (`DaytonaSandbox` reads the snapshot's `gpu`).
82
82
 
83
83
  from __future__ import annotations
84
84
 
85
+ import contextlib
85
86
  import shlex
86
87
  import tempfile
87
88
  import uuid
@@ -163,6 +164,11 @@ def daytona_gpu(accelerator_type: str) -> str | None:
163
164
  return name if name in DAYTONA_GPUS else None
164
165
 
165
166
 
167
+ def _snapshot_name(request: BuildRequest) -> str:
168
+ """The name a build gives its snapshot, unique to the build (its uid is in it)."""
169
+ return f"dl-{request.environment.metadata.name}-v{request.version}-{request.build_uid}"
170
+
171
+
166
172
  def _pip_lock_command(*, authored: bool) -> str:
167
173
  """Install the pip lock: `sync` to it, or `install` it over an authored Dockerfile.
168
174
 
@@ -245,6 +251,9 @@ class Builder(ManagedBuilder):
245
251
  self._daytona_sdk = daytona_sdk or _daytona_sdk
246
252
  self._registry_sdk = registry_sdk or _daytona_registry_sdk
247
253
  self._client_instance: Any = None
254
+ #: The builds `cancel` was asked to stop: one whose snapshot is only
255
+ #: finished after the cancel deletes it itself (E2-18).
256
+ self._cancelled: set[str] = set()
248
257
 
249
258
  def _provider_secrets(self) -> dict[str, str]:
250
259
  """The owner's Daytona secrets the build credential carries (D-8, E2-01).
@@ -339,7 +348,7 @@ class Builder(ManagedBuilder):
339
348
  spec = request.environment.spec
340
349
  sdk = self._daytona_sdk()
341
350
  client = self._client(sdk)
342
- name = f"dl-{request.environment.metadata.name}-v{request.version}-{request.build_uid}"
351
+ name = _snapshot_name(request)
343
352
 
344
353
  registry_id = self._register_base_pull(client, request.resolved_base)
345
354
  try:
@@ -469,6 +478,17 @@ class Builder(ManagedBuilder):
469
478
  # not control, whether the build above succeeded or not (D-18).
470
479
  self._unregister_base_pull(client, registry_id)
471
480
 
481
+ if request.build_uid in self._cancelled:
482
+ # Finished after the build was cancelled: nothing will record it,
483
+ # so it goes now rather than wait in the account for nobody.
484
+ self._log(f"The build was cancelled: deleting the snapshot {snapshot.id} it made")
485
+ with contextlib.suppress(EnvironmentsError):
486
+ self._delete_by_id(sdk, client, snapshot.id)
487
+ raise EnvironmentsError(
488
+ BUILD_FAILED,
489
+ "The build was cancelled, and the snapshot it made was deleted",
490
+ detail={"variant": self.variant, "name": name},
491
+ )
472
492
  return ArtifactReference(
473
493
  variant=self.variant,
474
494
  immutable_reference=snapshot.id,
@@ -635,8 +655,11 @@ class Builder(ManagedBuilder):
635
655
  a later build's snapshot that inherited it.
636
656
  """
637
657
  sdk = self._daytona_sdk()
638
- client = self._client(sdk)
639
- snapshot = artifact.provider_artifact_id or artifact.immutable_reference
658
+ self._delete_by_id(
659
+ sdk, self._client(sdk), artifact.provider_artifact_id or artifact.immutable_reference
660
+ )
661
+
662
+ def _delete_by_id(self, sdk: Any, client: Any, snapshot: str) -> None:
640
663
  try:
641
664
  client.snapshot.delete(snapshot)
642
665
  except sdk.DaytonaNotFoundError:
@@ -646,6 +669,26 @@ class Builder(ManagedBuilder):
646
669
  raise self._provider_error("delete the snapshot", error) from error
647
670
  self._log(f"Deleted the Daytona snapshot {snapshot}")
648
671
 
672
+ def cancel(self, request: BuildRequest) -> None:
673
+ """Stop a build: delete the snapshot it is making, now or once it is made (E2-18).
674
+
675
+ The build step calls this when the build is cancelled, and then lets
676
+ the build's own thread finish unheard, so a snapshot Daytona goes on
677
+ building is recorded by nobody. It is found by the name this build
678
+ gave it, which is unique to the build (the build uid is in it), and
679
+ deleted by its id. One not made yet is deleted by `build` itself, the
680
+ moment Daytona hands it back.
681
+ """
682
+ self._cancelled.add(request.build_uid)
683
+ sdk = self._daytona_sdk()
684
+ client = self._client(sdk)
685
+ try:
686
+ snapshot = client.snapshot.get(_snapshot_name(request))
687
+ except Exception:
688
+ return
689
+ self._log(f"The build was cancelled: deleting the snapshot {snapshot.id} it was making")
690
+ self._delete_by_id(sdk, client, snapshot.id)
691
+
649
692
  def smoke_test(
650
693
  self,
651
694
  artifact: ArtifactReference,
@@ -912,6 +912,50 @@ class TestReadingTheRegistry:
912
912
  assert len(daytona.daytona_calls) == 1
913
913
 
914
914
 
915
+ class TestCancellingABuild:
916
+ """E2-18: the build step lets a cancelled build's thread finish unheard, so
917
+ a snapshot Daytona goes on building would be recorded by nobody. Found by
918
+ E2-14's drill on 2026-09-18: `dl-backfill-drill-v2-…` kept building after
919
+ its build was cancelled."""
920
+
921
+ NAME = "dl-geospatial-analysis-v3-bld-1"
922
+
923
+ def test_a_snapshot_being_made_is_deleted_by_id(self) -> None:
924
+ service = FakeSnapshotService(
925
+ get_results={
926
+ self.NAME: FakeSnapshot(id="snp-9", name=self.NAME),
927
+ "snp-9": FakeSnapshot(id="snp-9", name=self.NAME),
928
+ }
929
+ )
930
+ builder = a_builder(
931
+ daytona=FakeDaytonaModule(client=FakeDaytonaClient(snapshot_service=service))
932
+ )
933
+ builder.cancel(a_request())
934
+ assert [call.args for call in service.get_calls] == [(self.NAME,)]
935
+ assert [call.args for call in service.delete_calls] == [("snp-9",)]
936
+
937
+ def test_one_made_after_the_cancel_is_deleted_by_the_build(self) -> None:
938
+ """Not made yet when the cancel came: the build deletes it the moment
939
+ Daytona hands it back, and does not answer with it."""
940
+ made = FakeSnapshot(id="snp-late", name=self.NAME)
941
+ service = FakeSnapshotService(create_result=made, get_results={"snp-late": made})
942
+ builder = a_builder(
943
+ daytona=FakeDaytonaModule(client=FakeDaytonaClient(snapshot_service=service))
944
+ )
945
+ builder.cancel(a_request())
946
+ assert service.delete_calls == []
947
+ with pytest.raises(EnvironmentsError) as raised:
948
+ builder.build(a_request())
949
+ assert raised.value.code.code == BUILD_FAILED.code
950
+ assert "cancelled" in raised.value.message
951
+ assert [call.args for call in service.delete_calls] == [("snp-late",)]
952
+
953
+ def test_another_build_of_the_same_builder_is_not_touched(self) -> None:
954
+ builder = a_builder()
955
+ builder.cancel(a_request(build_uid="bld-other"))
956
+ assert builder.build(a_request()).provider_artifact_id
957
+
958
+
915
959
  class TestDeletingASnapshot:
916
960
  """E2-18: retention and a failed build both need a snapshot to go."""
917
961
 
File without changes