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.
Files changed (307) hide show
  1. {calkit_python-0.37.0 → calkit_python-0.37.1}/PKG-INFO +1 -1
  2. {calkit_python-0.37.0 → calkit_python-0.37.1}/calkit/cli/config.py +8 -1
  3. {calkit_python-0.37.0 → calkit_python-0.37.1}/calkit/cli/main/core.py +4 -4
  4. {calkit_python-0.37.0 → calkit_python-0.37.1}/calkit/cli/new.py +1 -3
  5. {calkit_python-0.37.0 → calkit_python-0.37.1}/calkit/cli/update.py +1 -3
  6. {calkit_python-0.37.0 → calkit_python-0.37.1}/calkit/dvc/core.py +47 -11
  7. {calkit_python-0.37.0 → calkit_python-0.37.1}/calkit/pipeline.py +31 -19
  8. {calkit_python-0.37.0 → calkit_python-0.37.1}/calkit/releases.py +15 -10
  9. {calkit_python-0.37.0 → calkit_python-0.37.1}/calkit/tests/dvc/test_core.py +69 -0
  10. {calkit_python-0.37.0 → calkit_python-0.37.1}/calkit/tests/test_releases.py +6 -6
  11. {calkit_python-0.37.0 → calkit_python-0.37.1}/docs/cli-reference.md +788 -752
  12. {calkit_python-0.37.0 → calkit_python-0.37.1}/docs/version-control.md +1 -1
  13. {calkit_python-0.37.0 → calkit_python-0.37.1}/scripts/generate-cli-reference.py +174 -36
  14. {calkit_python-0.37.0 → calkit_python-0.37.1}/.gitignore +0 -0
  15. {calkit_python-0.37.0 → calkit_python-0.37.1}/.pre-commit-config.yaml +0 -0
  16. {calkit_python-0.37.0 → calkit_python-0.37.1}/.prettierignore +0 -0
  17. {calkit_python-0.37.0 → calkit_python-0.37.1}/.python-version +0 -0
  18. {calkit_python-0.37.0 → calkit_python-0.37.1}/.vscode/launch.json +0 -0
  19. {calkit_python-0.37.0 → calkit_python-0.37.1}/.vscode/tasks.json +0 -0
  20. {calkit_python-0.37.0 → calkit_python-0.37.1}/.yarnrc.yml +0 -0
  21. {calkit_python-0.37.0 → calkit_python-0.37.1}/CITATION.cff +0 -0
  22. {calkit_python-0.37.0 → calkit_python-0.37.1}/CODE_OF_CONDUCT.md +0 -0
  23. {calkit_python-0.37.0 → calkit_python-0.37.1}/CONTRIBUTING.md +0 -0
  24. {calkit_python-0.37.0 → calkit_python-0.37.1}/LICENSE +0 -0
  25. {calkit_python-0.37.0 → calkit_python-0.37.1}/Makefile +0 -0
  26. {calkit_python-0.37.0 → calkit_python-0.37.1}/README.md +0 -0
  27. {calkit_python-0.37.0 → calkit_python-0.37.1}/babel.config.js +0 -0
  28. {calkit_python-0.37.0 → calkit_python-0.37.1}/calkit/__init__.py +0 -0
  29. {calkit_python-0.37.0 → calkit_python-0.37.1}/calkit/__main__.py +0 -0
  30. {calkit_python-0.37.0 → calkit_python-0.37.1}/calkit/calc.py +0 -0
  31. {calkit_python-0.37.0 → calkit_python-0.37.1}/calkit/check.py +0 -0
  32. {calkit_python-0.37.0 → calkit_python-0.37.1}/calkit/cli/__init__.py +0 -0
  33. {calkit_python-0.37.0 → calkit_python-0.37.1}/calkit/cli/check.py +0 -0
  34. {calkit_python-0.37.0 → calkit_python-0.37.1}/calkit/cli/cloud.py +0 -0
  35. {calkit_python-0.37.0 → calkit_python-0.37.1}/calkit/cli/core.py +0 -0
  36. {calkit_python-0.37.0 → calkit_python-0.37.1}/calkit/cli/describe.py +0 -0
  37. {calkit_python-0.37.0 → calkit_python-0.37.1}/calkit/cli/import_.py +0 -0
  38. {calkit_python-0.37.0 → calkit_python-0.37.1}/calkit/cli/latex.py +0 -0
  39. {calkit_python-0.37.0 → calkit_python-0.37.1}/calkit/cli/list.py +0 -0
  40. {calkit_python-0.37.0 → calkit_python-0.37.1}/calkit/cli/main/__init__.py +0 -0
  41. {calkit_python-0.37.0 → calkit_python-0.37.1}/calkit/cli/main/xr.py +0 -0
  42. {calkit_python-0.37.0 → calkit_python-0.37.1}/calkit/cli/notebooks.py +0 -0
  43. {calkit_python-0.37.0 → calkit_python-0.37.1}/calkit/cli/office.py +0 -0
  44. {calkit_python-0.37.0 → calkit_python-0.37.1}/calkit/cli/overleaf.py +0 -0
  45. {calkit_python-0.37.0 → calkit_python-0.37.1}/calkit/cli/slurm.py +0 -0
  46. {calkit_python-0.37.0 → calkit_python-0.37.1}/calkit/cloud.py +0 -0
  47. {calkit_python-0.37.0 → calkit_python-0.37.1}/calkit/conda.py +0 -0
  48. {calkit_python-0.37.0 → calkit_python-0.37.1}/calkit/config.py +0 -0
  49. {calkit_python-0.37.0 → calkit_python-0.37.1}/calkit/core.py +0 -0
  50. {calkit_python-0.37.0 → calkit_python-0.37.1}/calkit/datasets.py +0 -0
  51. {calkit_python-0.37.0 → calkit_python-0.37.1}/calkit/detect.py +0 -0
  52. {calkit_python-0.37.0 → calkit_python-0.37.1}/calkit/docker.py +0 -0
  53. {calkit_python-0.37.0 → calkit_python-0.37.1}/calkit/dvc/__init__.py +0 -0
  54. {calkit_python-0.37.0 → calkit_python-0.37.1}/calkit/dvc/zip.py +0 -0
  55. {calkit_python-0.37.0 → calkit_python-0.37.1}/calkit/environments.py +0 -0
  56. {calkit_python-0.37.0 → calkit_python-0.37.1}/calkit/fs.py +0 -0
  57. {calkit_python-0.37.0 → calkit_python-0.37.1}/calkit/git.py +0 -0
  58. {calkit_python-0.37.0 → calkit_python-0.37.1}/calkit/github.py +0 -0
  59. {calkit_python-0.37.0 → calkit_python-0.37.1}/calkit/gui.py +0 -0
  60. {calkit_python-0.37.0 → calkit_python-0.37.1}/calkit/invenio.py +0 -0
  61. {calkit_python-0.37.0 → calkit_python-0.37.1}/calkit/julia.py +0 -0
  62. {calkit_python-0.37.0 → calkit_python-0.37.1}/calkit/jupyter.py +0 -0
  63. {calkit_python-0.37.0 → calkit_python-0.37.1}/calkit/jupyterlab/__init__.py +0 -0
  64. {calkit_python-0.37.0 → calkit_python-0.37.1}/calkit/jupyterlab/routes.py +0 -0
  65. {calkit_python-0.37.0 → calkit_python-0.37.1}/calkit/labextension/package.json +0 -0
  66. {calkit_python-0.37.0 → calkit_python-0.37.1}/calkit/labextension/schemas/calkit/package.json.orig +0 -0
  67. {calkit_python-0.37.0 → calkit_python-0.37.1}/calkit/labextension/schemas/calkit/plugin.json +0 -0
  68. {calkit_python-0.37.0 → calkit_python-0.37.1}/calkit/labextension/static/502.9a2c5772a15466e923ef.js +0 -0
  69. {calkit_python-0.37.0 → calkit_python-0.37.1}/calkit/labextension/static/695.2c41003a452d43d2b358.js +0 -0
  70. {calkit_python-0.37.0 → calkit_python-0.37.1}/calkit/labextension/static/867.a42a046aa5108f54f8fb.js +0 -0
  71. {calkit_python-0.37.0 → calkit_python-0.37.1}/calkit/labextension/static/909.651be47ca47390b78a92.js +0 -0
  72. {calkit_python-0.37.0 → calkit_python-0.37.1}/calkit/labextension/static/946.050af2abf7845cfbdbd2.js +0 -0
  73. {calkit_python-0.37.0 → calkit_python-0.37.1}/calkit/labextension/static/946.050af2abf7845cfbdbd2.js.LICENSE.txt +0 -0
  74. {calkit_python-0.37.0 → calkit_python-0.37.1}/calkit/labextension/static/b2f1c3efe70cb539d121.png +0 -0
  75. {calkit_python-0.37.0 → calkit_python-0.37.1}/calkit/labextension/static/remoteEntry.c091821b3d7f2d287a67.js +0 -0
  76. {calkit_python-0.37.0 → calkit_python-0.37.1}/calkit/labextension/static/style.js +0 -0
  77. {calkit_python-0.37.0 → calkit_python-0.37.1}/calkit/labextension/static/third-party-licenses.json +0 -0
  78. {calkit_python-0.37.0 → calkit_python-0.37.1}/calkit/licenses.py +0 -0
  79. {calkit_python-0.37.0 → calkit_python-0.37.1}/calkit/magics.py +0 -0
  80. {calkit_python-0.37.0 → calkit_python-0.37.1}/calkit/matlab.py +0 -0
  81. {calkit_python-0.37.0 → calkit_python-0.37.1}/calkit/models/__init__.py +0 -0
  82. {calkit_python-0.37.0 → calkit_python-0.37.1}/calkit/models/core.py +0 -0
  83. {calkit_python-0.37.0 → calkit_python-0.37.1}/calkit/models/io.py +0 -0
  84. {calkit_python-0.37.0 → calkit_python-0.37.1}/calkit/models/iteration.py +0 -0
  85. {calkit_python-0.37.0 → calkit_python-0.37.1}/calkit/models/pipeline.py +0 -0
  86. {calkit_python-0.37.0 → calkit_python-0.37.1}/calkit/notebooks.py +0 -0
  87. {calkit_python-0.37.0 → calkit_python-0.37.1}/calkit/office.py +0 -0
  88. {calkit_python-0.37.0 → calkit_python-0.37.1}/calkit/ops.py +0 -0
  89. {calkit_python-0.37.0 → calkit_python-0.37.1}/calkit/overleaf.py +0 -0
  90. {calkit_python-0.37.0 → calkit_python-0.37.1}/calkit/server.py +0 -0
  91. {calkit_python-0.37.0 → calkit_python-0.37.1}/calkit/templates/__init__.py +0 -0
  92. {calkit_python-0.37.0 → calkit_python-0.37.1}/calkit/templates/core.py +0 -0
  93. {calkit_python-0.37.0 → calkit_python-0.37.1}/calkit/templates/latex/__init__.py +0 -0
  94. {calkit_python-0.37.0 → calkit_python-0.37.1}/calkit/templates/latex/article/paper.tex +0 -0
  95. {calkit_python-0.37.0 → calkit_python-0.37.1}/calkit/templates/latex/core.py +0 -0
  96. {calkit_python-0.37.0 → calkit_python-0.37.1}/calkit/templates/latex/jfm/jfm.bst +0 -0
  97. {calkit_python-0.37.0 → calkit_python-0.37.1}/calkit/templates/latex/jfm/jfm.cls +0 -0
  98. {calkit_python-0.37.0 → calkit_python-0.37.1}/calkit/templates/latex/jfm/lineno-FLM.sty +0 -0
  99. {calkit_python-0.37.0 → calkit_python-0.37.1}/calkit/templates/latex/jfm/paper.tex +0 -0
  100. {calkit_python-0.37.0 → calkit_python-0.37.1}/calkit/templates/latex/jfm/upmath.sty +0 -0
  101. {calkit_python-0.37.0 → calkit_python-0.37.1}/calkit/tests/__init__.py +0 -0
  102. {calkit_python-0.37.0 → calkit_python-0.37.1}/calkit/tests/cli/__init__.py +0 -0
  103. {calkit_python-0.37.0 → calkit_python-0.37.1}/calkit/tests/cli/main/__init__.py +0 -0
  104. {calkit_python-0.37.0 → calkit_python-0.37.1}/calkit/tests/cli/main/test_core.py +0 -0
  105. {calkit_python-0.37.0 → calkit_python-0.37.1}/calkit/tests/cli/main/test_xr.py +0 -0
  106. {calkit_python-0.37.0 → calkit_python-0.37.1}/calkit/tests/cli/test_check.py +0 -0
  107. {calkit_python-0.37.0 → calkit_python-0.37.1}/calkit/tests/cli/test_config.py +0 -0
  108. {calkit_python-0.37.0 → calkit_python-0.37.1}/calkit/tests/cli/test_import.py +0 -0
  109. {calkit_python-0.37.0 → calkit_python-0.37.1}/calkit/tests/cli/test_latex.py +0 -0
  110. {calkit_python-0.37.0 → calkit_python-0.37.1}/calkit/tests/cli/test_list.py +0 -0
  111. {calkit_python-0.37.0 → calkit_python-0.37.1}/calkit/tests/cli/test_new.py +0 -0
  112. {calkit_python-0.37.0 → calkit_python-0.37.1}/calkit/tests/cli/test_notebooks.py +0 -0
  113. {calkit_python-0.37.0 → calkit_python-0.37.1}/calkit/tests/cli/test_overleaf.py +0 -0
  114. {calkit_python-0.37.0 → calkit_python-0.37.1}/calkit/tests/cli/test_update.py +0 -0
  115. {calkit_python-0.37.0 → calkit_python-0.37.1}/calkit/tests/dvc/__init__.py +0 -0
  116. {calkit_python-0.37.0 → calkit_python-0.37.1}/calkit/tests/dvc/test_zip.py +0 -0
  117. {calkit_python-0.37.0 → calkit_python-0.37.1}/calkit/tests/jupyterlab/__init__.py +0 -0
  118. {calkit_python-0.37.0 → calkit_python-0.37.1}/calkit/tests/jupyterlab/test_routes.py +0 -0
  119. {calkit_python-0.37.0 → calkit_python-0.37.1}/calkit/tests/models/__init__.py +0 -0
  120. {calkit_python-0.37.0 → calkit_python-0.37.1}/calkit/tests/models/test_iteration.py +0 -0
  121. {calkit_python-0.37.0 → calkit_python-0.37.1}/calkit/tests/models/test_pipeline.py +0 -0
  122. {calkit_python-0.37.0 → calkit_python-0.37.1}/calkit/tests/test_calc.py +0 -0
  123. {calkit_python-0.37.0 → calkit_python-0.37.1}/calkit/tests/test_check.py +0 -0
  124. {calkit_python-0.37.0 → calkit_python-0.37.1}/calkit/tests/test_conda.py +0 -0
  125. {calkit_python-0.37.0 → calkit_python-0.37.1}/calkit/tests/test_core.py +0 -0
  126. {calkit_python-0.37.0 → calkit_python-0.37.1}/calkit/tests/test_detect.py +0 -0
  127. {calkit_python-0.37.0 → calkit_python-0.37.1}/calkit/tests/test_docker.py +0 -0
  128. {calkit_python-0.37.0 → calkit_python-0.37.1}/calkit/tests/test_environments.py +0 -0
  129. {calkit_python-0.37.0 → calkit_python-0.37.1}/calkit/tests/test_fs.py +0 -0
  130. {calkit_python-0.37.0 → calkit_python-0.37.1}/calkit/tests/test_git.py +0 -0
  131. {calkit_python-0.37.0 → calkit_python-0.37.1}/calkit/tests/test_invenio.py +0 -0
  132. {calkit_python-0.37.0 → calkit_python-0.37.1}/calkit/tests/test_julia.py +0 -0
  133. {calkit_python-0.37.0 → calkit_python-0.37.1}/calkit/tests/test_jupyter.py +0 -0
  134. {calkit_python-0.37.0 → calkit_python-0.37.1}/calkit/tests/test_magics.py +0 -0
  135. {calkit_python-0.37.0 → calkit_python-0.37.1}/calkit/tests/test_matlab.py +0 -0
  136. {calkit_python-0.37.0 → calkit_python-0.37.1}/calkit/tests/test_notebooks.py +0 -0
  137. {calkit_python-0.37.0 → calkit_python-0.37.1}/calkit/tests/test_pipeline.py +0 -0
  138. {calkit_python-0.37.0 → calkit_python-0.37.1}/calkit/tests/test_templates.py +0 -0
  139. {calkit_python-0.37.0 → calkit_python-0.37.1}/conftest.py +0 -0
  140. {calkit_python-0.37.0 → calkit_python-0.37.1}/docs/CNAME +0 -0
  141. {calkit_python-0.37.0 → calkit_python-0.37.1}/docs/apps.md +0 -0
  142. {calkit_python-0.37.0 → calkit_python-0.37.1}/docs/calculations.md +0 -0
  143. {calkit_python-0.37.0 → calkit_python-0.37.1}/docs/calkit-yaml.md +0 -0
  144. {calkit_python-0.37.0 → calkit_python-0.37.1}/docs/cloud-integration.md +0 -0
  145. {calkit_python-0.37.0 → calkit_python-0.37.1}/docs/datasets.md +0 -0
  146. {calkit_python-0.37.0 → calkit_python-0.37.1}/docs/dependencies.md +0 -0
  147. {calkit_python-0.37.0 → calkit_python-0.37.1}/docs/environments.md +0 -0
  148. {calkit_python-0.37.0 → calkit_python-0.37.1}/docs/examples.md +0 -0
  149. {calkit_python-0.37.0 → calkit_python-0.37.1}/docs/governance.md +0 -0
  150. {calkit_python-0.37.0 → calkit_python-0.37.1}/docs/help.md +0 -0
  151. {calkit_python-0.37.0 → calkit_python-0.37.1}/docs/img/c-to-the-k-white.svg +0 -0
  152. {calkit_python-0.37.0 → calkit_python-0.37.1}/docs/img/calkit-fragmentation-compendium.png +0 -0
  153. {calkit_python-0.37.0 → calkit_python-0.37.1}/docs/img/calkit-no-bg.png +0 -0
  154. {calkit_python-0.37.0 → calkit_python-0.37.1}/docs/img/connect-zenodo.png +0 -0
  155. {calkit_python-0.37.0 → calkit_python-0.37.1}/docs/img/jupyterlab/all-green.png +0 -0
  156. {calkit_python-0.37.0 → calkit_python-0.37.1}/docs/img/jupyterlab/collect-data-stale.png +0 -0
  157. {calkit_python-0.37.0 → calkit_python-0.37.1}/docs/img/jupyterlab/new-env.png +0 -0
  158. {calkit_python-0.37.0 → calkit_python-0.37.1}/docs/img/jupyterlab/new-notebook.png +0 -0
  159. {calkit_python-0.37.0 → calkit_python-0.37.1}/docs/img/jupyterlab/pipeline-badge.png +0 -0
  160. {calkit_python-0.37.0 → calkit_python-0.37.1}/docs/img/jupyterlab-params.png +0 -0
  161. {calkit_python-0.37.0 → calkit_python-0.37.1}/docs/img/plos-osi-code-2024-03.png +0 -0
  162. {calkit_python-0.37.0 → calkit_python-0.37.1}/docs/img/vscode-nb-params.png +0 -0
  163. {calkit_python-0.37.0 → calkit_python-0.37.1}/docs/index.md +0 -0
  164. {calkit_python-0.37.0 → calkit_python-0.37.1}/docs/installation.md +0 -0
  165. {calkit_python-0.37.0 → calkit_python-0.37.1}/docs/jupyterlab.md +0 -0
  166. {calkit_python-0.37.0 → calkit_python-0.37.1}/docs/local-server.md +0 -0
  167. {calkit_python-0.37.0 → calkit_python-0.37.1}/docs/notebooks.md +0 -0
  168. {calkit_python-0.37.0 → calkit_python-0.37.1}/docs/overleaf.md +0 -0
  169. {calkit_python-0.37.0 → calkit_python-0.37.1}/docs/pipeline/index.md +0 -0
  170. {calkit_python-0.37.0 → calkit_python-0.37.1}/docs/pipeline/manual-steps.md +0 -0
  171. {calkit_python-0.37.0 → calkit_python-0.37.1}/docs/pipeline/running-and-logging.md +0 -0
  172. {calkit_python-0.37.0 → calkit_python-0.37.1}/docs/pipeline/slurm.md +0 -0
  173. {calkit_python-0.37.0 → calkit_python-0.37.1}/docs/quickstart.md +0 -0
  174. {calkit_python-0.37.0 → calkit_python-0.37.1}/docs/references.md +0 -0
  175. {calkit_python-0.37.0 → calkit_python-0.37.1}/docs/releases.md +0 -0
  176. {calkit_python-0.37.0 → calkit_python-0.37.1}/docs/reproducibility.md +0 -0
  177. {calkit_python-0.37.0 → calkit_python-0.37.1}/docs/tutorials/adding-latex-pub-docker.md +0 -0
  178. {calkit_python-0.37.0 → calkit_python-0.37.1}/docs/tutorials/conda-envs.md +0 -0
  179. {calkit_python-0.37.0 → calkit_python-0.37.1}/docs/tutorials/existing-project.md +0 -0
  180. {calkit_python-0.37.0 → calkit_python-0.37.1}/docs/tutorials/first-project.md +0 -0
  181. {calkit_python-0.37.0 → calkit_python-0.37.1}/docs/tutorials/github-actions.md +0 -0
  182. {calkit_python-0.37.0 → calkit_python-0.37.1}/docs/tutorials/img/actions-repo-secrets.png +0 -0
  183. {calkit_python-0.37.0 → calkit_python-0.37.1}/docs/tutorials/img/latex-codespaces/building-codespace.png +0 -0
  184. {calkit_python-0.37.0 → calkit_python-0.37.1}/docs/tutorials/img/latex-codespaces/codespaces-secrets-2.png +0 -0
  185. {calkit_python-0.37.0 → calkit_python-0.37.1}/docs/tutorials/img/latex-codespaces/editor-split.png +0 -0
  186. {calkit_python-0.37.0 → calkit_python-0.37.1}/docs/tutorials/img/latex-codespaces/go-to-linked-code.png +0 -0
  187. {calkit_python-0.37.0 → calkit_python-0.37.1}/docs/tutorials/img/latex-codespaces/issue-from-selection.png +0 -0
  188. {calkit_python-0.37.0 → calkit_python-0.37.1}/docs/tutorials/img/latex-codespaces/new-project.png +0 -0
  189. {calkit_python-0.37.0 → calkit_python-0.37.1}/docs/tutorials/img/latex-codespaces/new-pub-2.png +0 -0
  190. {calkit_python-0.37.0 → calkit_python-0.37.1}/docs/tutorials/img/latex-codespaces/new-token.png +0 -0
  191. {calkit_python-0.37.0 → calkit_python-0.37.1}/docs/tutorials/img/latex-codespaces/paper.tex.png +0 -0
  192. {calkit_python-0.37.0 → calkit_python-0.37.1}/docs/tutorials/img/latex-codespaces/project-home-3.png +0 -0
  193. {calkit_python-0.37.0 → calkit_python-0.37.1}/docs/tutorials/img/latex-codespaces/push.png +0 -0
  194. {calkit_python-0.37.0 → calkit_python-0.37.1}/docs/tutorials/img/latex-codespaces/stage.png +0 -0
  195. {calkit_python-0.37.0 → calkit_python-0.37.1}/docs/tutorials/img/office/anakin-excel.jpg +0 -0
  196. {calkit_python-0.37.0 → calkit_python-0.37.1}/docs/tutorials/img/office/chart-more-rows.png +0 -0
  197. {calkit_python-0.37.0 → calkit_python-0.37.1}/docs/tutorials/img/office/create-project.png +0 -0
  198. {calkit_python-0.37.0 → calkit_python-0.37.1}/docs/tutorials/img/office/elsevier-research-data-guidelines.png +0 -0
  199. {calkit_python-0.37.0 → calkit_python-0.37.1}/docs/tutorials/img/office/excel-chart.png +0 -0
  200. {calkit_python-0.37.0 → calkit_python-0.37.1}/docs/tutorials/img/office/excel-data.png +0 -0
  201. {calkit_python-0.37.0 → calkit_python-0.37.1}/docs/tutorials/img/office/insert-link-to-file.png +0 -0
  202. {calkit_python-0.37.0 → calkit_python-0.37.1}/docs/tutorials/img/office/needs-clone.png +0 -0
  203. {calkit_python-0.37.0 → calkit_python-0.37.1}/docs/tutorials/img/office/new-stage.png +0 -0
  204. {calkit_python-0.37.0 → calkit_python-0.37.1}/docs/tutorials/img/office/phd-comics-version-control.webp +0 -0
  205. {calkit_python-0.37.0 → calkit_python-0.37.1}/docs/tutorials/img/office/pipeline-out-of-date.png +0 -0
  206. {calkit_python-0.37.0 → calkit_python-0.37.1}/docs/tutorials/img/office/status-more-rows.png +0 -0
  207. {calkit_python-0.37.0 → calkit_python-0.37.1}/docs/tutorials/img/office/uncommitted-changes.png +0 -0
  208. {calkit_python-0.37.0 → calkit_python-0.37.1}/docs/tutorials/img/office/untracked-data.png +0 -0
  209. {calkit_python-0.37.0 → calkit_python-0.37.1}/docs/tutorials/img/office/updated-publication.png +0 -0
  210. {calkit_python-0.37.0 → calkit_python-0.37.1}/docs/tutorials/img/office/word-to-pdf-stage-2.png +0 -0
  211. {calkit_python-0.37.0 → calkit_python-0.37.1}/docs/tutorials/img/office/workflow-page.png +0 -0
  212. {calkit_python-0.37.0 → calkit_python-0.37.1}/docs/tutorials/img/openfoam/clone.png +0 -0
  213. {calkit_python-0.37.0 → calkit_python-0.37.1}/docs/tutorials/img/openfoam/create-project.png +0 -0
  214. {calkit_python-0.37.0 → calkit_python-0.37.1}/docs/tutorials/img/openfoam/datasets-page.png +0 -0
  215. {calkit_python-0.37.0 → calkit_python-0.37.1}/docs/tutorials/img/openfoam/figure-on-website-updated.png +0 -0
  216. {calkit_python-0.37.0 → calkit_python-0.37.1}/docs/tutorials/img/openfoam/figure-on-website.png +0 -0
  217. {calkit_python-0.37.0 → calkit_python-0.37.1}/docs/tutorials/img/openfoam/new-token.png +0 -0
  218. {calkit_python-0.37.0 → calkit_python-0.37.1}/docs/tutorials/img/openfoam/reclone.png +0 -0
  219. {calkit_python-0.37.0 → calkit_python-0.37.1}/docs/tutorials/img/openfoam/status-after-import-dataset.png +0 -0
  220. {calkit_python-0.37.0 → calkit_python-0.37.1}/docs/tutorials/img/quick-actions.png +0 -0
  221. {calkit_python-0.37.0 → calkit_python-0.37.1}/docs/tutorials/img/run-proc.png +0 -0
  222. {calkit_python-0.37.0 → calkit_python-0.37.1}/docs/tutorials/index.md +0 -0
  223. {calkit_python-0.37.0 → calkit_python-0.37.1}/docs/tutorials/jupyterlab.md +0 -0
  224. {calkit_python-0.37.0 → calkit_python-0.37.1}/docs/tutorials/latex-codespaces.md +0 -0
  225. {calkit_python-0.37.0 → calkit_python-0.37.1}/docs/tutorials/matlab.md +0 -0
  226. {calkit_python-0.37.0 → calkit_python-0.37.1}/docs/tutorials/notebook-pipeline.md +0 -0
  227. {calkit_python-0.37.0 → calkit_python-0.37.1}/docs/tutorials/office.md +0 -0
  228. {calkit_python-0.37.0 → calkit_python-0.37.1}/docs/tutorials/openfoam.md +0 -0
  229. {calkit_python-0.37.0 → calkit_python-0.37.1}/docs/tutorials/procedures.md +0 -0
  230. {calkit_python-0.37.0 → calkit_python-0.37.1}/install.json +0 -0
  231. {calkit_python-0.37.0 → calkit_python-0.37.1}/jest.config.js +0 -0
  232. {calkit_python-0.37.0 → calkit_python-0.37.1}/jupyter-config/server-config/calkit.json +0 -0
  233. {calkit_python-0.37.0 → calkit_python-0.37.1}/mkdocs.yml +0 -0
  234. {calkit_python-0.37.0 → calkit_python-0.37.1}/package.json +0 -0
  235. {calkit_python-0.37.0 → calkit_python-0.37.1}/pyproject.toml +0 -0
  236. {calkit_python-0.37.0 → calkit_python-0.37.1}/schema/plugin.json +0 -0
  237. {calkit_python-0.37.0 → calkit_python-0.37.1}/scripts/install.ps1 +0 -0
  238. {calkit_python-0.37.0 → calkit_python-0.37.1}/scripts/install.sh +0 -0
  239. {calkit_python-0.37.0 → calkit_python-0.37.1}/scripts/make-calk9.sh +0 -0
  240. {calkit_python-0.37.0 → calkit_python-0.37.1}/scripts/sync-docs.py +0 -0
  241. {calkit_python-0.37.0 → calkit_python-0.37.1}/src/__tests__/useQueries.spec.ts +0 -0
  242. {calkit_python-0.37.0 → calkit_python-0.37.1}/src/calkit-config.ts +0 -0
  243. {calkit_python-0.37.0 → calkit_python-0.37.1}/src/cell-output-marker.ts +0 -0
  244. {calkit_python-0.37.0 → calkit_python-0.37.1}/src/components/commit-dialog.tsx +0 -0
  245. {calkit_python-0.37.0 → calkit_python-0.37.1}/src/components/environment-editor.tsx +0 -0
  246. {calkit_python-0.37.0 → calkit_python-0.37.1}/src/components/notebook-registration.tsx +0 -0
  247. {calkit_python-0.37.0 → calkit_python-0.37.1}/src/components/notebook-toolbar.tsx +0 -0
  248. {calkit_python-0.37.0 → calkit_python-0.37.1}/src/components/pipeline-status-bar.tsx +0 -0
  249. {calkit_python-0.37.0 → calkit_python-0.37.1}/src/components/project-info-editor.tsx +0 -0
  250. {calkit_python-0.37.0 → calkit_python-0.37.1}/src/components/sidebar-settings.tsx +0 -0
  251. {calkit_python-0.37.0 → calkit_python-0.37.1}/src/components/sidebar.tsx +0 -0
  252. {calkit_python-0.37.0 → calkit_python-0.37.1}/src/components/stage-editor.tsx +0 -0
  253. {calkit_python-0.37.0 → calkit_python-0.37.1}/src/feature-flags.ts +0 -0
  254. {calkit_python-0.37.0 → calkit_python-0.37.1}/src/file-browser-menu.ts +0 -0
  255. {calkit_python-0.37.0 → calkit_python-0.37.1}/src/hooks/__tests__/useQueries.test.tsx +0 -0
  256. {calkit_python-0.37.0 → calkit_python-0.37.1}/src/hooks/useQueries.ts +0 -0
  257. {calkit_python-0.37.0 → calkit_python-0.37.1}/src/icons.ts +0 -0
  258. {calkit_python-0.37.0 → calkit_python-0.37.1}/src/index.ts +0 -0
  259. {calkit_python-0.37.0 → calkit_python-0.37.1}/src/io-tracker.ts +0 -0
  260. {calkit_python-0.37.0 → calkit_python-0.37.1}/src/pipeline-state.ts +0 -0
  261. {calkit_python-0.37.0 → calkit_python-0.37.1}/src/queryClient.ts +0 -0
  262. {calkit_python-0.37.0 → calkit_python-0.37.1}/src/request.ts +0 -0
  263. {calkit_python-0.37.0 → calkit_python-0.37.1}/src/shims-mainmenu.d.ts +0 -0
  264. {calkit_python-0.37.0 → calkit_python-0.37.1}/style/base.css +0 -0
  265. {calkit_python-0.37.0 → calkit_python-0.37.1}/style/cell-output-marker.css +0 -0
  266. {calkit_python-0.37.0 → calkit_python-0.37.1}/style/environment-editor.css +0 -0
  267. {calkit_python-0.37.0 → calkit_python-0.37.1}/style/environment-selector.css +0 -0
  268. {calkit_python-0.37.0 → calkit_python-0.37.1}/style/img/calkit-no-bg.png +0 -0
  269. {calkit_python-0.37.0 → calkit_python-0.37.1}/style/index.css +0 -0
  270. {calkit_python-0.37.0 → calkit_python-0.37.1}/style/index.js +0 -0
  271. {calkit_python-0.37.0 → calkit_python-0.37.1}/style/notebook-toolbar.css +0 -0
  272. {calkit_python-0.37.0 → calkit_python-0.37.1}/style/pipeline-status-bar.css +0 -0
  273. {calkit_python-0.37.0 → calkit_python-0.37.1}/style/sidebar.css +0 -0
  274. {calkit_python-0.37.0 → calkit_python-0.37.1}/test/dvc-md5-dir/osx-arm64.txt +0 -0
  275. {calkit_python-0.37.0 → calkit_python-0.37.1}/test/nb-julia.ipynb +0 -0
  276. {calkit_python-0.37.0 → calkit_python-0.37.1}/test/nb-params.ipynb +0 -0
  277. {calkit_python-0.37.0 → calkit_python-0.37.1}/test/nb-subdir.ipynb +0 -0
  278. {calkit_python-0.37.0 → calkit_python-0.37.1}/test/pipeline.ipynb +0 -0
  279. {calkit_python-0.37.0 → calkit_python-0.37.1}/test/script.py +0 -0
  280. {calkit_python-0.37.0 → calkit_python-0.37.1}/test/test-log.log +0 -0
  281. {calkit_python-0.37.0 → calkit_python-0.37.1}/tsconfig.json +0 -0
  282. {calkit_python-0.37.0 → calkit_python-0.37.1}/tsconfig.test.json +0 -0
  283. {calkit_python-0.37.0 → calkit_python-0.37.1}/ui-tests/.gitignore +0 -0
  284. {calkit_python-0.37.0 → calkit_python-0.37.1}/ui-tests/README.md +0 -0
  285. {calkit_python-0.37.0 → calkit_python-0.37.1}/ui-tests/jupyter_server_test_config.py +0 -0
  286. {calkit_python-0.37.0 → calkit_python-0.37.1}/ui-tests/package.json +0 -0
  287. {calkit_python-0.37.0 → calkit_python-0.37.1}/ui-tests/playwright.config.js +0 -0
  288. {calkit_python-0.37.0 → calkit_python-0.37.1}/ui-tests/tests/calkit.spec.ts +0 -0
  289. {calkit_python-0.37.0 → calkit_python-0.37.1}/ui-tests/yarn.lock +0 -0
  290. {calkit_python-0.37.0 → calkit_python-0.37.1}/uv.lock +0 -0
  291. {calkit_python-0.37.0 → calkit_python-0.37.1}/vscode-ext/.gitignore +0 -0
  292. {calkit_python-0.37.0 → calkit_python-0.37.1}/vscode-ext/.vscodeignore +0 -0
  293. {calkit_python-0.37.0 → calkit_python-0.37.1}/vscode-ext/CHANGELOG.md +0 -0
  294. {calkit_python-0.37.0 → calkit_python-0.37.1}/vscode-ext/LICENSE +0 -0
  295. {calkit_python-0.37.0 → calkit_python-0.37.1}/vscode-ext/README.md +0 -0
  296. {calkit_python-0.37.0 → calkit_python-0.37.1}/vscode-ext/images/calkit-no-bg.png +0 -0
  297. {calkit_python-0.37.0 → calkit_python-0.37.1}/vscode-ext/package-lock.json +0 -0
  298. {calkit_python-0.37.0 → calkit_python-0.37.1}/vscode-ext/package.json +0 -0
  299. {calkit_python-0.37.0 → calkit_python-0.37.1}/vscode-ext/scripts/set-proposed-api.js +0 -0
  300. {calkit_python-0.37.0 → calkit_python-0.37.1}/vscode-ext/src/environments.ts +0 -0
  301. {calkit_python-0.37.0 → calkit_python-0.37.1}/vscode-ext/src/extension.ts +0 -0
  302. {calkit_python-0.37.0 → calkit_python-0.37.1}/vscode-ext/src/notebooks.ts +0 -0
  303. {calkit_python-0.37.0 → calkit_python-0.37.1}/vscode-ext/src/test/environments.test.ts +0 -0
  304. {calkit_python-0.37.0 → calkit_python-0.37.1}/vscode-ext/src/test/notebooks.test.ts +0 -0
  305. {calkit_python-0.37.0 → calkit_python-0.37.1}/vscode-ext/src/types.ts +0 -0
  306. {calkit_python-0.37.0 → calkit_python-0.37.1}/vscode-ext/tsconfig.json +0 -0
  307. {calkit_python-0.37.0 → calkit_python-0.37.1}/yarn.lock +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: calkit-python
