code-sandboxes 1.9.27__tar.gz → 1.9.28__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 (265) hide show
  1. {code_sandboxes-1.9.27 → code_sandboxes-1.9.28}/PKG-INFO +1 -1
  2. {code_sandboxes-1.9.27 → code_sandboxes-1.9.28}/code_sandboxes/__version__.py +1 -1
  3. {code_sandboxes-1.9.27 → code_sandboxes-1.9.28}/code_sandboxes/jupyter_server_sandbox.py +11 -7
  4. {code_sandboxes-1.9.27 → code_sandboxes-1.9.28}/tests/test_jupyter_server.py +28 -0
  5. {code_sandboxes-1.9.27 → code_sandboxes-1.9.28}/.github/workflows/build.yml +0 -0
  6. {code_sandboxes-1.9.27 → code_sandboxes-1.9.28}/.github/workflows/environments-live.yml +0 -0
  7. {code_sandboxes-1.9.27 → code_sandboxes-1.9.28}/.github/workflows/py-code-style.yml +0 -0
  8. {code_sandboxes-1.9.27 → code_sandboxes-1.9.28}/.github/workflows/py-tests.yml +0 -0
  9. {code_sandboxes-1.9.27 → code_sandboxes-1.9.28}/.github/workflows/py-typing.yml +0 -0
  10. {code_sandboxes-1.9.27 → code_sandboxes-1.9.28}/.github/workflows/reusable-python.yml +0 -0
  11. {code_sandboxes-1.9.27 → code_sandboxes-1.9.28}/.gitignore +0 -0
  12. {code_sandboxes-1.9.27 → code_sandboxes-1.9.28}/.licenserc.yaml +0 -0
  13. {code_sandboxes-1.9.27 → code_sandboxes-1.9.28}/.pre-commit-config.yaml +0 -0
  14. {code_sandboxes-1.9.27 → code_sandboxes-1.9.28}/.vscode/settings.json +0 -0
  15. {code_sandboxes-1.9.27 → code_sandboxes-1.9.28}/CHANGELOG.md +0 -0
  16. {code_sandboxes-1.9.27 → code_sandboxes-1.9.28}/Dockerfile +0 -0
  17. {code_sandboxes-1.9.27 → code_sandboxes-1.9.28}/LICENSE +0 -0
  18. {code_sandboxes-1.9.27 → code_sandboxes-1.9.28}/Makefile +0 -0
  19. {code_sandboxes-1.9.27 → code_sandboxes-1.9.28}/README.md +0 -0
  20. {code_sandboxes-1.9.27 → code_sandboxes-1.9.28}/code_sandboxes/__init__.py +0 -0
  21. {code_sandboxes-1.9.27 → code_sandboxes-1.9.28}/code_sandboxes/base.py +0 -0
  22. {code_sandboxes-1.9.27 → code_sandboxes-1.9.28}/code_sandboxes/bridge_mount.py +0 -0
  23. {code_sandboxes-1.9.27 → code_sandboxes-1.9.28}/code_sandboxes/builds.py +0 -0
  24. {code_sandboxes-1.9.27 → code_sandboxes-1.9.28}/code_sandboxes/cli.py +0 -0
  25. {code_sandboxes-1.9.27 → code_sandboxes-1.9.28}/code_sandboxes/client.py +0 -0
  26. {code_sandboxes-1.9.27 → code_sandboxes-1.9.28}/code_sandboxes/cloudflare_sandbox.py +0 -0
  27. {code_sandboxes-1.9.27 → code_sandboxes-1.9.28}/code_sandboxes/commands.py +0 -0
  28. {code_sandboxes-1.9.27 → code_sandboxes-1.9.28}/code_sandboxes/console.py +0 -0
  29. {code_sandboxes-1.9.27 → code_sandboxes-1.9.28}/code_sandboxes/contents.py +0 -0
  30. {code_sandboxes-1.9.27 → code_sandboxes-1.9.28}/code_sandboxes/coreweave_sandbox.py +0 -0
  31. {code_sandboxes-1.9.27 → code_sandboxes-1.9.28}/code_sandboxes/datalayer_sandbox.py +0 -0
  32. {code_sandboxes-1.9.27 → code_sandboxes-1.9.28}/code_sandboxes/daytona_sandbox.py +0 -0
  33. {code_sandboxes-1.9.27 → code_sandboxes-1.9.28}/code_sandboxes/docker_sandbox.py +0 -0
  34. {code_sandboxes-1.9.27 → code_sandboxes-1.9.28}/code_sandboxes/e2b_sandbox.py +0 -0
  35. {code_sandboxes-1.9.27 → code_sandboxes-1.9.28}/code_sandboxes/environments/__init__.py +0 -0
  36. {code_sandboxes-1.9.27 → code_sandboxes-1.9.28}/code_sandboxes/environments/__main__.py +0 -0
  37. {code_sandboxes-1.9.27 → code_sandboxes-1.9.28}/code_sandboxes/environments/accounts.py +0 -0
  38. {code_sandboxes-1.9.27 → code_sandboxes-1.9.28}/code_sandboxes/environments/adapters/__init__.py +0 -0
  39. {code_sandboxes-1.9.27 → code_sandboxes-1.9.28}/code_sandboxes/environments/adapters/datalayer.py +0 -0
  40. {code_sandboxes-1.9.27 → code_sandboxes-1.9.28}/code_sandboxes/environments/adapters/daytona.py +0 -0
  41. {code_sandboxes-1.9.27 → code_sandboxes-1.9.28}/code_sandboxes/environments/adapters/e2b.py +0 -0
  42. {code_sandboxes-1.9.27 → code_sandboxes-1.9.28}/code_sandboxes/environments/adapters/managed.py +0 -0
  43. {code_sandboxes-1.9.27 → code_sandboxes-1.9.28}/code_sandboxes/environments/adapters/modal.py +0 -0
  44. {code_sandboxes-1.9.27 → code_sandboxes-1.9.28}/code_sandboxes/environments/attest.py +0 -0
  45. {code_sandboxes-1.9.27 → code_sandboxes-1.9.28}/code_sandboxes/environments/bases.py +0 -0
  46. {code_sandboxes-1.9.27 → code_sandboxes-1.9.28}/code_sandboxes/environments/breaker.py +0 -0
  47. {code_sandboxes-1.9.27 → code_sandboxes-1.9.28}/code_sandboxes/environments/build_secrets.py +0 -0
  48. {code_sandboxes-1.9.27 → code_sandboxes-1.9.28}/code_sandboxes/environments/builders.py +0 -0
  49. {code_sandboxes-1.9.27 → code_sandboxes-1.9.28}/code_sandboxes/environments/canonical.py +0 -0
  50. {code_sandboxes-1.9.27 → code_sandboxes-1.9.28}/code_sandboxes/environments/conformance.py +0 -0
  51. {code_sandboxes-1.9.27 → code_sandboxes-1.9.28}/code_sandboxes/environments/constraints/sandbox-contract-v1.txt +0 -0
  52. {code_sandboxes-1.9.27 → code_sandboxes-1.9.28}/code_sandboxes/environments/constraints/wheelhouse/README.md +0 -0
  53. {code_sandboxes-1.9.27 → code_sandboxes-1.9.28}/code_sandboxes/environments/constraints/wheelhouse/jupyter_server-2.21.0+datalayer.1-py3-none-any.whl +0 -0
  54. {code_sandboxes-1.9.27 → code_sandboxes-1.9.28}/code_sandboxes/environments/contract.py +0 -0
  55. {code_sandboxes-1.9.27 → code_sandboxes-1.9.28}/code_sandboxes/environments/doctor/__init__.py +0 -0
  56. {code_sandboxes-1.9.27 → code_sandboxes-1.9.28}/code_sandboxes/environments/doctor/build.py +0 -0
  57. {code_sandboxes-1.9.27 → code_sandboxes-1.9.28}/code_sandboxes/environments/doctor/datalayer_sandbox.py +0 -0
  58. {code_sandboxes-1.9.27 → code_sandboxes-1.9.28}/code_sandboxes/environments/doctor/report.schema.json +0 -0
  59. {code_sandboxes-1.9.27 → code_sandboxes-1.9.28}/code_sandboxes/environments/errors.py +0 -0
  60. {code_sandboxes-1.9.27 → code_sandboxes-1.9.28}/code_sandboxes/environments/files.py +0 -0
  61. {code_sandboxes-1.9.27 → code_sandboxes-1.9.28}/code_sandboxes/environments/image_import.py +0 -0
  62. {code_sandboxes-1.9.27 → code_sandboxes-1.9.28}/code_sandboxes/environments/lifecycle.py +0 -0
  63. {code_sandboxes-1.9.27 → code_sandboxes-1.9.28}/code_sandboxes/environments/policy.py +0 -0
  64. {code_sandboxes-1.9.27 → code_sandboxes-1.9.28}/code_sandboxes/environments/redact.py +0 -0
  65. {code_sandboxes-1.9.27 → code_sandboxes-1.9.28}/code_sandboxes/environments/resolve.py +0 -0
  66. {code_sandboxes-1.9.27 → code_sandboxes-1.9.28}/code_sandboxes/environments/resolve_conda.py +0 -0
  67. {code_sandboxes-1.9.27 → code_sandboxes-1.9.28}/code_sandboxes/environments/schema.py +0 -0
  68. {code_sandboxes-1.9.27 → code_sandboxes-1.9.28}/code_sandboxes/environments/spec.py +0 -0
  69. {code_sandboxes-1.9.27 → code_sandboxes-1.9.28}/code_sandboxes/eval_sandbox.py +0 -0
  70. {code_sandboxes-1.9.27 → code_sandboxes-1.9.28}/code_sandboxes/exceptions.py +0 -0
  71. {code_sandboxes-1.9.27 → code_sandboxes-1.9.28}/code_sandboxes/filesystem.py +0 -0
  72. {code_sandboxes-1.9.27 → code_sandboxes-1.9.28}/code_sandboxes/google_colab.py +0 -0
  73. {code_sandboxes-1.9.27 → code_sandboxes-1.9.28}/code_sandboxes/google_colab_sandbox.py +0 -0
  74. {code_sandboxes-1.9.27 → code_sandboxes-1.9.28}/code_sandboxes/interfaces.py +0 -0
  75. {code_sandboxes-1.9.27 → code_sandboxes-1.9.28}/code_sandboxes/jupyter_ingress.py +0 -0
  76. {code_sandboxes-1.9.27 → code_sandboxes-1.9.28}/code_sandboxes/kaggle.py +0 -0
  77. {code_sandboxes-1.9.27 → code_sandboxes-1.9.28}/code_sandboxes/kaggle_execute.py +0 -0
  78. {code_sandboxes-1.9.27 → code_sandboxes-1.9.28}/code_sandboxes/kaggle_live.py +0 -0
  79. {code_sandboxes-1.9.27 → code_sandboxes-1.9.28}/code_sandboxes/kaggle_sandbox.py +0 -0
  80. {code_sandboxes-1.9.27 → code_sandboxes-1.9.28}/code_sandboxes/lifecycle.py +0 -0
  81. {code_sandboxes-1.9.27 → code_sandboxes-1.9.28}/code_sandboxes/manage.py +0 -0
  82. {code_sandboxes-1.9.27 → code_sandboxes-1.9.28}/code_sandboxes/modal_sandbox.py +0 -0
  83. {code_sandboxes-1.9.27 → code_sandboxes-1.9.28}/code_sandboxes/models.py +0 -0
  84. {code_sandboxes-1.9.27 → code_sandboxes-1.9.28}/code_sandboxes/monty_sandbox.py +0 -0
  85. {code_sandboxes-1.9.27 → code_sandboxes-1.9.28}/code_sandboxes/provider_ingress.py +0 -0
  86. {code_sandboxes-1.9.27 → code_sandboxes-1.9.28}/code_sandboxes/providers.py +0 -0
  87. {code_sandboxes-1.9.27 → code_sandboxes-1.9.28}/docker/Dockerfile +0 -0
  88. {code_sandboxes-1.9.27 → code_sandboxes-1.9.28}/docs/.gitignore +0 -0
  89. {code_sandboxes-1.9.27 → code_sandboxes-1.9.28}/docs/LICENSE +0 -0
  90. {code_sandboxes-1.9.27 → code_sandboxes-1.9.28}/docs/Makefile +0 -0
  91. {code_sandboxes-1.9.27 → code_sandboxes-1.9.28}/docs/README.md +0 -0
  92. {code_sandboxes-1.9.27 → code_sandboxes-1.9.28}/docs/babel.config.js +0 -0
  93. {code_sandboxes-1.9.27 → code_sandboxes-1.9.28}/docs/docs/api-reference/_category_.yml +0 -0
  94. {code_sandboxes-1.9.27 → code_sandboxes-1.9.28}/docs/docs/api-reference/index.mdx +0 -0
  95. {code_sandboxes-1.9.27 → code_sandboxes-1.9.28}/docs/docs/cli/_category_.yml +0 -0
  96. {code_sandboxes-1.9.27 → code_sandboxes-1.9.28}/docs/docs/cli/index.mdx +0 -0
  97. {code_sandboxes-1.9.27 → code_sandboxes-1.9.28}/docs/docs/contribute/_category_.yml +0 -0
  98. {code_sandboxes-1.9.27 → code_sandboxes-1.9.28}/docs/docs/contribute/index.mdx +0 -0
  99. {code_sandboxes-1.9.27 → code_sandboxes-1.9.28}/docs/docs/environments/_category_.yml +0 -0
  100. {code_sandboxes-1.9.27 → code_sandboxes-1.9.28}/docs/docs/environments/contract.mdx +0 -0
  101. {code_sandboxes-1.9.27 → code_sandboxes-1.9.28}/docs/docs/environments/index.mdx +0 -0
  102. {code_sandboxes-1.9.27 → code_sandboxes-1.9.28}/docs/docs/environments/specification.mdx +0 -0
  103. {code_sandboxes-1.9.27 → code_sandboxes-1.9.28}/docs/docs/environments/spike-2026-09.mdx +0 -0
  104. {code_sandboxes-1.9.27 → code_sandboxes-1.9.28}/docs/docs/examples/_category_.yml +0 -0
  105. {code_sandboxes-1.9.27 → code_sandboxes-1.9.28}/docs/docs/examples/index.mdx +0 -0
  106. {code_sandboxes-1.9.27 → code_sandboxes-1.9.28}/docs/docs/guide/_category_.yml +0 -0
  107. {code_sandboxes-1.9.27 → code_sandboxes-1.9.28}/docs/docs/guide/index.mdx +0 -0
  108. {code_sandboxes-1.9.27 → code_sandboxes-1.9.28}/docs/docs/index.mdx +0 -0
  109. {code_sandboxes-1.9.27 → code_sandboxes-1.9.28}/docs/docs/install/_category_.yml +0 -0
  110. {code_sandboxes-1.9.27 → code_sandboxes-1.9.28}/docs/docs/install/index.mdx +0 -0
  111. {code_sandboxes-1.9.27 → code_sandboxes-1.9.28}/docs/docs/provider-ingress.mdx +0 -0
  112. {code_sandboxes-1.9.27 → code_sandboxes-1.9.28}/docs/docs/providers/_category_.yml +0 -0
  113. {code_sandboxes-1.9.27 → code_sandboxes-1.9.28}/docs/docs/providers/cloudflare.mdx +0 -0
  114. {code_sandboxes-1.9.27 → code_sandboxes-1.9.28}/docs/docs/providers/coreweave.mdx +0 -0
  115. {code_sandboxes-1.9.27 → code_sandboxes-1.9.28}/docs/docs/providers/datalayer.mdx +0 -0
  116. {code_sandboxes-1.9.27 → code_sandboxes-1.9.28}/docs/docs/providers/daytona.mdx +0 -0
  117. {code_sandboxes-1.9.27 → code_sandboxes-1.9.28}/docs/docs/providers/docker.mdx +0 -0
  118. {code_sandboxes-1.9.27 → code_sandboxes-1.9.28}/docs/docs/providers/e2b.mdx +0 -0
  119. {code_sandboxes-1.9.27 → code_sandboxes-1.9.28}/docs/docs/providers/eval.mdx +0 -0
  120. {code_sandboxes-1.9.27 → code_sandboxes-1.9.28}/docs/docs/providers/google-colab.mdx +0 -0
  121. {code_sandboxes-1.9.27 → code_sandboxes-1.9.28}/docs/docs/providers/index.mdx +0 -0
  122. {code_sandboxes-1.9.27 → code_sandboxes-1.9.28}/docs/docs/providers/jupyter-server.mdx +0 -0
  123. {code_sandboxes-1.9.27 → code_sandboxes-1.9.28}/docs/docs/providers/kaggle.mdx +0 -0
  124. {code_sandboxes-1.9.27 → code_sandboxes-1.9.28}/docs/docs/providers/modal.mdx +0 -0
  125. {code_sandboxes-1.9.27 → code_sandboxes-1.9.28}/docs/docs/providers/monty.mdx +0 -0
  126. {code_sandboxes-1.9.27 → code_sandboxes-1.9.28}/docs/docusaurus.config.js +0 -0
  127. {code_sandboxes-1.9.27 → code_sandboxes-1.9.28}/docs/package.json +0 -0
  128. {code_sandboxes-1.9.27 → code_sandboxes-1.9.28}/docs/sidebars.js +0 -0
  129. {code_sandboxes-1.9.27 → code_sandboxes-1.9.28}/docs/src/components/HomepageRow1.js +0 -0
  130. {code_sandboxes-1.9.27 → code_sandboxes-1.9.28}/docs/src/components/HomepageRow1.module.css +0 -0
  131. {code_sandboxes-1.9.27 → code_sandboxes-1.9.28}/docs/src/components/HomepageRow2.js +0 -0
  132. {code_sandboxes-1.9.27 → code_sandboxes-1.9.28}/docs/src/components/HomepageRow2.module.css +0 -0
  133. {code_sandboxes-1.9.27 → code_sandboxes-1.9.28}/docs/src/components/HomepageRow3.js +0 -0
  134. {code_sandboxes-1.9.27 → code_sandboxes-1.9.28}/docs/src/components/HomepageRow3.module.css +0 -0
  135. {code_sandboxes-1.9.27 → code_sandboxes-1.9.28}/docs/src/css/custom.css +0 -0
  136. {code_sandboxes-1.9.27 → code_sandboxes-1.9.28}/docs/src/pages/index.module.css +0 -0
  137. {code_sandboxes-1.9.27 → code_sandboxes-1.9.28}/docs/src/pages/markdown-page.md +0 -0
  138. {code_sandboxes-1.9.27 → code_sandboxes-1.9.28}/docs/src/theme/CustomDocItem.tsx +0 -0
  139. {code_sandboxes-1.9.27 → code_sandboxes-1.9.28}/docs/src/theme/IconsTitle.tsx +0 -0
  140. {code_sandboxes-1.9.27 → code_sandboxes-1.9.28}/docs/static/img/bricks.svg +0 -0
  141. {code_sandboxes-1.9.27 → code_sandboxes-1.9.28}/docs/static/img/building-construction.svg +0 -0
  142. {code_sandboxes-1.9.27 → code_sandboxes-1.9.28}/docs/static/img/cloud-sun.svg +0 -0
  143. {code_sandboxes-1.9.27 → code_sandboxes-1.9.28}/docs/static/img/cloud.svg +0 -0
  144. {code_sandboxes-1.9.27 → code_sandboxes-1.9.28}/docs/static/img/collaboration.svg +0 -0
  145. {code_sandboxes-1.9.27 → code_sandboxes-1.9.28}/docs/static/img/copy-left.svg +0 -0
  146. {code_sandboxes-1.9.27 → code_sandboxes-1.9.28}/docs/static/img/datalayer/logo.png +0 -0
  147. {code_sandboxes-1.9.27 → code_sandboxes-1.9.28}/docs/static/img/datalayer/logo.svg +0 -0
  148. {code_sandboxes-1.9.27 → code_sandboxes-1.9.28}/docs/static/img/datalayer/personas/business.svg +0 -0
  149. {code_sandboxes-1.9.27 → code_sandboxes-1.9.28}/docs/static/img/datalayer/personas/data-scientist.svg +0 -0
  150. {code_sandboxes-1.9.27 → code_sandboxes-1.9.28}/docs/static/img/datalayer/personas/devops.svg +0 -0
  151. {code_sandboxes-1.9.27 → code_sandboxes-1.9.28}/docs/static/img/datalayer/project/project-line.svg +0 -0
  152. {code_sandboxes-1.9.27 → code_sandboxes-1.9.28}/docs/static/img/favicon.ico +0 -0
  153. {code_sandboxes-1.9.27 → code_sandboxes-1.9.28}/docs/static/img/jupyter.svg +0 -0
  154. {code_sandboxes-1.9.27 → code_sandboxes-1.9.28}/docs/static/img/open-source.svg +0 -0
  155. {code_sandboxes-1.9.27 → code_sandboxes-1.9.28}/docs/static/img/react-js.svg +0 -0
  156. {code_sandboxes-1.9.27 → code_sandboxes-1.9.28}/docs/static/img/react-js2.svg +0 -0
  157. {code_sandboxes-1.9.27 → code_sandboxes-1.9.28}/docs/static/img/ringed-planet.svg +0 -0
  158. {code_sandboxes-1.9.27 → code_sandboxes-1.9.28}/docs/static/img/robot.svg +0 -0
  159. {code_sandboxes-1.9.27 → code_sandboxes-1.9.28}/docs/static/img/rocket.svg +0 -0
  160. {code_sandboxes-1.9.27 → code_sandboxes-1.9.28}/docs/static/img/shield.svg +0 -0
  161. {code_sandboxes-1.9.27 → code_sandboxes-1.9.28}/docs/static/img/sparkles.svg +0 -0
  162. {code_sandboxes-1.9.27 → code_sandboxes-1.9.28}/docs/static/img/streamlit.gif +0 -0
  163. {code_sandboxes-1.9.27 → code_sandboxes-1.9.28}/docs/static/img/super-hero.svg +0 -0
  164. {code_sandboxes-1.9.27 → code_sandboxes-1.9.28}/docs/static/img/target.svg +0 -0
  165. {code_sandboxes-1.9.27 → code_sandboxes-1.9.28}/docs/static/img/thumbs-up.svg +0 -0
  166. {code_sandboxes-1.9.27 → code_sandboxes-1.9.28}/examples/README.md +0 -0
  167. {code_sandboxes-1.9.27 → code_sandboxes-1.9.28}/examples/exec/Makefile +0 -0
  168. {code_sandboxes-1.9.27 → code_sandboxes-1.9.28}/examples/exec/cloudflare_sandbox_example.py +0 -0
  169. {code_sandboxes-1.9.27 → code_sandboxes-1.9.28}/examples/exec/coreweave_sandbox_example.py +0 -0
  170. {code_sandboxes-1.9.27 → code_sandboxes-1.9.28}/examples/exec/datalayer_sandbox_example.py +0 -0
  171. {code_sandboxes-1.9.27 → code_sandboxes-1.9.28}/examples/exec/daytona_sandbox_example.py +0 -0
  172. {code_sandboxes-1.9.27 → code_sandboxes-1.9.28}/examples/exec/docker_sandbox_example.py +0 -0
  173. {code_sandboxes-1.9.27 → code_sandboxes-1.9.28}/examples/exec/e2b_sandbox_example.py +0 -0
  174. {code_sandboxes-1.9.27 → code_sandboxes-1.9.28}/examples/exec/eval_sandbox_example.py +0 -0
  175. {code_sandboxes-1.9.27 → code_sandboxes-1.9.28}/examples/exec/google_colab_sandbox_example.py +0 -0
  176. {code_sandboxes-1.9.27 → code_sandboxes-1.9.28}/examples/exec/jupyter_server_sandbox_example.py +0 -0
  177. {code_sandboxes-1.9.27 → code_sandboxes-1.9.28}/examples/exec/kaggle_sandbox_example.py +0 -0
  178. {code_sandboxes-1.9.27 → code_sandboxes-1.9.28}/examples/exec/modal_sandbox_example.py +0 -0
  179. {code_sandboxes-1.9.27 → code_sandboxes-1.9.28}/examples/exec/monty_sandbox_example.py +0 -0
  180. {code_sandboxes-1.9.27 → code_sandboxes-1.9.28}/examples/repl/Makefile +0 -0
  181. {code_sandboxes-1.9.27 → code_sandboxes-1.9.28}/examples/repl/cloudflare_sandbox_example.py +0 -0
  182. {code_sandboxes-1.9.27 → code_sandboxes-1.9.28}/examples/repl/coreweave_sandbox_example.py +0 -0
  183. {code_sandboxes-1.9.27 → code_sandboxes-1.9.28}/examples/repl/datalayer_sandbox_example.py +0 -0
  184. {code_sandboxes-1.9.27 → code_sandboxes-1.9.28}/examples/repl/daytona_sandbox_example.py +0 -0
  185. {code_sandboxes-1.9.27 → code_sandboxes-1.9.28}/examples/repl/docker_sandbox_example.py +0 -0
  186. {code_sandboxes-1.9.27 → code_sandboxes-1.9.28}/examples/repl/e2b_sandbox_example.py +0 -0
  187. {code_sandboxes-1.9.27 → code_sandboxes-1.9.28}/examples/repl/eval_sandbox_example.py +0 -0
  188. {code_sandboxes-1.9.27 → code_sandboxes-1.9.28}/examples/repl/google_colab_sandbox_example.py +0 -0
  189. {code_sandboxes-1.9.27 → code_sandboxes-1.9.28}/examples/repl/jupyter_server_sandbox_example.py +0 -0
  190. {code_sandboxes-1.9.27 → code_sandboxes-1.9.28}/examples/repl/kaggle_sandbox_example.py +0 -0
  191. {code_sandboxes-1.9.27 → code_sandboxes-1.9.28}/examples/repl/modal_sandbox_example.py +0 -0
  192. {code_sandboxes-1.9.27 → code_sandboxes-1.9.28}/examples/repl/monty_sandbox_example.py +0 -0
  193. {code_sandboxes-1.9.27 → code_sandboxes-1.9.28}/pyproject.toml +0 -0
  194. {code_sandboxes-1.9.27 → code_sandboxes-1.9.28}/schemas/environment-v1alpha1.json +0 -0
  195. {code_sandboxes-1.9.27 → code_sandboxes-1.9.28}/tests/__init__.py +0 -0
  196. {code_sandboxes-1.9.27 → code_sandboxes-1.9.28}/tests/conftest.py +0 -0
  197. {code_sandboxes-1.9.27 → code_sandboxes-1.9.28}/tests/test_a_datalayer_sandbox_can_be_interrupted.py +0 -0
  198. {code_sandboxes-1.9.27 → code_sandboxes-1.9.28}/tests/test_bridge_mount.py +0 -0
  199. {code_sandboxes-1.9.27 → code_sandboxes-1.9.28}/tests/test_builds.py +0 -0
  200. {code_sandboxes-1.9.27 → code_sandboxes-1.9.28}/tests/test_cli_exec.py +0 -0
  201. {code_sandboxes-1.9.27 → code_sandboxes-1.9.28}/tests/test_cli_repl.py +0 -0
  202. {code_sandboxes-1.9.27 → code_sandboxes-1.9.28}/tests/test_client.py +0 -0
  203. {code_sandboxes-1.9.27 → code_sandboxes-1.9.28}/tests/test_client_contents.py +0 -0
  204. {code_sandboxes-1.9.27 → code_sandboxes-1.9.28}/tests/test_client_files.py +0 -0
  205. {code_sandboxes-1.9.27 → code_sandboxes-1.9.28}/tests/test_client_outcome_error_output.py +0 -0
  206. {code_sandboxes-1.9.27 → code_sandboxes-1.9.28}/tests/test_cloudflare.py +0 -0
  207. {code_sandboxes-1.9.27 → code_sandboxes-1.9.28}/tests/test_commands_envelope.py +0 -0
  208. {code_sandboxes-1.9.27 → code_sandboxes-1.9.28}/tests/test_console.py +0 -0
  209. {code_sandboxes-1.9.27 → code_sandboxes-1.9.28}/tests/test_contents_contract.py +0 -0
  210. {code_sandboxes-1.9.27 → code_sandboxes-1.9.28}/tests/test_contents_live_matrix.py +0 -0
  211. {code_sandboxes-1.9.27 → code_sandboxes-1.9.28}/tests/test_coreweave.py +0 -0
  212. {code_sandboxes-1.9.27 → code_sandboxes-1.9.28}/tests/test_datalayer_sandbox.py +0 -0
  213. {code_sandboxes-1.9.27 → code_sandboxes-1.9.28}/tests/test_daytona.py +0 -0
  214. {code_sandboxes-1.9.27 → code_sandboxes-1.9.28}/tests/test_e2b.py +0 -0
  215. {code_sandboxes-1.9.27 → code_sandboxes-1.9.28}/tests/test_environment_accounts.py +0 -0
  216. {code_sandboxes-1.9.27 → code_sandboxes-1.9.28}/tests/test_environment_attest.py +0 -0
  217. {code_sandboxes-1.9.27 → code_sandboxes-1.9.28}/tests/test_environment_bases.py +0 -0
  218. {code_sandboxes-1.9.27 → code_sandboxes-1.9.28}/tests/test_environment_breaker.py +0 -0
  219. {code_sandboxes-1.9.27 → code_sandboxes-1.9.28}/tests/test_environment_build_secrets.py +0 -0
  220. {code_sandboxes-1.9.27 → code_sandboxes-1.9.28}/tests/test_environment_builders.py +0 -0
  221. {code_sandboxes-1.9.27 → code_sandboxes-1.9.28}/tests/test_environment_canonical.py +0 -0
  222. {code_sandboxes-1.9.27 → code_sandboxes-1.9.28}/tests/test_environment_conformance.py +0 -0
  223. {code_sandboxes-1.9.27 → code_sandboxes-1.9.28}/tests/test_environment_constraints.py +0 -0
  224. {code_sandboxes-1.9.27 → code_sandboxes-1.9.28}/tests/test_environment_contract.py +0 -0
  225. {code_sandboxes-1.9.27 → code_sandboxes-1.9.28}/tests/test_environment_cross_variant_report.py +0 -0
  226. {code_sandboxes-1.9.27 → code_sandboxes-1.9.28}/tests/test_environment_datalayer_builder.py +0 -0
  227. {code_sandboxes-1.9.27 → code_sandboxes-1.9.28}/tests/test_environment_daytona_builder.py +0 -0
  228. {code_sandboxes-1.9.27 → code_sandboxes-1.9.28}/tests/test_environment_doctor.py +0 -0
  229. {code_sandboxes-1.9.27 → code_sandboxes-1.9.28}/tests/test_environment_e2b_builder.py +0 -0
  230. {code_sandboxes-1.9.27 → code_sandboxes-1.9.28}/tests/test_environment_errors.py +0 -0
  231. {code_sandboxes-1.9.27 → code_sandboxes-1.9.28}/tests/test_environment_image_import.py +0 -0
  232. {code_sandboxes-1.9.27 → code_sandboxes-1.9.28}/tests/test_environment_lifecycle.py +0 -0
  233. {code_sandboxes-1.9.27 → code_sandboxes-1.9.28}/tests/test_environment_live_matrix.py +0 -0
  234. {code_sandboxes-1.9.27 → code_sandboxes-1.9.28}/tests/test_environment_managed_builders.py +0 -0
  235. {code_sandboxes-1.9.27 → code_sandboxes-1.9.28}/tests/test_environment_modal_builder.py +0 -0
  236. {code_sandboxes-1.9.27 → code_sandboxes-1.9.28}/tests/test_environment_organization_policy.py +0 -0
  237. {code_sandboxes-1.9.27 → code_sandboxes-1.9.28}/tests/test_environment_redact.py +0 -0
  238. {code_sandboxes-1.9.27 → code_sandboxes-1.9.28}/tests/test_environment_resolve.py +0 -0
  239. {code_sandboxes-1.9.27 → code_sandboxes-1.9.28}/tests/test_environment_resolve_conda.py +0 -0
  240. {code_sandboxes-1.9.27 → code_sandboxes-1.9.28}/tests/test_environment_spec.py +0 -0
  241. {code_sandboxes-1.9.27 → code_sandboxes-1.9.28}/tests/test_environment_spec_organization_policy.py +0 -0
  242. {code_sandboxes-1.9.27 → code_sandboxes-1.9.28}/tests/test_eval.py +0 -0
  243. {code_sandboxes-1.9.27 → code_sandboxes-1.9.28}/tests/test_every_variant_has_a_real_interrupt.py +0 -0
  244. {code_sandboxes-1.9.27 → code_sandboxes-1.9.28}/tests/test_factory.py +0 -0
  245. {code_sandboxes-1.9.27 → code_sandboxes-1.9.28}/tests/test_google_colab.py +0 -0
  246. {code_sandboxes-1.9.27 → code_sandboxes-1.9.28}/tests/test_integration.py +0 -0
  247. {code_sandboxes-1.9.27 → code_sandboxes-1.9.28}/tests/test_jupyter_ingress.py +0 -0
  248. {code_sandboxes-1.9.27 → code_sandboxes-1.9.28}/tests/test_jupyter_server_streaming.py +0 -0
  249. {code_sandboxes-1.9.27 → code_sandboxes-1.9.28}/tests/test_kaggle.py +0 -0
  250. {code_sandboxes-1.9.27 → code_sandboxes-1.9.28}/tests/test_kaggle_execute.py +0 -0
  251. {code_sandboxes-1.9.27 → code_sandboxes-1.9.28}/tests/test_kaggle_live.py +0 -0
  252. {code_sandboxes-1.9.27 → code_sandboxes-1.9.28}/tests/test_kaggle_session.py +0 -0
  253. {code_sandboxes-1.9.27 → code_sandboxes-1.9.28}/tests/test_kernel_client_compatibility.py +0 -0
  254. {code_sandboxes-1.9.27 → code_sandboxes-1.9.28}/tests/test_lifecycle_vocabulary.py +0 -0
  255. {code_sandboxes-1.9.27 → code_sandboxes-1.9.28}/tests/test_manage.py +0 -0
  256. {code_sandboxes-1.9.27 → code_sandboxes-1.9.28}/tests/test_manage_datalayer.py +0 -0
  257. {code_sandboxes-1.9.27 → code_sandboxes-1.9.28}/tests/test_modal_google_colab_sandbox.py +0 -0
  258. {code_sandboxes-1.9.27 → code_sandboxes-1.9.28}/tests/test_modal_session.py +0 -0
  259. {code_sandboxes-1.9.27 → code_sandboxes-1.9.28}/tests/test_models.py +0 -0
  260. {code_sandboxes-1.9.27 → code_sandboxes-1.9.28}/tests/test_output_line_fidelity.py +0 -0
  261. {code_sandboxes-1.9.27 → code_sandboxes-1.9.28}/tests/test_provider_catalog_names.py +0 -0
  262. {code_sandboxes-1.9.27 → code_sandboxes-1.9.28}/tests/test_provider_ingress.py +0 -0
  263. {code_sandboxes-1.9.27 → code_sandboxes-1.9.28}/tests/test_providers.py +0 -0
  264. {code_sandboxes-1.9.27 → code_sandboxes-1.9.28}/tests/test_sandboxes.py +0 -0
  265. {code_sandboxes-1.9.27 → code_sandboxes-1.9.28}/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.27
