code-sandboxes 1.9.1__tar.gz → 1.9.2__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 (261) hide show
  1. {code_sandboxes-1.9.1 → code_sandboxes-1.9.2}/CHANGELOG.md +14 -0
  2. {code_sandboxes-1.9.1 → code_sandboxes-1.9.2}/PKG-INFO +1 -1
  3. {code_sandboxes-1.9.1 → code_sandboxes-1.9.2}/code_sandboxes/__version__.py +1 -1
  4. {code_sandboxes-1.9.1 → code_sandboxes-1.9.2}/code_sandboxes/environments/adapters/datalayer.py +32 -5
  5. {code_sandboxes-1.9.1 → code_sandboxes-1.9.2}/tests/test_environment_datalayer_builder.py +23 -1
  6. {code_sandboxes-1.9.1 → code_sandboxes-1.9.2}/.github/workflows/build.yml +0 -0
  7. {code_sandboxes-1.9.1 → code_sandboxes-1.9.2}/.github/workflows/environments-live.yml +0 -0
  8. {code_sandboxes-1.9.1 → code_sandboxes-1.9.2}/.github/workflows/py-code-style.yml +0 -0
  9. {code_sandboxes-1.9.1 → code_sandboxes-1.9.2}/.github/workflows/py-tests.yml +0 -0
  10. {code_sandboxes-1.9.1 → code_sandboxes-1.9.2}/.github/workflows/py-typing.yml +0 -0
  11. {code_sandboxes-1.9.1 → code_sandboxes-1.9.2}/.github/workflows/reusable-python.yml +0 -0
  12. {code_sandboxes-1.9.1 → code_sandboxes-1.9.2}/.gitignore +0 -0
  13. {code_sandboxes-1.9.1 → code_sandboxes-1.9.2}/.licenserc.yaml +0 -0
  14. {code_sandboxes-1.9.1 → code_sandboxes-1.9.2}/.pre-commit-config.yaml +0 -0
  15. {code_sandboxes-1.9.1 → code_sandboxes-1.9.2}/.vscode/settings.json +0 -0
  16. {code_sandboxes-1.9.1 → code_sandboxes-1.9.2}/Dockerfile +0 -0
  17. {code_sandboxes-1.9.1 → code_sandboxes-1.9.2}/LICENSE +0 -0
  18. {code_sandboxes-1.9.1 → code_sandboxes-1.9.2}/Makefile +0 -0
  19. {code_sandboxes-1.9.1 → code_sandboxes-1.9.2}/README.md +0 -0
  20. {code_sandboxes-1.9.1 → code_sandboxes-1.9.2}/code_sandboxes/__init__.py +0 -0
  21. {code_sandboxes-1.9.1 → code_sandboxes-1.9.2}/code_sandboxes/base.py +0 -0
  22. {code_sandboxes-1.9.1 → code_sandboxes-1.9.2}/code_sandboxes/bridge_mount.py +0 -0
  23. {code_sandboxes-1.9.1 → code_sandboxes-1.9.2}/code_sandboxes/builds.py +0 -0
  24. {code_sandboxes-1.9.1 → code_sandboxes-1.9.2}/code_sandboxes/cli.py +0 -0
  25. {code_sandboxes-1.9.1 → code_sandboxes-1.9.2}/code_sandboxes/client.py +0 -0
  26. {code_sandboxes-1.9.1 → code_sandboxes-1.9.2}/code_sandboxes/cloudflare_sandbox.py +0 -0
  27. {code_sandboxes-1.9.1 → code_sandboxes-1.9.2}/code_sandboxes/commands.py +0 -0
  28. {code_sandboxes-1.9.1 → code_sandboxes-1.9.2}/code_sandboxes/console.py +0 -0
  29. {code_sandboxes-1.9.1 → code_sandboxes-1.9.2}/code_sandboxes/contents.py +0 -0
  30. {code_sandboxes-1.9.1 → code_sandboxes-1.9.2}/code_sandboxes/coreweave_sandbox.py +0 -0
  31. {code_sandboxes-1.9.1 → code_sandboxes-1.9.2}/code_sandboxes/datalayer_sandbox.py +0 -0
  32. {code_sandboxes-1.9.1 → code_sandboxes-1.9.2}/code_sandboxes/daytona_sandbox.py +0 -0
  33. {code_sandboxes-1.9.1 → code_sandboxes-1.9.2}/code_sandboxes/docker_sandbox.py +0 -0
  34. {code_sandboxes-1.9.1 → code_sandboxes-1.9.2}/code_sandboxes/e2b_sandbox.py +0 -0
  35. {code_sandboxes-1.9.1 → code_sandboxes-1.9.2}/code_sandboxes/environments/__init__.py +0 -0
  36. {code_sandboxes-1.9.1 → code_sandboxes-1.9.2}/code_sandboxes/environments/__main__.py +0 -0
  37. {code_sandboxes-1.9.1 → code_sandboxes-1.9.2}/code_sandboxes/environments/accounts.py +0 -0
  38. {code_sandboxes-1.9.1 → code_sandboxes-1.9.2}/code_sandboxes/environments/adapters/__init__.py +0 -0
  39. {code_sandboxes-1.9.1 → code_sandboxes-1.9.2}/code_sandboxes/environments/adapters/daytona.py +0 -0
  40. {code_sandboxes-1.9.1 → code_sandboxes-1.9.2}/code_sandboxes/environments/adapters/e2b.py +0 -0
  41. {code_sandboxes-1.9.1 → code_sandboxes-1.9.2}/code_sandboxes/environments/adapters/managed.py +0 -0
  42. {code_sandboxes-1.9.1 → code_sandboxes-1.9.2}/code_sandboxes/environments/adapters/modal.py +0 -0
  43. {code_sandboxes-1.9.1 → code_sandboxes-1.9.2}/code_sandboxes/environments/attest.py +0 -0
  44. {code_sandboxes-1.9.1 → code_sandboxes-1.9.2}/code_sandboxes/environments/bases.py +0 -0
  45. {code_sandboxes-1.9.1 → code_sandboxes-1.9.2}/code_sandboxes/environments/breaker.py +0 -0
  46. {code_sandboxes-1.9.1 → code_sandboxes-1.9.2}/code_sandboxes/environments/build_secrets.py +0 -0
  47. {code_sandboxes-1.9.1 → code_sandboxes-1.9.2}/code_sandboxes/environments/builders.py +0 -0
  48. {code_sandboxes-1.9.1 → code_sandboxes-1.9.2}/code_sandboxes/environments/canonical.py +0 -0
  49. {code_sandboxes-1.9.1 → code_sandboxes-1.9.2}/code_sandboxes/environments/conformance.py +0 -0
  50. {code_sandboxes-1.9.1 → code_sandboxes-1.9.2}/code_sandboxes/environments/constraints/sandbox-contract-v1.txt +0 -0
  51. {code_sandboxes-1.9.1 → code_sandboxes-1.9.2}/code_sandboxes/environments/constraints/wheelhouse/README.md +0 -0
  52. {code_sandboxes-1.9.1 → code_sandboxes-1.9.2}/code_sandboxes/environments/constraints/wheelhouse/jupyter_server-2.21.0+datalayer.1-py3-none-any.whl +0 -0
  53. {code_sandboxes-1.9.1 → code_sandboxes-1.9.2}/code_sandboxes/environments/contract.py +0 -0
  54. {code_sandboxes-1.9.1 → code_sandboxes-1.9.2}/code_sandboxes/environments/doctor/__init__.py +0 -0
  55. {code_sandboxes-1.9.1 → code_sandboxes-1.9.2}/code_sandboxes/environments/doctor/build.py +0 -0
  56. {code_sandboxes-1.9.1 → code_sandboxes-1.9.2}/code_sandboxes/environments/doctor/datalayer_sandbox.py +0 -0
  57. {code_sandboxes-1.9.1 → code_sandboxes-1.9.2}/code_sandboxes/environments/doctor/report.schema.json +0 -0
  58. {code_sandboxes-1.9.1 → code_sandboxes-1.9.2}/code_sandboxes/environments/errors.py +0 -0
  59. {code_sandboxes-1.9.1 → code_sandboxes-1.9.2}/code_sandboxes/environments/files.py +0 -0
  60. {code_sandboxes-1.9.1 → code_sandboxes-1.9.2}/code_sandboxes/environments/image_import.py +0 -0
  61. {code_sandboxes-1.9.1 → code_sandboxes-1.9.2}/code_sandboxes/environments/lifecycle.py +0 -0
  62. {code_sandboxes-1.9.1 → code_sandboxes-1.9.2}/code_sandboxes/environments/policy.py +0 -0
  63. {code_sandboxes-1.9.1 → code_sandboxes-1.9.2}/code_sandboxes/environments/redact.py +0 -0
  64. {code_sandboxes-1.9.1 → code_sandboxes-1.9.2}/code_sandboxes/environments/resolve.py +0 -0
  65. {code_sandboxes-1.9.1 → code_sandboxes-1.9.2}/code_sandboxes/environments/schema.py +0 -0
  66. {code_sandboxes-1.9.1 → code_sandboxes-1.9.2}/code_sandboxes/environments/spec.py +0 -0
  67. {code_sandboxes-1.9.1 → code_sandboxes-1.9.2}/code_sandboxes/eval_sandbox.py +0 -0
  68. {code_sandboxes-1.9.1 → code_sandboxes-1.9.2}/code_sandboxes/exceptions.py +0 -0
  69. {code_sandboxes-1.9.1 → code_sandboxes-1.9.2}/code_sandboxes/filesystem.py +0 -0
  70. {code_sandboxes-1.9.1 → code_sandboxes-1.9.2}/code_sandboxes/google_colab.py +0 -0
  71. {code_sandboxes-1.9.1 → code_sandboxes-1.9.2}/code_sandboxes/google_colab_sandbox.py +0 -0
  72. {code_sandboxes-1.9.1 → code_sandboxes-1.9.2}/code_sandboxes/interfaces.py +0 -0
  73. {code_sandboxes-1.9.1 → code_sandboxes-1.9.2}/code_sandboxes/jupyter_ingress.py +0 -0
  74. {code_sandboxes-1.9.1 → code_sandboxes-1.9.2}/code_sandboxes/jupyter_server_sandbox.py +0 -0
  75. {code_sandboxes-1.9.1 → code_sandboxes-1.9.2}/code_sandboxes/kaggle.py +0 -0
  76. {code_sandboxes-1.9.1 → code_sandboxes-1.9.2}/code_sandboxes/kaggle_execute.py +0 -0
  77. {code_sandboxes-1.9.1 → code_sandboxes-1.9.2}/code_sandboxes/kaggle_live.py +0 -0
  78. {code_sandboxes-1.9.1 → code_sandboxes-1.9.2}/code_sandboxes/kaggle_sandbox.py +0 -0
  79. {code_sandboxes-1.9.1 → code_sandboxes-1.9.2}/code_sandboxes/lifecycle.py +0 -0
  80. {code_sandboxes-1.9.1 → code_sandboxes-1.9.2}/code_sandboxes/manage.py +0 -0
  81. {code_sandboxes-1.9.1 → code_sandboxes-1.9.2}/code_sandboxes/modal_sandbox.py +0 -0
  82. {code_sandboxes-1.9.1 → code_sandboxes-1.9.2}/code_sandboxes/models.py +0 -0
  83. {code_sandboxes-1.9.1 → code_sandboxes-1.9.2}/code_sandboxes/monty_sandbox.py +0 -0
  84. {code_sandboxes-1.9.1 → code_sandboxes-1.9.2}/code_sandboxes/provider_ingress.py +0 -0
  85. {code_sandboxes-1.9.1 → code_sandboxes-1.9.2}/code_sandboxes/providers.py +0 -0
  86. {code_sandboxes-1.9.1 → code_sandboxes-1.9.2}/docker/Dockerfile +0 -0
  87. {code_sandboxes-1.9.1 → code_sandboxes-1.9.2}/docs/.gitignore +0 -0
  88. {code_sandboxes-1.9.1 → code_sandboxes-1.9.2}/docs/LICENSE +0 -0
  89. {code_sandboxes-1.9.1 → code_sandboxes-1.9.2}/docs/Makefile +0 -0
  90. {code_sandboxes-1.9.1 → code_sandboxes-1.9.2}/docs/README.md +0 -0
  91. {code_sandboxes-1.9.1 → code_sandboxes-1.9.2}/docs/babel.config.js +0 -0
  92. {code_sandboxes-1.9.1 → code_sandboxes-1.9.2}/docs/docs/api-reference/_category_.yml +0 -0
  93. {code_sandboxes-1.9.1 → code_sandboxes-1.9.2}/docs/docs/api-reference/index.mdx +0 -0
  94. {code_sandboxes-1.9.1 → code_sandboxes-1.9.2}/docs/docs/cli/_category_.yml +0 -0
  95. {code_sandboxes-1.9.1 → code_sandboxes-1.9.2}/docs/docs/cli/index.mdx +0 -0
  96. {code_sandboxes-1.9.1 → code_sandboxes-1.9.2}/docs/docs/contribute/_category_.yml +0 -0
  97. {code_sandboxes-1.9.1 → code_sandboxes-1.9.2}/docs/docs/contribute/index.mdx +0 -0
  98. {code_sandboxes-1.9.1 → code_sandboxes-1.9.2}/docs/docs/environments/_category_.yml +0 -0
  99. {code_sandboxes-1.9.1 → code_sandboxes-1.9.2}/docs/docs/environments/contract.mdx +0 -0
  100. {code_sandboxes-1.9.1 → code_sandboxes-1.9.2}/docs/docs/environments/index.mdx +0 -0
  101. {code_sandboxes-1.9.1 → code_sandboxes-1.9.2}/docs/docs/environments/specification.mdx +0 -0
  102. {code_sandboxes-1.9.1 → code_sandboxes-1.9.2}/docs/docs/environments/spike-2026-09.mdx +0 -0
  103. {code_sandboxes-1.9.1 → code_sandboxes-1.9.2}/docs/docs/examples/_category_.yml +0 -0
  104. {code_sandboxes-1.9.1 → code_sandboxes-1.9.2}/docs/docs/examples/index.mdx +0 -0
  105. {code_sandboxes-1.9.1 → code_sandboxes-1.9.2}/docs/docs/guide/_category_.yml +0 -0
  106. {code_sandboxes-1.9.1 → code_sandboxes-1.9.2}/docs/docs/guide/index.mdx +0 -0
  107. {code_sandboxes-1.9.1 → code_sandboxes-1.9.2}/docs/docs/index.mdx +0 -0
  108. {code_sandboxes-1.9.1 → code_sandboxes-1.9.2}/docs/docs/install/_category_.yml +0 -0
  109. {code_sandboxes-1.9.1 → code_sandboxes-1.9.2}/docs/docs/install/index.mdx +0 -0
  110. {code_sandboxes-1.9.1 → code_sandboxes-1.9.2}/docs/docs/provider-ingress.mdx +0 -0
  111. {code_sandboxes-1.9.1 → code_sandboxes-1.9.2}/docs/docs/providers/_category_.yml +0 -0
  112. {code_sandboxes-1.9.1 → code_sandboxes-1.9.2}/docs/docs/providers/cloudflare.mdx +0 -0
  113. {code_sandboxes-1.9.1 → code_sandboxes-1.9.2}/docs/docs/providers/coreweave.mdx +0 -0
  114. {code_sandboxes-1.9.1 → code_sandboxes-1.9.2}/docs/docs/providers/datalayer.mdx +0 -0
  115. {code_sandboxes-1.9.1 → code_sandboxes-1.9.2}/docs/docs/providers/daytona.mdx +0 -0
  116. {code_sandboxes-1.9.1 → code_sandboxes-1.9.2}/docs/docs/providers/docker.mdx +0 -0
  117. {code_sandboxes-1.9.1 → code_sandboxes-1.9.2}/docs/docs/providers/e2b.mdx +0 -0
  118. {code_sandboxes-1.9.1 → code_sandboxes-1.9.2}/docs/docs/providers/eval.mdx +0 -0
  119. {code_sandboxes-1.9.1 → code_sandboxes-1.9.2}/docs/docs/providers/google-colab.mdx +0 -0
  120. {code_sandboxes-1.9.1 → code_sandboxes-1.9.2}/docs/docs/providers/index.mdx +0 -0
  121. {code_sandboxes-1.9.1 → code_sandboxes-1.9.2}/docs/docs/providers/jupyter-server.mdx +0 -0
  122. {code_sandboxes-1.9.1 → code_sandboxes-1.9.2}/docs/docs/providers/kaggle.mdx +0 -0
  123. {code_sandboxes-1.9.1 → code_sandboxes-1.9.2}/docs/docs/providers/modal.mdx +0 -0
  124. {code_sandboxes-1.9.1 → code_sandboxes-1.9.2}/docs/docs/providers/monty.mdx +0 -0
  125. {code_sandboxes-1.9.1 → code_sandboxes-1.9.2}/docs/docusaurus.config.js +0 -0
  126. {code_sandboxes-1.9.1 → code_sandboxes-1.9.2}/docs/package.json +0 -0
  127. {code_sandboxes-1.9.1 → code_sandboxes-1.9.2}/docs/sidebars.js +0 -0
  128. {code_sandboxes-1.9.1 → code_sandboxes-1.9.2}/docs/src/components/HomepageRow1.js +0 -0
  129. {code_sandboxes-1.9.1 → code_sandboxes-1.9.2}/docs/src/components/HomepageRow1.module.css +0 -0
  130. {code_sandboxes-1.9.1 → code_sandboxes-1.9.2}/docs/src/components/HomepageRow2.js +0 -0
  131. {code_sandboxes-1.9.1 → code_sandboxes-1.9.2}/docs/src/components/HomepageRow2.module.css +0 -0
  132. {code_sandboxes-1.9.1 → code_sandboxes-1.9.2}/docs/src/components/HomepageRow3.js +0 -0
  133. {code_sandboxes-1.9.1 → code_sandboxes-1.9.2}/docs/src/components/HomepageRow3.module.css +0 -0
  134. {code_sandboxes-1.9.1 → code_sandboxes-1.9.2}/docs/src/css/custom.css +0 -0
  135. {code_sandboxes-1.9.1 → code_sandboxes-1.9.2}/docs/src/pages/index.module.css +0 -0
  136. {code_sandboxes-1.9.1 → code_sandboxes-1.9.2}/docs/src/pages/markdown-page.md +0 -0
  137. {code_sandboxes-1.9.1 → code_sandboxes-1.9.2}/docs/src/theme/CustomDocItem.tsx +0 -0
  138. {code_sandboxes-1.9.1 → code_sandboxes-1.9.2}/docs/src/theme/IconsTitle.tsx +0 -0
  139. {code_sandboxes-1.9.1 → code_sandboxes-1.9.2}/docs/static/img/bricks.svg +0 -0
  140. {code_sandboxes-1.9.1 → code_sandboxes-1.9.2}/docs/static/img/building-construction.svg +0 -0
  141. {code_sandboxes-1.9.1 → code_sandboxes-1.9.2}/docs/static/img/cloud-sun.svg +0 -0
  142. {code_sandboxes-1.9.1 → code_sandboxes-1.9.2}/docs/static/img/cloud.svg +0 -0
  143. {code_sandboxes-1.9.1 → code_sandboxes-1.9.2}/docs/static/img/collaboration.svg +0 -0
  144. {code_sandboxes-1.9.1 → code_sandboxes-1.9.2}/docs/static/img/copy-left.svg +0 -0
  145. {code_sandboxes-1.9.1 → code_sandboxes-1.9.2}/docs/static/img/datalayer/logo.png +0 -0
  146. {code_sandboxes-1.9.1 → code_sandboxes-1.9.2}/docs/static/img/datalayer/logo.svg +0 -0
  147. {code_sandboxes-1.9.1 → code_sandboxes-1.9.2}/docs/static/img/datalayer/personas/business.svg +0 -0
  148. {code_sandboxes-1.9.1 → code_sandboxes-1.9.2}/docs/static/img/datalayer/personas/data-scientist.svg +0 -0
  149. {code_sandboxes-1.9.1 → code_sandboxes-1.9.2}/docs/static/img/datalayer/personas/devops.svg +0 -0
  150. {code_sandboxes-1.9.1 → code_sandboxes-1.9.2}/docs/static/img/datalayer/project/project-line.svg +0 -0
  151. {code_sandboxes-1.9.1 → code_sandboxes-1.9.2}/docs/static/img/favicon.ico +0 -0
  152. {code_sandboxes-1.9.1 → code_sandboxes-1.9.2}/docs/static/img/jupyter.svg +0 -0
  153. {code_sandboxes-1.9.1 → code_sandboxes-1.9.2}/docs/static/img/open-source.svg +0 -0
  154. {code_sandboxes-1.9.1 → code_sandboxes-1.9.2}/docs/static/img/react-js.svg +0 -0
  155. {code_sandboxes-1.9.1 → code_sandboxes-1.9.2}/docs/static/img/react-js2.svg +0 -0
  156. {code_sandboxes-1.9.1 → code_sandboxes-1.9.2}/docs/static/img/ringed-planet.svg +0 -0
  157. {code_sandboxes-1.9.1 → code_sandboxes-1.9.2}/docs/static/img/robot.svg +0 -0
  158. {code_sandboxes-1.9.1 → code_sandboxes-1.9.2}/docs/static/img/rocket.svg +0 -0
  159. {code_sandboxes-1.9.1 → code_sandboxes-1.9.2}/docs/static/img/shield.svg +0 -0
  160. {code_sandboxes-1.9.1 → code_sandboxes-1.9.2}/docs/static/img/sparkles.svg +0 -0
  161. {code_sandboxes-1.9.1 → code_sandboxes-1.9.2}/docs/static/img/streamlit.gif +0 -0
  162. {code_sandboxes-1.9.1 → code_sandboxes-1.9.2}/docs/static/img/super-hero.svg +0 -0
  163. {code_sandboxes-1.9.1 → code_sandboxes-1.9.2}/docs/static/img/target.svg +0 -0
  164. {code_sandboxes-1.9.1 → code_sandboxes-1.9.2}/docs/static/img/thumbs-up.svg +0 -0
  165. {code_sandboxes-1.9.1 → code_sandboxes-1.9.2}/examples/README.md +0 -0
  166. {code_sandboxes-1.9.1 → code_sandboxes-1.9.2}/examples/exec/Makefile +0 -0
  167. {code_sandboxes-1.9.1 → code_sandboxes-1.9.2}/examples/exec/cloudflare_sandbox_example.py +0 -0
  168. {code_sandboxes-1.9.1 → code_sandboxes-1.9.2}/examples/exec/coreweave_sandbox_example.py +0 -0
  169. {code_sandboxes-1.9.1 → code_sandboxes-1.9.2}/examples/exec/datalayer_sandbox_example.py +0 -0
  170. {code_sandboxes-1.9.1 → code_sandboxes-1.9.2}/examples/exec/daytona_sandbox_example.py +0 -0
  171. {code_sandboxes-1.9.1 → code_sandboxes-1.9.2}/examples/exec/docker_sandbox_example.py +0 -0
  172. {code_sandboxes-1.9.1 → code_sandboxes-1.9.2}/examples/exec/e2b_sandbox_example.py +0 -0
  173. {code_sandboxes-1.9.1 → code_sandboxes-1.9.2}/examples/exec/eval_sandbox_example.py +0 -0
  174. {code_sandboxes-1.9.1 → code_sandboxes-1.9.2}/examples/exec/google_colab_sandbox_example.py +0 -0
  175. {code_sandboxes-1.9.1 → code_sandboxes-1.9.2}/examples/exec/jupyter_server_sandbox_example.py +0 -0
  176. {code_sandboxes-1.9.1 → code_sandboxes-1.9.2}/examples/exec/kaggle_sandbox_example.py +0 -0
  177. {code_sandboxes-1.9.1 → code_sandboxes-1.9.2}/examples/exec/modal_sandbox_example.py +0 -0
  178. {code_sandboxes-1.9.1 → code_sandboxes-1.9.2}/examples/exec/monty_sandbox_example.py +0 -0
  179. {code_sandboxes-1.9.1 → code_sandboxes-1.9.2}/examples/repl/Makefile +0 -0
  180. {code_sandboxes-1.9.1 → code_sandboxes-1.9.2}/examples/repl/cloudflare_sandbox_example.py +0 -0
  181. {code_sandboxes-1.9.1 → code_sandboxes-1.9.2}/examples/repl/coreweave_sandbox_example.py +0 -0
  182. {code_sandboxes-1.9.1 → code_sandboxes-1.9.2}/examples/repl/datalayer_sandbox_example.py +0 -0
  183. {code_sandboxes-1.9.1 → code_sandboxes-1.9.2}/examples/repl/daytona_sandbox_example.py +0 -0
  184. {code_sandboxes-1.9.1 → code_sandboxes-1.9.2}/examples/repl/docker_sandbox_example.py +0 -0
  185. {code_sandboxes-1.9.1 → code_sandboxes-1.9.2}/examples/repl/e2b_sandbox_example.py +0 -0
  186. {code_sandboxes-1.9.1 → code_sandboxes-1.9.2}/examples/repl/eval_sandbox_example.py +0 -0
  187. {code_sandboxes-1.9.1 → code_sandboxes-1.9.2}/examples/repl/google_colab_sandbox_example.py +0 -0
  188. {code_sandboxes-1.9.1 → code_sandboxes-1.9.2}/examples/repl/jupyter_server_sandbox_example.py +0 -0
  189. {code_sandboxes-1.9.1 → code_sandboxes-1.9.2}/examples/repl/kaggle_sandbox_example.py +0 -0
  190. {code_sandboxes-1.9.1 → code_sandboxes-1.9.2}/examples/repl/modal_sandbox_example.py +0 -0
  191. {code_sandboxes-1.9.1 → code_sandboxes-1.9.2}/examples/repl/monty_sandbox_example.py +0 -0
  192. {code_sandboxes-1.9.1 → code_sandboxes-1.9.2}/pyproject.toml +0 -0
  193. {code_sandboxes-1.9.1 → code_sandboxes-1.9.2}/schemas/environment-v1alpha1.json +0 -0
  194. {code_sandboxes-1.9.1 → code_sandboxes-1.9.2}/tests/__init__.py +0 -0
  195. {code_sandboxes-1.9.1 → code_sandboxes-1.9.2}/tests/conftest.py +0 -0
  196. {code_sandboxes-1.9.1 → code_sandboxes-1.9.2}/tests/test_a_datalayer_sandbox_can_be_interrupted.py +0 -0
  197. {code_sandboxes-1.9.1 → code_sandboxes-1.9.2}/tests/test_bridge_mount.py +0 -0
  198. {code_sandboxes-1.9.1 → code_sandboxes-1.9.2}/tests/test_builds.py +0 -0
  199. {code_sandboxes-1.9.1 → code_sandboxes-1.9.2}/tests/test_cli_exec.py +0 -0
  200. {code_sandboxes-1.9.1 → code_sandboxes-1.9.2}/tests/test_cli_repl.py +0 -0
  201. {code_sandboxes-1.9.1 → code_sandboxes-1.9.2}/tests/test_client.py +0 -0
  202. {code_sandboxes-1.9.1 → code_sandboxes-1.9.2}/tests/test_client_contents.py +0 -0
  203. {code_sandboxes-1.9.1 → code_sandboxes-1.9.2}/tests/test_client_files.py +0 -0
  204. {code_sandboxes-1.9.1 → code_sandboxes-1.9.2}/tests/test_client_outcome_error_output.py +0 -0
  205. {code_sandboxes-1.9.1 → code_sandboxes-1.9.2}/tests/test_cloudflare.py +0 -0
  206. {code_sandboxes-1.9.1 → code_sandboxes-1.9.2}/tests/test_commands_envelope.py +0 -0
  207. {code_sandboxes-1.9.1 → code_sandboxes-1.9.2}/tests/test_console.py +0 -0
  208. {code_sandboxes-1.9.1 → code_sandboxes-1.9.2}/tests/test_contents_contract.py +0 -0
  209. {code_sandboxes-1.9.1 → code_sandboxes-1.9.2}/tests/test_contents_live_matrix.py +0 -0
  210. {code_sandboxes-1.9.1 → code_sandboxes-1.9.2}/tests/test_coreweave.py +0 -0
  211. {code_sandboxes-1.9.1 → code_sandboxes-1.9.2}/tests/test_datalayer_sandbox.py +0 -0
  212. {code_sandboxes-1.9.1 → code_sandboxes-1.9.2}/tests/test_daytona.py +0 -0
  213. {code_sandboxes-1.9.1 → code_sandboxes-1.9.2}/tests/test_e2b.py +0 -0
  214. {code_sandboxes-1.9.1 → code_sandboxes-1.9.2}/tests/test_environment_accounts.py +0 -0
  215. {code_sandboxes-1.9.1 → code_sandboxes-1.9.2}/tests/test_environment_attest.py +0 -0
  216. {code_sandboxes-1.9.1 → code_sandboxes-1.9.2}/tests/test_environment_bases.py +0 -0
  217. {code_sandboxes-1.9.1 → code_sandboxes-1.9.2}/tests/test_environment_breaker.py +0 -0
  218. {code_sandboxes-1.9.1 → code_sandboxes-1.9.2}/tests/test_environment_build_secrets.py +0 -0
  219. {code_sandboxes-1.9.1 → code_sandboxes-1.9.2}/tests/test_environment_builders.py +0 -0
  220. {code_sandboxes-1.9.1 → code_sandboxes-1.9.2}/tests/test_environment_canonical.py +0 -0
  221. {code_sandboxes-1.9.1 → code_sandboxes-1.9.2}/tests/test_environment_conformance.py +0 -0
  222. {code_sandboxes-1.9.1 → code_sandboxes-1.9.2}/tests/test_environment_constraints.py +0 -0
  223. {code_sandboxes-1.9.1 → code_sandboxes-1.9.2}/tests/test_environment_contract.py +0 -0
  224. {code_sandboxes-1.9.1 → code_sandboxes-1.9.2}/tests/test_environment_cross_variant_report.py +0 -0
  225. {code_sandboxes-1.9.1 → code_sandboxes-1.9.2}/tests/test_environment_daytona_builder.py +0 -0
  226. {code_sandboxes-1.9.1 → code_sandboxes-1.9.2}/tests/test_environment_doctor.py +0 -0
  227. {code_sandboxes-1.9.1 → code_sandboxes-1.9.2}/tests/test_environment_e2b_builder.py +0 -0
  228. {code_sandboxes-1.9.1 → code_sandboxes-1.9.2}/tests/test_environment_errors.py +0 -0
  229. {code_sandboxes-1.9.1 → code_sandboxes-1.9.2}/tests/test_environment_image_import.py +0 -0
  230. {code_sandboxes-1.9.1 → code_sandboxes-1.9.2}/tests/test_environment_lifecycle.py +0 -0
  231. {code_sandboxes-1.9.1 → code_sandboxes-1.9.2}/tests/test_environment_live_matrix.py +0 -0
  232. {code_sandboxes-1.9.1 → code_sandboxes-1.9.2}/tests/test_environment_managed_builders.py +0 -0
  233. {code_sandboxes-1.9.1 → code_sandboxes-1.9.2}/tests/test_environment_modal_builder.py +0 -0
  234. {code_sandboxes-1.9.1 → code_sandboxes-1.9.2}/tests/test_environment_redact.py +0 -0
  235. {code_sandboxes-1.9.1 → code_sandboxes-1.9.2}/tests/test_environment_resolve.py +0 -0
  236. {code_sandboxes-1.9.1 → code_sandboxes-1.9.2}/tests/test_environment_spec.py +0 -0
  237. {code_sandboxes-1.9.1 → code_sandboxes-1.9.2}/tests/test_eval.py +0 -0
  238. {code_sandboxes-1.9.1 → code_sandboxes-1.9.2}/tests/test_every_variant_has_a_real_interrupt.py +0 -0
  239. {code_sandboxes-1.9.1 → code_sandboxes-1.9.2}/tests/test_factory.py +0 -0
  240. {code_sandboxes-1.9.1 → code_sandboxes-1.9.2}/tests/test_google_colab.py +0 -0
  241. {code_sandboxes-1.9.1 → code_sandboxes-1.9.2}/tests/test_integration.py +0 -0
  242. {code_sandboxes-1.9.1 → code_sandboxes-1.9.2}/tests/test_jupyter_ingress.py +0 -0
  243. {code_sandboxes-1.9.1 → code_sandboxes-1.9.2}/tests/test_jupyter_server.py +0 -0
  244. {code_sandboxes-1.9.1 → code_sandboxes-1.9.2}/tests/test_jupyter_server_streaming.py +0 -0
  245. {code_sandboxes-1.9.1 → code_sandboxes-1.9.2}/tests/test_kaggle.py +0 -0
  246. {code_sandboxes-1.9.1 → code_sandboxes-1.9.2}/tests/test_kaggle_execute.py +0 -0
  247. {code_sandboxes-1.9.1 → code_sandboxes-1.9.2}/tests/test_kaggle_live.py +0 -0
  248. {code_sandboxes-1.9.1 → code_sandboxes-1.9.2}/tests/test_kaggle_session.py +0 -0
  249. {code_sandboxes-1.9.1 → code_sandboxes-1.9.2}/tests/test_kernel_client_compatibility.py +0 -0
  250. {code_sandboxes-1.9.1 → code_sandboxes-1.9.2}/tests/test_lifecycle_vocabulary.py +0 -0
  251. {code_sandboxes-1.9.1 → code_sandboxes-1.9.2}/tests/test_manage.py +0 -0
  252. {code_sandboxes-1.9.1 → code_sandboxes-1.9.2}/tests/test_manage_datalayer.py +0 -0
  253. {code_sandboxes-1.9.1 → code_sandboxes-1.9.2}/tests/test_modal_google_colab_sandbox.py +0 -0
  254. {code_sandboxes-1.9.1 → code_sandboxes-1.9.2}/tests/test_modal_session.py +0 -0
  255. {code_sandboxes-1.9.1 → code_sandboxes-1.9.2}/tests/test_models.py +0 -0
  256. {code_sandboxes-1.9.1 → code_sandboxes-1.9.2}/tests/test_output_line_fidelity.py +0 -0
  257. {code_sandboxes-1.9.1 → code_sandboxes-1.9.2}/tests/test_provider_catalog_names.py +0 -0
  258. {code_sandboxes-1.9.1 → code_sandboxes-1.9.2}/tests/test_provider_ingress.py +0 -0
  259. {code_sandboxes-1.9.1 → code_sandboxes-1.9.2}/tests/test_providers.py +0 -0
  260. {code_sandboxes-1.9.1 → code_sandboxes-1.9.2}/tests/test_sandboxes.py +0 -0
  261. {code_sandboxes-1.9.1 → code_sandboxes-1.9.2}/tests/test_the_kill_relaunch_drill.py +0 -0
