lamindb 0.57.2__tar.gz → 0.58.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.57.2 → lamindb-0.58.1}/PKG-INFO +5 -5
- {lamindb-0.57.2 → lamindb-0.58.1}/docs/bio-registries.ipynb +53 -7
- {lamindb-0.57.2 → lamindb-0.58.1}/docs/changelog.md +17 -0
- {lamindb-0.57.2 → lamindb-0.58.1}/docs/faq/acid.ipynb +22 -35
- lamindb-0.58.1/docs/faq/delete.ipynb +191 -0
- {lamindb-0.57.2 → lamindb-0.58.1}/docs/faq/idempotency.ipynb +17 -9
- {lamindb-0.57.2 → lamindb-0.58.1}/docs/faq/notebooks.ipynb +31 -49
- {lamindb-0.57.2 → lamindb-0.58.1}/docs/faq/setup.ipynb +1 -1
- {lamindb-0.57.2 → lamindb-0.58.1}/docs/faq/track-run-inputs.ipynb +13 -2
- lamindb-0.58.1/docs/faq/validator.ipynb +195 -0
- lamindb-0.58.1/docs/faq/visibility.ipynb +205 -0
- {lamindb-0.57.2 → lamindb-0.58.1}/docs/faq.md +3 -0
- {lamindb-0.57.2 → lamindb-0.58.1}/docs/features-lamindb.md +13 -13
- {lamindb-0.57.2 → lamindb-0.58.1}/docs/features-laminhub.md +11 -12
- {lamindb-0.57.2 → lamindb-0.58.1}/docs/introduction.ipynb +37 -70
- {lamindb-0.57.2 → lamindb-0.58.1}/docs/meta.ipynb +5 -3
- {lamindb-0.57.2 → lamindb-0.58.1}/docs/storage/add-replace-stage.ipynb +3 -3
- {lamindb-0.57.2 → lamindb-0.58.1}/docs/storage/upload.ipynb +4 -4
- {lamindb-0.57.2 → lamindb-0.58.1}/docs/tutorial.ipynb +6 -2
- {lamindb-0.57.2 → lamindb-0.58.1}/docs/validate.ipynb +30 -10
- {lamindb-0.57.2 → lamindb-0.58.1}/lamindb/__init__.py +1 -1
- {lamindb-0.57.2 → lamindb-0.58.1}/lamindb/_dataset.py +91 -21
- {lamindb-0.57.2 → lamindb-0.58.1}/lamindb/_feature_set.py +7 -1
- {lamindb-0.57.2 → lamindb-0.58.1}/lamindb/_file.py +73 -15
- {lamindb-0.57.2 → lamindb-0.58.1}/lamindb/_filter.py +12 -0
- {lamindb-0.57.2 → lamindb-0.58.1}/lamindb/_parents.py +10 -5
- {lamindb-0.57.2 → lamindb-0.58.1}/lamindb/_query_set.py +2 -4
- {lamindb-0.57.2 → lamindb-0.58.1}/lamindb/_registry.py +20 -7
- {lamindb-0.57.2 → lamindb-0.58.1}/lamindb/_save.py +5 -3
- {lamindb-0.57.2 → lamindb-0.58.1}/lamindb/dev/_data.py +50 -22
- {lamindb-0.57.2 → lamindb-0.58.1}/lamindb/dev/datasets/_core.py +8 -5
- {lamindb-0.57.2 → lamindb-0.58.1}/pyproject.toml +4 -4
- {lamindb-0.57.2 → lamindb-0.58.1}/sub/lamindb-setup/docs/changelog.md +6 -0
- {lamindb-0.57.2 → lamindb-0.58.1}/sub/lamindb-setup/lamindb_setup/__init__.py +1 -1
- {lamindb-0.57.2 → lamindb-0.58.1}/sub/lamindb-setup/lamindb_setup/__main__.py +2 -0
- {lamindb-0.57.2 → lamindb-0.58.1}/sub/lamindb-setup/lamindb_setup/_init_instance.py +4 -2
- {lamindb-0.57.2 → lamindb-0.58.1}/sub/lamindb-setup/lamindb_setup/_load_instance.py +59 -4
- {lamindb-0.57.2 → lamindb-0.58.1}/sub/lamindb-setup/lamindb_setup/_notebook.py +3 -0
- {lamindb-0.57.2 → lamindb-0.58.1}/sub/lamindb-setup/lamindb_setup/dev/_hub_core.py +64 -23
- {lamindb-0.57.2 → lamindb-0.58.1}/sub/lamindb-setup/lamindb_setup/dev/_hub_crud.py +15 -2
- {lamindb-0.57.2 → lamindb-0.58.1}/sub/lamindb-setup/lamindb_setup/dev/_hub_utils.py +1 -1
- {lamindb-0.57.2 → lamindb-0.58.1}/sub/lamindb-setup/noxfile.py +6 -2
- {lamindb-0.57.2 → lamindb-0.58.1}/sub/lamindb-setup/tests/hub-local/test_all.py +12 -2
- {lamindb-0.57.2 → lamindb-0.58.1}/sub/lamindb-setup/tests/prod-staging/test_init_instance.py +1 -2
- {lamindb-0.57.2 → lamindb-0.58.1}/sub/lamindb-setup/tests/prod-staging/test_load_instance.py +22 -0
- {lamindb-0.57.2 → lamindb-0.58.1}/sub/lamindb-setup/tests/test_vault.py +48 -47
- {lamindb-0.57.2 → lamindb-0.58.1}/sub/lnschema-core/CHANGELOG.md +2 -0
- {lamindb-0.57.2 → lamindb-0.58.1}/sub/lnschema-core/lnschema_core/__init__.py +1 -1
- lamindb-0.58.1/sub/lnschema-core/lnschema_core/migrations/0026_dataset_visibility_file_visibility.py +22 -0
- {lamindb-0.57.2 → lamindb-0.58.1}/sub/lnschema-core/lnschema_core/models.py +96 -12
- {lamindb-0.57.2 → lamindb-0.58.1}/sub/lnschema-core/lnschema_core/types.py +7 -1
- {lamindb-0.57.2 → lamindb-0.58.1}/tests/test_cache.py +3 -3
- {lamindb-0.57.2 → lamindb-0.58.1}/tests/test_dataset.py +20 -18
- {lamindb-0.57.2 → lamindb-0.58.1}/tests/test_feature.py +1 -1
- {lamindb-0.57.2 → lamindb-0.58.1}/tests/test_feature_manager.py +4 -4
- {lamindb-0.57.2 → lamindb-0.58.1}/tests/test_file.py +13 -13
- {lamindb-0.57.2 → lamindb-0.58.1}/tests/test_label_manager.py +2 -2
- {lamindb-0.57.2 → lamindb-0.58.1}/tests/test_parents.py +0 -6
- {lamindb-0.57.2 → lamindb-0.58.1}/tests/test_registry.py +6 -6
- {lamindb-0.57.2 → lamindb-0.58.1}/tests/test_save.py +1 -1
- lamindb-0.58.1/tests/test_visibility.py +35 -0
- {lamindb-0.57.2 → lamindb-0.58.1}/.github/workflows/build.yml +0 -0
- {lamindb-0.57.2 → lamindb-0.58.1}/.github/workflows/latest-changes.jinja2 +0 -0
- {lamindb-0.57.2 → lamindb-0.58.1}/.github/workflows/latest-changes.yml +0 -0
- {lamindb-0.57.2 → lamindb-0.58.1}/.gitignore +0 -0
- {lamindb-0.57.2 → lamindb-0.58.1}/.gitmodules +0 -0
- {lamindb-0.57.2 → lamindb-0.58.1}/.pre-commit-config.yaml +0 -0
- {lamindb-0.57.2 → lamindb-0.58.1}/LICENSE +0 -0
- {lamindb-0.57.2 → lamindb-0.58.1}/README.md +0 -0
- {lamindb-0.57.2 → lamindb-0.58.1}/docs/bionty.md +0 -0
- {lamindb-0.57.2 → lamindb-0.58.1}/docs/data.ipynb +0 -0
- {lamindb-0.57.2 → lamindb-0.58.1}/docs/faq/import-schema.ipynb +0 -0
- {lamindb-0.57.2 → lamindb-0.58.1}/docs/faq/reference-field.ipynb +0 -0
- {lamindb-0.57.2 → lamindb-0.58.1}/docs/faq/test_notebooks.py +0 -0
- {lamindb-0.57.2 → lamindb-0.58.1}/docs/guide.md +0 -0
- {lamindb-0.57.2 → lamindb-0.58.1}/docs/index.md +0 -0
- {lamindb-0.57.2 → lamindb-0.58.1}/docs/installation.md +0 -0
- {lamindb-0.57.2 → lamindb-0.58.1}/docs/lamin-utils.md +0 -0
- {lamindb-0.57.2 → lamindb-0.58.1}/docs/lamindb.md +0 -0
- {lamindb-0.57.2 → lamindb-0.58.1}/docs/lnschema-bionty.md +0 -0
- {lamindb-0.57.2 → lamindb-0.58.1}/docs/nbproject.md +0 -0
- {lamindb-0.57.2 → lamindb-0.58.1}/docs/query-search.md +0 -0
- {lamindb-0.57.2 → lamindb-0.58.1}/docs/readfcs.md +0 -0
- {lamindb-0.57.2 → lamindb-0.58.1}/docs/reference.md +0 -0
- {lamindb-0.57.2 → lamindb-0.58.1}/docs/schemas.ipynb +0 -0
- {lamindb-0.57.2 → lamindb-0.58.1}/docs/setup.ipynb +0 -0
- {lamindb-0.57.2 → lamindb-0.58.1}/docs/signup-login.md +0 -0
- {lamindb-0.57.2 → lamindb-0.58.1}/docs/storage/anndata-accessor.ipynb +0 -0
- {lamindb-0.57.2 → lamindb-0.58.1}/docs/storage/test-files/iris.csv +0 -0
- {lamindb-0.57.2 → lamindb-0.58.1}/docs/storage/test-files/iris.data +0 -0
- {lamindb-0.57.2 → lamindb-0.58.1}/docs/storage/test-files/new_iris.csv +0 -0
- {lamindb-0.57.2 → lamindb-0.58.1}/docs/storage/test_notebooks.py +0 -0
- {lamindb-0.57.2 → lamindb-0.58.1}/docs/storage.md +0 -0
- {lamindb-0.57.2 → lamindb-0.58.1}/docs/test_notebooks.py +0 -0
- {lamindb-0.57.2 → lamindb-0.58.1}/docs/transfer.ipynb +0 -0
- {lamindb-0.57.2 → lamindb-0.58.1}/docs/tutorial2.ipynb +0 -0
- {lamindb-0.57.2 → lamindb-0.58.1}/lamindb/_delete.py +0 -0
- {lamindb-0.57.2 → lamindb-0.58.1}/lamindb/_feature.py +0 -0
- {lamindb-0.57.2 → lamindb-0.58.1}/lamindb/_from_values.py +0 -0
- {lamindb-0.57.2 → lamindb-0.58.1}/lamindb/_query_manager.py +0 -0
- {lamindb-0.57.2 → lamindb-0.58.1}/lamindb/_run.py +0 -0
- {lamindb-0.57.2 → lamindb-0.58.1}/lamindb/_storage.py +0 -0
- {lamindb-0.57.2 → lamindb-0.58.1}/lamindb/_transform.py +0 -0
- {lamindb-0.57.2 → lamindb-0.58.1}/lamindb/_ulabel.py +0 -0
- {lamindb-0.57.2 → lamindb-0.58.1}/lamindb/_utils.py +0 -0
- {lamindb-0.57.2 → lamindb-0.58.1}/lamindb/_validate.py +0 -0
- {lamindb-0.57.2 → lamindb-0.58.1}/lamindb/_view.py +0 -0
- {lamindb-0.57.2 → lamindb-0.58.1}/lamindb/dev/__init__.py +0 -0
- {lamindb-0.57.2 → lamindb-0.58.1}/lamindb/dev/_feature_manager.py +0 -0
- {lamindb-0.57.2 → lamindb-0.58.1}/lamindb/dev/_label_manager.py +0 -0
- {lamindb-0.57.2 → lamindb-0.58.1}/lamindb/dev/_priors.py +0 -0
- {lamindb-0.57.2 → lamindb-0.58.1}/lamindb/dev/_run_context.py +0 -0
- {lamindb-0.57.2 → lamindb-0.58.1}/lamindb/dev/_settings.py +0 -0
- {lamindb-0.57.2 → lamindb-0.58.1}/lamindb/dev/datasets/__init__.py +0 -0
- {lamindb-0.57.2 → lamindb-0.58.1}/lamindb/dev/datasets/_fake.py +0 -0
- {lamindb-0.57.2 → lamindb-0.58.1}/lamindb/dev/exceptions.py +0 -0
- {lamindb-0.57.2 → lamindb-0.58.1}/lamindb/dev/fields.py +0 -0
- {lamindb-0.57.2 → lamindb-0.58.1}/lamindb/dev/hashing.py +0 -0
- {lamindb-0.57.2 → lamindb-0.58.1}/lamindb/dev/storage/__init__.py +0 -0
- {lamindb-0.57.2 → lamindb-0.58.1}/lamindb/dev/storage/_anndata_sizes.py +0 -0
- {lamindb-0.57.2 → lamindb-0.58.1}/lamindb/dev/storage/_backed_access.py +0 -0
- {lamindb-0.57.2 → lamindb-0.58.1}/lamindb/dev/storage/_zarr.py +0 -0
- {lamindb-0.57.2 → lamindb-0.58.1}/lamindb/dev/storage/file.py +0 -0
- {lamindb-0.57.2 → lamindb-0.58.1}/lamindb/dev/storage/object.py +0 -0
- {lamindb-0.57.2 → lamindb-0.58.1}/lamindb/dev/types.py +0 -0
- {lamindb-0.57.2 → lamindb-0.58.1}/lamindb/dev/versioning.py +0 -0
- {lamindb-0.57.2 → lamindb-0.58.1}/lamindb/setup/__init__.py +0 -0
- {lamindb-0.57.2 → lamindb-0.58.1}/lamindb/setup/dev/__init__.py +0 -0
- {lamindb-0.57.2 → lamindb-0.58.1}/noxfile.py +0 -0
- {lamindb-0.57.2 → lamindb-0.58.1}/sub/lamindb-setup/.github/workflows/build.yml +0 -0
- {lamindb-0.57.2 → lamindb-0.58.1}/sub/lamindb-setup/.github/workflows/latest-changes.jinja2 +0 -0
- {lamindb-0.57.2 → lamindb-0.58.1}/sub/lamindb-setup/.github/workflows/latest-changes.yml +0 -0
- {lamindb-0.57.2 → lamindb-0.58.1}/sub/lamindb-setup/.gitignore +0 -0
- {lamindb-0.57.2 → lamindb-0.58.1}/sub/lamindb-setup/.pre-commit-config.yaml +0 -0
- {lamindb-0.57.2 → lamindb-0.58.1}/sub/lamindb-setup/LICENSE +0 -0
- {lamindb-0.57.2 → lamindb-0.58.1}/sub/lamindb-setup/README.md +0 -0
- {lamindb-0.57.2 → lamindb-0.58.1}/sub/lamindb-setup/docs/index.md +0 -0
- {lamindb-0.57.2 → lamindb-0.58.1}/sub/lamindb-setup/docs/notebooks.md +0 -0
- {lamindb-0.57.2 → lamindb-0.58.1}/sub/lamindb-setup/docs/prod-only/test-cache-management.ipynb +0 -0
- {lamindb-0.57.2 → lamindb-0.58.1}/sub/lamindb-setup/docs/prod-only/test-empty-init.ipynb +0 -0
- {lamindb-0.57.2 → lamindb-0.58.1}/sub/lamindb-setup/docs/prod-only/test-import-schema.ipynb +0 -0
- {lamindb-0.57.2 → lamindb-0.58.1}/sub/lamindb-setup/docs/prod-only/test-insufficient-user-info.ipynb +0 -0
- {lamindb-0.57.2 → lamindb-0.58.1}/sub/lamindb-setup/docs/prod-only/test-load-lock.ipynb +0 -0
- {lamindb-0.57.2 → lamindb-0.58.1}/sub/lamindb-setup/docs/prod-only/test-sqlite-sync.ipynb +0 -0
- {lamindb-0.57.2 → lamindb-0.58.1}/sub/lamindb-setup/docs/prod-only/test_notebooks2.py +0 -0
- {lamindb-0.57.2 → lamindb-0.58.1}/sub/lamindb-setup/docs/prod-staging/01-init-instance.ipynb +0 -0
- {lamindb-0.57.2 → lamindb-0.58.1}/sub/lamindb-setup/docs/prod-staging/02-load-instance.ipynb +0 -0
- {lamindb-0.57.2 → lamindb-0.58.1}/sub/lamindb-setup/docs/prod-staging/03-set-storage.ipynb +0 -0
- {lamindb-0.57.2 → lamindb-0.58.1}/sub/lamindb-setup/docs/prod-staging/04-test-bionty.ipynb +0 -0
- {lamindb-0.57.2 → lamindb-0.58.1}/sub/lamindb-setup/docs/prod-staging/test-multi-session.ipynb +0 -0
- {lamindb-0.57.2 → lamindb-0.58.1}/sub/lamindb-setup/docs/prod-staging/test_notebooks.py +0 -0
- {lamindb-0.57.2 → lamindb-0.58.1}/sub/lamindb-setup/docs/reference.md +0 -0
- {lamindb-0.57.2 → lamindb-0.58.1}/sub/lamindb-setup/lamindb_setup/_cache.py +0 -0
- {lamindb-0.57.2 → lamindb-0.58.1}/sub/lamindb-setup/lamindb_setup/_check_instance_setup.py +0 -0
- {lamindb-0.57.2 → lamindb-0.58.1}/sub/lamindb-setup/lamindb_setup/_close.py +0 -0
- {lamindb-0.57.2 → lamindb-0.58.1}/sub/lamindb-setup/lamindb_setup/_delete.py +0 -0
- {lamindb-0.57.2 → lamindb-0.58.1}/sub/lamindb-setup/lamindb_setup/_django.py +0 -0
- {lamindb-0.57.2 → lamindb-0.58.1}/sub/lamindb-setup/lamindb_setup/_docstrings.py +0 -0
- {lamindb-0.57.2 → lamindb-0.58.1}/sub/lamindb-setup/lamindb_setup/_export.py +0 -0
- {lamindb-0.57.2 → lamindb-0.58.1}/sub/lamindb-setup/lamindb_setup/_info.py +0 -0
- {lamindb-0.57.2 → lamindb-0.58.1}/sub/lamindb-setup/lamindb_setup/_init_vault.py +0 -0
- {lamindb-0.57.2 → lamindb-0.58.1}/sub/lamindb-setup/lamindb_setup/_migrate.py +0 -0
- {lamindb-0.57.2 → lamindb-0.58.1}/sub/lamindb-setup/lamindb_setup/_register_instance.py +0 -0
- {lamindb-0.57.2 → lamindb-0.58.1}/sub/lamindb-setup/lamindb_setup/_schema.py +0 -0
- {lamindb-0.57.2 → lamindb-0.58.1}/sub/lamindb-setup/lamindb_setup/_set.py +0 -0
- {lamindb-0.57.2 → lamindb-0.58.1}/sub/lamindb-setup/lamindb_setup/_settings.py +0 -0
- {lamindb-0.57.2 → lamindb-0.58.1}/sub/lamindb-setup/lamindb_setup/_setup_user.py +0 -0
- {lamindb-0.57.2 → lamindb-0.58.1}/sub/lamindb-setup/lamindb_setup/_silence_loggers.py +0 -0
- {lamindb-0.57.2 → lamindb-0.58.1}/sub/lamindb-setup/lamindb_setup/dev/__init__.py +0 -0
- {lamindb-0.57.2 → lamindb-0.58.1}/sub/lamindb-setup/lamindb_setup/dev/_deprecated.py +0 -0
- {lamindb-0.57.2 → lamindb-0.58.1}/sub/lamindb-setup/lamindb_setup/dev/_docs.py +0 -0
- {lamindb-0.57.2 → lamindb-0.58.1}/sub/lamindb-setup/lamindb_setup/dev/_hub_client.py +0 -0
- {lamindb-0.57.2 → lamindb-0.58.1}/sub/lamindb-setup/lamindb_setup/dev/_settings_instance.py +0 -0
- {lamindb-0.57.2 → lamindb-0.58.1}/sub/lamindb-setup/lamindb_setup/dev/_settings_load.py +0 -0
- {lamindb-0.57.2 → lamindb-0.58.1}/sub/lamindb-setup/lamindb_setup/dev/_settings_save.py +0 -0
- {lamindb-0.57.2 → lamindb-0.58.1}/sub/lamindb-setup/lamindb_setup/dev/_settings_storage.py +0 -0
- {lamindb-0.57.2 → lamindb-0.58.1}/sub/lamindb-setup/lamindb_setup/dev/_settings_store.py +0 -0
- {lamindb-0.57.2 → lamindb-0.58.1}/sub/lamindb-setup/lamindb_setup/dev/_settings_user.py +0 -0
- {lamindb-0.57.2 → lamindb-0.58.1}/sub/lamindb-setup/lamindb_setup/dev/_setup_bionty_sources.py +0 -0
- {lamindb-0.57.2 → lamindb-0.58.1}/sub/lamindb-setup/lamindb_setup/dev/cloud_sqlite_locker.py +0 -0
- {lamindb-0.57.2 → lamindb-0.58.1}/sub/lamindb-setup/lamindb_setup/dev/django.py +0 -0
- {lamindb-0.57.2 → lamindb-0.58.1}/sub/lamindb-setup/lamindb_setup/dev/upath.py +0 -0
- {lamindb-0.57.2 → lamindb-0.58.1}/sub/lamindb-setup/pyproject.toml +0 -0
- {lamindb-0.57.2 → lamindb-0.58.1}/sub/lamindb-setup/tests/hub-local/conftest.py +0 -0
- {lamindb-0.57.2 → lamindb-0.58.1}/sub/lamindb-setup/tests/notebooks/conftest.py +0 -0
- {lamindb-0.57.2 → lamindb-0.58.1}/sub/lamindb-setup/tests/notebooks/test-notebooks/no-title.ipynb +0 -0
- {lamindb-0.57.2 → lamindb-0.58.1}/sub/lamindb-setup/tests/notebooks/test-notebooks/not-initialized.ipynb +0 -0
- {lamindb-0.57.2 → lamindb-0.58.1}/sub/lamindb-setup/tests/notebooks/test-notebooks/with-title-and-initialized-consecutive.ipynb +0 -0
- {lamindb-0.57.2 → lamindb-0.58.1}/sub/lamindb-setup/tests/notebooks/test-notebooks/with-title-and-initialized-non-consecutive.ipynb +0 -0
- {lamindb-0.57.2 → lamindb-0.58.1}/sub/lamindb-setup/tests/notebooks/test.py +0 -0
- {lamindb-0.57.2 → lamindb-0.58.1}/sub/lamindb-setup/tests/prod-only/conftest.py +0 -0
- {lamindb-0.57.2 → lamindb-0.58.1}/sub/lamindb-setup/tests/prod-only/test_cli.py +0 -0
- {lamindb-0.57.2 → lamindb-0.58.1}/sub/lamindb-setup/tests/prod-only/test_django.py +0 -0
- {lamindb-0.57.2 → lamindb-0.58.1}/sub/lamindb-setup/tests/prod-only/test_switch_and_fallback_env.py +0 -0
- {lamindb-0.57.2 → lamindb-0.58.1}/sub/lamindb-setup/tests/prod-staging/test_delete_instance.py +0 -0
- {lamindb-0.57.2 → lamindb-0.58.1}/sub/lamindb-setup/tests/prod-staging/test_login.py +0 -0
- {lamindb-0.57.2 → lamindb-0.58.1}/sub/lamindb-setup/tests/prod-staging/test_migrate.py +0 -0
- {lamindb-0.57.2 → lamindb-0.58.1}/sub/lamindb-setup/tests/prod-staging/test_set_storage.py +0 -0
- {lamindb-0.57.2 → lamindb-0.58.1}/sub/lamindb-setup/tests/test_load_persistent_instance.py +0 -0
- {lamindb-0.57.2 → lamindb-0.58.1}/sub/lnschema-core/.github/workflows/build.yml +0 -0
- {lamindb-0.57.2 → lamindb-0.58.1}/sub/lnschema-core/.github/workflows/latest-changes.jinja2 +0 -0
- {lamindb-0.57.2 → lamindb-0.58.1}/sub/lnschema-core/.github/workflows/latest-changes.yml +0 -0
- {lamindb-0.57.2 → lamindb-0.58.1}/sub/lnschema-core/.gitignore +0 -0
- {lamindb-0.57.2 → lamindb-0.58.1}/sub/lnschema-core/.pre-commit-config.yaml +0 -0
- {lamindb-0.57.2 → lamindb-0.58.1}/sub/lnschema-core/LICENSE +0 -0
- {lamindb-0.57.2 → lamindb-0.58.1}/sub/lnschema-core/README.md +0 -0
- {lamindb-0.57.2 → lamindb-0.58.1}/sub/lnschema-core/lnschema_core/ids.py +0 -0
- {lamindb-0.57.2 → lamindb-0.58.1}/sub/lnschema-core/lnschema_core/migrations/0001_initial.py +0 -0
- {lamindb-0.57.2 → lamindb-0.58.1}/sub/lnschema-core/lnschema_core/migrations/0001_initial_squashed_0023.py +0 -0
- {lamindb-0.57.2 → lamindb-0.58.1}/sub/lnschema-core/lnschema_core/migrations/0002_alter_user_name.py +0 -0
- {lamindb-0.57.2 → lamindb-0.58.1}/sub/lnschema-core/lnschema_core/migrations/0003_alter_storage_region_alter_transform_short_name.py +0 -0
- {lamindb-0.57.2 → lamindb-0.58.1}/sub/lnschema-core/lnschema_core/migrations/0004_rename_folder_tag_alter_project_folders.py +0 -0
- {lamindb-0.57.2 → lamindb-0.58.1}/sub/lnschema-core/lnschema_core/migrations/0005_alter_run_inputs_delete_runinput.py +0 -0
- {lamindb-0.57.2 → lamindb-0.58.1}/sub/lnschema-core/lnschema_core/migrations/0006_feature_dataset.py +0 -0
- {lamindb-0.57.2 → lamindb-0.58.1}/sub/lnschema-core/lnschema_core/migrations/0007_feature_synonyms_featureset_field_and_more.py +0 -0
- {lamindb-0.57.2 → lamindb-0.58.1}/sub/lnschema-core/lnschema_core/migrations/0008_file_hash_type_transform_parents.py +0 -0
- {lamindb-0.57.2 → lamindb-0.58.1}/sub/lnschema-core/lnschema_core/migrations/0009_remove_featureset_files_feature_unit_and_more.py +0 -0
- {lamindb-0.57.2 → lamindb-0.58.1}/sub/lnschema-core/lnschema_core/migrations/0010_dataset_categories_file_categories.py +0 -0
- {lamindb-0.57.2 → lamindb-0.58.1}/sub/lnschema-core/lnschema_core/migrations/0011_label_remove_tag_created_by_remove_tag_parents_and_more.py +0 -0
- {lamindb-0.57.2 → lamindb-0.58.1}/sub/lnschema-core/lnschema_core/migrations/0012_remove_label_ref_id_remove_label_ref_orm_and_more.py +0 -0
- {lamindb-0.57.2 → lamindb-0.58.1}/sub/lnschema-core/lnschema_core/migrations/0013_remove_feature_labels_orm_and_more.py +0 -0
- {lamindb-0.57.2 → lamindb-0.58.1}/sub/lnschema-core/lnschema_core/migrations/0014_rename_ref_field_featureset_registry.py +0 -0
- {lamindb-0.57.2 → lamindb-0.58.1}/sub/lnschema-core/lnschema_core/migrations/0015_file_initial_version_file_version.py +0 -0
- {lamindb-0.57.2 → lamindb-0.58.1}/sub/lnschema-core/lnschema_core/migrations/0016_dataset_input_of_dataset_run_dataset_transform_and_more.py +0 -0
- {lamindb-0.57.2 → lamindb-0.58.1}/sub/lnschema-core/lnschema_core/migrations/0017_dataset_initial_version_dataset_version.py +0 -0
- {lamindb-0.57.2 → lamindb-0.58.1}/sub/lnschema-core/lnschema_core/migrations/0018_rename_datasetlabel_datasetulabel_and_more.py +0 -0
- {lamindb-0.57.2 → lamindb-0.58.1}/sub/lnschema-core/lnschema_core/migrations/0019_dataset_reference_dataset_reference_type_and_more.py +0 -0
- {lamindb-0.57.2 → lamindb-0.58.1}/sub/lnschema-core/lnschema_core/migrations/0020_run_report_transform_latest_report_and_more.py +0 -0
- {lamindb-0.57.2 → lamindb-0.58.1}/sub/lnschema-core/lnschema_core/migrations/0021_dataset_storage_alter_dataset_file.py +0 -0
- {lamindb-0.57.2 → lamindb-0.58.1}/sub/lnschema-core/lnschema_core/migrations/0022_migrate_to_integer_pks.py +0 -0
- {lamindb-0.57.2 → lamindb-0.58.1}/sub/lnschema-core/lnschema_core/migrations/0023_export_legacy_data.py +0 -0
- {lamindb-0.57.2 → lamindb-0.58.1}/sub/lnschema-core/lnschema_core/migrations/0024_import_legacy_data.py +0 -0
- {lamindb-0.57.2 → lamindb-0.58.1}/sub/lnschema-core/lnschema_core/migrations/0025_remove_user_email.py +0 -0
- {lamindb-0.57.2 → lamindb-0.58.1}/sub/lnschema-core/lnschema_core/migrations/__init__.py +0 -0
- {lamindb-0.57.2 → lamindb-0.58.1}/sub/lnschema-core/lnschema_core/mocks.py +0 -0
- {lamindb-0.57.2 → lamindb-0.58.1}/sub/lnschema-core/lnschema_core/users.py +0 -0
- {lamindb-0.57.2 → lamindb-0.58.1}/sub/lnschema-core/noxfile.py +0 -0
- {lamindb-0.57.2 → lamindb-0.58.1}/sub/lnschema-core/pyproject.toml +0 -0
- {lamindb-0.57.2 → lamindb-0.58.1}/sub/lnschema-core/tests/test_integrity.py +0 -0
- {lamindb-0.57.2 → lamindb-0.58.1}/tests/conftest.py +0 -0
- {lamindb-0.57.2 → lamindb-0.58.1}/tests/test_data.py +0 -0
- {lamindb-0.57.2 → lamindb-0.58.1}/tests/test_db.py +0 -0
- {lamindb-0.57.2 → lamindb-0.58.1}/tests/test_delete.py +0 -0
- {lamindb-0.57.2 → lamindb-0.58.1}/tests/test_feature_set.py +0 -0
- {lamindb-0.57.2 → lamindb-0.58.1}/tests/test_from_values.py +0 -0
- {lamindb-0.57.2 → lamindb-0.58.1}/tests/test_hashing.py +0 -0
- {lamindb-0.57.2 → lamindb-0.58.1}/tests/test_manager.py +0 -0
- {lamindb-0.57.2 → lamindb-0.58.1}/tests/test_queryset.py +0 -0
- {lamindb-0.57.2 → lamindb-0.58.1}/tests/test_run.py +0 -0
- {lamindb-0.57.2 → lamindb-0.58.1}/tests/test_run_context.py +0 -0
- {lamindb-0.57.2 → lamindb-0.58.1}/tests/test_settings.py +0 -0
- {lamindb-0.57.2 → lamindb-0.58.1}/tests/test_storage.py +0 -0
- {lamindb-0.57.2 → lamindb-0.58.1}/tests/test_transfer.py +0 -0
- {lamindb-0.57.2 → lamindb-0.58.1}/tests/test_transform.py +0 -0
- {lamindb-0.57.2 → lamindb-0.58.1}/tests/test_ulabel.py +0 -0
- {lamindb-0.57.2 → lamindb-0.58.1}/tests/test_validate.py +0 -0
- {lamindb-0.57.2 → lamindb-0.58.1}/tests/test_versioning.py +0 -0
- {lamindb-0.57.2 → lamindb-0.58.1}/tests/test_view.py +0 -0
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.1
|
2
2
|
Name: lamindb
|
3
|
-
Version: 0.
|
3
|
+
Version: 0.58.1
|
4
4
|
Summary: A data framework 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.
|
13
|
-
Requires-Dist: lamin_utils==0.11.
|
11
|
+
Requires-Dist: lnschema_core==0.53.0
|
12
|
+
Requires-Dist: lamindb_setup==0.56.3
|
13
|
+
Requires-Dist: lamin_utils==0.11.5
|
14
14
|
Requires-Dist: rapidfuzz
|
15
15
|
Requires-Dist: pyarrow
|
16
16
|
Requires-Dist: typing_extensions!=4.6.0
|
@@ -24,7 +24,7 @@ Requires-Dist: urllib3<2 ; extra == "aws"
|
|
24
24
|
Requires-Dist: boto3==1.28.17 ; extra == "aws"
|
25
25
|
Requires-Dist: aiobotocore==2.5.4 ; extra == "aws"
|
26
26
|
Requires-Dist: fsspec[s3]==2023.9.0 ; extra == "aws"
|
27
|
-
Requires-Dist: lnschema_bionty==0.
|
27
|
+
Requires-Dist: lnschema_bionty==0.34.0 ; extra == "bionty"
|
28
28
|
Requires-Dist: pandas<2 ; extra == "dev"
|
29
29
|
Requires-Dist: pre-commit ; extra == "dev"
|
30
30
|
Requires-Dist: nox ; extra == "dev"
|
@@ -825,7 +825,31 @@
|
|
825
825
|
"source": [
|
826
826
|
"Sometimes, the default source doesn't contain the ontology term you are looking for.\n",
|
827
827
|
"\n",
|
828
|
-
"You can then specify to create a record from a non-default source:"
|
828
|
+
"You can then specify to create a record from a non-default source. For instance, instead of using untyped labels for iris organisms as {doc}`/tutorial2`, we can use the `ncbitaxon` ontology:"
|
829
|
+
]
|
830
|
+
},
|
831
|
+
{
|
832
|
+
"cell_type": "code",
|
833
|
+
"execution_count": null,
|
834
|
+
"metadata": {
|
835
|
+
"tags": [
|
836
|
+
"hide-output"
|
837
|
+
]
|
838
|
+
},
|
839
|
+
"outputs": [],
|
840
|
+
"source": [
|
841
|
+
"bionty_source = lb.BiontySource.filter(entity=\"Organism\", source=\"ncbitaxon\").one()\n",
|
842
|
+
"iris_setosa = lb.Organism.from_bionty(name=\"iris setosa\", bionty_source=bionty_source)\n",
|
843
|
+
"iris_setosa.save()"
|
844
|
+
]
|
845
|
+
},
|
846
|
+
{
|
847
|
+
"cell_type": "code",
|
848
|
+
"execution_count": null,
|
849
|
+
"metadata": {},
|
850
|
+
"outputs": [],
|
851
|
+
"source": [
|
852
|
+
"iris_setosa"
|
829
853
|
]
|
830
854
|
},
|
831
855
|
{
|
@@ -834,9 +858,7 @@
|
|
834
858
|
"metadata": {},
|
835
859
|
"outputs": [],
|
836
860
|
"source": [
|
837
|
-
"bionty_source
|
838
|
-
"age = lb.Phenotype.from_bionty(name=\"age\", bionty_source=bionty_source)\n",
|
839
|
-
"age"
|
861
|
+
"iris_setosa.bionty_source"
|
840
862
|
]
|
841
863
|
},
|
842
864
|
{
|
@@ -845,7 +867,7 @@
|
|
845
867
|
"metadata": {},
|
846
868
|
"outputs": [],
|
847
869
|
"source": [
|
848
|
-
"
|
870
|
+
"iris_setosa.parents.df()"
|
849
871
|
]
|
850
872
|
},
|
851
873
|
{
|
@@ -855,16 +877,40 @@
|
|
855
877
|
"Analogously, you can pass `bionty_source` to bulk-create records from a non-default source:"
|
856
878
|
]
|
857
879
|
},
|
880
|
+
{
|
881
|
+
"cell_type": "code",
|
882
|
+
"execution_count": null,
|
883
|
+
"metadata": {
|
884
|
+
"tags": [
|
885
|
+
"hide-output"
|
886
|
+
]
|
887
|
+
},
|
888
|
+
"outputs": [],
|
889
|
+
"source": [
|
890
|
+
"records = lb.Organism.from_values(\n",
|
891
|
+
" [\"iris setosa\", \"iris versicolor\", \"iris virginica\"], bionty_source=bionty_source\n",
|
892
|
+
")\n",
|
893
|
+
"ln.save(records)"
|
894
|
+
]
|
895
|
+
},
|
858
896
|
{
|
859
897
|
"cell_type": "code",
|
860
898
|
"execution_count": null,
|
861
899
|
"metadata": {},
|
862
900
|
"outputs": [],
|
863
901
|
"source": [
|
864
|
-
"records = lb.Phenotype.from_values([\"age\", \"life span\"], bionty_source=bionty_source)\n",
|
865
902
|
"records"
|
866
903
|
]
|
867
904
|
},
|
905
|
+
{
|
906
|
+
"cell_type": "code",
|
907
|
+
"execution_count": null,
|
908
|
+
"metadata": {},
|
909
|
+
"outputs": [],
|
910
|
+
"source": [
|
911
|
+
"iris_setosa.parents.get(name=\"iris\").view_parents(with_children=True)"
|
912
|
+
]
|
913
|
+
},
|
868
914
|
{
|
869
915
|
"cell_type": "code",
|
870
916
|
"execution_count": null,
|
@@ -896,7 +942,7 @@
|
|
896
942
|
"name": "python",
|
897
943
|
"nbconvert_exporter": "python",
|
898
944
|
"pygments_lexer": "ipython3",
|
899
|
-
"version": "3.
|
945
|
+
"version": "3.9.16"
|
900
946
|
},
|
901
947
|
"nbproject": {
|
902
948
|
"id": "s7F7PezA1HdQ",
|
@@ -1,9 +1,26 @@
|
|
1
1
|
# Changelog
|
2
2
|
|
3
|
+
|
3
4
|
```{eval-rst}
|
4
5
|
.. role:: small
|
5
6
|
```
|
6
7
|
|
8
|
+
## 0.58
|
9
|
+
|
10
|
+
### 0.58.1 {small}`2023-10-26`
|
11
|
+
|
12
|
+
- 🔒️ Re-enable read-only access for public instances [PR1257](https://github.com/laminlabs/lamindb/pull/1257) [@falexwolf](https://github.com/falexwolf)
|
13
|
+
- ✨ Introduce `visibility` to `File` and `Dataset` [PR1254](https://github.com/laminlabs/lamindb/pull/1254) [@sunnyosun](https://github.com/sunnyosun)
|
14
|
+
- 🔒️ Enable to pass DB URLs during load [PR1256](https://github.com/laminlabs/lamindb/pull/1256) [@falexwolf](https://github.com/falexwolf)
|
15
|
+
- ✨ Enable passing filter expressions to lookup and search [PR1255](https://github.com/laminlabs/lamindb/pull/1255) [@sunnyosun](https://github.com/sunnyosun)
|
16
|
+
- ♻️ Use `file.uid` instead of `file.id` in `dataset.load()` [PR1250](https://github.com/laminlabs/lamindb/pull/1250) [@falexwolf](https://github.com/falexwolf)
|
17
|
+
|
18
|
+
### 0.58.0 {small}`2023-10-24`
|
19
|
+
|
20
|
+
- ⚡️ Speed up dataset creation in presence of millions of feature links [PR1248](https://github.com/laminlabs/lamindb/pull/1248) [@falexwolf](https://github.com/falexwolf)
|
21
|
+
- 📝 Add a faq for custom validator [PR1249](https://github.com/laminlabs/lamindb/pull/1249) [@sunnyosun](https://github.com/sunnyosun)
|
22
|
+
- ✨ Add `parents` to `Organism` [PR1245](https://github.com/laminlabs/lamindb/pull/1245) [@sunnyosun](https://github.com/sunnyosun)
|
23
|
+
|
7
24
|
## 0.57
|
8
25
|
|
9
26
|
### 0.57.2 {small}`2023-10-23`
|
@@ -6,7 +6,7 @@
|
|
6
6
|
"id": "41b33aca-1a7d-42b4-afa6-c9a5bccc060c",
|
7
7
|
"metadata": {},
|
8
8
|
"source": [
|
9
|
-
"#
|
9
|
+
"# Will data & metadata stay in sync?"
|
10
10
|
]
|
11
11
|
},
|
12
12
|
{
|
@@ -15,9 +15,15 @@
|
|
15
15
|
"id": "2096971d",
|
16
16
|
"metadata": {},
|
17
17
|
"source": [
|
18
|
-
"
|
19
|
-
|
20
|
-
|
18
|
+
"Here, we walk through different errors that can occur while saving files & metadata records, and show that the LaminDB instance does not get corrupted by dangling metadata or files. You could say transactions across data & metadata are [ACID](https://en.wikipedia.org/wiki/ACID)."
|
19
|
+
]
|
20
|
+
},
|
21
|
+
{
|
22
|
+
"cell_type": "markdown",
|
23
|
+
"id": "cf453c11",
|
24
|
+
"metadata": {},
|
25
|
+
"source": [
|
26
|
+
"## Setup"
|
21
27
|
]
|
22
28
|
},
|
23
29
|
{
|
@@ -29,7 +35,16 @@
|
|
29
35
|
"source": [
|
30
36
|
"from laminci.db import setup_local_test_postgres\n",
|
31
37
|
"\n",
|
32
|
-
"pgurl = setup_local_test_postgres()
|
38
|
+
"pgurl = setup_local_test_postgres()"
|
39
|
+
]
|
40
|
+
},
|
41
|
+
{
|
42
|
+
"cell_type": "code",
|
43
|
+
"execution_count": null,
|
44
|
+
"id": "71969f0c",
|
45
|
+
"metadata": {},
|
46
|
+
"outputs": [],
|
47
|
+
"source": [
|
33
48
|
"!lamin init --db {pgurl} --storage ./test-acid"
|
34
49
|
]
|
35
50
|
},
|
@@ -44,8 +59,7 @@
|
|
44
59
|
"source": [
|
45
60
|
"import pytest\n",
|
46
61
|
"import lamindb as ln\n",
|
47
|
-
"from upath import UPath
|
48
|
-
"from django.db.utils import IntegrityError"
|
62
|
+
"from upath import UPath"
|
49
63
|
]
|
50
64
|
},
|
51
65
|
{
|
@@ -157,15 +171,6 @@
|
|
157
171
|
"## Save error during bulk creation"
|
158
172
|
]
|
159
173
|
},
|
160
|
-
{
|
161
|
-
"attachments": {},
|
162
|
-
"cell_type": "markdown",
|
163
|
-
"id": "a19ab581",
|
164
|
-
"metadata": {},
|
165
|
-
"source": [
|
166
|
-
"### Error during metadata save"
|
167
|
-
]
|
168
|
-
},
|
169
174
|
{
|
170
175
|
"cell_type": "code",
|
171
176
|
"execution_count": null,
|
@@ -175,7 +180,7 @@
|
|
175
180
|
"source": [
|
176
181
|
"filepath = ln.dev.datasets.file_jpg_paradisi05()\n",
|
177
182
|
"file = ln.File(filepath, description=\"My image\")\n",
|
178
|
-
"files = [file, \"this is not
|
183
|
+
"files = [file, \"this is not a record\"]"
|
179
184
|
]
|
180
185
|
},
|
181
186
|
{
|
@@ -219,15 +224,6 @@
|
|
219
224
|
"assert len(files) == 0"
|
220
225
|
]
|
221
226
|
},
|
222
|
-
{
|
223
|
-
"attachments": {},
|
224
|
-
"cell_type": "markdown",
|
225
|
-
"id": "1c6c06d5",
|
226
|
-
"metadata": {},
|
227
|
-
"source": [
|
228
|
-
"## Error in one of the uploads"
|
229
|
-
]
|
230
|
-
},
|
231
227
|
{
|
232
228
|
"attachments": {},
|
233
229
|
"cell_type": "markdown",
|
@@ -237,15 +233,6 @@
|
|
237
233
|
"If a list of data objects is passed to `ln.save()` and the upload of one of these data objects fails, the successful uploads are maintained and a `RuntimeError` is raised, listing the successfully uploaded data objects up until that point."
|
238
234
|
]
|
239
235
|
},
|
240
|
-
{
|
241
|
-
"attachments": {},
|
242
|
-
"cell_type": "markdown",
|
243
|
-
"id": "f1738dfa",
|
244
|
-
"metadata": {},
|
245
|
-
"source": [
|
246
|
-
"Need a proper test here!"
|
247
|
-
]
|
248
|
-
},
|
249
236
|
{
|
250
237
|
"cell_type": "code",
|
251
238
|
"execution_count": null,
|
@@ -0,0 +1,191 @@
|
|
1
|
+
{
|
2
|
+
"cells": [
|
3
|
+
{
|
4
|
+
"cell_type": "markdown",
|
5
|
+
"metadata": {},
|
6
|
+
"source": [
|
7
|
+
"# How to delete records?\n",
|
8
|
+
"\n",
|
9
|
+
"Registry records can be deleted with `record.delete()`, which will **permanently remove** them from your database.\n",
|
10
|
+
"\n",
|
11
|
+
"When it comes to **records of `File` and `Dataset`**, they are **\"moved into trash\"** when you first call `record.delete()`.\n",
|
12
|
+
"- Trashed records are invisible in the UI and excluded from the query results, see [visibility faq](/faq/visibility).\n",
|
13
|
+
"- If a record is already in the trash or `permanent=True` is passed, calling `record.delete()` triggers permanent delete.\n",
|
14
|
+
"- During permanent deletion of a record, its file in storage is also deleted unless it has a semantic `key`."
|
15
|
+
]
|
16
|
+
},
|
17
|
+
{
|
18
|
+
"cell_type": "markdown",
|
19
|
+
"metadata": {},
|
20
|
+
"source": [
|
21
|
+
"## Setup"
|
22
|
+
]
|
23
|
+
},
|
24
|
+
{
|
25
|
+
"cell_type": "code",
|
26
|
+
"execution_count": null,
|
27
|
+
"metadata": {},
|
28
|
+
"outputs": [],
|
29
|
+
"source": [
|
30
|
+
"!lamin init --storage test-delete"
|
31
|
+
]
|
32
|
+
},
|
33
|
+
{
|
34
|
+
"cell_type": "code",
|
35
|
+
"execution_count": null,
|
36
|
+
"metadata": {},
|
37
|
+
"outputs": [],
|
38
|
+
"source": [
|
39
|
+
"import lamindb as ln\n",
|
40
|
+
"import pandas as pd"
|
41
|
+
]
|
42
|
+
},
|
43
|
+
{
|
44
|
+
"cell_type": "code",
|
45
|
+
"execution_count": null,
|
46
|
+
"metadata": {},
|
47
|
+
"outputs": [],
|
48
|
+
"source": [
|
49
|
+
"file = ln.File(pd.DataFrame({\"a\": [1, 2], \"b\": [3, 4]}), description=\"mydf\")\n",
|
50
|
+
"file.save()"
|
51
|
+
]
|
52
|
+
},
|
53
|
+
{
|
54
|
+
"cell_type": "code",
|
55
|
+
"execution_count": null,
|
56
|
+
"metadata": {},
|
57
|
+
"outputs": [],
|
58
|
+
"source": [
|
59
|
+
"ln.File.filter().df()"
|
60
|
+
]
|
61
|
+
},
|
62
|
+
{
|
63
|
+
"cell_type": "markdown",
|
64
|
+
"metadata": {},
|
65
|
+
"source": [
|
66
|
+
"## Trash a file"
|
67
|
+
]
|
68
|
+
},
|
69
|
+
{
|
70
|
+
"cell_type": "code",
|
71
|
+
"execution_count": null,
|
72
|
+
"metadata": {},
|
73
|
+
"outputs": [],
|
74
|
+
"source": [
|
75
|
+
"file.delete()"
|
76
|
+
]
|
77
|
+
},
|
78
|
+
{
|
79
|
+
"cell_type": "markdown",
|
80
|
+
"metadata": {},
|
81
|
+
"source": [
|
82
|
+
"No longer visible:"
|
83
|
+
]
|
84
|
+
},
|
85
|
+
{
|
86
|
+
"cell_type": "code",
|
87
|
+
"execution_count": null,
|
88
|
+
"metadata": {},
|
89
|
+
"outputs": [],
|
90
|
+
"source": [
|
91
|
+
"ln.File.filter().df()"
|
92
|
+
]
|
93
|
+
},
|
94
|
+
{
|
95
|
+
"cell_type": "markdown",
|
96
|
+
"metadata": {},
|
97
|
+
"source": [
|
98
|
+
"But the file still exists in the database, you can find it by not filtering for visibility:"
|
99
|
+
]
|
100
|
+
},
|
101
|
+
{
|
102
|
+
"cell_type": "code",
|
103
|
+
"execution_count": null,
|
104
|
+
"metadata": {},
|
105
|
+
"outputs": [],
|
106
|
+
"source": [
|
107
|
+
"ln.File.filter(visibility=None).df()"
|
108
|
+
]
|
109
|
+
},
|
110
|
+
{
|
111
|
+
"cell_type": "markdown",
|
112
|
+
"metadata": {},
|
113
|
+
"source": [
|
114
|
+
"You can restore a file from trash:"
|
115
|
+
]
|
116
|
+
},
|
117
|
+
{
|
118
|
+
"cell_type": "code",
|
119
|
+
"execution_count": null,
|
120
|
+
"metadata": {},
|
121
|
+
"outputs": [],
|
122
|
+
"source": [
|
123
|
+
"file.restore()"
|
124
|
+
]
|
125
|
+
},
|
126
|
+
{
|
127
|
+
"cell_type": "code",
|
128
|
+
"execution_count": null,
|
129
|
+
"metadata": {},
|
130
|
+
"outputs": [],
|
131
|
+
"source": [
|
132
|
+
"ln.File.filter().df()"
|
133
|
+
]
|
134
|
+
},
|
135
|
+
{
|
136
|
+
"cell_type": "markdown",
|
137
|
+
"metadata": {},
|
138
|
+
"source": [
|
139
|
+
"## Permanent delete\n",
|
140
|
+
"\n",
|
141
|
+
"Calling `file.delete` on a trashed file triggers a permanent delete dialog. You can pass `permanent=True` to auto-confirm the deletion."
|
142
|
+
]
|
143
|
+
},
|
144
|
+
{
|
145
|
+
"cell_type": "code",
|
146
|
+
"execution_count": null,
|
147
|
+
"metadata": {},
|
148
|
+
"outputs": [],
|
149
|
+
"source": [
|
150
|
+
"file.delete(permanent=True)"
|
151
|
+
]
|
152
|
+
},
|
153
|
+
{
|
154
|
+
"cell_type": "markdown",
|
155
|
+
"metadata": {},
|
156
|
+
"source": [
|
157
|
+
"Now its gone in the database:"
|
158
|
+
]
|
159
|
+
},
|
160
|
+
{
|
161
|
+
"cell_type": "code",
|
162
|
+
"execution_count": null,
|
163
|
+
"metadata": {},
|
164
|
+
"outputs": [],
|
165
|
+
"source": [
|
166
|
+
"ln.File.filter(visibility=None).df()"
|
167
|
+
]
|
168
|
+
}
|
169
|
+
],
|
170
|
+
"metadata": {
|
171
|
+
"kernelspec": {
|
172
|
+
"display_name": "py39",
|
173
|
+
"language": "python",
|
174
|
+
"name": "python3"
|
175
|
+
},
|
176
|
+
"language_info": {
|
177
|
+
"codemirror_mode": {
|
178
|
+
"name": "ipython",
|
179
|
+
"version": 3
|
180
|
+
},
|
181
|
+
"file_extension": ".py",
|
182
|
+
"mimetype": "text/x-python",
|
183
|
+
"name": "python",
|
184
|
+
"nbconvert_exporter": "python",
|
185
|
+
"pygments_lexer": "ipython3",
|
186
|
+
"version": "3.9.16"
|
187
|
+
}
|
188
|
+
},
|
189
|
+
"nbformat": 4,
|
190
|
+
"nbformat_minor": 2
|
191
|
+
}
|
@@ -6,7 +6,7 @@
|
|
6
6
|
"id": "fe2d8275-0883-4ffe-9912-920b28efc9d2",
|
7
7
|
"metadata": {},
|
8
8
|
"source": [
|
9
|
-
"#
|
9
|
+
"# What happens if I save the same files & records twice?"
|
10
10
|
]
|
11
11
|
},
|
12
12
|
{
|
@@ -15,9 +15,9 @@
|
|
15
15
|
"id": "dda847ba-c174-4442-acfb-752d6a875645",
|
16
16
|
"metadata": {},
|
17
17
|
"source": [
|
18
|
-
"LaminDB's operations are idempotent
|
19
|
-
"
|
20
|
-
"
|
18
|
+
"LaminDB's operations are idempotent in the sense defined in this document.\n",
|
19
|
+
"\n",
|
20
|
+
"This allows you to re-run a notebook or script without erroring or duplicating data. Similar behavior holds for human data entry.\n",
|
21
21
|
"\n",
|
22
22
|
"## Summary\n",
|
23
23
|
"\n",
|
@@ -27,7 +27,7 @@
|
|
27
27
|
"\n",
|
28
28
|
"1. LaminDB will warn you if a record with similar `name` exists and display a table of similar existing records.\n",
|
29
29
|
"2. You can then decide whether you'd like to save a record to the database or rather query an existing one from the table.\n",
|
30
|
-
"3. If a name already has an exact match in a registry, LaminDB will return it instead of creating a new record.\n",
|
30
|
+
"3. If a name already has an exact match in a registry, LaminDB will return it instead of creating a new record. For versioned entities, also the version must be passed.\n",
|
31
31
|
"\n",
|
32
32
|
"If you set {attr}`~lamindb.dev.Settings.upon_create_search_names` to `False`, you'll directly populate the DB.\n",
|
33
33
|
"\n",
|
@@ -251,7 +251,7 @@
|
|
251
251
|
"id": "01bfec00",
|
252
252
|
"metadata": {},
|
253
253
|
"source": [
|
254
|
-
"###
|
254
|
+
"### Files"
|
255
255
|
]
|
256
256
|
},
|
257
257
|
{
|
@@ -260,7 +260,7 @@
|
|
260
260
|
"id": "431fbcc4",
|
261
261
|
"metadata": {},
|
262
262
|
"source": [
|
263
|
-
"####
|
263
|
+
"#### Warn upon trying to re-ingest an existing file"
|
264
264
|
]
|
265
265
|
},
|
266
266
|
{
|
@@ -380,7 +380,7 @@
|
|
380
380
|
"id": "721bbe4e",
|
381
381
|
"metadata": {},
|
382
382
|
"source": [
|
383
|
-
"####
|
383
|
+
"#### Error upon trying to re-ingest an existing file"
|
384
384
|
]
|
385
385
|
},
|
386
386
|
{
|
@@ -419,7 +419,15 @@
|
|
419
419
|
"id": "cff06da7",
|
420
420
|
"metadata": {},
|
421
421
|
"source": [
|
422
|
-
"####
|
422
|
+
"#### Warn and create a new file"
|
423
|
+
]
|
424
|
+
},
|
425
|
+
{
|
426
|
+
"cell_type": "markdown",
|
427
|
+
"id": "fd806cd8",
|
428
|
+
"metadata": {},
|
429
|
+
"source": [
|
430
|
+
"Lastly, let us discuss the following setting:"
|
423
431
|
]
|
424
432
|
},
|
425
433
|
{
|
@@ -10,7 +10,11 @@
|
|
10
10
|
{
|
11
11
|
"cell_type": "code",
|
12
12
|
"execution_count": null,
|
13
|
-
"metadata": {
|
13
|
+
"metadata": {
|
14
|
+
"tags": [
|
15
|
+
"hide-output"
|
16
|
+
]
|
17
|
+
},
|
14
18
|
"outputs": [],
|
15
19
|
"source": [
|
16
20
|
"!lamin init --storage ./test-notebooks"
|
@@ -31,7 +35,7 @@
|
|
31
35
|
"cell_type": "markdown",
|
32
36
|
"metadata": {},
|
33
37
|
"source": [
|
34
|
-
"The following call will create a new run
|
38
|
+
"The following call will create a new run if there is none in the database."
|
35
39
|
]
|
36
40
|
},
|
37
41
|
{
|
@@ -43,40 +47,29 @@
|
|
43
47
|
"ln.track()"
|
44
48
|
]
|
45
49
|
},
|
46
|
-
{
|
47
|
-
"cell_type": "code",
|
48
|
-
"execution_count": null,
|
49
|
-
"metadata": {
|
50
|
-
"tags": []
|
51
|
-
},
|
52
|
-
"outputs": [],
|
53
|
-
"source": [
|
54
|
-
"run_id = ln.dev.run_context.run.id"
|
55
|
-
]
|
56
|
-
},
|
57
50
|
{
|
58
51
|
"cell_type": "markdown",
|
59
52
|
"metadata": {},
|
60
53
|
"source": [
|
61
|
-
"
|
54
|
+
"Let's store this run:"
|
62
55
|
]
|
63
56
|
},
|
64
57
|
{
|
65
58
|
"cell_type": "code",
|
66
59
|
"execution_count": null,
|
67
|
-
"metadata": {
|
60
|
+
"metadata": {
|
61
|
+
"tags": []
|
62
|
+
},
|
68
63
|
"outputs": [],
|
69
64
|
"source": [
|
70
|
-
"ln.
|
65
|
+
"run = ln.dev.run_context.run"
|
71
66
|
]
|
72
67
|
},
|
73
68
|
{
|
74
|
-
"cell_type": "
|
75
|
-
"execution_count": null,
|
69
|
+
"cell_type": "markdown",
|
76
70
|
"metadata": {},
|
77
|
-
"outputs": [],
|
78
71
|
"source": [
|
79
|
-
"ln.
|
72
|
+
"If there is a run in the database, `ln.track()` will load the latest run:"
|
80
73
|
]
|
81
74
|
},
|
82
75
|
{
|
@@ -85,37 +78,32 @@
|
|
85
78
|
"metadata": {},
|
86
79
|
"outputs": [],
|
87
80
|
"source": [
|
88
|
-
"
|
81
|
+
"ln.track()"
|
89
82
|
]
|
90
83
|
},
|
91
84
|
{
|
92
|
-
"cell_type": "
|
93
|
-
"execution_count": null,
|
85
|
+
"cell_type": "markdown",
|
94
86
|
"metadata": {},
|
95
|
-
"outputs": [],
|
96
87
|
"source": [
|
97
|
-
"
|
88
|
+
"Check whether this is in fact the case:"
|
98
89
|
]
|
99
90
|
},
|
100
91
|
{
|
101
92
|
"cell_type": "code",
|
102
93
|
"execution_count": null,
|
103
94
|
"metadata": {
|
104
|
-
"tags": [
|
105
|
-
"hide-cell"
|
106
|
-
]
|
95
|
+
"tags": []
|
107
96
|
},
|
108
97
|
"outputs": [],
|
109
98
|
"source": [
|
110
|
-
"
|
111
|
-
"assert run_id == ln.run_context.run.id"
|
99
|
+
"assert run.id == ln.run_context.run.id"
|
112
100
|
]
|
113
101
|
},
|
114
102
|
{
|
115
103
|
"cell_type": "markdown",
|
116
104
|
"metadata": {},
|
117
105
|
"source": [
|
118
|
-
"If you'd like to
|
106
|
+
"If you'd like to force creating a new run, pass `new_run=True` (this is the default outside of notebooks)."
|
119
107
|
]
|
120
108
|
},
|
121
109
|
{
|
@@ -127,6 +115,13 @@
|
|
127
115
|
"ln.track(new_run=True)"
|
128
116
|
]
|
129
117
|
},
|
118
|
+
{
|
119
|
+
"cell_type": "markdown",
|
120
|
+
"metadata": {},
|
121
|
+
"source": [
|
122
|
+
"If you'd like to save a notebook including its execution report & source file, use the CLI: `lamin save <my-notebook.ipynb>`"
|
123
|
+
]
|
124
|
+
},
|
130
125
|
{
|
131
126
|
"cell_type": "code",
|
132
127
|
"execution_count": null,
|
@@ -137,15 +132,9 @@
|
|
137
132
|
},
|
138
133
|
"outputs": [],
|
139
134
|
"source": [
|
140
|
-
"
|
141
|
-
|
142
|
-
|
143
|
-
{
|
144
|
-
"cell_type": "code",
|
145
|
-
"execution_count": null,
|
146
|
-
"metadata": {},
|
147
|
-
"outputs": [],
|
148
|
-
"source": [
|
135
|
+
"# test new run id differs from previous run id.\n",
|
136
|
+
"assert run.id != ln.run_context.run.id\n",
|
137
|
+
"\n",
|
149
138
|
"# test re-initialize notebook if it got renamed\n",
|
150
139
|
"from lamindb.dev._run_context import reinitialize_notebook\n",
|
151
140
|
"\n",
|
@@ -154,15 +143,8 @@
|
|
154
143
|
"# outside of CI, will expect interactive user input\n",
|
155
144
|
"transform, metadata = reinitialize_notebook(transform, ask_for_new_id=False)\n",
|
156
145
|
"\n",
|
157
|
-
"assert not transform.uid.startswith(\"FkCpHEubpD\")"
|
158
|
-
|
159
|
-
},
|
160
|
-
{
|
161
|
-
"cell_type": "code",
|
162
|
-
"execution_count": null,
|
163
|
-
"metadata": {},
|
164
|
-
"outputs": [],
|
165
|
-
"source": [
|
146
|
+
"assert not transform.uid.startswith(\"FkCpHEubpD\")\n",
|
147
|
+
"\n",
|
166
148
|
"!lamin delete --force test-notebooks\n",
|
167
149
|
"!rm -r test-notebooks"
|
168
150
|
]
|