3
+ Version: 1.9.28
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.27"
6
+ __version__ = "1.9.28"
@@ -650,13 +650,17 @@ class JupyterServerSandbox(Sandbox):
650
650
  "Failed to restart Jupyter kernel: the server answered %s", response.status_code
651
651
  )
652
652
  return False
653
- # The websocket the client holds is to the kernel that has just been
654
- # replaced; reconnecting is what makes the next execution land in the
655
- # new interpreter rather than on a channel nobody is reading.
656
- with contextlib.suppress(Exception):
657
- self._client.stop()
658
- with contextlib.suppress(Exception):
659
- self._client.start()
653
+ # **The websocket is kept, never reconnected.** jupyter-server binds a
654
+ # kernel's websocket to the kernel id, not to its process, and moves
655
+ # it onto the restarted kernel itself — which is how JupyterLab's own
656
+ # restart works. Reconnecting here broke every restart instead:
657
+ # `jupyter_kernel_client` caches its shell and IOPub channels bound to
658
+ # the socket they were built with, so after `stop()` and `start()` the
659
+ # client held a new socket while its channels still wrote to the
660
+ # closed one. The next execution answered `ok` with no output — found
661
+ # on r1, 2026-09-18, as checks 7, 8 and 9 all failing together, and
662
+ # reproduced against the approved base itself, with the deployed
663
+ # client. Swallowing both calls' errors is what hid it.
660
664
  return True
