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