lamindb 0.55.0__tar.gz → 0.55.1__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {lamindb-0.55.0 → lamindb-0.55.1}/PKG-INFO +5 -5
- {lamindb-0.55.0 → lamindb-0.55.1}/docs/changelog.md +10 -3
- {lamindb-0.55.0 → lamindb-0.55.1}/docs/features-lamindb.md +1 -1
- {lamindb-0.55.0 → lamindb-0.55.1}/docs/introduction.ipynb +15 -1
- {lamindb-0.55.0 → lamindb-0.55.1}/docs/transfer.ipynb +2 -1
- {lamindb-0.55.0 → lamindb-0.55.1}/docs/tutorial.ipynb +4 -3
- {lamindb-0.55.0 → lamindb-0.55.1}/docs/tutorial2.ipynb +4 -3
- {lamindb-0.55.0 → lamindb-0.55.1}/lamindb/__init__.py +1 -1
- {lamindb-0.55.0 → lamindb-0.55.1}/lamindb/_dataset.py +41 -4
- {lamindb-0.55.0 → lamindb-0.55.1}/lamindb/_file.py +2 -2
- {lamindb-0.55.0 → lamindb-0.55.1}/lamindb/_filter.py +2 -9
- {lamindb-0.55.0 → lamindb-0.55.1}/lamindb/_query_manager.py +20 -9
- {lamindb-0.55.0 → lamindb-0.55.1}/lamindb/_registry.py +7 -2
- lamindb-0.55.1/lamindb/_storage.py +18 -0
- {lamindb-0.55.0 → lamindb-0.55.1}/lamindb/_transform.py +7 -0
- {lamindb-0.55.0 → lamindb-0.55.1}/lamindb/dev/_label_manager.py +4 -1
- {lamindb-0.55.0 → lamindb-0.55.1}/pyproject.toml +4 -4
- {lamindb-0.55.0 → lamindb-0.55.1}/sub/lamindb-setup/docs/changelog.md +3 -0
- {lamindb-0.55.0 → lamindb-0.55.1}/sub/lamindb-setup/lamindb_setup/__init__.py +1 -1
- {lamindb-0.55.0 → lamindb-0.55.1}/sub/lamindb-setup/lamindb_setup/_init_instance.py +1 -0
- {lamindb-0.55.0 → lamindb-0.55.1}/sub/lamindb-setup/lamindb_setup/_load_instance.py +11 -20
- {lamindb-0.55.0 → lamindb-0.55.1}/sub/lamindb-setup/lamindb_setup/_notebook.py +16 -10
- {lamindb-0.55.0 → lamindb-0.55.1}/sub/lamindb-setup/pyproject.toml +1 -1
- {lamindb-0.55.0 → lamindb-0.55.1}/sub/lamindb-setup/tests/notebooks/test.py +1 -4
- {lamindb-0.55.0 → lamindb-0.55.1}/sub/lamindb-setup/tests/test_vault.py +18 -22
- {lamindb-0.55.0 → lamindb-0.55.1}/sub/lnschema-core/CHANGELOG.md +1 -0
- {lamindb-0.55.0 → lamindb-0.55.1}/sub/lnschema-core/lnschema_core/__init__.py +1 -1
- lamindb-0.55.1/sub/lnschema-core/lnschema_core/migrations/0021_dataset_storage_alter_dataset_file.py +23 -0
- {lamindb-0.55.0 → lamindb-0.55.1}/sub/lnschema-core/lnschema_core/models.py +49 -1
- {lamindb-0.55.0 → lamindb-0.55.1}/tests/test_dataset.py +18 -0
- {lamindb-0.55.0 → lamindb-0.55.1}/tests/test_file.py +38 -36
- lamindb-0.55.0/lamindb/_storage.py +0 -9
- {lamindb-0.55.0 → lamindb-0.55.1}/.github/workflows/build.yml +0 -0
- {lamindb-0.55.0 → lamindb-0.55.1}/.github/workflows/latest-changes.jinja2 +0 -0
- {lamindb-0.55.0 → lamindb-0.55.1}/.github/workflows/latest-changes.yml +0 -0
- {lamindb-0.55.0 → lamindb-0.55.1}/.gitignore +0 -0
- {lamindb-0.55.0 → lamindb-0.55.1}/.gitmodules +0 -0
- {lamindb-0.55.0 → lamindb-0.55.1}/.pre-commit-config.yaml +0 -0
- {lamindb-0.55.0 → lamindb-0.55.1}/LICENSE +0 -0
- {lamindb-0.55.0 → lamindb-0.55.1}/README.md +0 -0
- {lamindb-0.55.0 → lamindb-0.55.1}/docs/bio-registries.ipynb +0 -0
- {lamindb-0.55.0 → lamindb-0.55.1}/docs/bionty.md +0 -0
- {lamindb-0.55.0 → lamindb-0.55.1}/docs/data.ipynb +0 -0
- {lamindb-0.55.0 → lamindb-0.55.1}/docs/faq/acid.ipynb +0 -0
- {lamindb-0.55.0 → lamindb-0.55.1}/docs/faq/idempotency.ipynb +0 -0
- {lamindb-0.55.0 → lamindb-0.55.1}/docs/faq/import-schema.ipynb +0 -0
- {lamindb-0.55.0 → lamindb-0.55.1}/docs/faq/notebooks.ipynb +0 -0
- {lamindb-0.55.0 → lamindb-0.55.1}/docs/faq/reference-field.ipynb +0 -0
- {lamindb-0.55.0 → lamindb-0.55.1}/docs/faq/setup.ipynb +0 -0
- {lamindb-0.55.0 → lamindb-0.55.1}/docs/faq/test_notebooks.py +0 -0
- {lamindb-0.55.0 → lamindb-0.55.1}/docs/faq/track-run-inputs.ipynb +0 -0
- {lamindb-0.55.0 → lamindb-0.55.1}/docs/faq.md +0 -0
- {lamindb-0.55.0 → lamindb-0.55.1}/docs/features-laminhub.md +0 -0
- {lamindb-0.55.0 → lamindb-0.55.1}/docs/guide.md +0 -0
- {lamindb-0.55.0 → lamindb-0.55.1}/docs/index.md +0 -0
- {lamindb-0.55.0 → lamindb-0.55.1}/docs/installation.md +0 -0
- {lamindb-0.55.0 → lamindb-0.55.1}/docs/lamin-utils.md +0 -0
- {lamindb-0.55.0 → lamindb-0.55.1}/docs/lamindb.md +0 -0
- {lamindb-0.55.0 → lamindb-0.55.1}/docs/lnschema-bionty.md +0 -0
- {lamindb-0.55.0 → lamindb-0.55.1}/docs/meta.ipynb +0 -0
- {lamindb-0.55.0 → lamindb-0.55.1}/docs/nbproject.md +0 -0
- {lamindb-0.55.0 → lamindb-0.55.1}/docs/query-search.md +0 -0
- {lamindb-0.55.0 → lamindb-0.55.1}/docs/readfcs.md +0 -0
- {lamindb-0.55.0 → lamindb-0.55.1}/docs/reference.md +0 -0
- {lamindb-0.55.0 → lamindb-0.55.1}/docs/schemas.ipynb +0 -0
- {lamindb-0.55.0 → lamindb-0.55.1}/docs/setup.ipynb +0 -0
- {lamindb-0.55.0 → lamindb-0.55.1}/docs/signup-login.md +0 -0
- {lamindb-0.55.0 → lamindb-0.55.1}/docs/storage/add-replace-stage.ipynb +0 -0
- {lamindb-0.55.0 → lamindb-0.55.1}/docs/storage/anndata-accessor.ipynb +0 -0
- {lamindb-0.55.0 → lamindb-0.55.1}/docs/storage/test-files/iris.csv +0 -0
- {lamindb-0.55.0 → lamindb-0.55.1}/docs/storage/test-files/iris.data +0 -0
- {lamindb-0.55.0 → lamindb-0.55.1}/docs/storage/test-files/new_iris.csv +0 -0
- {lamindb-0.55.0 → lamindb-0.55.1}/docs/storage/test_notebooks.py +0 -0
- {lamindb-0.55.0 → lamindb-0.55.1}/docs/storage/upload.ipynb +0 -0
- {lamindb-0.55.0 → lamindb-0.55.1}/docs/storage.md +0 -0
- {lamindb-0.55.0 → lamindb-0.55.1}/docs/test_notebooks.py +0 -0
- {lamindb-0.55.0 → lamindb-0.55.1}/docs/validate.ipynb +0 -0
- {lamindb-0.55.0 → lamindb-0.55.1}/lamindb/_delete.py +0 -0
- {lamindb-0.55.0 → lamindb-0.55.1}/lamindb/_feature.py +0 -0
- {lamindb-0.55.0 → lamindb-0.55.1}/lamindb/_feature_set.py +0 -0
- {lamindb-0.55.0 → lamindb-0.55.1}/lamindb/_from_values.py +0 -0
- {lamindb-0.55.0 → lamindb-0.55.1}/lamindb/_parents.py +0 -0
- {lamindb-0.55.0 → lamindb-0.55.1}/lamindb/_query_set.py +0 -0
- {lamindb-0.55.0 → lamindb-0.55.1}/lamindb/_run.py +0 -0
- {lamindb-0.55.0 → lamindb-0.55.1}/lamindb/_save.py +0 -0
- {lamindb-0.55.0 → lamindb-0.55.1}/lamindb/_ulabel.py +0 -0
- {lamindb-0.55.0 → lamindb-0.55.1}/lamindb/_utils.py +0 -0
- {lamindb-0.55.0 → lamindb-0.55.1}/lamindb/_validate.py +0 -0
- {lamindb-0.55.0 → lamindb-0.55.1}/lamindb/_view.py +0 -0
- {lamindb-0.55.0 → lamindb-0.55.1}/lamindb/dev/__init__.py +0 -0
- {lamindb-0.55.0 → lamindb-0.55.1}/lamindb/dev/_data.py +0 -0
- {lamindb-0.55.0 → lamindb-0.55.1}/lamindb/dev/_feature_manager.py +0 -0
- {lamindb-0.55.0 → lamindb-0.55.1}/lamindb/dev/_priors.py +0 -0
- {lamindb-0.55.0 → lamindb-0.55.1}/lamindb/dev/_run_context.py +0 -0
- {lamindb-0.55.0 → lamindb-0.55.1}/lamindb/dev/_settings.py +0 -0
- {lamindb-0.55.0 → lamindb-0.55.1}/lamindb/dev/datasets/__init__.py +0 -0
- {lamindb-0.55.0 → lamindb-0.55.1}/lamindb/dev/datasets/_core.py +0 -0
- {lamindb-0.55.0 → lamindb-0.55.1}/lamindb/dev/datasets/_fake.py +0 -0
- {lamindb-0.55.0 → lamindb-0.55.1}/lamindb/dev/exceptions.py +0 -0
- {lamindb-0.55.0 → lamindb-0.55.1}/lamindb/dev/fields.py +0 -0
- {lamindb-0.55.0 → lamindb-0.55.1}/lamindb/dev/hashing.py +0 -0
- {lamindb-0.55.0 → lamindb-0.55.1}/lamindb/dev/storage/__init__.py +0 -0
- {lamindb-0.55.0 → lamindb-0.55.1}/lamindb/dev/storage/_anndata_sizes.py +0 -0
- {lamindb-0.55.0 → lamindb-0.55.1}/lamindb/dev/storage/_backed_access.py +0 -0
- {lamindb-0.55.0 → lamindb-0.55.1}/lamindb/dev/storage/_zarr.py +0 -0
- {lamindb-0.55.0 → lamindb-0.55.1}/lamindb/dev/storage/file.py +0 -0
- {lamindb-0.55.0 → lamindb-0.55.1}/lamindb/dev/storage/object.py +0 -0
- {lamindb-0.55.0 → lamindb-0.55.1}/lamindb/dev/types.py +0 -0
- {lamindb-0.55.0 → lamindb-0.55.1}/lamindb/dev/versioning.py +0 -0
- {lamindb-0.55.0 → lamindb-0.55.1}/lamindb/setup/__init__.py +0 -0
- {lamindb-0.55.0 → lamindb-0.55.1}/lamindb/setup/dev/__init__.py +0 -0
- {lamindb-0.55.0 → lamindb-0.55.1}/noxfile.py +0 -0
- {lamindb-0.55.0 → lamindb-0.55.1}/sub/lamindb-setup/.github/workflows/build.yml +0 -0
- {lamindb-0.55.0 → lamindb-0.55.1}/sub/lamindb-setup/.github/workflows/latest-changes.jinja2 +0 -0
- {lamindb-0.55.0 → lamindb-0.55.1}/sub/lamindb-setup/.github/workflows/latest-changes.yml +0 -0
- {lamindb-0.55.0 → lamindb-0.55.1}/sub/lamindb-setup/.gitignore +0 -0
- {lamindb-0.55.0 → lamindb-0.55.1}/sub/lamindb-setup/.pre-commit-config.yaml +0 -0
- {lamindb-0.55.0 → lamindb-0.55.1}/sub/lamindb-setup/LICENSE +0 -0
- {lamindb-0.55.0 → lamindb-0.55.1}/sub/lamindb-setup/README.md +0 -0
- {lamindb-0.55.0 → lamindb-0.55.1}/sub/lamindb-setup/docs/index.md +0 -0
- {lamindb-0.55.0 → lamindb-0.55.1}/sub/lamindb-setup/docs/notebooks.md +0 -0
- {lamindb-0.55.0 → lamindb-0.55.1}/sub/lamindb-setup/docs/prod-only/test-empty-init.ipynb +0 -0
- {lamindb-0.55.0 → lamindb-0.55.1}/sub/lamindb-setup/docs/prod-only/test-import-schema.ipynb +0 -0
- {lamindb-0.55.0 → lamindb-0.55.1}/sub/lamindb-setup/docs/prod-only/test-insufficient-user-info.ipynb +0 -0
- {lamindb-0.55.0 → lamindb-0.55.1}/sub/lamindb-setup/docs/prod-only/test-load-lock.ipynb +0 -0
- {lamindb-0.55.0 → lamindb-0.55.1}/sub/lamindb-setup/docs/prod-only/test-sqlite-sync.ipynb +0 -0
- {lamindb-0.55.0 → lamindb-0.55.1}/sub/lamindb-setup/docs/prod-only/test_notebooks2.py +0 -0
- {lamindb-0.55.0 → lamindb-0.55.1}/sub/lamindb-setup/docs/prod-staging/01-init-instance.ipynb +0 -0
- {lamindb-0.55.0 → lamindb-0.55.1}/sub/lamindb-setup/docs/prod-staging/02-load-instance.ipynb +0 -0
- {lamindb-0.55.0 → lamindb-0.55.1}/sub/lamindb-setup/docs/prod-staging/03-set-storage.ipynb +0 -0
- {lamindb-0.55.0 → lamindb-0.55.1}/sub/lamindb-setup/docs/prod-staging/04-test-bionty.ipynb +0 -0
- {lamindb-0.55.0 → lamindb-0.55.1}/sub/lamindb-setup/docs/prod-staging/test-multi-session.ipynb +0 -0
- {lamindb-0.55.0 → lamindb-0.55.1}/sub/lamindb-setup/docs/prod-staging/test_notebooks.py +0 -0
- {lamindb-0.55.0 → lamindb-0.55.1}/sub/lamindb-setup/docs/reference.md +0 -0
- {lamindb-0.55.0 → lamindb-0.55.1}/sub/lamindb-setup/lamindb_setup/__main__.py +0 -0
- {lamindb-0.55.0 → lamindb-0.55.1}/sub/lamindb-setup/lamindb_setup/_check_instance_setup.py +0 -0
- {lamindb-0.55.0 → lamindb-0.55.1}/sub/lamindb-setup/lamindb_setup/_close.py +0 -0
- {lamindb-0.55.0 → lamindb-0.55.1}/sub/lamindb-setup/lamindb_setup/_delete.py +0 -0
- {lamindb-0.55.0 → lamindb-0.55.1}/sub/lamindb-setup/lamindb_setup/_deploy_server.py +0 -0
- {lamindb-0.55.0 → lamindb-0.55.1}/sub/lamindb-setup/lamindb_setup/_docstrings.py +0 -0
- {lamindb-0.55.0 → lamindb-0.55.1}/sub/lamindb-setup/lamindb_setup/_info.py +0 -0
- {lamindb-0.55.0 → lamindb-0.55.1}/sub/lamindb-setup/lamindb_setup/_init_vault.py +0 -0
- {lamindb-0.55.0 → lamindb-0.55.1}/sub/lamindb-setup/lamindb_setup/_migrate.py +0 -0
- {lamindb-0.55.0 → lamindb-0.55.1}/sub/lamindb-setup/lamindb_setup/_register_instance.py +0 -0
- {lamindb-0.55.0 → lamindb-0.55.1}/sub/lamindb-setup/lamindb_setup/_schema.py +0 -0
- {lamindb-0.55.0 → lamindb-0.55.1}/sub/lamindb-setup/lamindb_setup/_set.py +0 -0
- {lamindb-0.55.0 → lamindb-0.55.1}/sub/lamindb-setup/lamindb_setup/_settings.py +0 -0
- {lamindb-0.55.0 → lamindb-0.55.1}/sub/lamindb-setup/lamindb_setup/_setup_user.py +0 -0
- {lamindb-0.55.0 → lamindb-0.55.1}/sub/lamindb-setup/lamindb_setup/_silence_loggers.py +0 -0
- {lamindb-0.55.0 → lamindb-0.55.1}/sub/lamindb-setup/lamindb_setup/dev/__init__.py +0 -0
- {lamindb-0.55.0 → lamindb-0.55.1}/sub/lamindb-setup/lamindb_setup/dev/_deprecated.py +0 -0
- {lamindb-0.55.0 → lamindb-0.55.1}/sub/lamindb-setup/lamindb_setup/dev/_docs.py +0 -0
- {lamindb-0.55.0 → lamindb-0.55.1}/sub/lamindb-setup/lamindb_setup/dev/_hub_client.py +0 -0
- {lamindb-0.55.0 → lamindb-0.55.1}/sub/lamindb-setup/lamindb_setup/dev/_hub_core.py +0 -0
- {lamindb-0.55.0 → lamindb-0.55.1}/sub/lamindb-setup/lamindb_setup/dev/_hub_crud.py +0 -0
- {lamindb-0.55.0 → lamindb-0.55.1}/sub/lamindb-setup/lamindb_setup/dev/_hub_utils.py +0 -0
- {lamindb-0.55.0 → lamindb-0.55.1}/sub/lamindb-setup/lamindb_setup/dev/_settings_instance.py +0 -0
- {lamindb-0.55.0 → lamindb-0.55.1}/sub/lamindb-setup/lamindb_setup/dev/_settings_load.py +0 -0
- {lamindb-0.55.0 → lamindb-0.55.1}/sub/lamindb-setup/lamindb_setup/dev/_settings_save.py +0 -0
- {lamindb-0.55.0 → lamindb-0.55.1}/sub/lamindb-setup/lamindb_setup/dev/_settings_storage.py +0 -0
- {lamindb-0.55.0 → lamindb-0.55.1}/sub/lamindb-setup/lamindb_setup/dev/_settings_store.py +0 -0
- {lamindb-0.55.0 → lamindb-0.55.1}/sub/lamindb-setup/lamindb_setup/dev/_settings_user.py +0 -0
- {lamindb-0.55.0 → lamindb-0.55.1}/sub/lamindb-setup/lamindb_setup/dev/_setup_bionty_sources.py +0 -0
- {lamindb-0.55.0 → lamindb-0.55.1}/sub/lamindb-setup/lamindb_setup/dev/cloud_sqlite_locker.py +0 -0
- {lamindb-0.55.0 → lamindb-0.55.1}/sub/lamindb-setup/lamindb_setup/dev/django.py +0 -0
- {lamindb-0.55.0 → lamindb-0.55.1}/sub/lamindb-setup/lamindb_setup/dev/upath.py +0 -0
- {lamindb-0.55.0 → lamindb-0.55.1}/sub/lamindb-setup/noxfile.py +0 -0
- {lamindb-0.55.0 → lamindb-0.55.1}/sub/lamindb-setup/tests/hub-local/conftest.py +0 -0
- {lamindb-0.55.0 → lamindb-0.55.1}/sub/lamindb-setup/tests/hub-local/test_all.py +0 -0
- {lamindb-0.55.0 → lamindb-0.55.1}/sub/lamindb-setup/tests/notebooks/conftest.py +0 -0
- {lamindb-0.55.0 → lamindb-0.55.1}/sub/lamindb-setup/tests/notebooks/test-notebooks/no-title.ipynb +0 -0
- {lamindb-0.55.0 → lamindb-0.55.1}/sub/lamindb-setup/tests/notebooks/test-notebooks/not-initialized.ipynb +0 -0
- {lamindb-0.55.0 → lamindb-0.55.1}/sub/lamindb-setup/tests/notebooks/test-notebooks/with-title-and-initialized-consecutive.ipynb +0 -0
- {lamindb-0.55.0 → lamindb-0.55.1}/sub/lamindb-setup/tests/notebooks/test-notebooks/with-title-and-initialized-non-consecutive.ipynb +0 -0
- {lamindb-0.55.0 → lamindb-0.55.1}/sub/lamindb-setup/tests/prod-only/conftest.py +0 -0
- {lamindb-0.55.0 → lamindb-0.55.1}/sub/lamindb-setup/tests/prod-only/test_cli.py +0 -0
- {lamindb-0.55.0 → lamindb-0.55.1}/sub/lamindb-setup/tests/prod-only/test_django.py +0 -0
- {lamindb-0.55.0 → lamindb-0.55.1}/sub/lamindb-setup/tests/prod-only/test_switch_and_fallback_env.py +0 -0
- {lamindb-0.55.0 → lamindb-0.55.1}/sub/lamindb-setup/tests/prod-staging/test_delete_instance.py +0 -0
- {lamindb-0.55.0 → lamindb-0.55.1}/sub/lamindb-setup/tests/prod-staging/test_init_instance.py +0 -0
- {lamindb-0.55.0 → lamindb-0.55.1}/sub/lamindb-setup/tests/prod-staging/test_load_instance.py +0 -0
- {lamindb-0.55.0 → lamindb-0.55.1}/sub/lamindb-setup/tests/prod-staging/test_login.py +0 -0
- {lamindb-0.55.0 → lamindb-0.55.1}/sub/lamindb-setup/tests/prod-staging/test_migrate.py +0 -0
- {lamindb-0.55.0 → lamindb-0.55.1}/sub/lamindb-setup/tests/prod-staging/test_set_storage.py +0 -0
- {lamindb-0.55.0 → lamindb-0.55.1}/sub/lamindb-setup/tests/prod-staging/test_signup.py +0 -0
- {lamindb-0.55.0 → lamindb-0.55.1}/sub/lamindb-setup/tests/test_load_persistent_instance.py +0 -0
- {lamindb-0.55.0 → lamindb-0.55.1}/sub/lnschema-bionty/.github/workflows/build.yml +0 -0
- {lamindb-0.55.0 → lamindb-0.55.1}/sub/lnschema-bionty/.github/workflows/latest-changes.jinja2 +0 -0
- {lamindb-0.55.0 → lamindb-0.55.1}/sub/lnschema-bionty/.github/workflows/latest-changes.yml +0 -0
- {lamindb-0.55.0 → lamindb-0.55.1}/sub/lnschema-bionty/.gitignore +0 -0
- {lamindb-0.55.0 → lamindb-0.55.1}/sub/lnschema-bionty/.pre-commit-config.yaml +0 -0
- {lamindb-0.55.0 → lamindb-0.55.1}/sub/lnschema-bionty/LICENSE +0 -0
- {lamindb-0.55.0 → lamindb-0.55.1}/sub/lnschema-bionty/README.md +0 -0
- {lamindb-0.55.0 → lamindb-0.55.1}/sub/lnschema-bionty/docs/changelog.md +0 -0
- {lamindb-0.55.0 → lamindb-0.55.1}/sub/lnschema-bionty/docs/index.md +0 -0
- {lamindb-0.55.0 → lamindb-0.55.1}/sub/lnschema-bionty/docs/reference.md +0 -0
- {lamindb-0.55.0 → lamindb-0.55.1}/sub/lnschema-bionty/lamin-project.yaml +0 -0
- {lamindb-0.55.0 → lamindb-0.55.1}/sub/lnschema-bionty/lnschema_bionty/__init__.py +0 -0
- {lamindb-0.55.0 → lamindb-0.55.1}/sub/lnschema-bionty/lnschema_bionty/_bionty.py +0 -0
- {lamindb-0.55.0 → lamindb-0.55.1}/sub/lnschema-bionty/lnschema_bionty/dev/__init__.py +0 -0
- {lamindb-0.55.0 → lamindb-0.55.1}/sub/lnschema-bionty/lnschema_bionty/dev/_settings.py +0 -0
- {lamindb-0.55.0 → lamindb-0.55.1}/sub/lnschema-bionty/lnschema_bionty/ids.py +0 -0
- {lamindb-0.55.0 → lamindb-0.55.1}/sub/lnschema-bionty/lnschema_bionty/migrations/0001_initial.py +0 -0
- {lamindb-0.55.0 → lamindb-0.55.1}/sub/lnschema-bionty/lnschema_bionty/migrations/0002_rename_gene_type_gene_biotype_and_more.py +0 -0
- {lamindb-0.55.0 → lamindb-0.55.1}/sub/lnschema-bionty/lnschema_bionty/migrations/0003_alter_biontysource_entity_alter_biontysource_source_and_more.py +0 -0
- {lamindb-0.55.0 → lamindb-0.55.1}/sub/lnschema-bionty/lnschema_bionty/migrations/0004_alter_cellline_bionty_source_and_more.py +0 -0
- {lamindb-0.55.0 → lamindb-0.55.1}/sub/lnschema-bionty/lnschema_bionty/migrations/0005_rename_short_name_cellline_abbr_and_more.py +0 -0
- {lamindb-0.55.0 → lamindb-0.55.1}/sub/lnschema-bionty/lnschema_bionty/migrations/0006_alter_biontysource_options_alter_cellline_options_and_more.py +0 -0
- {lamindb-0.55.0 → lamindb-0.55.1}/sub/lnschema-bionty/lnschema_bionty/migrations/0007_rename_readout_experimental_factor.py +0 -0
- {lamindb-0.55.0 → lamindb-0.55.1}/sub/lnschema-bionty/lnschema_bionty/migrations/0008_remove_gene_hgnc_id_remove_gene_mgi_id_and_more.py +0 -0
- {lamindb-0.55.0 → lamindb-0.55.1}/sub/lnschema-bionty/lnschema_bionty/migrations/0009_alter_gene_ensembl_gene_id.py +0 -0
- {lamindb-0.55.0 → lamindb-0.55.1}/sub/lnschema-bionty/lnschema_bionty/migrations/0010_alter_species_name.py +0 -0
- {lamindb-0.55.0 → lamindb-0.55.1}/sub/lnschema-bionty/lnschema_bionty/migrations/0011_cellline_datasets_cellmarker_datasets_and_more.py +0 -0
- {lamindb-0.55.0 → lamindb-0.55.1}/sub/lnschema-bionty/lnschema_bionty/migrations/0012_gene_stable_id.py +0 -0
- {lamindb-0.55.0 → lamindb-0.55.1}/sub/lnschema-bionty/lnschema_bionty/migrations/0013_alter_cellmarker_species_alter_gene_species_and_more.py +0 -0
- {lamindb-0.55.0 → lamindb-0.55.1}/sub/lnschema-bionty/lnschema_bionty/migrations/0014_ethnicity_developmentalstage.py +0 -0
- {lamindb-0.55.0 → lamindb-0.55.1}/sub/lnschema-bionty/lnschema_bionty/migrations/__init__.py +0 -0
- {lamindb-0.55.0 → lamindb-0.55.1}/sub/lnschema-bionty/lnschema_bionty/models.py +0 -0
- {lamindb-0.55.0 → lamindb-0.55.1}/sub/lnschema-bionty/noxfile.py +0 -0
- {lamindb-0.55.0 → lamindb-0.55.1}/sub/lnschema-bionty/pyproject.toml +0 -0
- {lamindb-0.55.0 → lamindb-0.55.1}/sub/lnschema-bionty/tests/test_hash_id.py +0 -0
- {lamindb-0.55.0 → lamindb-0.55.1}/sub/lnschema-bionty/tests/test_integrity.py +0 -0
- {lamindb-0.55.0 → lamindb-0.55.1}/sub/lnschema-core/.github/workflows/build.yml +0 -0
- {lamindb-0.55.0 → lamindb-0.55.1}/sub/lnschema-core/.github/workflows/latest-changes.jinja2 +0 -0
- {lamindb-0.55.0 → lamindb-0.55.1}/sub/lnschema-core/.github/workflows/latest-changes.yml +0 -0
- {lamindb-0.55.0 → lamindb-0.55.1}/sub/lnschema-core/.gitignore +0 -0
- {lamindb-0.55.0 → lamindb-0.55.1}/sub/lnschema-core/.pre-commit-config.yaml +0 -0
- {lamindb-0.55.0 → lamindb-0.55.1}/sub/lnschema-core/LICENSE +0 -0
- {lamindb-0.55.0 → lamindb-0.55.1}/sub/lnschema-core/README.md +0 -0
- {lamindb-0.55.0 → lamindb-0.55.1}/sub/lnschema-core/lnschema_core/ids.py +0 -0
- {lamindb-0.55.0 → lamindb-0.55.1}/sub/lnschema-core/lnschema_core/migrations/0001_initial.py +0 -0
- {lamindb-0.55.0 → lamindb-0.55.1}/sub/lnschema-core/lnschema_core/migrations/0002_alter_user_name.py +0 -0
- {lamindb-0.55.0 → lamindb-0.55.1}/sub/lnschema-core/lnschema_core/migrations/0003_alter_storage_region_alter_transform_short_name.py +0 -0
- {lamindb-0.55.0 → lamindb-0.55.1}/sub/lnschema-core/lnschema_core/migrations/0004_rename_folder_tag_alter_project_folders.py +0 -0
- {lamindb-0.55.0 → lamindb-0.55.1}/sub/lnschema-core/lnschema_core/migrations/0005_alter_run_inputs_delete_runinput.py +0 -0
- {lamindb-0.55.0 → lamindb-0.55.1}/sub/lnschema-core/lnschema_core/migrations/0006_feature_dataset.py +0 -0
- {lamindb-0.55.0 → lamindb-0.55.1}/sub/lnschema-core/lnschema_core/migrations/0007_feature_synonyms_featureset_field_and_more.py +0 -0
- {lamindb-0.55.0 → lamindb-0.55.1}/sub/lnschema-core/lnschema_core/migrations/0008_file_hash_type_transform_parents.py +0 -0
- {lamindb-0.55.0 → lamindb-0.55.1}/sub/lnschema-core/lnschema_core/migrations/0009_remove_featureset_files_feature_unit_and_more.py +0 -0
- {lamindb-0.55.0 → lamindb-0.55.1}/sub/lnschema-core/lnschema_core/migrations/0010_dataset_categories_file_categories.py +0 -0
- {lamindb-0.55.0 → lamindb-0.55.1}/sub/lnschema-core/lnschema_core/migrations/0011_label_remove_tag_created_by_remove_tag_parents_and_more.py +0 -0
- {lamindb-0.55.0 → lamindb-0.55.1}/sub/lnschema-core/lnschema_core/migrations/0012_remove_label_ref_id_remove_label_ref_orm_and_more.py +0 -0
- {lamindb-0.55.0 → lamindb-0.55.1}/sub/lnschema-core/lnschema_core/migrations/0013_remove_feature_labels_orm_and_more.py +0 -0
- {lamindb-0.55.0 → lamindb-0.55.1}/sub/lnschema-core/lnschema_core/migrations/0014_rename_ref_field_featureset_registry.py +0 -0
- {lamindb-0.55.0 → lamindb-0.55.1}/sub/lnschema-core/lnschema_core/migrations/0015_file_initial_version_file_version.py +0 -0
- {lamindb-0.55.0 → lamindb-0.55.1}/sub/lnschema-core/lnschema_core/migrations/0016_dataset_input_of_dataset_run_dataset_transform_and_more.py +0 -0
- {lamindb-0.55.0 → lamindb-0.55.1}/sub/lnschema-core/lnschema_core/migrations/0017_dataset_initial_version_dataset_version.py +0 -0
- {lamindb-0.55.0 → lamindb-0.55.1}/sub/lnschema-core/lnschema_core/migrations/0018_rename_datasetlabel_datasetulabel_and_more.py +0 -0
- {lamindb-0.55.0 → lamindb-0.55.1}/sub/lnschema-core/lnschema_core/migrations/0019_dataset_reference_dataset_reference_type_and_more.py +0 -0
- {lamindb-0.55.0 → lamindb-0.55.1}/sub/lnschema-core/lnschema_core/migrations/0020_run_report_transform_latest_report_and_more.py +0 -0
- {lamindb-0.55.0 → lamindb-0.55.1}/sub/lnschema-core/lnschema_core/migrations/__init__.py +0 -0
- {lamindb-0.55.0 → lamindb-0.55.1}/sub/lnschema-core/lnschema_core/mocks.py +0 -0
- {lamindb-0.55.0 → lamindb-0.55.1}/sub/lnschema-core/lnschema_core/types.py +0 -0
- {lamindb-0.55.0 → lamindb-0.55.1}/sub/lnschema-core/lnschema_core/users.py +0 -0
- {lamindb-0.55.0 → lamindb-0.55.1}/sub/lnschema-core/noxfile.py +0 -0
- {lamindb-0.55.0 → lamindb-0.55.1}/sub/lnschema-core/pyproject.toml +0 -0
- {lamindb-0.55.0 → lamindb-0.55.1}/sub/lnschema-core/tests/test_integrity.py +0 -0
- {lamindb-0.55.0 → lamindb-0.55.1}/tests/conftest.py +0 -0
- {lamindb-0.55.0 → lamindb-0.55.1}/tests/test_cache.py +0 -0
- {lamindb-0.55.0 → lamindb-0.55.1}/tests/test_data.py +0 -0
- {lamindb-0.55.0 → lamindb-0.55.1}/tests/test_db.py +0 -0
- {lamindb-0.55.0 → lamindb-0.55.1}/tests/test_delete.py +0 -0
- {lamindb-0.55.0 → lamindb-0.55.1}/tests/test_feature.py +0 -0
- {lamindb-0.55.0 → lamindb-0.55.1}/tests/test_feature_manager.py +0 -0
- {lamindb-0.55.0 → lamindb-0.55.1}/tests/test_feature_set.py +0 -0
- {lamindb-0.55.0 → lamindb-0.55.1}/tests/test_from_values.py +0 -0
- {lamindb-0.55.0 → lamindb-0.55.1}/tests/test_hashing.py +0 -0
- {lamindb-0.55.0 → lamindb-0.55.1}/tests/test_label_manager.py +0 -0
- {lamindb-0.55.0 → lamindb-0.55.1}/tests/test_manager.py +0 -0
- {lamindb-0.55.0 → lamindb-0.55.1}/tests/test_parents.py +0 -0
- {lamindb-0.55.0 → lamindb-0.55.1}/tests/test_queryset.py +0 -0
- {lamindb-0.55.0 → lamindb-0.55.1}/tests/test_registry.py +0 -0
- {lamindb-0.55.0 → lamindb-0.55.1}/tests/test_run.py +0 -0
- {lamindb-0.55.0 → lamindb-0.55.1}/tests/test_run_context.py +0 -0
- {lamindb-0.55.0 → lamindb-0.55.1}/tests/test_save.py +0 -0
- {lamindb-0.55.0 → lamindb-0.55.1}/tests/test_settings.py +0 -0
- {lamindb-0.55.0 → lamindb-0.55.1}/tests/test_storage.py +0 -0
- {lamindb-0.55.0 → lamindb-0.55.1}/tests/test_transform.py +0 -0
- {lamindb-0.55.0 → lamindb-0.55.1}/tests/test_ulabel.py +0 -0
- {lamindb-0.55.0 → lamindb-0.55.1}/tests/test_validate.py +0 -0
- {lamindb-0.55.0 → lamindb-0.55.1}/tests/test_versioning.py +0 -0
- {lamindb-0.55.0 → lamindb-0.55.1}/tests/test_view.py +0 -0
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.1
|
2
2
|
Name: lamindb
|
3
|
-
Version: 0.55.
|
3
|
+
Version: 0.55.1
|
4
4
|
Summary: Open-source data platform for biology.
|
5
5
|
Author-email: Lamin Labs <open-source@lamin.ai>
|
6
6
|
Requires-Python: >=3.8
|
@@ -8,9 +8,9 @@ Description-Content-Type: text/markdown
|
|
8
8
|
Classifier: Programming Language :: Python :: 3.8
|
9
9
|
Classifier: Programming Language :: Python :: 3.9
|
10
10
|
Classifier: Programming Language :: Python :: 3.10
|
11
|
-
Requires-Dist: lnschema_core==0.
|
12
|
-
Requires-Dist: lamindb_setup==0.54.
|
13
|
-
Requires-Dist: lamin_utils==0.11.
|
11
|
+
Requires-Dist: lnschema_core==0.50.0
|
12
|
+
Requires-Dist: lamindb_setup==0.54.3
|
13
|
+
Requires-Dist: lamin_utils==0.11.4
|
14
14
|
Requires-Dist: rapidfuzz
|
15
15
|
Requires-Dist: pyarrow
|
16
16
|
Requires-Dist: typing_extensions!=4.6.0
|
@@ -35,7 +35,7 @@ Requires-Dist: pytest-cov ; extra == "dev"
|
|
35
35
|
Requires-Dist: nbproject_test>=0.3.0 ; extra == "dev"
|
36
36
|
Requires-Dist: faker-biology ; extra == "dev"
|
37
37
|
Requires-Dist: django-schema-graph ; extra == "erdiagram"
|
38
|
-
Requires-Dist: readfcs>=1.1.
|
38
|
+
Requires-Dist: readfcs>=1.1.7 ; extra == "fcs"
|
39
39
|
Requires-Dist: fsspec[gs]==2023.9.0 ; extra == "gcp"
|
40
40
|
Requires-Dist: nbproject==0.9.2 ; extra == "jupyter"
|
41
41
|
Requires-Dist: nbstripout ; extra == "jupyter"
|
@@ -6,13 +6,20 @@
|
|
6
6
|
|
7
7
|
## 0.55
|
8
8
|
|
9
|
+
### 0.55.1 {small}`2023-10-4`
|
10
|
+
|
11
|
+
- ✨ Dataset from paths aka storage [PR1222](https://github.com/laminlabs/lamindb/pull/1222) [@falexwolf](https://github.com/falexwolf)
|
12
|
+
- 🚸 Do not search for alternative names if id is passed [PR1225](https://github.com/laminlabs/lamindb/pull/1225) [@falexwolf](https://github.com/falexwolf)
|
13
|
+
- 📝 Added lamindata badge [PR1223](https://github.com/laminlabs/lamindb/pull/1223) [@sunnyosun](https://github.com/sunnyosun)
|
14
|
+
- ♻️ Refactor data flow tracking for Dataset [PR1224](https://github.com/laminlabs/lamindb/pull/1224) [@falexwolf](https://github.com/falexwolf)
|
15
|
+
|
9
16
|
### 0.55.0 {small}`2023-10-03`
|
10
17
|
|
11
18
|
- ✨ Enable to transfer data between instances [PR1216](https://github.com/laminlabs/lamindb/pull/1216) [@falexwolf](https://github.com/falexwolf)
|
12
|
-
- ✨
|
13
|
-
- ♻️ Track dataset as run input also for dataset.files [PR1219](https://github.com/laminlabs/lamindb/pull/1219) [@falexwolf](https://github.com/falexwolf)
|
19
|
+
- ✨ Enable saving notebook files [PR1213](https://github.com/laminlabs/lamindb/pull/1213) [@falexwolf](https://github.com/falexwolf)
|
14
20
|
- 💄 Display id in view_parents [PR1215](https://github.com/laminlabs/lamindb/pull/1215) [@sunnyosun](https://github.com/sunnyosun)
|
15
|
-
|
21
|
+
|
22
|
+
## 0.54
|
16
23
|
|
17
24
|
### 0.54.4 {small}`2023-09-29`
|
18
25
|
|
@@ -1,4 +1,4 @@
|
|
1
|
-
[Influenced](docs:influences) by a number of data tools, LaminDB's features address [key data management
|
1
|
+
[Influenced](docs:influences) by a number of data tools, LaminDB's features address [key data management problems](https://lamin.ai/blog/2022/problems).
|
2
2
|
|
3
3
|
**For data users**
|
4
4
|
|
@@ -25,7 +25,7 @@
|
|
25
25
|
"```\n",
|
26
26
|
":::\n",
|
27
27
|
"\n",
|
28
|
-
"LaminHub is free for public data. Enterprise features, support, integration tests & wetlab plug-ins hosted in your or our infrastructure are available on a paid plan: please [reach out](https://lamin.ai/contact)!"
|
28
|
+
"LaminHub is free for public data. Enterprise features, support, integration tests & wetlab plug-ins hosted in your or our infrastructure are available on a [paid plan](https://lamin.ai/pricing): please [reach out](https://lamin.ai/contact)!"
|
29
29
|
]
|
30
30
|
},
|
31
31
|
{
|
@@ -578,6 +578,20 @@
|
|
578
578
|
"dataset_v2.files.df()"
|
579
579
|
]
|
580
580
|
},
|
581
|
+
{
|
582
|
+
"cell_type": "markdown",
|
583
|
+
"metadata": {},
|
584
|
+
"source": [
|
585
|
+
"### Explore data in LaminHub"
|
586
|
+
]
|
587
|
+
},
|
588
|
+
{
|
589
|
+
"cell_type": "markdown",
|
590
|
+
"metadata": {},
|
591
|
+
"source": [
|
592
|
+
"You may explore [this notebook](https://lamin.ai/laminlabs/lamindata/record/core/Transform?id=Hc5AXzibjGg1z8) with [datasets & files](https://lamin.ai/laminlabs/lamindata/record/core/Dataset?id=PuCck2ARUd3rUrmdWYiI&tab=files&offset=0&limit=50) in `laminlabs/lamindata`."
|
593
|
+
]
|
594
|
+
},
|
581
595
|
{
|
582
596
|
"cell_type": "markdown",
|
583
597
|
"metadata": {},
|
@@ -75,7 +75,8 @@
|
|
75
75
|
"outputs": [],
|
76
76
|
"source": [
|
77
77
|
"dataset = ln.Dataset.filter(\n",
|
78
|
-
" using=\"laminlabs/cellxgene-census\"
|
78
|
+
" using=\"laminlabs/cellxgene-census\",\n",
|
79
|
+
" reference=\"c888b684-6c51-431f-972a-6c963044cef0\",\n",
|
79
80
|
").one()\n",
|
80
81
|
"dataset"
|
81
82
|
]
|
@@ -4,8 +4,9 @@
|
|
4
4
|
"cell_type": "markdown",
|
5
5
|
"metadata": {},
|
6
6
|
"source": [
|
7
|
-
"\n",
|
8
|
+
"[](https://github.com/laminlabs/lamindb/blob/main/docs/tutorial.ipynb)\n",
|
9
|
+
"[](https://lamin.ai/laminlabs/lamindata/record/core/Transform?id=NJvdsWWbJlZSz8)"
|
9
10
|
]
|
10
11
|
},
|
11
12
|
{
|
@@ -596,7 +597,7 @@
|
|
596
597
|
"outputs": [],
|
597
598
|
"source": [
|
598
599
|
"transform = ln.Transform.filter(\n",
|
599
|
-
"
|
600
|
+
" name__icontains=\"files & datasets\"\n",
|
600
601
|
").one() # get exactly one result\n",
|
601
602
|
"transform"
|
602
603
|
]
|
@@ -4,8 +4,9 @@
|
|
4
4
|
"cell_type": "markdown",
|
5
5
|
"metadata": {},
|
6
6
|
"source": [
|
7
|
-
"\n",
|
8
|
+
"[](https://github.com/laminlabs/lamindb/blob/main/docs/tutorial1.ipynb)\n",
|
9
|
+
"[](https://lamin.ai/laminlabs/lamindata/record/core/Transform?id=dMtrt8YMSdl6z8)"
|
9
10
|
]
|
10
11
|
},
|
11
12
|
{
|
@@ -490,7 +491,7 @@
|
|
490
491
|
"\n",
|
491
492
|
"```python\n",
|
492
493
|
"for feature in features:\n",
|
493
|
-
" if feature.type == \"
|
494
|
+
" if feature.type == \"number\":\n",
|
494
495
|
" feature.unit = \"m\" # SI unit for meters\n",
|
495
496
|
" feature.save()\n",
|
496
497
|
"```\n",
|
@@ -1,10 +1,15 @@
|
|
1
1
|
from collections import defaultdict
|
2
|
+
from pathlib import Path
|
2
3
|
from typing import Dict, Iterable, Literal, Optional, Tuple, Union
|
3
4
|
|
4
5
|
import anndata as ad
|
5
6
|
import pandas as pd
|
6
7
|
from lamin_utils import logger
|
8
|
+
from lamindb_setup._init_instance import register_storage
|
9
|
+
from lamindb_setup.dev import StorageSettings
|
7
10
|
from lamindb_setup.dev._docs import doc_args
|
11
|
+
from lamindb_setup.dev._hub_utils import get_storage_region
|
12
|
+
from lamindb_setup.dev.upath import UPath
|
8
13
|
from lnschema_core import Modality
|
9
14
|
from lnschema_core.models import Dataset, Feature, FeatureSet
|
10
15
|
from lnschema_core.types import AnnDataLike, DataLike, FieldAttr
|
@@ -84,11 +89,12 @@ def __init__(
|
|
84
89
|
)
|
85
90
|
|
86
91
|
run = get_run(run)
|
87
|
-
# there are exactly
|
92
|
+
# there are exactly 3 ways of creating a Dataset object right now
|
88
93
|
# using exactly one file or using more than one file
|
89
94
|
# init file
|
90
95
|
if isinstance(data, (pd.DataFrame, ad.AnnData, File)):
|
91
96
|
files = None
|
97
|
+
storage = None
|
92
98
|
if isinstance(data, File):
|
93
99
|
file = data
|
94
100
|
if file._state.adding:
|
@@ -116,9 +122,23 @@ def __init__(
|
|
116
122
|
if file.description is None or file.description == "tmp":
|
117
123
|
file.description = f"See dataset {provisional_id}" # type: ignore
|
118
124
|
file._feature_sets = feature_sets
|
125
|
+
storage = None
|
126
|
+
# init from directory or bucket
|
127
|
+
elif isinstance(data, (str, Path, UPath)):
|
128
|
+
file = None
|
129
|
+
files = None
|
130
|
+
upath = UPath(data)
|
131
|
+
if not upath.is_dir:
|
132
|
+
raise ValueError(f"Can only pass buckets or directories, not {data}")
|
133
|
+
upath_str = upath.as_posix().rstrip("/")
|
134
|
+
region = get_storage_region(upath_str)
|
135
|
+
storage_settings = StorageSettings(upath_str, region)
|
136
|
+
storage = register_storage(storage_settings)
|
137
|
+
hash = None
|
119
138
|
# init files
|
120
139
|
else:
|
121
140
|
file = None
|
141
|
+
storage = None
|
122
142
|
if hasattr(data, "__getitem__"):
|
123
143
|
assert isinstance(data[0], File) # type: ignore
|
124
144
|
files = data
|
@@ -144,6 +164,7 @@ def __init__(
|
|
144
164
|
reference=reference,
|
145
165
|
reference_type=reference_type,
|
146
166
|
file=file,
|
167
|
+
storage=storage,
|
147
168
|
hash=hash,
|
148
169
|
run=run,
|
149
170
|
version=version,
|
@@ -276,8 +297,9 @@ def load(
|
|
276
297
|
is_run_input: Optional[bool] = None,
|
277
298
|
**kwargs,
|
278
299
|
) -> DataLike:
|
279
|
-
_track_run_input
|
300
|
+
# cannot call _track_run_input here, see comment further down
|
280
301
|
if self.file is not None:
|
302
|
+
_track_run_input(self, is_run_input)
|
281
303
|
return self.file.load()
|
282
304
|
else:
|
283
305
|
all_files = self.files.all()
|
@@ -291,9 +313,14 @@ def load(
|
|
291
313
|
objects = [file.load(is_run_input=False) for file in all_files]
|
292
314
|
file_ids = [file.id for file in all_files]
|
293
315
|
if isinstance(objects[0], pd.DataFrame):
|
294
|
-
|
316
|
+
concat_object = pd.concat(objects, join=join)
|
295
317
|
elif isinstance(objects[0], ad.AnnData):
|
296
|
-
|
318
|
+
concat_object = ad.concat(
|
319
|
+
objects, join=join, label="file_id", keys=file_ids
|
320
|
+
)
|
321
|
+
# only call it here because there might be errors during concat
|
322
|
+
_track_run_input(self, is_run_input)
|
323
|
+
return concat_object
|
297
324
|
|
298
325
|
|
299
326
|
# docstring handled through attach_func_to_class_method
|
@@ -316,6 +343,14 @@ def save(self, *args, **kwargs) -> None:
|
|
316
343
|
save_feature_set_links(self)
|
317
344
|
|
318
345
|
|
346
|
+
@property # type: ignore
|
347
|
+
@doc_args(Dataset.path.__doc__)
|
348
|
+
def path(self) -> Union[Path, UPath]:
|
349
|
+
"""{}"""
|
350
|
+
_track_run_input(self)
|
351
|
+
return self.storage.path
|
352
|
+
|
353
|
+
|
319
354
|
METHOD_NAMES = [
|
320
355
|
"__init__",
|
321
356
|
"from_anndata",
|
@@ -337,3 +372,5 @@ if _TESTING:
|
|
337
372
|
|
338
373
|
for name in METHOD_NAMES:
|
339
374
|
attach_func_to_class_method(name, Dataset, globals())
|
375
|
+
|
376
|
+
setattr(Dataset, "path", path)
|
@@ -85,9 +85,9 @@ def process_pathlike(
|
|
85
85
|
new_root_str = new_root.as_posix().rstrip("/")
|
86
86
|
region = get_storage_region(new_root_str)
|
87
87
|
storage_settings = StorageSettings(new_root_str, region)
|
88
|
-
register_storage(storage_settings)
|
88
|
+
storage_record = register_storage(storage_settings)
|
89
89
|
use_existing_storage_key = True
|
90
|
-
return
|
90
|
+
return storage_record, use_existing_storage_key
|
91
91
|
# if the filepath is local
|
92
92
|
else:
|
93
93
|
use_existing_storage_key = False
|
@@ -3,10 +3,6 @@ from uuid import UUID
|
|
3
3
|
|
4
4
|
import dj_database_url
|
5
5
|
from django.db import connections
|
6
|
-
from django.db.backends.postgresql.base import (
|
7
|
-
DatabaseWrapper as DatabaseWrapperPostgres,
|
8
|
-
)
|
9
|
-
from django.db.backends.sqlite3.base import DatabaseWrapper as DatabaseWrapperSQLite
|
10
6
|
from lamindb_setup._init_instance import InstanceSettings
|
11
7
|
from lamindb_setup._load_instance import get_owner_name_from_identifier
|
12
8
|
from lamindb_setup.dev._hub_core import load_instance
|
@@ -22,11 +18,8 @@ def add_db_connection(isettings: InstanceSettings, using: str):
|
|
22
18
|
db_config["TIME_ZONE"] = "UTC"
|
23
19
|
db_config["OPTIONS"] = {}
|
24
20
|
db_config["AUTOCOMMIT"] = True
|
25
|
-
|
26
|
-
|
27
|
-
else:
|
28
|
-
db_wrapper = DatabaseWrapperPostgres(db_config, alias=using)
|
29
|
-
connections[using] = db_wrapper
|
21
|
+
|
22
|
+
connections.settings[using] = db_config
|
30
23
|
|
31
24
|
|
32
25
|
def filter(Registry: Type[Registry], using: str = None, **expressions) -> QuerySet:
|
@@ -25,6 +25,16 @@ class QueryManager(models.Manager):
|
|
25
25
|
>>> manager.df()
|
26
26
|
"""
|
27
27
|
|
28
|
+
def _track_run_input_manager(self):
|
29
|
+
if hasattr(self, "source_field_name") and hasattr(self, "target_field_name"):
|
30
|
+
if self.source_field_name == "dataset" and self.target_field_name == "file":
|
31
|
+
from lamindb.dev._data import WARNING_RUN_TRANSFORM, _track_run_input
|
32
|
+
from lamindb.dev._run_context import run_context
|
33
|
+
|
34
|
+
if run_context.run is None:
|
35
|
+
logger.warning(WARNING_RUN_TRANSFORM)
|
36
|
+
_track_run_input(self.instance)
|
37
|
+
|
28
38
|
def list(self, field: Optional[str] = None):
|
29
39
|
"""Populate a list with the results.
|
30
40
|
|
@@ -41,6 +51,7 @@ class QueryManager(models.Manager):
|
|
41
51
|
>>> label.parents.list("name")
|
42
52
|
['ULabel1', 'ULabel2', 'ULabel3']
|
43
53
|
"""
|
54
|
+
self._track_run_input_manager()
|
44
55
|
if field is None:
|
45
56
|
return [item for item in self.all()]
|
46
57
|
else:
|
@@ -58,15 +69,8 @@ class QueryManager(models.Manager):
|
|
58
69
|
|
59
70
|
For `**kwargs`, see :meth:`lamindb.dev.QuerySet.df`.
|
60
71
|
"""
|
61
|
-
|
62
|
-
|
63
|
-
from lamindb.dev._data import WARNING_RUN_TRANSFORM, _track_run_input
|
64
|
-
from lamindb.dev._run_context import run_context
|
65
|
-
|
66
|
-
if run_context.run is None:
|
67
|
-
logger.warning(WARNING_RUN_TRANSFORM)
|
68
|
-
_track_run_input(self.instance)
|
69
|
-
return self.all()
|
72
|
+
self._track_run_input_manager()
|
73
|
+
return self.all_base_class()
|
70
74
|
|
71
75
|
def __getitem__(self, item: str):
|
72
76
|
try:
|
@@ -86,3 +90,10 @@ class QueryManager(models.Manager):
|
|
86
90
|
setattr(models.Manager, "list", QueryManager.list)
|
87
91
|
setattr(models.Manager, "df", QueryManager.df)
|
88
92
|
setattr(models.Manager, "__getitem__", QueryManager.__getitem__)
|
93
|
+
setattr(
|
94
|
+
models.Manager, "_track_run_input_manager", QueryManager._track_run_input_manager
|
95
|
+
)
|
96
|
+
# the two lines below would be easy if we could actually inherit; like this,
|
97
|
+
# they're suboptimal
|
98
|
+
setattr(models.Manager, "all_base_class", models.Manager.all)
|
99
|
+
setattr(models.Manager, "all", QueryManager.all)
|
@@ -82,7 +82,12 @@ def __init__(orm: Registry, *args, **kwargs):
|
|
82
82
|
validate_required_fields(orm, kwargs)
|
83
83
|
from .dev._settings import settings
|
84
84
|
|
85
|
-
if
|
85
|
+
# do not search for names if an id is passed; this is important
|
86
|
+
# e.g. when synching ids from the notebook store to lamindb
|
87
|
+
has_consciously_provided_id = False
|
88
|
+
if "_has_consciously_provided_id" in kwargs:
|
89
|
+
has_consciously_provided_id = kwargs.pop("_has_consciously_provided_id")
|
90
|
+
if settings.upon_create_search_names and not has_consciously_provided_id:
|
86
91
|
result = suggest_objects_with_same_name(orm, kwargs)
|
87
92
|
if result == "object-with-same-name-exists":
|
88
93
|
if "version" in kwargs:
|
@@ -341,7 +346,7 @@ def transfer_to_default_db(record: Registry, save: bool = False):
|
|
341
346
|
record.transform_id = run_context.transform.id
|
342
347
|
else:
|
343
348
|
record.transform_id = None
|
344
|
-
if hasattr(record, "storage_id"):
|
349
|
+
if hasattr(record, "storage_id") and record.storage_id is not None:
|
345
350
|
record.storage.save()
|
346
351
|
record._state.db = "default"
|
347
352
|
if save:
|
@@ -0,0 +1,18 @@
|
|
1
|
+
from lamindb_setup.dev._docs import doc_args
|
2
|
+
from lamindb_setup.dev.upath import UPath, create_path
|
3
|
+
from lnschema_core import Storage
|
4
|
+
|
5
|
+
|
6
|
+
def root_as_path(self) -> UPath:
|
7
|
+
return create_path(self.root)
|
8
|
+
|
9
|
+
|
10
|
+
@property # type: ignore
|
11
|
+
@doc_args(Storage.path.__doc__)
|
12
|
+
def path(self) -> UPath:
|
13
|
+
"""{}"""
|
14
|
+
return create_path(self.root)
|
15
|
+
|
16
|
+
|
17
|
+
setattr(Storage, "root_as_path", root_as_path)
|
18
|
+
setattr(Storage, "path", path)
|
@@ -44,8 +44,14 @@ def __init__(transform: Transform, *args, **kwargs):
|
|
44
44
|
)
|
45
45
|
if name is None:
|
46
46
|
name = is_new_version_of.name
|
47
|
+
|
48
|
+
# this is only because the user-facing constructor allows passing an id
|
49
|
+
# most others don't
|
47
50
|
if id is None:
|
51
|
+
has_consciously_provided_id = False
|
48
52
|
id = new_id
|
53
|
+
else:
|
54
|
+
has_consciously_provided_id = True
|
49
55
|
super(Transform, transform).__init__(
|
50
56
|
id=id,
|
51
57
|
name=name,
|
@@ -54,6 +60,7 @@ def __init__(transform: Transform, *args, **kwargs):
|
|
54
60
|
version=version,
|
55
61
|
initial_version_id=initial_version_id,
|
56
62
|
reference=reference,
|
63
|
+
_has_consciously_provided_id=has_consciously_provided_id,
|
57
64
|
)
|
58
65
|
|
59
66
|
|
@@ -127,4 +127,7 @@ class LabelManager:
|
|
127
127
|
labels_list = labels.list()
|
128
128
|
for label in labels_list:
|
129
129
|
transfer_to_default_db(label, save=True)
|
130
|
-
|
130
|
+
# this should not occur as file and dataset should have the same attributes
|
131
|
+
# but this might not be true for custom schema
|
132
|
+
if hasattr(self._host, related_name):
|
133
|
+
getattr(self._host, related_name).add(*labels_list)
|
@@ -15,9 +15,9 @@ classifiers = [
|
|
15
15
|
]
|
16
16
|
dependencies = [
|
17
17
|
# Lamin PINNED packages
|
18
|
-
"lnschema_core==0.
|
19
|
-
"lamindb_setup==0.54.
|
20
|
-
"lamin_utils==0.11.
|
18
|
+
"lnschema_core==0.50.0",
|
19
|
+
"lamindb_setup==0.54.3",
|
20
|
+
"lamin_utils==0.11.4",
|
21
21
|
# others
|
22
22
|
"rapidfuzz",
|
23
23
|
"pyarrow",
|
@@ -59,7 +59,7 @@ zarr = [
|
|
59
59
|
"zarr>=2.16.0",
|
60
60
|
]
|
61
61
|
fcs = [
|
62
|
-
"readfcs>=1.1.
|
62
|
+
"readfcs>=1.1.7",
|
63
63
|
]
|
64
64
|
erdiagram = [
|
65
65
|
"django-schema-graph",
|
@@ -3,6 +3,9 @@
|
|
3
3
|
<!-- prettier-ignore -->
|
4
4
|
Name | PR | Developer | Date | Version
|
5
5
|
--- | --- | --- | --- | ---
|
6
|
+
🚸 Allow saving notebooks of other users | [547](https://github.com/laminlabs/lamindb-setup/pull/547) | [falexwolf](https://github.com/falexwolf) | 2023-10-04 | 0.54.3
|
7
|
+
🔊 Add more logging | [546](https://github.com/laminlabs/lamindb-setup/pull/546) | [falexwolf](https://github.com/falexwolf) | 2023-10-04 |
|
8
|
+
🔒 Enforce compatibility with lamin-vault 0.0.7 | [545](https://github.com/laminlabs/lamindb-setup/pull/545) | [fredericenard](https://github.com/fredericenard) | 2023-10-03 |
|
6
9
|
🐛 Prevent using vault by default when loading an instance | [544](https://github.com/laminlabs/lamindb-setup/pull/544) | [fredericenard](https://github.com/fredericenard) | 2023-10-03 | 0.54.2
|
7
10
|
🚸 Do not use vault for SQLite instances | [543](https://github.com/laminlabs/lamindb-setup/pull/543) | [falexwolf](https://github.com/falexwolf) | 2023-10-02 | 0.54.2
|
8
11
|
✅ Complete notebook tests | [542](https://github.com/laminlabs/lamindb-setup/pull/542) | [falexwolf](https://github.com/falexwolf) | 2023-10-02 | 0.54.1
|
@@ -3,8 +3,8 @@ from typing import Optional, Union
|
|
3
3
|
from uuid import UUID
|
4
4
|
|
5
5
|
from lamin_utils import logger
|
6
|
-
|
7
6
|
from lamindb_setup.dev.upath import UPath
|
7
|
+
|
8
8
|
from ._close import close as close_instance
|
9
9
|
from ._init_instance import load_from_isettings
|
10
10
|
from ._settings import InstanceSettings, settings
|
@@ -12,10 +12,7 @@ from ._silence_loggers import silence_loggers
|
|
12
12
|
from .dev._settings_load import load_instance_settings
|
13
13
|
from .dev._settings_storage import StorageSettings
|
14
14
|
from .dev._settings_store import instance_settings_file
|
15
|
-
from .dev.cloud_sqlite_locker import
|
16
|
-
unlock_cloud_sqlite_upon_exception,
|
17
|
-
)
|
18
|
-
|
15
|
+
from .dev.cloud_sqlite_locker import unlock_cloud_sqlite_upon_exception
|
19
16
|
|
20
17
|
# this is for testing purposes only
|
21
18
|
# set to True only to test failed load
|
@@ -144,25 +141,19 @@ def get_db_from_vault(instance_result):
|
|
144
141
|
from lamin_vault.client.postgres._get_db_from_vault import (
|
145
142
|
get_db_from_vault as get_db_from_vault_base,
|
146
143
|
)
|
147
|
-
from lamin_vault.client.postgres._connection_config_db_exists import (
|
148
|
-
connection_config_db_exists,
|
149
|
-
)
|
150
144
|
|
151
145
|
vault_client = create_vault_authenticated_client(
|
152
|
-
access_token=settings.user.access_token,
|
146
|
+
access_token=settings.user.access_token, instance_id=instance_result["id"]
|
153
147
|
)
|
154
|
-
|
155
|
-
vault_client,
|
148
|
+
return get_db_from_vault_base(
|
149
|
+
vault_client=vault_client,
|
150
|
+
scheme=instance_result["db_scheme"],
|
151
|
+
host=instance_result["db_host"],
|
152
|
+
port=instance_result["db_port"],
|
153
|
+
name=instance_result["db_database"],
|
154
|
+
role=f'{instance_result["id"]}-{settings.user.uuid}-db',
|
156
155
|
)
|
157
|
-
|
158
|
-
return get_db_from_vault_base(
|
159
|
-
vault_client=vault_client,
|
160
|
-
scheme=instance_result["db_scheme"],
|
161
|
-
host=instance_result["db_host"],
|
162
|
-
port=instance_result["db_port"],
|
163
|
-
name=instance_result["db_database"],
|
164
|
-
role=f'{instance_result["id"]}-{settings.user.uuid}-db',
|
165
|
-
)
|
156
|
+
|
166
157
|
except Exception:
|
167
158
|
logger.warning("Failed to connect to vault!")
|
168
159
|
return None
|
@@ -12,17 +12,22 @@ def update_notebook_metadata(nb, notebook_path):
|
|
12
12
|
from nbproject.dev import write_notebook
|
13
13
|
from nbproject.dev._initialize import nbproject_id
|
14
14
|
|
15
|
+
stem_id = nb.metadata["nbproject"]["id"]
|
16
|
+
current_version = nb.metadata["nbproject"]["version"]
|
17
|
+
logger.info(
|
18
|
+
f"the notebook {notebook_path} is already tracked (stem_id='{stem_id}',"
|
19
|
+
f" version: '{current_version}')"
|
20
|
+
)
|
15
21
|
updated = False
|
16
22
|
# ask for generating new id
|
17
23
|
if os.getenv("LAMIN_TESTING") is None:
|
18
|
-
response = input("Do you want to generate a new id? (y/n) ")
|
24
|
+
response = input("Do you want to generate a new id prefix? (y/n) ")
|
19
25
|
else:
|
20
26
|
response = "y"
|
21
27
|
if response == "y":
|
22
28
|
nb.metadata["nbproject"]["id"] = nbproject_id()
|
23
29
|
updated = True
|
24
30
|
else:
|
25
|
-
current_version = nb.metadata["nbproject"]["version"]
|
26
31
|
response = input(
|
27
32
|
f"The current version is '{current_version}' - do you want to set a new"
|
28
33
|
" version? (y/n) "
|
@@ -52,7 +57,6 @@ def track(notebook_path: str, pypackage: Optional[str] = None) -> None:
|
|
52
57
|
write_notebook(nb, notebook_path)
|
53
58
|
logger.success("attached notebook id to ipynb file")
|
54
59
|
else:
|
55
|
-
logger.info(f"the notebook {notebook_path} is already tracked")
|
56
60
|
update_notebook_metadata(nb, notebook_path)
|
57
61
|
return None
|
58
62
|
|
@@ -102,19 +106,21 @@ def save(notebook_path: str) -> Optional[str]:
|
|
102
106
|
transform_family = ln.Transform.filter(id__startswith=meta_store.id).all()
|
103
107
|
if len(transform_family) == 0:
|
104
108
|
logger.error(
|
105
|
-
"
|
109
|
+
f"Didn't find notebook with stem_id {meta_store.id} (12 initial characters)"
|
110
|
+
" in transform registry, did you run ln.track() in it?"
|
106
111
|
)
|
107
112
|
return "not-tracked-in-transform-registry"
|
108
113
|
# the specific version
|
109
114
|
transform = transform_family.filter(version=transform_version).one()
|
110
115
|
# latest run of this transform by user
|
111
|
-
run = (
|
112
|
-
|
113
|
-
|
116
|
+
run = ln.Run.filter(transform=transform).order_by("-run_at").first()
|
117
|
+
if run.created_by.id != lamindb_setup.settings.user.id:
|
118
|
+
response = input(
|
119
|
+
"You are trying to save a notebook created by another user: Source and"
|
120
|
+
" report files will be tagged with *your* user id. Proceed? (y/n)"
|
114
121
|
)
|
115
|
-
|
116
|
-
|
117
|
-
)
|
122
|
+
if response != "y":
|
123
|
+
return "aborted-save-notebook-created-by-different-user"
|
118
124
|
# convert the notebook file to html
|
119
125
|
notebook_path_html = notebook_path.replace(".ipynb", ".html")
|
120
126
|
logger.info(f"exporting notebook as html {notebook_path_html}")
|
@@ -74,10 +74,7 @@ def test_save_consecutive():
|
|
74
74
|
env=env,
|
75
75
|
)
|
76
76
|
assert result.returncode == 1
|
77
|
-
assert (
|
78
|
-
"didn't find notebook in transform registry, did you run ln.track() in it?"
|
79
|
-
in result.stdout.decode()
|
80
|
-
)
|
77
|
+
assert "Didn't find notebook with stem_id" in result.stdout.decode()
|
81
78
|
|
82
79
|
# now, let's re-run this notebook so that ln.track() is actually run
|
83
80
|
nbproject_test.execute_notebooks(notebook_path)
|