661
665
 
662
666
  @marks_execution
@@ -559,6 +559,34 @@ class TestRestartingTheKernelRatherThanTheConnection:
559
559
  finally:
560
560
  sandbox.stop()
561
561
 
562
+ def test_the_connection_is_kept_across_the_restart(self, monkeypatch):
563
+ """jupyter-server moves a kernel's websocket onto the restarted kernel.
564
+
565
+ Reconnecting broke it: `jupyter_kernel_client`'s channels stay bound
566
+ to the socket they were built with, so after a `stop()` and `start()`
567
+ every execution answered `ok` with no output (r1, 2026-09-18).
568
+ """
569
+ sandbox = _started_sandbox(monkeypatch, kernel_id="kernel-1")
570
+ lifecycle: list[str] = []
571
+ client = sandbox._client
572
+ monkeypatch.setattr(client, "stop", lambda *a, **k: lifecycle.append("stop"))
573
+ monkeypatch.setattr(client, "start", lambda *a, **k: lifecycle.append("start"))
574
+
575
+ class _Response:
576
+ ok = True
577
+ status_code = 200
578
+
579
+ monkeypatch.setattr(
580
+ "code_sandboxes.jupyter_server_sandbox.requests.post",
581
+ lambda *args, **kwargs: _Response(),
582
+ )
583
+ try:
584
+ assert sandbox.restart_kernel() is True
585
+ assert lifecycle == []
586
+ assert sandbox._client is client
587
+ finally:
588
+ sandbox.stop()
589
+
562
590
  def test_a_server_that_refuses_the_restart_is_reported_not_raised(self, monkeypatch):
563
591
  sandbox = _started_sandbox(monkeypatch, kernel_id="kernel-1")
564
592
 
File without changes