lamindb 0.70.1__tar.gz → 0.70.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 (388) hide show
  1. {lamindb-0.70.1 → lamindb-0.70.2}/PKG-INFO +3 -3
  2. {lamindb-0.70.1 → lamindb-0.70.2}/docs/changelog.md +6 -1
  3. lamindb-0.70.2/docs/storage/vitessce.ipynb +157 -0
  4. {lamindb-0.70.1 → lamindb-0.70.2}/docs/storage.md +1 -0
  5. {lamindb-0.70.1 → lamindb-0.70.2}/lamindb/__init__.py +1 -1
  6. {lamindb-0.70.1 → lamindb-0.70.2}/lamindb/_annotate.py +4 -4
  7. {lamindb-0.70.1 → lamindb-0.70.2}/lamindb/_finish.py +31 -29
  8. {lamindb-0.70.1 → lamindb-0.70.2}/lamindb/core/storage/__init__.py +1 -0
  9. {lamindb-0.70.1 → lamindb-0.70.2}/lamindb/core/storage/_backed_access.py +3 -3
  10. lamindb-0.70.2/lamindb/core/storage/_valid_suffixes.py +3 -0
  11. lamindb-0.70.2/lamindb/integrations/_vitessce.py +70 -0
  12. {lamindb-0.70.1 → lamindb-0.70.2}/noxfile.py +1 -0
  13. {lamindb-0.70.1 → lamindb-0.70.2}/pyproject.toml +2 -2
  14. {lamindb-0.70.1 → lamindb-0.70.2}/sub/lamindb-setup/docs/changelog.md +2 -0
  15. {lamindb-0.70.1 → lamindb-0.70.2}/sub/lamindb-setup/lamindb_setup/__init__.py +1 -1
  16. {lamindb-0.70.1 → lamindb-0.70.2}/sub/lamindb-setup/lamindb_setup/_connect_instance.py +5 -2
  17. {lamindb-0.70.1 → lamindb-0.70.2}/sub/lamindb-setup/lamindb_setup/core/upath.py +13 -8
  18. {lamindb-0.70.1 → lamindb-0.70.2}/sub/lamindb-setup/tests/hub-cloud/test_connect_instance.py +20 -6
  19. {lamindb-0.70.1 → lamindb-0.70.2}/tests/notebooks/with-title-initialized-consecutive-finish-not-last-cell.ipynb +2 -3
  20. {lamindb-0.70.1 → lamindb-0.70.2}/tests/notebooks/with-title-initialized-consecutive-finish.ipynb +1 -1
  21. {lamindb-0.70.1 → lamindb-0.70.2}/tests/test_notebooks.py +4 -0
  22. {lamindb-0.70.1 → lamindb-0.70.2}/tests/test_storage.py +15 -1
  23. lamindb-0.70.1/lamindb/integrations/_vitessce.py +0 -50
  24. {lamindb-0.70.1 → lamindb-0.70.2}/.github/workflows/build.yml +0 -0
  25. {lamindb-0.70.1 → lamindb-0.70.2}/.github/workflows/latest-changes.jinja2 +0 -0
  26. {lamindb-0.70.1 → lamindb-0.70.2}/.github/workflows/latest-changes.yml +0 -0
  27. {lamindb-0.70.1 → lamindb-0.70.2}/.gitignore +0 -0
  28. {lamindb-0.70.1 → lamindb-0.70.2}/.gitmodules +0 -0
  29. {lamindb-0.70.1 → lamindb-0.70.2}/.pre-commit-config.yaml +0 -0
  30. {lamindb-0.70.1 → lamindb-0.70.2}/LICENSE +0 -0
  31. {lamindb-0.70.1 → lamindb-0.70.2}/README.md +0 -0
  32. {lamindb-0.70.1 → lamindb-0.70.2}/docs/annotate-for-developers.ipynb +0 -0
  33. {lamindb-0.70.1 → lamindb-0.70.2}/docs/annotate.ipynb +0 -0
  34. {lamindb-0.70.1 → lamindb-0.70.2}/docs/bio-registries.ipynb +0 -0
  35. {lamindb-0.70.1 → lamindb-0.70.2}/docs/bionty-base.md +0 -0
  36. {lamindb-0.70.1 → lamindb-0.70.2}/docs/bionty.md +0 -0
  37. {lamindb-0.70.1 → lamindb-0.70.2}/docs/can-validate.ipynb +0 -0
  38. {lamindb-0.70.1 → lamindb-0.70.2}/docs/data.ipynb +0 -0
  39. {lamindb-0.70.1 → lamindb-0.70.2}/docs/faq/acid.ipynb +0 -0
  40. {lamindb-0.70.1 → lamindb-0.70.2}/docs/faq/delete.ipynb +0 -0
  41. {lamindb-0.70.1 → lamindb-0.70.2}/docs/faq/idempotency.ipynb +0 -0
  42. {lamindb-0.70.1 → lamindb-0.70.2}/docs/faq/import-schema.ipynb +0 -0
  43. {lamindb-0.70.1 → lamindb-0.70.2}/docs/faq/key.ipynb +0 -0
  44. {lamindb-0.70.1 → lamindb-0.70.2}/docs/faq/reference-field.ipynb +0 -0
  45. {lamindb-0.70.1 → lamindb-0.70.2}/docs/faq/setup.ipynb +0 -0
  46. {lamindb-0.70.1 → lamindb-0.70.2}/docs/faq/test_notebooks.py +0 -0
  47. {lamindb-0.70.1 → lamindb-0.70.2}/docs/faq/track-run-inputs.ipynb +0 -0
  48. {lamindb-0.70.1 → lamindb-0.70.2}/docs/faq/visibility.ipynb +0 -0
  49. {lamindb-0.70.1 → lamindb-0.70.2}/docs/faq.md +0 -0
  50. {lamindb-0.70.1 → lamindb-0.70.2}/docs/features-lamindb.md +0 -0
  51. {lamindb-0.70.1 → lamindb-0.70.2}/docs/features-laminhub.md +0 -0
  52. {lamindb-0.70.1 → lamindb-0.70.2}/docs/guide.md +0 -0
  53. {lamindb-0.70.1 → lamindb-0.70.2}/docs/index.md +0 -0
  54. {lamindb-0.70.1 → lamindb-0.70.2}/docs/installation.md +0 -0
  55. {lamindb-0.70.1 → lamindb-0.70.2}/docs/introduction.ipynb +0 -0
  56. {lamindb-0.70.1 → lamindb-0.70.2}/docs/lamin-utils.md +0 -0
  57. {lamindb-0.70.1 → lamindb-0.70.2}/docs/lamindb.md +0 -0
  58. {lamindb-0.70.1 → lamindb-0.70.2}/docs/meta.ipynb +0 -0
  59. {lamindb-0.70.1 → lamindb-0.70.2}/docs/nbproject.md +0 -0
  60. {lamindb-0.70.1 → lamindb-0.70.2}/docs/query-search.md +0 -0
  61. {lamindb-0.70.1 → lamindb-0.70.2}/docs/readfcs.md +0 -0
  62. {lamindb-0.70.1 → lamindb-0.70.2}/docs/reference.md +0 -0
  63. {lamindb-0.70.1 → lamindb-0.70.2}/docs/schemas.ipynb +0 -0
  64. {lamindb-0.70.1 → lamindb-0.70.2}/docs/setup.ipynb +0 -0
  65. {lamindb-0.70.1 → lamindb-0.70.2}/docs/signup-login.md +0 -0
  66. {lamindb-0.70.1 → lamindb-0.70.2}/docs/storage/add-replace-stage.ipynb +0 -0
  67. {lamindb-0.70.1 → lamindb-0.70.2}/docs/storage/anndata-accessor.ipynb +0 -0
  68. {lamindb-0.70.1 → lamindb-0.70.2}/docs/storage/prepare-transfer-local-to-cloud.ipynb +0 -0
  69. {lamindb-0.70.1 → lamindb-0.70.2}/docs/storage/test-files/iris.csv +0 -0
  70. {lamindb-0.70.1 → lamindb-0.70.2}/docs/storage/test-files/iris.data +0 -0
  71. {lamindb-0.70.1 → lamindb-0.70.2}/docs/storage/test-files/new_iris.csv +0 -0
  72. {lamindb-0.70.1 → lamindb-0.70.2}/docs/storage/test_notebooks.py +0 -0
  73. {lamindb-0.70.1 → lamindb-0.70.2}/docs/storage/transfer-local-to-cloud.ipynb +0 -0
  74. {lamindb-0.70.1 → lamindb-0.70.2}/docs/storage/upload.ipynb +0 -0
  75. {lamindb-0.70.1 → lamindb-0.70.2}/docs/test_notebooks.py +0 -0
  76. {lamindb-0.70.1 → lamindb-0.70.2}/docs/track.ipynb +0 -0
  77. {lamindb-0.70.1 → lamindb-0.70.2}/docs/transfer.ipynb +0 -0
  78. {lamindb-0.70.1 → lamindb-0.70.2}/docs/tutorial.ipynb +0 -0
  79. {lamindb-0.70.1 → lamindb-0.70.2}/docs/tutorial2.ipynb +0 -0
  80. {lamindb-0.70.1 → lamindb-0.70.2}/docs/wetlab.md +0 -0
  81. {lamindb-0.70.1 → lamindb-0.70.2}/lamindb/_artifact.py +0 -0
  82. {lamindb-0.70.1 → lamindb-0.70.2}/lamindb/_can_validate.py +0 -0
  83. {lamindb-0.70.1 → lamindb-0.70.2}/lamindb/_collection.py +0 -0
  84. {lamindb-0.70.1 → lamindb-0.70.2}/lamindb/_feature.py +0 -0
  85. {lamindb-0.70.1 → lamindb-0.70.2}/lamindb/_feature_set.py +0 -0
  86. {lamindb-0.70.1 → lamindb-0.70.2}/lamindb/_filter.py +0 -0
  87. {lamindb-0.70.1 → lamindb-0.70.2}/lamindb/_from_values.py +0 -0
  88. {lamindb-0.70.1 → lamindb-0.70.2}/lamindb/_is_versioned.py +0 -0
  89. {lamindb-0.70.1 → lamindb-0.70.2}/lamindb/_parents.py +0 -0
  90. {lamindb-0.70.1 → lamindb-0.70.2}/lamindb/_query_manager.py +0 -0
  91. {lamindb-0.70.1 → lamindb-0.70.2}/lamindb/_query_set.py +0 -0
  92. {lamindb-0.70.1 → lamindb-0.70.2}/lamindb/_registry.py +0 -0
  93. {lamindb-0.70.1 → lamindb-0.70.2}/lamindb/_run.py +0 -0
  94. {lamindb-0.70.1 → lamindb-0.70.2}/lamindb/_save.py +0 -0
  95. {lamindb-0.70.1 → lamindb-0.70.2}/lamindb/_storage.py +0 -0
  96. {lamindb-0.70.1 → lamindb-0.70.2}/lamindb/_transform.py +0 -0
  97. {lamindb-0.70.1 → lamindb-0.70.2}/lamindb/_ulabel.py +0 -0
  98. {lamindb-0.70.1 → lamindb-0.70.2}/lamindb/_utils.py +0 -0
  99. {lamindb-0.70.1 → lamindb-0.70.2}/lamindb/_view.py +0 -0
  100. {lamindb-0.70.1 → lamindb-0.70.2}/lamindb/core/__init__.py +0 -0
  101. {lamindb-0.70.1 → lamindb-0.70.2}/lamindb/core/_data.py +0 -0
  102. {lamindb-0.70.1 → lamindb-0.70.2}/lamindb/core/_feature_manager.py +0 -0
  103. {lamindb-0.70.1 → lamindb-0.70.2}/lamindb/core/_label_manager.py +0 -0
  104. {lamindb-0.70.1 → lamindb-0.70.2}/lamindb/core/_mapped_collection.py +0 -0
  105. {lamindb-0.70.1 → lamindb-0.70.2}/lamindb/core/_run_context.py +0 -0
  106. {lamindb-0.70.1 → lamindb-0.70.2}/lamindb/core/_settings.py +0 -0
  107. {lamindb-0.70.1 → lamindb-0.70.2}/lamindb/core/_sync_git.py +0 -0
  108. {lamindb-0.70.1 → lamindb-0.70.2}/lamindb/core/_track_environment.py +0 -0
  109. {lamindb-0.70.1 → lamindb-0.70.2}/lamindb/core/_transform_settings.py +0 -0
  110. {lamindb-0.70.1 → lamindb-0.70.2}/lamindb/core/_view_tree.py +0 -0
  111. {lamindb-0.70.1 → lamindb-0.70.2}/lamindb/core/datasets/__init__.py +0 -0
  112. {lamindb-0.70.1 → lamindb-0.70.2}/lamindb/core/datasets/_core.py +0 -0
  113. {lamindb-0.70.1 → lamindb-0.70.2}/lamindb/core/datasets/_fake.py +0 -0
  114. {lamindb-0.70.1 → lamindb-0.70.2}/lamindb/core/exceptions.py +0 -0
  115. {lamindb-0.70.1 → lamindb-0.70.2}/lamindb/core/fields.py +0 -0
  116. {lamindb-0.70.1 → lamindb-0.70.2}/lamindb/core/storage/_anndata_sizes.py +0 -0
  117. {lamindb-0.70.1 → lamindb-0.70.2}/lamindb/core/storage/_zarr.py +0 -0
  118. {lamindb-0.70.1 → lamindb-0.70.2}/lamindb/core/storage/objects.py +0 -0
  119. {lamindb-0.70.1 → lamindb-0.70.2}/lamindb/core/storage/paths.py +0 -0
  120. {lamindb-0.70.1 → lamindb-0.70.2}/lamindb/core/types.py +0 -0
  121. {lamindb-0.70.1 → lamindb-0.70.2}/lamindb/core/versioning.py +0 -0
  122. {lamindb-0.70.1 → lamindb-0.70.2}/lamindb/integrations/__init__.py +0 -0
  123. {lamindb-0.70.1 → lamindb-0.70.2}/lamindb/setup/__init__.py +0 -0
  124. {lamindb-0.70.1 → lamindb-0.70.2}/lamindb/setup/core/__init__.py +0 -0
  125. {lamindb-0.70.1 → lamindb-0.70.2}/sub/bionty/.github/workflows/build.yml +0 -0
  126. {lamindb-0.70.1 → lamindb-0.70.2}/sub/bionty/.github/workflows/latest-changes.jinja2 +0 -0
  127. {lamindb-0.70.1 → lamindb-0.70.2}/sub/bionty/.github/workflows/latest-changes.yml +0 -0
  128. {lamindb-0.70.1 → lamindb-0.70.2}/sub/bionty/.gitignore +0 -0
  129. {lamindb-0.70.1 → lamindb-0.70.2}/sub/bionty/.pre-commit-config.yaml +0 -0
  130. {lamindb-0.70.1 → lamindb-0.70.2}/sub/bionty/LICENSE +0 -0
  131. {lamindb-0.70.1 → lamindb-0.70.2}/sub/bionty/README.md +0 -0
  132. {lamindb-0.70.1 → lamindb-0.70.2}/sub/bionty/bionty/__init__.py +0 -0
  133. {lamindb-0.70.1 → lamindb-0.70.2}/sub/bionty/bionty/core/__init__.py +0 -0
  134. {lamindb-0.70.1 → lamindb-0.70.2}/sub/bionty/docs/changelog.md +0 -0
  135. {lamindb-0.70.1 → lamindb-0.70.2}/sub/bionty/docs/index.md +0 -0
  136. {lamindb-0.70.1 → lamindb-0.70.2}/sub/bionty/docs/reference.md +0 -0
  137. {lamindb-0.70.1 → lamindb-0.70.2}/sub/bionty/lamin-project.yaml +0 -0
  138. {lamindb-0.70.1 → lamindb-0.70.2}/sub/bionty/noxfile.py +0 -0
  139. {lamindb-0.70.1 → lamindb-0.70.2}/sub/bionty/pyproject.toml +0 -0
  140. {lamindb-0.70.1 → lamindb-0.70.2}/sub/bionty/tests/test_notebooks.py +0 -0
  141. {lamindb-0.70.1 → lamindb-0.70.2}/sub/lamin-cli/.gitignore +0 -0
  142. {lamindb-0.70.1 → lamindb-0.70.2}/sub/lamin-cli/.pre-commit-config.yaml +0 -0
  143. {lamindb-0.70.1 → lamindb-0.70.2}/sub/lamin-cli/README.md +0 -0
  144. {lamindb-0.70.1 → lamindb-0.70.2}/sub/lamin-cli/lamin_cli/__init__.py +0 -0
  145. {lamindb-0.70.1 → lamindb-0.70.2}/sub/lamin-cli/lamin_cli/__main__.py +0 -0
  146. {lamindb-0.70.1 → lamindb-0.70.2}/sub/lamin-cli/lamin_cli/_cache.py +0 -0
  147. {lamindb-0.70.1 → lamindb-0.70.2}/sub/lamin-cli/lamin_cli/_get.py +0 -0
  148. {lamindb-0.70.1 → lamindb-0.70.2}/sub/lamin-cli/lamin_cli/_migration.py +0 -0
  149. {lamindb-0.70.1 → lamindb-0.70.2}/sub/lamin-cli/lamin_cli/_save.py +0 -0
  150. {lamindb-0.70.1 → lamindb-0.70.2}/sub/lamin-cli/pyproject.toml +0 -0
  151. {lamindb-0.70.1 → lamindb-0.70.2}/sub/lamin-cli/tests/conftest.py +0 -0
  152. {lamindb-0.70.1 → lamindb-0.70.2}/sub/lamin-cli/tests/notebooks/not-initialized.ipynb +0 -0
  153. {lamindb-0.70.1 → lamindb-0.70.2}/sub/lamin-cli/tests/notebooks/with-title-and-initialized-consecutive.ipynb +0 -0
  154. {lamindb-0.70.1 → lamindb-0.70.2}/sub/lamin-cli/tests/notebooks/with-title-and-initialized-non-consecutive.ipynb +0 -0
  155. {lamindb-0.70.1 → lamindb-0.70.2}/sub/lamin-cli/tests/scripts/initialized-no-git-sync.py +0 -0
  156. {lamindb-0.70.1 → lamindb-0.70.2}/sub/lamin-cli/tests/scripts/initialized.py +0 -0
  157. {lamindb-0.70.1 → lamindb-0.70.2}/sub/lamin-cli/tests/test_cli.py +0 -0
  158. {lamindb-0.70.1 → lamindb-0.70.2}/sub/lamin-cli/tests/test_get.py +0 -0
  159. {lamindb-0.70.1 → lamindb-0.70.2}/sub/lamin-cli/tests/test_migrate.py +0 -0
  160. {lamindb-0.70.1 → lamindb-0.70.2}/sub/lamin-cli/tests/test_multi_process.py +0 -0
  161. {lamindb-0.70.1 → lamindb-0.70.2}/sub/lamin-cli/tests/test_save_files.py +0 -0
  162. {lamindb-0.70.1 → lamindb-0.70.2}/sub/lamin-cli/tests/test_save_notebooks.py +0 -0
  163. {lamindb-0.70.1 → lamindb-0.70.2}/sub/lamin-cli/tests/test_save_scripts.py +0 -0
  164. {lamindb-0.70.1 → lamindb-0.70.2}/sub/lamindb-setup/.github/workflows/build.yml +0 -0
  165. {lamindb-0.70.1 → lamindb-0.70.2}/sub/lamindb-setup/.github/workflows/latest-changes.jinja2 +0 -0
  166. {lamindb-0.70.1 → lamindb-0.70.2}/sub/lamindb-setup/.github/workflows/latest-changes.yml +0 -0
  167. {lamindb-0.70.1 → lamindb-0.70.2}/sub/lamindb-setup/.gitignore +0 -0
  168. {lamindb-0.70.1 → lamindb-0.70.2}/sub/lamindb-setup/.pre-commit-config.yaml +0 -0
  169. {lamindb-0.70.1 → lamindb-0.70.2}/sub/lamindb-setup/LICENSE +0 -0
  170. {lamindb-0.70.1 → lamindb-0.70.2}/sub/lamindb-setup/README.md +0 -0
  171. {lamindb-0.70.1 → lamindb-0.70.2}/sub/lamindb-setup/docs/hub-cloud/01-init-on-prem-instance.ipynb +0 -0
  172. {lamindb-0.70.1 → lamindb-0.70.2}/sub/lamindb-setup/docs/hub-cloud/02-connect-on-prem-instance.ipynb +0 -0
  173. {lamindb-0.70.1 → lamindb-0.70.2}/sub/lamindb-setup/docs/hub-cloud/03-set-storage.ipynb +0 -0
  174. {lamindb-0.70.1 → lamindb-0.70.2}/sub/lamindb-setup/docs/hub-cloud/04-test-bionty.ipynb +0 -0
  175. {lamindb-0.70.1 → lamindb-0.70.2}/sub/lamindb-setup/docs/hub-cloud/05-init-hosted-instance.ipynb +0 -0
  176. {lamindb-0.70.1 → lamindb-0.70.2}/sub/lamindb-setup/docs/hub-cloud/06-connect-hosted-instance.ipynb +0 -0
  177. {lamindb-0.70.1 → lamindb-0.70.2}/sub/lamindb-setup/docs/hub-cloud/test-multi-session.ipynb +0 -0
  178. {lamindb-0.70.1 → lamindb-0.70.2}/sub/lamindb-setup/docs/hub-cloud/test_notebooks.py +0 -0
  179. {lamindb-0.70.1 → lamindb-0.70.2}/sub/lamindb-setup/docs/hub-prod/test-cache-management.ipynb +0 -0
  180. {lamindb-0.70.1 → lamindb-0.70.2}/sub/lamindb-setup/docs/hub-prod/test-cloud-sync.ipynb +0 -0
  181. {lamindb-0.70.1 → lamindb-0.70.2}/sub/lamindb-setup/docs/hub-prod/test-connect-anonymously.ipynb +0 -0
  182. {lamindb-0.70.1 → lamindb-0.70.2}/sub/lamindb-setup/docs/hub-prod/test-empty-init.ipynb +0 -0
  183. {lamindb-0.70.1 → lamindb-0.70.2}/sub/lamindb-setup/docs/hub-prod/test-import-schema.ipynb +0 -0
  184. {lamindb-0.70.1 → lamindb-0.70.2}/sub/lamindb-setup/docs/hub-prod/test-insufficient-user-info.ipynb +0 -0
  185. {lamindb-0.70.1 → lamindb-0.70.2}/sub/lamindb-setup/docs/hub-prod/test-invalid-schema.ipynb +0 -0
  186. {lamindb-0.70.1 → lamindb-0.70.2}/sub/lamindb-setup/docs/hub-prod/test-sqlite-lock.ipynb +0 -0
  187. {lamindb-0.70.1 → lamindb-0.70.2}/sub/lamindb-setup/docs/hub-prod/test_notebooks2.py +0 -0
  188. {lamindb-0.70.1 → lamindb-0.70.2}/sub/lamindb-setup/docs/index.md +0 -0
  189. {lamindb-0.70.1 → lamindb-0.70.2}/sub/lamindb-setup/docs/notebooks.md +0 -0
  190. {lamindb-0.70.1 → lamindb-0.70.2}/sub/lamindb-setup/docs/reference.md +0 -0
  191. {lamindb-0.70.1 → lamindb-0.70.2}/sub/lamindb-setup/lamindb_setup/_add_remote_storage.py +0 -0
  192. {lamindb-0.70.1 → lamindb-0.70.2}/sub/lamindb-setup/lamindb_setup/_cache.py +0 -0
  193. {lamindb-0.70.1 → lamindb-0.70.2}/sub/lamindb-setup/lamindb_setup/_check.py +0 -0
  194. {lamindb-0.70.1 → lamindb-0.70.2}/sub/lamindb-setup/lamindb_setup/_check_setup.py +0 -0
  195. {lamindb-0.70.1 → lamindb-0.70.2}/sub/lamindb-setup/lamindb_setup/_close.py +0 -0
  196. {lamindb-0.70.1 → lamindb-0.70.2}/sub/lamindb-setup/lamindb_setup/_delete.py +0 -0
  197. {lamindb-0.70.1 → lamindb-0.70.2}/sub/lamindb-setup/lamindb_setup/_django.py +0 -0
  198. {lamindb-0.70.1 → lamindb-0.70.2}/sub/lamindb-setup/lamindb_setup/_exportdb.py +0 -0
  199. {lamindb-0.70.1 → lamindb-0.70.2}/sub/lamindb-setup/lamindb_setup/_importdb.py +0 -0
  200. {lamindb-0.70.1 → lamindb-0.70.2}/sub/lamindb-setup/lamindb_setup/_init_instance.py +0 -0
  201. {lamindb-0.70.1 → lamindb-0.70.2}/sub/lamindb-setup/lamindb_setup/_migrate.py +0 -0
  202. {lamindb-0.70.1 → lamindb-0.70.2}/sub/lamindb-setup/lamindb_setup/_register_instance.py +0 -0
  203. {lamindb-0.70.1 → lamindb-0.70.2}/sub/lamindb-setup/lamindb_setup/_schema.py +0 -0
  204. {lamindb-0.70.1 → lamindb-0.70.2}/sub/lamindb-setup/lamindb_setup/_setup_user.py +0 -0
  205. {lamindb-0.70.1 → lamindb-0.70.2}/sub/lamindb-setup/lamindb_setup/_silence_loggers.py +0 -0
  206. {lamindb-0.70.1 → lamindb-0.70.2}/sub/lamindb-setup/lamindb_setup/core/__init__.py +0 -0
  207. {lamindb-0.70.1 → lamindb-0.70.2}/sub/lamindb-setup/lamindb_setup/core/_aws_storage.py +0 -0
  208. {lamindb-0.70.1 → lamindb-0.70.2}/sub/lamindb-setup/lamindb_setup/core/_deprecated.py +0 -0
  209. {lamindb-0.70.1 → lamindb-0.70.2}/sub/lamindb-setup/lamindb_setup/core/_docs.py +0 -0
  210. {lamindb-0.70.1 → lamindb-0.70.2}/sub/lamindb-setup/lamindb_setup/core/_hub_client.py +0 -0
  211. {lamindb-0.70.1 → lamindb-0.70.2}/sub/lamindb-setup/lamindb_setup/core/_hub_core.py +0 -0
  212. {lamindb-0.70.1 → lamindb-0.70.2}/sub/lamindb-setup/lamindb_setup/core/_hub_crud.py +0 -0
  213. {lamindb-0.70.1 → lamindb-0.70.2}/sub/lamindb-setup/lamindb_setup/core/_hub_utils.py +0 -0
  214. {lamindb-0.70.1 → lamindb-0.70.2}/sub/lamindb-setup/lamindb_setup/core/_settings.py +0 -0
  215. {lamindb-0.70.1 → lamindb-0.70.2}/sub/lamindb-setup/lamindb_setup/core/_settings_instance.py +0 -0
  216. {lamindb-0.70.1 → lamindb-0.70.2}/sub/lamindb-setup/lamindb_setup/core/_settings_load.py +0 -0
  217. {lamindb-0.70.1 → lamindb-0.70.2}/sub/lamindb-setup/lamindb_setup/core/_settings_save.py +0 -0
  218. {lamindb-0.70.1 → lamindb-0.70.2}/sub/lamindb-setup/lamindb_setup/core/_settings_storage.py +0 -0
  219. {lamindb-0.70.1 → lamindb-0.70.2}/sub/lamindb-setup/lamindb_setup/core/_settings_store.py +0 -0
  220. {lamindb-0.70.1 → lamindb-0.70.2}/sub/lamindb-setup/lamindb_setup/core/_settings_user.py +0 -0
  221. {lamindb-0.70.1 → lamindb-0.70.2}/sub/lamindb-setup/lamindb_setup/core/_setup_bionty_sources.py +0 -0
  222. {lamindb-0.70.1 → lamindb-0.70.2}/sub/lamindb-setup/lamindb_setup/core/cloud_sqlite_locker.py +0 -0
  223. {lamindb-0.70.1 → lamindb-0.70.2}/sub/lamindb-setup/lamindb_setup/core/django.py +0 -0
  224. {lamindb-0.70.1 → lamindb-0.70.2}/sub/lamindb-setup/lamindb_setup/core/exceptions.py +0 -0
  225. {lamindb-0.70.1 → lamindb-0.70.2}/sub/lamindb-setup/lamindb_setup/core/hashing.py +0 -0
  226. {lamindb-0.70.1 → lamindb-0.70.2}/sub/lamindb-setup/lamindb_setup/core/types.py +0 -0
  227. {lamindb-0.70.1 → lamindb-0.70.2}/sub/lamindb-setup/noxfile.py +0 -0
  228. {lamindb-0.70.1 → lamindb-0.70.2}/sub/lamindb-setup/pyproject.toml +0 -0
  229. {lamindb-0.70.1 → lamindb-0.70.2}/sub/lamindb-setup/tests/hub-cloud/test_delete_instance.py +0 -0
  230. {lamindb-0.70.1 → lamindb-0.70.2}/sub/lamindb-setup/tests/hub-cloud/test_init_instance.py +0 -0
  231. {lamindb-0.70.1 → lamindb-0.70.2}/sub/lamindb-setup/tests/hub-cloud/test_login.py +0 -0
  232. {lamindb-0.70.1 → lamindb-0.70.2}/sub/lamindb-setup/tests/hub-cloud/test_migrate.py +0 -0
  233. {lamindb-0.70.1 → lamindb-0.70.2}/sub/lamindb-setup/tests/hub-cloud/test_set_storage.py +0 -0
  234. {lamindb-0.70.1 → lamindb-0.70.2}/sub/lamindb-setup/tests/hub-local/conftest.py +0 -0
  235. {lamindb-0.70.1 → lamindb-0.70.2}/sub/lamindb-setup/tests/hub-local/test_all.py +0 -0
  236. {lamindb-0.70.1 → lamindb-0.70.2}/sub/lamindb-setup/tests/hub-prod/conftest.py +0 -0
  237. {lamindb-0.70.1 → lamindb-0.70.2}/sub/lamindb-setup/tests/hub-prod/test_auto_connect.py +0 -0
  238. {lamindb-0.70.1 → lamindb-0.70.2}/sub/lamindb-setup/tests/hub-prod/test_django.py +0 -0
  239. {lamindb-0.70.1 → lamindb-0.70.2}/sub/lamindb-setup/tests/hub-prod/test_switch_and_fallback_env.py +0 -0
  240. {lamindb-0.70.1 → lamindb-0.70.2}/sub/lamindb-setup/tests/hub-prod/test_upath.py +0 -0
  241. {lamindb-0.70.1 → lamindb-0.70.2}/sub/lamindb-setup/tests/storage/test_hashing.py +0 -0
  242. {lamindb-0.70.1 → lamindb-0.70.2}/sub/lamindb-setup/tests/storage/test_storage_access.py +0 -0
  243. {lamindb-0.70.1 → lamindb-0.70.2}/sub/lamindb-setup/tests/storage/test_storage_basis.py +0 -0
  244. {lamindb-0.70.1 → lamindb-0.70.2}/sub/lamindb-setup/tests/storage/test_storage_stats.py +0 -0
  245. {lamindb-0.70.1 → lamindb-0.70.2}/sub/lnschema-bionty/.github/workflows/build.yml +0 -0
  246. {lamindb-0.70.1 → lamindb-0.70.2}/sub/lnschema-bionty/.github/workflows/latest-changes.jinja2 +0 -0
  247. {lamindb-0.70.1 → lamindb-0.70.2}/sub/lnschema-bionty/.github/workflows/latest-changes.yml +0 -0
  248. {lamindb-0.70.1 → lamindb-0.70.2}/sub/lnschema-bionty/.gitignore +0 -0
  249. {lamindb-0.70.1 → lamindb-0.70.2}/sub/lnschema-bionty/.pre-commit-config.yaml +0 -0
  250. {lamindb-0.70.1 → lamindb-0.70.2}/sub/lnschema-bionty/LICENSE +0 -0
  251. {lamindb-0.70.1 → lamindb-0.70.2}/sub/lnschema-bionty/README.md +0 -0
  252. {lamindb-0.70.1 → lamindb-0.70.2}/sub/lnschema-bionty/docs/changelog.md +0 -0
  253. {lamindb-0.70.1 → lamindb-0.70.2}/sub/lnschema-bionty/docs/index.md +0 -0
  254. {lamindb-0.70.1 → lamindb-0.70.2}/sub/lnschema-bionty/docs/reference.md +0 -0
  255. {lamindb-0.70.1 → lamindb-0.70.2}/sub/lnschema-bionty/lamin-project.yaml +0 -0
  256. {lamindb-0.70.1 → lamindb-0.70.2}/sub/lnschema-bionty/lnschema_bionty/__init__.py +0 -0
  257. {lamindb-0.70.1 → lamindb-0.70.2}/sub/lnschema-bionty/lnschema_bionty/_bionty.py +0 -0
  258. {lamindb-0.70.1 → lamindb-0.70.2}/sub/lnschema-bionty/lnschema_bionty/core/__init__.py +0 -0
  259. {lamindb-0.70.1 → lamindb-0.70.2}/sub/lnschema-bionty/lnschema_bionty/core/_bionty.py +0 -0
  260. {lamindb-0.70.1 → lamindb-0.70.2}/sub/lnschema-bionty/lnschema_bionty/core/_settings.py +0 -0
  261. {lamindb-0.70.1 → lamindb-0.70.2}/sub/lnschema-bionty/lnschema_bionty/ids.py +0 -0
  262. {lamindb-0.70.1 → lamindb-0.70.2}/sub/lnschema-bionty/lnschema_bionty/migrations/0001_initial.py +0 -0
  263. {lamindb-0.70.1 → lamindb-0.70.2}/sub/lnschema-bionty/lnschema_bionty/migrations/0001_initial_squashed_0016.py +0 -0
  264. {lamindb-0.70.1 → lamindb-0.70.2}/sub/lnschema-bionty/lnschema_bionty/migrations/0002_rename_gene_type_gene_biotype_and_more.py +0 -0
  265. {lamindb-0.70.1 → lamindb-0.70.2}/sub/lnschema-bionty/lnschema_bionty/migrations/0003_alter_biontysource_entity_alter_biontysource_source_and_more.py +0 -0
  266. {lamindb-0.70.1 → lamindb-0.70.2}/sub/lnschema-bionty/lnschema_bionty/migrations/0004_alter_cellline_bionty_source_and_more.py +0 -0
  267. {lamindb-0.70.1 → lamindb-0.70.2}/sub/lnschema-bionty/lnschema_bionty/migrations/0005_rename_short_name_cellline_abbr_and_more.py +0 -0
  268. {lamindb-0.70.1 → lamindb-0.70.2}/sub/lnschema-bionty/lnschema_bionty/migrations/0006_alter_biontysource_options_alter_cellline_options_and_more.py +0 -0
  269. {lamindb-0.70.1 → lamindb-0.70.2}/sub/lnschema-bionty/lnschema_bionty/migrations/0007_rename_readout_experimental_factor.py +0 -0
  270. {lamindb-0.70.1 → lamindb-0.70.2}/sub/lnschema-bionty/lnschema_bionty/migrations/0008_remove_gene_hgnc_id_remove_gene_mgi_id_and_more.py +0 -0
  271. {lamindb-0.70.1 → lamindb-0.70.2}/sub/lnschema-bionty/lnschema_bionty/migrations/0009_alter_gene_ensembl_gene_id.py +0 -0
  272. {lamindb-0.70.1 → lamindb-0.70.2}/sub/lnschema-bionty/lnschema_bionty/migrations/0010_alter_species_name.py +0 -0
  273. {lamindb-0.70.1 → lamindb-0.70.2}/sub/lnschema-bionty/lnschema_bionty/migrations/0011_cellline_datasets_cellmarker_datasets_and_more.py +0 -0
  274. {lamindb-0.70.1 → lamindb-0.70.2}/sub/lnschema-bionty/lnschema_bionty/migrations/0012_gene_stable_id.py +0 -0
  275. {lamindb-0.70.1 → lamindb-0.70.2}/sub/lnschema-bionty/lnschema_bionty/migrations/0013_alter_cellmarker_species_alter_gene_species_and_more.py +0 -0
  276. {lamindb-0.70.1 → lamindb-0.70.2}/sub/lnschema-bionty/lnschema_bionty/migrations/0014_ethnicity_developmentalstage.py +0 -0
  277. {lamindb-0.70.1 → lamindb-0.70.2}/sub/lnschema-bionty/lnschema_bionty/migrations/0015_migrate_to_integer_pks.py +0 -0
  278. {lamindb-0.70.1 → lamindb-0.70.2}/sub/lnschema-bionty/lnschema_bionty/migrations/0016_export_legacy_data.py +0 -0
  279. {lamindb-0.70.1 → lamindb-0.70.2}/sub/lnschema-bionty/lnschema_bionty/migrations/0017_import_legacy_data.py +0 -0
  280. {lamindb-0.70.1 → lamindb-0.70.2}/sub/lnschema-bionty/lnschema_bionty/migrations/0018_organism_rename_species_biontysource_organism_and_more.py +0 -0
  281. {lamindb-0.70.1 → lamindb-0.70.2}/sub/lnschema-bionty/lnschema_bionty/migrations/0019_rename_taxon_id_organism_ontology_id_and_more.py +0 -0
  282. {lamindb-0.70.1 → lamindb-0.70.2}/sub/lnschema-bionty/lnschema_bionty/migrations/0020_alter_organism_bionty_source.py +0 -0
  283. {lamindb-0.70.1 → lamindb-0.70.2}/sub/lnschema-bionty/lnschema_bionty/migrations/0021_rename_files_cellline_artifacts_and_more.py +0 -0
  284. {lamindb-0.70.1 → lamindb-0.70.2}/sub/lnschema-bionty/lnschema_bionty/migrations/0022_rename_datasets_cellline_collections_and_more.py +0 -0
  285. {lamindb-0.70.1 → lamindb-0.70.2}/sub/lnschema-bionty/lnschema_bionty/migrations/0023_rename_publicsource_encode_uid.py +0 -0
  286. {lamindb-0.70.1 → lamindb-0.70.2}/sub/lnschema-bionty/lnschema_bionty/migrations/__init__.py +0 -0
  287. {lamindb-0.70.1 → lamindb-0.70.2}/sub/lnschema-bionty/lnschema_bionty/models.py +0 -0
  288. {lamindb-0.70.1 → lamindb-0.70.2}/sub/lnschema-bionty/noxfile.py +0 -0
  289. {lamindb-0.70.1 → lamindb-0.70.2}/sub/lnschema-bionty/pyproject.toml +0 -0
  290. {lamindb-0.70.1 → lamindb-0.70.2}/sub/lnschema-bionty/tests/test_integrity.py +0 -0
  291. {lamindb-0.70.1 → lamindb-0.70.2}/sub/lnschema-core/.github/workflows/build.yml +0 -0
  292. {lamindb-0.70.1 → lamindb-0.70.2}/sub/lnschema-core/.github/workflows/latest-changes.jinja2 +0 -0
  293. {lamindb-0.70.1 → lamindb-0.70.2}/sub/lnschema-core/.github/workflows/latest-changes.yml +0 -0
  294. {lamindb-0.70.1 → lamindb-0.70.2}/sub/lnschema-core/.gitignore +0 -0
  295. {lamindb-0.70.1 → lamindb-0.70.2}/sub/lnschema-core/.pre-commit-config.yaml +0 -0
  296. {lamindb-0.70.1 → lamindb-0.70.2}/sub/lnschema-core/CHANGELOG.md +0 -0
  297. {lamindb-0.70.1 → lamindb-0.70.2}/sub/lnschema-core/LICENSE +0 -0
  298. {lamindb-0.70.1 → lamindb-0.70.2}/sub/lnschema-core/README.md +0 -0
  299. {lamindb-0.70.1 → lamindb-0.70.2}/sub/lnschema-core/lnschema_core/__init__.py +0 -0
  300. {lamindb-0.70.1 → lamindb-0.70.2}/sub/lnschema-core/lnschema_core/ids.py +0 -0
  301. {lamindb-0.70.1 → lamindb-0.70.2}/sub/lnschema-core/lnschema_core/migrations/0001_initial.py +0 -0
  302. {lamindb-0.70.1 → lamindb-0.70.2}/sub/lnschema-core/lnschema_core/migrations/0001_initial_squashed_0023.py +0 -0
  303. {lamindb-0.70.1 → lamindb-0.70.2}/sub/lnschema-core/lnschema_core/migrations/0002_alter_user_name.py +0 -0
  304. {lamindb-0.70.1 → lamindb-0.70.2}/sub/lnschema-core/lnschema_core/migrations/0003_alter_storage_region_alter_transform_short_name.py +0 -0
  305. {lamindb-0.70.1 → lamindb-0.70.2}/sub/lnschema-core/lnschema_core/migrations/0004_rename_folder_tag_alter_project_folders.py +0 -0
  306. {lamindb-0.70.1 → lamindb-0.70.2}/sub/lnschema-core/lnschema_core/migrations/0005_alter_run_inputs_delete_runinput.py +0 -0
  307. {lamindb-0.70.1 → lamindb-0.70.2}/sub/lnschema-core/lnschema_core/migrations/0006_feature_dataset.py +0 -0
  308. {lamindb-0.70.1 → lamindb-0.70.2}/sub/lnschema-core/lnschema_core/migrations/0007_feature_synonyms_featureset_field_and_more.py +0 -0
  309. {lamindb-0.70.1 → lamindb-0.70.2}/sub/lnschema-core/lnschema_core/migrations/0008_file_hash_type_transform_parents.py +0 -0
  310. {lamindb-0.70.1 → lamindb-0.70.2}/sub/lnschema-core/lnschema_core/migrations/0009_remove_featureset_files_feature_unit_and_more.py +0 -0
  311. {lamindb-0.70.1 → lamindb-0.70.2}/sub/lnschema-core/lnschema_core/migrations/0010_dataset_categories_file_categories.py +0 -0
  312. {lamindb-0.70.1 → lamindb-0.70.2}/sub/lnschema-core/lnschema_core/migrations/0011_label_remove_tag_created_by_remove_tag_parents_and_more.py +0 -0
  313. {lamindb-0.70.1 → lamindb-0.70.2}/sub/lnschema-core/lnschema_core/migrations/0012_remove_label_ref_id_remove_label_ref_orm_and_more.py +0 -0
  314. {lamindb-0.70.1 → lamindb-0.70.2}/sub/lnschema-core/lnschema_core/migrations/0013_remove_feature_labels_orm_and_more.py +0 -0
  315. {lamindb-0.70.1 → lamindb-0.70.2}/sub/lnschema-core/lnschema_core/migrations/0014_rename_ref_field_featureset_registry.py +0 -0
  316. {lamindb-0.70.1 → lamindb-0.70.2}/sub/lnschema-core/lnschema_core/migrations/0015_file_initial_version_file_version.py +0 -0
  317. {lamindb-0.70.1 → lamindb-0.70.2}/sub/lnschema-core/lnschema_core/migrations/0016_dataset_input_of_dataset_run_dataset_transform_and_more.py +0 -0
  318. {lamindb-0.70.1 → lamindb-0.70.2}/sub/lnschema-core/lnschema_core/migrations/0017_dataset_initial_version_dataset_version.py +0 -0
  319. {lamindb-0.70.1 → lamindb-0.70.2}/sub/lnschema-core/lnschema_core/migrations/0018_rename_datasetlabel_datasetulabel_and_more.py +0 -0
  320. {lamindb-0.70.1 → lamindb-0.70.2}/sub/lnschema-core/lnschema_core/migrations/0019_dataset_reference_dataset_reference_type_and_more.py +0 -0
  321. {lamindb-0.70.1 → lamindb-0.70.2}/sub/lnschema-core/lnschema_core/migrations/0020_run_report_transform_latest_report_and_more.py +0 -0
  322. {lamindb-0.70.1 → lamindb-0.70.2}/sub/lnschema-core/lnschema_core/migrations/0021_dataset_storage_alter_dataset_file.py +0 -0
  323. {lamindb-0.70.1 → lamindb-0.70.2}/sub/lnschema-core/lnschema_core/migrations/0022_migrate_to_integer_pks.py +0 -0
  324. {lamindb-0.70.1 → lamindb-0.70.2}/sub/lnschema-core/lnschema_core/migrations/0023_export_legacy_data.py +0 -0
  325. {lamindb-0.70.1 → lamindb-0.70.2}/sub/lnschema-core/lnschema_core/migrations/0024_import_legacy_data.py +0 -0
  326. {lamindb-0.70.1 → lamindb-0.70.2}/sub/lnschema-core/lnschema_core/migrations/0025_remove_user_email.py +0 -0
  327. {lamindb-0.70.1 → lamindb-0.70.2}/sub/lnschema-core/lnschema_core/migrations/0026_dataset_visibility_file_visibility.py +0 -0
  328. {lamindb-0.70.1 → lamindb-0.70.2}/sub/lnschema-core/lnschema_core/migrations/0027_file_key_is_virtual.py +0 -0
  329. {lamindb-0.70.1 → lamindb-0.70.2}/sub/lnschema-core/lnschema_core/migrations/0028_alter_dataset_visibility_alter_file_visibility.py +0 -0
  330. {lamindb-0.70.1 → lamindb-0.70.2}/sub/lnschema-core/lnschema_core/migrations/0029_remove_feature_modality_remove_featureset_modality_and_more.py +0 -0
  331. {lamindb-0.70.1 → lamindb-0.70.2}/sub/lnschema-core/lnschema_core/migrations/0030_alter_dataset_visibility_alter_file_visibility.py +0 -0
  332. {lamindb-0.70.1 → lamindb-0.70.2}/sub/lnschema-core/lnschema_core/migrations/0031_rename_file_to_artifact.py +0 -0
  333. {lamindb-0.70.1 → lamindb-0.70.2}/sub/lnschema-core/lnschema_core/migrations/0032_remove_dataset_storage.py +0 -0
  334. {lamindb-0.70.1 → lamindb-0.70.2}/sub/lnschema-core/lnschema_core/migrations/0033_alter_artifact_unique_together_artifact_n_objects_and_more.py +0 -0
  335. {lamindb-0.70.1 → lamindb-0.70.2}/sub/lnschema-core/lnschema_core/migrations/0034_run_environment.py +0 -0
  336. {lamindb-0.70.1 → lamindb-0.70.2}/sub/lnschema-core/lnschema_core/migrations/0035_remove_artifact_initial_version_and_more.py +0 -0
  337. {lamindb-0.70.1 → lamindb-0.70.2}/sub/lnschema-core/lnschema_core/migrations/0036_storage_description.py +0 -0
  338. {lamindb-0.70.1 → lamindb-0.70.2}/sub/lnschema-core/lnschema_core/migrations/0037_rename_dataset_to_collection.py +0 -0
  339. {lamindb-0.70.1 → lamindb-0.70.2}/sub/lnschema-core/lnschema_core/migrations/0038_alter_collection_artifact_alter_collection_artifacts_and_more.py +0 -0
  340. {lamindb-0.70.1 → lamindb-0.70.2}/sub/lnschema-core/lnschema_core/migrations/0039_remove_collection_artifacts_collectionartifact_and_more.py +0 -0
  341. {lamindb-0.70.1 → lamindb-0.70.2}/sub/lnschema-core/lnschema_core/migrations/0040_alter_transform_type.py +0 -0
  342. {lamindb-0.70.1 → lamindb-0.70.2}/sub/lnschema-core/lnschema_core/migrations/0041_remove_transform_short_name_transform_description_and_more.py +0 -0
  343. {lamindb-0.70.1 → lamindb-0.70.2}/sub/lnschema-core/lnschema_core/migrations/0042_rename_run_at_run_started_at_run_finished_at.py +0 -0
  344. {lamindb-0.70.1 → lamindb-0.70.2}/sub/lnschema-core/lnschema_core/migrations/0043_run_json.py +0 -0
  345. {lamindb-0.70.1 → lamindb-0.70.2}/sub/lnschema-core/lnschema_core/migrations/0044_run_replicated_outputs_transform_ulabels_and_more.py +0 -0
  346. {lamindb-0.70.1 → lamindb-0.70.2}/sub/lnschema-core/lnschema_core/migrations/0045_rename_replicated_outputs_run_replicated_output_artifacts_and_more.py +0 -0
  347. {lamindb-0.70.1 → lamindb-0.70.2}/sub/lnschema-core/lnschema_core/migrations/__init__.py +0 -0
  348. {lamindb-0.70.1 → lamindb-0.70.2}/sub/lnschema-core/lnschema_core/mocks.py +0 -0
  349. {lamindb-0.70.1 → lamindb-0.70.2}/sub/lnschema-core/lnschema_core/models.py +0 -0
  350. {lamindb-0.70.1 → lamindb-0.70.2}/sub/lnschema-core/lnschema_core/types.py +0 -0
  351. {lamindb-0.70.1 → lamindb-0.70.2}/sub/lnschema-core/lnschema_core/users.py +0 -0
  352. {lamindb-0.70.1 → lamindb-0.70.2}/sub/lnschema-core/noxfile.py +0 -0
  353. {lamindb-0.70.1 → lamindb-0.70.2}/sub/lnschema-core/pyproject.toml +0 -0
  354. {lamindb-0.70.1 → lamindb-0.70.2}/sub/lnschema-core/tests/test_integrity.py +0 -0
  355. {lamindb-0.70.1 → lamindb-0.70.2}/sub/lnschema-core/tests/test_types.py +0 -0
  356. {lamindb-0.70.1 → lamindb-0.70.2}/tests/conftest.py +0 -0
  357. {lamindb-0.70.1 → lamindb-0.70.2}/tests/notebooks/initialized-with-nbproject.ipynb +0 -0
  358. {lamindb-0.70.1 → lamindb-0.70.2}/tests/notebooks/no-title.ipynb +0 -0
  359. {lamindb-0.70.1 → lamindb-0.70.2}/tests/notebooks/not-initialized.ipynb +0 -0
  360. {lamindb-0.70.1 → lamindb-0.70.2}/tests/test_annotate.py +0 -0
  361. {lamindb-0.70.1 → lamindb-0.70.2}/tests/test_artifact.py +0 -0
  362. {lamindb-0.70.1 → lamindb-0.70.2}/tests/test_cache.py +0 -0
  363. {lamindb-0.70.1 → lamindb-0.70.2}/tests/test_can_validate.py +0 -0
  364. {lamindb-0.70.1 → lamindb-0.70.2}/tests/test_collection.py +0 -0
  365. {lamindb-0.70.1 → lamindb-0.70.2}/tests/test_data.py +0 -0
  366. {lamindb-0.70.1 → lamindb-0.70.2}/tests/test_db.py +0 -0
  367. {lamindb-0.70.1 → lamindb-0.70.2}/tests/test_delete.py +0 -0
  368. {lamindb-0.70.1 → lamindb-0.70.2}/tests/test_feature.py +0 -0
  369. {lamindb-0.70.1 → lamindb-0.70.2}/tests/test_feature_manager.py +0 -0
  370. {lamindb-0.70.1 → lamindb-0.70.2}/tests/test_feature_set.py +0 -0
  371. {lamindb-0.70.1 → lamindb-0.70.2}/tests/test_from_values.py +0 -0
  372. {lamindb-0.70.1 → lamindb-0.70.2}/tests/test_label_manager.py +0 -0
  373. {lamindb-0.70.1 → lamindb-0.70.2}/tests/test_load.py +0 -0
  374. {lamindb-0.70.1 → lamindb-0.70.2}/tests/test_manager.py +0 -0
  375. {lamindb-0.70.1 → lamindb-0.70.2}/tests/test_parents.py +0 -0
  376. {lamindb-0.70.1 → lamindb-0.70.2}/tests/test_queryset.py +0 -0
  377. {lamindb-0.70.1 → lamindb-0.70.2}/tests/test_registry.py +0 -0
  378. {lamindb-0.70.1 → lamindb-0.70.2}/tests/test_run.py +0 -0
  379. {lamindb-0.70.1 → lamindb-0.70.2}/tests/test_run_context.py +0 -0
  380. {lamindb-0.70.1 → lamindb-0.70.2}/tests/test_save.py +0 -0
  381. {lamindb-0.70.1 → lamindb-0.70.2}/tests/test_settings.py +0 -0
  382. {lamindb-0.70.1 → lamindb-0.70.2}/tests/test_transfer.py +0 -0
  383. {lamindb-0.70.1 → lamindb-0.70.2}/tests/test_transform.py +0 -0
  384. {lamindb-0.70.1 → lamindb-0.70.2}/tests/test_uid.py +0 -0
  385. {lamindb-0.70.1 → lamindb-0.70.2}/tests/test_ulabel.py +0 -0
  386. {lamindb-0.70.1 → lamindb-0.70.2}/tests/test_versioning.py +0 -0
  387. {lamindb-0.70.1 → lamindb-0.70.2}/tests/test_view.py +0 -0
  388. {lamindb-0.70.1 → lamindb-0.70.2}/tests/test_visibility.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: lamindb
