calkit-python 0.41.19__py3-none-any.whl → 0.41.20__py3-none-any.whl

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 (24) hide show
  1. calkit/cli/main/core.py +20 -3
  2. calkit/dvc/zip.py +17 -0
  3. calkit/tests/cli/main/test_core.py +23 -0
  4. calkit/tests/dvc/test_zip.py +25 -0
  5. {calkit_python-0.41.19.dist-info → calkit_python-0.41.20.dist-info}/METADATA +2 -2
  6. {calkit_python-0.41.19.dist-info → calkit_python-0.41.20.dist-info}/RECORD +24 -24
  7. {calkit_python-0.41.19.data → calkit_python-0.41.20.data}/data/etc/jupyter/jupyter_server_config.d/calkit.json +0 -0
  8. {calkit_python-0.41.19.data → calkit_python-0.41.20.data}/data/share/jupyter/labextensions/calkit/install.json +0 -0
  9. {calkit_python-0.41.19.data → calkit_python-0.41.20.data}/data/share/jupyter/labextensions/calkit/package.json +0 -0
  10. {calkit_python-0.41.19.data → calkit_python-0.41.20.data}/data/share/jupyter/labextensions/calkit/schemas/calkit/package.json.orig +0 -0
  11. {calkit_python-0.41.19.data → calkit_python-0.41.20.data}/data/share/jupyter/labextensions/calkit/schemas/calkit/plugin.json +0 -0
  12. {calkit_python-0.41.19.data → calkit_python-0.41.20.data}/data/share/jupyter/labextensions/calkit/static/502.9a2c5772a15466e923ef.js +0 -0
  13. {calkit_python-0.41.19.data → calkit_python-0.41.20.data}/data/share/jupyter/labextensions/calkit/static/695.2c41003a452d43d2b358.js +0 -0
  14. {calkit_python-0.41.19.data → calkit_python-0.41.20.data}/data/share/jupyter/labextensions/calkit/static/867.a42a046aa5108f54f8fb.js +0 -0
  15. {calkit_python-0.41.19.data → calkit_python-0.41.20.data}/data/share/jupyter/labextensions/calkit/static/909.e3f9cc3408834a7fdcc3.js +0 -0
  16. {calkit_python-0.41.19.data → calkit_python-0.41.20.data}/data/share/jupyter/labextensions/calkit/static/946.050af2abf7845cfbdbd2.js +0 -0
  17. {calkit_python-0.41.19.data → calkit_python-0.41.20.data}/data/share/jupyter/labextensions/calkit/static/946.050af2abf7845cfbdbd2.js.LICENSE.txt +0 -0
  18. {calkit_python-0.41.19.data → calkit_python-0.41.20.data}/data/share/jupyter/labextensions/calkit/static/b2f1c3efe70cb539d121.png +0 -0
  19. {calkit_python-0.41.19.data → calkit_python-0.41.20.data}/data/share/jupyter/labextensions/calkit/static/remoteEntry.ac9035764d5b2adbb542.js +0 -0
  20. {calkit_python-0.41.19.data → calkit_python-0.41.20.data}/data/share/jupyter/labextensions/calkit/static/style.js +0 -0
  21. {calkit_python-0.41.19.data → calkit_python-0.41.20.data}/data/share/jupyter/labextensions/calkit/static/third-party-licenses.json +0 -0
  22. {calkit_python-0.41.19.dist-info → calkit_python-0.41.20.dist-info}/WHEEL +0 -0
  23. {calkit_python-0.41.19.dist-info → calkit_python-0.41.20.dist-info}/entry_points.txt +0 -0
  24. {calkit_python-0.41.19.dist-info → calkit_python-0.41.20.dist-info}/licenses/LICENSE +0 -0
calkit/cli/main/core.py CHANGED
@@ -179,11 +179,26 @@ def init(
179
179
  typer.Option(
180
180
  "--force",
181
181
  "-f",
182
- help="Force reinitializing DVC if already initialized.",
182
+ help="Re-initialize even if the project is already initialized.",
183
183
  ),
184
184
  ] = False,
185
185
  ):
186
186
  """Initialize the current working directory."""
