calkit-python 0.37.0__tar.gz → 0.37.1__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.37.0 → calkit_python-0.37.1}/PKG-INFO +1 -1
- {calkit_python-0.37.0 → calkit_python-0.37.1}/calkit/cli/config.py +8 -1
- {calkit_python-0.37.0 → calkit_python-0.37.1}/calkit/cli/main/core.py +4 -4
- {calkit_python-0.37.0 → calkit_python-0.37.1}/calkit/cli/new.py +1 -3
- {calkit_python-0.37.0 → calkit_python-0.37.1}/calkit/cli/update.py +1 -3
- {calkit_python-0.37.0 → calkit_python-0.37.1}/calkit/dvc/core.py +47 -11
- {calkit_python-0.37.0 → calkit_python-0.37.1}/calkit/pipeline.py +31 -19
- {calkit_python-0.37.0 → calkit_python-0.37.1}/calkit/releases.py +15 -10
- {calkit_python-0.37.0 → calkit_python-0.37.1}/calkit/tests/dvc/test_core.py +69 -0
- {calkit_python-0.37.0 → calkit_python-0.37.1}/calkit/tests/test_releases.py +6 -6
- {calkit_python-0.37.0 → calkit_python-0.37.1}/docs/cli-reference.md +788 -752
- {calkit_python-0.37.0 → calkit_python-0.37.1}/docs/version-control.md +1 -1
- {calkit_python-0.37.0 → calkit_python-0.37.1}/scripts/generate-cli-reference.py +174 -36
- {calkit_python-0.37.0 → calkit_python-0.37.1}/.gitignore +0 -0
- {calkit_python-0.37.0 → calkit_python-0.37.1}/.pre-commit-config.yaml +0 -0
- {calkit_python-0.37.0 → calkit_python-0.37.1}/.prettierignore +0 -0
- {calkit_python-0.37.0 → calkit_python-0.37.1}/.python-version +0 -0
- {calkit_python-0.37.0 → calkit_python-0.37.1}/.vscode/launch.json +0 -0
- {calkit_python-0.37.0 → calkit_python-0.37.1}/.vscode/tasks.json +0 -0
- {calkit_python-0.37.0 → calkit_python-0.37.1}/.yarnrc.yml +0 -0
- {calkit_python-0.37.0 → calkit_python-0.37.1}/CITATION.cff +0 -0
- {calkit_python-0.37.0 → calkit_python-0.37.1}/CODE_OF_CONDUCT.md +0 -0
- {calkit_python-0.37.0 → calkit_python-0.37.1}/CONTRIBUTING.md +0 -0
- {calkit_python-0.37.0 → calkit_python-0.37.1}/LICENSE +0 -0
- {calkit_python-0.37.0 → calkit_python-0.37.1}/Makefile +0 -0
- {calkit_python-0.37.0 → calkit_python-0.37.1}/README.md +0 -0
- {calkit_python-0.37.0 → calkit_python-0.37.1}/babel.config.js +0 -0
- {calkit_python-0.37.0 → calkit_python-0.37.1}/calkit/__init__.py +0 -0
- {calkit_python-0.37.0 → calkit_python-0.37.1}/calkit/__main__.py +0 -0
- {calkit_python-0.37.0 → calkit_python-0.37.1}/calkit/calc.py +0 -0
- {calkit_python-0.37.0 → calkit_python-0.37.1}/calkit/check.py +0 -0
- {calkit_python-0.37.0 → calkit_python-0.37.1}/calkit/cli/__init__.py +0 -0
- {calkit_python-0.37.0 → calkit_python-0.37.1}/calkit/cli/check.py +0 -0
- {calkit_python-0.37.0 → calkit_python-0.37.1}/calkit/cli/cloud.py +0 -0
- {calkit_python-0.37.0 → calkit_python-0.37.1}/calkit/cli/core.py +0 -0
- {calkit_python-0.37.0 → calkit_python-0.37.1}/calkit/cli/describe.py +0 -0
- {calkit_python-0.37.0 → calkit_python-0.37.1}/calkit/cli/import_.py +0 -0
- {calkit_python-0.37.0 → calkit_python-0.37.1}/calkit/cli/latex.py +0 -0
- {calkit_python-0.37.0 → calkit_python-0.37.1}/calkit/cli/list.py +0 -0
- {calkit_python-0.37.0 → calkit_python-0.37.1}/calkit/cli/main/__init__.py +0 -0
- {calkit_python-0.37.0 → calkit_python-0.37.1}/calkit/cli/main/xr.py +0 -0
- {calkit_python-0.37.0 → calkit_python-0.37.1}/calkit/cli/notebooks.py +0 -0
- {calkit_python-0.37.0 → calkit_python-0.37.1}/calkit/cli/office.py +0 -0
- {calkit_python-0.37.0 → calkit_python-0.37.1}/calkit/cli/overleaf.py +0 -0
- {calkit_python-0.37.0 → calkit_python-0.37.1}/calkit/cli/slurm.py +0 -0
- {calkit_python-0.37.0 → calkit_python-0.37.1}/calkit/cloud.py +0 -0
- {calkit_python-0.37.0 → calkit_python-0.37.1}/calkit/conda.py +0 -0
- {calkit_python-0.37.0 → calkit_python-0.37.1}/calkit/config.py +0 -0
- {calkit_python-0.37.0 → calkit_python-0.37.1}/calkit/core.py +0 -0
- {calkit_python-0.37.0 → calkit_python-0.37.1}/calkit/datasets.py +0 -0
- {calkit_python-0.37.0 → calkit_python-0.37.1}/calkit/detect.py +0 -0
- {calkit_python-0.37.0 → calkit_python-0.37.1}/calkit/docker.py +0 -0
- {calkit_python-0.37.0 → calkit_python-0.37.1}/calkit/dvc/__init__.py +0 -0
- {calkit_python-0.37.0 → calkit_python-0.37.1}/calkit/dvc/zip.py +0 -0
- {calkit_python-0.37.0 → calkit_python-0.37.1}/calkit/environments.py +0 -0
- {calkit_python-0.37.0 → calkit_python-0.37.1}/calkit/fs.py +0 -0
- {calkit_python-0.37.0 → calkit_python-0.37.1}/calkit/git.py +0 -0
- {calkit_python-0.37.0 → calkit_python-0.37.1}/calkit/github.py +0 -0
- {calkit_python-0.37.0 → calkit_python-0.37.1}/calkit/gui.py +0 -0
- {calkit_python-0.37.0 → calkit_python-0.37.1}/calkit/invenio.py +0 -0
- {calkit_python-0.37.0 → calkit_python-0.37.1}/calkit/julia.py +0 -0
- {calkit_python-0.37.0 → calkit_python-0.37.1}/calkit/jupyter.py +0 -0
- {calkit_python-0.37.0 → calkit_python-0.37.1}/calkit/jupyterlab/__init__.py +0 -0
- {calkit_python-0.37.0 → calkit_python-0.37.1}/calkit/jupyterlab/routes.py +0 -0
- {calkit_python-0.37.0 → calkit_python-0.37.1}/calkit/labextension/package.json +0 -0
- {calkit_python-0.37.0 → calkit_python-0.37.1}/calkit/labextension/schemas/calkit/package.json.orig +0 -0
- {calkit_python-0.37.0 → calkit_python-0.37.1}/calkit/labextension/schemas/calkit/plugin.json +0 -0
- {calkit_python-0.37.0 → calkit_python-0.37.1}/calkit/labextension/static/502.9a2c5772a15466e923ef.js +0 -0
- {calkit_python-0.37.0 → calkit_python-0.37.1}/calkit/labextension/static/695.2c41003a452d43d2b358.js +0 -0
- {calkit_python-0.37.0 → calkit_python-0.37.1}/calkit/labextension/static/867.a42a046aa5108f54f8fb.js +0 -0
- {calkit_python-0.37.0 → calkit_python-0.37.1}/calkit/labextension/static/909.651be47ca47390b78a92.js +0 -0
- {calkit_python-0.37.0 → calkit_python-0.37.1}/calkit/labextension/static/946.050af2abf7845cfbdbd2.js +0 -0
- {calkit_python-0.37.0 → calkit_python-0.37.1}/calkit/labextension/static/946.050af2abf7845cfbdbd2.js.LICENSE.txt +0 -0
- {calkit_python-0.37.0 → calkit_python-0.37.1}/calkit/labextension/static/b2f1c3efe70cb539d121.png +0 -0
- {calkit_python-0.37.0 → calkit_python-0.37.1}/calkit/labextension/static/remoteEntry.c091821b3d7f2d287a67.js +0 -0
- {calkit_python-0.37.0 → calkit_python-0.37.1}/calkit/labextension/static/style.js +0 -0
- {calkit_python-0.37.0 → calkit_python-0.37.1}/calkit/labextension/static/third-party-licenses.json +0 -0
- {calkit_python-0.37.0 → calkit_python-0.37.1}/calkit/licenses.py +0 -0
- {calkit_python-0.37.0 → calkit_python-0.37.1}/calkit/magics.py +0 -0
- {calkit_python-0.37.0 → calkit_python-0.37.1}/calkit/matlab.py +0 -0
- {calkit_python-0.37.0 → calkit_python-0.37.1}/calkit/models/__init__.py +0 -0
- {calkit_python-0.37.0 → calkit_python-0.37.1}/calkit/models/core.py +0 -0
- {calkit_python-0.37.0 → calkit_python-0.37.1}/calkit/models/io.py +0 -0
- {calkit_python-0.37.0 → calkit_python-0.37.1}/calkit/models/iteration.py +0 -0
- {calkit_python-0.37.0 → calkit_python-0.37.1}/calkit/models/pipeline.py +0 -0
- {calkit_python-0.37.0 → calkit_python-0.37.1}/calkit/notebooks.py +0 -0
- {calkit_python-0.37.0 → calkit_python-0.37.1}/calkit/office.py +0 -0
- {calkit_python-0.37.0 → calkit_python-0.37.1}/calkit/ops.py +0 -0
- {calkit_python-0.37.0 → calkit_python-0.37.1}/calkit/overleaf.py +0 -0
- {calkit_python-0.37.0 → calkit_python-0.37.1}/calkit/server.py +0 -0
- {calkit_python-0.37.0 → calkit_python-0.37.1}/calkit/templates/__init__.py +0 -0
- {calkit_python-0.37.0 → calkit_python-0.37.1}/calkit/templates/core.py +0 -0
- {calkit_python-0.37.0 → calkit_python-0.37.1}/calkit/templates/latex/__init__.py +0 -0
- {calkit_python-0.37.0 → calkit_python-0.37.1}/calkit/templates/latex/article/paper.tex +0 -0
- {calkit_python-0.37.0 → calkit_python-0.37.1}/calkit/templates/latex/core.py +0 -0
- {calkit_python-0.37.0 → calkit_python-0.37.1}/calkit/templates/latex/jfm/jfm.bst +0 -0
- {calkit_python-0.37.0 → calkit_python-0.37.1}/calkit/templates/latex/jfm/jfm.cls +0 -0
- {calkit_python-0.37.0 → calkit_python-0.37.1}/calkit/templates/latex/jfm/lineno-FLM.sty +0 -0
- {calkit_python-0.37.0 → calkit_python-0.37.1}/calkit/templates/latex/jfm/paper.tex +0 -0
- {calkit_python-0.37.0 → calkit_python-0.37.1}/calkit/templates/latex/jfm/upmath.sty +0 -0
- {calkit_python-0.37.0 → calkit_python-0.37.1}/calkit/tests/__init__.py +0 -0
- {calkit_python-0.37.0 → calkit_python-0.37.1}/calkit/tests/cli/__init__.py +0 -0
- {calkit_python-0.37.0 → calkit_python-0.37.1}/calkit/tests/cli/main/__init__.py +0 -0
- {calkit_python-0.37.0 → calkit_python-0.37.1}/calkit/tests/cli/main/test_core.py +0 -0
- {calkit_python-0.37.0 → calkit_python-0.37.1}/calkit/tests/cli/main/test_xr.py +0 -0
- {calkit_python-0.37.0 → calkit_python-0.37.1}/calkit/tests/cli/test_check.py +0 -0
- {calkit_python-0.37.0 → calkit_python-0.37.1}/calkit/tests/cli/test_config.py +0 -0
- {calkit_python-0.37.0 → calkit_python-0.37.1}/calkit/tests/cli/test_import.py +0 -0
- {calkit_python-0.37.0 → calkit_python-0.37.1}/calkit/tests/cli/test_latex.py +0 -0
- {calkit_python-0.37.0 → calkit_python-0.37.1}/calkit/tests/cli/test_list.py +0 -0
- {calkit_python-0.37.0 → calkit_python-0.37.1}/calkit/tests/cli/test_new.py +0 -0
- {calkit_python-0.37.0 → calkit_python-0.37.1}/calkit/tests/cli/test_notebooks.py +0 -0
- {calkit_python-0.37.0 → calkit_python-0.37.1}/calkit/tests/cli/test_overleaf.py +0 -0
- {calkit_python-0.37.0 → calkit_python-0.37.1}/calkit/tests/cli/test_update.py +0 -0
- {calkit_python-0.37.0 → calkit_python-0.37.1}/calkit/tests/dvc/__init__.py +0 -0
- {calkit_python-0.37.0 → calkit_python-0.37.1}/calkit/tests/dvc/test_zip.py +0 -0
- {calkit_python-0.37.0 → calkit_python-0.37.1}/calkit/tests/jupyterlab/__init__.py +0 -0
- {calkit_python-0.37.0 → calkit_python-0.37.1}/calkit/tests/jupyterlab/test_routes.py +0 -0
- {calkit_python-0.37.0 → calkit_python-0.37.1}/calkit/tests/models/__init__.py +0 -0
- {calkit_python-0.37.0 → calkit_python-0.37.1}/calkit/tests/models/test_iteration.py +0 -0
- {calkit_python-0.37.0 → calkit_python-0.37.1}/calkit/tests/models/test_pipeline.py +0 -0
- {calkit_python-0.37.0 → calkit_python-0.37.1}/calkit/tests/test_calc.py +0 -0
- {calkit_python-0.37.0 → calkit_python-0.37.1}/calkit/tests/test_check.py +0 -0
- {calkit_python-0.37.0 → calkit_python-0.37.1}/calkit/tests/test_conda.py +0 -0
- {calkit_python-0.37.0 → calkit_python-0.37.1}/calkit/tests/test_core.py +0 -0
- {calkit_python-0.37.0 → calkit_python-0.37.1}/calkit/tests/test_detect.py +0 -0
- {calkit_python-0.37.0 → calkit_python-0.37.1}/calkit/tests/test_docker.py +0 -0
- {calkit_python-0.37.0 → calkit_python-0.37.1}/calkit/tests/test_environments.py +0 -0
- {calkit_python-0.37.0 → calkit_python-0.37.1}/calkit/tests/test_fs.py +0 -0
- {calkit_python-0.37.0 → calkit_python-0.37.1}/calkit/tests/test_git.py +0 -0
- {calkit_python-0.37.0 → calkit_python-0.37.1}/calkit/tests/test_invenio.py +0 -0
- {calkit_python-0.37.0 → calkit_python-0.37.1}/calkit/tests/test_julia.py +0 -0
- {calkit_python-0.37.0 → calkit_python-0.37.1}/calkit/tests/test_jupyter.py +0 -0
- {calkit_python-0.37.0 → calkit_python-0.37.1}/calkit/tests/test_magics.py +0 -0
- {calkit_python-0.37.0 → calkit_python-0.37.1}/calkit/tests/test_matlab.py +0 -0
- {calkit_python-0.37.0 → calkit_python-0.37.1}/calkit/tests/test_notebooks.py +0 -0
- {calkit_python-0.37.0 → calkit_python-0.37.1}/calkit/tests/test_pipeline.py +0 -0
- {calkit_python-0.37.0 → calkit_python-0.37.1}/calkit/tests/test_templates.py +0 -0
- {calkit_python-0.37.0 → calkit_python-0.37.1}/conftest.py +0 -0
- {calkit_python-0.37.0 → calkit_python-0.37.1}/docs/CNAME +0 -0
- {calkit_python-0.37.0 → calkit_python-0.37.1}/docs/apps.md +0 -0
- {calkit_python-0.37.0 → calkit_python-0.37.1}/docs/calculations.md +0 -0
- {calkit_python-0.37.0 → calkit_python-0.37.1}/docs/calkit-yaml.md +0 -0
- {calkit_python-0.37.0 → calkit_python-0.37.1}/docs/cloud-integration.md +0 -0
- {calkit_python-0.37.0 → calkit_python-0.37.1}/docs/datasets.md +0 -0
- {calkit_python-0.37.0 → calkit_python-0.37.1}/docs/dependencies.md +0 -0
- {calkit_python-0.37.0 → calkit_python-0.37.1}/docs/environments.md +0 -0
- {calkit_python-0.37.0 → calkit_python-0.37.1}/docs/examples.md +0 -0
- {calkit_python-0.37.0 → calkit_python-0.37.1}/docs/governance.md +0 -0
- {calkit_python-0.37.0 → calkit_python-0.37.1}/docs/help.md +0 -0
- {calkit_python-0.37.0 → calkit_python-0.37.1}/docs/img/c-to-the-k-white.svg +0 -0
- {calkit_python-0.37.0 → calkit_python-0.37.1}/docs/img/calkit-fragmentation-compendium.png +0 -0
- {calkit_python-0.37.0 → calkit_python-0.37.1}/docs/img/calkit-no-bg.png +0 -0
- {calkit_python-0.37.0 → calkit_python-0.37.1}/docs/img/connect-zenodo.png +0 -0
- {calkit_python-0.37.0 → calkit_python-0.37.1}/docs/img/jupyterlab/all-green.png +0 -0
- {calkit_python-0.37.0 → calkit_python-0.37.1}/docs/img/jupyterlab/collect-data-stale.png +0 -0
- {calkit_python-0.37.0 → calkit_python-0.37.1}/docs/img/jupyterlab/new-env.png +0 -0
- {calkit_python-0.37.0 → calkit_python-0.37.1}/docs/img/jupyterlab/new-notebook.png +0 -0
- {calkit_python-0.37.0 → calkit_python-0.37.1}/docs/img/jupyterlab/pipeline-badge.png +0 -0
- {calkit_python-0.37.0 → calkit_python-0.37.1}/docs/img/jupyterlab-params.png +0 -0
- {calkit_python-0.37.0 → calkit_python-0.37.1}/docs/img/plos-osi-code-2024-03.png +0 -0
- {calkit_python-0.37.0 → calkit_python-0.37.1}/docs/img/vscode-nb-params.png +0 -0
- {calkit_python-0.37.0 → calkit_python-0.37.1}/docs/index.md +0 -0
- {calkit_python-0.37.0 → calkit_python-0.37.1}/docs/installation.md +0 -0
- {calkit_python-0.37.0 → calkit_python-0.37.1}/docs/jupyterlab.md +0 -0
- {calkit_python-0.37.0 → calkit_python-0.37.1}/docs/local-server.md +0 -0
- {calkit_python-0.37.0 → calkit_python-0.37.1}/docs/notebooks.md +0 -0
- {calkit_python-0.37.0 → calkit_python-0.37.1}/docs/overleaf.md +0 -0
- {calkit_python-0.37.0 → calkit_python-0.37.1}/docs/pipeline/index.md +0 -0
- {calkit_python-0.37.0 → calkit_python-0.37.1}/docs/pipeline/manual-steps.md +0 -0
- {calkit_python-0.37.0 → calkit_python-0.37.1}/docs/pipeline/running-and-logging.md +0 -0
- {calkit_python-0.37.0 → calkit_python-0.37.1}/docs/pipeline/slurm.md +0 -0
- {calkit_python-0.37.0 → calkit_python-0.37.1}/docs/quickstart.md +0 -0
- {calkit_python-0.37.0 → calkit_python-0.37.1}/docs/references.md +0 -0
- {calkit_python-0.37.0 → calkit_python-0.37.1}/docs/releases.md +0 -0
- {calkit_python-0.37.0 → calkit_python-0.37.1}/docs/reproducibility.md +0 -0
- {calkit_python-0.37.0 → calkit_python-0.37.1}/docs/tutorials/adding-latex-pub-docker.md +0 -0
- {calkit_python-0.37.0 → calkit_python-0.37.1}/docs/tutorials/conda-envs.md +0 -0
- {calkit_python-0.37.0 → calkit_python-0.37.1}/docs/tutorials/existing-project.md +0 -0
- {calkit_python-0.37.0 → calkit_python-0.37.1}/docs/tutorials/first-project.md +0 -0
- {calkit_python-0.37.0 → calkit_python-0.37.1}/docs/tutorials/github-actions.md +0 -0
- {calkit_python-0.37.0 → calkit_python-0.37.1}/docs/tutorials/img/actions-repo-secrets.png +0 -0
- {calkit_python-0.37.0 → calkit_python-0.37.1}/docs/tutorials/img/latex-codespaces/building-codespace.png +0 -0
- {calkit_python-0.37.0 → calkit_python-0.37.1}/docs/tutorials/img/latex-codespaces/codespaces-secrets-2.png +0 -0
- {calkit_python-0.37.0 → calkit_python-0.37.1}/docs/tutorials/img/latex-codespaces/editor-split.png +0 -0
- {calkit_python-0.37.0 → calkit_python-0.37.1}/docs/tutorials/img/latex-codespaces/go-to-linked-code.png +0 -0
- {calkit_python-0.37.0 → calkit_python-0.37.1}/docs/tutorials/img/latex-codespaces/issue-from-selection.png +0 -0
- {calkit_python-0.37.0 → calkit_python-0.37.1}/docs/tutorials/img/latex-codespaces/new-project.png +0 -0
- {calkit_python-0.37.0 → calkit_python-0.37.1}/docs/tutorials/img/latex-codespaces/new-pub-2.png +0 -0
- {calkit_python-0.37.0 → calkit_python-0.37.1}/docs/tutorials/img/latex-codespaces/new-token.png +0 -0
- {calkit_python-0.37.0 → calkit_python-0.37.1}/docs/tutorials/img/latex-codespaces/paper.tex.png +0 -0
- {calkit_python-0.37.0 → calkit_python-0.37.1}/docs/tutorials/img/latex-codespaces/project-home-3.png +0 -0
- {calkit_python-0.37.0 → calkit_python-0.37.1}/docs/tutorials/img/latex-codespaces/push.png +0 -0
- {calkit_python-0.37.0 → calkit_python-0.37.1}/docs/tutorials/img/latex-codespaces/stage.png +0 -0
- {calkit_python-0.37.0 → calkit_python-0.37.1}/docs/tutorials/img/office/anakin-excel.jpg +0 -0
- {calkit_python-0.37.0 → calkit_python-0.37.1}/docs/tutorials/img/office/chart-more-rows.png +0 -0
- {calkit_python-0.37.0 → calkit_python-0.37.1}/docs/tutorials/img/office/create-project.png +0 -0
- {calkit_python-0.37.0 → calkit_python-0.37.1}/docs/tutorials/img/office/elsevier-research-data-guidelines.png +0 -0
- {calkit_python-0.37.0 → calkit_python-0.37.1}/docs/tutorials/img/office/excel-chart.png +0 -0
- {calkit_python-0.37.0 → calkit_python-0.37.1}/docs/tutorials/img/office/excel-data.png +0 -0
- {calkit_python-0.37.0 → calkit_python-0.37.1}/docs/tutorials/img/office/insert-link-to-file.png +0 -0
- {calkit_python-0.37.0 → calkit_python-0.37.1}/docs/tutorials/img/office/needs-clone.png +0 -0
- {calkit_python-0.37.0 → calkit_python-0.37.1}/docs/tutorials/img/office/new-stage.png +0 -0
- {calkit_python-0.37.0 → calkit_python-0.37.1}/docs/tutorials/img/office/phd-comics-version-control.webp +0 -0
- {calkit_python-0.37.0 → calkit_python-0.37.1}/docs/tutorials/img/office/pipeline-out-of-date.png +0 -0
- {calkit_python-0.37.0 → calkit_python-0.37.1}/docs/tutorials/img/office/status-more-rows.png +0 -0
- {calkit_python-0.37.0 → calkit_python-0.37.1}/docs/tutorials/img/office/uncommitted-changes.png +0 -0
- {calkit_python-0.37.0 → calkit_python-0.37.1}/docs/tutorials/img/office/untracked-data.png +0 -0
- {calkit_python-0.37.0 → calkit_python-0.37.1}/docs/tutorials/img/office/updated-publication.png +0 -0
- {calkit_python-0.37.0 → calkit_python-0.37.1}/docs/tutorials/img/office/word-to-pdf-stage-2.png +0 -0
- {calkit_python-0.37.0 → calkit_python-0.37.1}/docs/tutorials/img/office/workflow-page.png +0 -0
- {calkit_python-0.37.0 → calkit_python-0.37.1}/docs/tutorials/img/openfoam/clone.png +0 -0
- {calkit_python-0.37.0 → calkit_python-0.37.1}/docs/tutorials/img/openfoam/create-project.png +0 -0
- {calkit_python-0.37.0 → calkit_python-0.37.1}/docs/tutorials/img/openfoam/datasets-page.png +0 -0
- {calkit_python-0.37.0 → calkit_python-0.37.1}/docs/tutorials/img/openfoam/figure-on-website-updated.png +0 -0
- {calkit_python-0.37.0 → calkit_python-0.37.1}/docs/tutorials/img/openfoam/figure-on-website.png +0 -0
- {calkit_python-0.37.0 → calkit_python-0.37.1}/docs/tutorials/img/openfoam/new-token.png +0 -0
- {calkit_python-0.37.0 → calkit_python-0.37.1}/docs/tutorials/img/openfoam/reclone.png +0 -0
- {calkit_python-0.37.0 → calkit_python-0.37.1}/docs/tutorials/img/openfoam/status-after-import-dataset.png +0 -0
- {calkit_python-0.37.0 → calkit_python-0.37.1}/docs/tutorials/img/quick-actions.png +0 -0
- {calkit_python-0.37.0 → calkit_python-0.37.1}/docs/tutorials/img/run-proc.png +0 -0
- {calkit_python-0.37.0 → calkit_python-0.37.1}/docs/tutorials/index.md +0 -0
- {calkit_python-0.37.0 → calkit_python-0.37.1}/docs/tutorials/jupyterlab.md +0 -0
- {calkit_python-0.37.0 → calkit_python-0.37.1}/docs/tutorials/latex-codespaces.md +0 -0
- {calkit_python-0.37.0 → calkit_python-0.37.1}/docs/tutorials/matlab.md +0 -0
- {calkit_python-0.37.0 → calkit_python-0.37.1}/docs/tutorials/notebook-pipeline.md +0 -0
- {calkit_python-0.37.0 → calkit_python-0.37.1}/docs/tutorials/office.md +0 -0
- {calkit_python-0.37.0 → calkit_python-0.37.1}/docs/tutorials/openfoam.md +0 -0
- {calkit_python-0.37.0 → calkit_python-0.37.1}/docs/tutorials/procedures.md +0 -0
- {calkit_python-0.37.0 → calkit_python-0.37.1}/install.json +0 -0
- {calkit_python-0.37.0 → calkit_python-0.37.1}/jest.config.js +0 -0
- {calkit_python-0.37.0 → calkit_python-0.37.1}/jupyter-config/server-config/calkit.json +0 -0
- {calkit_python-0.37.0 → calkit_python-0.37.1}/mkdocs.yml +0 -0
- {calkit_python-0.37.0 → calkit_python-0.37.1}/package.json +0 -0
- {calkit_python-0.37.0 → calkit_python-0.37.1}/pyproject.toml +0 -0
- {calkit_python-0.37.0 → calkit_python-0.37.1}/schema/plugin.json +0 -0
- {calkit_python-0.37.0 → calkit_python-0.37.1}/scripts/install.ps1 +0 -0
- {calkit_python-0.37.0 → calkit_python-0.37.1}/scripts/install.sh +0 -0
- {calkit_python-0.37.0 → calkit_python-0.37.1}/scripts/make-calk9.sh +0 -0
- {calkit_python-0.37.0 → calkit_python-0.37.1}/scripts/sync-docs.py +0 -0
- {calkit_python-0.37.0 → calkit_python-0.37.1}/src/__tests__/useQueries.spec.ts +0 -0
- {calkit_python-0.37.0 → calkit_python-0.37.1}/src/calkit-config.ts +0 -0
- {calkit_python-0.37.0 → calkit_python-0.37.1}/src/cell-output-marker.ts +0 -0
- {calkit_python-0.37.0 → calkit_python-0.37.1}/src/components/commit-dialog.tsx +0 -0
- {calkit_python-0.37.0 → calkit_python-0.37.1}/src/components/environment-editor.tsx +0 -0
- {calkit_python-0.37.0 → calkit_python-0.37.1}/src/components/notebook-registration.tsx +0 -0
- {calkit_python-0.37.0 → calkit_python-0.37.1}/src/components/notebook-toolbar.tsx +0 -0
- {calkit_python-0.37.0 → calkit_python-0.37.1}/src/components/pipeline-status-bar.tsx +0 -0
- {calkit_python-0.37.0 → calkit_python-0.37.1}/src/components/project-info-editor.tsx +0 -0
- {calkit_python-0.37.0 → calkit_python-0.37.1}/src/components/sidebar-settings.tsx +0 -0
- {calkit_python-0.37.0 → calkit_python-0.37.1}/src/components/sidebar.tsx +0 -0
- {calkit_python-0.37.0 → calkit_python-0.37.1}/src/components/stage-editor.tsx +0 -0
- {calkit_python-0.37.0 → calkit_python-0.37.1}/src/feature-flags.ts +0 -0
- {calkit_python-0.37.0 → calkit_python-0.37.1}/src/file-browser-menu.ts +0 -0
- {calkit_python-0.37.0 → calkit_python-0.37.1}/src/hooks/__tests__/useQueries.test.tsx +0 -0
- {calkit_python-0.37.0 → calkit_python-0.37.1}/src/hooks/useQueries.ts +0 -0
- {calkit_python-0.37.0 → calkit_python-0.37.1}/src/icons.ts +0 -0
- {calkit_python-0.37.0 → calkit_python-0.37.1}/src/index.ts +0 -0
- {calkit_python-0.37.0 → calkit_python-0.37.1}/src/io-tracker.ts +0 -0
- {calkit_python-0.37.0 → calkit_python-0.37.1}/src/pipeline-state.ts +0 -0
- {calkit_python-0.37.0 → calkit_python-0.37.1}/src/queryClient.ts +0 -0
- {calkit_python-0.37.0 → calkit_python-0.37.1}/src/request.ts +0 -0
- {calkit_python-0.37.0 → calkit_python-0.37.1}/src/shims-mainmenu.d.ts +0 -0
- {calkit_python-0.37.0 → calkit_python-0.37.1}/style/base.css +0 -0
- {calkit_python-0.37.0 → calkit_python-0.37.1}/style/cell-output-marker.css +0 -0
- {calkit_python-0.37.0 → calkit_python-0.37.1}/style/environment-editor.css +0 -0
- {calkit_python-0.37.0 → calkit_python-0.37.1}/style/environment-selector.css +0 -0
- {calkit_python-0.37.0 → calkit_python-0.37.1}/style/img/calkit-no-bg.png +0 -0
- {calkit_python-0.37.0 → calkit_python-0.37.1}/style/index.css +0 -0
- {calkit_python-0.37.0 → calkit_python-0.37.1}/style/index.js +0 -0
- {calkit_python-0.37.0 → calkit_python-0.37.1}/style/notebook-toolbar.css +0 -0
- {calkit_python-0.37.0 → calkit_python-0.37.1}/style/pipeline-status-bar.css +0 -0
- {calkit_python-0.37.0 → calkit_python-0.37.1}/style/sidebar.css +0 -0
- {calkit_python-0.37.0 → calkit_python-0.37.1}/test/dvc-md5-dir/osx-arm64.txt +0 -0
- {calkit_python-0.37.0 → calkit_python-0.37.1}/test/nb-julia.ipynb +0 -0
- {calkit_python-0.37.0 → calkit_python-0.37.1}/test/nb-params.ipynb +0 -0
- {calkit_python-0.37.0 → calkit_python-0.37.1}/test/nb-subdir.ipynb +0 -0
- {calkit_python-0.37.0 → calkit_python-0.37.1}/test/pipeline.ipynb +0 -0
- {calkit_python-0.37.0 → calkit_python-0.37.1}/test/script.py +0 -0
- {calkit_python-0.37.0 → calkit_python-0.37.1}/test/test-log.log +0 -0
- {calkit_python-0.37.0 → calkit_python-0.37.1}/tsconfig.json +0 -0
- {calkit_python-0.37.0 → calkit_python-0.37.1}/tsconfig.test.json +0 -0
- {calkit_python-0.37.0 → calkit_python-0.37.1}/ui-tests/.gitignore +0 -0
- {calkit_python-0.37.0 → calkit_python-0.37.1}/ui-tests/README.md +0 -0
- {calkit_python-0.37.0 → calkit_python-0.37.1}/ui-tests/jupyter_server_test_config.py +0 -0
- {calkit_python-0.37.0 → calkit_python-0.37.1}/ui-tests/package.json +0 -0
- {calkit_python-0.37.0 → calkit_python-0.37.1}/ui-tests/playwright.config.js +0 -0
- {calkit_python-0.37.0 → calkit_python-0.37.1}/ui-tests/tests/calkit.spec.ts +0 -0
- {calkit_python-0.37.0 → calkit_python-0.37.1}/ui-tests/yarn.lock +0 -0
- {calkit_python-0.37.0 → calkit_python-0.37.1}/uv.lock +0 -0
- {calkit_python-0.37.0 → calkit_python-0.37.1}/vscode-ext/.gitignore +0 -0
- {calkit_python-0.37.0 → calkit_python-0.37.1}/vscode-ext/.vscodeignore +0 -0
- {calkit_python-0.37.0 → calkit_python-0.37.1}/vscode-ext/CHANGELOG.md +0 -0
- {calkit_python-0.37.0 → calkit_python-0.37.1}/vscode-ext/LICENSE +0 -0
- {calkit_python-0.37.0 → calkit_python-0.37.1}/vscode-ext/README.md +0 -0
- {calkit_python-0.37.0 → calkit_python-0.37.1}/vscode-ext/images/calkit-no-bg.png +0 -0
- {calkit_python-0.37.0 → calkit_python-0.37.1}/vscode-ext/package-lock.json +0 -0
- {calkit_python-0.37.0 → calkit_python-0.37.1}/vscode-ext/package.json +0 -0
- {calkit_python-0.37.0 → calkit_python-0.37.1}/vscode-ext/scripts/set-proposed-api.js +0 -0
- {calkit_python-0.37.0 → calkit_python-0.37.1}/vscode-ext/src/environments.ts +0 -0
- {calkit_python-0.37.0 → calkit_python-0.37.1}/vscode-ext/src/extension.ts +0 -0
- {calkit_python-0.37.0 → calkit_python-0.37.1}/vscode-ext/src/notebooks.ts +0 -0
- {calkit_python-0.37.0 → calkit_python-0.37.1}/vscode-ext/src/test/environments.test.ts +0 -0
- {calkit_python-0.37.0 → calkit_python-0.37.1}/vscode-ext/src/test/notebooks.test.ts +0 -0
- {calkit_python-0.37.0 → calkit_python-0.37.1}/vscode-ext/src/types.ts +0 -0
- {calkit_python-0.37.0 → calkit_python-0.37.1}/vscode-ext/tsconfig.json +0 -0
- {calkit_python-0.37.0 → calkit_python-0.37.1}/yarn.lock +0 -0
|
@@ -70,6 +70,13 @@ def unset_config_value(key: str):
|
|
|
70
70
|
@config_app.command(name="setup-remote", help="Alias for 'remote'.")
|
|
71
71
|
@config_app.command(name="remote")
|
|
72
72
|
def setup_remote(
|
|
73
|
+
ck: Annotated[
|
|
74
|
+
bool,
|
|
75
|
+
typer.Option(
|
|
76
|
+
"--ck",
|
|
77
|
+
help="Use a ck:// URL for the 'calkit' DVC remote.",
|
|
78
|
+
),
|
|
79
|
+
] = False,
|
|
73
80
|
no_commit: Annotated[
|
|
74
81
|
bool,
|
|
75
82
|
typer.Option(
|
|
@@ -81,7 +88,7 @@ def setup_remote(
|
|
|
81
88
|
the local config.
|
|
82
89
|
"""
|
|
83
90
|
try:
|
|
84
|
-
configure_remote()
|
|
91
|
+
configure_remote(use_ck=ck)
|
|
85
92
|
set_remote_auth()
|
|
86
93
|
except subprocess.CalledProcessError:
|
|
87
94
|
if not os.path.isfile(".dvc/config"):
|
|
@@ -347,8 +347,6 @@ def get_status(
|
|
|
347
347
|
clean_notebooks=True,
|
|
348
348
|
compile_to_dvc=True,
|
|
349
349
|
)
|
|
350
|
-
for error in pipeline_status.errors:
|
|
351
|
-
warn(error)
|
|
352
350
|
if pipeline_status.failed_environment_checks:
|
|
353
351
|
warn(
|
|
354
352
|
"Failed pipeline environment checks for: "
|
|
@@ -469,7 +467,9 @@ def get_status(
|
|
|
469
467
|
print_sep("Pipeline")
|
|
470
468
|
# Nicely format the results from pipeline status
|
|
471
469
|
if pipeline_status and pipeline_status.errors:
|
|
472
|
-
warn("Pipeline status unavailable due to errors
|
|
470
|
+
warn("Pipeline status unavailable due to errors:")
|
|
471
|
+
for error in pipeline_status.errors:
|
|
472
|
+
warn(error)
|
|
473
473
|
return
|
|
474
474
|
if pipeline_status and not pipeline_status.has_pipeline:
|
|
475
475
|
typer.echo("This project has no pipeline.")
|
|
@@ -482,7 +482,7 @@ def get_status(
|
|
|
482
482
|
continue
|
|
483
483
|
typer.echo(f" {typer.style(stage_name, fg='yellow')}:")
|
|
484
484
|
if stale_stage.modified_command:
|
|
485
|
-
typer.echo("
|
|
485
|
+
typer.echo(" modified command")
|
|
486
486
|
# Show stale outputs for this stage
|
|
487
487
|
if stale_stage.stale_outputs:
|
|
488
488
|
typer.echo(" stale outputs:")
|
|
@@ -7,7 +7,6 @@ import os
|
|
|
7
7
|
import pathlib
|
|
8
8
|
import shutil
|
|
9
9
|
import subprocess
|
|
10
|
-
import zipfile
|
|
11
10
|
from enum import Enum
|
|
12
11
|
|
|
13
12
|
import dotenv
|
|
@@ -2686,8 +2685,7 @@ def new_release(
|
|
|
2686
2685
|
zip_path = release_files_dir + "/archive.zip"
|
|
2687
2686
|
all_paths = calkit.releases.ls_files()
|
|
2688
2687
|
typer.echo(f"Adding files to {zip_path}")
|
|
2689
|
-
|
|
2690
|
-
calkit.releases.add_paths_to_zip(zipf, all_paths)
|
|
2688
|
+
calkit.releases.zip_paths(zip_path, all_paths)
|
|
2691
2689
|
typer.echo("Checking extracted project release archive")
|
|
2692
2690
|
try:
|
|
2693
2691
|
calkit.releases.check_project_release_archive(
|
|
@@ -4,7 +4,6 @@ from __future__ import annotations
|
|
|
4
4
|
|
|
5
5
|
import json
|
|
6
6
|
import os
|
|
7
|
-
import zipfile
|
|
8
7
|
from datetime import datetime
|
|
9
8
|
|
|
10
9
|
import git
|
|
@@ -266,8 +265,7 @@ def update_release(
|
|
|
266
265
|
zip_path = release_files_dir + "/archive.zip"
|
|
267
266
|
all_paths = calkit.releases.ls_files()
|
|
268
267
|
typer.echo(f"Adding files to {zip_path}")
|
|
269
|
-
|
|
270
|
-
calkit.releases.add_paths_to_zip(zipf, all_paths)
|
|
268
|
+
calkit.releases.zip_paths(zip_path, all_paths)
|
|
271
269
|
typer.echo("Checking project release archive")
|
|
272
270
|
try:
|
|
273
271
|
calkit.releases.check_project_release_archive(zip_path)
|
|
@@ -11,6 +11,7 @@ from typing import Any
|
|
|
11
11
|
|
|
12
12
|
import dvc.repo
|
|
13
13
|
import git
|
|
14
|
+
from configobj import ConfigObj
|
|
14
15
|
from dvc.utils.objects import cached_property
|
|
15
16
|
from dvc_objects.fs.base import ObjectFileSystem
|
|
16
17
|
from fsspec import Callback
|
|
@@ -251,10 +252,10 @@ def run_dvc_command(argv: list[str], cwd: str | None = None) -> int:
|
|
|
251
252
|
return run_dvc_cli(argv)
|
|
252
253
|
|
|
253
254
|
|
|
254
|
-
def configure_remote(wdir: str | None = None) -> str:
|
|
255
|
+
def configure_remote(wdir: str | None = None, use_ck: bool = False) -> str:
|
|
255
256
|
"""Configure a DVC remote for the current project.
|
|
256
257
|
|
|
257
|
-
TODO: Use the ck:// scheme.
|
|
258
|
+
TODO: Use the ck:// scheme by default once it's deemed stable.
|
|
258
259
|
"""
|
|
259
260
|
try:
|
|
260
261
|
project_name = calkit.detect_project_name(wdir=wdir)
|
|
@@ -275,8 +276,12 @@ def configure_remote(wdir: str | None = None) -> str:
|
|
|
275
276
|
if not url.endswith(".git"):
|
|
276
277
|
url += ".git"
|
|
277
278
|
repo.git.remote(["add", "origin", url])
|
|
278
|
-
|
|
279
|
-
|
|
279
|
+
if use_ck:
|
|
280
|
+
clear_remote_local_http_auth(wdir=wdir)
|
|
281
|
+
remote_url = f"ck://{project_name}"
|
|
282
|
+
else:
|
|
283
|
+
base_url = calkit.cloud.get_base_url()
|
|
284
|
+
remote_url = f"{base_url}/projects/{project_name}/dvc"
|
|
280
285
|
remote_name = get_app_name()
|
|
281
286
|
result = run_dvc_command(
|
|
282
287
|
["remote", "add", "-d", "-f", remote_name, remote_url],
|
|
@@ -284,17 +289,47 @@ def configure_remote(wdir: str | None = None) -> str:
|
|
|
284
289
|
)
|
|
285
290
|
if result != 0:
|
|
286
291
|
raise RuntimeError(f"Failed to add DVC remote {remote_name}")
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
if result != 0:
|
|
292
|
-
raise RuntimeError(
|
|
293
|
-
f"Failed to configure auth for DVC remote {remote_name}"
|
|
292
|
+
if not use_ck:
|
|
293
|
+
result = run_dvc_command(
|
|
294
|
+
["remote", "modify", remote_name, "auth", "custom"],
|
|
295
|
+
cwd=wdir,
|
|
294
296
|
)
|
|
297
|
+
if result != 0:
|
|
298
|
+
raise RuntimeError(
|
|
299
|
+
f"Failed to configure auth for DVC remote {remote_name}"
|
|
300
|
+
)
|
|
295
301
|
return remote_name
|
|
296
302
|
|
|
297
303
|
|
|
304
|
+
def clear_remote_local_http_auth(
|
|
305
|
+
remote_name: str | None = None, wdir: str | None = None
|
|
306
|
+
) -> None:
|
|
307
|
+
"""Remove HTTP-specific local auth settings for a DVC remote.
|
|
308
|
+
|
|
309
|
+
This clears values written to ``.dvc/config.local`` by HTTP auth setup.
|
|
310
|
+
"""
|
|
311
|
+
if remote_name is None:
|
|
312
|
+
remote_name = get_app_name()
|
|
313
|
+
config_local = Path(wdir or ".") / ".dvc" / "config.local"
|
|
314
|
+
if not config_local.is_file():
|
|
315
|
+
return
|
|
316
|
+
cfg = ConfigObj(str(config_local), encoding="utf-8")
|
|
317
|
+
section_name = f'remote "{remote_name}"'
|
|
318
|
+
remote = cfg.get(section_name)
|
|
319
|
+
if not isinstance(remote, dict):
|
|
320
|
+
return
|
|
321
|
+
changed = False
|
|
322
|
+
for option in ("custom_auth_header", "password", "auth"):
|
|
323
|
+
if option in remote:
|
|
324
|
+
remote.pop(option)
|
|
325
|
+
changed = True
|
|
326
|
+
if not changed:
|
|
327
|
+
return
|
|
328
|
+
if not remote:
|
|
329
|
+
cfg.pop(section_name, None)
|
|
330
|
+
cfg.write()
|
|
331
|
+
|
|
332
|
+
|
|
298
333
|
def set_remote_auth(
|
|
299
334
|
remote_name: str | None = None,
|
|
300
335
|
always_auth: bool = False,
|
|
@@ -312,6 +347,7 @@ def set_remote_auth(
|
|
|
312
347
|
remotes = get_remotes(wdir=wdir)
|
|
313
348
|
remote_url = remotes.get(remote_name, "")
|
|
314
349
|
if remote_url.startswith("ck://"):
|
|
350
|
+
clear_remote_local_http_auth(remote_name=remote_name, wdir=wdir)
|
|
315
351
|
logger.info(
|
|
316
352
|
f"Remote {remote_name} uses ck:// scheme; skipping HTTP auth setup"
|
|
317
353
|
)
|
|
@@ -383,10 +383,31 @@ def get_status(
|
|
|
383
383
|
if v != ["always changed"] and not k.endswith(".dvc")
|
|
384
384
|
}
|
|
385
385
|
stages_config = ck_info.get("pipeline", {}).get("stages", {})
|
|
386
|
+
# Build an ordered list of stage names from dvc.yaml to preserve
|
|
387
|
+
# pipeline order, since dvc_repo.status() returns stages alphabetically
|
|
388
|
+
dvc_yaml_stages: list[str] = []
|
|
389
|
+
if os.path.isfile("dvc.yaml"):
|
|
390
|
+
try:
|
|
391
|
+
with open("dvc.yaml") as f:
|
|
392
|
+
dvc_yaml = calkit.ryaml.load(f)
|
|
393
|
+
dvc_yaml_stages = list(
|
|
394
|
+
(dvc_yaml or {}).get("stages", {}).keys()
|
|
395
|
+
)
|
|
396
|
+
except Exception:
|
|
397
|
+
pass
|
|
386
398
|
ordered_stale_stages = {}
|
|
387
|
-
|
|
388
|
-
|
|
389
|
-
|
|
399
|
+
# First, add stages in dvc.yaml order, matching expanded stage names
|
|
400
|
+
# (e.g. benchmark-boom@1-3-1) against their base template name
|
|
401
|
+
# (benchmark-boom) using the position in dvc.yaml
|
|
402
|
+
dvc_yaml_stage_order = {
|
|
403
|
+
name: i for i, name in enumerate(dvc_yaml_stages)
|
|
404
|
+
}
|
|
405
|
+
|
|
406
|
+
def _stage_sort_key(stage_name: str) -> int:
|
|
407
|
+
base = stage_name.split("@")[0]
|
|
408
|
+
return dvc_yaml_stage_order.get(base, len(dvc_yaml_stages))
|
|
409
|
+
|
|
410
|
+
for stage_name in sorted(raw_stale_stages.keys(), key=_stage_sort_key):
|
|
390
411
|
status_data = raw_stale_stages[stage_name]
|
|
391
412
|
ordered_stale_stages[stage_name] = StaleStage.from_status_data(
|
|
392
413
|
status_data=status_data,
|
|
@@ -399,23 +420,14 @@ def get_status(
|
|
|
399
420
|
)
|
|
400
421
|
],
|
|
401
422
|
)
|
|
402
|
-
# Keep any stale stages not present in ck_info at the end
|
|
403
|
-
for stage_name, status_data in raw_stale_stages.items():
|
|
404
|
-
if stage_name in ordered_stale_stages:
|
|
405
|
-
continue
|
|
406
|
-
ordered_stale_stages[stage_name] = StaleStage.from_status_data(
|
|
407
|
-
status_data=status_data,
|
|
408
|
-
configured_outputs=[
|
|
409
|
-
output.get("path", str(output))
|
|
410
|
-
if isinstance(output, dict)
|
|
411
|
-
else str(output)
|
|
412
|
-
for output in stages_config.get(stage_name, {}).get(
|
|
413
|
-
"outputs", []
|
|
414
|
-
)
|
|
415
|
-
],
|
|
416
|
-
)
|
|
417
423
|
result["stale_stages"] = ordered_stale_stages
|
|
418
|
-
return PipelineStatus
|
|
424
|
+
return PipelineStatus(
|
|
425
|
+
has_pipeline=result["has_pipeline"],
|
|
426
|
+
environment_checks=result["environment_checks"],
|
|
427
|
+
cleaned_notebooks=result["cleaned_notebooks"],
|
|
428
|
+
stale_stages=result["stale_stages"],
|
|
429
|
+
errors=result["errors"],
|
|
430
|
+
)
|
|
419
431
|
finally:
|
|
420
432
|
if wdir is not None:
|
|
421
433
|
os.chdir(prev_cwd)
|
|
@@ -184,16 +184,21 @@ def make_dvc_md5s(
|
|
|
184
184
|
return resp
|
|
185
185
|
|
|
186
186
|
|
|
187
|
-
def
|
|
188
|
-
"""
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
187
|
+
def zip_paths(zip_path: str, paths: list[str]) -> None:
|
|
188
|
+
"""Create a compressed ZIP from a list of file or directory paths."""
|
|
189
|
+
with zipfile.ZipFile(
|
|
190
|
+
zip_path,
|
|
191
|
+
"w",
|
|
192
|
+
compression=zipfile.ZIP_DEFLATED,
|
|
193
|
+
) as zipf:
|
|
194
|
+
for path in paths:
|
|
195
|
+
if os.path.isdir(path):
|
|
196
|
+
for root, _, files in os.walk(path):
|
|
197
|
+
for filename in files:
|
|
198
|
+
fpath = os.path.join(root, filename)
|
|
199
|
+
zipf.write(fpath)
|
|
200
|
+
elif os.path.isfile(path):
|
|
201
|
+
zipf.write(path)
|
|
197
202
|
|
|
198
203
|
|
|
199
204
|
def populate_dvc_cache():
|
|
@@ -4,6 +4,8 @@ import os
|
|
|
4
4
|
import subprocess
|
|
5
5
|
|
|
6
6
|
import dvc.repo
|
|
7
|
+
import git
|
|
8
|
+
from configobj import ConfigObj
|
|
7
9
|
from dvc.config_schema import SCHEMA, Invalid
|
|
8
10
|
from dvc_objects.fs import known_implementations
|
|
9
11
|
|
|
@@ -89,3 +91,70 @@ def test_list_files_paths(tmp_dir):
|
|
|
89
91
|
repo = dvc.repo.Repo()
|
|
90
92
|
repo.add("file1.txt") # type: ignore
|
|
91
93
|
assert "file1.txt" in calkit.dvc.list_paths()
|
|
94
|
+
|
|
95
|
+
|
|
96
|
+
def test_configure_remote_ck_uses_ck_scheme_and_skips_http_auth(monkeypatch):
|
|
97
|
+
monkeypatch.setattr(calkit, "detect_project_name", lambda wdir=None: "o/p")
|
|
98
|
+
|
|
99
|
+
class DummyRepo:
|
|
100
|
+
def remote(self):
|
|
101
|
+
return "origin"
|
|
102
|
+
|
|
103
|
+
monkeypatch.setattr(git, "Repo", lambda wdir=None: DummyRepo())
|
|
104
|
+
calls = []
|
|
105
|
+
events = []
|
|
106
|
+
|
|
107
|
+
def fake_run(argv, cwd=None):
|
|
108
|
+
events.append("run")
|
|
109
|
+
calls.append((argv, cwd))
|
|
110
|
+
return 0
|
|
111
|
+
|
|
112
|
+
monkeypatch.setattr(calkit.dvc.core, "run_dvc_command", fake_run)
|
|
113
|
+
monkeypatch.setattr(
|
|
114
|
+
calkit.dvc.core,
|
|
115
|
+
"clear_remote_local_http_auth",
|
|
116
|
+
lambda remote_name=None, wdir=None: events.append("clear"),
|
|
117
|
+
)
|
|
118
|
+
out = calkit.dvc.configure_remote(use_ck=True)
|
|
119
|
+
assert out == calkit.config.get_app_name()
|
|
120
|
+
assert events and events[0] == "clear"
|
|
121
|
+
assert calls == [
|
|
122
|
+
(
|
|
123
|
+
[
|
|
124
|
+
"remote",
|
|
125
|
+
"add",
|
|
126
|
+
"-d",
|
|
127
|
+
"-f",
|
|
128
|
+
calkit.config.get_app_name(),
|
|
129
|
+
"ck://o/p",
|
|
130
|
+
],
|
|
131
|
+
None,
|
|
132
|
+
)
|
|
133
|
+
]
|
|
134
|
+
|
|
135
|
+
|
|
136
|
+
def test_set_remote_auth_ck_remote_clears_local_http_auth(
|
|
137
|
+
monkeypatch, tmp_path
|
|
138
|
+
):
|
|
139
|
+
remote_name = calkit.config.get_app_name()
|
|
140
|
+
monkeypatch.setattr(
|
|
141
|
+
calkit.dvc.core,
|
|
142
|
+
"get_remotes",
|
|
143
|
+
lambda wdir=None: {remote_name: "ck://owner/proj"},
|
|
144
|
+
)
|
|
145
|
+
dvc_dir = tmp_path / ".dvc"
|
|
146
|
+
dvc_dir.mkdir()
|
|
147
|
+
fpath = dvc_dir / "config.local"
|
|
148
|
+
with open(fpath, "w") as f:
|
|
149
|
+
f.write(
|
|
150
|
+
f'[remote "{remote_name}"]\n'
|
|
151
|
+
" custom_auth_header = Authorization\n"
|
|
152
|
+
" password = Bearer token\n"
|
|
153
|
+
" url = https://example.com\n"
|
|
154
|
+
)
|
|
155
|
+
calkit.dvc.set_remote_auth(wdir=str(tmp_path))
|
|
156
|
+
cfg = ConfigObj(str(fpath), encoding="utf-8")
|
|
157
|
+
section = cfg[f'remote "{remote_name}"']
|
|
158
|
+
assert "custom_auth_header" not in section
|
|
159
|
+
assert "password" not in section
|
|
160
|
+
assert section["url"] == "https://example.com" # type: ignore
|
|
@@ -10,10 +10,10 @@ import git
|
|
|
10
10
|
import pytest
|
|
11
11
|
|
|
12
12
|
from calkit.releases import (
|
|
13
|
-
add_paths_to_zip,
|
|
14
13
|
check_project_release_archive,
|
|
15
14
|
create_bibtex,
|
|
16
15
|
ls_files,
|
|
16
|
+
zip_paths,
|
|
17
17
|
)
|
|
18
18
|
|
|
19
19
|
|
|
@@ -135,16 +135,16 @@ def test_create_bibtex():
|
|
|
135
135
|
assert len(entries) == 1
|
|
136
136
|
|
|
137
137
|
|
|
138
|
-
def
|
|
138
|
+
def test_zip_paths(tmp_dir):
|
|
139
139
|
os.makedirs("data/sub", exist_ok=True)
|
|
140
140
|
with open("data/sub/file.txt", "w") as f:
|
|
141
141
|
f.write("hello")
|
|
142
142
|
with open("root.txt", "w") as f:
|
|
143
143
|
f.write("root")
|
|
144
144
|
zip_path = "archive.zip"
|
|
145
|
-
|
|
146
|
-
add_paths_to_zip(zipf, ["data", "root.txt"])
|
|
145
|
+
zip_paths(zip_path, ["data", "root.txt"])
|
|
147
146
|
with zipfile.ZipFile(zip_path) as zipf:
|
|
148
147
|
names = set(zipf.namelist())
|
|
149
|
-
|
|
150
|
-
|
|
148
|
+
assert "data/sub/file.txt" in names
|
|
149
|
+
assert "root.txt" in names
|
|
150
|
+
assert zipf.getinfo("root.txt").compress_type == zipfile.ZIP_DEFLATED
|