lamindb_setup 1.9.1__py3-none-any.whl → 1.10.0__py3-none-any.whl
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_setup/__init__.py +107 -107
- lamindb_setup/_cache.py +87 -87
- lamindb_setup/_check_setup.py +192 -166
- lamindb_setup/_connect_instance.py +415 -328
- lamindb_setup/_delete.py +144 -141
- lamindb_setup/_disconnect.py +35 -32
- lamindb_setup/_init_instance.py +430 -440
- lamindb_setup/_migrate.py +278 -266
- lamindb_setup/_register_instance.py +32 -35
- lamindb_setup/_schema_metadata.py +441 -441
- lamindb_setup/_set_managed_storage.py +69 -70
- lamindb_setup/_setup_user.py +172 -133
- lamindb_setup/core/__init__.py +21 -21
- lamindb_setup/core/_aws_options.py +223 -223
- lamindb_setup/core/_aws_storage.py +9 -1
- lamindb_setup/core/_hub_client.py +248 -248
- lamindb_setup/core/_hub_core.py +728 -665
- lamindb_setup/core/_hub_crud.py +227 -227
- lamindb_setup/core/_private_django_api.py +83 -83
- lamindb_setup/core/_settings.py +384 -377
- lamindb_setup/core/_settings_instance.py +577 -569
- lamindb_setup/core/_settings_load.py +141 -141
- lamindb_setup/core/_settings_save.py +95 -95
- lamindb_setup/core/_settings_storage.py +427 -429
- lamindb_setup/core/_settings_store.py +91 -91
- lamindb_setup/core/_settings_user.py +55 -55
- lamindb_setup/core/_setup_bionty_sources.py +44 -44
- lamindb_setup/core/cloud_sqlite_locker.py +240 -240
- lamindb_setup/core/django.py +315 -305
- lamindb_setup/core/exceptions.py +1 -1
- lamindb_setup/core/hashing.py +134 -134
- lamindb_setup/core/types.py +1 -1
- lamindb_setup/core/upath.py +1013 -1013
- lamindb_setup/errors.py +80 -70
- lamindb_setup/types.py +20 -20
- {lamindb_setup-1.9.1.dist-info → lamindb_setup-1.10.0.dist-info}/METADATA +3 -3
- lamindb_setup-1.10.0.dist-info/RECORD +50 -0
- lamindb_setup-1.9.1.dist-info/RECORD +0 -50
- {lamindb_setup-1.9.1.dist-info → lamindb_setup-1.10.0.dist-info}/LICENSE +0 -0
- {lamindb_setup-1.9.1.dist-info → lamindb_setup-1.10.0.dist-info}/WHEEL +0 -0
lamindb_setup/__init__.py
CHANGED
|
@@ -1,107 +1,107 @@
|
|
|
1
|
-
"""Setup & configure LaminDB.
|
|
2
|
-
|
|
3
|
-
Many functions in this "setup API" have a matching command in the :doc:`docs:cli` CLI.
|
|
4
|
-
|
|
5
|
-
Guide: :doc:`docs:setup`.
|
|
6
|
-
|
|
7
|
-
Basic operations:
|
|
8
|
-
|
|
9
|
-
.. autosummary::
|
|
10
|
-
:toctree:
|
|
11
|
-
|
|
12
|
-
login
|
|
13
|
-
logout
|
|
14
|
-
init
|
|
15
|
-
disconnect
|
|
16
|
-
delete
|
|
17
|
-
|
|
18
|
-
Instance operations:
|
|
19
|
-
|
|
20
|
-
.. autosummary::
|
|
21
|
-
:toctree:
|
|
22
|
-
|
|
23
|
-
migrate
|
|
24
|
-
|
|
25
|
-
Modules & settings:
|
|
26
|
-
|
|
27
|
-
.. autosummary::
|
|
28
|
-
:toctree:
|
|
29
|
-
|
|
30
|
-
settings
|
|
31
|
-
core
|
|
32
|
-
django
|
|
33
|
-
errors
|
|
34
|
-
types
|
|
35
|
-
|
|
36
|
-
"""
|
|
37
|
-
|
|
38
|
-
__version__ = "1.
|
|
39
|
-
|
|
40
|
-
import os
|
|
41
|
-
|
|
42
|
-
from packaging import version as packaging_version
|
|
43
|
-
|
|
44
|
-
from . import core, errors, types
|
|
45
|
-
from ._check_setup import _check_instance_setup
|
|
46
|
-
from ._connect_instance import connect
|
|
47
|
-
from ._delete import delete
|
|
48
|
-
from ._disconnect import disconnect
|
|
49
|
-
from ._django import django
|
|
50
|
-
from ._entry_points import call_registered_entry_points as _call_registered_entry_points
|
|
51
|
-
from ._init_instance import init
|
|
52
|
-
from ._migrate import migrate
|
|
53
|
-
from ._register_instance import register
|
|
54
|
-
from ._setup_user import login, logout
|
|
55
|
-
from .core._settings import settings
|
|
56
|
-
|
|
57
|
-
# check that the version of s3fs is higher than the lower bound
|
|
58
|
-
# needed because spatialdata installs old versions of s3fs
|
|
59
|
-
try:
|
|
60
|
-
from s3fs import __version__ as s3fs_version
|
|
61
|
-
|
|
62
|
-
if packaging_version.parse(s3fs_version) < packaging_version.parse("2023.12.2"):
|
|
63
|
-
raise RuntimeError(
|
|
64
|
-
f"The version of s3fs you have ({s3fs_version}) is impompatible "
|
|
65
|
-
"with lamindb, please upgrade it: pip install s3fs>=2023.12.2"
|
|
66
|
-
)
|
|
67
|
-
except ImportError:
|
|
68
|
-
# might be not installed
|
|
69
|
-
pass
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
def _is_CI_environment() -> bool:
|
|
73
|
-
ci_env_vars = [
|
|
74
|
-
"LAMIN_TESTING", # Set by our nox configurations
|
|
75
|
-
"CI", # Commonly set by many CI systems
|
|
76
|
-
"TRAVIS", # Travis CI
|
|
77
|
-
"GITHUB_ACTIONS", # GitHub Actions
|
|
78
|
-
"GITLAB_CI", # GitLab CI/CD
|
|
79
|
-
"CIRCLECI", # CircleCI
|
|
80
|
-
"JENKINS_URL", # Jenkins
|
|
81
|
-
"TEAMCITY_VERSION", # TeamCity
|
|
82
|
-
"BUILDKITE", # Buildkite
|
|
83
|
-
"BITBUCKET_BUILD_NUMBER", # Bitbucket Pipelines
|
|
84
|
-
"APPVEYOR", # AppVeyor
|
|
85
|
-
"AZURE_HTTP_USER_AGENT", # Azure Pipelines
|
|
86
|
-
"BUDDY", # Buddy
|
|
87
|
-
"DRONE", # Drone CI
|
|
88
|
-
"HUDSON_URL", # Hudson
|
|
89
|
-
"CF_BUILD_ID", # Codefresh
|
|
90
|
-
"WERCKER", # Wercker
|
|
91
|
-
"NOW_BUILDER", # ZEIT Now
|
|
92
|
-
"TASKCLUSTER_ROOT_URL", # TaskCluster
|
|
93
|
-
"SEMAPHORE", # Semaphore CI
|
|
94
|
-
"BUILD_ID", # Generic build environments
|
|
95
|
-
]
|
|
96
|
-
return any(env_var in os.environ for env_var in ci_env_vars)
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
_TESTING = _is_CI_environment()
|
|
100
|
-
|
|
101
|
-
# provide a way for other packages to run custom code on import
|
|
102
|
-
_call_registered_entry_points("lamindb_setup.on_import")
|
|
103
|
-
|
|
104
|
-
settings.__doc__ = """Global :class:`~lamindb.setup.core.SetupSettings`."""
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
close = disconnect # backward compatibility
|
|
1
|
+
"""Setup & configure LaminDB.
|
|
2
|
+
|
|
3
|
+
Many functions in this "setup API" have a matching command in the :doc:`docs:cli` CLI.
|
|
4
|
+
|
|
5
|
+
Guide: :doc:`docs:setup`.
|
|
6
|
+
|
|
7
|
+
Basic operations:
|
|
8
|
+
|
|
9
|
+
.. autosummary::
|
|
10
|
+
:toctree:
|
|
11
|
+
|
|
12
|
+
login
|
|
13
|
+
logout
|
|
14
|
+
init
|
|
15
|
+
disconnect
|
|
16
|
+
delete
|
|
17
|
+
|
|
18
|
+
Instance operations:
|
|
19
|
+
|
|
20
|
+
.. autosummary::
|
|
21
|
+
:toctree:
|
|
22
|
+
|
|
23
|
+
migrate
|
|
24
|
+
|
|
25
|
+
Modules & settings:
|
|
26
|
+
|
|
27
|
+
.. autosummary::
|
|
28
|
+
:toctree:
|
|
29
|
+
|
|
30
|
+
settings
|
|
31
|
+
core
|
|
32
|
+
django
|
|
33
|
+
errors
|
|
34
|
+
types
|
|
35
|
+
|
|
36
|
+
"""
|
|
37
|
+
|
|
38
|
+
__version__ = "1.10.0" # denote a release candidate for 0.1.0 with 0.1rc1
|
|
39
|
+
|
|
40
|
+
import os
|
|
41
|
+
|
|
42
|
+
from packaging import version as packaging_version
|
|
43
|
+
|
|
44
|
+
from . import core, errors, types
|
|
45
|
+
from ._check_setup import _check_instance_setup
|
|
46
|
+
from ._connect_instance import connect
|
|
47
|
+
from ._delete import delete
|
|
48
|
+
from ._disconnect import disconnect
|
|
49
|
+
from ._django import django
|
|
50
|
+
from ._entry_points import call_registered_entry_points as _call_registered_entry_points
|
|
51
|
+
from ._init_instance import init
|
|
52
|
+
from ._migrate import migrate
|
|
53
|
+
from ._register_instance import register
|
|
54
|
+
from ._setup_user import login, logout
|
|
55
|
+
from .core._settings import settings
|
|
56
|
+
|
|
57
|
+
# check that the version of s3fs is higher than the lower bound
|
|
58
|
+
# needed because spatialdata installs old versions of s3fs
|
|
59
|
+
try:
|
|
60
|
+
from s3fs import __version__ as s3fs_version
|
|
61
|
+
|
|
62
|
+
if packaging_version.parse(s3fs_version) < packaging_version.parse("2023.12.2"):
|
|
63
|
+
raise RuntimeError(
|
|
64
|
+
f"The version of s3fs you have ({s3fs_version}) is impompatible "
|
|
65
|
+
"with lamindb, please upgrade it: pip install s3fs>=2023.12.2"
|
|
66
|
+
)
|
|
67
|
+
except ImportError:
|
|
68
|
+
# might be not installed
|
|
69
|
+
pass
|
|
70
|
+
|
|
71
|
+
|
|
72
|
+
def _is_CI_environment() -> bool:
|
|
73
|
+
ci_env_vars = [
|
|
74
|
+
"LAMIN_TESTING", # Set by our nox configurations
|
|
75
|
+
"CI", # Commonly set by many CI systems
|
|
76
|
+
"TRAVIS", # Travis CI
|
|
77
|
+
"GITHUB_ACTIONS", # GitHub Actions
|
|
78
|
+
"GITLAB_CI", # GitLab CI/CD
|
|
79
|
+
"CIRCLECI", # CircleCI
|
|
80
|
+
"JENKINS_URL", # Jenkins
|
|
81
|
+
"TEAMCITY_VERSION", # TeamCity
|
|
82
|
+
"BUILDKITE", # Buildkite
|
|
83
|
+
"BITBUCKET_BUILD_NUMBER", # Bitbucket Pipelines
|
|
84
|
+
"APPVEYOR", # AppVeyor
|
|
85
|
+
"AZURE_HTTP_USER_AGENT", # Azure Pipelines
|
|
86
|
+
"BUDDY", # Buddy
|
|
87
|
+
"DRONE", # Drone CI
|
|
88
|
+
"HUDSON_URL", # Hudson
|
|
89
|
+
"CF_BUILD_ID", # Codefresh
|
|
90
|
+
"WERCKER", # Wercker
|
|
91
|
+
"NOW_BUILDER", # ZEIT Now
|
|
92
|
+
"TASKCLUSTER_ROOT_URL", # TaskCluster
|
|
93
|
+
"SEMAPHORE", # Semaphore CI
|
|
94
|
+
"BUILD_ID", # Generic build environments
|
|
95
|
+
]
|
|
96
|
+
return any(env_var in os.environ for env_var in ci_env_vars)
|
|
97
|
+
|
|
98
|
+
|
|
99
|
+
_TESTING = _is_CI_environment()
|
|
100
|
+
|
|
101
|
+
# provide a way for other packages to run custom code on import
|
|
102
|
+
_call_registered_entry_points("lamindb_setup.on_import")
|
|
103
|
+
|
|
104
|
+
settings.__doc__ = """Global :class:`~lamindb.setup.core.SetupSettings`."""
|
|
105
|
+
|
|
106
|
+
|
|
107
|
+
close = disconnect # backward compatibility
|
lamindb_setup/_cache.py
CHANGED
|
@@ -1,87 +1,87 @@
|
|
|
1
|
-
from __future__ import annotations
|
|
2
|
-
|
|
3
|
-
import shutil
|
|
4
|
-
from pathlib import Path
|
|
5
|
-
|
|
6
|
-
from dotenv import dotenv_values
|
|
7
|
-
from lamin_utils import logger
|
|
8
|
-
|
|
9
|
-
from .core._settings_save import save_platform_user_storage_settings
|
|
10
|
-
from .core._settings_store import system_settings_file
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
cache_dir = settings.cache_dir
|
|
27
|
-
if cache_dir.exists():
|
|
28
|
-
shutil.rmtree(cache_dir)
|
|
29
|
-
cache_dir.mkdir()
|
|
30
|
-
logger.success("the cache directory was cleared")
|
|
31
|
-
else:
|
|
32
|
-
logger.warning("the cache directory doesn't exist")
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
def get_cache_dir():
|
|
36
|
-
from lamindb_setup import settings
|
|
37
|
-
|
|
38
|
-
return settings.cache_dir.as_posix()
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
def set_cache_dir(cache_dir: str):
|
|
42
|
-
from lamindb_setup.core._settings import (
|
|
43
|
-
DEFAULT_CACHE_DIR,
|
|
44
|
-
_process_cache_path,
|
|
45
|
-
settings,
|
|
46
|
-
)
|
|
47
|
-
|
|
48
|
-
old_cache_dir = settings.cache_dir
|
|
49
|
-
new_cache_dir = _process_cache_path(cache_dir)
|
|
50
|
-
|
|
51
|
-
system_cache_dir = None
|
|
52
|
-
if (system_settings := system_settings_file()).exists():
|
|
53
|
-
system_cache_dir = dotenv_values(system_settings).get(
|
|
54
|
-
"lamindb_cache_path", None
|
|
55
|
-
)
|
|
56
|
-
system_cache_dir = (
|
|
57
|
-
Path(system_cache_dir) if system_cache_dir is not None else None
|
|
58
|
-
)
|
|
59
|
-
|
|
60
|
-
need_reset = False
|
|
61
|
-
if new_cache_dir is None:
|
|
62
|
-
need_reset = True
|
|
63
|
-
new_cache_dir = (
|
|
64
|
-
DEFAULT_CACHE_DIR if system_cache_dir is None else system_cache_dir
|
|
65
|
-
)
|
|
66
|
-
|
|
67
|
-
if new_cache_dir != old_cache_dir:
|
|
68
|
-
if old_cache_dir.exists():
|
|
69
|
-
shutil.copytree(old_cache_dir, new_cache_dir, dirs_exist_ok=True)
|
|
70
|
-
logger.info(
|
|
71
|
-
f"the current cache directory was copied to {new_cache_dir.as_posix()} "
|
|
72
|
-
)
|
|
73
|
-
if old_cache_dir != system_cache_dir:
|
|
74
|
-
shutil.rmtree(old_cache_dir)
|
|
75
|
-
logger.info(
|
|
76
|
-
f"cleared the old cache directory {old_cache_dir.as_posix()}"
|
|
77
|
-
)
|
|
78
|
-
else:
|
|
79
|
-
logger.info(
|
|
80
|
-
f"didn't clear the system cache directory {system_cache_dir.as_posix()}, "
|
|
81
|
-
"please clear it manually if you need"
|
|
82
|
-
)
|
|
83
|
-
else:
|
|
84
|
-
new_cache_dir.mkdir(parents=True, exist_ok=True)
|
|
85
|
-
new_cache_dir = new_cache_dir.resolve()
|
|
86
|
-
save_platform_user_storage_settings(None if need_reset else new_cache_dir)
|
|
87
|
-
settings._cache_dir = new_cache_dir
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
import shutil
|
|
4
|
+
from pathlib import Path
|
|
5
|
+
|
|
6
|
+
from dotenv import dotenv_values
|
|
7
|
+
from lamin_utils import logger
|
|
8
|
+
|
|
9
|
+
from .core._settings_save import save_platform_user_storage_settings
|
|
10
|
+
from .core._settings_store import system_settings_file
|
|
11
|
+
from .errors import CurrentInstanceNotConfigured
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
def clear_cache_dir():
|
|
15
|
+
from lamindb_setup import disconnect, settings
|
|
16
|
+
|
|
17
|
+
try:
|
|
18
|
+
if settings.instance._is_cloud_sqlite:
|
|
19
|
+
logger.warning(
|
|
20
|
+
"disconnecting the current instance to update the cloud sqlite database."
|
|
21
|
+
)
|
|
22
|
+
disconnect()
|
|
23
|
+
except CurrentInstanceNotConfigured:
|
|
24
|
+
pass
|
|
25
|
+
|
|
26
|
+
cache_dir = settings.cache_dir
|
|
27
|
+
if cache_dir.exists():
|
|
28
|
+
shutil.rmtree(cache_dir)
|
|
29
|
+
cache_dir.mkdir()
|
|
30
|
+
logger.success("the cache directory was cleared")
|
|
31
|
+
else:
|
|
32
|
+
logger.warning("the cache directory doesn't exist")
|
|
33
|
+
|
|
34
|
+
|
|
35
|
+
def get_cache_dir():
|
|
36
|
+
from lamindb_setup import settings
|
|
37
|
+
|
|
38
|
+
return settings.cache_dir.as_posix()
|
|
39
|
+
|
|
40
|
+
|
|
41
|
+
def set_cache_dir(cache_dir: str):
|
|
42
|
+
from lamindb_setup.core._settings import (
|
|
43
|
+
DEFAULT_CACHE_DIR,
|
|
44
|
+
_process_cache_path,
|
|
45
|
+
settings,
|
|
46
|
+
)
|
|
47
|
+
|
|
48
|
+
old_cache_dir = settings.cache_dir
|
|
49
|
+
new_cache_dir = _process_cache_path(cache_dir)
|
|
50
|
+
|
|
51
|
+
system_cache_dir = None
|
|
52
|
+
if (system_settings := system_settings_file()).exists():
|
|
53
|
+
system_cache_dir = dotenv_values(system_settings).get(
|
|
54
|
+
"lamindb_cache_path", None
|
|
55
|
+
)
|
|
56
|
+
system_cache_dir = (
|
|
57
|
+
Path(system_cache_dir) if system_cache_dir is not None else None
|
|
58
|
+
)
|
|
59
|
+
|
|
60
|
+
need_reset = False
|
|
61
|
+
if new_cache_dir is None:
|
|
62
|
+
need_reset = True
|
|
63
|
+
new_cache_dir = (
|
|
64
|
+
DEFAULT_CACHE_DIR if system_cache_dir is None else system_cache_dir
|
|
65
|
+
)
|
|
66
|
+
|
|
67
|
+
if new_cache_dir != old_cache_dir:
|
|
68
|
+
if old_cache_dir.exists():
|
|
69
|
+
shutil.copytree(old_cache_dir, new_cache_dir, dirs_exist_ok=True)
|
|
70
|
+
logger.info(
|
|
71
|
+
f"the current cache directory was copied to {new_cache_dir.as_posix()} "
|
|
72
|
+
)
|
|
73
|
+
if old_cache_dir != system_cache_dir:
|
|
74
|
+
shutil.rmtree(old_cache_dir)
|
|
75
|
+
logger.info(
|
|
76
|
+
f"cleared the old cache directory {old_cache_dir.as_posix()}"
|
|
77
|
+
)
|
|
78
|
+
else:
|
|
79
|
+
logger.info(
|
|
80
|
+
f"didn't clear the system cache directory {system_cache_dir.as_posix()}, "
|
|
81
|
+
"please clear it manually if you need"
|
|
82
|
+
)
|
|
83
|
+
else:
|
|
84
|
+
new_cache_dir.mkdir(parents=True, exist_ok=True)
|
|
85
|
+
new_cache_dir = new_cache_dir.resolve()
|
|
86
|
+
save_platform_user_storage_settings(None if need_reset else new_cache_dir)
|
|
87
|
+
settings._cache_dir = new_cache_dir
|