lamindb 0.74.2__tar.gz → 0.74.3__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.74.2 → lamindb-0.74.3}/PKG-INFO +4 -4
- {lamindb-0.74.2 → lamindb-0.74.3}/docs/api.md +0 -2
- {lamindb-0.74.2 → lamindb-0.74.3}/lamindb/__init__.py +1 -1
- {lamindb-0.74.2 → lamindb-0.74.3}/lamindb/_record.py +3 -16
- {lamindb-0.74.2 → lamindb-0.74.3}/lamindb/_save.py +5 -23
- {lamindb-0.74.2 → lamindb-0.74.3}/lamindb/core/_feature_manager.py +6 -11
- {lamindb-0.74.2 → lamindb-0.74.3}/lamindb/core/_label_manager.py +10 -16
- {lamindb-0.74.2 → lamindb-0.74.3}/lamindb/core/datasets/_core.py +0 -6
- {lamindb-0.74.2 → lamindb-0.74.3}/pyproject.toml +3 -3
- {lamindb-0.74.2 → lamindb-0.74.3}/sub/bionty/bionty/__init__.py +1 -1
- {lamindb-0.74.2 → lamindb-0.74.3}/sub/bionty/pyproject.toml +1 -1
- {lamindb-0.74.2 → lamindb-0.74.3}/sub/lamindb-setup/.github/workflows/build.yml +1 -1
- {lamindb-0.74.2 → lamindb-0.74.3}/sub/lamindb-setup/.pre-commit-config.yaml +0 -6
- {lamindb-0.74.2 → lamindb-0.74.3}/sub/lamindb-setup/lamindb_setup/__init__.py +1 -1
- {lamindb-0.74.2 → lamindb-0.74.3}/sub/lamindb-setup/lamindb_setup/_connect_instance.py +3 -2
- {lamindb-0.74.2 → lamindb-0.74.3}/sub/lamindb-setup/lamindb_setup/_init_instance.py +4 -1
- {lamindb-0.74.2 → lamindb-0.74.3}/sub/lamindb-setup/lamindb_setup/core/_hub_client.py +4 -2
- {lamindb-0.74.2 → lamindb-0.74.3}/sub/lamindb-setup/lamindb_setup/core/_hub_core.py +20 -16
- lamindb-0.74.3/sub/lamindb-setup/lamindb_setup/core/_hub_utils.py +109 -0
- {lamindb-0.74.2 → lamindb-0.74.3}/sub/lamindb-setup/lamindb_setup/core/_settings_load.py +1 -1
- {lamindb-0.74.2 → lamindb-0.74.3}/sub/lamindb-setup/lamindb_setup/core/_settings_save.py +2 -0
- {lamindb-0.74.2 → lamindb-0.74.3}/sub/lamindb-setup/lamindb_setup/core/_settings_store.py +3 -9
- {lamindb-0.74.2 → lamindb-0.74.3}/sub/lamindb-setup/noxfile.py +5 -1
- {lamindb-0.74.2 → lamindb-0.74.3}/sub/lamindb-setup/pyproject.toml +2 -2
- {lamindb-0.74.2 → lamindb-0.74.3}/sub/lamindb-setup/tests/hub-local/test_all.py +2 -1
- {lamindb-0.74.2 → lamindb-0.74.3}/sub/lnschema-bionty/docs/changelog.md +3 -0
- {lamindb-0.74.2 → lamindb-0.74.3}/sub/lnschema-bionty/lnschema_bionty/__init__.py +1 -1
- {lamindb-0.74.2 → lamindb-0.74.3}/sub/lnschema-bionty/lnschema_bionty/core/__init__.py +1 -0
- lamindb-0.74.3/sub/lnschema-bionty/lnschema_bionty/core/_add_ontology.py +152 -0
- {lamindb-0.74.2 → lamindb-0.74.3}/sub/lnschema-bionty/lnschema_bionty/core/_settings.py +0 -10
- {lamindb-0.74.2 → lamindb-0.74.3}/sub/lnschema-bionty/lnschema_bionty/models.py +56 -21
- {lamindb-0.74.2 → lamindb-0.74.3}/tests/test_can_validate.py +2 -2
- {lamindb-0.74.2 → lamindb-0.74.3}/tests/test_feature_manager.py +0 -4
- {lamindb-0.74.2 → lamindb-0.74.3}/tests/test_from_values.py +1 -1
- {lamindb-0.74.2 → lamindb-0.74.3}/tests/test_parents.py +9 -0
- {lamindb-0.74.2 → lamindb-0.74.3}/tests/test_search.py +1 -2
- {lamindb-0.74.2 → lamindb-0.74.3}/tests/test_transfer.py +3 -3
- lamindb-0.74.2/docs/lamin-utils.md +0 -3
- lamindb-0.74.2/docs/nbproject.md +0 -3
- lamindb-0.74.2/sub/lamindb-setup/lamindb_setup/core/_hub_utils.py +0 -76
- {lamindb-0.74.2 → lamindb-0.74.3}/.github/workflows/build.yml +0 -0
- {lamindb-0.74.2 → lamindb-0.74.3}/.github/workflows/doc-changes.yml +0 -0
- {lamindb-0.74.2 → lamindb-0.74.3}/.gitignore +0 -0
- {lamindb-0.74.2 → lamindb-0.74.3}/.gitmodules +0 -0
- {lamindb-0.74.2 → lamindb-0.74.3}/.pre-commit-config.yaml +0 -0
- {lamindb-0.74.2 → lamindb-0.74.3}/LICENSE +0 -0
- {lamindb-0.74.2 → lamindb-0.74.3}/README.md +0 -0
- {lamindb-0.74.2 → lamindb-0.74.3}/docs/arrays.ipynb +0 -0
- {lamindb-0.74.2 → lamindb-0.74.3}/docs/bio-registries.ipynb +0 -0
- {lamindb-0.74.2 → lamindb-0.74.3}/docs/bionty-base.md +0 -0
- {lamindb-0.74.2 → lamindb-0.74.3}/docs/bionty.md +0 -0
- {lamindb-0.74.2 → lamindb-0.74.3}/docs/changelog.md +0 -0
- {lamindb-0.74.2 → lamindb-0.74.3}/docs/curate-any.ipynb +0 -0
- {lamindb-0.74.2 → lamindb-0.74.3}/docs/curate-df.ipynb +0 -0
- {lamindb-0.74.2 → lamindb-0.74.3}/docs/curate.md +0 -0
- {lamindb-0.74.2 → lamindb-0.74.3}/docs/faq/acid.ipynb +0 -0
- {lamindb-0.74.2 → lamindb-0.74.3}/docs/faq/delete.ipynb +0 -0
- {lamindb-0.74.2 → lamindb-0.74.3}/docs/faq/idempotency.ipynb +0 -0
- {lamindb-0.74.2 → lamindb-0.74.3}/docs/faq/import-schema.ipynb +0 -0
- {lamindb-0.74.2 → lamindb-0.74.3}/docs/faq/keep-artifacts-local.ipynb +0 -0
- {lamindb-0.74.2 → lamindb-0.74.3}/docs/faq/key.ipynb +0 -0
- {lamindb-0.74.2 → lamindb-0.74.3}/docs/faq/reference-field.ipynb +0 -0
- {lamindb-0.74.2 → lamindb-0.74.3}/docs/faq/setup.ipynb +0 -0
- {lamindb-0.74.2 → lamindb-0.74.3}/docs/faq/test_notebooks.py +0 -0
- {lamindb-0.74.2 → lamindb-0.74.3}/docs/faq/track-run-inputs.ipynb +0 -0
- {lamindb-0.74.2 → lamindb-0.74.3}/docs/faq/visibility.ipynb +0 -0
- {lamindb-0.74.2 → lamindb-0.74.3}/docs/faq.md +0 -0
- {lamindb-0.74.2 → lamindb-0.74.3}/docs/guide.md +0 -0
- {lamindb-0.74.2 → lamindb-0.74.3}/docs/includes/features-lamindb.md +0 -0
- {lamindb-0.74.2 → lamindb-0.74.3}/docs/includes/features-laminhub.md +0 -0
- {lamindb-0.74.2 → lamindb-0.74.3}/docs/index.md +0 -0
- {lamindb-0.74.2 → lamindb-0.74.3}/docs/installation.md +0 -0
- {lamindb-0.74.2 → lamindb-0.74.3}/docs/introduction.ipynb +0 -0
- {lamindb-0.74.2 → lamindb-0.74.3}/docs/lamindb.md +0 -0
- {lamindb-0.74.2 → lamindb-0.74.3}/docs/query-search.md +0 -0
- {lamindb-0.74.2 → lamindb-0.74.3}/docs/readfcs.md +0 -0
- {lamindb-0.74.2 → lamindb-0.74.3}/docs/records.ipynb +0 -0
- {lamindb-0.74.2 → lamindb-0.74.3}/docs/schemas.ipynb +0 -0
- {lamindb-0.74.2 → lamindb-0.74.3}/docs/setup.ipynb +0 -0
- {lamindb-0.74.2 → lamindb-0.74.3}/docs/signup-login.md +0 -0
- {lamindb-0.74.2 → lamindb-0.74.3}/docs/storage/add-replace-cache.ipynb +0 -0
- {lamindb-0.74.2 → lamindb-0.74.3}/docs/storage/anndata-accessor.ipynb +0 -0
- {lamindb-0.74.2 → lamindb-0.74.3}/docs/storage/prepare-transfer-local-to-cloud.ipynb +0 -0
- {lamindb-0.74.2 → lamindb-0.74.3}/docs/storage/test-files/iris.csv +0 -0
- {lamindb-0.74.2 → lamindb-0.74.3}/docs/storage/test-files/iris.data +0 -0
- {lamindb-0.74.2 → lamindb-0.74.3}/docs/storage/test-files/new_iris.csv +0 -0
- {lamindb-0.74.2 → lamindb-0.74.3}/docs/storage/test_notebooks.py +0 -0
- {lamindb-0.74.2 → lamindb-0.74.3}/docs/storage/transfer-local-to-cloud.ipynb +0 -0
- {lamindb-0.74.2 → lamindb-0.74.3}/docs/storage/upload.ipynb +0 -0
- {lamindb-0.74.2 → lamindb-0.74.3}/docs/storage/vitessce.ipynb +0 -0
- {lamindb-0.74.2 → lamindb-0.74.3}/docs/storage.md +0 -0
- {lamindb-0.74.2 → lamindb-0.74.3}/docs/test_notebooks.py +0 -0
- {lamindb-0.74.2 → lamindb-0.74.3}/docs/track.ipynb +0 -0
- {lamindb-0.74.2 → lamindb-0.74.3}/docs/transfer.ipynb +0 -0
- {lamindb-0.74.2 → lamindb-0.74.3}/docs/tutorial.ipynb +0 -0
- {lamindb-0.74.2 → lamindb-0.74.3}/docs/tutorial2.ipynb +0 -0
- {lamindb-0.74.2 → lamindb-0.74.3}/docs/wetlab.md +0 -0
- {lamindb-0.74.2 → lamindb-0.74.3}/lamindb/_artifact.py +0 -0
- {lamindb-0.74.2 → lamindb-0.74.3}/lamindb/_can_validate.py +0 -0
- {lamindb-0.74.2 → lamindb-0.74.3}/lamindb/_collection.py +0 -0
- {lamindb-0.74.2 → lamindb-0.74.3}/lamindb/_curate.py +0 -0
- {lamindb-0.74.2 → lamindb-0.74.3}/lamindb/_feature.py +0 -0
- {lamindb-0.74.2 → lamindb-0.74.3}/lamindb/_feature_set.py +0 -0
- {lamindb-0.74.2 → lamindb-0.74.3}/lamindb/_filter.py +0 -0
- {lamindb-0.74.2 → lamindb-0.74.3}/lamindb/_finish.py +0 -0
- {lamindb-0.74.2 → lamindb-0.74.3}/lamindb/_from_values.py +0 -0
- {lamindb-0.74.2 → lamindb-0.74.3}/lamindb/_is_versioned.py +0 -0
- {lamindb-0.74.2 → lamindb-0.74.3}/lamindb/_parents.py +0 -0
- {lamindb-0.74.2 → lamindb-0.74.3}/lamindb/_query_manager.py +0 -0
- {lamindb-0.74.2 → lamindb-0.74.3}/lamindb/_query_set.py +0 -0
- {lamindb-0.74.2 → lamindb-0.74.3}/lamindb/_run.py +0 -0
- {lamindb-0.74.2 → lamindb-0.74.3}/lamindb/_storage.py +0 -0
- {lamindb-0.74.2 → lamindb-0.74.3}/lamindb/_transform.py +0 -0
- {lamindb-0.74.2 → lamindb-0.74.3}/lamindb/_ulabel.py +0 -0
- {lamindb-0.74.2 → lamindb-0.74.3}/lamindb/_utils.py +0 -0
- {lamindb-0.74.2 → lamindb-0.74.3}/lamindb/_view.py +0 -0
- {lamindb-0.74.2 → lamindb-0.74.3}/lamindb/core/__init__.py +0 -0
- {lamindb-0.74.2 → lamindb-0.74.3}/lamindb/core/_data.py +0 -0
- {lamindb-0.74.2 → lamindb-0.74.3}/lamindb/core/_mapped_collection.py +0 -0
- {lamindb-0.74.2 → lamindb-0.74.3}/lamindb/core/_run_context.py +0 -0
- {lamindb-0.74.2 → lamindb-0.74.3}/lamindb/core/_settings.py +0 -0
- {lamindb-0.74.2 → lamindb-0.74.3}/lamindb/core/_sync_git.py +0 -0
- {lamindb-0.74.2 → lamindb-0.74.3}/lamindb/core/_track_environment.py +0 -0
- {lamindb-0.74.2 → lamindb-0.74.3}/lamindb/core/datasets/__init__.py +0 -0
- {lamindb-0.74.2 → lamindb-0.74.3}/lamindb/core/datasets/_fake.py +0 -0
- {lamindb-0.74.2 → lamindb-0.74.3}/lamindb/core/exceptions.py +0 -0
- {lamindb-0.74.2 → lamindb-0.74.3}/lamindb/core/fields.py +0 -0
- {lamindb-0.74.2 → lamindb-0.74.3}/lamindb/core/schema.py +0 -0
- {lamindb-0.74.2 → lamindb-0.74.3}/lamindb/core/storage/__init__.py +0 -0
- {lamindb-0.74.2 → lamindb-0.74.3}/lamindb/core/storage/_anndata_sizes.py +0 -0
- {lamindb-0.74.2 → lamindb-0.74.3}/lamindb/core/storage/_backed_access.py +0 -0
- {lamindb-0.74.2 → lamindb-0.74.3}/lamindb/core/storage/_valid_suffixes.py +0 -0
- {lamindb-0.74.2 → lamindb-0.74.3}/lamindb/core/storage/_zarr.py +0 -0
- {lamindb-0.74.2 → lamindb-0.74.3}/lamindb/core/storage/objects.py +0 -0
- {lamindb-0.74.2 → lamindb-0.74.3}/lamindb/core/storage/paths.py +0 -0
- {lamindb-0.74.2 → lamindb-0.74.3}/lamindb/core/subsettings/__init__.py +0 -0
- {lamindb-0.74.2 → lamindb-0.74.3}/lamindb/core/subsettings/_creation_settings.py +0 -0
- {lamindb-0.74.2 → lamindb-0.74.3}/lamindb/core/subsettings/_transform_settings.py +0 -0
- {lamindb-0.74.2 → lamindb-0.74.3}/lamindb/core/types.py +0 -0
- {lamindb-0.74.2 → lamindb-0.74.3}/lamindb/core/versioning.py +0 -0
- {lamindb-0.74.2 → lamindb-0.74.3}/lamindb/integrations/__init__.py +0 -0
- {lamindb-0.74.2 → lamindb-0.74.3}/lamindb/integrations/_vitessce.py +0 -0
- {lamindb-0.74.2 → lamindb-0.74.3}/lamindb/setup/__init__.py +0 -0
- {lamindb-0.74.2 → lamindb-0.74.3}/lamindb/setup/core/__init__.py +0 -0
- {lamindb-0.74.2 → lamindb-0.74.3}/noxfile.py +0 -0
- {lamindb-0.74.2 → lamindb-0.74.3}/sub/bionty/.github/workflows/build.yml +0 -0
- {lamindb-0.74.2 → lamindb-0.74.3}/sub/bionty/.github/workflows/latest-changes.jinja2 +0 -0
- {lamindb-0.74.2 → lamindb-0.74.3}/sub/bionty/.github/workflows/latest-changes.yml +0 -0
- {lamindb-0.74.2 → lamindb-0.74.3}/sub/bionty/.gitignore +0 -0
- {lamindb-0.74.2 → lamindb-0.74.3}/sub/bionty/.pre-commit-config.yaml +0 -0
- {lamindb-0.74.2 → lamindb-0.74.3}/sub/bionty/LICENSE +0 -0
- {lamindb-0.74.2 → lamindb-0.74.3}/sub/bionty/README.md +0 -0
- {lamindb-0.74.2 → lamindb-0.74.3}/sub/bionty/bionty/core/__init__.py +0 -0
- {lamindb-0.74.2 → lamindb-0.74.3}/sub/bionty/docs/changelog.md +0 -0
- {lamindb-0.74.2 → lamindb-0.74.3}/sub/bionty/docs/index.md +0 -0
- {lamindb-0.74.2 → lamindb-0.74.3}/sub/bionty/docs/reference.md +0 -0
- {lamindb-0.74.2 → lamindb-0.74.3}/sub/bionty/lamin-project.yaml +0 -0
- {lamindb-0.74.2 → lamindb-0.74.3}/sub/bionty/noxfile.py +0 -0
- {lamindb-0.74.2 → lamindb-0.74.3}/sub/bionty/tests/test_notebooks.py +0 -0
- {lamindb-0.74.2 → lamindb-0.74.3}/sub/lamin-cli/.github/workflows/doc-changes.yml +0 -0
- {lamindb-0.74.2 → lamindb-0.74.3}/sub/lamin-cli/.gitignore +0 -0
- {lamindb-0.74.2 → lamindb-0.74.3}/sub/lamin-cli/.pre-commit-config.yaml +0 -0
- {lamindb-0.74.2 → lamindb-0.74.3}/sub/lamin-cli/README.md +0 -0
- {lamindb-0.74.2 → lamindb-0.74.3}/sub/lamin-cli/lamin_cli/__init__.py +0 -0
- {lamindb-0.74.2 → lamindb-0.74.3}/sub/lamin-cli/lamin_cli/__main__.py +0 -0
- {lamindb-0.74.2 → lamindb-0.74.3}/sub/lamin-cli/lamin_cli/_cache.py +0 -0
- {lamindb-0.74.2 → lamindb-0.74.3}/sub/lamin-cli/lamin_cli/_get.py +0 -0
- {lamindb-0.74.2 → lamindb-0.74.3}/sub/lamin-cli/lamin_cli/_migration.py +0 -0
- {lamindb-0.74.2 → lamindb-0.74.3}/sub/lamin-cli/lamin_cli/_save.py +0 -0
- {lamindb-0.74.2 → lamindb-0.74.3}/sub/lamin-cli/pyproject.toml +0 -0
- {lamindb-0.74.2 → lamindb-0.74.3}/sub/lamin-cli/tests/conftest.py +0 -0
- {lamindb-0.74.2 → lamindb-0.74.3}/sub/lamin-cli/tests/notebooks/not-initialized.ipynb +0 -0
- {lamindb-0.74.2 → lamindb-0.74.3}/sub/lamin-cli/tests/notebooks/with-title-and-initialized-consecutive.ipynb +0 -0
- {lamindb-0.74.2 → lamindb-0.74.3}/sub/lamin-cli/tests/notebooks/with-title-and-initialized-non-consecutive.ipynb +0 -0
- {lamindb-0.74.2 → lamindb-0.74.3}/sub/lamin-cli/tests/scripts/merely-import-lamindb.py +0 -0
- {lamindb-0.74.2 → lamindb-0.74.3}/sub/lamin-cli/tests/scripts/run-track-and-finish-sync-git.py +0 -0
- {lamindb-0.74.2 → lamindb-0.74.3}/sub/lamin-cli/tests/scripts/run-track-and-finish.py +0 -0
- {lamindb-0.74.2 → lamindb-0.74.3}/sub/lamin-cli/tests/test_cli.py +0 -0
- {lamindb-0.74.2 → lamindb-0.74.3}/sub/lamin-cli/tests/test_get.py +0 -0
- {lamindb-0.74.2 → lamindb-0.74.3}/sub/lamin-cli/tests/test_migrate.py +0 -0
- {lamindb-0.74.2 → lamindb-0.74.3}/sub/lamin-cli/tests/test_multi_process.py +0 -0
- {lamindb-0.74.2 → lamindb-0.74.3}/sub/lamin-cli/tests/test_save_files.py +0 -0
- {lamindb-0.74.2 → lamindb-0.74.3}/sub/lamin-cli/tests/test_save_notebooks.py +0 -0
- {lamindb-0.74.2 → lamindb-0.74.3}/sub/lamin-cli/tests/test_save_scripts.py +0 -0
- {lamindb-0.74.2 → lamindb-0.74.3}/sub/lamindb-setup/.github/workflows/doc-changes.yml +0 -0
- {lamindb-0.74.2 → lamindb-0.74.3}/sub/lamindb-setup/.gitignore +0 -0
- {lamindb-0.74.2 → lamindb-0.74.3}/sub/lamindb-setup/LICENSE +0 -0
- {lamindb-0.74.2 → lamindb-0.74.3}/sub/lamindb-setup/README.md +0 -0
- {lamindb-0.74.2 → lamindb-0.74.3}/sub/lamindb-setup/docs/changelog.md +0 -0
- {lamindb-0.74.2 → lamindb-0.74.3}/sub/lamindb-setup/docs/hub-cloud/01-init-local-instance.ipynb +0 -0
- {lamindb-0.74.2 → lamindb-0.74.3}/sub/lamindb-setup/docs/hub-cloud/02-connect-local-instance.ipynb +0 -0
- {lamindb-0.74.2 → lamindb-0.74.3}/sub/lamindb-setup/docs/hub-cloud/03-add-managed-storage.ipynb +0 -0
- {lamindb-0.74.2 → lamindb-0.74.3}/sub/lamindb-setup/docs/hub-cloud/04-test-bionty.ipynb +0 -0
- {lamindb-0.74.2 → lamindb-0.74.3}/sub/lamindb-setup/docs/hub-cloud/05-init-hosted-instance.ipynb +0 -0
- {lamindb-0.74.2 → lamindb-0.74.3}/sub/lamindb-setup/docs/hub-cloud/06-connect-hosted-instance.ipynb +0 -0
- {lamindb-0.74.2 → lamindb-0.74.3}/sub/lamindb-setup/docs/hub-cloud/07-keep-artifacts-local.ipynb +0 -0
- {lamindb-0.74.2 → lamindb-0.74.3}/sub/lamindb-setup/docs/hub-cloud/test-multi-session.ipynb +0 -0
- {lamindb-0.74.2 → lamindb-0.74.3}/sub/lamindb-setup/docs/hub-cloud/test_notebooks.py +0 -0
- {lamindb-0.74.2 → lamindb-0.74.3}/sub/lamindb-setup/docs/hub-prod/test-cache-management.ipynb +0 -0
- {lamindb-0.74.2 → lamindb-0.74.3}/sub/lamindb-setup/docs/hub-prod/test-cloud-sync.ipynb +0 -0
- {lamindb-0.74.2 → lamindb-0.74.3}/sub/lamindb-setup/docs/hub-prod/test-connect-anonymously.ipynb +0 -0
- {lamindb-0.74.2 → lamindb-0.74.3}/sub/lamindb-setup/docs/hub-prod/test-empty-init.ipynb +0 -0
- {lamindb-0.74.2 → lamindb-0.74.3}/sub/lamindb-setup/docs/hub-prod/test-import-schema.ipynb +0 -0
- {lamindb-0.74.2 → lamindb-0.74.3}/sub/lamindb-setup/docs/hub-prod/test-insufficient-user-info.ipynb +0 -0
- {lamindb-0.74.2 → lamindb-0.74.3}/sub/lamindb-setup/docs/hub-prod/test-invalid-schema.ipynb +0 -0
- {lamindb-0.74.2 → lamindb-0.74.3}/sub/lamindb-setup/docs/hub-prod/test-sqlite-lock.ipynb +0 -0
- {lamindb-0.74.2 → lamindb-0.74.3}/sub/lamindb-setup/docs/hub-prod/test_notebooks2.py +0 -0
- {lamindb-0.74.2 → lamindb-0.74.3}/sub/lamindb-setup/docs/index.md +0 -0
- {lamindb-0.74.2 → lamindb-0.74.3}/sub/lamindb-setup/docs/notebooks.md +0 -0
- {lamindb-0.74.2 → lamindb-0.74.3}/sub/lamindb-setup/docs/reference.md +0 -0
- {lamindb-0.74.2 → lamindb-0.74.3}/sub/lamindb-setup/lamindb_setup/_cache.py +0 -0
- {lamindb-0.74.2 → lamindb-0.74.3}/sub/lamindb-setup/lamindb_setup/_check.py +0 -0
- {lamindb-0.74.2 → lamindb-0.74.3}/sub/lamindb-setup/lamindb_setup/_check_setup.py +0 -0
- {lamindb-0.74.2 → lamindb-0.74.3}/sub/lamindb-setup/lamindb_setup/_close.py +0 -0
- {lamindb-0.74.2 → lamindb-0.74.3}/sub/lamindb-setup/lamindb_setup/_delete.py +0 -0
- {lamindb-0.74.2 → lamindb-0.74.3}/sub/lamindb-setup/lamindb_setup/_django.py +0 -0
- {lamindb-0.74.2 → lamindb-0.74.3}/sub/lamindb-setup/lamindb_setup/_exportdb.py +0 -0
- {lamindb-0.74.2 → lamindb-0.74.3}/sub/lamindb-setup/lamindb_setup/_importdb.py +0 -0
- {lamindb-0.74.2 → lamindb-0.74.3}/sub/lamindb-setup/lamindb_setup/_migrate.py +0 -0
- {lamindb-0.74.2 → lamindb-0.74.3}/sub/lamindb-setup/lamindb_setup/_register_instance.py +0 -0
- {lamindb-0.74.2 → lamindb-0.74.3}/sub/lamindb-setup/lamindb_setup/_schema.py +0 -0
- {lamindb-0.74.2 → lamindb-0.74.3}/sub/lamindb-setup/lamindb_setup/_schema_metadata.py +0 -0
- {lamindb-0.74.2 → lamindb-0.74.3}/sub/lamindb-setup/lamindb_setup/_set_managed_storage.py +0 -0
- {lamindb-0.74.2 → lamindb-0.74.3}/sub/lamindb-setup/lamindb_setup/_setup_user.py +0 -0
- {lamindb-0.74.2 → lamindb-0.74.3}/sub/lamindb-setup/lamindb_setup/_silence_loggers.py +0 -0
- {lamindb-0.74.2 → lamindb-0.74.3}/sub/lamindb-setup/lamindb_setup/core/__init__.py +0 -0
- {lamindb-0.74.2 → lamindb-0.74.3}/sub/lamindb-setup/lamindb_setup/core/_aws_credentials.py +0 -0
- {lamindb-0.74.2 → lamindb-0.74.3}/sub/lamindb-setup/lamindb_setup/core/_aws_storage.py +0 -0
- {lamindb-0.74.2 → lamindb-0.74.3}/sub/lamindb-setup/lamindb_setup/core/_deprecated.py +0 -0
- {lamindb-0.74.2 → lamindb-0.74.3}/sub/lamindb-setup/lamindb_setup/core/_docs.py +0 -0
- {lamindb-0.74.2 → lamindb-0.74.3}/sub/lamindb-setup/lamindb_setup/core/_hub_crud.py +0 -0
- {lamindb-0.74.2 → lamindb-0.74.3}/sub/lamindb-setup/lamindb_setup/core/_private_django_api.py +0 -0
- {lamindb-0.74.2 → lamindb-0.74.3}/sub/lamindb-setup/lamindb_setup/core/_settings.py +0 -0
- {lamindb-0.74.2 → lamindb-0.74.3}/sub/lamindb-setup/lamindb_setup/core/_settings_instance.py +0 -0
- {lamindb-0.74.2 → lamindb-0.74.3}/sub/lamindb-setup/lamindb_setup/core/_settings_storage.py +0 -0
- {lamindb-0.74.2 → lamindb-0.74.3}/sub/lamindb-setup/lamindb_setup/core/_settings_user.py +0 -0
- {lamindb-0.74.2 → lamindb-0.74.3}/sub/lamindb-setup/lamindb_setup/core/_setup_bionty_sources.py +0 -0
- {lamindb-0.74.2 → lamindb-0.74.3}/sub/lamindb-setup/lamindb_setup/core/cloud_sqlite_locker.py +0 -0
- {lamindb-0.74.2 → lamindb-0.74.3}/sub/lamindb-setup/lamindb_setup/core/django.py +0 -0
- {lamindb-0.74.2 → lamindb-0.74.3}/sub/lamindb-setup/lamindb_setup/core/exceptions.py +0 -0
- {lamindb-0.74.2 → lamindb-0.74.3}/sub/lamindb-setup/lamindb_setup/core/hashing.py +0 -0
- {lamindb-0.74.2 → lamindb-0.74.3}/sub/lamindb-setup/lamindb_setup/core/types.py +0 -0
- {lamindb-0.74.2 → lamindb-0.74.3}/sub/lamindb-setup/lamindb_setup/core/upath.py +0 -0
- {lamindb-0.74.2 → lamindb-0.74.3}/sub/lamindb-setup/tests/hub-cloud/test_connect_instance.py +0 -0
- {lamindb-0.74.2 → lamindb-0.74.3}/sub/lamindb-setup/tests/hub-cloud/test_delete_instance.py +0 -0
- {lamindb-0.74.2 → lamindb-0.74.3}/sub/lamindb-setup/tests/hub-cloud/test_init_instance.py +0 -0
- {lamindb-0.74.2 → lamindb-0.74.3}/sub/lamindb-setup/tests/hub-cloud/test_login.py +0 -0
- {lamindb-0.74.2 → lamindb-0.74.3}/sub/lamindb-setup/tests/hub-cloud/test_migrate.py +0 -0
- {lamindb-0.74.2 → lamindb-0.74.3}/sub/lamindb-setup/tests/hub-cloud/test_set_storage.py +0 -0
- {lamindb-0.74.2 → lamindb-0.74.3}/sub/lamindb-setup/tests/hub-local/conftest.py +0 -0
- {lamindb-0.74.2 → lamindb-0.74.3}/sub/lamindb-setup/tests/hub-local/test_update_schema_in_hub.py +0 -0
- {lamindb-0.74.2 → lamindb-0.74.3}/sub/lamindb-setup/tests/hub-prod/conftest.py +0 -0
- {lamindb-0.74.2 → lamindb-0.74.3}/sub/lamindb-setup/tests/hub-prod/test_django.py +0 -0
- {lamindb-0.74.2 → lamindb-0.74.3}/sub/lamindb-setup/tests/hub-prod/test_global_settings.py +0 -0
- {lamindb-0.74.2 → lamindb-0.74.3}/sub/lamindb-setup/tests/hub-prod/test_switch_and_fallback_env.py +0 -0
- {lamindb-0.74.2 → lamindb-0.74.3}/sub/lamindb-setup/tests/hub-prod/test_upath.py +0 -0
- {lamindb-0.74.2 → lamindb-0.74.3}/sub/lamindb-setup/tests/storage/test_hashing.py +0 -0
- {lamindb-0.74.2 → lamindb-0.74.3}/sub/lamindb-setup/tests/storage/test_storage_access.py +0 -0
- {lamindb-0.74.2 → lamindb-0.74.3}/sub/lamindb-setup/tests/storage/test_storage_basis.py +0 -0
- {lamindb-0.74.2 → lamindb-0.74.3}/sub/lamindb-setup/tests/storage/test_storage_stats.py +0 -0
- {lamindb-0.74.2 → lamindb-0.74.3}/sub/lamindb-setup/tests/storage/test_to_url.py +0 -0
- {lamindb-0.74.2 → lamindb-0.74.3}/sub/lnschema-bionty/.github/workflows/build.yml +0 -0
- {lamindb-0.74.2 → lamindb-0.74.3}/sub/lnschema-bionty/.github/workflows/latest-changes.jinja2 +0 -0
- {lamindb-0.74.2 → lamindb-0.74.3}/sub/lnschema-bionty/.github/workflows/latest-changes.yml +0 -0
- {lamindb-0.74.2 → lamindb-0.74.3}/sub/lnschema-bionty/.gitignore +0 -0
- {lamindb-0.74.2 → lamindb-0.74.3}/sub/lnschema-bionty/.pre-commit-config.yaml +0 -0
- {lamindb-0.74.2 → lamindb-0.74.3}/sub/lnschema-bionty/LICENSE +0 -0
- {lamindb-0.74.2 → lamindb-0.74.3}/sub/lnschema-bionty/README.md +0 -0
- {lamindb-0.74.2 → lamindb-0.74.3}/sub/lnschema-bionty/docs/index.md +0 -0
- {lamindb-0.74.2 → lamindb-0.74.3}/sub/lnschema-bionty/docs/reference.md +0 -0
- {lamindb-0.74.2 → lamindb-0.74.3}/sub/lnschema-bionty/lamin-project.yaml +0 -0
- {lamindb-0.74.2 → lamindb-0.74.3}/sub/lnschema-bionty/lnschema_bionty/_bionty.py +0 -0
- {lamindb-0.74.2 → lamindb-0.74.3}/sub/lnschema-bionty/lnschema_bionty/core/_bionty.py +0 -0
- {lamindb-0.74.2 → lamindb-0.74.3}/sub/lnschema-bionty/lnschema_bionty/ids.py +0 -0
- {lamindb-0.74.2 → lamindb-0.74.3}/sub/lnschema-bionty/lnschema_bionty/migrations/0023_rename_publicsource_encode_uid.py +0 -0
- {lamindb-0.74.2 → lamindb-0.74.3}/sub/lnschema-bionty/lnschema_bionty/migrations/0024_remove_cellline_collections_and_more.py +0 -0
- {lamindb-0.74.2 → lamindb-0.74.3}/sub/lnschema-bionty/lnschema_bionty/migrations/0025_artifactcellline_alter_cellline_artifacts_and_more.py +0 -0
- {lamindb-0.74.2 → lamindb-0.74.3}/sub/lnschema-bionty/lnschema_bionty/migrations/0026_artifactcellline_cell_line_ref_is_name_and_more.py +0 -0
- {lamindb-0.74.2 → lamindb-0.74.3}/sub/lnschema-bionty/lnschema_bionty/migrations/0027_remove_artifactcellline_created_at_and_more.py +0 -0
- {lamindb-0.74.2 → lamindb-0.74.3}/sub/lnschema-bionty/lnschema_bionty/migrations/0028_artifactcellline_created_at_and_more.py +0 -0
- {lamindb-0.74.2 → lamindb-0.74.3}/sub/lnschema-bionty/lnschema_bionty/migrations/0028_squashed.py +0 -0
- {lamindb-0.74.2 → lamindb-0.74.3}/sub/lnschema-bionty/lnschema_bionty/migrations/0029_alter_cellline_previous_runs_and_more.py +0 -0
- {lamindb-0.74.2 → lamindb-0.74.3}/sub/lnschema-bionty/lnschema_bionty/migrations/__init__.py +0 -0
- {lamindb-0.74.2 → lamindb-0.74.3}/sub/lnschema-bionty/noxfile.py +0 -0
- {lamindb-0.74.2 → lamindb-0.74.3}/sub/lnschema-bionty/pyproject.toml +0 -0
- {lamindb-0.74.2 → lamindb-0.74.3}/sub/lnschema-bionty/tests/test_integrity.py +0 -0
- {lamindb-0.74.2 → lamindb-0.74.3}/sub/lnschema-core/.github/workflows/build.yml +0 -0
- {lamindb-0.74.2 → lamindb-0.74.3}/sub/lnschema-core/.github/workflows/doc-changes.yml +0 -0
- {lamindb-0.74.2 → lamindb-0.74.3}/sub/lnschema-core/.gitignore +0 -0
- {lamindb-0.74.2 → lamindb-0.74.3}/sub/lnschema-core/.pre-commit-config.yaml +0 -0
- {lamindb-0.74.2 → lamindb-0.74.3}/sub/lnschema-core/CHANGELOG.md +0 -0
- {lamindb-0.74.2 → lamindb-0.74.3}/sub/lnschema-core/LICENSE +0 -0
- {lamindb-0.74.2 → lamindb-0.74.3}/sub/lnschema-core/README.md +0 -0
- {lamindb-0.74.2 → lamindb-0.74.3}/sub/lnschema-core/lnschema_core/__init__.py +0 -0
- {lamindb-0.74.2 → lamindb-0.74.3}/sub/lnschema-core/lnschema_core/ids.py +0 -0
- {lamindb-0.74.2 → lamindb-0.74.3}/sub/lnschema-core/lnschema_core/migrations/0037_rename_dataset_to_collection.py +0 -0
- {lamindb-0.74.2 → lamindb-0.74.3}/sub/lnschema-core/lnschema_core/migrations/0038_alter_collection_artifact_alter_collection_artifacts_and_more.py +0 -0
- {lamindb-0.74.2 → lamindb-0.74.3}/sub/lnschema-core/lnschema_core/migrations/0039_remove_collection_artifacts_collectionartifact_and_more.py +0 -0
- {lamindb-0.74.2 → lamindb-0.74.3}/sub/lnschema-core/lnschema_core/migrations/0040_alter_transform_type.py +0 -0
- {lamindb-0.74.2 → lamindb-0.74.3}/sub/lnschema-core/lnschema_core/migrations/0041_remove_transform_short_name_transform_description_and_more.py +0 -0
- {lamindb-0.74.2 → lamindb-0.74.3}/sub/lnschema-core/lnschema_core/migrations/0042_rename_run_at_run_started_at_run_finished_at.py +0 -0
- {lamindb-0.74.2 → lamindb-0.74.3}/sub/lnschema-core/lnschema_core/migrations/0043_run_json.py +0 -0
- {lamindb-0.74.2 → lamindb-0.74.3}/sub/lnschema-core/lnschema_core/migrations/0044_run_replicated_outputs_transform_ulabels_and_more.py +0 -0
- {lamindb-0.74.2 → lamindb-0.74.3}/sub/lnschema-core/lnschema_core/migrations/0045_rename_replicated_outputs_run_replicated_output_artifacts_and_more.py +0 -0
- {lamindb-0.74.2 → lamindb-0.74.3}/sub/lnschema-core/lnschema_core/migrations/0046_storage_instance_uid.py +0 -0
- {lamindb-0.74.2 → lamindb-0.74.3}/sub/lnschema-core/lnschema_core/migrations/0047_featurevalue_artifactfeaturevalue_and_more.py +0 -0
- {lamindb-0.74.2 → lamindb-0.74.3}/sub/lnschema-core/lnschema_core/migrations/0048_alter_artifactulabel_feature_and_more.py +0 -0
- {lamindb-0.74.2 → lamindb-0.74.3}/sub/lnschema-core/lnschema_core/migrations/0049_rename_type_feature_dtype_and_more.py +0 -0
- {lamindb-0.74.2 → lamindb-0.74.3}/sub/lnschema-core/lnschema_core/migrations/0050_artifactfeatureset_feature_ref_is_semantic_and_more.py +0 -0
- {lamindb-0.74.2 → lamindb-0.74.3}/sub/lnschema-core/lnschema_core/migrations/0051_remove_feature_feature_sets_featuresetfeature_and_more.py +0 -0
- {lamindb-0.74.2 → lamindb-0.74.3}/sub/lnschema-core/lnschema_core/migrations/0052_rename_feature_value_artifactfeaturevalue_featurevalue_and_more.py +0 -0
- {lamindb-0.74.2 → lamindb-0.74.3}/sub/lnschema-core/lnschema_core/migrations/0052_squashed.py +0 -0
- {lamindb-0.74.2 → lamindb-0.74.3}/sub/lnschema-core/lnschema_core/migrations/0053_alter_featureset_hash_alter_paramvalue_created_by_and_more.py +0 -0
- {lamindb-0.74.2 → lamindb-0.74.3}/sub/lnschema-core/lnschema_core/migrations/0054_alter_feature_previous_runs_and_more.py +0 -0
- {lamindb-0.74.2 → lamindb-0.74.3}/sub/lnschema-core/lnschema_core/migrations/0055_artifact_type_artifactparamvalue_and_more.py +0 -0
- {lamindb-0.74.2 → lamindb-0.74.3}/sub/lnschema-core/lnschema_core/migrations/__init__.py +0 -0
- {lamindb-0.74.2 → lamindb-0.74.3}/sub/lnschema-core/lnschema_core/mocks.py +0 -0
- {lamindb-0.74.2 → lamindb-0.74.3}/sub/lnschema-core/lnschema_core/models.py +0 -0
- {lamindb-0.74.2 → lamindb-0.74.3}/sub/lnschema-core/lnschema_core/types.py +0 -0
- {lamindb-0.74.2 → lamindb-0.74.3}/sub/lnschema-core/lnschema_core/users.py +0 -0
- {lamindb-0.74.2 → lamindb-0.74.3}/sub/lnschema-core/noxfile.py +0 -0
- {lamindb-0.74.2 → lamindb-0.74.3}/sub/lnschema-core/pyproject.toml +0 -0
- {lamindb-0.74.2 → lamindb-0.74.3}/sub/lnschema-core/tests/test_integrity.py +0 -0
- {lamindb-0.74.2 → lamindb-0.74.3}/sub/lnschema-core/tests/test_types.py +0 -0
- {lamindb-0.74.2 → lamindb-0.74.3}/sub/wetlab/.github/workflows/build.yml +0 -0
- {lamindb-0.74.2 → lamindb-0.74.3}/sub/wetlab/.github/workflows/latest-changes.jinja2 +0 -0
- {lamindb-0.74.2 → lamindb-0.74.3}/sub/wetlab/.github/workflows/latest-changes.yml +0 -0
- {lamindb-0.74.2 → lamindb-0.74.3}/sub/wetlab/.gitignore +0 -0
- {lamindb-0.74.2 → lamindb-0.74.3}/sub/wetlab/.pre-commit-config.yaml +0 -0
- {lamindb-0.74.2 → lamindb-0.74.3}/sub/wetlab/README.md +0 -0
- {lamindb-0.74.2 → lamindb-0.74.3}/sub/wetlab/docs/changelog.md +0 -0
- {lamindb-0.74.2 → lamindb-0.74.3}/sub/wetlab/docs/guide/get-started.ipynb +0 -0
- {lamindb-0.74.2 → lamindb-0.74.3}/sub/wetlab/docs/guide.md +0 -0
- {lamindb-0.74.2 → lamindb-0.74.3}/sub/wetlab/docs/index.md +0 -0
- {lamindb-0.74.2 → lamindb-0.74.3}/sub/wetlab/docs/reference.md +0 -0
- {lamindb-0.74.2 → lamindb-0.74.3}/sub/wetlab/noxfile.py +0 -0
- {lamindb-0.74.2 → lamindb-0.74.3}/sub/wetlab/pyproject.toml +0 -0
- {lamindb-0.74.2 → lamindb-0.74.3}/sub/wetlab/tests/test_integrity.py +0 -0
- {lamindb-0.74.2 → lamindb-0.74.3}/sub/wetlab/tests/test_notebooks.py +0 -0
- {lamindb-0.74.2 → lamindb-0.74.3}/sub/wetlab/wetlab/__init__.py +0 -0
- {lamindb-0.74.2 → lamindb-0.74.3}/sub/wetlab/wetlab/migrations/0017_remove_biosample_artifacts.py +0 -0
- {lamindb-0.74.2 → lamindb-0.74.3}/sub/wetlab/wetlab/migrations/0018_squashed.py +0 -0
- {lamindb-0.74.2 → lamindb-0.74.3}/sub/wetlab/wetlab/migrations/0018_well_created_at_well_created_by_well_updated_at.py +0 -0
- {lamindb-0.74.2 → lamindb-0.74.3}/sub/wetlab/wetlab/migrations/0019_alter_treatment_system.py +0 -0
- {lamindb-0.74.2 → lamindb-0.74.3}/sub/wetlab/wetlab/migrations/__init__.py +0 -0
- {lamindb-0.74.2 → lamindb-0.74.3}/sub/wetlab/wetlab/models.py +0 -0
- {lamindb-0.74.2 → lamindb-0.74.3}/tests/conftest.py +0 -0
- {lamindb-0.74.2 → lamindb-0.74.3}/tests/notebooks/initialized-with-nbproject.ipynb +0 -0
- {lamindb-0.74.2 → lamindb-0.74.3}/tests/notebooks/no-title.ipynb +0 -0
- {lamindb-0.74.2 → lamindb-0.74.3}/tests/notebooks/not-initialized.ipynb +0 -0
- {lamindb-0.74.2 → lamindb-0.74.3}/tests/notebooks/with-title-initialized-consecutive-finish-not-last-cell.ipynb +0 -0
- {lamindb-0.74.2 → lamindb-0.74.3}/tests/notebooks/with-title-initialized-consecutive-finish.ipynb +0 -0
- {lamindb-0.74.2 → lamindb-0.74.3}/tests/test_artifact.py +0 -0
- {lamindb-0.74.2 → lamindb-0.74.3}/tests/test_artifact_folders.py +0 -0
- {lamindb-0.74.2 → lamindb-0.74.3}/tests/test_cache.py +0 -0
- {lamindb-0.74.2 → lamindb-0.74.3}/tests/test_collection.py +0 -0
- {lamindb-0.74.2 → lamindb-0.74.3}/tests/test_curate.py +0 -0
- {lamindb-0.74.2 → lamindb-0.74.3}/tests/test_data.py +0 -0
- {lamindb-0.74.2 → lamindb-0.74.3}/tests/test_db.py +0 -0
- {lamindb-0.74.2 → lamindb-0.74.3}/tests/test_delete.py +0 -0
- {lamindb-0.74.2 → lamindb-0.74.3}/tests/test_feature.py +0 -0
- {lamindb-0.74.2 → lamindb-0.74.3}/tests/test_feature_set.py +0 -0
- {lamindb-0.74.2 → lamindb-0.74.3}/tests/test_label_manager.py +0 -0
- {lamindb-0.74.2 → lamindb-0.74.3}/tests/test_load.py +0 -0
- {lamindb-0.74.2 → lamindb-0.74.3}/tests/test_manager.py +0 -0
- {lamindb-0.74.2 → lamindb-0.74.3}/tests/test_notebooks.py +0 -0
- {lamindb-0.74.2 → lamindb-0.74.3}/tests/test_queryset.py +0 -0
- {lamindb-0.74.2 → lamindb-0.74.3}/tests/test_record.py +0 -0
- {lamindb-0.74.2 → lamindb-0.74.3}/tests/test_run.py +0 -0
- {lamindb-0.74.2 → lamindb-0.74.3}/tests/test_run_context.py +0 -0
- {lamindb-0.74.2 → lamindb-0.74.3}/tests/test_save.py +0 -0
- {lamindb-0.74.2 → lamindb-0.74.3}/tests/test_settings.py +0 -0
- {lamindb-0.74.2 → lamindb-0.74.3}/tests/test_storage.py +0 -0
- {lamindb-0.74.2 → lamindb-0.74.3}/tests/test_transform.py +0 -0
- {lamindb-0.74.2 → lamindb-0.74.3}/tests/test_uid.py +0 -0
- {lamindb-0.74.2 → lamindb-0.74.3}/tests/test_ulabel.py +0 -0
- {lamindb-0.74.2 → lamindb-0.74.3}/tests/test_versioning.py +0 -0
- {lamindb-0.74.2 → lamindb-0.74.3}/tests/test_view.py +0 -0
- {lamindb-0.74.2 → lamindb-0.74.3}/tests/test_visibility.py +0 -0
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.1
|
2
2
|
Name: lamindb
|
3
|
-
Version: 0.74.
|
3
|
+
Version: 0.74.3
|
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,7 +10,7 @@ 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.70.5
|
13
|
-
Requires-Dist: lamindb_setup==0.74.
|
13
|
+
Requires-Dist: lamindb_setup==0.74.2
|
14
14
|
Requires-Dist: lamin_utils==0.13.2
|
15
15
|
Requires-Dist: lamin_cli==0.15.0
|
16
16
|
Requires-Dist: rapidfuzz
|
@@ -24,7 +24,7 @@ Requires-Dist: pandas
|
|
24
24
|
Requires-Dist: graphviz
|
25
25
|
Requires-Dist: psycopg2-binary
|
26
26
|
Requires-Dist: lamindb_setup[aws] ; extra == "aws"
|
27
|
-
Requires-Dist: bionty==0.44.
|
27
|
+
Requires-Dist: bionty==0.44.3 ; extra == "bionty"
|
28
28
|
Requires-Dist: pre-commit ; extra == "dev"
|
29
29
|
Requires-Dist: nox ; extra == "dev"
|
30
30
|
Requires-Dist: laminci>=0.3 ; extra == "dev"
|
@@ -37,7 +37,7 @@ Requires-Dist: faker-biology ; extra == "dev"
|
|
37
37
|
Requires-Dist: django-schema-graph ; extra == "erdiagram"
|
38
38
|
Requires-Dist: readfcs>=1.1.8 ; extra == "fcs"
|
39
39
|
Requires-Dist: lamindb_setup[gcp] ; extra == "gcp"
|
40
|
-
Requires-Dist: nbproject==0.10.
|
40
|
+
Requires-Dist: nbproject==0.10.4 ; extra == "jupyter"
|
41
41
|
Requires-Dist: nbstripout==0.6.1 ; extra == "jupyter"
|
42
42
|
Requires-Dist: nbconvert ; extra == "jupyter"
|
43
43
|
Requires-Dist: zarr>=2.16.0 ; extra == "zarr"
|
@@ -529,12 +529,7 @@ def save(self, *args, **kwargs) -> Record:
|
|
529
529
|
if result is not None:
|
530
530
|
init_self_from_db(self, result)
|
531
531
|
else:
|
532
|
-
|
533
|
-
# parents are not saved for the self record
|
534
|
-
save_kwargs = kwargs.copy()
|
535
|
-
if "parents" in save_kwargs:
|
536
|
-
save_kwargs.pop("parents")
|
537
|
-
super(Record, self).save(*args, **save_kwargs)
|
532
|
+
super(Record, self).save(*args, **kwargs)
|
538
533
|
# perform transfer of many-to-many fields
|
539
534
|
# only supported for Artifact and Collection records
|
540
535
|
if db is not None and db != "default" and using_key is None:
|
@@ -554,16 +549,8 @@ def save(self, *args, **kwargs) -> Record:
|
|
554
549
|
self_on_db._state.db = db
|
555
550
|
self_on_db.pk = pk_on_db # manually set the primary key
|
556
551
|
self_on_db.features = FeatureManager(self_on_db)
|
557
|
-
|
558
|
-
|
559
|
-
import bionty as bt
|
560
|
-
|
561
|
-
parents = kwargs.get("parents", bt.settings.auto_save_parents)
|
562
|
-
except ImportError:
|
563
|
-
parents = kwargs.get("parents", True)
|
564
|
-
add_from_kwargs = {"parents": parents}
|
565
|
-
self.features._add_from(self_on_db, **add_from_kwargs)
|
566
|
-
self.labels.add_from(self_on_db, **add_from_kwargs)
|
552
|
+
self.features._add_from(self_on_db)
|
553
|
+
self.labels.add_from(self_on_db)
|
567
554
|
return self
|
568
555
|
|
569
556
|
|
@@ -27,9 +27,7 @@ if TYPE_CHECKING:
|
|
27
27
|
from lamindb_setup.core.upath import UPath
|
28
28
|
|
29
29
|
|
30
|
-
def save(
|
31
|
-
records: Iterable[Record], ignore_conflicts: bool | None = False, **kwargs
|
32
|
-
) -> None:
|
30
|
+
def save(records: Iterable[Record], ignore_conflicts: bool | None = False) -> None:
|
33
31
|
"""Bulk save to registries & storage.
|
34
32
|
|
35
33
|
Note:
|
@@ -47,7 +45,6 @@ def save(
|
|
47
45
|
unique or another constraint. However, it won't inplace update the id
|
48
46
|
fields of records. If you need records with ids, you need to query
|
49
47
|
them from the database.
|
50
|
-
**kwargs: Get kwargs related to parents.
|
51
48
|
|
52
49
|
Examples:
|
53
50
|
|
@@ -87,27 +84,12 @@ def save(
|
|
87
84
|
non_artifacts_with_parents = [
|
88
85
|
r for r in non_artifacts_new if hasattr(r, "_parents")
|
89
86
|
]
|
90
|
-
if len(non_artifacts_with_parents) > 0
|
87
|
+
if len(non_artifacts_with_parents) > 0:
|
91
88
|
# this can only happen within lnschema_bionty right now!!
|
92
89
|
# we might extend to core lamindb later
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
kwargs.get("parents") is None and bt.settings.auto_save_parents
|
97
|
-
):
|
98
|
-
mute = False if kwargs.get("mute") is None else kwargs.get("mute")
|
99
|
-
if not mute:
|
100
|
-
# save the record with parents one by one
|
101
|
-
logger.warning(
|
102
|
-
"now recursing through parents: "
|
103
|
-
"this only happens once, but is much slower than bulk saving"
|
104
|
-
)
|
105
|
-
logger.hint(
|
106
|
-
"you can switch this off via: bt.settings.auto_save_parents ="
|
107
|
-
" False"
|
108
|
-
)
|
109
|
-
for record in non_artifacts_with_parents:
|
110
|
-
record._save_ontology_parents(mute=True)
|
90
|
+
from lnschema_bionty.core import add_ontology
|
91
|
+
|
92
|
+
add_ontology(non_artifacts_with_parents)
|
111
93
|
|
112
94
|
if artifacts:
|
113
95
|
with transaction.atomic():
|
@@ -770,7 +770,7 @@ def _add_set_from_mudata(
|
|
770
770
|
self._host.save()
|
771
771
|
|
772
772
|
|
773
|
-
def _add_from(self, data: HasFeatures
|
773
|
+
def _add_from(self, data: HasFeatures):
|
774
774
|
"""Transfer features from a artifact or collection."""
|
775
775
|
# This only covers feature sets, though.
|
776
776
|
using_key = settings._using_key
|
@@ -782,23 +782,18 @@ def _add_from(self, data: HasFeatures, parents: bool = True):
|
|
782
782
|
# note here the features are transferred based on an unique field
|
783
783
|
field = REGISTRY_UNIQUE_FIELD.get(registry.__name__.lower(), "uid")
|
784
784
|
# TODO: get a default ID field for the registry
|
785
|
-
if hasattr(registry, "ontology_id")
|
785
|
+
if hasattr(registry, "ontology_id"):
|
786
786
|
field = "ontology_id"
|
787
787
|
elif hasattr(registry, "ensembl_gene_id"):
|
788
788
|
field = "ensembl_gene_id"
|
789
789
|
elif hasattr(registry, "uniprotkb_id"):
|
790
790
|
field = "uniprotkb_id"
|
791
|
-
|
792
|
-
if registry.__get_name_with_schema__() == "bionty.Organism":
|
793
|
-
parents = False
|
794
791
|
# this will be e.g. be a list of ontology_ids or uids
|
795
792
|
member_uids = list(members.values_list(field, flat=True))
|
796
|
-
# create records from ontology_id
|
797
|
-
if field == "ontology_id" and len(member_uids) > 0
|
793
|
+
# create records from ontology_id
|
794
|
+
if field == "ontology_id" and len(member_uids) > 0:
|
798
795
|
# create from bionty
|
799
|
-
|
800
|
-
if len(records) > 0:
|
801
|
-
save(records, parents=parents)
|
796
|
+
save(registry.from_values(member_uids, field=field))
|
802
797
|
validated = registry.validate(member_uids, field=field, mute=True)
|
803
798
|
new_members_uids = list(compress(member_uids, ~validated))
|
804
799
|
new_members = members.filter(**{f"{field}__in": new_members_uids}).all()
|
@@ -814,7 +809,7 @@ def _add_from(self, data: HasFeatures, parents: bool = True):
|
|
814
809
|
# in the previous step transfer_fk_to_default_db_bulk
|
815
810
|
transfer_to_default_db(feature, using_key, mute=mute, transfer_fk=False)
|
816
811
|
logger.info(f"saving {n_new_members} new {registry.__name__} records")
|
817
|
-
save(new_members
|
812
|
+
save(new_members)
|
818
813
|
|
819
814
|
# create a new feature set from feature values using the same uid
|
820
815
|
feature_set_self = FeatureSet.from_values(
|
@@ -76,32 +76,28 @@ def print_labels(self: HasFeatures, field: str = "name", print_types: bool = Fal
|
|
76
76
|
|
77
77
|
|
78
78
|
# Alex: is this a label transfer function?
|
79
|
-
def validate_labels(labels: QuerySet | list | dict
|
79
|
+
def validate_labels(labels: QuerySet | list | dict):
|
80
80
|
def validate_labels_registry(
|
81
|
-
labels: QuerySet | list | dict,
|
81
|
+
labels: QuerySet | list | dict,
|
82
82
|
) -> tuple[list[str], list[str]]:
|
83
83
|
if len(labels) == 0:
|
84
84
|
return [], []
|
85
85
|
registry = labels[0].__class__
|
86
86
|
field = REGISTRY_UNIQUE_FIELD.get(registry.__name__.lower(), "uid")
|
87
|
-
if hasattr(registry, "ontology_id")
|
87
|
+
if hasattr(registry, "ontology_id"):
|
88
88
|
field = "ontology_id"
|
89
89
|
elif hasattr(registry, "ensembl_gene_id"):
|
90
90
|
field = "ensembl_gene_id"
|
91
91
|
elif hasattr(registry, "uniprotkb_id"):
|
92
92
|
field = "uniprotkb_id"
|
93
|
-
if registry.__get_name_with_schema__() == "bionty.Organism":
|
94
|
-
parents = False
|
95
93
|
# if the field value is None, use uid field
|
96
94
|
label_uids = np.array(
|
97
95
|
[getattr(label, field) for label in labels if label is not None]
|
98
96
|
)
|
99
|
-
# save labels from ontology_ids
|
97
|
+
# save labels from ontology_ids
|
100
98
|
if field == "ontology_id" and len(label_uids) > 0:
|
101
99
|
try:
|
102
|
-
|
103
|
-
if len(records) > 0:
|
104
|
-
save(records, parents=parents)
|
100
|
+
save(registry.from_values(label_uids, field=field))
|
105
101
|
except Exception: # noqa S110
|
106
102
|
pass
|
107
103
|
field = "uid"
|
@@ -117,11 +113,9 @@ def validate_labels(labels: QuerySet | list | dict, parents: bool = True):
|
|
117
113
|
if isinstance(labels, Dict):
|
118
114
|
result = {}
|
119
115
|
for registry, labels_registry in labels.items():
|
120
|
-
result[registry] = validate_labels_registry(
|
121
|
-
labels_registry, parents=parents
|
122
|
-
)
|
116
|
+
result[registry] = validate_labels_registry(labels_registry)
|
123
117
|
else:
|
124
|
-
return validate_labels_registry(labels
|
118
|
+
return validate_labels_registry(labels)
|
125
119
|
|
126
120
|
|
127
121
|
class LabelManager:
|
@@ -176,7 +170,7 @@ class LabelManager:
|
|
176
170
|
|
177
171
|
return get_labels(self._host, feature=feature, mute=mute, flat_names=flat_names)
|
178
172
|
|
179
|
-
def add_from(self, data: HasFeatures
|
173
|
+
def add_from(self, data: HasFeatures) -> None:
|
180
174
|
"""Add labels from an artifact or collection to another artifact or collection.
|
181
175
|
|
182
176
|
Examples:
|
@@ -202,7 +196,7 @@ class LabelManager:
|
|
202
196
|
data_name_lower = data.__class__.__name__.lower()
|
203
197
|
labels_by_features = defaultdict(list)
|
204
198
|
features = set()
|
205
|
-
_, new_labels = validate_labels(labels
|
199
|
+
_, new_labels = validate_labels(labels)
|
206
200
|
if len(new_labels) > 0:
|
207
201
|
transfer_fk_to_default_db_bulk(new_labels, using_key)
|
208
202
|
for label in labels:
|
@@ -237,7 +231,7 @@ class LabelManager:
|
|
237
231
|
transfer_to_default_db(
|
238
232
|
feature, using_key, mute=True, transfer_fk=False
|
239
233
|
)
|
240
|
-
save(new_features
|
234
|
+
save(new_features)
|
241
235
|
if hasattr(self._host, related_name):
|
242
236
|
for feature_name, labels in labels_by_features.items():
|
243
237
|
if feature_name is not None:
|
@@ -185,8 +185,6 @@ def anndata_mouse_sc_lymph_node(
|
|
185
185
|
|
186
186
|
verbosity = ln.settings.verbosity
|
187
187
|
ln.settings.verbosity = "error"
|
188
|
-
auto_save_parents = bt.settings.auto_save_parents
|
189
|
-
bt.settings.auto_save_parents = False
|
190
188
|
# strain
|
191
189
|
bt.ExperimentalFactor.from_public(ontology_id="EFO:0004472").save()
|
192
190
|
# developmental stage
|
@@ -215,7 +213,6 @@ def anndata_mouse_sc_lymph_node(
|
|
215
213
|
labels += [ln.ULabel(name=name) for name in adata.obs[col]]
|
216
214
|
ln.save(labels)
|
217
215
|
ln.settings.verbosity = verbosity
|
218
|
-
bt.settings.auto_save_parents = auto_save_parents
|
219
216
|
|
220
217
|
return adata
|
221
218
|
|
@@ -313,8 +310,6 @@ def anndata_human_immune_cells(
|
|
313
310
|
|
314
311
|
verbosity = ln.settings.verbosity
|
315
312
|
ln.settings.verbosity = "error"
|
316
|
-
auto_save_parents = bt.settings.auto_save_parents
|
317
|
-
bt.settings.auto_save_parents = False
|
318
313
|
ln.save(
|
319
314
|
bt.Gene.from_values(
|
320
315
|
adata.var.index, field="ensembl_gene_id", organism="human"
|
@@ -331,7 +326,6 @@ def anndata_human_immune_cells(
|
|
331
326
|
bt.ExperimentalFactor.from_public(ontology_id="EFO:0008913").save()
|
332
327
|
ln.save([ln.ULabel(name=name) for name in adata.obs.donor.unique()])
|
333
328
|
ln.settings.verbosity = verbosity
|
334
|
-
bt.settings.auto_save_parents = auto_save_parents
|
335
329
|
return adata
|
336
330
|
|
337
331
|
|
@@ -17,7 +17,7 @@ classifiers = [
|
|
17
17
|
dependencies = [
|
18
18
|
# Lamin PINNED packages
|
19
19
|
"lnschema_core==0.70.5",
|
20
|
-
"lamindb_setup==0.74.
|
20
|
+
"lamindb_setup==0.74.2",
|
21
21
|
"lamin_utils==0.13.2",
|
22
22
|
"lamin_cli==0.15.0",
|
23
23
|
# others
|
@@ -38,7 +38,7 @@ Home = "https://github.com/laminlabs/lamindb"
|
|
38
38
|
|
39
39
|
[project.optional-dependencies]
|
40
40
|
bionty = [
|
41
|
-
"bionty==0.44.
|
41
|
+
"bionty==0.44.3",
|
42
42
|
]
|
43
43
|
aws = [
|
44
44
|
"lamindb_setup[aws]",
|
@@ -47,7 +47,7 @@ gcp = [
|
|
47
47
|
"lamindb_setup[gcp]",
|
48
48
|
]
|
49
49
|
jupyter = [
|
50
|
-
"nbproject==0.10.
|
50
|
+
"nbproject==0.10.4", # keep pinning
|
51
51
|
"nbstripout==0.6.1", # 0.7.0 seems to be broken, 0.6.2 incompatible with orjson
|
52
52
|
"nbconvert",
|
53
53
|
]
|
@@ -122,7 +122,7 @@ Developer API:
|
|
122
122
|
core
|
123
123
|
"""
|
124
124
|
|
125
|
-
__version__ = "0.44.
|
125
|
+
__version__ = "0.44.3"
|
126
126
|
|
127
127
|
import lamindb # this is needed as even the Record base class is defined in lamindb
|
128
128
|
from lamindb_setup._check_setup import InstanceNotSetupError as _InstanceNotSetupError
|
@@ -44,9 +44,3 @@ repos:
|
|
44
44
|
(?x)(
|
45
45
|
tests/hub-local/conftest.py
|
46
46
|
)
|
47
|
-
- repo: https://github.com/pycqa/pydocstyle
|
48
|
-
rev: 6.1.1
|
49
|
-
hooks:
|
50
|
-
- id: pydocstyle
|
51
|
-
args: # google style + __init__, see http://www.pydocstyle.org/en/stable/error_codes.html
|
52
|
-
- --ignore=D100,D101,D102,D103,D104,D106,D107,D203,D204,D213,D215,D400,D401,D403,D404,D406,D407,D408,D409,D412,D413,D417
|
@@ -74,7 +74,8 @@ def update_db_using_local(
|
|
74
74
|
# read from a cached settings file in case the hub result is only
|
75
75
|
# read level or inexistent
|
76
76
|
elif settings_file.exists() and (
|
77
|
-
|
77
|
+
db_dsn_hub.db.user is None
|
78
|
+
or (db_dsn_hub.db.user is not None and "read" in db_dsn_hub.db.user)
|
78
79
|
):
|
79
80
|
isettings = load_instance_settings(settings_file)
|
80
81
|
db_dsn_local = LaminDsnModel(db=isettings.db)
|
@@ -101,7 +102,7 @@ def update_db_using_local(
|
|
101
102
|
scheme=db_dsn_hub.db.scheme,
|
102
103
|
user=db_dsn_local.db.user,
|
103
104
|
password=db_dsn_local.db.password,
|
104
|
-
host=db_dsn_hub.db.host,
|
105
|
+
host=db_dsn_hub.db.host, # type: ignore
|
105
106
|
port=db_dsn_hub.db.port,
|
106
107
|
database=db_dsn_hub.db.database,
|
107
108
|
)
|
@@ -245,7 +245,10 @@ def init(
|
|
245
245
|
if instance_state == "connected":
|
246
246
|
settings.auto_connect = True # we can also debate this switch here
|
247
247
|
return None
|
248
|
-
|
248
|
+
# cannot past instance_id here because instance does not yet exist!
|
249
|
+
# the instance_id field of the storage table is populated at the end of
|
250
|
+
# init_instance_hub
|
251
|
+
ssettings = init_storage(storage)
|
249
252
|
isettings = InstanceSettings(
|
250
253
|
id=instance_id, # type: ignore
|
251
254
|
owner=settings.user.handle,
|
@@ -5,7 +5,7 @@ from urllib.request import urlretrieve
|
|
5
5
|
|
6
6
|
from gotrue.errors import AuthUnknownError
|
7
7
|
from lamin_utils import logger
|
8
|
-
from
|
8
|
+
from pydantic_settings import BaseSettings
|
9
9
|
from supabase import Client, create_client # type: ignore
|
10
10
|
from supabase.lib.client_options import ClientOptions
|
11
11
|
|
@@ -59,9 +59,11 @@ class Environment:
|
|
59
59
|
|
60
60
|
# runs ~0.5s
|
61
61
|
def connect_hub(
|
62
|
-
fallback_env: bool = False, client_options: ClientOptions =
|
62
|
+
fallback_env: bool = False, client_options: ClientOptions | None = None
|
63
63
|
) -> Client:
|
64
64
|
env = Environment(fallback=fallback_env)
|
65
|
+
if client_options is None:
|
66
|
+
client_options = ClientOptions(auto_refresh_token=False)
|
65
67
|
return create_client(env.supabase_api_url, env.supabase_anon_key, client_options)
|
66
68
|
|
67
69
|
|
@@ -93,20 +93,21 @@ def _select_storage(
|
|
93
93
|
return False
|
94
94
|
else:
|
95
95
|
existing_storage = response.data[0]
|
96
|
-
if
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
|
96
|
+
if existing_storage["instance_id"] is not None:
|
97
|
+
if ssettings._instance_id is not None:
|
98
|
+
# consider storage settings that are meant to be managed by an instance
|
99
|
+
if UUID(existing_storage["instance_id"]) != ssettings._instance_id:
|
100
|
+
# everything is alright if the instance_id matches
|
101
|
+
# we're probably just switching storage locations
|
102
|
+
# below can be turned into a warning and then delegate the error
|
103
|
+
# to a unique constraint violation below
|
104
|
+
raise ValueError(
|
105
|
+
f"Storage root {root} is already managed by instance {existing_storage['instance_id']}."
|
106
|
+
)
|
107
|
+
else:
|
108
|
+
# if the request is agnostic of the instance, that's alright,
|
109
|
+
# we'll update the instance_id with what's stored in the hub
|
110
|
+
ssettings._instance_id = UUID(existing_storage["instance_id"])
|
110
111
|
ssettings._uuid_ = UUID(existing_storage["id"])
|
111
112
|
if update_uid:
|
112
113
|
ssettings._uid = existing_storage["lnid"]
|
@@ -145,11 +146,14 @@ def _init_storage(ssettings: StorageSettings, client: Client) -> None:
|
|
145
146
|
id = uuid.uuid5(uuid.NAMESPACE_URL, root)
|
146
147
|
else:
|
147
148
|
id = uuid.uuid4()
|
148
|
-
if ssettings._instance_id is None:
|
149
|
+
if ssettings._instance_id is None and settings._instance_exists:
|
149
150
|
logger.warning(
|
150
151
|
f"will manage storage location {ssettings.root_as_str} with instance {settings.instance.slug}"
|
151
152
|
)
|
152
153
|
ssettings._instance_id = settings.instance._id
|
154
|
+
instance_id_hex = (
|
155
|
+
None if ssettings._instance_id is None else ssettings._instance_id.hex
|
156
|
+
)
|
153
157
|
fields = {
|
154
158
|
"id": id.hex,
|
155
159
|
"lnid": ssettings.uid,
|
@@ -157,7 +161,7 @@ def _init_storage(ssettings: StorageSettings, client: Client) -> None:
|
|
157
161
|
"root": root,
|
158
162
|
"region": ssettings.region,
|
159
163
|
"type": ssettings.type,
|
160
|
-
"instance_id":
|
164
|
+
"instance_id": instance_id_hex,
|
161
165
|
# the empty string is important as we want the user flow to be through LaminHub
|
162
166
|
# if this errors with unique constraint error, the user has to update
|
163
167
|
# the description in LaminHub
|
@@ -0,0 +1,109 @@
|
|
1
|
+
from __future__ import annotations
|
2
|
+
|
3
|
+
from typing import Any, ClassVar, Optional
|
4
|
+
from urllib.parse import urlparse, urlunparse
|
5
|
+
|
6
|
+
from pydantic import BaseModel, Field, GetCoreSchemaHandler
|
7
|
+
from pydantic_core import CoreSchema, core_schema
|
8
|
+
|
9
|
+
|
10
|
+
def validate_schema_arg(schema: str | None = None) -> str:
|
11
|
+
if schema is None or schema == "":
|
12
|
+
return ""
|
13
|
+
# currently no actual validation, can add back if we see a need
|
14
|
+
# the following just strips white spaces
|
15
|
+
to_be_validated = [s.strip() for s in schema.split(",")]
|
16
|
+
return ",".join(to_be_validated)
|
17
|
+
|
18
|
+
|
19
|
+
def validate_db_arg(db: str | None) -> None:
|
20
|
+
if db is not None:
|
21
|
+
LaminDsnModel(db=db)
|
22
|
+
|
23
|
+
|
24
|
+
class LaminDsn(str):
|
25
|
+
allowed_schemes: ClassVar[set[str]] = {
|
26
|
+
"postgresql",
|
27
|
+
# future enabled schemes
|
28
|
+
# "snowflake",
|
29
|
+
# "bigquery"
|
30
|
+
}
|
31
|
+
|
32
|
+
@classmethod
|
33
|
+
def __get_pydantic_core_schema__(
|
34
|
+
cls, source_type: Any, handler: GetCoreSchemaHandler
|
35
|
+
) -> CoreSchema:
|
36
|
+
return core_schema.no_info_after_validator_function(
|
37
|
+
cls.validate,
|
38
|
+
core_schema.str_schema(),
|
39
|
+
serialization=core_schema.plain_serializer_function_ser_schema(str),
|
40
|
+
)
|
41
|
+
|
42
|
+
@classmethod
|
43
|
+
def validate(cls, v: Any) -> LaminDsn:
|
44
|
+
if isinstance(v, str):
|
45
|
+
parsed = urlparse(v)
|
46
|
+
if parsed.scheme not in cls.allowed_schemes:
|
47
|
+
raise ValueError(f"Invalid scheme: {parsed.scheme}")
|
48
|
+
return cls(v)
|
49
|
+
elif isinstance(v, cls):
|
50
|
+
return v
|
51
|
+
else:
|
52
|
+
raise ValueError(f"Invalid value for LaminDsn: {v}")
|
53
|
+
|
54
|
+
@property
|
55
|
+
def user(self) -> str | None:
|
56
|
+
return urlparse(self).username
|
57
|
+
|
58
|
+
@property
|
59
|
+
def password(self) -> str | None:
|
60
|
+
return urlparse(self).password
|
61
|
+
|
62
|
+
@property
|
63
|
+
def host(self) -> str | None:
|
64
|
+
return urlparse(self).hostname
|
65
|
+
|
66
|
+
@property
|
67
|
+
def port(self) -> int | None:
|
68
|
+
return urlparse(self).port
|
69
|
+
|
70
|
+
@property
|
71
|
+
def database(self) -> str:
|
72
|
+
return urlparse(self).path.lstrip("/")
|
73
|
+
|
74
|
+
@property
|
75
|
+
def scheme(self) -> str:
|
76
|
+
return urlparse(self).scheme
|
77
|
+
|
78
|
+
@classmethod
|
79
|
+
def build(
|
80
|
+
cls,
|
81
|
+
*,
|
82
|
+
scheme: str,
|
83
|
+
user: str | None = None,
|
84
|
+
password: str | None = None,
|
85
|
+
host: str,
|
86
|
+
port: int | None = None,
|
87
|
+
database: str | None = None,
|
88
|
+
query: str | None = None,
|
89
|
+
fragment: str | None = None,
|
90
|
+
) -> LaminDsn:
|
91
|
+
netloc = host
|
92
|
+
if port is not None:
|
93
|
+
netloc = f"{netloc}:{port}"
|
94
|
+
if user is not None:
|
95
|
+
auth = user
|
96
|
+
if password is not None:
|
97
|
+
auth = f"{auth}:{password}"
|
98
|
+
netloc = f"{auth}@{netloc}"
|
99
|
+
|
100
|
+
path = f"/{database}" if database else ""
|
101
|
+
|
102
|
+
url = urlunparse((scheme, netloc, path, "", query or "", fragment or ""))
|
103
|
+
return cls(url)
|
104
|
+
|
105
|
+
|
106
|
+
class LaminDsnModel(BaseModel):
|
107
|
+
db: LaminDsn = Field(..., description="The database DSN")
|
108
|
+
|
109
|
+
model_config = {"arbitrary_types_allowed": True}
|
@@ -4,7 +4,7 @@ from typing import TYPE_CHECKING, Optional
|
|
4
4
|
from uuid import UUID, uuid4
|
5
5
|
|
6
6
|
from lamin_utils import logger
|
7
|
-
from pydantic
|
7
|
+
from pydantic import ValidationError
|
8
8
|
|
9
9
|
from ._settings_instance import InstanceSettings
|
10
10
|
from ._settings_storage import StorageSettings
|
@@ -2,7 +2,7 @@ import os
|
|
2
2
|
from pathlib import Path
|
3
3
|
from typing import Optional
|
4
4
|
|
5
|
-
from
|
5
|
+
from pydantic_settings import BaseSettings, SettingsConfigDict
|
6
6
|
|
7
7
|
if "LAMIN_SETTINGS_DIR" in os.environ:
|
8
8
|
# Needed when running with AWS Lambda, as only tmp/ directory has a write access
|
@@ -58,10 +58,7 @@ class InstanceSettingsStore(BaseSettings):
|
|
58
58
|
id: str
|
59
59
|
git_repo: Optional[str]
|
60
60
|
keep_artifacts_local: Optional[bool]
|
61
|
-
|
62
|
-
class Config:
|
63
|
-
env_prefix = "lamindb_instance_"
|
64
|
-
env_file = ".env"
|
61
|
+
model_config = SettingsConfigDict(env_prefix="lamindb_instance_", env_file=".env")
|
65
62
|
|
66
63
|
|
67
64
|
class UserSettingsStore(BaseSettings):
|
@@ -72,7 +69,4 @@ class UserSettingsStore(BaseSettings):
|
|
72
69
|
uuid: str
|
73
70
|
handle: str
|
74
71
|
name: str
|
75
|
-
|
76
|
-
class Config:
|
77
|
-
env_prefix = "lamin_user_"
|
78
|
-
env_file = ".env"
|
72
|
+
model_config = SettingsConfigDict(env_prefix="lamin_user_", env_file=".env")
|