3
- Version: 0.70.1
3
+ Version: 0.70.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
@@ -10,8 +10,8 @@ Classifier: Programming Language :: Python :: 3.9
10
10
  Classifier: Programming Language :: Python :: 3.10
11
11
  Classifier: Programming Language :: Python :: 3.11
12
12
  Requires-Dist: lnschema_core==0.65.1
13
- Requires-Dist: lamindb_setup==0.69.2
14
- Requires-Dist: lamin_utils==0.13.1
13
+ Requires-Dist: lamindb_setup==0.69.4
14
+ Requires-Dist: lamin_utils==0.13.2
15
15
  Requires-Dist: lamin_cli==0.12.3
16
16
  Requires-Dist: rapidfuzz
17
17
  Requires-Dist: pyarrow
@@ -14,9 +14,14 @@ When upgrading your LaminDB installation to a new `minor` version in `major.mino
14
14
 
15
15
  ## 0.70
16
16
 
17
+ ### 0.70.2 {small}`2024-04-19`
18
+
19
+ - ♻️ In Vitessce integration, separate `VitessceConfig` from its referenced artifacts [PR](https://github.com/laminlabs/lamindb/pull/1582) [@falexwolf](https://github.com/falexwolf)
20
+ - 🚸 In `ln.finish()`, remove flag `i_saved_the_notebook` [PR](https://github.com/laminlabs/lamindb/pull/1581) [@falexwolf](https://github.com/falexwolf)
21
+
17
22
  ### 0.70.1 {small}`2024-04-18`
18
23
 
19
- - 🚑️ Fix public_source in inspect [PR](https://github.com/laminlabs/lamindb/pull/1578) [@sunnyosun](https://github.com/sunnyosun)
24
+ - 🐛 Fix `public_source` in inspect [PR](https://github.com/laminlabs/lamindb/pull/1578) [@sunnyosun](https://github.com/sunnyosun)
20
25
 
21
26
  ### 0.70.0 {small}`2024-04-17`
22
27
 
@@ -0,0 +1,157 @@
1
+ {
2
+ "cells": [
3
+ {
4
+ "cell_type": "markdown",
5
+ "metadata": {},
6
+ "source": [
7
+ "# Vitessce integration"
8
+ ]
9
+ },
10
+ {
11
+ "cell_type": "markdown",
12
+ "metadata": {},
13
+ "source": [
14
+ "For more comprehensive integration tests, see: https://github.com/laminlabs/lamin-spatial"
15
+ ]
16
+ },
17
+ {
18
+ "cell_type": "code",
19
+ "execution_count": null,
20
+ "metadata": {},
21
+ "outputs": [],
22
+ "source": [
23
+ "import pytest\n",
24
+ "import lamindb as ln\n",
25
+ "\n",
26
+ "INSTANCE_NAME = \"test-vitessce\"\n",
27
+ "ln.setup.init(storage=f\"s3://lamindb-ci/{INSTANCE_NAME}\")"
28
+ ]
29
+ },
30
+ {
31
+ "cell_type": "code",
32
+ "execution_count": null,
33
+ "metadata": {},
34
+ "outputs": [],
35
+ "source": [
36
+ "pbmc68k = ln.core.datasets.anndata_pbmc68k_reduced()"
37
+ ]
38
+ },
39
+ {
40
+ "cell_type": "code",
41
+ "execution_count": null,
42
+ "metadata": {},
43
+ "outputs": [],
44
+ "source": [
45
+ "pbmc68k = pbmc68k[:100, :200].copy()"
46
+ ]
47
+ },
48
+ {
49
+ "cell_type": "code",
50
+ "execution_count": null,
51
+ "metadata": {},
52
+ "outputs": [],
53
+ "source": [
54
+ "zarr_filepath = \"my_test.zarr\"\n",
55
+ "pbmc68k.write_zarr(zarr_filepath)"
56
+ ]
57
+ },
58
+ {
59
+ "cell_type": "code",
60
+ "execution_count": null,
61
+ "metadata": {},
62
+ "outputs": [],
63
+ "source": [
64
+ "zarr_artifact = ln.Artifact(zarr_filepath, description=\"Test dataset\")\n",
65
+ "zarr_artifact.save()"
66
+ ]
67
+ },
68
+ {
69
+ "cell_type": "code",
70
+ "execution_count": null,
71
+ "metadata": {},
72
+ "outputs": [],
73
+ "source": [
74
+ "from vitessce import (\n",
75
+ " VitessceConfig,\n",
76
+ " Component as cm,\n",
77
+ " AnnDataWrapper,\n",
78
+ ")\n",
79
+ "vc = VitessceConfig(\n",
80
+ " schema_version=\"1.0.15\",\n",
81
+ " name=\"Test dataset\",\n",
82
+ " description=\"Test description\",\n",
83
+ ")\n",
84
+ "dataset = vc.add_dataset(name=\"test1\").add_object(\n",
85
+ " AnnDataWrapper(adata_url=zarr_artifact.path.to_url()),\n",
86
+ ")\n",
87
+ "obs_sets = vc.add_view(cm.OBS_SETS, dataset=dataset)\n",
88
+ "obs_sets_sizes = vc.add_view(cm.OBS_SET_SIZES, dataset=dataset)\n",
89
+ "scatterplot = vc.add_view(cm.SCATTERPLOT, dataset=dataset, mapping=\"UMAP\")\n",
90
+ "heatmap = vc.add_view(cm.HEATMAP, dataset=dataset)\n",
91
+ "genes = vc.add_view(cm.FEATURE_LIST, dataset=dataset)\n",
92
+ "vc.layout(((scatterplot | obs_sets) / heatmap) | (obs_sets_sizes / genes))\n",
93
+ "\n",
94
+ "# inspect the config\n",
95
+ "vc.to_dict()"
96
+ ]
97
+ },
98
+ {
99
+ "cell_type": "code",
100
+ "execution_count": null,
101
+ "metadata": {},
102
+ "outputs": [],
103
+ "source": [
104
+ "from lamindb.integrations import save_vitessce_config"
105
+ ]
106
+ },
107
+ {
108
+ "cell_type": "code",
109
+ "execution_count": null,
110
+ "metadata": {},
111
+ "outputs": [],
112
+ "source": [
113
+ "vc_artifact = save_vitessce_config(vc, description=\"View Habib17 in Vitessce\")"
114
+ ]
115
+ },
116
+ {
117
+ "cell_type": "code",
118
+ "execution_count": null,
119
+ "metadata": {},
120
+ "outputs": [],
121
+ "source": [
122
+ "zarr_artifact.delete(permanent=True)\n",
123
+ "vc_artifact.delete(permanent=True)"
124
+ ]
125
+ },
126
+ {
127
+ "cell_type": "code",
128
+ "execution_count": null,
129
+ "metadata": {},
130
+ "outputs": [],
131
+ "source": [
132
+ "!lamin delete --force test-vitessce"
133
+ ]
134
+ }
135
+ ],
136
+ "metadata": {
137
+ "kernelspec": {
138
+ "display_name": "py310",
139
+ "language": "python",
140
+ "name": "python3"
141
+ },
142
+ "language_info": {
143
+ "codemirror_mode": {
144
+ "name": "ipython",
145
+ "version": 3
146
+ },
147
+ "file_extension": ".py",
148
+ "mimetype": "text/x-python",
149
+ "name": "python",
150
+ "nbconvert_exporter": "python",
151
+ "pygments_lexer": "ipython3",
152
+ "version": "3.10.13"
153
+ }
154
+ },
155
+ "nbformat": 4,
156
+ "nbformat_minor": 2
157
+ }
@@ -8,4 +8,5 @@ storage/add-replace-stage
8
8
  storage/anndata-accessor
9
9
  storage/prepare-transfer-local-to-cloud
10
10
  storage/transfer-local-to-cloud
11
+ storage/vitessce
11
12
  ```
