lamindb 0.67.0__tar.gz → 0.67.2__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 (339) hide show
  1. {lamindb-0.67.0 → lamindb-0.67.2}/PKG-INFO +4 -4
  2. {lamindb-0.67.0 → lamindb-0.67.2}/docs/changelog.md +11 -0
  3. {lamindb-0.67.0 → lamindb-0.67.2}/lamindb/__init__.py +15 -15
  4. {lamindb-0.67.0 → lamindb-0.67.2}/lamindb/_artifact.py +4 -3
  5. {lamindb-0.67.0 → lamindb-0.67.2}/lamindb/_collection.py +5 -1
  6. {lamindb-0.67.0 → lamindb-0.67.2}/lamindb/_from_values.py +7 -7
  7. {lamindb-0.67.0 → lamindb-0.67.2}/lamindb/_query_manager.py +3 -6
  8. {lamindb-0.67.0 → lamindb-0.67.2}/lamindb/_query_set.py +17 -1
  9. {lamindb-0.67.0 → lamindb-0.67.2}/lamindb/_run.py +23 -0
  10. {lamindb-0.67.0 → lamindb-0.67.2}/lamindb/_transform.py +26 -1
  11. {lamindb-0.67.0 → lamindb-0.67.2}/lamindb/dev/_label_manager.py +1 -1
  12. {lamindb-0.67.0 → lamindb-0.67.2}/lamindb/dev/_run_context.py +2 -2
  13. {lamindb-0.67.0 → lamindb-0.67.2}/lamindb/dev/storage/file.py +33 -1
  14. {lamindb-0.67.0 → lamindb-0.67.2}/noxfile.py +24 -20
  15. {lamindb-0.67.0 → lamindb-0.67.2}/pyproject.toml +3 -3
  16. lamindb-0.67.2/sub/lamin-cli/lamin_cli/__init__.py +3 -0
  17. {lamindb-0.67.0 → lamindb-0.67.2}/sub/lamin-cli/lamin_cli/__main__.py +10 -2
  18. lamindb-0.67.2/sub/lamin-cli/lamin_cli/_stage.py +29 -0
  19. {lamindb-0.67.0 → lamindb-0.67.2}/sub/lamin-cli/lamin_cli/_transform.py +2 -2
  20. {lamindb-0.67.0 → lamindb-0.67.2}/sub/lamin-cli/tests/scripts/initialized.py +1 -1
  21. {lamindb-0.67.0 → lamindb-0.67.2}/sub/lamin-cli/tests/test_scripts.py +13 -4
  22. lamindb-0.67.2/sub/lamin-cli/tests/test_stage.py +21 -0
  23. {lamindb-0.67.0 → lamindb-0.67.2}/sub/lamindb-setup/docs/changelog.md +2 -0
  24. {lamindb-0.67.0 → lamindb-0.67.2}/sub/lamindb-setup/lamindb_setup/dev/upath.py +3 -2
  25. lamindb-0.67.2/sub/lamindb-setup/tests/prod-only/test_upath.py +18 -0
  26. {lamindb-0.67.0 → lamindb-0.67.2}/sub/lamindb-setup/tests/prod-staging/test_load_instance.py +5 -5
  27. {lamindb-0.67.0 → lamindb-0.67.2}/sub/lnschema-bionty/docs/changelog.md +2 -0
  28. {lamindb-0.67.0 → lamindb-0.67.2}/sub/lnschema-bionty/lnschema_bionty/__init__.py +1 -1
  29. {lamindb-0.67.0 → lamindb-0.67.2}/sub/lnschema-bionty/lnschema_bionty/_bionty.py +25 -25
  30. {lamindb-0.67.0 → lamindb-0.67.2}/sub/lnschema-bionty/lnschema_bionty/models.py +13 -15
  31. {lamindb-0.67.0 → lamindb-0.67.2}/sub/lnschema-bionty/pyproject.toml +1 -1
  32. {lamindb-0.67.0 → lamindb-0.67.2}/tests/test_artifact.py +61 -15
  33. {lamindb-0.67.0 → lamindb-0.67.2}/tests/test_collection.py +2 -9
  34. {lamindb-0.67.0 → lamindb-0.67.2}/tests/test_delete.py +1 -2
  35. lamindb-0.67.2/tests/test_load.py +39 -0
  36. {lamindb-0.67.0 → lamindb-0.67.2}/tests/test_transfer.py +13 -13
  37. {lamindb-0.67.0 → lamindb-0.67.2}/tests/test_transform.py +53 -6
  38. lamindb-0.67.0/lamindb/_delete.py +0 -65
  39. lamindb-0.67.0/sub/lamin-cli/lamin_cli/__init__.py +0 -3
  40. {lamindb-0.67.0 → lamindb-0.67.2}/.github/workflows/build.yml +0 -0
  41. {lamindb-0.67.0 → lamindb-0.67.2}/.github/workflows/latest-changes.jinja2 +0 -0
  42. {lamindb-0.67.0 → lamindb-0.67.2}/.github/workflows/latest-changes.yml +0 -0
  43. {lamindb-0.67.0 → lamindb-0.67.2}/.gitignore +0 -0
  44. {lamindb-0.67.0 → lamindb-0.67.2}/.gitmodules +0 -0
  45. {lamindb-0.67.0 → lamindb-0.67.2}/.pre-commit-config.yaml +0 -0
  46. {lamindb-0.67.0 → lamindb-0.67.2}/LICENSE +0 -0
  47. {lamindb-0.67.0 → lamindb-0.67.2}/README.md +0 -0
  48. {lamindb-0.67.0 → lamindb-0.67.2}/docs/annotate.ipynb +0 -0
  49. {lamindb-0.67.0 → lamindb-0.67.2}/docs/bio-registries.ipynb +0 -0
  50. {lamindb-0.67.0 → lamindb-0.67.2}/docs/bionty.md +0 -0
  51. {lamindb-0.67.0 → lamindb-0.67.2}/docs/data.ipynb +0 -0
  52. {lamindb-0.67.0 → lamindb-0.67.2}/docs/faq/acid.ipynb +0 -0
  53. {lamindb-0.67.0 → lamindb-0.67.2}/docs/faq/delete.ipynb +0 -0
  54. {lamindb-0.67.0 → lamindb-0.67.2}/docs/faq/idempotency.ipynb +0 -0
  55. {lamindb-0.67.0 → lamindb-0.67.2}/docs/faq/import-schema.ipynb +0 -0
  56. {lamindb-0.67.0 → lamindb-0.67.2}/docs/faq/key.ipynb +0 -0
  57. {lamindb-0.67.0 → lamindb-0.67.2}/docs/faq/reference-field.ipynb +0 -0
  58. {lamindb-0.67.0 → lamindb-0.67.2}/docs/faq/setup.ipynb +0 -0
  59. {lamindb-0.67.0 → lamindb-0.67.2}/docs/faq/test_notebooks.py +0 -0
  60. {lamindb-0.67.0 → lamindb-0.67.2}/docs/faq/track-run-inputs.ipynb +0 -0
  61. {lamindb-0.67.0 → lamindb-0.67.2}/docs/faq/validator.ipynb +0 -0
  62. {lamindb-0.67.0 → lamindb-0.67.2}/docs/faq/visibility.ipynb +0 -0
  63. {lamindb-0.67.0 → lamindb-0.67.2}/docs/faq.md +0 -0
  64. {lamindb-0.67.0 → lamindb-0.67.2}/docs/features-lamindb.md +0 -0
  65. {lamindb-0.67.0 → lamindb-0.67.2}/docs/features-laminhub.md +0 -0
  66. {lamindb-0.67.0 → lamindb-0.67.2}/docs/guide.md +0 -0
  67. {lamindb-0.67.0 → lamindb-0.67.2}/docs/index.md +0 -0
  68. {lamindb-0.67.0 → lamindb-0.67.2}/docs/installation.md +0 -0
  69. {lamindb-0.67.0 → lamindb-0.67.2}/docs/introduction.ipynb +0 -0
  70. {lamindb-0.67.0 → lamindb-0.67.2}/docs/lamin-utils.md +0 -0
  71. {lamindb-0.67.0 → lamindb-0.67.2}/docs/lamindb.md +0 -0
  72. {lamindb-0.67.0 → lamindb-0.67.2}/docs/lnschema-bionty.md +0 -0
  73. {lamindb-0.67.0 → lamindb-0.67.2}/docs/meta.ipynb +0 -0
  74. {lamindb-0.67.0 → lamindb-0.67.2}/docs/nbproject.md +0 -0
  75. {lamindb-0.67.0 → lamindb-0.67.2}/docs/query-search.md +0 -0
  76. {lamindb-0.67.0 → lamindb-0.67.2}/docs/readfcs.md +0 -0
  77. {lamindb-0.67.0 → lamindb-0.67.2}/docs/reference.md +0 -0
  78. {lamindb-0.67.0 → lamindb-0.67.2}/docs/schemas.ipynb +0 -0
  79. {lamindb-0.67.0 → lamindb-0.67.2}/docs/setup.ipynb +0 -0
  80. {lamindb-0.67.0 → lamindb-0.67.2}/docs/signup-login.md +0 -0
  81. {lamindb-0.67.0 → lamindb-0.67.2}/docs/storage/add-replace-stage.ipynb +0 -0
  82. {lamindb-0.67.0 → lamindb-0.67.2}/docs/storage/anndata-accessor.ipynb +0 -0
  83. {lamindb-0.67.0 → lamindb-0.67.2}/docs/storage/test-files/iris.csv +0 -0
  84. {lamindb-0.67.0 → lamindb-0.67.2}/docs/storage/test-files/iris.data +0 -0
  85. {lamindb-0.67.0 → lamindb-0.67.2}/docs/storage/test-files/new_iris.csv +0 -0
  86. {lamindb-0.67.0 → lamindb-0.67.2}/docs/storage/test_notebooks.py +0 -0
  87. {lamindb-0.67.0 → lamindb-0.67.2}/docs/storage/upload.ipynb +0 -0
  88. {lamindb-0.67.0 → lamindb-0.67.2}/docs/storage.md +0 -0
  89. {lamindb-0.67.0 → lamindb-0.67.2}/docs/test_notebooks.py +0 -0
  90. {lamindb-0.67.0 → lamindb-0.67.2}/docs/track.ipynb +0 -0
  91. {lamindb-0.67.0 → lamindb-0.67.2}/docs/transfer.ipynb +0 -0
  92. {lamindb-0.67.0 → lamindb-0.67.2}/docs/tutorial.ipynb +0 -0
  93. {lamindb-0.67.0 → lamindb-0.67.2}/docs/tutorial2.ipynb +0 -0
  94. {lamindb-0.67.0 → lamindb-0.67.2}/docs/validate.ipynb +0 -0
  95. {lamindb-0.67.0 → lamindb-0.67.2}/lamindb/_feature.py +0 -0
  96. {lamindb-0.67.0 → lamindb-0.67.2}/lamindb/_feature_set.py +0 -0
  97. {lamindb-0.67.0 → lamindb-0.67.2}/lamindb/_filter.py +0 -0
  98. {lamindb-0.67.0 → lamindb-0.67.2}/lamindb/_parents.py +0 -0
  99. {lamindb-0.67.0 → lamindb-0.67.2}/lamindb/_registry.py +0 -0
  100. {lamindb-0.67.0 → lamindb-0.67.2}/lamindb/_save.py +0 -0
  101. {lamindb-0.67.0 → lamindb-0.67.2}/lamindb/_storage.py +0 -0
  102. {lamindb-0.67.0 → lamindb-0.67.2}/lamindb/_ulabel.py +0 -0
  103. {lamindb-0.67.0 → lamindb-0.67.2}/lamindb/_utils.py +0 -0
  104. {lamindb-0.67.0 → lamindb-0.67.2}/lamindb/_validate.py +0 -0
  105. {lamindb-0.67.0 → lamindb-0.67.2}/lamindb/_view.py +0 -0
  106. {lamindb-0.67.0 → lamindb-0.67.2}/lamindb/dev/__init__.py +0 -0
  107. {lamindb-0.67.0 → lamindb-0.67.2}/lamindb/dev/_data.py +0 -0
  108. {lamindb-0.67.0 → lamindb-0.67.2}/lamindb/dev/_feature_manager.py +0 -0
  109. {lamindb-0.67.0 → lamindb-0.67.2}/lamindb/dev/_mapped_collection.py +0 -0
  110. {lamindb-0.67.0 → lamindb-0.67.2}/lamindb/dev/_settings.py +0 -0
  111. {lamindb-0.67.0 → lamindb-0.67.2}/lamindb/dev/_track_environment.py +0 -0
  112. {lamindb-0.67.0 → lamindb-0.67.2}/lamindb/dev/_view_tree.py +0 -0
  113. {lamindb-0.67.0 → lamindb-0.67.2}/lamindb/dev/datasets/__init__.py +0 -0
  114. {lamindb-0.67.0 → lamindb-0.67.2}/lamindb/dev/datasets/_core.py +0 -0
  115. {lamindb-0.67.0 → lamindb-0.67.2}/lamindb/dev/datasets/_fake.py +0 -0
  116. {lamindb-0.67.0 → lamindb-0.67.2}/lamindb/dev/exceptions.py +0 -0
  117. {lamindb-0.67.0 → lamindb-0.67.2}/lamindb/dev/fields.py +0 -0
  118. {lamindb-0.67.0 → lamindb-0.67.2}/lamindb/dev/hashing.py +0 -0
  119. {lamindb-0.67.0 → lamindb-0.67.2}/lamindb/dev/storage/__init__.py +0 -0
  120. {lamindb-0.67.0 → lamindb-0.67.2}/lamindb/dev/storage/_anndata_sizes.py +0 -0
  121. {lamindb-0.67.0 → lamindb-0.67.2}/lamindb/dev/storage/_backed_access.py +0 -0
  122. {lamindb-0.67.0 → lamindb-0.67.2}/lamindb/dev/storage/_zarr.py +0 -0
  123. {lamindb-0.67.0 → lamindb-0.67.2}/lamindb/dev/storage/object.py +0 -0
  124. {lamindb-0.67.0 → lamindb-0.67.2}/lamindb/dev/types.py +0 -0
  125. {lamindb-0.67.0 → lamindb-0.67.2}/lamindb/dev/versioning.py +0 -0
  126. {lamindb-0.67.0 → lamindb-0.67.2}/lamindb/setup/__init__.py +0 -0
  127. {lamindb-0.67.0 → lamindb-0.67.2}/lamindb/setup/dev/__init__.py +0 -0
  128. {lamindb-0.67.0 → lamindb-0.67.2}/sub/lamin-cli/.gitignore +0 -0
  129. {lamindb-0.67.0 → lamindb-0.67.2}/sub/lamin-cli/.pre-commit-config.yaml +0 -0
  130. {lamindb-0.67.0 → lamindb-0.67.2}/sub/lamin-cli/README.md +0 -0
  131. {lamindb-0.67.0 → lamindb-0.67.2}/sub/lamin-cli/pyproject.toml +0 -0
  132. {lamindb-0.67.0 → lamindb-0.67.2}/sub/lamin-cli/tests/conftest.py +0 -0
  133. {lamindb-0.67.0 → lamindb-0.67.2}/sub/lamin-cli/tests/notebooks/no-title.ipynb +0 -0
  134. {lamindb-0.67.0 → lamindb-0.67.2}/sub/lamin-cli/tests/notebooks/not-initialized.ipynb +0 -0
  135. {lamindb-0.67.0 → lamindb-0.67.2}/sub/lamin-cli/tests/notebooks/with-title-and-initialized-consecutive.ipynb +0 -0
  136. {lamindb-0.67.0 → lamindb-0.67.2}/sub/lamin-cli/tests/notebooks/with-title-and-initialized-non-consecutive.ipynb +0 -0
  137. {lamindb-0.67.0 → lamindb-0.67.2}/sub/lamin-cli/tests/scripts/not-initialized.py +0 -0
  138. {lamindb-0.67.0 → lamindb-0.67.2}/sub/lamin-cli/tests/test_cli.py +0 -0
  139. {lamindb-0.67.0 → lamindb-0.67.2}/sub/lamin-cli/tests/test_migrate.py +0 -0
  140. {lamindb-0.67.0 → lamindb-0.67.2}/sub/lamin-cli/tests/test_notebooks.py +0 -0
  141. {lamindb-0.67.0 → lamindb-0.67.2}/sub/lamindb-setup/.github/workflows/build.yml +0 -0
  142. {lamindb-0.67.0 → lamindb-0.67.2}/sub/lamindb-setup/.github/workflows/latest-changes.jinja2 +0 -0
  143. {lamindb-0.67.0 → lamindb-0.67.2}/sub/lamindb-setup/.github/workflows/latest-changes.yml +0 -0
  144. {lamindb-0.67.0 → lamindb-0.67.2}/sub/lamindb-setup/.gitignore +0 -0
  145. {lamindb-0.67.0 → lamindb-0.67.2}/sub/lamindb-setup/.pre-commit-config.yaml +0 -0
  146. {lamindb-0.67.0 → lamindb-0.67.2}/sub/lamindb-setup/LICENSE +0 -0
  147. {lamindb-0.67.0 → lamindb-0.67.2}/sub/lamindb-setup/README.md +0 -0
  148. {lamindb-0.67.0 → lamindb-0.67.2}/sub/lamindb-setup/docs/index.md +0 -0
  149. {lamindb-0.67.0 → lamindb-0.67.2}/sub/lamindb-setup/docs/notebooks.md +0 -0
  150. {lamindb-0.67.0 → lamindb-0.67.2}/sub/lamindb-setup/docs/prod-only/test-cache-management.ipynb +0 -0
  151. {lamindb-0.67.0 → lamindb-0.67.2}/sub/lamindb-setup/docs/prod-only/test-empty-init.ipynb +0 -0
  152. {lamindb-0.67.0 → lamindb-0.67.2}/sub/lamindb-setup/docs/prod-only/test-import-schema.ipynb +0 -0
  153. {lamindb-0.67.0 → lamindb-0.67.2}/sub/lamindb-setup/docs/prod-only/test-insufficient-user-info.ipynb +0 -0
  154. {lamindb-0.67.0 → lamindb-0.67.2}/sub/lamindb-setup/docs/prod-only/test-invalid-schema.ipynb +0 -0
  155. {lamindb-0.67.0 → lamindb-0.67.2}/sub/lamindb-setup/docs/prod-only/test-load-anonymously.ipynb +0 -0
  156. {lamindb-0.67.0 → lamindb-0.67.2}/sub/lamindb-setup/docs/prod-only/test-load-lock.ipynb +0 -0
  157. {lamindb-0.67.0 → lamindb-0.67.2}/sub/lamindb-setup/docs/prod-only/test-sqlite-sync.ipynb +0 -0
  158. {lamindb-0.67.0 → lamindb-0.67.2}/sub/lamindb-setup/docs/prod-only/test_notebooks2.py +0 -0
  159. {lamindb-0.67.0 → lamindb-0.67.2}/sub/lamindb-setup/docs/prod-staging/01-init-instance.ipynb +0 -0
  160. {lamindb-0.67.0 → lamindb-0.67.2}/sub/lamindb-setup/docs/prod-staging/02-load-instance.ipynb +0 -0
  161. {lamindb-0.67.0 → lamindb-0.67.2}/sub/lamindb-setup/docs/prod-staging/03-set-storage.ipynb +0 -0
  162. {lamindb-0.67.0 → lamindb-0.67.2}/sub/lamindb-setup/docs/prod-staging/04-test-bionty.ipynb +0 -0
  163. {lamindb-0.67.0 → lamindb-0.67.2}/sub/lamindb-setup/docs/prod-staging/test-multi-session.ipynb +0 -0
  164. {lamindb-0.67.0 → lamindb-0.67.2}/sub/lamindb-setup/docs/prod-staging/test_notebooks.py +0 -0
  165. {lamindb-0.67.0 → lamindb-0.67.2}/sub/lamindb-setup/docs/reference.md +0 -0
  166. {lamindb-0.67.0 → lamindb-0.67.2}/sub/lamindb-setup/lamindb_setup/__init__.py +0 -0
  167. {lamindb-0.67.0 → lamindb-0.67.2}/sub/lamindb-setup/lamindb_setup/_cache.py +0 -0
  168. {lamindb-0.67.0 → lamindb-0.67.2}/sub/lamindb-setup/lamindb_setup/_check.py +0 -0
  169. {lamindb-0.67.0 → lamindb-0.67.2}/sub/lamindb-setup/lamindb_setup/_check_instance_setup.py +0 -0
  170. {lamindb-0.67.0 → lamindb-0.67.2}/sub/lamindb-setup/lamindb_setup/_close.py +0 -0
  171. {lamindb-0.67.0 → lamindb-0.67.2}/sub/lamindb-setup/lamindb_setup/_delete.py +0 -0
  172. {lamindb-0.67.0 → lamindb-0.67.2}/sub/lamindb-setup/lamindb_setup/_django.py +0 -0
  173. {lamindb-0.67.0 → lamindb-0.67.2}/sub/lamindb-setup/lamindb_setup/_docstrings.py +0 -0
  174. {lamindb-0.67.0 → lamindb-0.67.2}/sub/lamindb-setup/lamindb_setup/_export.py +0 -0
  175. {lamindb-0.67.0 → lamindb-0.67.2}/sub/lamindb-setup/lamindb_setup/_info.py +0 -0
  176. {lamindb-0.67.0 → lamindb-0.67.2}/sub/lamindb-setup/lamindb_setup/_init_instance.py +0 -0
  177. {lamindb-0.67.0 → lamindb-0.67.2}/sub/lamindb-setup/lamindb_setup/_init_vault.py +0 -0
  178. {lamindb-0.67.0 → lamindb-0.67.2}/sub/lamindb-setup/lamindb_setup/_load_instance.py +0 -0
  179. {lamindb-0.67.0 → lamindb-0.67.2}/sub/lamindb-setup/lamindb_setup/_migrate.py +0 -0
  180. {lamindb-0.67.0 → lamindb-0.67.2}/sub/lamindb-setup/lamindb_setup/_register_instance.py +0 -0
  181. {lamindb-0.67.0 → lamindb-0.67.2}/sub/lamindb-setup/lamindb_setup/_schema.py +0 -0
  182. {lamindb-0.67.0 → lamindb-0.67.2}/sub/lamindb-setup/lamindb_setup/_set.py +0 -0
  183. {lamindb-0.67.0 → lamindb-0.67.2}/sub/lamindb-setup/lamindb_setup/_settings.py +0 -0
  184. {lamindb-0.67.0 → lamindb-0.67.2}/sub/lamindb-setup/lamindb_setup/_setup_user.py +0 -0
  185. {lamindb-0.67.0 → lamindb-0.67.2}/sub/lamindb-setup/lamindb_setup/_silence_loggers.py +0 -0
  186. {lamindb-0.67.0 → lamindb-0.67.2}/sub/lamindb-setup/lamindb_setup/dev/__init__.py +0 -0
  187. {lamindb-0.67.0 → lamindb-0.67.2}/sub/lamindb-setup/lamindb_setup/dev/_deprecated.py +0 -0
  188. {lamindb-0.67.0 → lamindb-0.67.2}/sub/lamindb-setup/lamindb_setup/dev/_docs.py +0 -0
  189. {lamindb-0.67.0 → lamindb-0.67.2}/sub/lamindb-setup/lamindb_setup/dev/_hub_client.py +0 -0
  190. {lamindb-0.67.0 → lamindb-0.67.2}/sub/lamindb-setup/lamindb_setup/dev/_hub_core.py +0 -0
  191. {lamindb-0.67.0 → lamindb-0.67.2}/sub/lamindb-setup/lamindb_setup/dev/_hub_crud.py +0 -0
  192. {lamindb-0.67.0 → lamindb-0.67.2}/sub/lamindb-setup/lamindb_setup/dev/_hub_utils.py +0 -0
  193. {lamindb-0.67.0 → lamindb-0.67.2}/sub/lamindb-setup/lamindb_setup/dev/_settings_instance.py +0 -0
  194. {lamindb-0.67.0 → lamindb-0.67.2}/sub/lamindb-setup/lamindb_setup/dev/_settings_load.py +0 -0
  195. {lamindb-0.67.0 → lamindb-0.67.2}/sub/lamindb-setup/lamindb_setup/dev/_settings_save.py +0 -0
  196. {lamindb-0.67.0 → lamindb-0.67.2}/sub/lamindb-setup/lamindb_setup/dev/_settings_storage.py +0 -0
  197. {lamindb-0.67.0 → lamindb-0.67.2}/sub/lamindb-setup/lamindb_setup/dev/_settings_store.py +0 -0
  198. {lamindb-0.67.0 → lamindb-0.67.2}/sub/lamindb-setup/lamindb_setup/dev/_settings_user.py +0 -0
  199. {lamindb-0.67.0 → lamindb-0.67.2}/sub/lamindb-setup/lamindb_setup/dev/_setup_bionty_sources.py +0 -0
  200. {lamindb-0.67.0 → lamindb-0.67.2}/sub/lamindb-setup/lamindb_setup/dev/cloud_sqlite_locker.py +0 -0
  201. {lamindb-0.67.0 → lamindb-0.67.2}/sub/lamindb-setup/lamindb_setup/dev/django.py +0 -0
  202. {lamindb-0.67.0 → lamindb-0.67.2}/sub/lamindb-setup/noxfile.py +0 -0
  203. {lamindb-0.67.0 → lamindb-0.67.2}/sub/lamindb-setup/pyproject.toml +0 -0
  204. {lamindb-0.67.0 → lamindb-0.67.2}/sub/lamindb-setup/tests/hub-local/conftest.py +0 -0
  205. {lamindb-0.67.0 → lamindb-0.67.2}/sub/lamindb-setup/tests/hub-local/test_all.py +0 -0
  206. {lamindb-0.67.0 → lamindb-0.67.2}/sub/lamindb-setup/tests/prod-only/conftest.py +0 -0
  207. {lamindb-0.67.0 → lamindb-0.67.2}/sub/lamindb-setup/tests/prod-only/test_django.py +0 -0
  208. {lamindb-0.67.0 → lamindb-0.67.2}/sub/lamindb-setup/tests/prod-only/test_switch_and_fallback_env.py +0 -0
  209. {lamindb-0.67.0 → lamindb-0.67.2}/sub/lamindb-setup/tests/prod-staging/test_delete_instance.py +0 -0
  210. {lamindb-0.67.0 → lamindb-0.67.2}/sub/lamindb-setup/tests/prod-staging/test_init_instance.py +0 -0
  211. {lamindb-0.67.0 → lamindb-0.67.2}/sub/lamindb-setup/tests/prod-staging/test_login.py +0 -0
  212. {lamindb-0.67.0 → lamindb-0.67.2}/sub/lamindb-setup/tests/prod-staging/test_migrate.py +0 -0
  213. {lamindb-0.67.0 → lamindb-0.67.2}/sub/lamindb-setup/tests/prod-staging/test_set_storage.py +0 -0
  214. {lamindb-0.67.0 → lamindb-0.67.2}/sub/lamindb-setup/tests/test_storage_access.py +0 -0
  215. {lamindb-0.67.0 → lamindb-0.67.2}/sub/lamindb-setup/tests/test_vault.py +0 -0
  216. {lamindb-0.67.0 → lamindb-0.67.2}/sub/lnschema-bionty/.github/workflows/build.yml +0 -0
  217. {lamindb-0.67.0 → lamindb-0.67.2}/sub/lnschema-bionty/.github/workflows/latest-changes.jinja2 +0 -0
  218. {lamindb-0.67.0 → lamindb-0.67.2}/sub/lnschema-bionty/.github/workflows/latest-changes.yml +0 -0
  219. {lamindb-0.67.0 → lamindb-0.67.2}/sub/lnschema-bionty/.gitignore +0 -0
  220. {lamindb-0.67.0 → lamindb-0.67.2}/sub/lnschema-bionty/.pre-commit-config.yaml +0 -0
  221. {lamindb-0.67.0 → lamindb-0.67.2}/sub/lnschema-bionty/LICENSE +0 -0
  222. {lamindb-0.67.0 → lamindb-0.67.2}/sub/lnschema-bionty/README.md +0 -0
  223. {lamindb-0.67.0 → lamindb-0.67.2}/sub/lnschema-bionty/docs/index.md +0 -0
  224. {lamindb-0.67.0 → lamindb-0.67.2}/sub/lnschema-bionty/docs/reference.md +0 -0
  225. {lamindb-0.67.0 → lamindb-0.67.2}/sub/lnschema-bionty/lamin-project.yaml +0 -0
  226. {lamindb-0.67.0 → lamindb-0.67.2}/sub/lnschema-bionty/lnschema_bionty/dev/__init__.py +0 -0
  227. {lamindb-0.67.0 → lamindb-0.67.2}/sub/lnschema-bionty/lnschema_bionty/dev/_bionty.py +0 -0
  228. {lamindb-0.67.0 → lamindb-0.67.2}/sub/lnschema-bionty/lnschema_bionty/dev/_settings.py +0 -0
  229. {lamindb-0.67.0 → lamindb-0.67.2}/sub/lnschema-bionty/lnschema_bionty/ids.py +0 -0
  230. {lamindb-0.67.0 → lamindb-0.67.2}/sub/lnschema-bionty/lnschema_bionty/migrations/0001_initial.py +0 -0
  231. {lamindb-0.67.0 → lamindb-0.67.2}/sub/lnschema-bionty/lnschema_bionty/migrations/0001_initial_squashed_0016.py +0 -0
  232. {lamindb-0.67.0 → lamindb-0.67.2}/sub/lnschema-bionty/lnschema_bionty/migrations/0002_rename_gene_type_gene_biotype_and_more.py +0 -0
  233. {lamindb-0.67.0 → lamindb-0.67.2}/sub/lnschema-bionty/lnschema_bionty/migrations/0003_alter_biontysource_entity_alter_biontysource_source_and_more.py +0 -0
  234. {lamindb-0.67.0 → lamindb-0.67.2}/sub/lnschema-bionty/lnschema_bionty/migrations/0004_alter_cellline_bionty_source_and_more.py +0 -0
  235. {lamindb-0.67.0 → lamindb-0.67.2}/sub/lnschema-bionty/lnschema_bionty/migrations/0005_rename_short_name_cellline_abbr_and_more.py +0 -0
  236. {lamindb-0.67.0 → lamindb-0.67.2}/sub/lnschema-bionty/lnschema_bionty/migrations/0006_alter_biontysource_options_alter_cellline_options_and_more.py +0 -0
  237. {lamindb-0.67.0 → lamindb-0.67.2}/sub/lnschema-bionty/lnschema_bionty/migrations/0007_rename_readout_experimental_factor.py +0 -0
  238. {lamindb-0.67.0 → lamindb-0.67.2}/sub/lnschema-bionty/lnschema_bionty/migrations/0008_remove_gene_hgnc_id_remove_gene_mgi_id_and_more.py +0 -0
  239. {lamindb-0.67.0 → lamindb-0.67.2}/sub/lnschema-bionty/lnschema_bionty/migrations/0009_alter_gene_ensembl_gene_id.py +0 -0
  240. {lamindb-0.67.0 → lamindb-0.67.2}/sub/lnschema-bionty/lnschema_bionty/migrations/0010_alter_species_name.py +0 -0
  241. {lamindb-0.67.0 → lamindb-0.67.2}/sub/lnschema-bionty/lnschema_bionty/migrations/0011_cellline_datasets_cellmarker_datasets_and_more.py +0 -0
  242. {lamindb-0.67.0 → lamindb-0.67.2}/sub/lnschema-bionty/lnschema_bionty/migrations/0012_gene_stable_id.py +0 -0
  243. {lamindb-0.67.0 → lamindb-0.67.2}/sub/lnschema-bionty/lnschema_bionty/migrations/0013_alter_cellmarker_species_alter_gene_species_and_more.py +0 -0
  244. {lamindb-0.67.0 → lamindb-0.67.2}/sub/lnschema-bionty/lnschema_bionty/migrations/0014_ethnicity_developmentalstage.py +0 -0
  245. {lamindb-0.67.0 → lamindb-0.67.2}/sub/lnschema-bionty/lnschema_bionty/migrations/0015_migrate_to_integer_pks.py +0 -0
  246. {lamindb-0.67.0 → lamindb-0.67.2}/sub/lnschema-bionty/lnschema_bionty/migrations/0016_export_legacy_data.py +0 -0
  247. {lamindb-0.67.0 → lamindb-0.67.2}/sub/lnschema-bionty/lnschema_bionty/migrations/0017_import_legacy_data.py +0 -0
  248. {lamindb-0.67.0 → lamindb-0.67.2}/sub/lnschema-bionty/lnschema_bionty/migrations/0018_organism_rename_species_biontysource_organism_and_more.py +0 -0
  249. {lamindb-0.67.0 → lamindb-0.67.2}/sub/lnschema-bionty/lnschema_bionty/migrations/0019_rename_taxon_id_organism_ontology_id_and_more.py +0 -0
  250. {lamindb-0.67.0 → lamindb-0.67.2}/sub/lnschema-bionty/lnschema_bionty/migrations/0020_alter_organism_bionty_source.py +0 -0
  251. {lamindb-0.67.0 → lamindb-0.67.2}/sub/lnschema-bionty/lnschema_bionty/migrations/0021_rename_files_cellline_artifacts_and_more.py +0 -0
  252. {lamindb-0.67.0 → lamindb-0.67.2}/sub/lnschema-bionty/lnschema_bionty/migrations/0022_rename_datasets_cellline_collections_and_more.py +0 -0
  253. {lamindb-0.67.0 → lamindb-0.67.2}/sub/lnschema-bionty/lnschema_bionty/migrations/0023_rename_publicsource_encode_uid.py +0 -0
  254. {lamindb-0.67.0 → lamindb-0.67.2}/sub/lnschema-bionty/lnschema_bionty/migrations/__init__.py +0 -0
  255. {lamindb-0.67.0 → lamindb-0.67.2}/sub/lnschema-bionty/noxfile.py +0 -0
  256. {lamindb-0.67.0 → lamindb-0.67.2}/sub/lnschema-bionty/tests/test_integrity.py +0 -0
  257. {lamindb-0.67.0 → lamindb-0.67.2}/sub/lnschema-core/.github/workflows/build.yml +0 -0
  258. {lamindb-0.67.0 → lamindb-0.67.2}/sub/lnschema-core/.github/workflows/latest-changes.jinja2 +0 -0
  259. {lamindb-0.67.0 → lamindb-0.67.2}/sub/lnschema-core/.github/workflows/latest-changes.yml +0 -0
  260. {lamindb-0.67.0 → lamindb-0.67.2}/sub/lnschema-core/.gitignore +0 -0
  261. {lamindb-0.67.0 → lamindb-0.67.2}/sub/lnschema-core/.pre-commit-config.yaml +0 -0
  262. {lamindb-0.67.0 → lamindb-0.67.2}/sub/lnschema-core/CHANGELOG.md +0 -0
  263. {lamindb-0.67.0 → lamindb-0.67.2}/sub/lnschema-core/LICENSE +0 -0
  264. {lamindb-0.67.0 → lamindb-0.67.2}/sub/lnschema-core/README.md +0 -0
  265. {lamindb-0.67.0 → lamindb-0.67.2}/sub/lnschema-core/lnschema_core/__init__.py +0 -0
  266. {lamindb-0.67.0 → lamindb-0.67.2}/sub/lnschema-core/lnschema_core/ids.py +0 -0
  267. {lamindb-0.67.0 → lamindb-0.67.2}/sub/lnschema-core/lnschema_core/migrations/0001_initial.py +0 -0
  268. {lamindb-0.67.0 → lamindb-0.67.2}/sub/lnschema-core/lnschema_core/migrations/0001_initial_squashed_0023.py +0 -0
  269. {lamindb-0.67.0 → lamindb-0.67.2}/sub/lnschema-core/lnschema_core/migrations/0002_alter_user_name.py +0 -0
  270. {lamindb-0.67.0 → lamindb-0.67.2}/sub/lnschema-core/lnschema_core/migrations/0003_alter_storage_region_alter_transform_short_name.py +0 -0
  271. {lamindb-0.67.0 → lamindb-0.67.2}/sub/lnschema-core/lnschema_core/migrations/0004_rename_folder_tag_alter_project_folders.py +0 -0
  272. {lamindb-0.67.0 → lamindb-0.67.2}/sub/lnschema-core/lnschema_core/migrations/0005_alter_run_inputs_delete_runinput.py +0 -0
  273. {lamindb-0.67.0 → lamindb-0.67.2}/sub/lnschema-core/lnschema_core/migrations/0006_feature_dataset.py +0 -0
  274. {lamindb-0.67.0 → lamindb-0.67.2}/sub/lnschema-core/lnschema_core/migrations/0007_feature_synonyms_featureset_field_and_more.py +0 -0
  275. {lamindb-0.67.0 → lamindb-0.67.2}/sub/lnschema-core/lnschema_core/migrations/0008_file_hash_type_transform_parents.py +0 -0
  276. {lamindb-0.67.0 → lamindb-0.67.2}/sub/lnschema-core/lnschema_core/migrations/0009_remove_featureset_files_feature_unit_and_more.py +0 -0
  277. {lamindb-0.67.0 → lamindb-0.67.2}/sub/lnschema-core/lnschema_core/migrations/0010_dataset_categories_file_categories.py +0 -0
  278. {lamindb-0.67.0 → lamindb-0.67.2}/sub/lnschema-core/lnschema_core/migrations/0011_label_remove_tag_created_by_remove_tag_parents_and_more.py +0 -0
  279. {lamindb-0.67.0 → lamindb-0.67.2}/sub/lnschema-core/lnschema_core/migrations/0012_remove_label_ref_id_remove_label_ref_orm_and_more.py +0 -0
  280. {lamindb-0.67.0 → lamindb-0.67.2}/sub/lnschema-core/lnschema_core/migrations/0013_remove_feature_labels_orm_and_more.py +0 -0
  281. {lamindb-0.67.0 → lamindb-0.67.2}/sub/lnschema-core/lnschema_core/migrations/0014_rename_ref_field_featureset_registry.py +0 -0
  282. {lamindb-0.67.0 → lamindb-0.67.2}/sub/lnschema-core/lnschema_core/migrations/0015_file_initial_version_file_version.py +0 -0
  283. {lamindb-0.67.0 → lamindb-0.67.2}/sub/lnschema-core/lnschema_core/migrations/0016_dataset_input_of_dataset_run_dataset_transform_and_more.py +0 -0
  284. {lamindb-0.67.0 → lamindb-0.67.2}/sub/lnschema-core/lnschema_core/migrations/0017_dataset_initial_version_dataset_version.py +0 -0
  285. {lamindb-0.67.0 → lamindb-0.67.2}/sub/lnschema-core/lnschema_core/migrations/0018_rename_datasetlabel_datasetulabel_and_more.py +0 -0
  286. {lamindb-0.67.0 → lamindb-0.67.2}/sub/lnschema-core/lnschema_core/migrations/0019_dataset_reference_dataset_reference_type_and_more.py +0 -0
  287. {lamindb-0.67.0 → lamindb-0.67.2}/sub/lnschema-core/lnschema_core/migrations/0020_run_report_transform_latest_report_and_more.py +0 -0
  288. {lamindb-0.67.0 → lamindb-0.67.2}/sub/lnschema-core/lnschema_core/migrations/0021_dataset_storage_alter_dataset_file.py +0 -0
  289. {lamindb-0.67.0 → lamindb-0.67.2}/sub/lnschema-core/lnschema_core/migrations/0022_migrate_to_integer_pks.py +0 -0
  290. {lamindb-0.67.0 → lamindb-0.67.2}/sub/lnschema-core/lnschema_core/migrations/0023_export_legacy_data.py +0 -0
  291. {lamindb-0.67.0 → lamindb-0.67.2}/sub/lnschema-core/lnschema_core/migrations/0024_import_legacy_data.py +0 -0
  292. {lamindb-0.67.0 → lamindb-0.67.2}/sub/lnschema-core/lnschema_core/migrations/0025_remove_user_email.py +0 -0
  293. {lamindb-0.67.0 → lamindb-0.67.2}/sub/lnschema-core/lnschema_core/migrations/0026_dataset_visibility_file_visibility.py +0 -0
  294. {lamindb-0.67.0 → lamindb-0.67.2}/sub/lnschema-core/lnschema_core/migrations/0027_file_key_is_virtual.py +0 -0
  295. {lamindb-0.67.0 → lamindb-0.67.2}/sub/lnschema-core/lnschema_core/migrations/0028_alter_dataset_visibility_alter_file_visibility.py +0 -0
  296. {lamindb-0.67.0 → lamindb-0.67.2}/sub/lnschema-core/lnschema_core/migrations/0029_remove_feature_modality_remove_featureset_modality_and_more.py +0 -0
  297. {lamindb-0.67.0 → lamindb-0.67.2}/sub/lnschema-core/lnschema_core/migrations/0030_alter_dataset_visibility_alter_file_visibility.py +0 -0
  298. {lamindb-0.67.0 → lamindb-0.67.2}/sub/lnschema-core/lnschema_core/migrations/0031_rename_file_to_artifact.py +0 -0
  299. {lamindb-0.67.0 → lamindb-0.67.2}/sub/lnschema-core/lnschema_core/migrations/0032_remove_dataset_storage.py +0 -0
  300. {lamindb-0.67.0 → lamindb-0.67.2}/sub/lnschema-core/lnschema_core/migrations/0033_alter_artifact_unique_together_artifact_n_objects_and_more.py +0 -0
  301. {lamindb-0.67.0 → lamindb-0.67.2}/sub/lnschema-core/lnschema_core/migrations/0034_run_environment.py +0 -0
  302. {lamindb-0.67.0 → lamindb-0.67.2}/sub/lnschema-core/lnschema_core/migrations/0035_remove_artifact_initial_version_and_more.py +0 -0
  303. {lamindb-0.67.0 → lamindb-0.67.2}/sub/lnschema-core/lnschema_core/migrations/0036_storage_description.py +0 -0
  304. {lamindb-0.67.0 → lamindb-0.67.2}/sub/lnschema-core/lnschema_core/migrations/0037_rename_dataset_to_collection.py +0 -0
  305. {lamindb-0.67.0 → lamindb-0.67.2}/sub/lnschema-core/lnschema_core/migrations/0038_alter_collection_artifact_alter_collection_artifacts_and_more.py +0 -0
  306. {lamindb-0.67.0 → lamindb-0.67.2}/sub/lnschema-core/lnschema_core/migrations/0039_remove_collection_artifacts_collectionartifact_and_more.py +0 -0
  307. {lamindb-0.67.0 → lamindb-0.67.2}/sub/lnschema-core/lnschema_core/migrations/__init__.py +0 -0
  308. {lamindb-0.67.0 → lamindb-0.67.2}/sub/lnschema-core/lnschema_core/mocks.py +0 -0
  309. {lamindb-0.67.0 → lamindb-0.67.2}/sub/lnschema-core/lnschema_core/models.py +0 -0
  310. {lamindb-0.67.0 → lamindb-0.67.2}/sub/lnschema-core/lnschema_core/types.py +0 -0
  311. {lamindb-0.67.0 → lamindb-0.67.2}/sub/lnschema-core/lnschema_core/users.py +0 -0
  312. {lamindb-0.67.0 → lamindb-0.67.2}/sub/lnschema-core/noxfile.py +0 -0
  313. {lamindb-0.67.0 → lamindb-0.67.2}/sub/lnschema-core/pyproject.toml +0 -0
  314. {lamindb-0.67.0 → lamindb-0.67.2}/sub/lnschema-core/tests/test_integrity.py +0 -0
  315. {lamindb-0.67.0 → lamindb-0.67.2}/tests/conftest.py +0 -0
  316. {lamindb-0.67.0 → lamindb-0.67.2}/tests/test_cache.py +0 -0
  317. {lamindb-0.67.0 → lamindb-0.67.2}/tests/test_data.py +0 -0
  318. {lamindb-0.67.0 → lamindb-0.67.2}/tests/test_db.py +0 -0
  319. {lamindb-0.67.0 → lamindb-0.67.2}/tests/test_feature.py +0 -0
  320. {lamindb-0.67.0 → lamindb-0.67.2}/tests/test_feature_manager.py +0 -0
  321. {lamindb-0.67.0 → lamindb-0.67.2}/tests/test_feature_set.py +0 -0
  322. {lamindb-0.67.0 → lamindb-0.67.2}/tests/test_from_values.py +0 -0
  323. {lamindb-0.67.0 → lamindb-0.67.2}/tests/test_hashing.py +0 -0
  324. {lamindb-0.67.0 → lamindb-0.67.2}/tests/test_label_manager.py +0 -0
  325. {lamindb-0.67.0 → lamindb-0.67.2}/tests/test_manager.py +0 -0
  326. {lamindb-0.67.0 → lamindb-0.67.2}/tests/test_parents.py +0 -0
  327. {lamindb-0.67.0 → lamindb-0.67.2}/tests/test_queryset.py +0 -0
  328. {lamindb-0.67.0 → lamindb-0.67.2}/tests/test_registry.py +0 -0
  329. {lamindb-0.67.0 → lamindb-0.67.2}/tests/test_run.py +0 -0
  330. {lamindb-0.67.0 → lamindb-0.67.2}/tests/test_run_context.py +0 -0
  331. {lamindb-0.67.0 → lamindb-0.67.2}/tests/test_save.py +0 -0
  332. {lamindb-0.67.0 → lamindb-0.67.2}/tests/test_settings.py +0 -0
  333. {lamindb-0.67.0 → lamindb-0.67.2}/tests/test_storage.py +0 -0
  334. {lamindb-0.67.0 → lamindb-0.67.2}/tests/test_uid.py +0 -0
  335. {lamindb-0.67.0 → lamindb-0.67.2}/tests/test_ulabel.py +0 -0
  336. {lamindb-0.67.0 → lamindb-0.67.2}/tests/test_validate.py +0 -0
  337. {lamindb-0.67.0 → lamindb-0.67.2}/tests/test_versioning.py +0 -0
  338. {lamindb-0.67.0 → lamindb-0.67.2}/tests/test_view.py +0 -0
  339. {lamindb-0.67.0 → lamindb-0.67.2}/tests/test_visibility.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: lamindb
