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.
- {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/PKG-INFO +1 -1
- {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/code_sandboxes/__version__.py +1 -1
- {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/code_sandboxes/environments/adapters/daytona.py +46 -3
- {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/tests/test_environment_daytona_builder.py +44 -0
- {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/.github/workflows/build.yml +0 -0
- {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/.github/workflows/environments-live.yml +0 -0
- {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/.github/workflows/py-code-style.yml +0 -0
- {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/.github/workflows/py-tests.yml +0 -0
- {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/.github/workflows/py-typing.yml +0 -0
- {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/.github/workflows/reusable-python.yml +0 -0
- {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/.gitignore +0 -0
- {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/.licenserc.yaml +0 -0
- {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/.pre-commit-config.yaml +0 -0
- {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/.vscode/settings.json +0 -0
- {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/CHANGELOG.md +0 -0
- {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/Dockerfile +0 -0
- {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/LICENSE +0 -0
- {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/Makefile +0 -0
- {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/README.md +0 -0
- {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/code_sandboxes/__init__.py +0 -0
- {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/code_sandboxes/base.py +0 -0
- {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/code_sandboxes/bridge_mount.py +0 -0
- {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/code_sandboxes/builds.py +0 -0
- {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/code_sandboxes/cli.py +0 -0
- {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/code_sandboxes/client.py +0 -0
- {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/code_sandboxes/cloudflare_sandbox.py +0 -0
- {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/code_sandboxes/commands.py +0 -0
- {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/code_sandboxes/console.py +0 -0
- {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/code_sandboxes/contents.py +0 -0
- {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/code_sandboxes/coreweave_sandbox.py +0 -0
- {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/code_sandboxes/datalayer_sandbox.py +0 -0
- {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/code_sandboxes/daytona_sandbox.py +0 -0
- {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/code_sandboxes/docker_sandbox.py +0 -0
- {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/code_sandboxes/e2b_sandbox.py +0 -0
- {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/code_sandboxes/environments/__init__.py +0 -0
- {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/code_sandboxes/environments/__main__.py +0 -0
- {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/code_sandboxes/environments/accounts.py +0 -0
- {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/code_sandboxes/environments/adapters/__init__.py +0 -0
- {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/code_sandboxes/environments/adapters/datalayer.py +0 -0
- {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/code_sandboxes/environments/adapters/e2b.py +0 -0
- {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/code_sandboxes/environments/adapters/managed.py +0 -0
- {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/code_sandboxes/environments/adapters/modal.py +0 -0
- {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/code_sandboxes/environments/attest.py +0 -0
- {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/code_sandboxes/environments/bases.py +0 -0
- {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/code_sandboxes/environments/breaker.py +0 -0
- {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/code_sandboxes/environments/build_secrets.py +0 -0
- {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/code_sandboxes/environments/builders.py +0 -0
- {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/code_sandboxes/environments/canonical.py +0 -0
- {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/code_sandboxes/environments/conformance.py +0 -0
- {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/code_sandboxes/environments/constraints/sandbox-contract-v1.txt +0 -0
- {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/code_sandboxes/environments/constraints/wheelhouse/README.md +0 -0
- {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
- {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/code_sandboxes/environments/contract.py +0 -0
- {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/code_sandboxes/environments/doctor/__init__.py +0 -0
- {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/code_sandboxes/environments/doctor/build.py +0 -0
- {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/code_sandboxes/environments/doctor/datalayer_sandbox.py +0 -0
- {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/code_sandboxes/environments/doctor/report.schema.json +0 -0
- {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/code_sandboxes/environments/errors.py +0 -0
- {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/code_sandboxes/environments/files.py +0 -0
- {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/code_sandboxes/environments/image_import.py +0 -0
- {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/code_sandboxes/environments/lifecycle.py +0 -0
- {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/code_sandboxes/environments/policy.py +0 -0
- {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/code_sandboxes/environments/redact.py +0 -0
- {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/code_sandboxes/environments/resolve.py +0 -0
- {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/code_sandboxes/environments/resolve_conda.py +0 -0
- {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/code_sandboxes/environments/schema.py +0 -0
- {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/code_sandboxes/environments/spec.py +0 -0
- {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/code_sandboxes/eval_sandbox.py +0 -0
- {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/code_sandboxes/exceptions.py +0 -0
- {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/code_sandboxes/filesystem.py +0 -0
- {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/code_sandboxes/google_colab.py +0 -0
- {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/code_sandboxes/google_colab_sandbox.py +0 -0
- {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/code_sandboxes/interfaces.py +0 -0
- {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/code_sandboxes/jupyter_ingress.py +0 -0
- {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/code_sandboxes/jupyter_server_sandbox.py +0 -0
- {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/code_sandboxes/kaggle.py +0 -0
- {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/code_sandboxes/kaggle_execute.py +0 -0
- {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/code_sandboxes/kaggle_live.py +0 -0
- {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/code_sandboxes/kaggle_sandbox.py +0 -0
- {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/code_sandboxes/lifecycle.py +0 -0
- {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/code_sandboxes/manage.py +0 -0
- {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/code_sandboxes/modal_sandbox.py +0 -0
- {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/code_sandboxes/models.py +0 -0
- {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/code_sandboxes/monty_sandbox.py +0 -0
- {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/code_sandboxes/provider_ingress.py +0 -0
- {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/code_sandboxes/providers.py +0 -0
- {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/docker/Dockerfile +0 -0
- {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/docs/.gitignore +0 -0
- {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/docs/LICENSE +0 -0
- {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/docs/Makefile +0 -0
- {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/docs/README.md +0 -0
- {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/docs/babel.config.js +0 -0
- {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/docs/docs/api-reference/_category_.yml +0 -0
- {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/docs/docs/api-reference/index.mdx +0 -0
- {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/docs/docs/cli/_category_.yml +0 -0
- {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/docs/docs/cli/index.mdx +0 -0
- {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/docs/docs/contribute/_category_.yml +0 -0
- {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/docs/docs/contribute/index.mdx +0 -0
- {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/docs/docs/environments/_category_.yml +0 -0
- {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/docs/docs/environments/contract.mdx +0 -0
- {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/docs/docs/environments/index.mdx +0 -0
- {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/docs/docs/environments/specification.mdx +0 -0
- {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/docs/docs/environments/spike-2026-09.mdx +0 -0
- {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/docs/docs/examples/_category_.yml +0 -0
- {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/docs/docs/examples/index.mdx +0 -0
- {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/docs/docs/guide/_category_.yml +0 -0
- {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/docs/docs/guide/index.mdx +0 -0
- {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/docs/docs/index.mdx +0 -0
- {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/docs/docs/install/_category_.yml +0 -0
- {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/docs/docs/install/index.mdx +0 -0
- {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/docs/docs/provider-ingress.mdx +0 -0
- {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/docs/docs/providers/_category_.yml +0 -0
- {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/docs/docs/providers/cloudflare.mdx +0 -0
- {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/docs/docs/providers/coreweave.mdx +0 -0
- {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/docs/docs/providers/datalayer.mdx +0 -0
- {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/docs/docs/providers/daytona.mdx +0 -0
- {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/docs/docs/providers/docker.mdx +0 -0
- {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/docs/docs/providers/e2b.mdx +0 -0
- {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/docs/docs/providers/eval.mdx +0 -0
- {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/docs/docs/providers/google-colab.mdx +0 -0
- {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/docs/docs/providers/index.mdx +0 -0
- {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/docs/docs/providers/jupyter-server.mdx +0 -0
- {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/docs/docs/providers/kaggle.mdx +0 -0
- {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/docs/docs/providers/modal.mdx +0 -0
- {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/docs/docs/providers/monty.mdx +0 -0
- {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/docs/docusaurus.config.js +0 -0
- {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/docs/package.json +0 -0
- {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/docs/sidebars.js +0 -0
- {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/docs/src/components/HomepageRow1.js +0 -0
- {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/docs/src/components/HomepageRow1.module.css +0 -0
- {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/docs/src/components/HomepageRow2.js +0 -0
- {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/docs/src/components/HomepageRow2.module.css +0 -0
- {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/docs/src/components/HomepageRow3.js +0 -0
- {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/docs/src/components/HomepageRow3.module.css +0 -0
- {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/docs/src/css/custom.css +0 -0
- {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/docs/src/pages/index.module.css +0 -0
- {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/docs/src/pages/markdown-page.md +0 -0
- {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/docs/src/theme/CustomDocItem.tsx +0 -0
- {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/docs/src/theme/IconsTitle.tsx +0 -0
- {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/docs/static/img/bricks.svg +0 -0
- {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/docs/static/img/building-construction.svg +0 -0
- {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/docs/static/img/cloud-sun.svg +0 -0
- {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/docs/static/img/cloud.svg +0 -0
- {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/docs/static/img/collaboration.svg +0 -0
- {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/docs/static/img/copy-left.svg +0 -0
- {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/docs/static/img/datalayer/logo.png +0 -0
- {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/docs/static/img/datalayer/logo.svg +0 -0
- {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/docs/static/img/datalayer/personas/business.svg +0 -0
- {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/docs/static/img/datalayer/personas/data-scientist.svg +0 -0
- {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/docs/static/img/datalayer/personas/devops.svg +0 -0
- {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/docs/static/img/datalayer/project/project-line.svg +0 -0
- {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/docs/static/img/favicon.ico +0 -0
- {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/docs/static/img/jupyter.svg +0 -0
- {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/docs/static/img/open-source.svg +0 -0
- {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/docs/static/img/react-js.svg +0 -0
- {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/docs/static/img/react-js2.svg +0 -0
- {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/docs/static/img/ringed-planet.svg +0 -0
- {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/docs/static/img/robot.svg +0 -0
- {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/docs/static/img/rocket.svg +0 -0
- {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/docs/static/img/shield.svg +0 -0
- {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/docs/static/img/sparkles.svg +0 -0
- {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/docs/static/img/streamlit.gif +0 -0
- {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/docs/static/img/super-hero.svg +0 -0
- {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/docs/static/img/target.svg +0 -0
- {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/docs/static/img/thumbs-up.svg +0 -0
- {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/examples/README.md +0 -0
- {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/examples/exec/Makefile +0 -0
- {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/examples/exec/cloudflare_sandbox_example.py +0 -0
- {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/examples/exec/coreweave_sandbox_example.py +0 -0
- {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/examples/exec/datalayer_sandbox_example.py +0 -0
- {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/examples/exec/daytona_sandbox_example.py +0 -0
- {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/examples/exec/docker_sandbox_example.py +0 -0
- {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/examples/exec/e2b_sandbox_example.py +0 -0
- {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/examples/exec/eval_sandbox_example.py +0 -0
- {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/examples/exec/google_colab_sandbox_example.py +0 -0
- {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/examples/exec/jupyter_server_sandbox_example.py +0 -0
- {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/examples/exec/kaggle_sandbox_example.py +0 -0
- {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/examples/exec/modal_sandbox_example.py +0 -0
- {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/examples/exec/monty_sandbox_example.py +0 -0
- {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/examples/repl/Makefile +0 -0
- {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/examples/repl/cloudflare_sandbox_example.py +0 -0
- {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/examples/repl/coreweave_sandbox_example.py +0 -0
- {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/examples/repl/datalayer_sandbox_example.py +0 -0
- {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/examples/repl/daytona_sandbox_example.py +0 -0
- {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/examples/repl/docker_sandbox_example.py +0 -0
- {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/examples/repl/e2b_sandbox_example.py +0 -0
- {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/examples/repl/eval_sandbox_example.py +0 -0
- {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/examples/repl/google_colab_sandbox_example.py +0 -0
- {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/examples/repl/jupyter_server_sandbox_example.py +0 -0
- {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/examples/repl/kaggle_sandbox_example.py +0 -0
- {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/examples/repl/modal_sandbox_example.py +0 -0
- {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/examples/repl/monty_sandbox_example.py +0 -0
- {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/pyproject.toml +0 -0
- {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/schemas/environment-v1alpha1.json +0 -0
- {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/tests/__init__.py +0 -0
- {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/tests/conftest.py +0 -0
- {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/tests/test_a_datalayer_sandbox_can_be_interrupted.py +0 -0
- {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/tests/test_bridge_mount.py +0 -0
- {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/tests/test_builds.py +0 -0
- {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/tests/test_cli_exec.py +0 -0
- {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/tests/test_cli_repl.py +0 -0
- {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/tests/test_client.py +0 -0
- {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/tests/test_client_contents.py +0 -0
- {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/tests/test_client_files.py +0 -0
- {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/tests/test_client_outcome_error_output.py +0 -0
- {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/tests/test_cloudflare.py +0 -0
- {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/tests/test_commands_envelope.py +0 -0
- {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/tests/test_console.py +0 -0
- {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/tests/test_contents_contract.py +0 -0
- {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/tests/test_contents_live_matrix.py +0 -0
- {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/tests/test_coreweave.py +0 -0
- {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/tests/test_datalayer_sandbox.py +0 -0
- {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/tests/test_daytona.py +0 -0
- {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/tests/test_e2b.py +0 -0
- {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/tests/test_environment_accounts.py +0 -0
- {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/tests/test_environment_attest.py +0 -0
- {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/tests/test_environment_bases.py +0 -0
- {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/tests/test_environment_breaker.py +0 -0
- {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/tests/test_environment_build_secrets.py +0 -0
- {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/tests/test_environment_builders.py +0 -0
- {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/tests/test_environment_canonical.py +0 -0
- {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/tests/test_environment_conformance.py +0 -0
- {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/tests/test_environment_constraints.py +0 -0
- {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/tests/test_environment_contract.py +0 -0
- {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/tests/test_environment_cross_variant_report.py +0 -0
- {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/tests/test_environment_datalayer_builder.py +0 -0
- {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/tests/test_environment_dockerfile_source.py +0 -0
- {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/tests/test_environment_doctor.py +0 -0
- {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/tests/test_environment_e2b_builder.py +0 -0
- {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/tests/test_environment_errors.py +0 -0
- {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/tests/test_environment_image_import.py +0 -0
- {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/tests/test_environment_lifecycle.py +0 -0
- {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/tests/test_environment_live_matrix.py +0 -0
- {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/tests/test_environment_managed_builders.py +0 -0
- {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/tests/test_environment_modal_builder.py +0 -0
- {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/tests/test_environment_organization_policy.py +0 -0
- {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/tests/test_environment_redact.py +0 -0
- {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/tests/test_environment_resolve.py +0 -0
- {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/tests/test_environment_resolve_conda.py +0 -0
- {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/tests/test_environment_spec.py +0 -0
- {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/tests/test_environment_spec_organization_policy.py +0 -0
- {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/tests/test_eval.py +0 -0
- {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/tests/test_every_variant_has_a_real_interrupt.py +0 -0
- {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/tests/test_factory.py +0 -0
- {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/tests/test_google_colab.py +0 -0
- {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/tests/test_integration.py +0 -0
- {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/tests/test_jupyter_ingress.py +0 -0
- {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/tests/test_jupyter_server.py +0 -0
- {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/tests/test_jupyter_server_streaming.py +0 -0
- {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/tests/test_kaggle.py +0 -0
- {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/tests/test_kaggle_execute.py +0 -0
- {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/tests/test_kaggle_live.py +0 -0
- {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/tests/test_kaggle_session.py +0 -0
- {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/tests/test_kernel_client_compatibility.py +0 -0
- {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/tests/test_lifecycle_vocabulary.py +0 -0
- {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/tests/test_manage.py +0 -0
- {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/tests/test_manage_datalayer.py +0 -0
- {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/tests/test_modal_google_colab_sandbox.py +0 -0
- {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/tests/test_modal_session.py +0 -0
- {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/tests/test_models.py +0 -0
- {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/tests/test_output_line_fidelity.py +0 -0
- {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/tests/test_provider_catalog_names.py +0 -0
- {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/tests/test_provider_ingress.py +0 -0
- {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/tests/test_providers.py +0 -0
- {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/tests/test_sandboxes.py +0 -0
- {code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/tests/test_the_kill_relaunch_drill.py +0 -0
{code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/code_sandboxes/environments/adapters/daytona.py
RENAMED
|
@@ -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 =
|
|
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
|
-
|
|
639
|
-
|
|
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
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/code_sandboxes/environments/adapters/__init__.py
RENAMED
|
File without changes
|
{code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/code_sandboxes/environments/adapters/datalayer.py
RENAMED
|
File without changes
|
|
File without changes
|
{code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/code_sandboxes/environments/adapters/managed.py
RENAMED
|
File without changes
|
{code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/code_sandboxes/environments/adapters/modal.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/code_sandboxes/environments/build_secrets.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/code_sandboxes/environments/doctor/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/code_sandboxes/environments/resolve_conda.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/docs/static/img/datalayer/personas/business.svg
RENAMED
|
File without changes
|
|
File without changes
|
{code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/docs/static/img/datalayer/personas/devops.svg
RENAMED
|
File without changes
|
{code_sandboxes-1.9.32 → code_sandboxes-1.9.33}/docs/static/img/datalayer/project/project-line.svg
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|