@@ -8,6 +8,20 @@
8
8
 
9
9
  ## Unreleased
10
10
 
11
+ ## 1.9.2
12
+
13
+ - **A real ECR repository name is lowercase; a real owner uid is not**
14
+ (`environments.adapters.datalayer.owner_repository`, new
15
+ `owner_cache_repository`; PLAN_ENV.md E1-07). Found live, 2026-09-14, the
16
+ first real Datalayer build ever run for a real account's own uid rather
17
+ than a lowercase test fixture: `DescribeRepositories` refused outright,
18
+ "Invalid parameter at 'repositoryName'" — this project's own uids are
19
+ ULIDs, conventionally uppercase, and ECR repository names match
20
+ `[a-z0-9]+((\.|_|__|-+)[a-z0-9]+)*` per path segment. Both the owner's own
21
+ repository and the owner's cache repository are lowered at the one place
22
+ each is built, so every caller (create, inspect, exists, delete, the
23
+ cache import/export) stays consistent with itself.
24
+
11
25
  ## 1.9.1
12
26
 
13
27
  - **mTLS to the build pool's `buildkitd`** (`environments.adapters.datalayer.Builder`,
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: code_sandboxes
3
- Version: 1.9.1
3
+ Version: 1.9.2
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.1"
6
+ __version__ = "1.9.2"
@@ -71,7 +71,12 @@ from ..files import files_step
71
71
  from ..resolve import WHEELHOUSE_IMAGE_PATH, WHEELHOUSE_PATH, apt_pins_in, locked_versions