3
- Version: 0.67.0
3
+ Version: 0.67.2
4
4
  Summary: A data framework for biology.
5
5
  Author-email: Lamin Labs <open-source@lamin.ai>
6
6
  Requires-Python: >=3.8
@@ -12,7 +12,7 @@ Classifier: Programming Language :: Python :: 3.11
12
12
  Requires-Dist: lnschema_core==0.61.1
13
13
  Requires-Dist: lamindb_setup==0.64.2
14
14
  Requires-Dist: lamin_utils==0.13.0
15
- Requires-Dist: lamin_cli==0.6.0
15
+ Requires-Dist: lamin_cli==0.7.0
16
16
  Requires-Dist: rapidfuzz
17
17
  Requires-Dist: pyarrow
18
18
  Requires-Dist: typing_extensions!=4.6.0
@@ -28,7 +28,7 @@ Requires-Dist: boto3==1.28.17 ; extra == "aws"
28
28
  Requires-Dist: aiobotocore==2.5.4 ; extra == "aws"
29
29
  Requires-Dist: fsspec[s3]==2023.9.0 ; extra == "aws"
30
30
  Requires-Dist: s3fs>=2023.9.0 ; extra == "aws"
31
- Requires-Dist: lnschema_bionty==0.38.3 ; extra == "bionty"
31
+ Requires-Dist: lnschema_bionty==0.39.0 ; extra == "bionty"
32
32
  Requires-Dist: pandas<2 ; extra == "dev"