@@ -40,7 +40,7 @@ Modules & settings:
40
40
 
41
41
  """
42
42
 
43
- __version__ = "0.70.1" # denote a release candidate for 0.1.0 with 0.1rc1
43
+ __version__ = "0.70.2" # denote a release candidate for 0.1.0 with 0.1rc1
44
44
 
45
45
  import os as _os
46
46
 
@@ -351,7 +351,7 @@ class AnnDataAnnotator(DataFrameAnnotator):
351
351
  self,
352
352
  adata: ad.AnnData,
353
353
  var_index: FieldAttr,
354
- categoricals: dict[str, FieldAttr],
354
+ categoricals: dict[str, FieldAttr] | None = None,
355
355
  using: str = "default",
356
356
  verbosity: str = "hint",
357
357
  organism: str | None = None,
@@ -494,7 +494,7 @@ class MuDataAnnotator:
494
494
  self,
495
495
  mdata: MuData,
496
496
  var_index: dict[str, dict[str, FieldAttr]],
497
- categoricals: dict[str, FieldAttr],
497
+ categoricals: dict[str, FieldAttr] | None = None,
498
498
  using: str = "default",
499
499
  verbosity: str = "hint",
500
500
  organism: str | None = None,
@@ -751,7 +751,7 @@ class Annotate:
751
751
  cls,
752
752
  adata: ad.AnnData,
753
753
  var_index: FieldAttr,
754
- categoricals: dict[str, FieldAttr],
754
+ categoricals: dict[str, FieldAttr] | None = None,
755
755
  using: str = "default",
756
756
  verbosity: str = "hint",
757
757
  organism: str | None = None,
@@ -772,7 +772,7 @@ class Annotate:
772
772
  cls,
773
773
  mdata: MuData,
774
774
  var_index: dict[str, dict[str, FieldAttr]],
775
- categoricals: dict[str, dict[str, FieldAttr]],
775
+ categoricals: dict[str, FieldAttr] | None = None,
776
776
  using: str = "default",
777
777
  verbosity: str = "hint",
778
778
  organism: str | None = None,
@@ -20,37 +20,40 @@ if TYPE_CHECKING:
20
20
  from ._query_set import QuerySet
21
21
 
22
22
 
23
- class CallFinishInLastCell(SystemExit):
23
+ class TrackNotCalled(SystemExit):
24
24
  pass
25
25
 
26
26
 
27
- def finish(i_saved_the_notebook: bool = False):
28
- """Mark a tracked run as finished.
27
+ class NotebookNotSaved(SystemExit):
28
+ pass
29
29
 
