calkit-python 0.41.12__tar.gz → 0.41.14__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.
- {calkit_python-0.41.12 → calkit_python-0.41.14}/PKG-INFO +1 -1
- calkit_python-0.41.14/calkit/cli/delete.py +33 -0
- {calkit_python-0.41.12 → calkit_python-0.41.14}/calkit/cli/list.py +56 -1
- {calkit_python-0.41.12 → calkit_python-0.41.14}/calkit/cli/main/core.py +26 -5
- {calkit_python-0.41.12 → calkit_python-0.41.14}/calkit/cli/new.py +97 -0
- {calkit_python-0.41.12 → calkit_python-0.41.14}/calkit/cli/scheduler.py +251 -31
- {calkit_python-0.41.12 → calkit_python-0.41.14}/calkit/cloud.py +29 -12
- {calkit_python-0.41.12 → calkit_python-0.41.14}/calkit/detect.py +103 -2
- {calkit_python-0.41.12 → calkit_python-0.41.14}/calkit/dvc/core.py +153 -12
- {calkit_python-0.41.12 → calkit_python-0.41.14}/calkit/fs.py +78 -40
- {calkit_python-0.41.12 → calkit_python-0.41.14}/calkit/models/core.py +58 -5
- {calkit_python-0.41.12 → calkit_python-0.41.14}/calkit/pipeline.py +25 -0
- {calkit_python-0.41.12 → calkit_python-0.41.14}/calkit/tests/cli/main/test_core.py +106 -47
- calkit_python-0.41.14/calkit/tests/cli/main/test_lock.py +274 -0
- calkit_python-0.41.14/calkit/tests/cli/test_delete.py +23 -0
- {calkit_python-0.41.12 → calkit_python-0.41.14}/calkit/tests/cli/test_list.py +46 -0
- {calkit_python-0.41.12 → calkit_python-0.41.14}/calkit/tests/cli/test_new.py +48 -0
- calkit_python-0.41.14/calkit/tests/cli/test_scheduler.py +408 -0
- {calkit_python-0.41.12 → calkit_python-0.41.14}/calkit/tests/dvc/test_core.py +50 -0
- calkit_python-0.41.14/calkit/tests/models/test_core.py +25 -0
- {calkit_python-0.41.12 → calkit_python-0.41.14}/calkit/tests/test_cloud.py +96 -0
- {calkit_python-0.41.12 → calkit_python-0.41.14}/calkit/tests/test_detect.py +67 -0
- {calkit_python-0.41.12 → calkit_python-0.41.14}/calkit/tests/test_fs.py +121 -0
- {calkit_python-0.41.12 → calkit_python-0.41.14}/docs/cli-reference.md +160 -14
- {calkit_python-0.41.12 → calkit_python-0.41.14}/vscode-ext/package.json +157 -2
- {calkit_python-0.41.12 → calkit_python-0.41.14}/vscode-ext/src/extension.ts +783 -127
- calkit_python-0.41.14/vscode-ext/src/figures.ts +40 -0
- {calkit_python-0.41.12 → calkit_python-0.41.14}/vscode-ext/src/sidebar.ts +255 -89
- calkit_python-0.41.14/vscode-ext/src/test/figures.test.ts +56 -0
- {calkit_python-0.41.12 → calkit_python-0.41.14}/vscode-ext/src/types.ts +14 -0
- calkit_python-0.41.12/calkit/tests/cli/test_scheduler.py +0 -201
- {calkit_python-0.41.12 → calkit_python-0.41.14}/.claude-plugin/marketplace.json +0 -0
- {calkit_python-0.41.12 → calkit_python-0.41.14}/.gitattributes +0 -0
- {calkit_python-0.41.12 → calkit_python-0.41.14}/.gitignore +0 -0
- {calkit_python-0.41.12 → calkit_python-0.41.14}/.pre-commit-config.yaml +0 -0
- {calkit_python-0.41.12 → calkit_python-0.41.14}/.prettierignore +0 -0
- {calkit_python-0.41.12 → calkit_python-0.41.14}/.python-version +0 -0
- {calkit_python-0.41.12 → calkit_python-0.41.14}/.vscode/launch.json +0 -0
- {calkit_python-0.41.12 → calkit_python-0.41.14}/.vscode/tasks.json +0 -0
- {calkit_python-0.41.12 → calkit_python-0.41.14}/.yarnrc.yml +0 -0
- {calkit_python-0.41.12 → calkit_python-0.41.14}/AGENTS.md +0 -0
- {calkit_python-0.41.12 → calkit_python-0.41.14}/CITATION.cff +0 -0
- {calkit_python-0.41.12 → calkit_python-0.41.14}/CODE_OF_CONDUCT.md +0 -0
- {calkit_python-0.41.12 → calkit_python-0.41.14}/CONTRIBUTING.md +0 -0
- {calkit_python-0.41.12 → calkit_python-0.41.14}/LICENSE +0 -0
- {calkit_python-0.41.12 → calkit_python-0.41.14}/Makefile +0 -0
- {calkit_python-0.41.12 → calkit_python-0.41.14}/README.md +0 -0
- {calkit_python-0.41.12 → calkit_python-0.41.14}/agent-plugin/.claude-plugin/plugin.json +0 -0
- {calkit_python-0.41.12 → calkit_python-0.41.14}/agent-plugin/skills/add-pipeline-stage/SKILL.md +0 -0
- {calkit_python-0.41.12 → calkit_python-0.41.14}/agent-plugin/skills/conventions/SKILL.md +0 -0
- {calkit_python-0.41.12 → calkit_python-0.41.14}/agent-plugin/skills/create-pipeline/SKILL.md +0 -0
- {calkit_python-0.41.12 → calkit_python-0.41.14}/babel.config.js +0 -0
- {calkit_python-0.41.12 → calkit_python-0.41.14}/calkit/__init__.py +0 -0
- {calkit_python-0.41.12 → calkit_python-0.41.14}/calkit/__main__.py +0 -0
- {calkit_python-0.41.12 → calkit_python-0.41.14}/calkit/calc.py +0 -0
- {calkit_python-0.41.12 → calkit_python-0.41.14}/calkit/check.py +0 -0
- {calkit_python-0.41.12 → calkit_python-0.41.14}/calkit/cli/__init__.py +0 -0
- {calkit_python-0.41.12 → calkit_python-0.41.14}/calkit/cli/check.py +0 -0
- {calkit_python-0.41.12 → calkit_python-0.41.14}/calkit/cli/cloud.py +0 -0
- {calkit_python-0.41.12 → calkit_python-0.41.14}/calkit/cli/config.py +0 -0
- {calkit_python-0.41.12 → calkit_python-0.41.14}/calkit/cli/core.py +0 -0
- {calkit_python-0.41.12 → calkit_python-0.41.14}/calkit/cli/describe.py +0 -0
- {calkit_python-0.41.12 → calkit_python-0.41.14}/calkit/cli/dev.py +0 -0
- {calkit_python-0.41.12 → calkit_python-0.41.14}/calkit/cli/import_.py +0 -0
- {calkit_python-0.41.12 → calkit_python-0.41.14}/calkit/cli/latex.py +0 -0
- {calkit_python-0.41.12 → calkit_python-0.41.14}/calkit/cli/main/__init__.py +0 -0
- {calkit_python-0.41.12 → calkit_python-0.41.14}/calkit/cli/main/xr.py +0 -0
- {calkit_python-0.41.12 → calkit_python-0.41.14}/calkit/cli/notebooks.py +0 -0
- {calkit_python-0.41.12 → calkit_python-0.41.14}/calkit/cli/office.py +0 -0
- {calkit_python-0.41.12 → calkit_python-0.41.14}/calkit/cli/overleaf.py +0 -0
- {calkit_python-0.41.12 → calkit_python-0.41.14}/calkit/cli/update.py +0 -0
- {calkit_python-0.41.12 → calkit_python-0.41.14}/calkit/conda.py +0 -0
- {calkit_python-0.41.12 → calkit_python-0.41.14}/calkit/config.py +0 -0
- {calkit_python-0.41.12 → calkit_python-0.41.14}/calkit/core.py +0 -0
- {calkit_python-0.41.12 → calkit_python-0.41.14}/calkit/datasets.py +0 -0
- {calkit_python-0.41.12 → calkit_python-0.41.14}/calkit/dependencies.py +0 -0
- {calkit_python-0.41.12 → calkit_python-0.41.14}/calkit/docker.py +0 -0
- {calkit_python-0.41.12 → calkit_python-0.41.14}/calkit/dvc/__init__.py +0 -0
- {calkit_python-0.41.12 → calkit_python-0.41.14}/calkit/dvc/zip.py +0 -0
- {calkit_python-0.41.12 → calkit_python-0.41.14}/calkit/environments.py +0 -0
- {calkit_python-0.41.12 → calkit_python-0.41.14}/calkit/git.py +0 -0
- {calkit_python-0.41.12 → calkit_python-0.41.14}/calkit/github.py +0 -0
- {calkit_python-0.41.12 → calkit_python-0.41.14}/calkit/gui.py +0 -0
- {calkit_python-0.41.12 → calkit_python-0.41.14}/calkit/install.py +0 -0
- {calkit_python-0.41.12 → calkit_python-0.41.14}/calkit/invenio.py +0 -0
- {calkit_python-0.41.12 → calkit_python-0.41.14}/calkit/julia.py +0 -0
- {calkit_python-0.41.12 → calkit_python-0.41.14}/calkit/jupyter.py +0 -0
- {calkit_python-0.41.12 → calkit_python-0.41.14}/calkit/jupyterlab/__init__.py +0 -0
- {calkit_python-0.41.12 → calkit_python-0.41.14}/calkit/jupyterlab/routes.py +0 -0
- {calkit_python-0.41.12 → calkit_python-0.41.14}/calkit/labextension/package.json +0 -0
- {calkit_python-0.41.12 → calkit_python-0.41.14}/calkit/labextension/schemas/calkit/package.json.orig +0 -0
- {calkit_python-0.41.12 → calkit_python-0.41.14}/calkit/labextension/schemas/calkit/plugin.json +0 -0
- {calkit_python-0.41.12 → calkit_python-0.41.14}/calkit/labextension/static/502.9a2c5772a15466e923ef.js +0 -0
- {calkit_python-0.41.12 → calkit_python-0.41.14}/calkit/labextension/static/695.2c41003a452d43d2b358.js +0 -0
- {calkit_python-0.41.12 → calkit_python-0.41.14}/calkit/labextension/static/867.a42a046aa5108f54f8fb.js +0 -0
- {calkit_python-0.41.12 → calkit_python-0.41.14}/calkit/labextension/static/909.e3f9cc3408834a7fdcc3.js +0 -0
- {calkit_python-0.41.12 → calkit_python-0.41.14}/calkit/labextension/static/946.050af2abf7845cfbdbd2.js +0 -0
- {calkit_python-0.41.12 → calkit_python-0.41.14}/calkit/labextension/static/946.050af2abf7845cfbdbd2.js.LICENSE.txt +0 -0
- {calkit_python-0.41.12 → calkit_python-0.41.14}/calkit/labextension/static/b2f1c3efe70cb539d121.png +0 -0
- {calkit_python-0.41.12 → calkit_python-0.41.14}/calkit/labextension/static/remoteEntry.65469af996e7a96aa983.js +0 -0
- {calkit_python-0.41.12 → calkit_python-0.41.14}/calkit/labextension/static/style.js +0 -0
- {calkit_python-0.41.12 → calkit_python-0.41.14}/calkit/labextension/static/third-party-licenses.json +0 -0
- {calkit_python-0.41.12 → calkit_python-0.41.14}/calkit/licenses.py +0 -0
- {calkit_python-0.41.12 → calkit_python-0.41.14}/calkit/magics.py +0 -0
- {calkit_python-0.41.12 → calkit_python-0.41.14}/calkit/matlab.py +0 -0
- {calkit_python-0.41.12 → calkit_python-0.41.14}/calkit/models/__init__.py +0 -0
- {calkit_python-0.41.12 → calkit_python-0.41.14}/calkit/models/io.py +0 -0
- {calkit_python-0.41.12 → calkit_python-0.41.14}/calkit/models/iteration.py +0 -0
- {calkit_python-0.41.12 → calkit_python-0.41.14}/calkit/models/pipeline.py +0 -0
- {calkit_python-0.41.12 → calkit_python-0.41.14}/calkit/notebooks.py +0 -0
- {calkit_python-0.41.12 → calkit_python-0.41.14}/calkit/office.py +0 -0
- {calkit_python-0.41.12 → calkit_python-0.41.14}/calkit/ops.py +0 -0
- {calkit_python-0.41.12 → calkit_python-0.41.14}/calkit/overleaf.py +0 -0
- {calkit_python-0.41.12 → calkit_python-0.41.14}/calkit/releases.py +0 -0
- {calkit_python-0.41.12 → calkit_python-0.41.14}/calkit/server.py +0 -0
- {calkit_python-0.41.12 → calkit_python-0.41.14}/calkit/templates/__init__.py +0 -0
- {calkit_python-0.41.12 → calkit_python-0.41.14}/calkit/templates/core.py +0 -0
- {calkit_python-0.41.12 → calkit_python-0.41.14}/calkit/templates/latex/__init__.py +0 -0
- {calkit_python-0.41.12 → calkit_python-0.41.14}/calkit/templates/latex/article/paper.tex +0 -0
- {calkit_python-0.41.12 → calkit_python-0.41.14}/calkit/templates/latex/core.py +0 -0
- {calkit_python-0.41.12 → calkit_python-0.41.14}/calkit/templates/latex/jfm/jfm.bst +0 -0
- {calkit_python-0.41.12 → calkit_python-0.41.14}/calkit/templates/latex/jfm/jfm.cls +0 -0
- {calkit_python-0.41.12 → calkit_python-0.41.14}/calkit/templates/latex/jfm/lineno-FLM.sty +0 -0
- {calkit_python-0.41.12 → calkit_python-0.41.14}/calkit/templates/latex/jfm/paper.tex +0 -0
- {calkit_python-0.41.12 → calkit_python-0.41.14}/calkit/templates/latex/jfm/upmath.sty +0 -0
- {calkit_python-0.41.12 → calkit_python-0.41.14}/calkit/tests/__init__.py +0 -0
- {calkit_python-0.41.12 → calkit_python-0.41.14}/calkit/tests/cli/__init__.py +0 -0
- {calkit_python-0.41.12 → calkit_python-0.41.14}/calkit/tests/cli/main/__init__.py +0 -0
- {calkit_python-0.41.12 → calkit_python-0.41.14}/calkit/tests/cli/main/test_subprojects.py +0 -0
- {calkit_python-0.41.12 → calkit_python-0.41.14}/calkit/tests/cli/main/test_xr.py +0 -0
- {calkit_python-0.41.12 → calkit_python-0.41.14}/calkit/tests/cli/test_check.py +0 -0
- {calkit_python-0.41.12 → calkit_python-0.41.14}/calkit/tests/cli/test_cloud.py +0 -0
- {calkit_python-0.41.12 → calkit_python-0.41.14}/calkit/tests/cli/test_config.py +0 -0
- {calkit_python-0.41.12 → calkit_python-0.41.14}/calkit/tests/cli/test_import.py +0 -0
- {calkit_python-0.41.12 → calkit_python-0.41.14}/calkit/tests/cli/test_latex.py +0 -0
- {calkit_python-0.41.12 → calkit_python-0.41.14}/calkit/tests/cli/test_notebooks.py +0 -0
- {calkit_python-0.41.12 → calkit_python-0.41.14}/calkit/tests/cli/test_overleaf.py +0 -0
- {calkit_python-0.41.12 → calkit_python-0.41.14}/calkit/tests/cli/test_update.py +0 -0
- {calkit_python-0.41.12 → calkit_python-0.41.14}/calkit/tests/dvc/__init__.py +0 -0
- {calkit_python-0.41.12 → calkit_python-0.41.14}/calkit/tests/dvc/test_zip.py +0 -0
- {calkit_python-0.41.12 → calkit_python-0.41.14}/calkit/tests/jupyterlab/__init__.py +0 -0
- {calkit_python-0.41.12 → calkit_python-0.41.14}/calkit/tests/jupyterlab/test_routes.py +0 -0
- {calkit_python-0.41.12 → calkit_python-0.41.14}/calkit/tests/models/__init__.py +0 -0
- {calkit_python-0.41.12 → calkit_python-0.41.14}/calkit/tests/models/test_iteration.py +0 -0
- {calkit_python-0.41.12 → calkit_python-0.41.14}/calkit/tests/models/test_pipeline.py +0 -0
- {calkit_python-0.41.12 → calkit_python-0.41.14}/calkit/tests/test_calc.py +0 -0
- {calkit_python-0.41.12 → calkit_python-0.41.14}/calkit/tests/test_check.py +0 -0
- {calkit_python-0.41.12 → calkit_python-0.41.14}/calkit/tests/test_conda.py +0 -0
- {calkit_python-0.41.12 → calkit_python-0.41.14}/calkit/tests/test_core.py +0 -0
- {calkit_python-0.41.12 → calkit_python-0.41.14}/calkit/tests/test_dependencies.py +0 -0
- {calkit_python-0.41.12 → calkit_python-0.41.14}/calkit/tests/test_docker.py +0 -0
- {calkit_python-0.41.12 → calkit_python-0.41.14}/calkit/tests/test_environments.py +0 -0
- {calkit_python-0.41.12 → calkit_python-0.41.14}/calkit/tests/test_git.py +0 -0
- {calkit_python-0.41.12 → calkit_python-0.41.14}/calkit/tests/test_install.py +0 -0
- {calkit_python-0.41.12 → calkit_python-0.41.14}/calkit/tests/test_invenio.py +0 -0
- {calkit_python-0.41.12 → calkit_python-0.41.14}/calkit/tests/test_julia.py +0 -0
- {calkit_python-0.41.12 → calkit_python-0.41.14}/calkit/tests/test_jupyter.py +0 -0
- {calkit_python-0.41.12 → calkit_python-0.41.14}/calkit/tests/test_licenses.py +0 -0
- {calkit_python-0.41.12 → calkit_python-0.41.14}/calkit/tests/test_magics.py +0 -0
- {calkit_python-0.41.12 → calkit_python-0.41.14}/calkit/tests/test_matlab.py +0 -0
- {calkit_python-0.41.12 → calkit_python-0.41.14}/calkit/tests/test_notebooks.py +0 -0
- {calkit_python-0.41.12 → calkit_python-0.41.14}/calkit/tests/test_pipeline.py +0 -0
- {calkit_python-0.41.12 → calkit_python-0.41.14}/calkit/tests/test_releases.py +0 -0
- {calkit_python-0.41.12 → calkit_python-0.41.14}/calkit/tests/test_templates.py +0 -0
- {calkit_python-0.41.12 → calkit_python-0.41.14}/conftest.py +0 -0
- {calkit_python-0.41.12 → calkit_python-0.41.14}/docs/CNAME +0 -0
- {calkit_python-0.41.12 → calkit_python-0.41.14}/docs/ai-tools.md +0 -0
- {calkit_python-0.41.12 → calkit_python-0.41.14}/docs/apps.md +0 -0
- {calkit_python-0.41.12 → calkit_python-0.41.14}/docs/calculations.md +0 -0
- {calkit_python-0.41.12 → calkit_python-0.41.14}/docs/calkit-yaml.md +0 -0
- {calkit_python-0.41.12 → calkit_python-0.41.14}/docs/cloud-integration.md +0 -0
- {calkit_python-0.41.12 → calkit_python-0.41.14}/docs/datasets.md +0 -0
- {calkit_python-0.41.12 → calkit_python-0.41.14}/docs/dependencies.md +0 -0
- {calkit_python-0.41.12 → calkit_python-0.41.14}/docs/environments.md +0 -0
- {calkit_python-0.41.12 → calkit_python-0.41.14}/docs/examples.md +0 -0
- {calkit_python-0.41.12 → calkit_python-0.41.14}/docs/governance.md +0 -0
- {calkit_python-0.41.12 → calkit_python-0.41.14}/docs/help.md +0 -0
- {calkit_python-0.41.12 → calkit_python-0.41.14}/docs/hpc.md +0 -0
- {calkit_python-0.41.12 → calkit_python-0.41.14}/docs/img/c-to-the-k-white.svg +0 -0
- {calkit_python-0.41.12 → calkit_python-0.41.14}/docs/img/calkit-fragmentation-compendium.png +0 -0
- {calkit_python-0.41.12 → calkit_python-0.41.14}/docs/img/calkit-no-bg.png +0 -0
- {calkit_python-0.41.12 → calkit_python-0.41.14}/docs/img/connect-zenodo.png +0 -0
- {calkit_python-0.41.12 → calkit_python-0.41.14}/docs/img/jupyterlab/all-green.png +0 -0
- {calkit_python-0.41.12 → calkit_python-0.41.14}/docs/img/jupyterlab/collect-data-stale.png +0 -0
- {calkit_python-0.41.12 → calkit_python-0.41.14}/docs/img/jupyterlab/new-env.png +0 -0
- {calkit_python-0.41.12 → calkit_python-0.41.14}/docs/img/jupyterlab/new-notebook.png +0 -0
- {calkit_python-0.41.12 → calkit_python-0.41.14}/docs/img/jupyterlab/pipeline-badge.png +0 -0
- {calkit_python-0.41.12 → calkit_python-0.41.14}/docs/img/jupyterlab-params.png +0 -0
- {calkit_python-0.41.12 → calkit_python-0.41.14}/docs/img/plos-osi-code-2024-03.png +0 -0
- {calkit_python-0.41.12 → calkit_python-0.41.14}/docs/img/vscode-nb-params.png +0 -0
- {calkit_python-0.41.12 → calkit_python-0.41.14}/docs/index.md +0 -0
- {calkit_python-0.41.12 → calkit_python-0.41.14}/docs/installation.md +0 -0
- {calkit_python-0.41.12 → calkit_python-0.41.14}/docs/jupyterlab.md +0 -0
- {calkit_python-0.41.12 → calkit_python-0.41.14}/docs/local-server.md +0 -0
- {calkit_python-0.41.12 → calkit_python-0.41.14}/docs/notebooks.md +0 -0
- {calkit_python-0.41.12 → calkit_python-0.41.14}/docs/overleaf.md +0 -0
- {calkit_python-0.41.12 → calkit_python-0.41.14}/docs/pipeline/index.md +0 -0
- {calkit_python-0.41.12 → calkit_python-0.41.14}/docs/pipeline/manual-steps.md +0 -0
- {calkit_python-0.41.12 → calkit_python-0.41.14}/docs/pipeline/running-and-logging.md +0 -0
- {calkit_python-0.41.12 → calkit_python-0.41.14}/docs/quickstart.md +0 -0
- {calkit_python-0.41.12 → calkit_python-0.41.14}/docs/references.md +0 -0
- {calkit_python-0.41.12 → calkit_python-0.41.14}/docs/releases.md +0 -0
- {calkit_python-0.41.12 → calkit_python-0.41.14}/docs/reproducibility.md +0 -0
- {calkit_python-0.41.12 → calkit_python-0.41.14}/docs/subprojects.md +0 -0
- {calkit_python-0.41.12 → calkit_python-0.41.14}/docs/tutorials/adding-latex-pub-docker.md +0 -0
- {calkit_python-0.41.12 → calkit_python-0.41.14}/docs/tutorials/ai-agents.md +0 -0
- {calkit_python-0.41.12 → calkit_python-0.41.14}/docs/tutorials/conda-envs.md +0 -0
- {calkit_python-0.41.12 → calkit_python-0.41.14}/docs/tutorials/existing-project.md +0 -0
- {calkit_python-0.41.12 → calkit_python-0.41.14}/docs/tutorials/first-project.md +0 -0
- {calkit_python-0.41.12 → calkit_python-0.41.14}/docs/tutorials/github-actions.md +0 -0
- {calkit_python-0.41.12 → calkit_python-0.41.14}/docs/tutorials/img/actions-repo-secrets.png +0 -0
- {calkit_python-0.41.12 → calkit_python-0.41.14}/docs/tutorials/img/latex-codespaces/building-codespace.png +0 -0
- {calkit_python-0.41.12 → calkit_python-0.41.14}/docs/tutorials/img/latex-codespaces/codespaces-secrets-2.png +0 -0
- {calkit_python-0.41.12 → calkit_python-0.41.14}/docs/tutorials/img/latex-codespaces/editor-split.png +0 -0
- {calkit_python-0.41.12 → calkit_python-0.41.14}/docs/tutorials/img/latex-codespaces/go-to-linked-code.png +0 -0
- {calkit_python-0.41.12 → calkit_python-0.41.14}/docs/tutorials/img/latex-codespaces/issue-from-selection.png +0 -0
- {calkit_python-0.41.12 → calkit_python-0.41.14}/docs/tutorials/img/latex-codespaces/new-project.png +0 -0
- {calkit_python-0.41.12 → calkit_python-0.41.14}/docs/tutorials/img/latex-codespaces/new-pub-2.png +0 -0
- {calkit_python-0.41.12 → calkit_python-0.41.14}/docs/tutorials/img/latex-codespaces/new-token.png +0 -0
- {calkit_python-0.41.12 → calkit_python-0.41.14}/docs/tutorials/img/latex-codespaces/paper.tex.png +0 -0
- {calkit_python-0.41.12 → calkit_python-0.41.14}/docs/tutorials/img/latex-codespaces/project-home-3.png +0 -0
- {calkit_python-0.41.12 → calkit_python-0.41.14}/docs/tutorials/img/latex-codespaces/push.png +0 -0
- {calkit_python-0.41.12 → calkit_python-0.41.14}/docs/tutorials/img/latex-codespaces/stage.png +0 -0
- {calkit_python-0.41.12 → calkit_python-0.41.14}/docs/tutorials/img/office/anakin-excel.jpg +0 -0
- {calkit_python-0.41.12 → calkit_python-0.41.14}/docs/tutorials/img/office/chart-more-rows.png +0 -0
- {calkit_python-0.41.12 → calkit_python-0.41.14}/docs/tutorials/img/office/create-project.png +0 -0
- {calkit_python-0.41.12 → calkit_python-0.41.14}/docs/tutorials/img/office/elsevier-research-data-guidelines.png +0 -0
- {calkit_python-0.41.12 → calkit_python-0.41.14}/docs/tutorials/img/office/excel-chart.png +0 -0
- {calkit_python-0.41.12 → calkit_python-0.41.14}/docs/tutorials/img/office/excel-data.png +0 -0
- {calkit_python-0.41.12 → calkit_python-0.41.14}/docs/tutorials/img/office/insert-link-to-file.png +0 -0
- {calkit_python-0.41.12 → calkit_python-0.41.14}/docs/tutorials/img/office/needs-clone.png +0 -0
- {calkit_python-0.41.12 → calkit_python-0.41.14}/docs/tutorials/img/office/new-stage.png +0 -0
- {calkit_python-0.41.12 → calkit_python-0.41.14}/docs/tutorials/img/office/phd-comics-version-control.webp +0 -0
- {calkit_python-0.41.12 → calkit_python-0.41.14}/docs/tutorials/img/office/pipeline-out-of-date.png +0 -0
- {calkit_python-0.41.12 → calkit_python-0.41.14}/docs/tutorials/img/office/status-more-rows.png +0 -0
- {calkit_python-0.41.12 → calkit_python-0.41.14}/docs/tutorials/img/office/uncommitted-changes.png +0 -0
- {calkit_python-0.41.12 → calkit_python-0.41.14}/docs/tutorials/img/office/untracked-data.png +0 -0
- {calkit_python-0.41.12 → calkit_python-0.41.14}/docs/tutorials/img/office/updated-publication.png +0 -0
- {calkit_python-0.41.12 → calkit_python-0.41.14}/docs/tutorials/img/office/word-to-pdf-stage-2.png +0 -0
- {calkit_python-0.41.12 → calkit_python-0.41.14}/docs/tutorials/img/office/workflow-page.png +0 -0
- {calkit_python-0.41.12 → calkit_python-0.41.14}/docs/tutorials/img/openfoam/clone.png +0 -0
- {calkit_python-0.41.12 → calkit_python-0.41.14}/docs/tutorials/img/openfoam/create-project.png +0 -0
- {calkit_python-0.41.12 → calkit_python-0.41.14}/docs/tutorials/img/openfoam/datasets-page.png +0 -0
- {calkit_python-0.41.12 → calkit_python-0.41.14}/docs/tutorials/img/openfoam/figure-on-website-updated.png +0 -0
- {calkit_python-0.41.12 → calkit_python-0.41.14}/docs/tutorials/img/openfoam/figure-on-website.png +0 -0
- {calkit_python-0.41.12 → calkit_python-0.41.14}/docs/tutorials/img/openfoam/new-token.png +0 -0
- {calkit_python-0.41.12 → calkit_python-0.41.14}/docs/tutorials/img/openfoam/reclone.png +0 -0
- {calkit_python-0.41.12 → calkit_python-0.41.14}/docs/tutorials/img/openfoam/status-after-import-dataset.png +0 -0
- {calkit_python-0.41.12 → calkit_python-0.41.14}/docs/tutorials/img/quick-actions.png +0 -0
- {calkit_python-0.41.12 → calkit_python-0.41.14}/docs/tutorials/img/run-proc.png +0 -0
- {calkit_python-0.41.12 → calkit_python-0.41.14}/docs/tutorials/img/vscode-slurm-notebook/create-calkit-env.png +0 -0
- {calkit_python-0.41.12 → calkit_python-0.41.14}/docs/tutorials/img/vscode-slurm-notebook/create-inner-env.png +0 -0
- {calkit_python-0.41.12 → calkit_python-0.41.14}/docs/tutorials/img/vscode-slurm-notebook/create-new-calkit-env.png +0 -0
- {calkit_python-0.41.12 → calkit_python-0.41.14}/docs/tutorials/img/vscode-slurm-notebook/select-calkit-env.png +0 -0
- {calkit_python-0.41.12 → calkit_python-0.41.14}/docs/tutorials/img/vscode-slurm-notebook/slurm-job-running.png +0 -0
- {calkit_python-0.41.12 → calkit_python-0.41.14}/docs/tutorials/img/vscode-slurm-notebook/slurm-launch-options.png +0 -0
- {calkit_python-0.41.12 → calkit_python-0.41.14}/docs/tutorials/img/vscode-slurm-notebook/starting-slurm-job.png +0 -0
- {calkit_python-0.41.12 → calkit_python-0.41.14}/docs/tutorials/index.md +0 -0
- {calkit_python-0.41.12 → calkit_python-0.41.14}/docs/tutorials/jupyterlab.md +0 -0
- {calkit_python-0.41.12 → calkit_python-0.41.14}/docs/tutorials/latex-codespaces.md +0 -0
- {calkit_python-0.41.12 → calkit_python-0.41.14}/docs/tutorials/matlab.md +0 -0
- {calkit_python-0.41.12 → calkit_python-0.41.14}/docs/tutorials/notebook-pipeline.md +0 -0
- {calkit_python-0.41.12 → calkit_python-0.41.14}/docs/tutorials/office.md +0 -0
- {calkit_python-0.41.12 → calkit_python-0.41.14}/docs/tutorials/openfoam.md +0 -0
- {calkit_python-0.41.12 → calkit_python-0.41.14}/docs/tutorials/procedures.md +0 -0
- {calkit_python-0.41.12 → calkit_python-0.41.14}/docs/tutorials/vscode-slurm-notebook.md +0 -0
- {calkit_python-0.41.12 → calkit_python-0.41.14}/docs/version-control.md +0 -0
- {calkit_python-0.41.12 → calkit_python-0.41.14}/flake.lock +0 -0
- {calkit_python-0.41.12 → calkit_python-0.41.14}/flake.nix +0 -0
- {calkit_python-0.41.12 → calkit_python-0.41.14}/install.json +0 -0
- {calkit_python-0.41.12 → calkit_python-0.41.14}/jest.config.js +0 -0
- {calkit_python-0.41.12 → calkit_python-0.41.14}/jupyter-config/server-config/calkit.json +0 -0
- {calkit_python-0.41.12 → calkit_python-0.41.14}/mkdocs.yml +0 -0
- {calkit_python-0.41.12 → calkit_python-0.41.14}/package.json +0 -0
- {calkit_python-0.41.12 → calkit_python-0.41.14}/pyproject.toml +0 -0
- {calkit_python-0.41.12 → calkit_python-0.41.14}/schema/plugin.json +0 -0
- {calkit_python-0.41.12 → calkit_python-0.41.14}/scripts/generate-docs-references.py +0 -0
- {calkit_python-0.41.12 → calkit_python-0.41.14}/scripts/install.ps1 +0 -0
- {calkit_python-0.41.12 → calkit_python-0.41.14}/scripts/install.sh +0 -0
- {calkit_python-0.41.12 → calkit_python-0.41.14}/scripts/make-calk9.sh +0 -0
- {calkit_python-0.41.12 → calkit_python-0.41.14}/scripts/sync-docs.py +0 -0
- {calkit_python-0.41.12 → calkit_python-0.41.14}/src/__tests__/useQueries.spec.ts +0 -0
- {calkit_python-0.41.12 → calkit_python-0.41.14}/src/calkit-config.ts +0 -0
- {calkit_python-0.41.12 → calkit_python-0.41.14}/src/cell-output-marker.ts +0 -0
- {calkit_python-0.41.12 → calkit_python-0.41.14}/src/components/commit-dialog.tsx +0 -0
- {calkit_python-0.41.12 → calkit_python-0.41.14}/src/components/environment-editor.tsx +0 -0
- {calkit_python-0.41.12 → calkit_python-0.41.14}/src/components/notebook-registration.tsx +0 -0
- {calkit_python-0.41.12 → calkit_python-0.41.14}/src/components/notebook-toolbar.tsx +0 -0
- {calkit_python-0.41.12 → calkit_python-0.41.14}/src/components/pipeline-status-bar.tsx +0 -0
- {calkit_python-0.41.12 → calkit_python-0.41.14}/src/components/project-info-editor.tsx +0 -0
- {calkit_python-0.41.12 → calkit_python-0.41.14}/src/components/sidebar-settings.tsx +0 -0
- {calkit_python-0.41.12 → calkit_python-0.41.14}/src/components/sidebar.tsx +0 -0
- {calkit_python-0.41.12 → calkit_python-0.41.14}/src/components/stage-editor.tsx +0 -0
- {calkit_python-0.41.12 → calkit_python-0.41.14}/src/feature-flags.ts +0 -0
- {calkit_python-0.41.12 → calkit_python-0.41.14}/src/file-browser-menu.ts +0 -0
- {calkit_python-0.41.12 → calkit_python-0.41.14}/src/hooks/__tests__/useQueries.test.tsx +0 -0
- {calkit_python-0.41.12 → calkit_python-0.41.14}/src/hooks/useQueries.ts +0 -0
- {calkit_python-0.41.12 → calkit_python-0.41.14}/src/icons.ts +0 -0
- {calkit_python-0.41.12 → calkit_python-0.41.14}/src/index.ts +0 -0
- {calkit_python-0.41.12 → calkit_python-0.41.14}/src/io-tracker.ts +0 -0
- {calkit_python-0.41.12 → calkit_python-0.41.14}/src/pipeline-state.ts +0 -0
- {calkit_python-0.41.12 → calkit_python-0.41.14}/src/queryClient.ts +0 -0
- {calkit_python-0.41.12 → calkit_python-0.41.14}/src/request.ts +0 -0
- {calkit_python-0.41.12 → calkit_python-0.41.14}/src/shims-mainmenu.d.ts +0 -0
- {calkit_python-0.41.12 → calkit_python-0.41.14}/style/base.css +0 -0
- {calkit_python-0.41.12 → calkit_python-0.41.14}/style/cell-output-marker.css +0 -0
- {calkit_python-0.41.12 → calkit_python-0.41.14}/style/environment-editor.css +0 -0
- {calkit_python-0.41.12 → calkit_python-0.41.14}/style/environment-selector.css +0 -0
- {calkit_python-0.41.12 → calkit_python-0.41.14}/style/img/calkit-no-bg.png +0 -0
- {calkit_python-0.41.12 → calkit_python-0.41.14}/style/index.css +0 -0
- {calkit_python-0.41.12 → calkit_python-0.41.14}/style/index.js +0 -0
- {calkit_python-0.41.12 → calkit_python-0.41.14}/style/notebook-toolbar.css +0 -0
- {calkit_python-0.41.12 → calkit_python-0.41.14}/style/pipeline-status-bar.css +0 -0
- {calkit_python-0.41.12 → calkit_python-0.41.14}/style/sidebar.css +0 -0
- {calkit_python-0.41.12 → calkit_python-0.41.14}/test/dvc-md5-dir/osx-arm64.txt +0 -0
- {calkit_python-0.41.12 → calkit_python-0.41.14}/test/nb-julia.ipynb +0 -0
- {calkit_python-0.41.12 → calkit_python-0.41.14}/test/nb-params.ipynb +0 -0
- {calkit_python-0.41.12 → calkit_python-0.41.14}/test/nb-subdir.ipynb +0 -0
- {calkit_python-0.41.12 → calkit_python-0.41.14}/test/pipeline.ipynb +0 -0
- {calkit_python-0.41.12 → calkit_python-0.41.14}/test/script.py +0 -0
- {calkit_python-0.41.12 → calkit_python-0.41.14}/test/test-log.log +0 -0
- {calkit_python-0.41.12 → calkit_python-0.41.14}/tsconfig.json +0 -0
- {calkit_python-0.41.12 → calkit_python-0.41.14}/tsconfig.test.json +0 -0
- {calkit_python-0.41.12 → calkit_python-0.41.14}/ui-tests/.gitignore +0 -0
- {calkit_python-0.41.12 → calkit_python-0.41.14}/ui-tests/README.md +0 -0
- {calkit_python-0.41.12 → calkit_python-0.41.14}/ui-tests/jupyter_server_test_config.py +0 -0
- {calkit_python-0.41.12 → calkit_python-0.41.14}/ui-tests/package.json +0 -0
- {calkit_python-0.41.12 → calkit_python-0.41.14}/ui-tests/playwright.config.js +0 -0
- {calkit_python-0.41.12 → calkit_python-0.41.14}/ui-tests/tests/calkit.spec.ts +0 -0
- {calkit_python-0.41.12 → calkit_python-0.41.14}/ui-tests/yarn.lock +0 -0
- {calkit_python-0.41.12 → calkit_python-0.41.14}/uv.lock +0 -0
- {calkit_python-0.41.12 → calkit_python-0.41.14}/vscode-ext/.gitignore +0 -0
- {calkit_python-0.41.12 → calkit_python-0.41.14}/vscode-ext/.vscodeignore +0 -0
- {calkit_python-0.41.12 → calkit_python-0.41.14}/vscode-ext/CHANGELOG.md +0 -0
- {calkit_python-0.41.12 → calkit_python-0.41.14}/vscode-ext/LICENSE +0 -0
- {calkit_python-0.41.12 → calkit_python-0.41.14}/vscode-ext/README.md +0 -0
- {calkit_python-0.41.12 → calkit_python-0.41.14}/vscode-ext/images/calkit-icon.svg +0 -0
- {calkit_python-0.41.12 → calkit_python-0.41.14}/vscode-ext/images/calkit-no-bg.png +0 -0
- {calkit_python-0.41.12 → calkit_python-0.41.14}/vscode-ext/package-lock.json +0 -0
- {calkit_python-0.41.12 → calkit_python-0.41.14}/vscode-ext/scripts/set-proposed-api.js +0 -0
- {calkit_python-0.41.12 → calkit_python-0.41.14}/vscode-ext/src/environments.ts +0 -0
- {calkit_python-0.41.12 → calkit_python-0.41.14}/vscode-ext/src/notebooks.ts +0 -0
- {calkit_python-0.41.12 → calkit_python-0.41.14}/vscode-ext/src/test/environments.test.ts +0 -0
- {calkit_python-0.41.12 → calkit_python-0.41.14}/vscode-ext/src/test/kernel-selection.test.ts +0 -0
- {calkit_python-0.41.12 → calkit_python-0.41.14}/vscode-ext/src/test/notebooks.test.ts +0 -0
- {calkit_python-0.41.12 → calkit_python-0.41.14}/vscode-ext/tsconfig.json +0 -0
- {calkit_python-0.41.12 → calkit_python-0.41.14}/yarn.lock +0 -0
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
"""CLI for deleting objects."""
|
|
2
|
+
|
|
3
|
+
from __future__ import annotations
|
|
4
|
+
|
|
5
|
+
import typer
|
|
6
|
+
|
|
7
|
+
import calkit
|
|
8
|
+
from calkit.cli import AliasGroup, raise_error
|
|
9
|
+
from calkit.core import ryaml
|
|
10
|
+
|
|
11
|
+
delete_app = typer.Typer(cls=AliasGroup, no_args_is_help=True)
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
@delete_app.command(name="question")
|
|
15
|
+
def delete_question(
|
|
16
|
+
index: int = typer.Argument(
|
|
17
|
+
...,
|
|
18
|
+
help="1-based index of the question to remove (see `calkit list questions`).",
|
|
19
|
+
),
|
|
20
|
+
):
|
|
21
|
+
"""Remove a question by its 1-based index."""
|
|
22
|
+
ck_info = calkit.load_calkit_info()
|
|
23
|
+
questions = ck_info.get("questions", []) or []
|
|
24
|
+
if index < 1 or index > len(questions):
|
|
25
|
+
raise_error(
|
|
26
|
+
f"Invalid question index {index}; "
|
|
27
|
+
f"there are {len(questions)} question(s)."
|
|
28
|
+
)
|
|
29
|
+
removed = questions.pop(index - 1)
|
|
30
|
+
ck_info["questions"] = questions
|
|
31
|
+
with open("calkit.yaml", "w") as f:
|
|
32
|
+
ryaml.dump(ck_info, f)
|
|
33
|
+
typer.echo(f"Removed question: {removed}")
|
|
@@ -55,7 +55,7 @@ def _list_objects(
|
|
|
55
55
|
|
|
56
56
|
|
|
57
57
|
def _list_artifacts(
|
|
58
|
-
kind: Literal["figures", "datasets"],
|
|
58
|
+
kind: Literal["figures", "datasets", "results", "presentations"],
|
|
59
59
|
json_output: bool,
|
|
60
60
|
declared_only: bool,
|
|
61
61
|
):
|
|
@@ -134,6 +134,61 @@ def list_datasets(
|
|
|
134
134
|
_list_artifacts("datasets", json_output, declared_only)
|
|
135
135
|
|
|
136
136
|
|
|
137
|
+
@list_app.command(name="results")
|
|
138
|
+
def list_results(
|
|
139
|
+
json_output: Annotated[
|
|
140
|
+
bool, typer.Option("--json", help="Output result as JSON.")
|
|
141
|
+
] = False,
|
|
142
|
+
declared_only: Annotated[
|
|
143
|
+
bool,
|
|
144
|
+
typer.Option(
|
|
145
|
+
"--declared-only",
|
|
146
|
+
help=(
|
|
147
|
+
"Only list results declared in calkit.yaml; "
|
|
148
|
+
"skip auto-detection."
|
|
149
|
+
),
|
|
150
|
+
),
|
|
151
|
+
] = False,
|
|
152
|
+
):
|
|
153
|
+
"""List results in the project."""
|
|
154
|
+
_list_artifacts("results", json_output, declared_only)
|
|
155
|
+
|
|
156
|
+
|
|
157
|
+
@list_app.command(name="presentations|pres")
|
|
158
|
+
def list_presentations(
|
|
159
|
+
json_output: Annotated[
|
|
160
|
+
bool, typer.Option("--json", help="Output result as JSON.")
|
|
161
|
+
] = False,
|
|
162
|
+
declared_only: Annotated[
|
|
163
|
+
bool,
|
|
164
|
+
typer.Option(
|
|
165
|
+
"--declared-only",
|
|
166
|
+
help=(
|
|
167
|
+
"Only list presentations declared in calkit.yaml; "
|
|
168
|
+
"skip auto-detection."
|
|
169
|
+
),
|
|
170
|
+
),
|
|
171
|
+
] = False,
|
|
172
|
+
):
|
|
173
|
+
"""List presentations in the project."""
|
|
174
|
+
_list_artifacts("presentations", json_output, declared_only)
|
|
175
|
+
|
|
176
|
+
|
|
177
|
+
@list_app.command(name="questions")
|
|
178
|
+
def list_questions(
|
|
179
|
+
json_output: Annotated[
|
|
180
|
+
bool, typer.Option("--json", help="Output result as JSON.")
|
|
181
|
+
] = False,
|
|
182
|
+
):
|
|
183
|
+
"""List the project's questions (1-indexed)."""
|
|
184
|
+
questions = calkit.load_calkit_info().get("questions", []) or []
|
|
185
|
+
if json_output:
|
|
186
|
+
typer.echo(json.dumps(questions))
|
|
187
|
+
return
|
|
188
|
+
for n, question in enumerate(questions, start=1):
|
|
189
|
+
typer.echo(f"{n}. {question}")
|
|
190
|
+
|
|
191
|
+
|
|
137
192
|
@list_app.command(name="publications|pubs")
|
|
138
193
|
def list_publications():
|
|
139
194
|
"""List publications in the project."""
|
|
@@ -48,6 +48,7 @@ from calkit.cli.check import (
|
|
|
48
48
|
)
|
|
49
49
|
from calkit.cli.cloud import cloud_app
|
|
50
50
|
from calkit.cli.config import config_app
|
|
51
|
+
from calkit.cli.delete import delete_app
|
|
51
52
|
from calkit.cli.describe import describe_app
|
|
52
53
|
from calkit.cli.dev import dev_app
|
|
53
54
|
from calkit.cli.import_ import import_app
|
|
@@ -69,6 +70,7 @@ app = typer.Typer(
|
|
|
69
70
|
)
|
|
70
71
|
app.add_typer(config_app, name="config", help="Configure Calkit.")
|
|
71
72
|
app.add_typer(new_app, name="new|create", help="Create a new Calkit object.")
|
|
73
|
+
app.add_typer(delete_app, name="delete|rm", help="Delete a Calkit object.")
|
|
72
74
|
app.add_typer(
|
|
73
75
|
notebooks_app, name="notebooks|nb", help="Work with Jupyter notebooks."
|
|
74
76
|
)
|
|
@@ -1172,7 +1174,10 @@ def pull(
|
|
|
1172
1174
|
and "-R" not in dvc_args
|
|
1173
1175
|
):
|
|
1174
1176
|
dvc_args.append("--recursive")
|
|
1175
|
-
result = calkit.dvc.run_dvc_command(
|
|
1177
|
+
result = calkit.dvc.run_dvc_command(
|
|
1178
|
+
["pull"] + dvc_args,
|
|
1179
|
+
lock_timeout=calkit.dvc.DEFAULT_RUN_LOCK_TIMEOUT,
|
|
1180
|
+
)
|
|
1176
1181
|
if result != 0:
|
|
1177
1182
|
raise_error("DVC pull failed")
|
|
1178
1183
|
calkit.dvc.zip.sync_all(direction="to-workspace")
|
|
@@ -1187,7 +1192,9 @@ def pull(
|
|
|
1187
1192
|
continue
|
|
1188
1193
|
typer.echo(f"DVC pulling subproject: {sp_path}")
|
|
1189
1194
|
sp_result = calkit.dvc.run_dvc_command(
|
|
1190
|
-
["pull"] + dvc_args,
|
|
1195
|
+
["pull"] + dvc_args,
|
|
1196
|
+
cwd=sp_path,
|
|
1197
|
+
lock_timeout=calkit.dvc.DEFAULT_RUN_LOCK_TIMEOUT,
|
|
1191
1198
|
)
|
|
1192
1199
|
if sp_result != 0:
|
|
1193
1200
|
raise_error(f"DVC pull failed for subproject: {sp_path}")
|
|
@@ -1224,7 +1231,10 @@ def push(
|
|
|
1224
1231
|
calkit.dvc.set_remote_auth(remote_name=name)
|
|
1225
1232
|
if remotes:
|
|
1226
1233
|
typer.echo("Pushing to DVC remote")
|
|
1227
|
-
result = calkit.dvc.run_dvc_command(
|
|
1234
|
+
result = calkit.dvc.run_dvc_command(
|
|
1235
|
+
["push"] + dvc_args,
|
|
1236
|
+
lock_timeout=calkit.dvc.DEFAULT_RUN_LOCK_TIMEOUT,
|
|
1237
|
+
)
|
|
1228
1238
|
if result != 0:
|
|
1229
1239
|
raise_error("DVC push failed")
|
|
1230
1240
|
else:
|
|
@@ -2033,7 +2043,10 @@ def run(
|
|
|
2033
2043
|
original_dir = os.getcwd()
|
|
2034
2044
|
try:
|
|
2035
2045
|
os.chdir(sp_path)
|
|
2036
|
-
|
|
2046
|
+
with calkit.dvc.dvc_lock_timeout(
|
|
2047
|
+
calkit.dvc.DEFAULT_RUN_LOCK_TIMEOUT
|
|
2048
|
+
):
|
|
2049
|
+
sp_res = dvc_cli_main(["repro"] + sp_args)
|
|
2037
2050
|
finally:
|
|
2038
2051
|
os.chdir(original_dir)
|
|
2039
2052
|
if sp_res != 0:
|
|
@@ -2102,7 +2115,15 @@ def run(
|
|
|
2102
2115
|
if force:
|
|
2103
2116
|
os.environ["CALKIT_FORCE"] = "1"
|
|
2104
2117
|
try:
|
|
2105
|
-
|
|
2118
|
+
# Wait generously for the repo lock instead of failing after DVC's 3s
|
|
2119
|
+
# default. Brief contention is common and benign: a background
|
|
2120
|
+
# `calkit status` poller (e.g. the VS Code extension), a stage whose
|
|
2121
|
+
# command is itself `calkit run`, or DVC's own per-stage re-lock (DVC
|
|
2122
|
+
# releases the repo lock while a stage command runs and re-acquires it
|
|
2123
|
+
# the instant it finishes) can all hold it momentarily. Without this,
|
|
2124
|
+
# such a collision aborts the whole run with "Unable to acquire lock".
|
|
2125
|
+
with calkit.dvc.dvc_lock_timeout(calkit.dvc.DEFAULT_RUN_LOCK_TIMEOUT):
|
|
2126
|
+
res = dvc_cli_main(["repro"] + args)
|
|
2106
2127
|
finally:
|
|
2107
2128
|
os.environ.pop("CALKIT_FORCE", None)
|
|
2108
2129
|
failed = failed or res != 0
|
|
@@ -9,6 +9,7 @@ import shutil
|
|
|
9
9
|
import subprocess
|
|
10
10
|
import time
|
|
11
11
|
from enum import Enum
|
|
12
|
+
from typing import Literal
|
|
12
13
|
|
|
13
14
|
import typer
|
|
14
15
|
from typing_extensions import Annotated
|
|
@@ -591,6 +592,102 @@ def new_figure(
|
|
|
591
592
|
repo.git.commit(["-m", f"Add figure {path}"])
|
|
592
593
|
|
|
593
594
|
|
|
595
|
+
def _new_simple_artifact(
|
|
596
|
+
kind: Literal["results", "presentations"],
|
|
597
|
+
path: str,
|
|
598
|
+
title: str,
|
|
599
|
+
description: str | None,
|
|
600
|
+
stage_name: str | None,
|
|
601
|
+
no_commit: bool,
|
|
602
|
+
overwrite: bool,
|
|
603
|
+
) -> None:
|
|
604
|
+
"""Declare a simple artifact (path/title/description/stage) in calkit.yaml."""
|
|
605
|
+
singular = kind.rstrip("s")
|
|
606
|
+
ck_info = calkit.load_calkit_info()
|
|
607
|
+
objects = ck_info.get(kind, [])
|
|
608
|
+
paths = [o.get("path") for o in objects]
|
|
609
|
+
if not overwrite and path in paths:
|
|
610
|
+
raise_error(f"{singular.capitalize()} at path {path} already exists")
|
|
611
|
+
if overwrite and path in paths:
|
|
612
|
+
objects = [o for o in objects if o.get("path") != path]
|
|
613
|
+
obj = dict(path=path, title=title)
|
|
614
|
+
if description is not None:
|
|
615
|
+
obj["description"] = description
|
|
616
|
+
if stage_name is not None:
|
|
617
|
+
obj["stage"] = stage_name
|
|
618
|
+
objects.append(obj)
|
|
619
|
+
ck_info[kind] = objects
|
|
620
|
+
with open("calkit.yaml", "w") as f:
|
|
621
|
+
ryaml.dump(ck_info, f)
|
|
622
|
+
if not no_commit:
|
|
623
|
+
repo = calkit.git.get_repo()
|
|
624
|
+
repo.git.add("calkit.yaml")
|
|
625
|
+
if repo.git.diff("--staged"):
|
|
626
|
+
repo.git.commit(["-m", f"Add {singular} {path}"])
|
|
627
|
+
|
|
628
|
+
|
|
629
|
+
@new_app.command(name="result")
|
|
630
|
+
def new_result(
|
|
631
|
+
path: str,
|
|
632
|
+
title: Annotated[str, typer.Option("--title")],
|
|
633
|
+
description: Annotated[str | None, typer.Option("--description")] = None,
|
|
634
|
+
stage_name: Annotated[
|
|
635
|
+
str | None,
|
|
636
|
+
typer.Option(
|
|
637
|
+
"--stage",
|
|
638
|
+
help="Name of the pipeline stage that generates this result.",
|
|
639
|
+
),
|
|
640
|
+
] = None,
|
|
641
|
+
no_commit: Annotated[bool, typer.Option("--no-commit")] = False,
|
|
642
|
+
overwrite: Annotated[
|
|
643
|
+
bool,
|
|
644
|
+
typer.Option(
|
|
645
|
+
"--overwrite",
|
|
646
|
+
"-f",
|
|
647
|
+
help="Overwrite existing result if one exists.",
|
|
648
|
+
),
|
|
649
|
+
] = False,
|
|
650
|
+
):
|
|
651
|
+
"""Declare a new result."""
|
|
652
|
+
_new_simple_artifact(
|
|
653
|
+
"results", path, title, description, stage_name, no_commit, overwrite
|
|
654
|
+
)
|
|
655
|
+
|
|
656
|
+
|
|
657
|
+
@new_app.command(name="presentation|pres")
|
|
658
|
+
def new_presentation(
|
|
659
|
+
path: str,
|
|
660
|
+
title: Annotated[str, typer.Option("--title")],
|
|
661
|
+
description: Annotated[str | None, typer.Option("--description")] = None,
|
|
662
|
+
stage_name: Annotated[
|
|
663
|
+
str | None,
|
|
664
|
+
typer.Option(
|
|
665
|
+
"--stage",
|
|
666
|
+
help="Name of the pipeline stage that generates this presentation.",
|
|
667
|
+
),
|
|
668
|
+
] = None,
|
|
669
|
+
no_commit: Annotated[bool, typer.Option("--no-commit")] = False,
|
|
670
|
+
overwrite: Annotated[
|
|
671
|
+
bool,
|
|
672
|
+
typer.Option(
|
|
673
|
+
"--overwrite",
|
|
674
|
+
"-f",
|
|
675
|
+
help="Overwrite existing presentation if one exists.",
|
|
676
|
+
),
|
|
677
|
+
] = False,
|
|
678
|
+
):
|
|
679
|
+
"""Declare a new presentation."""
|
|
680
|
+
_new_simple_artifact(
|
|
681
|
+
"presentations",
|
|
682
|
+
path,
|
|
683
|
+
title,
|
|
684
|
+
description,
|
|
685
|
+
stage_name,
|
|
686
|
+
no_commit,
|
|
687
|
+
overwrite,
|
|
688
|
+
)
|
|
689
|
+
|
|
690
|
+
|
|
594
691
|
@new_app.command("question")
|
|
595
692
|
def new_question(
|
|
596
693
|
question: str,
|