diff --git a/lamindb/__init__.py b/lamindb/__init__.py index 3ab12d6c1..66ac219bc 100644 --- a/lamindb/__init__.py +++ b/lamindb/__init__.py @@ -107,6 +107,14 @@ """ +from lamindb_setup.lazy_import import enable_lazy_imports +from lamindb_setup._check_setup import _check_instance_setup + +enable_lazy_imports( + "lamindb.models", + on_load=lambda mod, attr: _check_instance_setup(from_module="lamindb"), +) + # ruff: noqa: I001 # denote a release candidate for 0.1.0 with 0.1rc1, 0.1a1, 0.1b1, etc. __version__ = "1.6.2" @@ -118,55 +126,47 @@ "ignore", message="The legacy Dask DataFrame implementation is deprecated" ) -from lamindb_setup._check_setup import InstanceNotSetupError as _InstanceNotSetupError -from lamindb_setup._check_setup import _check_instance_setup from lamindb_setup._connect_instance import connect from lamindb_setup.core.upath import UPath - from . import base, errors, setup - -def __getattr__(name): - raise _InstanceNotSetupError() - - -if _check_instance_setup(from_module="lamindb"): - del __getattr__ # so that imports work out - from . import base - from ._tracked import tracked - from ._view import view - from .core._context import context - from .core._settings import settings - from .curators._legacy import CatManager as Curator - from .models import ( - Artifact, - Collection, - Feature, - FeatureSet, # backward compat - Person, - Project, - Reference, - Run, - Schema, - Storage, - Transform, - ULabel, - User, - Space, - Branch, - Record, - Sheet, - ) - from .models.save import save - from . import core - from . import integrations - from . import curators - from . import examples - - track = context._track - finish = context._finish - settings.__doc__ = """Global live settings (:class:`~lamindb.core.Settings`).""" - context.__doc__ = """Global run context (:class:`~lamindb.core.Context`).""" - from django.db.models import Q - - Param = Feature # backward compat +# this is just used for auto connect on import now +_check_instance_setup(from_module="lamindb") + +from ._tracked import tracked +from ._view import view +from .core._context import context +from .core._settings import settings +from .curators._legacy import CatManager as Curator +from .models import ( + Artifact, + Collection, + Feature, + FeatureSet, # backward compat + Person, + Project, + Reference, + Run, + Schema, + Storage, + Transform, + ULabel, + User, + Space, + Branch, + Record, + Sheet, +) +from .models.save import save +from . import core +from . import integrations +from . import curators +from . import examples + +track = context._track +finish = context._finish +settings.__doc__ = """Global live settings (:class:`~lamindb.core.Settings`).""" +context.__doc__ = """Global run context (:class:`~lamindb.core.Context`).""" +from django.db.models import Q + +Param = Feature # backward compat diff --git a/lamindb/curators/_legacy.py b/lamindb/curators/_legacy.py index 4c65b6f49..b858b3479 100644 --- a/lamindb/curators/_legacy.py +++ b/lamindb/curators/_legacy.py @@ -185,12 +185,14 @@ class DataFrameCatManager(CatManager): def __init__( self, df: pd.DataFrame | Artifact, - columns_field: FieldAttr = Feature.name, + columns_field: FieldAttr = ..., columns_names: Iterable[str] | None = None, categoricals: dict[str, FieldAttr] | None = None, sources: dict[str, SQLRecord] | None = None, index: Feature | None = None, ) -> None: + if columns_names is Ellipsis: + columns_names = Feature.name self._non_validated = None self._index = index super().__init__( @@ -326,9 +328,11 @@ def __init__( data: ad.AnnData | Artifact, var_index: FieldAttr | None = None, categoricals: dict[str, FieldAttr] | None = None, - obs_columns: FieldAttr = Feature.name, + obs_columns: FieldAttr = ..., sources: dict[str, SQLRecord] | None = None, ) -> None: + if obs_columns is Ellipsis: + obs_columns = Feature.name if isinstance(var_index, str): raise TypeError( "var_index parameter has to be a field, e.g. Gene.ensembl_gene_id" @@ -932,9 +936,11 @@ def __init__( experiment_uri: UPathStr | Artifact, var_index: dict[str, tuple[str, FieldAttr]], categoricals: dict[str, FieldAttr] | None = None, - obs_columns: FieldAttr = Feature.name, + obs_columns: FieldAttr = ..., sources: dict[str, SQLRecord] | None = None, ): + if obs_columns is Ellipsis: + obs_columns = Feature.name self._obs_fields = categoricals or {} self._var_fields = var_index self._columns_field = obs_columns @@ -1948,9 +1954,11 @@ def from_df( cls, df: pd.DataFrame, categoricals: dict[str, FieldAttr] | None = None, - columns: FieldAttr = Feature.name, + columns: FieldAttr = ..., organism: str | None = None, ) -> DataFrameCatManager: + if columns is Ellipsis: + columns = Feature.name if organism is not None: logger.warning("organism is ignored, define it on the dtype level") return DataFrameCatManager( @@ -1966,10 +1974,12 @@ def from_anndata( data: ad.AnnData | UPathStr, var_index: FieldAttr, categoricals: dict[str, FieldAttr] | None = None, - obs_columns: FieldAttr = Feature.name, + obs_columns: FieldAttr = ..., organism: str | None = None, sources: dict[str, SQLRecord] | None = None, ) -> AnnDataCatManager: + if obs_columns is Ellipsis: + obs_columns = Feature.name if organism is not None: logger.warning("organism is ignored, define it on the dtype level") return AnnDataCatManager( @@ -2006,10 +2016,12 @@ def from_tiledbsoma( experiment_uri: UPathStr, var_index: dict[str, tuple[str, FieldAttr]], categoricals: dict[str, FieldAttr] | None = None, - obs_columns: FieldAttr = Feature.name, + obs_columns: FieldAttr = ..., organism: str | None = None, sources: dict[str, SQLRecord] | None = None, ) -> TiledbsomaCatManager: + if obs_columns is Ellipsis: + obs_columns = Feature.name if organism is not None: logger.warning("organism is ignored, define it on the dtype level") return TiledbsomaCatManager( diff --git a/lamindb/curators/core.py b/lamindb/curators/core.py index e923890cb..23d4ea46d 100644 --- a/lamindb/curators/core.py +++ b/lamindb/curators/core.py @@ -1347,7 +1347,7 @@ class DataFrameCatManager: def __init__( self, df: pd.DataFrame | Artifact, - columns_field: FieldAttr = Feature.name, + columns_field: FieldAttr = ..., columns_names: Iterable[str] | None = None, categoricals: list[Feature] | None = None, sources: dict[str, SQLRecord] | None = None, @@ -1355,6 +1355,8 @@ def __init__( slot: str | None = None, maximal_set: bool = False, ) -> None: + if columns_names is Ellipsis: + columns_names = Feature.name self._non_validated = None self._index = index self._artifact: Artifact = None # pass the dataset as an artifact diff --git a/sub/bionty b/sub/bionty index 9063380ae..039720c0f 160000 --- a/sub/bionty +++ b/sub/bionty @@ -1 +1 @@ -Subproject commit 9063380ae6a876cb260df0ceeb9f275e94d8222b +Subproject commit 039720c0f2c780e607b206b0c3874cf10dccd67d diff --git a/sub/lamindb-setup b/sub/lamindb-setup index 55fdd458f..a408b8cf4 160000 --- a/sub/lamindb-setup +++ b/sub/lamindb-setup @@ -1 +1 @@ -Subproject commit 55fdd458fc85e032034a8ed5804140b75e297408 +Subproject commit a408b8cf4a62cca9634e3a3707f27b711027568b