30
- When run in notebooks, save the run report to your default storage location.
31
30
 
32
- Args:
33
- i_saved_the_notebook: Indicate that you saved the notebook in your
34
- editor (JupyterLab, VSCode, etc.).
35
- """
36
- if is_run_from_ipython:
37
- # notebooks
38
- from nbproject.dev import read_notebook
39
- from nbproject.dev._check_last_cell import check_last_cell
31
+ def get_seconds_since_modified(filepath) -> float:
32
+ return datetime.now().timestamp() - filepath.stat().st_mtime
40
33
 
41
- if not i_saved_the_notebook and not ln_setup._TESTING:
42
- logger.error(
43
- "Please pass `i_saved_the_notebook=True` to `ln.finish()`, save the notebook, and re-run this cell."
34
+
35
+ def finish():
36
+ """Mark a tracked run as finished.
37
+
38
+ If run in a notebook, it saves the run report & source code to your default storage location.
39
+ """
40
+ if run_context.path is None:
41
+ raise TrackNotCalled("Please run `ln.track()` before `ln.finish()`")
42
+ if is_run_from_ipython: # notebooks
43
+ if (
44
+ get_seconds_since_modified(run_context.path) > 3
45
+ and os.getenv("LAMIN_TESTING") is None
46
+ ):
47
+ raise NotebookNotSaved(
48
+ "Please save the notebook in your editor right before running `ln.finish()`"
44
49
  )
45
- return None
46
50
  save_run_context_core(
47
51
  run=run_context.run,
48
52
  transform=run_context.transform,
49
53
  filepath=run_context.path,
50
54
  finished_at=True,
51
55
  )
52
- else:
53
- # scripts
56
+ else: # scripts
54
57
  # save_run_context_core was already called during ln.track()
55
58
  run_context.run.finished_at = datetime.now(timezone.utc) # update run time
56
59
  run_context.run.save()
@@ -98,7 +101,7 @@ def save_run_context_core(
98
101
  # log_level is set to 40 to silence the nbconvert logging
99
102
  subprocess.run(
100
103
  "jupyter nbconvert --to html"
101
- f" {filepath.as_posix()} --Application.log_level=40",
104
+ f" '{filepath.as_posix()}' --Application.log_level=40",
102
105
  shell=True,
103
106
  check=True,
104
107
  )
@@ -118,7 +121,7 @@ def save_run_context_core(
118
121
  # first, copy the notebook file to a temporary file in the cache
119
122
  source_code_path = ln_setup.settings.storage.cache_dir / filepath.name
120
123
  shutil.copy2(filepath, source_code_path) # copy
121
- subprocess.run(f"nbstripout {source_code_path}", shell=True, check=True)
124
+ subprocess.run(f"nbstripout '{source_code_path}'", shell=True, check=True)
122
125
  # find initial versions of source codes and html reports
123
126
  prev_report = None
124
127
  prev_source = None
@@ -139,9 +142,8 @@ def save_run_context_core(
139
142
  if os.getenv("LAMIN_TESTING") is None:
140
143
  # in test, auto-confirm overwrite
141
144
  response = input(
142
- "You try to save a new notebook source code with the same version"
143
- f" '{transform.version}'; do you want to replace the content of the"
144
- f" existing source code {transform.source_code}? (y/n)"
145
+ f"You are about to overwrite existing source code (hash {transform.source_code.hash}) for transform version"
146
+ f" '{transform.version}'. Proceed? (y/n)"
145
147
  )
146
148
  else:
147
149
  response = "y"
@@ -149,10 +151,7 @@ def save_run_context_core(
149
151
  transform.source_code.replace(source_code_path)
150
152
  transform.source_code.save()
151
153
  else:
152
- logger.warning(
153
- "Please create a new version of the notebook via `lamin track"
154
- " <filepath>` and re-run the notebook"
155
- )
154
+ logger.warning("Please re-run `ln.track()` to make a new version")
156
155
  return "rerun-the-notebook"
157
156
  else:
158
157
  source_code = ln.Artifact(
@@ -207,8 +206,11 @@ def save_run_context_core(
207
206
  transform.save()
208
207
  if transform.type == TransformType.notebook:
209
208
  logger.success(f"saved transform.latest_report: {transform.latest_report}")
210
- identifier = ln_setup.settings.instance.slug
211
- logger.success(f"go to: https://lamin.ai/{identifier}/transform/{transform.uid}")
209
+ if ln_setup.settings.instance.is_remote:
210
+ identifier = ln_setup.settings.instance.slug
211
+ logger.success(
212
+ f"go to: https://lamin.ai/{identifier}/transform/{transform.uid}"
213
+ )
212
214
  # because run & transform changed, update the global run_context
213
215
  run_context.run = run
214
216
  run_context.transform = transform
@@ -10,5 +10,6 @@ from lamindb_setup.core.upath import LocalPathClasses, UPath, infer_filesystem
10
10
 
11
11
  from ._anndata_sizes import size_adata
12
12
  from ._backed_access import AnnDataAccessor, BackedAccessor
13
+ from ._valid_suffixes import VALID_SUFFIXES
13
14
  from .objects import infer_suffix, write_to_file
14
15
  from .paths import delete_storage, load_to_memory
@@ -733,7 +733,7 @@ class BackedAccessor:
733
733
 
734
734
 
735
735
  def backed_access(
736
- artifact_or_filepath: Artifact | Path, using_key: str | None
736
+ artifact_or_filepath: Artifact | Path, using_key: str | None = None
737
737
  ) -> AnnDataAccessor | BackedAccessor:
738
738
  if isinstance(artifact_or_filepath, Artifact):
739
739
  filepath = filepath_from_artifact(artifact_or_filepath, using_key=using_key)
@@ -747,11 +747,11 @@ def backed_access(
747
747
  conn, storage = registry.open("zarr", filepath)
748
748
  else:
749
749
  raise ValueError(
750
- "file should have .h5, .hdf5, .h5ad, .zarr suffix, not"
750
+ "object should have .h5, .hdf5, .h5ad, .zarr suffix, not"
751
751
  f" {filepath.suffix}."
752
752
  )
753
753
 
754
- if filepath.suffix in (".h5ad", ".zarr"):
754
+ if filepath.suffix == ".h5ad":
755
755
  return AnnDataAccessor(conn, storage, name)
756
756
  else:
757
757
  if get_spec(storage).encoding_type == "anndata":
@@ -0,0 +1,3 @@
1
+ from lamindb_setup.core.upath import VALID_SUFFIXES
2
+
3
+ VALID_SUFFIXES.update({".vitessce.json", ".anndata.zarr", ".spatialdata.zarr"})
@@ -0,0 +1,70 @@
1
+ from __future__ import annotations
2
+
3
+ import json
4
+ from datetime import datetime, timezone
5
+ from typing import TYPE_CHECKING
6
+
7
+ import lamindb_setup as ln_setup
8
+ from lamin_utils import logger
9
+
10
+ from lamindb._artifact import Artifact
11
+ from lamindb._run import Run
12
+ from lamindb._transform import Transform
13
+
14
+ if TYPE_CHECKING:
15
+ from vitessce import VitessceConfig
16
+
17
+
18
+ # tested & context in https://github.com/laminlabs/lamin-spatial
19
+ def save_vitessce_config(vitessce_config: VitessceConfig, description: str) -> Artifact:
20
+ """Validates and saves a ``VitessceConfig`` object.
21
+
22
+ Example: :doc:`docs:vitessce`.
23
+
24
+ Args:
25
+ vitessce_config (``VitessceConfig``): A VitessceConfig object.
26
+ description: A description for the artifact.
27
+
28
+ .. versionchanged:: 0.70.2
29
+ This function no longer saves the dataset. It only saves the VitessceConfig object.
30
+ """
31
+ vc_dict = vitessce_config.to_dict()
32
+ # validate
33
+ datasets = vc_dict["datasets"]
34
+ input_artifacts = []
35
+ for dataset in datasets:
36
+ if "files" not in dataset:
37
+ raise ValueError("Each dataset must have a 'files' key.")
38
+ for file in dataset["files"]:
39
+ if "url" not in file:
40
+ raise ValueError("Each file must have a 'url' key.")
41
+ filename = file["url"].split("/")[-1]
42
+ assert filename.endswith((".anndata.zarr", ".spatialdata.zarr", ".zarr"))
43
+ filestem = (
44
+ filename.replace(".anndata.zarr", "")
45
+ .replace(".spatialdata.zarr", "")
46
+ .replace(".zarr", "")
47
+ )
48
+ artifact = Artifact.filter(uid__startswith=filestem).one_or_none()
49
+ if artifact is None:
50
+ logger.warning(f"could not find dataset in lamindb: {dataset}")
51
+ else:
52
+ input_artifacts.append(artifact)
53
+ # link inputs
54
+ with logger.mute():
55
+ transform = Transform(name="save_vitessce_config", type="function", version="1")
56
+ transform.save()
57
+ run = Run(transform=transform)
58
+ run.save()
59
+ run.input_artifacts.set(input_artifacts)
60
+ # create a JSON export
61
+ config_file_local_path = (
62
+ ln_setup.settings.storage.cache_dir / "config.vitessce.json"
63
+ )
64
+ with open(config_file_local_path, "w") as file:
65
+ json.dump(vc_dict, file)
66
+ artifact = Artifact(config_file_local_path, description=description, run=run)
67
+ artifact.save()
68
+ slug = ln_setup.settings.instance.slug
69
+ logger.important(f"go to: https://lamin.ai/{slug}/artifact/{artifact.uid}")
70
+ return artifact
@@ -74,6 +74,7 @@ def install(session, group):
74
74
  session.run(
75
75
  *"uv pip install --system --no-deps git+https://github.com/laminlabs/wetlab".split()
76
76
  )
77
+ session.run(*"uv pip install --system vitessce".split())
77
78
  elif group == "docs":
78
79
  extras += "bionty"
79
80
  session.run(*"uv pip install --system mudata".split())
@@ -17,8 +17,8 @@ classifiers = [
17
17
  dependencies = [
18
18
  # Lamin PINNED packages
19
19
  "lnschema_core==0.65.1",
20
- "lamindb_setup==0.69.2",
21
- "lamin_utils==0.13.1",
20
+ "lamindb_setup==0.69.4",
21
+ "lamin_utils==0.13.2",
22
22
  "lamin_cli==0.12.3",
23
23
  # others
24
24
  "rapidfuzz",
@@ -3,6 +3,8 @@
3
3
  <!-- prettier-ignore -->
4
4
  Name | PR | Developer | Date | Version
5
5
  --- | --- | --- | --- | ---
6
+ ♻️ Do not always read from local cache | [720](https://github.com/laminlabs/lamindb-setup/pull/720) | [falexwolf](https://github.com/falexwolf) | 2024-04-19 | 0.69.4
7
+ ♻️ Improve suffix handling | [718](https://github.com/laminlabs/lamindb-setup/pull/718) | [falexwolf](https://github.com/falexwolf) | 2024-04-19 | 0.69.3
6
8
  ✨ Enable hybrid storage mode | [717](https://github.com/laminlabs/lamindb-setup/pull/717) | [falexwolf](https://github.com/falexwolf) | 2024-04-16 | 0.69.1
7
9
  🚸 Better migrations warning | [716](https://github.com/laminlabs/lamindb-setup/pull/716) | [falexwolf](https://github.com/falexwolf) | 2024-04-16 |
8
10
  🚸 Refresh token also upon access-aws | [715](https://github.com/laminlabs/lamindb-setup/pull/715) | [falexwolf](https://github.com/falexwolf) | 2024-04-15 |
@@ -36,7 +36,7 @@ Modules & settings:
36
36
 
37
37
  """