72
72
  from ..spec import BuildSecret, Environment
73
73
 
74
- __all__ = ["ECR_ENVIRONMENT_PREFIX", "Builder", "owner_repository"]
74
+ __all__ = [
75
+ "ECR_ENVIRONMENT_PREFIX",
76
+ "Builder",
77
+ "owner_cache_repository",
78
+ "owner_repository",
79
+ ]
75
80
 
76
81
  #: Where an owner's environments live in ECR (D-10).
77
82
  ECR_ENVIRONMENT_PREFIX = "environments/u/"
@@ -89,10 +94,32 @@ DEFAULT_MAX_ARTIFACT_BYTES = 20 * 1024**3
89
94
 
90
95
 
91
96
  def owner_repository(owner_uid: str, environment_name: str) -> str:
92
- """The owner's repository for one environment: ``environments/u/<owner>/<name>``."""
97
+ """The owner's repository for one environment: ``environments/u/<owner>/<name>``.
98
+
99
+ Lowercased: an ECR repository name matches
100
+ ``[a-z0-9]+((\\.|_|__|-+)[a-z0-9]+)*`` per path segment, and this
101
+ project's own uids are ULIDs, conventionally uppercase — found live,
102
+ 2026-09-14, the first real build ever run for a real account's own
103
+ uid rather than a lowercase test fixture: ``DescribeRepositories``
104
+ refused it outright, "Invalid parameter at 'repositoryName'". Lowering
105
+ both segments here, the one place this reference is built, keeps every
106
+ caller (create, inspect, exists, delete) consistent with itself without
107
+ each needing to remember to.
108
+ """
93
109
  if not owner_uid or not environment_name:
94
110
  raise ValueError("an owner and an environment name make the repository")
95
- return f"{ECR_ENVIRONMENT_PREFIX}{owner_uid}/{environment_name}"
111
+ return f"{ECR_ENVIRONMENT_PREFIX}{owner_uid}/{environment_name}".lower()
112
+
113
+
114
+ def owner_cache_repository(owner_uid: str) -> str:
115
+ """The owner's own BuildKit cache repository: ``environments/cache/u/<owner>``.
116
+
117
+ Lowercased for the same reason ``owner_repository`` is (a ULID, not a
118
+ lowercase test fixture, is what a real build actually names).
119
+ """
120
+ if not owner_uid:
121
+ raise ValueError("an owner makes the cache repository")
122
+ return f"environments/cache/u/{owner_uid}".lower()
96
123
 
97
124
 
98
125
  def _secret_mount(secret: BuildSecret) -> str:
@@ -374,7 +401,7 @@ class Builder:
374
401
  repository = owner_repository(request.owner_uid, request.environment.metadata.name)
375
402
  registry = self._registry_host()
376
403
  self._ensure_repository(repository)
377
- self._ensure_cache_repository(f"environments/cache/u/{request.owner_uid}")
404
+ self._ensure_cache_repository(owner_cache_repository(request.owner_uid))
378
405
  tag = f"v{request.version}-{request.build_uid}"