3
- Version: 0.37.0
3
+ Version: 0.37.1
4
4
  Summary: Reproducibility simplified.
5
5
  Project-URL: Homepage, https://calkit.org
6
6
  Project-URL: Issues, https://github.com/calkit/calkit/issues
@@ -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(" modified command")
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
- with zipfile.ZipFile(zip_path, "w") as zipf:
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
- with zipfile.ZipFile(zip_path, "w") as zipf:
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
- base_url = calkit.cloud.get_base_url()
279
- remote_url = f"{base_url}/projects/{project_name}/dvc"
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
- result = run_dvc_command(
288
- ["remote", "modify", remote_name, "auth", "custom"],
289
- cwd=wdir,
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
- for stage_name in stages_config.keys():
388
- if stage_name not in raw_stale_stages:
389
- continue
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.model_validate(result)
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 add_paths_to_zip(zipf: zipfile.ZipFile, paths: list[str]) -> None:
188
- """Add files to a zip archive, expanding directories recursively."""
189
- for path in paths:
190
- if os.path.isdir(path):
191
- for root, _, files in os.walk(path):
192
- for filename in files:
193
- fpath = os.path.join(root, filename)
194
- zipf.write(fpath)
195
- elif os.path.isfile(path):
196
- zipf.write(path)
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 test_add_paths_to_zip_expands_directory_contents(tmp_dir):
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
- with zipfile.ZipFile(zip_path, "w") as zipf:
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
- assert "data/sub/file.txt" in names
150
- assert "root.txt" in names
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