calkit-python 0.34.6__tar.gz → 0.35.0__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.34.6 → calkit_python-0.35.0}/PKG-INFO +6 -3
- {calkit_python-0.34.6 → calkit_python-0.35.0}/calkit/__init__.py +2 -0
- {calkit_python-0.34.6 → calkit_python-0.35.0}/calkit/cli/check.py +29 -7
- {calkit_python-0.34.6 → calkit_python-0.35.0}/calkit/cli/config.py +2 -1
- {calkit_python-0.34.6 → calkit_python-0.35.0}/calkit/cli/import_.py +8 -11
- {calkit_python-0.34.6 → calkit_python-0.35.0}/calkit/cli/main.py +73 -33
- {calkit_python-0.34.6 → calkit_python-0.35.0}/calkit/cli/new.py +33 -164
- {calkit_python-0.34.6 → calkit_python-0.35.0}/calkit/cli/notebooks.py +9 -2
- {calkit_python-0.34.6 → calkit_python-0.35.0}/calkit/cli/slurm.py +56 -25
- {calkit_python-0.34.6 → calkit_python-0.35.0}/calkit/cloud.py +29 -15
- calkit_python-0.35.0/calkit/dvc.py +497 -0
- {calkit_python-0.34.6 → calkit_python-0.35.0}/calkit/environments.py +52 -1
- calkit_python-0.35.0/calkit/fs.py +1008 -0
- {calkit_python-0.34.6 → calkit_python-0.35.0}/calkit/git.py +53 -12
- calkit_python-0.35.0/calkit/julia.py +65 -0
- {calkit_python-0.34.6 → calkit_python-0.35.0}/calkit/jupyterlab/routes.py +7 -11
- {calkit_python-0.34.6 → calkit_python-0.35.0}/calkit/labextension/package.json +1 -1
- calkit_python-0.35.0/calkit/labextension/static/909.651be47ca47390b78a92.js +1 -0
- calkit_python-0.34.6/calkit/labextension/static/remoteEntry.63846b8de2465d49bd89.js → calkit_python-0.35.0/calkit/labextension/static/remoteEntry.c091821b3d7f2d287a67.js +1 -1
- {calkit_python-0.34.6 → calkit_python-0.35.0}/calkit/magics.py +7 -20
- {calkit_python-0.34.6 → calkit_python-0.35.0}/calkit/models/pipeline.py +199 -30
- {calkit_python-0.34.6 → calkit_python-0.35.0}/calkit/pipeline.py +9 -9
- {calkit_python-0.34.6 → calkit_python-0.35.0}/calkit/server.py +20 -12
- {calkit_python-0.34.6 → calkit_python-0.35.0}/calkit/tests/cli/test_new.py +0 -175
- {calkit_python-0.34.6 → calkit_python-0.35.0}/calkit/tests/test_check.py +2 -2
- calkit_python-0.35.0/calkit/tests/test_dvc.py +91 -0
- {calkit_python-0.34.6 → calkit_python-0.35.0}/calkit/tests/test_environments.py +55 -0
- calkit_python-0.35.0/calkit/tests/test_fs.py +158 -0
- calkit_python-0.35.0/calkit/tests/test_git.py +99 -0
- calkit_python-0.35.0/calkit/tests/test_julia.py +31 -0
- {calkit_python-0.34.6 → calkit_python-0.35.0}/calkit/tests/test_pipeline.py +191 -15
- calkit_python-0.35.0/docs/pipeline/slurm.md +114 -0
- {calkit_python-0.34.6 → calkit_python-0.35.0}/pyproject.toml +8 -3
- calkit_python-0.35.0/uv.lock +7189 -0
- calkit_python-0.34.6/calkit/dvc.py +0 -299
- calkit_python-0.34.6/calkit/labextension/static/909.99b13e1e3c2a6e1ceb30.js +0 -1
- calkit_python-0.34.6/calkit/tests/test_dvc.py +0 -48
- calkit_python-0.34.6/calkit/tests/test_git.py +0 -34
- calkit_python-0.34.6/docs/pipeline/slurm.md +0 -63
- calkit_python-0.34.6/uv.lock +0 -5538
- {calkit_python-0.34.6 → calkit_python-0.35.0}/.gitignore +0 -0
- {calkit_python-0.34.6 → calkit_python-0.35.0}/.pre-commit-config.yaml +0 -0
- {calkit_python-0.34.6 → calkit_python-0.35.0}/.prettierignore +0 -0
- {calkit_python-0.34.6 → calkit_python-0.35.0}/.python-version +0 -0
- {calkit_python-0.34.6 → calkit_python-0.35.0}/.yarnrc.yml +0 -0
- {calkit_python-0.34.6 → calkit_python-0.35.0}/CITATION.cff +0 -0
- {calkit_python-0.34.6 → calkit_python-0.35.0}/CODE_OF_CONDUCT.md +0 -0
- {calkit_python-0.34.6 → calkit_python-0.35.0}/CONTRIBUTING.md +0 -0
- {calkit_python-0.34.6 → calkit_python-0.35.0}/LICENSE +0 -0
- {calkit_python-0.34.6 → calkit_python-0.35.0}/Makefile +0 -0
- {calkit_python-0.34.6 → calkit_python-0.35.0}/README.md +0 -0
- {calkit_python-0.34.6 → calkit_python-0.35.0}/babel.config.js +0 -0
- {calkit_python-0.34.6 → calkit_python-0.35.0}/calkit/__main__.py +0 -0
- {calkit_python-0.34.6 → calkit_python-0.35.0}/calkit/calc.py +0 -0
- {calkit_python-0.34.6 → calkit_python-0.35.0}/calkit/check.py +0 -0
- {calkit_python-0.34.6 → calkit_python-0.35.0}/calkit/cli/__init__.py +0 -0
- {calkit_python-0.34.6 → calkit_python-0.35.0}/calkit/cli/cloud.py +0 -0
- {calkit_python-0.34.6 → calkit_python-0.35.0}/calkit/cli/core.py +0 -0
- {calkit_python-0.34.6 → calkit_python-0.35.0}/calkit/cli/describe.py +0 -0
- {calkit_python-0.34.6 → calkit_python-0.35.0}/calkit/cli/latex.py +0 -0
- {calkit_python-0.34.6 → calkit_python-0.35.0}/calkit/cli/list.py +0 -0
- {calkit_python-0.34.6 → calkit_python-0.35.0}/calkit/cli/office.py +0 -0
- {calkit_python-0.34.6 → calkit_python-0.35.0}/calkit/cli/overleaf.py +0 -0
- {calkit_python-0.34.6 → calkit_python-0.35.0}/calkit/cli/update.py +0 -0
- {calkit_python-0.34.6 → calkit_python-0.35.0}/calkit/conda.py +0 -0
- {calkit_python-0.34.6 → calkit_python-0.35.0}/calkit/config.py +0 -0
- {calkit_python-0.34.6 → calkit_python-0.35.0}/calkit/core.py +0 -0
- {calkit_python-0.34.6 → calkit_python-0.35.0}/calkit/datasets.py +0 -0
- {calkit_python-0.34.6 → calkit_python-0.35.0}/calkit/detect.py +0 -0
- {calkit_python-0.34.6 → calkit_python-0.35.0}/calkit/docker.py +0 -0
- {calkit_python-0.34.6 → calkit_python-0.35.0}/calkit/github.py +0 -0
- {calkit_python-0.34.6 → calkit_python-0.35.0}/calkit/gui.py +0 -0
- {calkit_python-0.34.6 → calkit_python-0.35.0}/calkit/invenio.py +0 -0
- {calkit_python-0.34.6 → calkit_python-0.35.0}/calkit/jupyter.py +0 -0
- {calkit_python-0.34.6 → calkit_python-0.35.0}/calkit/jupyterlab/__init__.py +0 -0
- {calkit_python-0.34.6 → calkit_python-0.35.0}/calkit/labextension/schemas/calkit/package.json.orig +0 -0
- {calkit_python-0.34.6 → calkit_python-0.35.0}/calkit/labextension/schemas/calkit/plugin.json +0 -0
- {calkit_python-0.34.6 → calkit_python-0.35.0}/calkit/labextension/static/502.9a2c5772a15466e923ef.js +0 -0
- {calkit_python-0.34.6 → calkit_python-0.35.0}/calkit/labextension/static/695.2c41003a452d43d2b358.js +0 -0
- {calkit_python-0.34.6 → calkit_python-0.35.0}/calkit/labextension/static/867.a42a046aa5108f54f8fb.js +0 -0
- {calkit_python-0.34.6 → calkit_python-0.35.0}/calkit/labextension/static/946.050af2abf7845cfbdbd2.js +0 -0
- {calkit_python-0.34.6 → calkit_python-0.35.0}/calkit/labextension/static/946.050af2abf7845cfbdbd2.js.LICENSE.txt +0 -0
- {calkit_python-0.34.6 → calkit_python-0.35.0}/calkit/labextension/static/b2f1c3efe70cb539d121.png +0 -0
- {calkit_python-0.34.6 → calkit_python-0.35.0}/calkit/labextension/static/style.js +0 -0
- {calkit_python-0.34.6 → calkit_python-0.35.0}/calkit/labextension/static/third-party-licenses.json +0 -0
- {calkit_python-0.34.6 → calkit_python-0.35.0}/calkit/licenses.py +0 -0
- {calkit_python-0.34.6 → calkit_python-0.35.0}/calkit/matlab.py +0 -0
- {calkit_python-0.34.6 → calkit_python-0.35.0}/calkit/models/__init__.py +0 -0
- {calkit_python-0.34.6 → calkit_python-0.35.0}/calkit/models/core.py +0 -0
- {calkit_python-0.34.6 → calkit_python-0.35.0}/calkit/models/io.py +0 -0
- {calkit_python-0.34.6 → calkit_python-0.35.0}/calkit/models/iteration.py +0 -0
- {calkit_python-0.34.6 → calkit_python-0.35.0}/calkit/notebooks.py +0 -0
- {calkit_python-0.34.6 → calkit_python-0.35.0}/calkit/office.py +0 -0
- {calkit_python-0.34.6 → calkit_python-0.35.0}/calkit/ops.py +0 -0
- {calkit_python-0.34.6 → calkit_python-0.35.0}/calkit/overleaf.py +0 -0
- {calkit_python-0.34.6 → calkit_python-0.35.0}/calkit/releases.py +0 -0
- {calkit_python-0.34.6 → calkit_python-0.35.0}/calkit/templates/__init__.py +0 -0
- {calkit_python-0.34.6 → calkit_python-0.35.0}/calkit/templates/core.py +0 -0
- {calkit_python-0.34.6 → calkit_python-0.35.0}/calkit/templates/latex/__init__.py +0 -0
- {calkit_python-0.34.6 → calkit_python-0.35.0}/calkit/templates/latex/article/paper.tex +0 -0
- {calkit_python-0.34.6 → calkit_python-0.35.0}/calkit/templates/latex/core.py +0 -0
- {calkit_python-0.34.6 → calkit_python-0.35.0}/calkit/templates/latex/jfm/jfm.bst +0 -0
- {calkit_python-0.34.6 → calkit_python-0.35.0}/calkit/templates/latex/jfm/jfm.cls +0 -0
- {calkit_python-0.34.6 → calkit_python-0.35.0}/calkit/templates/latex/jfm/lineno-FLM.sty +0 -0
- {calkit_python-0.34.6 → calkit_python-0.35.0}/calkit/templates/latex/jfm/paper.tex +0 -0
- {calkit_python-0.34.6 → calkit_python-0.35.0}/calkit/templates/latex/jfm/upmath.sty +0 -0
- {calkit_python-0.34.6 → calkit_python-0.35.0}/calkit/tests/__init__.py +0 -0
- {calkit_python-0.34.6 → calkit_python-0.35.0}/calkit/tests/cli/__init__.py +0 -0
- {calkit_python-0.34.6 → calkit_python-0.35.0}/calkit/tests/cli/test_check.py +0 -0
- {calkit_python-0.34.6 → calkit_python-0.35.0}/calkit/tests/cli/test_config.py +0 -0
- {calkit_python-0.34.6 → calkit_python-0.35.0}/calkit/tests/cli/test_import.py +0 -0
- {calkit_python-0.34.6 → calkit_python-0.35.0}/calkit/tests/cli/test_latex.py +0 -0
- {calkit_python-0.34.6 → calkit_python-0.35.0}/calkit/tests/cli/test_list.py +0 -0
- {calkit_python-0.34.6 → calkit_python-0.35.0}/calkit/tests/cli/test_main.py +0 -0
- {calkit_python-0.34.6 → calkit_python-0.35.0}/calkit/tests/cli/test_notebooks.py +0 -0
- {calkit_python-0.34.6 → calkit_python-0.35.0}/calkit/tests/cli/test_overleaf.py +0 -0
- {calkit_python-0.34.6 → calkit_python-0.35.0}/calkit/tests/jupyterlab/__init__.py +0 -0
- {calkit_python-0.34.6 → calkit_python-0.35.0}/calkit/tests/jupyterlab/test_routes.py +0 -0
- {calkit_python-0.34.6 → calkit_python-0.35.0}/calkit/tests/models/__init__.py +0 -0
- {calkit_python-0.34.6 → calkit_python-0.35.0}/calkit/tests/models/test_iteration.py +0 -0
- {calkit_python-0.34.6 → calkit_python-0.35.0}/calkit/tests/models/test_pipeline.py +0 -0
- {calkit_python-0.34.6 → calkit_python-0.35.0}/calkit/tests/test_calc.py +0 -0
- {calkit_python-0.34.6 → calkit_python-0.35.0}/calkit/tests/test_conda.py +0 -0
- {calkit_python-0.34.6 → calkit_python-0.35.0}/calkit/tests/test_core.py +0 -0
- {calkit_python-0.34.6 → calkit_python-0.35.0}/calkit/tests/test_detect.py +0 -0
- {calkit_python-0.34.6 → calkit_python-0.35.0}/calkit/tests/test_invenio.py +0 -0
- {calkit_python-0.34.6 → calkit_python-0.35.0}/calkit/tests/test_jupyter.py +0 -0
- {calkit_python-0.34.6 → calkit_python-0.35.0}/calkit/tests/test_magics.py +0 -0
- {calkit_python-0.34.6 → calkit_python-0.35.0}/calkit/tests/test_matlab.py +0 -0
- {calkit_python-0.34.6 → calkit_python-0.35.0}/calkit/tests/test_notebooks.py +0 -0
- {calkit_python-0.34.6 → calkit_python-0.35.0}/calkit/tests/test_templates.py +0 -0
- {calkit_python-0.34.6 → calkit_python-0.35.0}/conftest.py +0 -0
- {calkit_python-0.34.6 → calkit_python-0.35.0}/docs/CNAME +0 -0
- {calkit_python-0.34.6 → calkit_python-0.35.0}/docs/apps.md +0 -0
- {calkit_python-0.34.6 → calkit_python-0.35.0}/docs/calculations.md +0 -0
- {calkit_python-0.34.6 → calkit_python-0.35.0}/docs/calkit-yaml.md +0 -0
- {calkit_python-0.34.6 → calkit_python-0.35.0}/docs/cli-reference.md +0 -0
- {calkit_python-0.34.6 → calkit_python-0.35.0}/docs/cloud-integration.md +0 -0
- {calkit_python-0.34.6 → calkit_python-0.35.0}/docs/datasets.md +0 -0
- {calkit_python-0.34.6 → calkit_python-0.35.0}/docs/dependencies.md +0 -0
- {calkit_python-0.34.6 → calkit_python-0.35.0}/docs/environments.md +0 -0
- {calkit_python-0.34.6 → calkit_python-0.35.0}/docs/examples.md +0 -0
- {calkit_python-0.34.6 → calkit_python-0.35.0}/docs/governance.md +0 -0
- {calkit_python-0.34.6 → calkit_python-0.35.0}/docs/help.md +0 -0
- {calkit_python-0.34.6 → calkit_python-0.35.0}/docs/img/c-to-the-k-white.svg +0 -0
- {calkit_python-0.34.6 → calkit_python-0.35.0}/docs/img/calkit-fragmentation-compendium.png +0 -0
- {calkit_python-0.34.6 → calkit_python-0.35.0}/docs/img/calkit-no-bg.png +0 -0
- {calkit_python-0.34.6 → calkit_python-0.35.0}/docs/img/connect-zenodo.png +0 -0
- {calkit_python-0.34.6 → calkit_python-0.35.0}/docs/img/jupyterlab/all-green.png +0 -0
- {calkit_python-0.34.6 → calkit_python-0.35.0}/docs/img/jupyterlab/collect-data-stale.png +0 -0
- {calkit_python-0.34.6 → calkit_python-0.35.0}/docs/img/jupyterlab/new-env.png +0 -0
- {calkit_python-0.34.6 → calkit_python-0.35.0}/docs/img/jupyterlab/new-notebook.png +0 -0
- {calkit_python-0.34.6 → calkit_python-0.35.0}/docs/img/jupyterlab/pipeline-badge.png +0 -0
- {calkit_python-0.34.6 → calkit_python-0.35.0}/docs/img/jupyterlab-params.png +0 -0
- {calkit_python-0.34.6 → calkit_python-0.35.0}/docs/img/plos-osi-code-2024-03.png +0 -0
- {calkit_python-0.34.6 → calkit_python-0.35.0}/docs/img/vscode-nb-params.png +0 -0
- {calkit_python-0.34.6 → calkit_python-0.35.0}/docs/index.md +0 -0
- {calkit_python-0.34.6 → calkit_python-0.35.0}/docs/installation.md +0 -0
- {calkit_python-0.34.6 → calkit_python-0.35.0}/docs/jupyterlab.md +0 -0
- {calkit_python-0.34.6 → calkit_python-0.35.0}/docs/local-server.md +0 -0
- {calkit_python-0.34.6 → calkit_python-0.35.0}/docs/notebooks.md +0 -0
- {calkit_python-0.34.6 → calkit_python-0.35.0}/docs/overleaf.md +0 -0
- {calkit_python-0.34.6 → calkit_python-0.35.0}/docs/pipeline/index.md +0 -0
- {calkit_python-0.34.6 → calkit_python-0.35.0}/docs/pipeline/manual-steps.md +0 -0
- {calkit_python-0.34.6 → calkit_python-0.35.0}/docs/pipeline/running-and-logging.md +0 -0
- {calkit_python-0.34.6 → calkit_python-0.35.0}/docs/quickstart.md +0 -0
- {calkit_python-0.34.6 → calkit_python-0.35.0}/docs/references.md +0 -0
- {calkit_python-0.34.6 → calkit_python-0.35.0}/docs/releases.md +0 -0
- {calkit_python-0.34.6 → calkit_python-0.35.0}/docs/reproducibility.md +0 -0
- {calkit_python-0.34.6 → calkit_python-0.35.0}/docs/tutorials/adding-latex-pub-docker.md +0 -0
- {calkit_python-0.34.6 → calkit_python-0.35.0}/docs/tutorials/conda-envs.md +0 -0
- {calkit_python-0.34.6 → calkit_python-0.35.0}/docs/tutorials/existing-project.md +0 -0
- {calkit_python-0.34.6 → calkit_python-0.35.0}/docs/tutorials/first-project.md +0 -0
- {calkit_python-0.34.6 → calkit_python-0.35.0}/docs/tutorials/github-actions.md +0 -0
- {calkit_python-0.34.6 → calkit_python-0.35.0}/docs/tutorials/img/actions-repo-secrets.png +0 -0
- {calkit_python-0.34.6 → calkit_python-0.35.0}/docs/tutorials/img/latex-codespaces/building-codespace.png +0 -0
- {calkit_python-0.34.6 → calkit_python-0.35.0}/docs/tutorials/img/latex-codespaces/codespaces-secrets-2.png +0 -0
- {calkit_python-0.34.6 → calkit_python-0.35.0}/docs/tutorials/img/latex-codespaces/editor-split.png +0 -0
- {calkit_python-0.34.6 → calkit_python-0.35.0}/docs/tutorials/img/latex-codespaces/go-to-linked-code.png +0 -0
- {calkit_python-0.34.6 → calkit_python-0.35.0}/docs/tutorials/img/latex-codespaces/issue-from-selection.png +0 -0
- {calkit_python-0.34.6 → calkit_python-0.35.0}/docs/tutorials/img/latex-codespaces/new-project.png +0 -0
- {calkit_python-0.34.6 → calkit_python-0.35.0}/docs/tutorials/img/latex-codespaces/new-pub-2.png +0 -0
- {calkit_python-0.34.6 → calkit_python-0.35.0}/docs/tutorials/img/latex-codespaces/new-token.png +0 -0
- {calkit_python-0.34.6 → calkit_python-0.35.0}/docs/tutorials/img/latex-codespaces/paper.tex.png +0 -0
- {calkit_python-0.34.6 → calkit_python-0.35.0}/docs/tutorials/img/latex-codespaces/project-home-3.png +0 -0
- {calkit_python-0.34.6 → calkit_python-0.35.0}/docs/tutorials/img/latex-codespaces/push.png +0 -0
- {calkit_python-0.34.6 → calkit_python-0.35.0}/docs/tutorials/img/latex-codespaces/stage.png +0 -0
- {calkit_python-0.34.6 → calkit_python-0.35.0}/docs/tutorials/img/office/anakin-excel.jpg +0 -0
- {calkit_python-0.34.6 → calkit_python-0.35.0}/docs/tutorials/img/office/chart-more-rows.png +0 -0
- {calkit_python-0.34.6 → calkit_python-0.35.0}/docs/tutorials/img/office/create-project.png +0 -0
- {calkit_python-0.34.6 → calkit_python-0.35.0}/docs/tutorials/img/office/elsevier-research-data-guidelines.png +0 -0
- {calkit_python-0.34.6 → calkit_python-0.35.0}/docs/tutorials/img/office/excel-chart.png +0 -0
- {calkit_python-0.34.6 → calkit_python-0.35.0}/docs/tutorials/img/office/excel-data.png +0 -0
- {calkit_python-0.34.6 → calkit_python-0.35.0}/docs/tutorials/img/office/insert-link-to-file.png +0 -0
- {calkit_python-0.34.6 → calkit_python-0.35.0}/docs/tutorials/img/office/needs-clone.png +0 -0
- {calkit_python-0.34.6 → calkit_python-0.35.0}/docs/tutorials/img/office/new-stage.png +0 -0
- {calkit_python-0.34.6 → calkit_python-0.35.0}/docs/tutorials/img/office/phd-comics-version-control.webp +0 -0
- {calkit_python-0.34.6 → calkit_python-0.35.0}/docs/tutorials/img/office/pipeline-out-of-date.png +0 -0
- {calkit_python-0.34.6 → calkit_python-0.35.0}/docs/tutorials/img/office/status-more-rows.png +0 -0
- {calkit_python-0.34.6 → calkit_python-0.35.0}/docs/tutorials/img/office/uncommitted-changes.png +0 -0
- {calkit_python-0.34.6 → calkit_python-0.35.0}/docs/tutorials/img/office/untracked-data.png +0 -0
- {calkit_python-0.34.6 → calkit_python-0.35.0}/docs/tutorials/img/office/updated-publication.png +0 -0
- {calkit_python-0.34.6 → calkit_python-0.35.0}/docs/tutorials/img/office/word-to-pdf-stage-2.png +0 -0
- {calkit_python-0.34.6 → calkit_python-0.35.0}/docs/tutorials/img/office/workflow-page.png +0 -0
- {calkit_python-0.34.6 → calkit_python-0.35.0}/docs/tutorials/img/openfoam/clone.png +0 -0
- {calkit_python-0.34.6 → calkit_python-0.35.0}/docs/tutorials/img/openfoam/create-project.png +0 -0
- {calkit_python-0.34.6 → calkit_python-0.35.0}/docs/tutorials/img/openfoam/datasets-page.png +0 -0
- {calkit_python-0.34.6 → calkit_python-0.35.0}/docs/tutorials/img/openfoam/figure-on-website-updated.png +0 -0
- {calkit_python-0.34.6 → calkit_python-0.35.0}/docs/tutorials/img/openfoam/figure-on-website.png +0 -0
- {calkit_python-0.34.6 → calkit_python-0.35.0}/docs/tutorials/img/openfoam/new-token.png +0 -0
- {calkit_python-0.34.6 → calkit_python-0.35.0}/docs/tutorials/img/openfoam/reclone.png +0 -0
- {calkit_python-0.34.6 → calkit_python-0.35.0}/docs/tutorials/img/openfoam/status-after-import-dataset.png +0 -0
- {calkit_python-0.34.6 → calkit_python-0.35.0}/docs/tutorials/img/quick-actions.png +0 -0
- {calkit_python-0.34.6 → calkit_python-0.35.0}/docs/tutorials/img/run-proc.png +0 -0
- {calkit_python-0.34.6 → calkit_python-0.35.0}/docs/tutorials/index.md +0 -0
- {calkit_python-0.34.6 → calkit_python-0.35.0}/docs/tutorials/jupyterlab.md +0 -0
- {calkit_python-0.34.6 → calkit_python-0.35.0}/docs/tutorials/latex-codespaces.md +0 -0
- {calkit_python-0.34.6 → calkit_python-0.35.0}/docs/tutorials/matlab.md +0 -0
- {calkit_python-0.34.6 → calkit_python-0.35.0}/docs/tutorials/notebook-pipeline.md +0 -0
- {calkit_python-0.34.6 → calkit_python-0.35.0}/docs/tutorials/office.md +0 -0
- {calkit_python-0.34.6 → calkit_python-0.35.0}/docs/tutorials/openfoam.md +0 -0
- {calkit_python-0.34.6 → calkit_python-0.35.0}/docs/tutorials/procedures.md +0 -0
- {calkit_python-0.34.6 → calkit_python-0.35.0}/docs/version-control.md +0 -0
- {calkit_python-0.34.6 → calkit_python-0.35.0}/install.json +0 -0
- {calkit_python-0.34.6 → calkit_python-0.35.0}/jest.config.js +0 -0
- {calkit_python-0.34.6 → calkit_python-0.35.0}/jupyter-config/server-config/calkit.json +0 -0
- {calkit_python-0.34.6 → calkit_python-0.35.0}/mkdocs.yml +0 -0
- {calkit_python-0.34.6 → calkit_python-0.35.0}/package.json +0 -0
- {calkit_python-0.34.6 → calkit_python-0.35.0}/schema/plugin.json +0 -0
- {calkit_python-0.34.6 → calkit_python-0.35.0}/scripts/install.ps1 +0 -0
- {calkit_python-0.34.6 → calkit_python-0.35.0}/scripts/install.sh +0 -0
- {calkit_python-0.34.6 → calkit_python-0.35.0}/scripts/make-calk9.sh +0 -0
- {calkit_python-0.34.6 → calkit_python-0.35.0}/scripts/sync-docs.py +0 -0
- {calkit_python-0.34.6 → calkit_python-0.35.0}/src/__tests__/useQueries.spec.ts +0 -0
- {calkit_python-0.34.6 → calkit_python-0.35.0}/src/calkit-config.ts +0 -0
- {calkit_python-0.34.6 → calkit_python-0.35.0}/src/cell-output-marker.ts +0 -0
- {calkit_python-0.34.6 → calkit_python-0.35.0}/src/components/commit-dialog.tsx +0 -0
- {calkit_python-0.34.6 → calkit_python-0.35.0}/src/components/environment-editor.tsx +0 -0
- {calkit_python-0.34.6 → calkit_python-0.35.0}/src/components/notebook-registration.tsx +0 -0
- {calkit_python-0.34.6 → calkit_python-0.35.0}/src/components/notebook-toolbar.tsx +0 -0
- {calkit_python-0.34.6 → calkit_python-0.35.0}/src/components/pipeline-status-bar.tsx +0 -0
- {calkit_python-0.34.6 → calkit_python-0.35.0}/src/components/project-info-editor.tsx +0 -0
- {calkit_python-0.34.6 → calkit_python-0.35.0}/src/components/sidebar-settings.tsx +0 -0
- {calkit_python-0.34.6 → calkit_python-0.35.0}/src/components/sidebar.tsx +0 -0
- {calkit_python-0.34.6 → calkit_python-0.35.0}/src/components/stage-editor.tsx +0 -0
- {calkit_python-0.34.6 → calkit_python-0.35.0}/src/feature-flags.ts +0 -0
- {calkit_python-0.34.6 → calkit_python-0.35.0}/src/file-browser-menu.ts +0 -0
- {calkit_python-0.34.6 → calkit_python-0.35.0}/src/hooks/__tests__/useQueries.test.tsx +0 -0
- {calkit_python-0.34.6 → calkit_python-0.35.0}/src/hooks/useQueries.ts +0 -0
- {calkit_python-0.34.6 → calkit_python-0.35.0}/src/icons.ts +0 -0
- {calkit_python-0.34.6 → calkit_python-0.35.0}/src/index.ts +0 -0
- {calkit_python-0.34.6 → calkit_python-0.35.0}/src/io-tracker.ts +0 -0
- {calkit_python-0.34.6 → calkit_python-0.35.0}/src/pipeline-state.ts +0 -0
- {calkit_python-0.34.6 → calkit_python-0.35.0}/src/queryClient.ts +0 -0
- {calkit_python-0.34.6 → calkit_python-0.35.0}/src/request.ts +0 -0
- {calkit_python-0.34.6 → calkit_python-0.35.0}/src/shims-mainmenu.d.ts +0 -0
- {calkit_python-0.34.6 → calkit_python-0.35.0}/style/base.css +0 -0
- {calkit_python-0.34.6 → calkit_python-0.35.0}/style/cell-output-marker.css +0 -0
- {calkit_python-0.34.6 → calkit_python-0.35.0}/style/environment-editor.css +0 -0
- {calkit_python-0.34.6 → calkit_python-0.35.0}/style/environment-selector.css +0 -0
- {calkit_python-0.34.6 → calkit_python-0.35.0}/style/img/calkit-no-bg.png +0 -0
- {calkit_python-0.34.6 → calkit_python-0.35.0}/style/index.css +0 -0
- {calkit_python-0.34.6 → calkit_python-0.35.0}/style/index.js +0 -0
- {calkit_python-0.34.6 → calkit_python-0.35.0}/style/notebook-toolbar.css +0 -0
- {calkit_python-0.34.6 → calkit_python-0.35.0}/style/pipeline-status-bar.css +0 -0
- {calkit_python-0.34.6 → calkit_python-0.35.0}/style/sidebar.css +0 -0
- {calkit_python-0.34.6 → calkit_python-0.35.0}/test/dvc-md5-dir/osx-arm64.txt +0 -0
- {calkit_python-0.34.6 → calkit_python-0.35.0}/test/nb-julia.ipynb +0 -0
- {calkit_python-0.34.6 → calkit_python-0.35.0}/test/nb-params.ipynb +0 -0
- {calkit_python-0.34.6 → calkit_python-0.35.0}/test/nb-subdir.ipynb +0 -0
- {calkit_python-0.34.6 → calkit_python-0.35.0}/test/pipeline.ipynb +0 -0
- {calkit_python-0.34.6 → calkit_python-0.35.0}/test/script.py +0 -0
- {calkit_python-0.34.6 → calkit_python-0.35.0}/test/test-log.log +0 -0
- {calkit_python-0.34.6 → calkit_python-0.35.0}/tsconfig.json +0 -0
- {calkit_python-0.34.6 → calkit_python-0.35.0}/tsconfig.test.json +0 -0
- {calkit_python-0.34.6 → calkit_python-0.35.0}/ui-tests/.gitignore +0 -0
- {calkit_python-0.34.6 → calkit_python-0.35.0}/ui-tests/README.md +0 -0
- {calkit_python-0.34.6 → calkit_python-0.35.0}/ui-tests/jupyter_server_test_config.py +0 -0
- {calkit_python-0.34.6 → calkit_python-0.35.0}/ui-tests/package.json +0 -0
- {calkit_python-0.34.6 → calkit_python-0.35.0}/ui-tests/playwright.config.js +0 -0
- {calkit_python-0.34.6 → calkit_python-0.35.0}/ui-tests/tests/calkit.spec.ts +0 -0
- {calkit_python-0.34.6 → calkit_python-0.35.0}/ui-tests/yarn.lock +0 -0
- {calkit_python-0.34.6 → calkit_python-0.35.0}/yarn.lock +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: calkit-python
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.35.0
|
|
4
4
|
Summary: Reproducibility simplified.
|
|
5
5
|
Project-URL: Homepage, https://calkit.org
|
|
6
6
|
Project-URL: Issues, https://github.com/calkit/calkit/issues
|
|
@@ -26,8 +26,9 @@ Requires-Dist: arithmeval
|
|
|
26
26
|
Requires-Dist: bibtexparser
|
|
27
27
|
Requires-Dist: checksumdir
|
|
28
28
|
Requires-Dist: docx2pdf
|
|
29
|
-
Requires-Dist: dvc==3.
|
|
29
|
+
Requires-Dist: dvc==3.66.1
|
|
30
30
|
Requires-Dist: fastapi
|
|
31
|
+
Requires-Dist: fsspec>=2026.2.0
|
|
31
32
|
Requires-Dist: gitpython
|
|
32
33
|
Requires-Dist: json2latex>=0.0.3
|
|
33
34
|
Requires-Dist: jupyterlab>=4.4.5
|
|
@@ -47,11 +48,13 @@ Requires-Dist: sqlitedict>=2.1.0
|
|
|
47
48
|
Requires-Dist: texsoup>=0.3.1
|
|
48
49
|
Requires-Dist: toml>=0.10.2
|
|
49
50
|
Requires-Dist: tqdm>=4.67.1
|
|
50
|
-
Requires-Dist: typer==0.
|
|
51
|
+
Requires-Dist: typer==0.24.1
|
|
51
52
|
Requires-Dist: uvicorn
|
|
52
53
|
Provides-Extra: data
|
|
53
54
|
Requires-Dist: pandas>=2.2.3; extra == 'data'
|
|
54
55
|
Requires-Dist: polars>=1.18.0; extra == 'data'
|
|
56
|
+
Provides-Extra: xet
|
|
57
|
+
Requires-Dist: xet>=0.0.1; extra == 'xet'
|
|
55
58
|
Description-Content-Type: text/markdown
|
|
56
59
|
|
|
57
60
|
<p align="center">
|
|
@@ -6,6 +6,7 @@ from .core import * # noqa: F403, I001
|
|
|
6
6
|
from . import git # noqa: F401
|
|
7
7
|
from . import dvc # noqa: F401
|
|
8
8
|
from . import cloud # noqa: F401
|
|
9
|
+
from . import fs # noqa: F401
|
|
9
10
|
from . import jupyter # noqa: F401
|
|
10
11
|
from . import config # noqa: F401
|
|
11
12
|
from . import models # noqa: F401
|
|
@@ -19,6 +20,7 @@ from . import invenio # noqa: F401
|
|
|
19
20
|
from . import releases # noqa: F401
|
|
20
21
|
from . import licenses # noqa: F401
|
|
21
22
|
from . import overleaf # noqa: F401
|
|
23
|
+
from . import julia # noqa: F401
|
|
22
24
|
from .notebooks import declare_notebook # noqa: F401
|
|
23
25
|
from .jupyterlab.routes import setup_route_handlers
|
|
24
26
|
|
|
@@ -196,13 +196,27 @@ def check_environment(
|
|
|
196
196
|
"Julia environments require a path pointing to Project.toml"
|
|
197
197
|
)
|
|
198
198
|
# First ensure the Julia version exists
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
199
|
+
if shutil.which("juliaup") is not None:
|
|
200
|
+
cmd = ["juliaup", "add", julia_version]
|
|
201
|
+
if verbose:
|
|
202
|
+
typer.echo(f"Running command: {cmd}")
|
|
203
|
+
try:
|
|
204
|
+
subprocess.run(cmd, check=True)
|
|
205
|
+
except subprocess.CalledProcessError:
|
|
206
|
+
raise_error(f"Failed to install Julia version {julia_version}")
|
|
207
|
+
else:
|
|
208
|
+
try:
|
|
209
|
+
compatible = calkit.julia.current_version_is_compatible(
|
|
210
|
+
julia_version
|
|
211
|
+
)
|
|
212
|
+
except ValueError as e:
|
|
213
|
+
raise_error(str(e))
|
|
214
|
+
if not compatible:
|
|
215
|
+
raise_error(
|
|
216
|
+
f"Current Julia version is not compatible with required "
|
|
217
|
+
f"version ({julia_version}), and juliaup is not available to "
|
|
218
|
+
"install it"
|
|
219
|
+
)
|
|
206
220
|
env_dir = os.path.dirname(env_path)
|
|
207
221
|
if not env_dir:
|
|
208
222
|
env_dir = "."
|
|
@@ -253,6 +267,10 @@ def check_environment(
|
|
|
253
267
|
"-e",
|
|
254
268
|
f"using Pkg; Pkg.add([{pkg_list}]);",
|
|
255
269
|
]
|
|
270
|
+
try:
|
|
271
|
+
cmd = calkit.julia.check_version_in_command(cmd)
|
|
272
|
+
except Exception as e:
|
|
273
|
+
raise_error(f"Failed to check Julia version: {e}")
|
|
256
274
|
try:
|
|
257
275
|
subprocess.check_call(
|
|
258
276
|
cmd,
|
|
@@ -267,6 +285,10 @@ def check_environment(
|
|
|
267
285
|
"-e",
|
|
268
286
|
"using Pkg; Pkg.instantiate();",
|
|
269
287
|
]
|
|
288
|
+
try:
|
|
289
|
+
cmd = calkit.julia.check_version_in_command(cmd)
|
|
290
|
+
except Exception as e:
|
|
291
|
+
raise_error(f"Failed to check Julia version: {e}")
|
|
270
292
|
try:
|
|
271
293
|
subprocess.check_call(
|
|
272
294
|
cmd, env=os.environ.copy() | {"JULIA_LOAD_PATH": "@:@stdlib"}
|
|
@@ -113,8 +113,9 @@ def setup_remote_auth():
|
|
|
113
113
|
remotes = get_remotes()
|
|
114
114
|
except Exception:
|
|
115
115
|
raise_error("Cannot list DVC remotes; check DVC config for errors")
|
|
116
|
+
ck_remote_name = calkit.config.get_app_name()
|
|
116
117
|
for name, url in remotes.items():
|
|
117
|
-
if name ==
|
|
118
|
+
if name == ck_remote_name or name.startswith(f"{ck_remote_name}:"):
|
|
118
119
|
typer.echo(f"Setting up authentication for DVC remote: {name}")
|
|
119
120
|
set_remote_auth(remote_name=name)
|
|
120
121
|
|
|
@@ -6,8 +6,6 @@ import base64
|
|
|
6
6
|
import fnmatch
|
|
7
7
|
import json
|
|
8
8
|
import os
|
|
9
|
-
import subprocess
|
|
10
|
-
import sys
|
|
11
9
|
from copy import deepcopy
|
|
12
10
|
from typing import Annotated
|
|
13
11
|
|
|
@@ -19,6 +17,7 @@ from tqdm import tqdm
|
|
|
19
17
|
import calkit
|
|
20
18
|
import calkit.invenio
|
|
21
19
|
from calkit.cli import raise_error
|
|
20
|
+
from calkit.dvc import run_dvc_command
|
|
22
21
|
from calkit.models.core import _ImportedFromProject
|
|
23
22
|
|
|
24
23
|
import_app = typer.Typer(no_args_is_help=True)
|
|
@@ -209,7 +208,9 @@ def import_dataset(
|
|
|
209
208
|
if not no_dvc_pull and dvc_import is not None:
|
|
210
209
|
# Run dvc pull
|
|
211
210
|
typer.echo("Running dvc pull")
|
|
212
|
-
|
|
211
|
+
result = run_dvc_command(["pull", dvc_fpath])
|
|
212
|
+
if result != 0:
|
|
213
|
+
raise_error("Failed to pull from DVC")
|
|
213
214
|
|
|
214
215
|
|
|
215
216
|
@import_app.command(name="environment")
|
|
@@ -423,10 +424,8 @@ def import_from_zenodo(
|
|
|
423
424
|
commit_paths = []
|
|
424
425
|
if storage is None:
|
|
425
426
|
if calkit.get_size(dest_dir) > calkit.DVC_SIZE_THRESH_BYTES:
|
|
426
|
-
|
|
427
|
-
|
|
428
|
-
)
|
|
429
|
-
if res.returncode != 0:
|
|
427
|
+
result = run_dvc_command(["add"])
|
|
428
|
+
if result != 0:
|
|
430
429
|
raise_error("Failed to DVC add")
|
|
431
430
|
# Git add the .dvc file
|
|
432
431
|
dvc_file = dest_dir + ".dvc"
|
|
@@ -436,10 +435,8 @@ def import_from_zenodo(
|
|
|
436
435
|
repo.git.add(dest_dir)
|
|
437
436
|
commit_paths.append(dest_dir)
|
|
438
437
|
elif storage.lower() == "dvc":
|
|
439
|
-
|
|
440
|
-
|
|
441
|
-
)
|
|
442
|
-
if res.returncode != 0:
|
|
438
|
+
result = run_dvc_command(["add", dest_dir])
|
|
439
|
+
if result != 0:
|
|
443
440
|
raise_error("Failed to DVC add")
|
|
444
441
|
# Git add the .dvc file
|
|
445
442
|
dvc_file = dest_dir + ".dvc"
|
|
@@ -55,6 +55,7 @@ from calkit.cli.office import office_app
|
|
|
55
55
|
from calkit.cli.overleaf import overleaf_app
|
|
56
56
|
from calkit.cli.slurm import slurm_app
|
|
57
57
|
from calkit.cli.update import update_app
|
|
58
|
+
from calkit.dvc import register_ck_scheme, run_dvc_command
|
|
58
59
|
from calkit.environments import get_env_lock_fpath
|
|
59
60
|
from calkit.models import Procedure
|
|
60
61
|
|
|
@@ -125,14 +126,13 @@ def init(
|
|
|
125
126
|
):
|
|
126
127
|
"""Initialize the current working directory."""
|
|
127
128
|
subprocess.run(["git", "init"])
|
|
128
|
-
|
|
129
|
-
if
|
|
130
|
-
|
|
131
|
-
subprocess.run(dvc_cmd)
|
|
129
|
+
result = run_dvc_command(["init"] + (["--force"] if force else []))
|
|
130
|
+
if result != 0:
|
|
131
|
+
raise_error("Failed to initialize DVC")
|
|
132
132
|
# Ensure autostage is enabled for DVC
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
133
|
+
result = run_dvc_command(["config", "core.autostage", "true"])
|
|
134
|
+
if result != 0:
|
|
135
|
+
raise_error("Failed to configure DVC autostage")
|
|
136
136
|
# Commit the newly created .dvc directory
|
|
137
137
|
repo = git.Repo()
|
|
138
138
|
repo.git.add(".dvc")
|
|
@@ -220,13 +220,24 @@ def clone(
|
|
|
220
220
|
# DVC pull
|
|
221
221
|
if not no_dvc_pull:
|
|
222
222
|
try:
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
223
|
+
result = run_dvc_command(["pull"])
|
|
224
|
+
if result != 0:
|
|
225
|
+
raise_error("Failed to pull from DVC remote(s)")
|
|
226
|
+
except Exception as e:
|
|
227
|
+
raise_error(f"Failed to pull from DVC remote(s): {e}")
|
|
226
228
|
|
|
227
229
|
|
|
228
230
|
@app.command(name="status")
|
|
229
231
|
def get_status(
|
|
232
|
+
targets: Annotated[
|
|
233
|
+
list[str] | None,
|
|
234
|
+
typer.Argument(
|
|
235
|
+
help=(
|
|
236
|
+
"Optional targets to check status for. These may be "
|
|
237
|
+
"pipeline stage names or repo paths."
|
|
238
|
+
),
|
|
239
|
+
),
|
|
240
|
+
] = None,
|
|
230
241
|
categories: Annotated[
|
|
231
242
|
list[str] | None,
|
|
232
243
|
typer.Option(
|
|
@@ -282,15 +293,24 @@ def get_status(
|
|
|
282
293
|
typer.echo()
|
|
283
294
|
if "git" in categories:
|
|
284
295
|
print_sep("Git")
|
|
285
|
-
|
|
296
|
+
git_cmd = ["git", "status"]
|
|
297
|
+
if targets:
|
|
298
|
+
git_cmd += ["--"] + targets
|
|
299
|
+
run_cmd(git_cmd)
|
|
286
300
|
typer.echo()
|
|
287
301
|
if "dvc" in categories:
|
|
288
302
|
print_sep("DVC")
|
|
289
|
-
|
|
303
|
+
dvc_data_cmd = ["data", "status"]
|
|
304
|
+
if targets:
|
|
305
|
+
dvc_data_cmd += targets
|
|
306
|
+
run_dvc_command(dvc_data_cmd)
|
|
290
307
|
typer.echo()
|
|
291
308
|
if "pipeline" in categories or "dvc" in categories:
|
|
292
309
|
print_sep("Pipeline")
|
|
293
|
-
|
|
310
|
+
dvc_pipeline_cmd = ["status"]
|
|
311
|
+
if targets:
|
|
312
|
+
dvc_pipeline_cmd += targets
|
|
313
|
+
run_dvc_command(dvc_pipeline_cmd)
|
|
294
314
|
|
|
295
315
|
|
|
296
316
|
@app.command(name="diff")
|
|
@@ -309,7 +329,7 @@ def diff(
|
|
|
309
329
|
git_cmd.append("--staged")
|
|
310
330
|
run_cmd(git_cmd)
|
|
311
331
|
print_sep("Pipeline (DVC)")
|
|
312
|
-
|
|
332
|
+
run_dvc_command(["diff"])
|
|
313
333
|
|
|
314
334
|
|
|
315
335
|
@app.command(name="add")
|
|
@@ -383,13 +403,18 @@ def add(
|
|
|
383
403
|
raise_error("Not currently in a Git repo; run `calkit init` first")
|
|
384
404
|
repo = git.Repo()
|
|
385
405
|
try:
|
|
406
|
+
register_ck_scheme()
|
|
386
407
|
dvc_repo = dvc.repo.Repo()
|
|
387
408
|
except NotDvcRepoError:
|
|
388
409
|
warn("DVC not initialized yet; initializing")
|
|
389
410
|
dvc_repo = dvc.repo.Repo.init()
|
|
390
411
|
# Ensure autostage is enabled for DVC
|
|
391
|
-
|
|
392
|
-
[
|
|
412
|
+
run_dvc_command(
|
|
413
|
+
[
|
|
414
|
+
"config",
|
|
415
|
+
"core.autostage",
|
|
416
|
+
"true",
|
|
417
|
+
]
|
|
393
418
|
)
|
|
394
419
|
subprocess.call(["git", "add", ".dvc/config"])
|
|
395
420
|
dvc_paths = calkit.dvc.list_paths()
|
|
@@ -404,7 +429,7 @@ def add(
|
|
|
404
429
|
if to == "git":
|
|
405
430
|
subprocess.call(["git", "add"] + paths)
|
|
406
431
|
elif to == "dvc":
|
|
407
|
-
|
|
432
|
+
run_dvc_command(["add"] + paths)
|
|
408
433
|
else:
|
|
409
434
|
raise_error(f"Invalid option for 'to': {to}")
|
|
410
435
|
else:
|
|
@@ -465,15 +490,15 @@ def add(
|
|
|
465
490
|
typer.echo(
|
|
466
491
|
f"Adding {path} to DVC since it's already tracked with DVC"
|
|
467
492
|
)
|
|
468
|
-
|
|
493
|
+
run_dvc_command(["add", path])
|
|
469
494
|
elif os.path.splitext(path)[-1] in DVC_EXTENSIONS:
|
|
470
495
|
typer.echo(f"Adding {path} to DVC per its extension")
|
|
471
|
-
|
|
496
|
+
run_dvc_command(["add", path])
|
|
472
497
|
elif calkit.get_size(path) > DVC_SIZE_THRESH_BYTES:
|
|
473
498
|
typer.echo(
|
|
474
499
|
f"Adding {path} to DVC since it's greater than 1 MB"
|
|
475
500
|
)
|
|
476
|
-
|
|
501
|
+
run_dvc_command(["add", path])
|
|
477
502
|
else:
|
|
478
503
|
typer.echo(f"Adding {path} to Git")
|
|
479
504
|
subprocess.call(["git", "add", path])
|
|
@@ -694,13 +719,15 @@ def pull(
|
|
|
694
719
|
if not no_check_auth:
|
|
695
720
|
# Check that our dvc remotes all have our DVC token set for them
|
|
696
721
|
remotes = calkit.dvc.get_remotes()
|
|
722
|
+
ck_remote_name = calkit.config.get_app_name()
|
|
697
723
|
for name, url in remotes.items():
|
|
698
|
-
if
|
|
724
|
+
if (
|
|
725
|
+
name == ck_remote_name or name.startswith(f"{ck_remote_name}:")
|
|
726
|
+
) and url.startswith("http"):
|
|
699
727
|
typer.echo(f"Checking authentication for DVC remote: {name}")
|
|
700
728
|
calkit.dvc.set_remote_auth(remote_name=name)
|
|
701
|
-
|
|
702
|
-
|
|
703
|
-
except subprocess.CalledProcessError:
|
|
729
|
+
result = run_dvc_command(["pull"] + dvc_args)
|
|
730
|
+
if result != 0:
|
|
704
731
|
raise_error("DVC pull failed")
|
|
705
732
|
|
|
706
733
|
|
|
@@ -734,17 +761,18 @@ def push(
|
|
|
734
761
|
if not no_check_auth:
|
|
735
762
|
# Check that our dvc remotes all have our DVC token set for them
|
|
736
763
|
remotes = calkit.dvc.get_remotes()
|
|
764
|
+
ck_remote_name = calkit.config.get_app_name()
|
|
737
765
|
for name, url in remotes.items():
|
|
738
|
-
if
|
|
766
|
+
if (
|
|
767
|
+
name == ck_remote_name
|
|
768
|
+
or name.startswith(f"{ck_remote_name}:")
|
|
769
|
+
) and url.startswith("http"):
|
|
739
770
|
typer.echo(
|
|
740
771
|
f"Checking authentication for DVC remote: {name}"
|
|
741
772
|
)
|
|
742
773
|
calkit.dvc.set_remote_auth(remote_name=name)
|
|
743
|
-
|
|
744
|
-
|
|
745
|
-
[sys.executable, "-m", "dvc", "push"] + dvc_args
|
|
746
|
-
)
|
|
747
|
-
except subprocess.CalledProcessError:
|
|
774
|
+
result = run_dvc_command(["push"] + dvc_args)
|
|
775
|
+
if result != 0:
|
|
748
776
|
raise_error("DVC push failed")
|
|
749
777
|
|
|
750
778
|
|
|
@@ -1109,12 +1137,16 @@ def run(
|
|
|
1109
1137
|
os.environ.pop("CALKIT_PIPELINE_RUNNING", None)
|
|
1110
1138
|
raise_error(f"Pipeline compilation failed: {e}")
|
|
1111
1139
|
# Initialize DVC repo if necessary
|
|
1140
|
+
# Register the ck:// scheme before accessing DVC repo
|
|
1141
|
+
register_ck_scheme()
|
|
1112
1142
|
try:
|
|
1113
1143
|
dvc.repo.Repo()
|
|
1114
1144
|
except Exception:
|
|
1115
1145
|
if not quiet:
|
|
1116
1146
|
typer.echo("Initializing DVC repo")
|
|
1117
|
-
|
|
1147
|
+
result = run_dvc_command(["init"])
|
|
1148
|
+
if result != 0:
|
|
1149
|
+
raise_error("Failed to initialize DVC repo")
|
|
1118
1150
|
# Convert deps into target stage names
|
|
1119
1151
|
# TODO: This could probably be merged back upstream into DVC
|
|
1120
1152
|
if dvc_stages is None:
|
|
@@ -1169,6 +1201,7 @@ def run(
|
|
|
1169
1201
|
git_staged_files_before = calkit.git.get_staged_files(repo=repo)
|
|
1170
1202
|
git_untracked_files_before = calkit.git.get_untracked_files(repo=repo)
|
|
1171
1203
|
# Get status of DVC repo before running
|
|
1204
|
+
register_ck_scheme()
|
|
1172
1205
|
dvc_repo = dvc.repo.Repo()
|
|
1173
1206
|
dvc_status_before = dvc_repo.status()
|
|
1174
1207
|
dvc_data_status_before = dvc_repo.data_status()
|
|
@@ -1616,11 +1649,18 @@ def run_in_env(
|
|
|
1616
1649
|
# calling julia
|
|
1617
1650
|
if cmd[0] == "julia":
|
|
1618
1651
|
cmd = cmd[1:]
|
|
1652
|
+
# If there are any --project= args, remove them since we are already
|
|
1653
|
+
# specifying the project
|
|
1654
|
+
cmd = [arg for arg in cmd if not arg.startswith("--project=")]
|
|
1619
1655
|
julia_cmd = [
|
|
1620
1656
|
"julia",
|
|
1621
1657
|
f"+{julia_version}",
|
|
1622
1658
|
"--project=" + env_dir,
|
|
1623
1659
|
] + cmd
|
|
1660
|
+
try:
|
|
1661
|
+
julia_cmd = calkit.julia.check_version_in_command(julia_cmd)
|
|
1662
|
+
except Exception as e:
|
|
1663
|
+
raise_error(f"Failed to check Julia version: {e}")
|
|
1624
1664
|
if verbose:
|
|
1625
1665
|
typer.echo(f"Running command: {julia_cmd}")
|
|
1626
1666
|
try:
|
|
@@ -2592,8 +2632,8 @@ def call_dvc(
|
|
|
2592
2632
|
Useful if Calkit is installed as a tool, e.g., with `uv tool` or `pipx`,
|
|
2593
2633
|
and DVC is not installed.
|
|
2594
2634
|
"""
|
|
2595
|
-
|
|
2596
|
-
sys.exit(
|
|
2635
|
+
result = run_dvc_command(sys.argv[2:])
|
|
2636
|
+
sys.exit(result)
|
|
2597
2637
|
|
|
2598
2638
|
|
|
2599
2639
|
@app.command(
|
|
@@ -7,7 +7,6 @@ import os
|
|
|
7
7
|
import pathlib
|
|
8
8
|
import shutil
|
|
9
9
|
import subprocess
|
|
10
|
-
import sys
|
|
11
10
|
import zipfile
|
|
12
11
|
from enum import Enum
|
|
13
12
|
|
|
@@ -23,6 +22,7 @@ from calkit.cli.check import check_environment
|
|
|
23
22
|
from calkit.cli.update import update_devcontainer
|
|
24
23
|
from calkit.core import ryaml
|
|
25
24
|
from calkit.docker import LAYERS
|
|
25
|
+
from calkit.dvc import run_dvc_command
|
|
26
26
|
from calkit.environments import DEFAULT_PYTHON_VERSION
|
|
27
27
|
from calkit.models.pipeline import LatexStage, StageIteration
|
|
28
28
|
|
|
@@ -141,15 +141,14 @@ def new_project(
|
|
|
141
141
|
if not os.path.isfile(os.path.join(abs_path, ".dvc", "config")):
|
|
142
142
|
typer.echo("Initializing DVC repository")
|
|
143
143
|
try:
|
|
144
|
-
|
|
145
|
-
[
|
|
144
|
+
result = run_dvc_command(
|
|
145
|
+
["init", "-q"],
|
|
146
146
|
cwd=abs_path,
|
|
147
|
-
capture_output=True,
|
|
148
|
-
check=True,
|
|
149
|
-
text=True,
|
|
150
147
|
)
|
|
148
|
+
if result != 0:
|
|
149
|
+
raise subprocess.CalledProcessError(result, "dvc init")
|
|
151
150
|
except subprocess.CalledProcessError as e:
|
|
152
|
-
raise_error(f"Failed to initialize DVC repository: {e
|
|
151
|
+
raise_error(f"Failed to initialize DVC repository: {e}")
|
|
153
152
|
# Commit the DVC init changes
|
|
154
153
|
if not no_commit:
|
|
155
154
|
repo.git.add(".dvc")
|
|
@@ -330,18 +329,12 @@ def new_project(
|
|
|
330
329
|
"You will need to manually run `git remote add origin` "
|
|
331
330
|
"and `calkit config remote`"
|
|
332
331
|
)
|
|
333
|
-
|
|
334
|
-
[
|
|
335
|
-
sys.executable,
|
|
336
|
-
"-m",
|
|
337
|
-
"dvc",
|
|
338
|
-
"remote",
|
|
339
|
-
"remove",
|
|
340
|
-
"calkit",
|
|
341
|
-
"-q",
|
|
342
|
-
],
|
|
332
|
+
result = run_dvc_command(
|
|
333
|
+
["remote", "remove", "calkit", "-q"],
|
|
343
334
|
cwd=abs_path,
|
|
344
335
|
)
|
|
336
|
+
if result != 0:
|
|
337
|
+
warn("Failed to remove DVC remote")
|
|
345
338
|
try:
|
|
346
339
|
calkit.dvc.set_remote_auth(wdir=abs_path)
|
|
347
340
|
except Exception:
|
|
@@ -361,9 +354,12 @@ def new_project(
|
|
|
361
354
|
repo = git.Repo(abs_path)
|
|
362
355
|
if not os.path.isfile(os.path.join(abs_path, ".dvc", "config")):
|
|
363
356
|
typer.echo("Initializing DVC repository")
|
|
364
|
-
|
|
365
|
-
[
|
|
357
|
+
result = run_dvc_command(
|
|
358
|
+
["init", "-q"],
|
|
359
|
+
cwd=abs_path,
|
|
366
360
|
)
|
|
361
|
+
if result != 0:
|
|
362
|
+
raise_error("Failed to initialize DVC repository")
|
|
367
363
|
# Create calkit.yaml file
|
|
368
364
|
ck_info = calkit.load_calkit_info(wdir=abs_path)
|
|
369
365
|
ck_info = dict(name=name, title=title, description=description) | ck_info
|
|
@@ -493,13 +489,20 @@ def new_figure(
|
|
|
493
489
|
outs_cmd = []
|
|
494
490
|
for out in outs:
|
|
495
491
|
outs_cmd += ["-o", out]
|
|
496
|
-
|
|
497
|
-
[
|
|
492
|
+
result = run_dvc_command(
|
|
493
|
+
[
|
|
494
|
+
"stage",
|
|
495
|
+
"add",
|
|
496
|
+
"-n",
|
|
497
|
+
stage_name,
|
|
498
|
+
]
|
|
498
499
|
+ (["-f"] if overwrite else [])
|
|
499
500
|
+ deps_cmd
|
|
500
501
|
+ outs_cmd
|
|
501
502
|
+ [cmd]
|
|
502
503
|
)
|
|
504
|
+
if result != 0:
|
|
505
|
+
raise_error(f"Failed to add figure {obj}")
|
|
503
506
|
figures.append(obj)
|
|
504
507
|
ck_info["figures"] = figures
|
|
505
508
|
with open("calkit.yaml", "w") as f:
|
|
@@ -910,13 +913,20 @@ def new_dataset(
|
|
|
910
913
|
outs_cmd = []
|
|
911
914
|
for out in outs:
|
|
912
915
|
outs_cmd += ["-o", out]
|
|
913
|
-
|
|
914
|
-
[
|
|
916
|
+
result = run_dvc_command(
|
|
917
|
+
[
|
|
918
|
+
"stage",
|
|
919
|
+
"add",
|
|
920
|
+
"-n",
|
|
921
|
+
stage_name,
|
|
922
|
+
]
|
|
915
923
|
+ (["-f"] if overwrite else [])
|
|
916
924
|
+ deps_cmd
|
|
917
925
|
+ outs_cmd
|
|
918
926
|
+ [cmd]
|
|
919
927
|
)
|
|
928
|
+
if result != 0:
|
|
929
|
+
raise_error(f"Failed to add dataset {obj}")
|
|
920
930
|
datasets.append(obj)
|
|
921
931
|
ck_info["datasets"] = datasets
|
|
922
932
|
with open("calkit.yaml", "w") as f:
|
|
@@ -2977,144 +2987,3 @@ def new_release(
|
|
|
2977
2987
|
# TODO: Upload assets for GitHub release if they're not too big?
|
|
2978
2988
|
typer.echo(f"New {release_type} release {name} successfully created")
|
|
2979
2989
|
return release
|
|
2980
|
-
|
|
2981
|
-
|
|
2982
|
-
@new_app.command(name="stage")
|
|
2983
|
-
def new_stage(
|
|
2984
|
-
name: StageArgs.name,
|
|
2985
|
-
kind: Annotated[
|
|
2986
|
-
StageKind, typer.Option("--kind", help="What kind of stage to create.")
|
|
2987
|
-
],
|
|
2988
|
-
target: Annotated[
|
|
2989
|
-
str,
|
|
2990
|
-
typer.Option(
|
|
2991
|
-
"--target", "-t", help="Target file, e.g., the script to run."
|
|
2992
|
-
),
|
|
2993
|
-
],
|
|
2994
|
-
environment: Annotated[
|
|
2995
|
-
str | None,
|
|
2996
|
-
typer.Option(
|
|
2997
|
-
"--environment", "-e", help="Environment to use to run the stage."
|
|
2998
|
-
),
|
|
2999
|
-
] = None,
|
|
3000
|
-
deps: Annotated[
|
|
3001
|
-
list[str],
|
|
3002
|
-
typer.Option("--dep", "-d", help="A path on which the stage depends."),
|
|
3003
|
-
] = [],
|
|
3004
|
-
outs: Annotated[
|
|
3005
|
-
list[str],
|
|
3006
|
-
typer.Option(
|
|
3007
|
-
"--out", "-o", help="A path that is produced by the stage."
|
|
3008
|
-
),
|
|
3009
|
-
] = [],
|
|
3010
|
-
outs_persist: Annotated[
|
|
3011
|
-
list[str],
|
|
3012
|
-
typer.Option(
|
|
3013
|
-
"--out-persist",
|
|
3014
|
-
help="An output that should not be deleted before running.",
|
|
3015
|
-
),
|
|
3016
|
-
] = [],
|
|
3017
|
-
outs_no_cache: Annotated[
|
|
3018
|
-
list[str],
|
|
3019
|
-
typer.Option(
|
|
3020
|
-
"--out-git",
|
|
3021
|
-
help="An output that should be tracked with Git instead of DVC.",
|
|
3022
|
-
),
|
|
3023
|
-
] = [],
|
|
3024
|
-
outs_persist_no_cache: Annotated[
|
|
3025
|
-
list[str],
|
|
3026
|
-
typer.Option(
|
|
3027
|
-
"--out-git-persist",
|
|
3028
|
-
help=(
|
|
3029
|
-
"An output that should be tracked with Git instead of DVC, "
|
|
3030
|
-
"and also should not be deleted before running stage."
|
|
3031
|
-
),
|
|
3032
|
-
),
|
|
3033
|
-
] = [],
|
|
3034
|
-
overwrite: Annotated[
|
|
3035
|
-
bool,
|
|
3036
|
-
typer.Option(
|
|
3037
|
-
"--overwrite",
|
|
3038
|
-
"--force",
|
|
3039
|
-
"-f",
|
|
3040
|
-
help="Overwrite an existing stage with this name if necessary.",
|
|
3041
|
-
),
|
|
3042
|
-
] = False,
|
|
3043
|
-
no_check: Annotated[
|
|
3044
|
-
bool,
|
|
3045
|
-
typer.Option(
|
|
3046
|
-
"--no-check",
|
|
3047
|
-
help="Do not check if the target, deps, environment, etc., exist.",
|
|
3048
|
-
),
|
|
3049
|
-
] = False,
|
|
3050
|
-
no_commit: Annotated[
|
|
3051
|
-
bool, typer.Option("--no-commit", help="Do not commit changes to Git.")
|
|
3052
|
-
] = False,
|
|
3053
|
-
):
|
|
3054
|
-
"""Create a new DVC pipeline stage (deprecated)."""
|
|
3055
|
-
ck_info = calkit.load_calkit_info(process_includes="environments")
|
|
3056
|
-
environments = ck_info.get("environments", {})
|
|
3057
|
-
if environment is None:
|
|
3058
|
-
warn("No environment is specified")
|
|
3059
|
-
cmd = ""
|
|
3060
|
-
else:
|
|
3061
|
-
if environment not in environments and not no_check:
|
|
3062
|
-
raise_error(f"Environment '{environment}' does not exist")
|
|
3063
|
-
cmd = f"calkit xenv -n {environment} -- "
|
|
3064
|
-
# Add environment path as a dependency if applicable
|
|
3065
|
-
env_path = environments.get(environment, {}).get("path")
|
|
3066
|
-
if env_path is not None and env_path not in deps:
|
|
3067
|
-
deps = [env_path] + deps
|
|
3068
|
-
if not os.path.exists(target) and not no_check:
|
|
3069
|
-
raise_error(f"Target '{target}' does not exist")
|
|
3070
|
-
if kind.value == "python-script":
|
|
3071
|
-
cmd += f"python {target}"
|
|
3072
|
-
elif kind.value == "latex":
|
|
3073
|
-
cmd = f"calkit latex build {target}"
|
|
3074
|
-
if environment is not None:
|
|
3075
|
-
cmd += f" --environment {environment}"
|
|
3076
|
-
out_target = target.removesuffix(".tex") + ".pdf"
|
|
3077
|
-
if out_target not in (
|
|
3078
|
-
outs + outs_no_cache + outs_persist + outs_persist_no_cache
|
|
3079
|
-
):
|
|
3080
|
-
outs = [out_target] + outs
|
|
3081
|
-
elif kind.value == "matlab-script":
|
|
3082
|
-
cmd += f"matlab -noFigureWindows -batch \"run('{target}');\""
|
|
3083
|
-
elif kind.value == "sh-script":
|
|
3084
|
-
cmd += f"sh {target}"
|
|
3085
|
-
elif kind.value == "bash-script":
|
|
3086
|
-
cmd += f"bash {target}"
|
|
3087
|
-
elif kind.value == "zsh-script":
|
|
3088
|
-
cmd += f"zsh {target}"
|
|
3089
|
-
elif kind.value == "r-script":
|
|
3090
|
-
cmd += f"Rscript {target}"
|
|
3091
|
-
add_cmd = [sys.executable, "-m", "dvc", "stage", "add", "-n", name]
|
|
3092
|
-
if target not in deps:
|
|
3093
|
-
deps = [target] + deps
|
|
3094
|
-
for dep in deps:
|
|
3095
|
-
add_cmd += ["-d", dep]
|
|
3096
|
-
for out in outs:
|
|
3097
|
-
add_cmd += ["-o", out]
|
|
3098
|
-
for out in outs_no_cache:
|
|
3099
|
-
add_cmd += ["--outs-no-cache", out]
|
|
3100
|
-
for out in outs_persist:
|
|
3101
|
-
add_cmd += ["--outs-persist", out]
|
|
3102
|
-
for out in outs_persist_no_cache:
|
|
3103
|
-
add_cmd += ["--outs-persist-no-cache", out]
|
|
3104
|
-
if overwrite:
|
|
3105
|
-
add_cmd.append("-f")
|
|
3106
|
-
add_cmd.append(cmd)
|
|
3107
|
-
try:
|
|
3108
|
-
subprocess.check_call(add_cmd)
|
|
3109
|
-
except subprocess.CalledProcessError:
|
|
3110
|
-
raise_error("Failed to create stage")
|
|
3111
|
-
if not no_commit:
|
|
3112
|
-
try:
|
|
3113
|
-
repo = git.Repo()
|
|
3114
|
-
except InvalidGitRepositoryError:
|
|
3115
|
-
raise_error("Can't commit because this is not a Git repo")
|
|
3116
|
-
repo.git.add("dvc.yaml")
|
|
3117
|
-
if "dvc.yaml" in calkit.git.get_staged_files():
|
|
3118
|
-
repo.git.commit(
|
|
3119
|
-
["dvc.yaml", "-m", f"Add {kind.value} pipeline stage '{name}'"]
|
|
3120
|
-
)
|