379
406
  reference = f"{registry}/{repository}:{tag}"
380
407
  with tempfile.TemporaryDirectory(prefix="dl-build-") as directory:
@@ -637,7 +664,7 @@ class Builder:
637
664
  def _cache_options(self, request: BuildRequest) -> list[str]:
638
665
  """The owner's cache, imported and exported: never another owner's (D-12)."""
639
666
  registry = self._registry_host()
640
- cache = f"{registry}/environments/cache/u/{request.owner_uid}:{self.variant}"
667
+ cache = f"{registry}/{owner_cache_repository(request.owner_uid)}:{self.variant}"
641
668
  return [
642
669
  "--import-cache",
643
670
  f"type=registry,ref={cache}",
@@ -19,7 +19,11 @@ from pathlib import Path
19
19
 
20
20
  import pytest
21
21
 
22
- from code_sandboxes.environments.adapters.datalayer import Builder, owner_repository
22
+ from code_sandboxes.environments.adapters.datalayer import (
23
+ Builder,
24
+ owner_cache_repository,
25
+ owner_repository,
26
+ )
23
27
  from code_sandboxes.environments.builders import ArtifactReference, BuildRequest
24
28
  from code_sandboxes.environments.errors import EnvironmentsError
25
29
  from code_sandboxes.environments.spec import parse_environment
@@ -565,6 +569,24 @@ class TestBuildingAndPushing:
565
569
  a_builder(run=Buildctl(), ecr=ecr).build(a_request())
566
570
  assert ecr.created == []
567
571
 
572
+ def test_a_real_uppercase_ulid_owner_still_names_a_valid_ecr_repository(self) -> None:
573
+ """Found live, 2026-09-14: the first real build for a real account's
574
+ own uid, not a lowercase test fixture. ECR repository names match
575
+ ``[a-z0-9]+((\\.|_|__|-+)[a-z0-9]+)*`` per segment; this project's own
576
+ uids are ULIDs, conventionally uppercase — `DescribeRepositories`
577
+ refused the request outright before this fix."""
578
+ ulid_owner = "01JV1VE1T5VG22Z05F6EFBMW8E"
579
+ ecr = FakeEcr()
580
+ a_builder(run=Buildctl(), ecr=ecr).build(a_request(owner_uid=ulid_owner))
581
+ names = [item["repositoryName"] for item in ecr.created]
582
+ assert names, "the build should have created at least the owner's own repository"
583
+ for name in names:
584
+ assert name == name.lower(), f"{name!r} is not a valid ECR repository name"
585
+ assert owner_repository(ulid_owner, "geospatial-analysis") == (
586
+ f"environments/u/{ulid_owner.lower()}/geospatial-analysis"
587
+ )
588
+ assert owner_cache_repository(ulid_owner) == f"environments/cache/u/{ulid_owner.lower()}"
589
+
568
590
  def test_the_credential_reaches_buildctl_and_not_the_workers_own_config(self) -> None:
569
591
  seen: dict[str, object] = {}
570
592
 
File without changes
File without changes
File without changes