38
38
 
39
- __version__ = "0.69.2" # denote a release candidate for 0.1.0 with 0.1rc1
39
+ __version__ = "0.69.4" # denote a release candidate for 0.1.0 with 0.1rc1
40
40
 
41
41
  import sys
42
42
  from os import name as _os_name
@@ -50,8 +50,11 @@ def update_db_using_local(
50
50
  if os.getenv("LAMINDB_INSTANCE_DB") is not None:
51
51
  logger.important("loading db URL from env variable LAMINDB_INSTANCE_DB")
52
52
  db_dsn_local = LaminDsnModel(db=os.getenv("LAMINDB_INSTANCE_DB"))
53
- # read from a cached settings file
54
- elif settings_file.exists():
53
+ # read from a cached settings file in case the hub result is only
54
+ # read level or inexistent
55
+ elif settings_file.exists() and (
56
+ "read" in db_dsn_hub.db.user or db_dsn_hub.db.user is None
57
+ ):
55
58
  isettings = load_instance_settings(settings_file)
56
59
  db_dsn_local = LaminDsnModel(db=isettings.db)
57
60
  else:
@@ -21,7 +21,8 @@ LocalPathClasses = (PosixUPath, WindowsUPath, LocalPath)
21
21
 
22
22
  # also see https://gist.github.com/securifera/e7eed730cbe1ce43d0c29d7cd2d582f4
23
23
  # ".gz" is not listed here as it typically occurs with another suffix
24
- KNOWN_SUFFIXES = {
24
+ # the complete list is at lamindb.core.storage._suffixes
25
+ VALID_SUFFIXES = {
25
26
  #
26
27
  # without readers
27
28
  #
@@ -47,7 +48,7 @@ KNOWN_SUFFIXES = {
47
48
  ".fcs",
48
49
  ".xslx",
49
50
  ".zarr",
50
- ".zrad",
51
+ ".json",
51
52
  }
52
53
 
53
54
 
@@ -56,13 +57,17 @@ TRAILING_SEP = (os.sep, os.altsep) if os.altsep is not None else os.sep
56
57
 
57
58
  def extract_suffix_from_path(path: Path, arg_name: Optional[str] = None) -> str:
58
59
  def process_digits(suffix: str):
59
- if suffix[1:].isdigit():
60
+ if suffix[1:].isdigit(): # :1 to skip the dot
60
61
  return "" # digits are no valid suffixes
61
62
  else:
62
63
  return suffix
63
64
 
64
65
  if len(path.suffixes) <= 1:
65
66
  return process_digits(path.suffix)
67
+
68
+ total_suffix = "".join(path.suffixes)
69
+ if total_suffix in VALID_SUFFIXES:
70
+ return total_suffix
66
71
  else:
67
72
  print_hint = True
68
73
  arg_name = "file" if arg_name is None else arg_name # for the warning
@@ -73,18 +78,18 @@ def extract_suffix_from_path(path: Path, arg_name: Optional[str] = None) -> str:
73
78
  # in COMPRESSION_SUFFIXES to detect something like .random.gz and then
74
79
  # add ".random.gz" but concluded it's too dangerous it's safer to just
75
80
  # use ".gz" in such a case
76
- if path.suffixes[-2] in KNOWN_SUFFIXES:
81
+ if path.suffixes[-2] in VALID_SUFFIXES:
77
82
  suffix = "".join(path.suffixes[-2:])
78
83
  msg += f"inferring: '{suffix}'"
79
84
  # do not print a warning for things like .tar.gz, .fastq.gz
80
85
  if path.suffixes[-1] == ".gz":
81
86
  print_hint = False
82
87
  else:
83
- suffix = path.suffixes[-1] # this is equivalent to path.suffix!!!
88
+ suffix = path.suffixes[-1] # this is equivalent to path.suffix
84
89
  msg += (
85
- f"using only last suffix: '{suffix}' - if you want your file format to"
86
- " be recognized, make an issue:"
87
- " https://github.com/laminlabs/lamindb/issues/new"
90
+ f"using only last suffix: '{suffix}' - if you want your composite"
91
+ " suffix to be recognized add it to"
92
+ " lamindb.core.storage.VALID_SUFFIXES.add()"
88
93
  )
89
94
  if print_hint:
90
95
  logger.hint(msg)
@@ -116,16 +116,31 @@ def test_load_after_private_public_switch():
116
116
 
117
117
  def test_load_with_db_parameter():
118
118
  if os.getenv("LAMIN_ENV") == "prod":
119
- ln_setup.login("static-testuser1@lamin.ai", key="static-testuser1-password")
119
+ # take a write-level access collaborator
120
+ ln_setup.login("testuser1")
120
121
  # test load from hub
121
122
  ln_setup.connect("laminlabs/lamindata", _test=True)
123
+ assert "root" in ln_setup.settings.instance.db
122
124
  # test load from provided db argument
123
- db = "postgresql://testuser:testpwd@database2.cmyfs24wugc3.us-east-1.rds.amazonaws.com:5432/db1" # noqa
125
+ db = "postgresql://testdbuser:testpwd@database2.cmyfs24wugc3.us-east-1.rds.amazonaws.com:5432/db1" # noqa
124
126
  ln_setup.connect("laminlabs/lamindata", db=db, _test=True)
125
- assert "testuser" in ln_setup.settings.instance.db
126
- # test load from cache (no db arg)
127
+ assert "testdbuser" in ln_setup.settings.instance.db
128
+ # test ignore loading from cache because hub result has >read access
127
129
  ln_setup.connect("laminlabs/lamindata", _test=True)
128
- assert "testuser" in ln_setup.settings.instance.db
130
+ assert "root" in ln_setup.settings.instance.db
131
+
132
+ # now take a user that has no collaborator status
133
+ ln_setup.login("testuser2")
134
+ # the cached high priviledge connection string remains active
135
+ ln_setup.connect("laminlabs/lamindata", _test=True)
136
+ assert "root" in ln_setup.settings.instance.db
137
+ # now pass the connection string
138
+ ln_setup.connect("laminlabs/lamindata", db=db, _test=True)
139
+ assert "testdbuser" in ln_setup.settings.instance.db
140
+ # now the cache is used
141
+ ln_setup.connect("laminlabs/lamindata", _test=True)
142
+ assert "testdbuser" in ln_setup.settings.instance.db
143
+
129
144
  # test corrupted input
130
145
  db_corrupted = "postgresql://testuser:testpwd@wrongserver:5432/db1"
131
146
  with pytest.raises(ValueError) as error:
@@ -133,4 +148,3 @@ def test_load_with_db_parameter():
133
148
  assert error.exconly().startswith(
134
149
  "ValueError: The local differs from the hub database information"
135
150
  )
136
- ln_setup.login("testuser2")
@@ -14,8 +14,7 @@
14
14
  "outputs": [],
15
15
  "source": [
16
16
  "import lamindb as ln\n",
17
- "import pytest\n",
18
- "from lamindb._finish import CallFinishInLastCell"
17
+ "import pytest"
19
18
  ]
20
19
  },
21
20
  {
@@ -44,7 +43,7 @@
44
43
  "metadata": {},
45
44
  "outputs": [],
46
45
  "source": [
47
- "ln.finish(i_saved_the_notebook=True)"
46
+ "ln.finish()"
48
47
  ]
49
48
  },
50
49
  {
@@ -51,7 +51,7 @@
51
51
  "metadata": {},
52
52
  "outputs": [],
53
53
  "source": [
54
- "ln.finish(i_saved_the_notebook=True)"
54
+ "ln.finish()"
55
55
  ]
56
56
  }
57
57
  ],