33
33
  Requires-Dist: pre-commit ; extra == "dev"
34
34
  Requires-Dist: nox ; extra == "dev"
@@ -42,7 +42,7 @@ Requires-Dist: lamin_vault ; extra == "dev"
42
42
  Requires-Dist: django-schema-graph ; extra == "erdiagram"
43
43
  Requires-Dist: readfcs>=1.1.7 ; extra == "fcs"
44
44
  Requires-Dist: fsspec[gs]==2023.9.0 ; extra == "gcp"
45
- Requires-Dist: nbproject==0.9.2 ; extra == "jupyter"
45
+ Requires-Dist: nbproject==0.10.0 ; extra == "jupyter"
46
46
  Requires-Dist: nbstripout ; extra == "jupyter"
47
47
  Requires-Dist: nbconvert ; extra == "jupyter"
48
48
  Requires-Dist: zarr>=2.16.0 ; extra == "zarr"
@@ -7,6 +7,17 @@
7
7
 
8
8
  ## 0.67
9
9
 
10
+ ### 0.67.2 {small}`2024-01-14`
11
+
12
+ - ✨ Enable staging notebooks & code using the CLI [PR](https://github.com/laminlabs/lamindb/pull/1403) [@falexwolf](https://github.com/falexwolf)
13
+
14
+ ### 0.67.1 {small}`2024-01-12`
15
+
16
+ - 🐛 Fix idempotency of `collection.save()` [PR](https://github.com/laminlabs/lamindb/pull/1401) [@falexwolf](https://github.com/falexwolf)
17
+ - 🚸 Disallow bulk-delete for Artifact, Transform & Collection [PR](https://github.com/laminlabs/lamindb/pull/1398) [@falexwolf](https://github.com/falexwolf)
18
+ - 🚸 Init transform versions at 1 [PR](https://github.com/laminlabs/lamindb/pull/1397) [@falexwolf](https://github.com/falexwolf)
19
+ - ✨ Load json and html files [PR](https://github.com/laminlabs/lamindb/pull/1396) [@falexwolf](https://github.com/falexwolf)
20
+
10
21
  ### 0.67.0 {small}`2024-01-11`
11
22
 
12
23
  - 🚚 Rename `.bionty` to `.public`, `.from_bionty` to `.from_public` [PR](https://github.com/laminlabs/lamindb/pull/1394) [@sunnyosun](https://github.com/sunnyosun)
@@ -54,7 +54,7 @@ Modules & settings:
54
54
 
55
55
  """
56
56
 
57
- __version__ = "0.67.0" # denote a release candidate for 0.1.0 with 0.1rc1
57
+ __version__ = "0.67.2" # denote a release candidate for 0.1.0 with 0.1rc1
58
58
 
59
59
  import os as _os
60
60
 
@@ -102,20 +102,20 @@ if _INSTANCE_SETUP:
102
102
  User,
103
103
  )
104
104
 
105
- File = Artifact # backward compat
106
- from . import _artifact # noqa
107
- from . import _collection
108
- from . import _feature
109
- from . import _feature_set
110
- from . import _parents
111
- from . import _registry
112
- from . import _run
113
- from . import _storage
114
- from . import _transform
115
- from . import _ulabel
116
- from . import _validate
117
- from . import dev
118
- from ._delete import delete
105
+ from . import (
106
+ _artifact,
107
+ _collection,
108
+ _feature,
109
+ _feature_set,
110
+ _parents,
111
+ _registry,
112
+ _run,
113
+ _storage,
114
+ _transform,
115
+ _ulabel,
116
+ _validate,
117
+ dev,
118
+ )
119
119
  from ._save import save
120
120
  from ._view import view
121
121
  from .dev._run_context import run_context
@@ -911,13 +911,13 @@ def delete(
911
911
  self, permanent: Optional[bool] = None, storage: Optional[bool] = None
912
912
  ) -> None:
913
913
  # by default, we only move artifacts into the trash
914
- if self.visibility > VisibilityChoice.trash.value and permanent is not True:
914
+ if self.visibility > -1 and permanent is not True:
915
915
  if storage is not None:
916
916
  logger.warning("moving artifact to trash, storage arg is ignored")
917
917
  # move to trash
918
- self.visibility = VisibilityChoice.trash.value
918
+ self.visibility = -1
919
919
  self.save()
920
- logger.warning("moved artifact to trash")
920
+ logger.warning("moved artifact to trash (visibility = -1)")
921
921
  return
922
922
 
923
923
  # if the artifact is already in the trash
@@ -929,6 +929,7 @@ def delete(
929
929
  )
930
930
  delete_record = response == "y"
931
931
  else:
932
+ # this second option doesn't feel very intuitive
932
933
  delete_record = permanent
933
934
 
934
935
  if delete_record:
@@ -424,8 +424,12 @@ def save(self, *args, **kwargs) -> None:
424
424
  self.artifact.save()
425
425
  # we don't need to save feature sets again
426
426
  save_feature_sets(self)
427
+ state_was_adding = self._state.adding
427
428
  super(Collection, self).save()
428
- if hasattr(self, "_artifacts"):
429
+ # we don't allow updating the collection of artifacts
430
+ # if users want to update the set of artifacts, they
431
+ # have to create a new collection
432
+ if state_was_adding and hasattr(self, "_artifacts"):
429
433
  if self._artifacts is not None and len(self._artifacts) > 0:
430
434
  links = [
431
435
  CollectionArtifact(collection_id=self.id, artifact_id=artifact.id)
@@ -173,20 +173,20 @@ def create_records_from_public(
173
173
 
174
174
  # create the corresponding bionty object from model
175
175
  try:
176
- bionty_object = model.public(
176
+ public_ontology = model.public(
177
177
  organism=kwargs.get("organism"), public_source=kwargs.get("public_source")
178
178
  )
179
179
  except Exception:
180
180
  # for custom records that are not created from bionty sources
181
181
  return records, iterable_idx
182
182
  # add public_source record to the kwargs
183
- kwargs.update({"public_source": get_public_source_record(bionty_object)})
183
+ kwargs.update({"public_source": get_public_source_record(public_ontology)})
184
184
 
185
185
  # filter the columns in bionty df based on fields
186
- bionty_df = _filter_bionty_df_columns(model=model, bionty_object=bionty_object)
186
+ bionty_df = _filter_bionty_df_columns(model=model, public_ontology=public_ontology)
187
187
 
188
188
  # standardize in the bionty reference
189
- result = bionty_object.inspect(iterable_idx, field=field.field.name, mute=True)
189
+ result = public_ontology.inspect(iterable_idx, field=field.field.name, mute=True)
190
190
  syn_mapper = result.synonyms_mapper
191
191
 
192
192
  msg_syn: str = ""
@@ -254,13 +254,13 @@ def _print_values(names: List, n: int = 20) -> str:
254
254
  return print_values
255
255
 
256
256
 
257
- def _filter_bionty_df_columns(model: Registry, bionty_object: Any) -> pd.DataFrame:
257
+ def _filter_bionty_df_columns(model: Registry, public_ontology: Any) -> pd.DataFrame:
258
258
  bionty_df = pd.DataFrame()
259
- if bionty_object is not None:
259
+ if public_ontology is not None:
260
260
  model_field_names = {i.name for i in model._meta.fields}
261
261
  # parents needs to be added here as relationships aren't in fields
262
262
  model_field_names.add("parents")
263
- bionty_df = bionty_object.df().reset_index()
263
+ bionty_df = public_ontology.df().reset_index()
264
264
  if model.__name__ == "Gene":
265
265
  # groupby ensembl_gene_id and concat ncbi_gene_ids
266
266
  groupby_id_col = (
@@ -46,14 +46,11 @@ class QueryManager(models.Manager):
46
46
 
47
47
  Examples:
48
48
  >>> ln.save(ln.ULabel.from_values(["ULabel1", "ULabel2", "ULabel3"], field="name"))
49
- >>> labels = ln.ULabel.filter(name__icontains = "label").all()
49
+ >>> labels = ln.ULabel.filter(name__icontains="label").all()
50
50
  >>> ln.ULabel(name="ULabel1").save()
51
51
  >>> label = ln.ULabel.filter(name="ULabel1").one()
52
52
  >>> label.parents.set(labels)
53
53
  >>> label.parents.list()
54
- [ULabel(id=sFMcPepC, name=ULabel1, updated_at=2023-07-19 19:45:17, created_by_id=DzTjkKse), # noqa
55
- ULabel(id=2SscQvsM, name=ULabel2, updated_at=2023-07-19 19:45:17, created_by_id=DzTjkKse), # noqa
56
- ULabel(id=lecV87vi, name=ULabel3, updated_at=2023-07-19 19:45:17, created_by_id=DzTjkKse)] # noqa
57
54
  >>> label.parents.list("name")
58
55
  ['ULabel1', 'ULabel2', 'ULabel3']
59
56
  """
@@ -76,7 +73,7 @@ class QueryManager(models.Manager):
76
73
  For `**kwargs`, see :meth:`lamindb.dev.QuerySet.df`.
77
74
  """
78
75
  self._track_run_input_manager()
79
- return self.all_base_class()
76
+ return self._all_base_class()
80
77
 
81
78
  @doc_args(Registry.search.__doc__)
82
79
  def search(self, string: str, **kwargs):
@@ -115,5 +112,5 @@ models.Manager.__getitem__ = QueryManager.__getitem__
115
112
  models.Manager._track_run_input_manager = QueryManager._track_run_input_manager
116
113
  # the two lines below would be easy if we could actually inherit; like this,
117
114
  # they're suboptimal
118
- models.Manager.all_base_class = models.Manager.all
115
+ models.Manager._all_base_class = models.Manager.all
119
116
  models.Manager.all = QueryManager.all
@@ -4,7 +4,14 @@ from typing import Dict, Iterable, List, NamedTuple, Optional, Union
4
4
  import pandas as pd
5
5
  from django.db import models
6
6
  from lamindb_setup.dev._docs import doc_args
7
- from lnschema_core.models import CanValidate, IsTree, Registry
7
+ from lnschema_core.models import (
8
+ Artifact,
9
+ CanValidate,
10
+ Collection,
11
+ IsTree,
12
+ Registry,
13
+ Transform,
14
+ )
8
15
  from lnschema_core.types import ListLike, StrField
9
16
 
10
17
 
@@ -147,6 +154,13 @@ class QuerySet(models.QuerySet, CanValidate, IsTree):
147
154
  df.rename(columns={values_expression: expression}, inplace=True)
148
155
  return df
149
156
 
157
+ def delete(self, *args, **kwargs):
158
+ if self.model in {Artifact, Collection, Transform}:
159
+ for record in self:
160
+ record.delete(*args, **kwargs)
161
+ else:
162
+ self._delete_base_class(*args, **kwargs)
163
+
150
164
  def list(self, field: Optional[str] = None) -> List[Registry]:
151
165
  """Populate a list with the results.
152
166
 
@@ -282,3 +296,5 @@ models.QuerySet.lookup = QuerySet.lookup
282
296
  models.QuerySet.validate = QuerySet.validate
283
297
  models.QuerySet.inspect = QuerySet.inspect
284
298
  models.QuerySet.standardize = QuerySet.standardize
299
+ models.QuerySet._delete_base_class = models.QuerySet.delete
300
+ models.QuerySet.delete = QuerySet.delete
@@ -30,4 +30,27 @@ def __init__(run: Run, *args, **kwargs):
30
30
  )
31
31
 
32
32
 
33
+ def delete_run_artifacts(run: Run) -> None:
34
+ environment = None
35
+ if run.environment is not None:
36
+ environment = run.environment
37
+ run.environment = None
38
+ report = None
39
+ if run.report is not None:
40
+ report = run.report
41
+ run.report = None
42
+ if environment is not None or report is not None:
43
+ run.save()
44
+ if environment is not None:
45
+ environment.delete(permanent=True)
46
+ if report is not None:
47
+ report.delete(permanent=True)
48
+
49
+
50
+ def delete(self) -> None:
51
+ delete_run_artifacts(self)
52
+ super(Run, self).delete()
53
+
54
+
33
55
  Run.__init__ = __init__
56
+ Run.delete = delete
@@ -1,7 +1,8 @@
1
1
  from typing import TYPE_CHECKING, Optional
2
2
 
3
- from lnschema_core.models import TRANSFORM_TYPE_DEFAULT, Transform
3
+ from lnschema_core.models import TRANSFORM_TYPE_DEFAULT, Artifact, Run, Transform
4
4
 
5
+ from ._run import delete_run_artifacts
5
6
  from .dev.versioning import get_uid_from_old_version, init_uid
6
7
 
7
8
  if TYPE_CHECKING:
@@ -63,4 +64,28 @@ def __init__(transform: Transform, *args, **kwargs):
63
64
  )
64
65
 
65
66
 
67
+ def delete(self) -> None:
68
+ # set latest_report to None, it's tracked through the latest run
69
+ latest_report = None
70
+ if self.latest_report is not None:
71
+ latest_report = self.latest_report
72
+ self.latest_report = None
73
+ source_code = None
74
+ if self.source_code is not None:
75
+ source_code = self.source_code
76
+ self.source_code = None
77
+ if latest_report is not None or source_code is not None:
78
+ self.save()
79
+ if source_code is not None:
80
+ source_code.delete(permanent=True)
81
+ # query all runs and delete their artifacts
82
+ runs = Run.filter(transform=self)
83
+ for run in runs:
84
+ delete_run_artifacts(run)
85
+ # at this point, all artifacts have been taken care of
86
+ # we can now leverage CASCADE delete
87
+ super(Transform, self).delete()
88
+
89
+
66
90
  Transform.__init__ = __init__
91
+ Transform.delete = delete
@@ -23,7 +23,7 @@ def get_labels_as_dict(self: Data):
23
23
  ).items():
24
24
  if related_name in {
25
25
  "feature_sets",
26
- "artifacts",
26
+ "unordered_artifacts",
27
27
  "input_of",
28
28
  "collections",
29
29
  "source_of",
@@ -27,9 +27,9 @@ msg_path_failed = (
27
27
 
28
28
  msg_manual_init = (
29
29
  "\n(1) save your notebook!"
30
- "\n(2) attach metadata to the notebook by running the CLI:\n"
30
+ "\n(2) add stem_uid & version to your notebook file by running the CLI:\n"
31
31
  "lamin track {notebook_path}"
32
- "\n(3) reload or re-open your notebook"
32
+ "\n(3) reload your notebook from disk"
33
33
  )
34
34
 
35
35
 
@@ -1,6 +1,8 @@
1
+ import builtins
2
+ import re
1
3
  import shutil
2
4
  from pathlib import Path
3
- from typing import Union
5
+ from typing import Optional, Union
4
6
 
5
7
  import anndata as ad
6
8
  import pandas as pd
@@ -24,6 +26,7 @@ except ImportError:
24
26
 
25
27
 
26
28
  AUTO_KEY_PREFIX = ".lamindb/"
29
+ is_run_from_ipython = getattr(builtins, "__IPYTHON__", False)
27
30
 
28
31
 
29
32
  # add type annotations back asap when re-organizing the module
@@ -143,6 +146,33 @@ def read_tsv(path: Union[str, Path, UPath]) -> pd.DataFrame:
143
146
  return pd.read_csv(path_sanitized, sep="\t")
144
147
 
145
148
 
149
+ def load_html(path: Union[str, Path, UPath]):
150
+ if is_run_from_ipython:
151
+ with open(path, encoding="utf-8") as f:
152
+ html_content = f.read()
153
+ # Extract the body content using regular expressions
154
+ body_content = re.findall(
155
+ r"<body(?:.*?)>(?:.*?)</body>", html_content, re.DOTALL
156
+ )
157
+ # Remove any empty body tags
158
+ if body_content:
159
+ body_content = body_content[0]
160
+ body_content = body_content.strip() # type: ignore
161
+ from IPython.display import HTML, display
162
+
163
+ display(HTML(data=body_content))
164
+ else:
165
+ return path
166
+
167
+
168
+ def load_json(path: Union[str, Path, UPath]):
169
+ import json
170
+
171
+ with open(path) as f:
172
+ data = json.load(f)
173
+ return data
174
+
175
+
146
176
  def load_to_memory(filepath: Union[str, Path, UPath], stream: bool = False, **kwargs):
147
177
  """Load a file into memory.
148
178
 
@@ -170,6 +200,8 @@ def load_to_memory(filepath: Union[str, Path, UPath], stream: bool = False, **kw
170
200
  ".fcs": read_fcs,
171
201
  ".zarr": read_adata_zarr,
172
202
  ".zrad": read_adata_zarr,
203
+ ".html": load_html,
204
+ ".json": load_json,
173
205
  }
174
206
 
175
207
  reader = READER_FUNCS.get(filepath.suffix)
@@ -130,37 +130,41 @@ def docs(session):
130
130
  if group in {"tutorial", "guide", "biology"}:
131
131
  for path in Path(f"./docs/{group}").glob("*"):
132
132
  path.rename(f"./docs/{path.name}")
133
- login_testuser1(session)
134
133
  session.run(*"lamin init --storage ./docsbuild --schema bionty".split())
135
134
 
136
135
  def generate_cli_docs(main_parser):
137
136
  page = "# `lamin`\n\nFor a guide, see: {doc}`/setup`.\n\n"
138
- commands = [
139
- "login",
140
- "init",
141
- "load",
142
- "close",
143
- "delete",
144
- "track",
145
- "info",
146
- "migrate",
147
- "save",
148
- "set",
149
- "schema",
150
- ]
137
+ command_groups = {
138
+ "General": ["login", "info"],
139
+ "Instances": [
140
+ "init",
141
+ "load",
142
+ "close",
143
+ "delete",
144
+ "migrate",
145
+ "set",
146
+ "schema",
147
+ ],
148
+ "Transforms": ["track", "save", "stage"],
149
+ }
151
150
  for action_group in main_parser._action_groups:
152
151
  for group_action in action_group._group_actions:
153
152
  if type(group_action).__name__ == "_SubParsersAction":
154
- for command in commands:
155
- subparser = group_action.choices[command]
156
- # replace the "nox" command with the "lamin" command
157
- help_string = subparser.format_help().replace("nox", "lamin")
158
- page += f"## `lamin {command}`\n\n```\n{help_string}```\n\n"
153
+ for command_group, commands in command_groups.items():
154
+ page += f"## {command_group}\n\n"
155
+ for command in commands:
156
+ subparser = group_action.choices[command]
157
+ # replace the "nox" command with the "lamin" command
158
+ help_string = subparser.format_help().replace(
159
+ "nox", "lamin"
160
+ )
161
+ page += (
162
+ f"### `lamin {command}`\n\n```\n{help_string}```\n\n"
163
+ )
159
164
  Path("./docs/cli.md").write_text(page)
160
165
 
161
166
  from lamin_cli import __main__
162
167
 
163
168
  generate_cli_docs(__main__.parser)
164
-
165
169
  build_docs(session, strip_prefix=True, strict=True)
166
170
  upload_docs_artifact(aws=True)
@@ -19,7 +19,7 @@ dependencies = [
19
19
  "lnschema_core==0.61.1",
20
20
  "lamindb_setup==0.64.2",
21
21
  "lamin_utils==0.13.0",
22
- "lamin_cli==0.6.0",
22
+ "lamin_cli==0.7.0",
23
23
  # others
24
24
  "rapidfuzz",
25
25
  "pyarrow",
@@ -37,7 +37,7 @@ Home = "https://github.com/laminlabs/lamindb"
37
37
 
38
38
  [project.optional-dependencies]
39
39
  bionty = [
40
- "lnschema_bionty==0.38.3",
40
+ "lnschema_bionty==0.39.0",
41
41
  ]
42
42
  aws = [
43
43
  "botocore==1.31.17", # for aiobotocore inside s3fs, to fix deps resolution
@@ -51,7 +51,7 @@ gcp = [
51
51
  "fsspec[gs]==2023.9.0"
52
52
  ]
53
53
  jupyter = [
54
- "nbproject==0.9.2", # keep pinning
54
+ "nbproject==0.10.0", # keep pinning
55
55
  "nbstripout",
56
56
  "nbconvert",
57
57
  ]
@@ -0,0 +1,3 @@
1
+ """Lamin CLI."""
2
+
3
+ __version__ = "0.7.0"
@@ -100,8 +100,12 @@ aa("--pypackage", type=str, metavar="pypackage", default=None, help=pypackage_he
100
100
  # save
101
101
  save_parser = subparsers.add_parser("save", help="save notebook or script")
102
102
  aa = save_parser.add_argument
103
- filepath_help = "A path to the notebook."
104
- aa("filepath", type=str, metavar="filepath", help=filepath_help)
103
+ aa("filepath", type=str, metavar="filepath", help="filepath to notebook or script")
104
+
105
+ # stage
106
+ save_parser = subparsers.add_parser("stage", help="stage a notebook or script")
107
+ aa = save_parser.add_argument
108
+ aa("url", type=str, metavar="url", help="a lamin.ai url")
105
109
 
106
110
  # login and logout user
107
111
  login = subparsers.add_parser("login", help="log in")
@@ -219,6 +223,10 @@ def main():
219
223
  from lamin_cli._transform import save
220
224
 
221
225
  return save(args.filepath)
226
+ elif args.command == "stage":
227
+ from lamin_cli._stage import stage
228
+
229
+ return stage(args.url)
222
230
  elif args.command == "cache":
223
231
  from lamindb_setup._cache import clear_cache_dir, get_cache_dir, set_cache_dir
224
232
 
@@ -0,0 +1,29 @@
1
+ from typing import Tuple
2
+ from lamin_utils import logger
3
+
4
+
5
+ def decompose_url(url: str) -> Tuple[str, str, str]:
6
+ assert "Transform" in url
7
+ uid = url.split("uid=")[1]
8
+ instance_identifier = "/".join(url.replace("https://lamin.ai/", "").split("/")[:2])
9
+ return instance_identifier, "transform", uid
10
+
11
+
12
+ def stage(identifier: str):
13
+ import lamindb as ln
14
+
15
+ ln.settings.verbosity = "success"
16
+ if identifier.startswith("https://lamin.ai"):
17
+ instance_identifier, entity, uid = decompose_url(identifier)
18
+ else:
19
+ entity, uid = identifier.split()
20
+ instance_identifier = ln.setup.settings.instance.identifier
21
+
22
+ if entity == "transform":
23
+ transform = ln.Transform.using(instance_identifier).filter(uid=uid).one()
24
+ filepath_cache = transform.source_code.stage()
25
+ target_filename = f"{transform.short_name}.ipynb"
26
+ filepath_cache.rename(target_filename)
27
+ logger.success(f"staged source code of transform {uid} as {target_filename}")
28
+ else:
29
+ raise NotImplementedError
@@ -13,7 +13,7 @@ def init_script_metadata(script_path: str):
13
13
  from lnschema_core.ids import base62_12
14
14
 
15
15
  stem_uid = base62_12()
16
- version = "0"
16
+ version = "1"
17
17
 
18
18
  with open(script_path) as f:
19
19
  content = f.read()
@@ -331,7 +331,7 @@ def save(filepath: str) -> Optional[str]:
331
331
  else:
332
332
  report_file = ln.Artifact(
333
333
  filepath_html,
334
- description=f"Report of transform {transform.uid}",
334
+ description=f"Report of run {run.uid}",
335
335
  is_new_version_of=initial_report,
336
336
  visibility=0, # hidden file
337
337
  )
@@ -1,5 +1,5 @@
1
1
  __transform_stem_uid__ = "m5uCHTTpJnjQ"
2
- __version__ = "0"
2
+ __version__ = "1"
3
3
 
4
4
 
5
5
  import lamindb as ln
@@ -7,6 +7,7 @@ scripts_dir = Path(__file__).parent.resolve() / "scripts"
7
7
 
8
8
  print(scripts_dir)
9
9
 
10
+
10
11
  def test_initialize():
11
12
  filepath = scripts_dir / "not-initialized.py"
12
13
  print(scripts_dir)
@@ -19,16 +20,16 @@ def test_initialize():
19
20
 
20
21
  with open(filepath) as f:
21
22
  content = f.read()
22
- prepend = f'__transform_stem_uid__ = "'
23
+ prepend = '__transform_stem_uid__ = "'
23
24
  assert content.startswith(prepend)
24
25
 
25
26
 
26
- def test_run_and_save():
27
+ def test_run_save_stage():
27
28
  env = os.environ
28
29
  env["LAMIN_TESTING"] = "true"
29
-
30
+
30
31
  filepath = scripts_dir / "initialized.py"
31
- # python sub/lamin-cli/tests/scripts/initialized.py
32
+ # python sub/lamin-cli/tests/scripts/initialized.py
32
33
  result = subprocess.run(
33
34
  f"python {str(filepath)}",
34
35
  shell=True,
@@ -68,3 +69,11 @@ def test_run_and_save():
68
69
  )
69
70
  print(result)
70
71
  assert result.returncode == 0
72
+
73
+ result = subprocess.run(
74
+ "lamin stage 'transform m5uCHTTpJnjQ5zKv'",
75
+ shell=True,
76
+ capture_output=True,
77
+ )
78
+ print(result)
79
+ assert result.returncode == 0
@@ -0,0 +1,21 @@
1
+ from lamin_cli._stage import decompose_url
2
+ import subprocess
3
+
4
+
5
+ def test_decompose_url():
6
+ url = "https://lamin.ai/laminlabs/arrayloader-benchmarks/record/core/Transform?uid=1GCKs8zLtkc85zKv" # noqa
7
+ instance_identifier, entity, uid = decompose_url(url)
8
+ assert instance_identifier == "laminlabs/arrayloader-benchmarks"
9
+ assert entity == "transform"
10
+ assert uid == "1GCKs8zLtkc85zKv"
11
+
12
+
13
+ def test_stage():
14
+ result = subprocess.run(
15
+ "lamin stage"
16
+ " 'https://lamin.ai/laminlabs/arrayloader-benchmarks/record/core/Transform?uid=1GCKs8zLtkc85zKv'", # noqa
17
+ shell=True,
18
+ capture_output=True,
19
+ )
20
+ print(result)
21
+ assert result.returncode == 0
@@ -3,6 +3,8 @@
3
3
  <!-- prettier-ignore -->
4
4
  Name | PR | Developer | Date | Version
5
5
  --- | --- | --- | --- | ---
6
+ 🐛 Fix option inheritance in create_path and add tests | [617](https://github.com/laminlabs/lamindb-setup/pull/617) | [Koncopd](https://github.com/Koncopd) | 2024-01-12 |
7
+ ✅ Update tests relying on laminhub-rest | [616](https://github.com/laminlabs/lamindb-setup/pull/616) | [fredericenard](https://github.com/fredericenard) | 2024-01-12 |
6
8
  🚚 Rename .bionty to .public | [615](https://github.com/laminlabs/lamindb-setup/pull/615) | [sunnyosun](https://github.com/sunnyosun) | 2024-01-10 | 0.64.2
7
9
  🚸 Fix connection timeout | [611](https://github.com/laminlabs/lamindb-setup/pull/611) | [falexwolf](https://github.com/falexwolf) | 2024-01-08 | 0.64.1
8
10
  🚸 Add anonymous access (now works without login) | [610](https://github.com/laminlabs/lamindb-setup/pull/610) | [falexwolf](https://github.com/falexwolf) | 2024-01-06 | 0.64.0