187
+ import git
188
+ from git.exc import InvalidGitRepositoryError
189
+
190
+ def _project_is_initialized() -> bool:
191
+ try:
192
+ git.Repo(".", search_parent_directories=False)
193
+ except InvalidGitRepositoryError:
194
+ return False
195
+ return os.path.isfile(".dvc/config") and os.path.isfile("calkit.yaml")
196
+
197
+ if _project_is_initialized() and not force:
198
+ raise_error(
199
+ "This project is already initialized. "
200
+ "Use --force to re-initialize."
201
+ )
187
202
  subprocess.run(["git", "init"])
188
203
  result = calkit.dvc.run_dvc_command(
189
204
  ["init"] + (["--force"] if force else [])
@@ -197,13 +212,15 @@ def init(
197
212
  # Commit the newly created .dvc directory
198
213
  repo = calkit.git.get_repo()
199
214
  repo.git.add(".dvc")
200
- repo.git.commit("-m", "Initialize DVC")
215
+ if calkit.git.get_staged_files(repo=repo):
216
+ repo.git.commit("-m", "Initialize DVC")
201
217
  # Create an empty calkit.yaml if one doesn't already exist
202
218
  if not os.path.isfile("calkit.yaml"):
203
219
  with open("calkit.yaml", "w"):
204
220
  pass
205
221
  repo.git.add("calkit.yaml")
206
- repo.git.commit("-m", "Initialize Calkit")
222
+ if calkit.git.get_staged_files(repo=repo):
223
+ repo.git.commit("-m", "Initialize Calkit")
207
224
  # TODO: Initialize `dvc.yaml`
208
225
  # TODO: Add a sane .gitignore file
209
226
  # TODO: Add a sane LICENSE file?
calkit/dvc/zip.py CHANGED
@@ -499,6 +499,23 @@ def _sync_one(
499
499
  # pipeline output that hasn't been produced yet on a fresh run)
500
500
  if workspace_hash is None and zip_hash is None:
501
501
  return None
502
+ # Workspace doesn't exist with no prior sync record while syncing to-zip —
503
+ # there's nothing to push into the zip (e.g., the zip was pulled but
504
+ # never unzipped into the workspace)
505
+ if (
506
+ workspace_hash is None
507
+ and last_sync_record is None
508
+ and direction == "to-zip"
509
+ ):
510
+ return None
511
+ # Zip doesn't exist with no prior sync record while syncing to-workspace —
512
+ # there's nothing to pull into the workspace
513
+ if (
514
+ zip_hash is None
515
+ and last_sync_record is None
516
+ and direction == "to-workspace"
517
+ ):
518
+ return None
502
519
  # Deletion + change on the other side is a conflict
503
520
  if workspace_deleted and zip_changed and direction == "both":
504
521
  raise RuntimeError(
@@ -60,6 +60,16 @@ def test_init(tmp_dir):
60
60
  subprocess.check_call(["calkit", "init"])
61
61
  assert os.path.isfile("calkit.yaml")
62
62
  assert calkit.load_calkit_info() == {}
63
+ # Already initialized: init without --force fails and does not clobber
64
+ result = subprocess.run(
65
+ ["calkit", "init"],
66
+ capture_output=True,
67
+ text=True,
68
+ )
69
+ assert result.returncode != 0
70
+ assert "already initialized" in result.stderr.lower()
71
+ assert "use --force" in result.stderr.lower()
72
+ assert calkit.load_calkit_info() == {}
63
73
  # init must not clobber a pre-existing calkit.yaml
64
74
  os.makedirs("sub")
65
75
  ck_info = {"name": "test-project"}
@@ -67,6 +77,19 @@ def test_init(tmp_dir):
67
77
  calkit.ryaml.dump(ck_info, f)
68
78
  subprocess.check_call(["calkit", "init"], cwd="sub")
69
79
  assert calkit.load_calkit_info(wdir="sub") == ck_info
80
+ # Fully initialized project blocks init without --force
81
+ result = subprocess.run(
82
+ ["calkit", "init"],
83
+ cwd="sub",
84
+ capture_output=True,
85
+ text=True,
86
+ )
87
+ assert result.returncode != 0
88
+ assert "already initialized" in result.stderr.lower()
89
+ assert calkit.load_calkit_info(wdir="sub") == ck_info
90
+ # --force allows re-initialization without clobbering calkit.yaml
91
+ subprocess.check_call(["calkit", "init", "--force"], cwd="sub")
92
+ assert calkit.load_calkit_info(wdir="sub") == ck_info
70
93
 
71
94
 
72
95
  @skipif_windows_docker
@@ -303,3 +303,28 @@ def test_sync_one(tmp_dir, monkeypatch):
303
303
  assert result is not None
304
304
  assert (src7 / "a.txt").read_text() == "hello"
305
305
  assert get_sync_record(str(src7.as_posix())) is not None
306
+ # Zip exists but workspace was never unzipped (no sync record) with
307
+ # direction=to-zip: nothing to push, skip without error
308
+ src8 = tmp_dir / "src8"
309
+ src8.mkdir()
310
+ (src8 / "a.txt").write_text("hello")
311
+ zip_out8 = str(tmp_dir / calkit.dvc.zip.ZIPS_DIR / "src8.zip")
312
+ zip_(str(src8), zip_out8)
313
+ shutil.rmtree(str(src8))
314
+ write_zip_path_map({str(src8.as_posix()): zip_out8})
315
+ result = sync_one(str(src8), zip_out8, direction="to-zip")
316
+ assert result is None
317
+ assert os.path.isfile(zip_out8)
318
+ assert not os.path.exists(str(src8))
319
+ # Workspace exists but zip was never created (no sync record) with
320
+ # direction=to-workspace: nothing to pull, skip without error
321
+ src9 = tmp_dir / "src9"
322
+ src9.mkdir()
323
+ (src9 / "a.txt").write_text("hello")
324
+ zip_out9 = str(tmp_dir / calkit.dvc.zip.ZIPS_DIR / "src9.zip")
325
+ write_zip_path_map({str(src9.as_posix()): zip_out9})
326
+ result = sync_one(str(src9), zip_out9, direction="to-workspace")
327
+ assert result is None
328
+ assert not os.path.exists(zip_out9)
329
+ assert get_sync_record(str(src9.as_posix())) is None
330
+ assert (src9 / "a.txt").read_text() == "hello"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: calkit-python
3
- Version: 0.41.19
3
+ Version: 0.41.20
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,7 +26,7 @@ Requires-Dist: arithmeval
26
26
  Requires-Dist: bibtexparser
27
27
  Requires-Dist: checksumdir
28
28
  Requires-Dist: docx2pdf
29
- Requires-Dist: dvc==3.67.1
29
+ Requires-Dist: dvc[all]==3.67.1
30
30
  Requires-Dist: fastapi
31
31
  Requires-Dist: fsspec>=2026.4.0
32
32
  Requires-Dist: gitpython
@@ -47,11 +47,11 @@ calkit/cli/overleaf.py,sha256=bS-SkYsSqqhC9YsP-NCzpYJCGS3820w18w_s8JOFihg,25216
47
47
  calkit/cli/scheduler.py,sha256=OWJpW57G6Ebs5FTZ_nf2PpEG9QNd6WPe0mb3TmbVTyE,42402
48
48
  calkit/cli/update.py,sha256=5Jjo-5uRTxd5UWHvOETPYFWtJJRr81qmKmsibthkLPk,43501
49
49
  calkit/cli/main/__init__.py,sha256=qu1POZPyqs33ZKfasOxv_Wc-EzVcEgK3Dt_vwFL8Bi8,65
50
- calkit/cli/main/core.py,sha256=MMKEAI4bAJm1YJcS4E5MTQAR-XluwtGn3wlsNYjK-NE,123878
50
+ calkit/cli/main/core.py,sha256=lPLVIEUHOYhvHVt2kncB4Y5Jt3D7KDFBY44F5bTFtXY,124496
51
51
  calkit/cli/main/xr.py,sha256=Bug5qJuiIq0tusmdu30t-ZdyaT_Sy5RwPSTiHvCtIqE,25600
52
52
  calkit/dvc/__init__.py,sha256=-B6tilCb_jw7QFmJ2srILez24wDhNKUzIBhZUMt01dE,381
53
53
  calkit/dvc/core.py,sha256=p42i_uCzgZD6ClGnLOn88zaiGTwrdSG09quL8Hb8Aas,30908
54
- calkit/dvc/zip.py,sha256=nsAkcTLinH5S2UyZMdoYrBESKPb7s-PARmnuY9dyWVQ,21256
54
+ calkit/dvc/zip.py,sha256=nf4EzOyc5nI_OA3M6S7wwZpL7N4EQz9yCf8FbnPjlxM,21857
55
55
  calkit/jupyterlab/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
56
56
  calkit/jupyterlab/routes.py,sha256=jnNd289CpNQFY6am5p3qaiL_Tcnkd6J_vDVdjIXlb1A,51465
57
57
  calkit/models/__init__.py,sha256=vGYF4MZBGzDk1BPBzpp1bRb59RCJ2Bj2kzHuVVRacug,120
@@ -106,13 +106,13 @@ calkit/tests/cli/test_overleaf.py,sha256=Y-ud4kZHh3nhyoZlXrtMfx61z-GPNytUpfDHMad
106
106
  calkit/tests/cli/test_scheduler.py,sha256=mE0KLwcb9gozOnylTLsaL_xYGAptlD9hB8ZiKpPhmcc,17934
107
107
  calkit/tests/cli/test_update.py,sha256=bwRF0kpqbCVxNvGH777LHFX3oUP2DyN3XXUBDCEKNoc,6356
108
108
  calkit/tests/cli/main/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
109
- calkit/tests/cli/main/test_core.py,sha256=_Sjsu-WihAD4wMpL6QyA0T4W-_GtfPRm6ho6wxQqbeA,66012
109
+ calkit/tests/cli/main/test_core.py,sha256=kDB0e-13jkx5-1wYAFgzIwzt2A10r_1eExYFf8v6sd4,66919
110
110
  calkit/tests/cli/main/test_lock.py,sha256=1iX8iSbGtr4O9OkaAi4d3gP3_QzNl6Rr6HLtbEpS6iU,9847
111
111
  calkit/tests/cli/main/test_subprojects.py,sha256=ZR2ZQvZ4XZOi-iW8nlZEYu_2CUyUWoc0MABmnFrF9DQ,12730
112
112
  calkit/tests/cli/main/test_xr.py,sha256=shk8LHS33bZpr_iAW5eA5sMD3nQDKm8fIwXlE6dA2uI,22527
113
113
  calkit/tests/dvc/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
114
114
  calkit/tests/dvc/test_core.py,sha256=ywXBEyw1XpoSuu1EnMbFl-ebbdEJjpaBEPG157_3RBY,12914
115
- calkit/tests/dvc/test_zip.py,sha256=H6L3uJdUpsaNQcOPKnmRxMb5Imr_MaDQFoAnMrZMErU,11212
115
+ calkit/tests/dvc/test_zip.py,sha256=UjluBZYTnw5nisHELz42VRPDk88b0TvDx4QJNVaR-iA,12369
116
116
  calkit/tests/jupyterlab/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
117
117
  calkit/tests/jupyterlab/conftest.py,sha256=Xsh5Zwg0fdqEFPkHDgG7oCHhHJj6WuZLWbmsl7ATABA,207
118
118
  calkit/tests/jupyterlab/test_routes.py,sha256=TEEyoHiKnzzKOkQsJcMPKdqpKFQ25yBCvVSquqe9nsE,408
@@ -123,23 +123,23 @@ calkit/tests/models/test_pipeline.py,sha256=9F0g6ij7vc8c2hIRIVTHpT0I-JHXC6i2NRB2
123
123
  calkit/agent_skills/add-pipeline-stage/SKILL.md,sha256=kpYYb-rJsS4B9p1Ub3gL21irCG5ZZ4DvWZpdJeEwPZk,3772
124
124
  calkit/agent_skills/conventions/SKILL.md,sha256=nAM2FjSMk6ED56Dr5zh2bL_dhfzDra-h2ZgzHU7ruS4,9524
125
125
  calkit/agent_skills/create-pipeline/SKILL.md,sha256=2FGw1iDQVRk5FUq79GP3lPdgvgof2Wi1O9O-abGGtgs,5422
126
- calkit_python-0.41.19.data/data/etc/jupyter/jupyter_server_config.d/calkit.json,sha256=CWrZP--JDGz8fsvbAlKr_duTL1vDriGT48SL1YCtkY0,81
127
- calkit_python-0.41.19.data/data/share/jupyter/labextensions/calkit/package.json,sha256=39PQEWOzw0qtqD7Kep3OPbUR113vI7CG5TeD84v7clM,6224
128
- calkit_python-0.41.19.data/data/share/jupyter/labextensions/calkit/schemas/calkit/package.json.orig,sha256=NBG3t7gFYb6_2J-yPU29qS7Ck9pYgm8-wC5Q1LrzQeI,6082
129
- calkit_python-0.41.19.data/data/share/jupyter/labextensions/calkit/schemas/calkit/plugin.json,sha256=YSpIrwpwB-lQBk9Mwv-npedWTOOZreO6nlWZhqlWyGI,840
130
- calkit_python-0.41.19.data/data/share/jupyter/labextensions/calkit/static/502.9a2c5772a15466e923ef.js,sha256=mixXcqFUZukj7_jQVxHTavsYl7cdZv83sEe4phJgkh0,59893
131
- calkit_python-0.41.19.data/data/share/jupyter/labextensions/calkit/static/695.2c41003a452d43d2b358.js,sha256=LEEAOkUtQ9KzWEHn-QFv5yGi70B-sBOnrvztzHr0Shw,223
132
- calkit_python-0.41.19.data/data/share/jupyter/labextensions/calkit/static/867.a42a046aa5108f54f8fb.js,sha256=pCoEaqUQj1T4-zAc9SUd__9ZGm7uL2wHQve2xwL89NI,8156
133
- calkit_python-0.41.19.data/data/share/jupyter/labextensions/calkit/static/909.e3f9cc3408834a7fdcc3.js,sha256=4_nMNAiDSn_cw7UjIHEwone4fizrvqrqSgbwUWvjmoU,114571
134
- calkit_python-0.41.19.data/data/share/jupyter/labextensions/calkit/static/946.050af2abf7845cfbdbd2.js,sha256=n_a0yu_gE7l6fauyoXXv9BZ7ZEYt2387mTfs7CbLcs4,51939
135
- calkit_python-0.41.19.data/data/share/jupyter/labextensions/calkit/static/946.050af2abf7845cfbdbd2.js.LICENSE.txt,sha256=eNJ8gc9n9IF8nW1d9sI9niuHstYzjNz5vqXx9UgWSPc,249
136
- calkit_python-0.41.19.data/data/share/jupyter/labextensions/calkit/static/b2f1c3efe70cb539d121.png,sha256=svHD7-cMtTnRITFwugwsVaB9nZ-h8A61ose8z32HiRE,24850
137
- calkit_python-0.41.19.data/data/share/jupyter/labextensions/calkit/static/remoteEntry.ac9035764d5b2adbb542.js,sha256=rJA1dk1bKtu1QkURrp5HEC2WCxzZppPV1SCYz-35GTc,8737
138
- calkit_python-0.41.19.data/data/share/jupyter/labextensions/calkit/static/style.js,sha256=r89Jlk5v1drcwhCpv9FnC3Jig_JH4k24kZNIvxh6Htk,149
139
- calkit_python-0.41.19.data/data/share/jupyter/labextensions/calkit/static/third-party-licenses.json,sha256=2BGdItLJwO3fAopLl4eJvp26TEwuscYC0-yFaF-LaLU,13683
140
- calkit_python-0.41.19.data/data/share/jupyter/labextensions/calkit/install.json,sha256=DK9d8G-q-rMVlcT3rAeGIyo3REWKw6FySBZceLU9yaw,187
141
- calkit_python-0.41.19.dist-info/METADATA,sha256=wDbS_46jDpM0rrNts42Fxlh_bfLCO-8ihA0n32v-SKU,12437
142
- calkit_python-0.41.19.dist-info/WHEEL,sha256=mffPy8wBnZQn2VnJUU5jE99KsxaSfiyMHV9Yt0aLVxs,87
143
- calkit_python-0.41.19.dist-info/entry_points.txt,sha256=2iQBBzjTAOdk66CwS-f3ecXXW5DjUqkG1KBRj8mHI1I,133
144
- calkit_python-0.41.19.dist-info/licenses/LICENSE,sha256=9ZamCaSUTZk9rcrnf-sWFKLOHr3ws-S_dgKMegW4nw8,1056
145
- calkit_python-0.41.19.dist-info/RECORD,,
126
+ calkit_python-0.41.20.data/data/etc/jupyter/jupyter_server_config.d/calkit.json,sha256=CWrZP--JDGz8fsvbAlKr_duTL1vDriGT48SL1YCtkY0,81
127
+ calkit_python-0.41.20.data/data/share/jupyter/labextensions/calkit/package.json,sha256=39PQEWOzw0qtqD7Kep3OPbUR113vI7CG5TeD84v7clM,6224
128
+ calkit_python-0.41.20.data/data/share/jupyter/labextensions/calkit/schemas/calkit/package.json.orig,sha256=NBG3t7gFYb6_2J-yPU29qS7Ck9pYgm8-wC5Q1LrzQeI,6082
129
+ calkit_python-0.41.20.data/data/share/jupyter/labextensions/calkit/schemas/calkit/plugin.json,sha256=YSpIrwpwB-lQBk9Mwv-npedWTOOZreO6nlWZhqlWyGI,840
130
+ calkit_python-0.41.20.data/data/share/jupyter/labextensions/calkit/static/502.9a2c5772a15466e923ef.js,sha256=mixXcqFUZukj7_jQVxHTavsYl7cdZv83sEe4phJgkh0,59893
131
+ calkit_python-0.41.20.data/data/share/jupyter/labextensions/calkit/static/695.2c41003a452d43d2b358.js,sha256=LEEAOkUtQ9KzWEHn-QFv5yGi70B-sBOnrvztzHr0Shw,223
132
+ calkit_python-0.41.20.data/data/share/jupyter/labextensions/calkit/static/867.a42a046aa5108f54f8fb.js,sha256=pCoEaqUQj1T4-zAc9SUd__9ZGm7uL2wHQve2xwL89NI,8156
133
+ calkit_python-0.41.20.data/data/share/jupyter/labextensions/calkit/static/909.e3f9cc3408834a7fdcc3.js,sha256=4_nMNAiDSn_cw7UjIHEwone4fizrvqrqSgbwUWvjmoU,114571
134
+ calkit_python-0.41.20.data/data/share/jupyter/labextensions/calkit/static/946.050af2abf7845cfbdbd2.js,sha256=n_a0yu_gE7l6fauyoXXv9BZ7ZEYt2387mTfs7CbLcs4,51939
135
+ calkit_python-0.41.20.data/data/share/jupyter/labextensions/calkit/static/946.050af2abf7845cfbdbd2.js.LICENSE.txt,sha256=eNJ8gc9n9IF8nW1d9sI9niuHstYzjNz5vqXx9UgWSPc,249
136
+ calkit_python-0.41.20.data/data/share/jupyter/labextensions/calkit/static/b2f1c3efe70cb539d121.png,sha256=svHD7-cMtTnRITFwugwsVaB9nZ-h8A61ose8z32HiRE,24850
137
+ calkit_python-0.41.20.data/data/share/jupyter/labextensions/calkit/static/remoteEntry.ac9035764d5b2adbb542.js,sha256=rJA1dk1bKtu1QkURrp5HEC2WCxzZppPV1SCYz-35GTc,8737
138
+ calkit_python-0.41.20.data/data/share/jupyter/labextensions/calkit/static/style.js,sha256=r89Jlk5v1drcwhCpv9FnC3Jig_JH4k24kZNIvxh6Htk,149
139
+ calkit_python-0.41.20.data/data/share/jupyter/labextensions/calkit/static/third-party-licenses.json,sha256=2BGdItLJwO3fAopLl4eJvp26TEwuscYC0-yFaF-LaLU,13683
140
+ calkit_python-0.41.20.data/data/share/jupyter/labextensions/calkit/install.json,sha256=DK9d8G-q-rMVlcT3rAeGIyo3REWKw6FySBZceLU9yaw,187
141
+ calkit_python-0.41.20.dist-info/METADATA,sha256=kNDMzEEG3WA9MQu9EOFf8G2oaCTjymyEfA3KFAIQtDA,12442
142
+ calkit_python-0.41.20.dist-info/WHEEL,sha256=mffPy8wBnZQn2VnJUU5jE99KsxaSfiyMHV9Yt0aLVxs,87
143
+ calkit_python-0.41.20.dist-info/entry_points.txt,sha256=2iQBBzjTAOdk66CwS-f3ecXXW5DjUqkG1KBRj8mHI1I,133
144
+ calkit_python-0.41.20.dist-info/licenses/LICENSE,sha256=9ZamCaSUTZk9rcrnf-sWFKLOHr3ws-S_dgKMegW4nw8,1056
145
+ calkit_python-0.41.20.dist-info/RECORD,,