lamindb_setup 0.71.0__py2.py3-none-any.whl → 0.71.2__py2.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 +1 -1
- lamindb_setup/_connect_instance.py +18 -4
- lamindb_setup/_delete.py +23 -24
- lamindb_setup/_init_instance.py +7 -3
- lamindb_setup/{_add_remote_storage.py → _set_managed_storage.py} +2 -4
- lamindb_setup/core/_hub_core.py +6 -1
- lamindb_setup/core/_hub_crud.py +6 -1
- lamindb_setup/core/_settings_load.py +1 -0
- lamindb_setup/core/_settings_save.py +2 -0
- lamindb_setup/core/_settings_storage.py +4 -11
- lamindb_setup/core/_settings_store.py +1 -0
- lamindb_setup/core/_settings_user.py +6 -2
- lamindb_setup/core/upath.py +17 -7
- {lamindb_setup-0.71.0.dist-info → lamindb_setup-0.71.2.dist-info}/METADATA +1 -1
- {lamindb_setup-0.71.0.dist-info → lamindb_setup-0.71.2.dist-info}/RECORD +17 -17
- {lamindb_setup-0.71.0.dist-info → lamindb_setup-0.71.2.dist-info}/LICENSE +0 -0
- {lamindb_setup-0.71.0.dist-info → lamindb_setup-0.71.2.dist-info}/WHEEL +0 -0
lamindb_setup/__init__.py
CHANGED
|
@@ -4,6 +4,7 @@ import os
|
|
|
4
4
|
from typing import TYPE_CHECKING
|
|
5
5
|
from uuid import UUID
|
|
6
6
|
|
|
7
|
+
from django.db import ProgrammingError
|
|
7
8
|
from lamin_utils import logger
|
|
8
9
|
|
|
9
10
|
from ._check_setup import _check_instance_setup
|
|
@@ -106,7 +107,7 @@ def connect(
|
|
|
106
107
|
*,
|
|
107
108
|
db: str | None = None,
|
|
108
109
|
storage: UPathStr | None = None,
|
|
109
|
-
|
|
110
|
+
_raise_not_found_error: bool = True,
|
|
110
111
|
_test: bool = False,
|
|
111
112
|
) -> str | tuple | None:
|
|
112
113
|
"""Connect to instance.
|
|
@@ -158,6 +159,8 @@ def connect(
|
|
|
158
159
|
root=storage_result["root"],
|
|
159
160
|
region=storage_result["region"],
|
|
160
161
|
uid=storage_result["lnid"],
|
|
162
|
+
uuid=UUID(storage_result["id"]),
|
|
163
|
+
instance_id=UUID(instance_result["id"]),
|
|
161
164
|
)
|
|
162
165
|
isettings = InstanceSettings(
|
|
163
166
|
id=UUID(instance_result["id"]),
|
|
@@ -178,12 +181,12 @@ def connect(
|
|
|
178
181
|
if settings_file.exists():
|
|
179
182
|
isettings = load_instance_settings(settings_file)
|
|
180
183
|
if isettings.is_remote:
|
|
181
|
-
if
|
|
184
|
+
if _raise_not_found_error:
|
|
182
185
|
raise InstanceNotFoundError(message)
|
|
183
186
|
return "instance-not-found"
|
|
184
187
|
|
|
185
188
|
else:
|
|
186
|
-
if
|
|
189
|
+
if _raise_not_found_error:
|
|
187
190
|
raise InstanceNotFoundError(message)
|
|
188
191
|
return "instance-not-found"
|
|
189
192
|
|
|
@@ -206,7 +209,7 @@ def connect(
|
|
|
206
209
|
f" {isettings._sqlite_file_local}\nTo push the file to the cloud,"
|
|
207
210
|
" call: lamin close"
|
|
208
211
|
)
|
|
209
|
-
elif
|
|
212
|
+
elif _raise_not_found_error:
|
|
210
213
|
raise SystemExit(msg)
|
|
211
214
|
else:
|
|
212
215
|
logger.warning(
|
|
@@ -220,6 +223,17 @@ def connect(
|
|
|
220
223
|
|
|
221
224
|
if storage is not None and isettings.dialect == "sqlite":
|
|
222
225
|
update_root_field_in_default_storage(isettings)
|
|
226
|
+
# below is for backfilling the instance_uid value
|
|
227
|
+
# we'll enable it once more people migrated to 0.71.0
|
|
228
|
+
# ssettings_record = isettings.storage.record
|
|
229
|
+
# if ssettings_record.instance_uid is None:
|
|
230
|
+
# ssettings_record.instance_uid = isettings.uid
|
|
231
|
+
# # try saving if not read-only access
|
|
232
|
+
# try:
|
|
233
|
+
# ssettings_record.save()
|
|
234
|
+
# # raised by django when the access is denied
|
|
235
|
+
# except ProgrammingError:
|
|
236
|
+
# pass
|
|
223
237
|
load_from_isettings(isettings)
|
|
224
238
|
except Exception as e:
|
|
225
239
|
if isettings is not None:
|
lamindb_setup/_delete.py
CHANGED
|
@@ -6,7 +6,11 @@ from uuid import UUID
|
|
|
6
6
|
|
|
7
7
|
from lamin_utils import logger
|
|
8
8
|
|
|
9
|
-
from ._connect_instance import
|
|
9
|
+
from ._connect_instance import (
|
|
10
|
+
INSTANCE_NOT_FOUND_MESSAGE,
|
|
11
|
+
InstanceNotFoundError,
|
|
12
|
+
get_owner_name_from_identifier,
|
|
13
|
+
)
|
|
10
14
|
from .core._hub_core import connect_instance as load_instance_from_hub
|
|
11
15
|
from .core._hub_core import delete_instance as delete_instance_on_hub
|
|
12
16
|
from .core._hub_core import get_storage_records_for_instance
|
|
@@ -54,55 +58,48 @@ def delete_by_isettings(isettings: InstanceSettings) -> None:
|
|
|
54
58
|
settings._instance_settings = None
|
|
55
59
|
|
|
56
60
|
|
|
57
|
-
def delete(
|
|
58
|
-
instance_name: str, force: bool = False, require_empty: bool = True
|
|
59
|
-
) -> int | None:
|
|
61
|
+
def delete(slug: str, force: bool = False, require_empty: bool = True) -> int | None:
|
|
60
62
|
"""Delete a LaminDB instance.
|
|
61
63
|
|
|
62
64
|
Args:
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
65
|
+
slug: The instance slug `account_handle/instance_name` or URL.
|
|
66
|
+
If the instance is owned by you, it suffices to pass the instance name.
|
|
67
|
+
force: Whether to skip the confirmation prompt.
|
|
68
|
+
require_empty: Whether to check if the instance is empty before deleting.
|
|
66
69
|
"""
|
|
67
|
-
|
|
68
|
-
logger.warning(
|
|
69
|
-
"Deleting the instance of another user is currently not supported with the"
|
|
70
|
-
" CLI. Please provide only the instance name when deleting an instance ('/'"
|
|
71
|
-
" delimiter not allowed)."
|
|
72
|
-
)
|
|
73
|
-
raise ValueError("Invalid instance name: '/' delimiter not allowed.")
|
|
74
|
-
instance_slug = f"{settings.user.handle}/{instance_name}"
|
|
70
|
+
instance_owner, instance_name = get_owner_name_from_identifier(slug)
|
|
75
71
|
if settings._instance_exists and settings.instance.name == instance_name:
|
|
76
72
|
isettings = settings.instance
|
|
77
73
|
else:
|
|
78
|
-
settings_file = instance_settings_file(instance_name,
|
|
74
|
+
settings_file = instance_settings_file(instance_name, instance_owner)
|
|
79
75
|
if not settings_file.exists():
|
|
80
76
|
hub_result = load_instance_from_hub(
|
|
81
|
-
owner=
|
|
77
|
+
owner=instance_owner, name=instance_name
|
|
82
78
|
)
|
|
83
79
|
if isinstance(hub_result, str):
|
|
84
80
|
message = INSTANCE_NOT_FOUND_MESSAGE.format(
|
|
85
|
-
owner=
|
|
81
|
+
owner=instance_owner,
|
|
86
82
|
name=instance_name,
|
|
87
83
|
hub_result=hub_result,
|
|
88
84
|
)
|
|
89
|
-
|
|
90
|
-
return None
|
|
85
|
+
raise InstanceNotFoundError(message)
|
|
91
86
|
instance_result, storage_result = hub_result
|
|
92
87
|
ssettings = StorageSettings(
|
|
93
88
|
root=storage_result["root"],
|
|
94
89
|
region=storage_result["region"],
|
|
95
90
|
uid=storage_result["lnid"],
|
|
91
|
+
uuid=UUID(storage_result["id"]),
|
|
96
92
|
)
|
|
97
93
|
isettings = InstanceSettings(
|
|
98
94
|
id=UUID(instance_result["id"]),
|
|
99
|
-
owner=
|
|
95
|
+
owner=instance_owner,
|
|
100
96
|
name=instance_name,
|
|
101
97
|
storage=ssettings,
|
|
102
98
|
keep_artifacts_local=bool(instance_result["keep_artifacts_local"]),
|
|
103
99
|
db=instance_result["db"] if "db" in instance_result else None,
|
|
104
100
|
schema=instance_result["schema_str"],
|
|
105
101
|
git_repo=instance_result["git_repo"],
|
|
102
|
+
is_on_hub=True,
|
|
106
103
|
)
|
|
107
104
|
else:
|
|
108
105
|
isettings = load_instance_settings(settings_file)
|
|
@@ -117,7 +114,7 @@ def delete(
|
|
|
117
114
|
if not force:
|
|
118
115
|
valid_responses = ["y", "yes"]
|
|
119
116
|
user_input = (
|
|
120
|
-
input(f"Are you sure you want to delete instance {
|
|
117
|
+
input(f"Are you sure you want to delete instance {isettings.slug}? (y/n) ")
|
|
121
118
|
.strip()
|
|
122
119
|
.lower()
|
|
123
120
|
)
|
|
@@ -161,10 +158,12 @@ def delete(
|
|
|
161
158
|
ssettings._mark_storage_root.unlink(
|
|
162
159
|
missing_ok=True # this is totally weird, but needed on Py3.11
|
|
163
160
|
)
|
|
164
|
-
logger.info(f"deleting instance {
|
|
161
|
+
logger.info(f"deleting instance {isettings.slug}")
|
|
165
162
|
# below we can skip check_storage_is_empty() because we already called
|
|
166
163
|
# it above
|
|
167
|
-
if settings.user.handle != "anonymous":
|
|
164
|
+
if settings.user.handle != "anonymous" and isettings.is_on_hub:
|
|
165
|
+
# start with deleting things on the hub
|
|
166
|
+
# this will error if the user doesn't have permission
|
|
168
167
|
delete_instance_on_hub(isettings._id, require_empty=False)
|
|
169
168
|
delete_by_isettings(isettings)
|
|
170
169
|
# if .lndb file was delete, then we might count -1
|
lamindb_setup/_init_instance.py
CHANGED
|
@@ -184,7 +184,7 @@ def validate_init_args(
|
|
|
184
184
|
name_str = infer_instance_name(storage=storage, name=name, db=db)
|
|
185
185
|
# test whether instance exists by trying to load it
|
|
186
186
|
instance_slug = f"{settings.user.handle}/{name_str}"
|
|
187
|
-
response = connect(instance_slug,
|
|
187
|
+
response = connect(instance_slug, db=db, _raise_not_found_error=False, _test=_test)
|
|
188
188
|
instance_state: Literal[
|
|
189
189
|
"connected",
|
|
190
190
|
"instance-corrupted-or-deleted",
|
|
@@ -277,10 +277,14 @@ def init(
|
|
|
277
277
|
|
|
278
278
|
if isettings is not None:
|
|
279
279
|
delete_by_isettings(isettings)
|
|
280
|
-
if settings.user.handle != "anonymous":
|
|
280
|
+
if settings.user.handle != "anonymous" and isettings.is_on_hub:
|
|
281
281
|
delete_instance_record(isettings._id)
|
|
282
282
|
isettings._get_settings_file().unlink(missing_ok=True) # type: ignore
|
|
283
|
-
if
|
|
283
|
+
if (
|
|
284
|
+
ssettings is not None
|
|
285
|
+
and settings.user.handle != "anonymous"
|
|
286
|
+
and ssettings.is_on_hub
|
|
287
|
+
):
|
|
284
288
|
delete_storage_record(ssettings._uuid) # type: ignore
|
|
285
289
|
raise e
|
|
286
290
|
return None
|
|
@@ -12,10 +12,8 @@ if TYPE_CHECKING:
|
|
|
12
12
|
from lamindb_setup.core.types import UPathStr
|
|
13
13
|
|
|
14
14
|
|
|
15
|
-
def
|
|
16
|
-
"""Add
|
|
17
|
-
|
|
18
|
-
This can be used to selectively share data.
|
|
15
|
+
def set_managed_storage(root: UPathStr, **fs_kwargs):
|
|
16
|
+
"""Add or switch to another managed storage location.
|
|
19
17
|
|
|
20
18
|
Args:
|
|
21
19
|
root: `UPathStr` - The new storage root, e.g., an S3 bucket.
|
lamindb_setup/core/_hub_core.py
CHANGED
|
@@ -53,6 +53,11 @@ def _delete_storage_record(storage_uuid: UUID, client: Client) -> None:
|
|
|
53
53
|
response = client.table("storage").delete().eq("id", storage_uuid.hex).execute()
|
|
54
54
|
if response.data:
|
|
55
55
|
logger.important(f"deleted storage record on hub {storage_uuid.hex}")
|
|
56
|
+
else:
|
|
57
|
+
raise PermissionError(
|
|
58
|
+
f"Deleting of storage with {storage_uuid.hex} was not successful. Probably, you"
|
|
59
|
+
" don't have sufficient permissions."
|
|
60
|
+
)
|
|
56
61
|
|
|
57
62
|
|
|
58
63
|
def update_instance_record(instance_uuid: UUID, fields: dict) -> None:
|
|
@@ -285,7 +290,7 @@ def _init_instance(isettings: InstanceSettings, client: Client) -> None:
|
|
|
285
290
|
client.table("storage").update(
|
|
286
291
|
{"instance_id": isettings._id.hex, "is_default": True}
|
|
287
292
|
).eq("id", isettings.storage._uuid.hex).execute() # type: ignore
|
|
288
|
-
logger.
|
|
293
|
+
logger.important(f"go to: https://lamin.ai/{isettings.owner}/{isettings.name}")
|
|
289
294
|
|
|
290
295
|
|
|
291
296
|
def connect_instance(
|
lamindb_setup/core/_hub_crud.py
CHANGED
|
@@ -100,7 +100,7 @@ def update_instance(instance_id: str, instance_fields: dict, client: Client):
|
|
|
100
100
|
client.table("instance").update(instance_fields).eq("id", instance_id).execute()
|
|
101
101
|
)
|
|
102
102
|
if len(response.data) == 0:
|
|
103
|
-
raise
|
|
103
|
+
raise PermissionError(
|
|
104
104
|
f"Update of instance with {instance_id} was not successful. Probably, you"
|
|
105
105
|
" don't have sufficient permissions."
|
|
106
106
|
)
|
|
@@ -187,3 +187,8 @@ def _delete_instance_record(instance_id: UUID, client: Client) -> None:
|
|
|
187
187
|
response = client.table("instance").delete().eq("id", instance_id.hex).execute()
|
|
188
188
|
if response.data:
|
|
189
189
|
logger.important(f"deleted instance record on hub {instance_id.hex}")
|
|
190
|
+
else:
|
|
191
|
+
raise PermissionError(
|
|
192
|
+
f"Deleting of instance with {instance_id.hex} was not successful. Probably, you"
|
|
193
|
+
" don't have sufficient permissions."
|
|
194
|
+
)
|
|
@@ -89,6 +89,7 @@ def setup_instance_from_store(store: InstanceSettingsStore) -> InstanceSettings:
|
|
|
89
89
|
db=store.db if store.db != "null" else None, # type: ignore
|
|
90
90
|
schema=store.schema_str if store.schema_str != "null" else None,
|
|
91
91
|
git_repo=store.git_repo if store.git_repo != "null" else None,
|
|
92
|
+
keep_artifacts_local=store.keep_artifacts_local, # type: ignore
|
|
92
93
|
)
|
|
93
94
|
|
|
94
95
|
|
|
@@ -177,7 +177,6 @@ class StorageSettings:
|
|
|
177
177
|
# local storage
|
|
178
178
|
self._has_local = False
|
|
179
179
|
self._local = None
|
|
180
|
-
self._is_on_hub: bool | None = None
|
|
181
180
|
|
|
182
181
|
@property
|
|
183
182
|
def id(self) -> int:
|
|
@@ -320,16 +319,10 @@ class StorageSettings:
|
|
|
320
319
|
|
|
321
320
|
Only works if user has access to the instance.
|
|
322
321
|
"""
|
|
323
|
-
if self.
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
response = call_with_fallback_auth(select_storage, id=self._uuid.hex) # type: ignore
|
|
328
|
-
if response is None:
|
|
329
|
-
self._is_on_hub = False
|
|
330
|
-
else:
|
|
331
|
-
self._is_on_hub = True
|
|
332
|
-
return self._is_on_hub
|
|
322
|
+
if self._uuid is None:
|
|
323
|
+
return False
|
|
324
|
+
else:
|
|
325
|
+
return True
|
|
333
326
|
|
|
334
327
|
def key_to_filepath(self, filekey: Path | UPath | str) -> UPath:
|
|
335
328
|
"""Cloud or local filepath from filekey."""
|
|
@@ -46,6 +46,10 @@ class UserSettings:
|
|
|
46
46
|
@property
|
|
47
47
|
def id(self):
|
|
48
48
|
"""Integer id valid in current intance."""
|
|
49
|
-
|
|
49
|
+
# do NOT use the function below because this
|
|
50
|
+
# doesn't error - it needs to be this way to have
|
|
51
|
+
# a user id available in migrations
|
|
52
|
+
# from lnschema_core.users import current_user_id
|
|
53
|
+
from lnschema_core.models import User
|
|
50
54
|
|
|
51
|
-
return
|
|
55
|
+
return User.objects.get(uid=self.uid).id
|
lamindb_setup/core/upath.py
CHANGED
|
@@ -56,7 +56,10 @@ VALID_SUFFIXES = {
|
|
|
56
56
|
".zarr",
|
|
57
57
|
".json",
|
|
58
58
|
}
|
|
59
|
-
|
|
59
|
+
VALID_COMPOSITE_SUFFIXES = {
|
|
60
|
+
".anndata.zarr",
|
|
61
|
+
".spatialdata.zarr",
|
|
62
|
+
}
|
|
60
63
|
|
|
61
64
|
TRAILING_SEP = (os.sep, os.altsep) if os.altsep is not None else os.sep
|
|
62
65
|
|
|
@@ -74,6 +77,12 @@ def extract_suffix_from_path(path: Path, arg_name: str | None = None) -> str:
|
|
|
74
77
|
total_suffix = "".join(path.suffixes)
|
|
75
78
|
if total_suffix in VALID_SUFFIXES:
|
|
76
79
|
return total_suffix
|
|
80
|
+
elif total_suffix.endswith(tuple(VALID_COMPOSITE_SUFFIXES)):
|
|
81
|
+
# below seems slow but OK for now
|
|
82
|
+
for suffix in VALID_COMPOSITE_SUFFIXES:
|
|
83
|
+
if total_suffix.endswith(suffix):
|
|
84
|
+
break
|
|
85
|
+
return suffix
|
|
77
86
|
else:
|
|
78
87
|
print_hint = True
|
|
79
88
|
arg_name = "file" if arg_name is None else arg_name # for the warning
|
|
@@ -462,7 +471,8 @@ def compute_file_tree(
|
|
|
462
471
|
contents = [d for d in contents if d.is_dir()]
|
|
463
472
|
pointers = [tee] * (len(contents) - 1) + [last]
|
|
464
473
|
n_files_per_dir_and_type = defaultdict(lambda: 0) # type: ignore
|
|
465
|
-
|
|
474
|
+
# TODO: pass strict=False to zip with python > 3.9
|
|
475
|
+
for pointer, child_path in zip(pointers, contents): # type: ignore
|
|
466
476
|
if child_path.is_dir():
|
|
467
477
|
if include_dirs and child_path not in include_dirs:
|
|
468
478
|
continue
|
|
@@ -495,8 +505,8 @@ def compute_file_tree(
|
|
|
495
505
|
display_suffixes = ", ".join([f"{suffix!r}" for suffix in suffixes])
|
|
496
506
|
suffix_message = f" with suffixes {display_suffixes}" if n_objects > 0 else ""
|
|
497
507
|
message = (
|
|
498
|
-
f"{
|
|
499
|
-
f" {n_objects} files{suffix_message})
|
|
508
|
+
f"{n_directories} sub-{directory_info} &"
|
|
509
|
+
f" {n_objects} files{suffix_message}\n{path.resolve()}{folder_tree}"
|
|
500
510
|
)
|
|
501
511
|
return message, n_objects
|
|
502
512
|
|
|
@@ -801,12 +811,12 @@ def check_storage_is_empty(
|
|
|
801
811
|
if raise_error
|
|
802
812
|
else "consider deleting them"
|
|
803
813
|
)
|
|
804
|
-
hint = "'
|
|
814
|
+
hint = "'_is_initialized'"
|
|
805
815
|
if n_offset_objects == 2:
|
|
806
|
-
hint += "& SQLite file"
|
|
816
|
+
hint += " & SQLite file"
|
|
807
817
|
hint += " ignored"
|
|
808
818
|
message = (
|
|
809
|
-
f"Storage {directory_string} contains {n_objects} objects "
|
|
819
|
+
f"Storage {directory_string} contains {n_objects - n_offset_objects} objects "
|
|
810
820
|
f"({hint}) - {ask_for_deletion}\n{objects}"
|
|
811
821
|
)
|
|
812
822
|
if n_diff > 0:
|
|
@@ -1,18 +1,18 @@
|
|
|
1
|
-
lamindb_setup/__init__.py,sha256=
|
|
2
|
-
lamindb_setup/_add_remote_storage.py,sha256=j-p29pxrr_07Ns5X2tm6yKxa3VESPkjyt35X4Cvr-nk,1325
|
|
1
|
+
lamindb_setup/__init__.py,sha256=Z6OThfuMvv_NukKBoTOjxZV5sex6PgniejgS9LiuODs,1542
|
|
3
2
|
lamindb_setup/_cache.py,sha256=wA7mbysANwe8hPNbjDo9bOmXJ0xIyaS5iyxIpxSWji4,846
|
|
4
3
|
lamindb_setup/_check.py,sha256=28PcG8Kp6OpjSLSi1r2boL2Ryeh6xkaCL87HFbjs6GA,129
|
|
5
4
|
lamindb_setup/_check_setup.py,sha256=cNEL9Q4yPpmEkGKHH8JgullWl1VUZwALJ4RHn9wZypY,2613
|
|
6
5
|
lamindb_setup/_close.py,sha256=1QS9p2SCacgovYn6xqWU4zFvwHN1RgIccvzwJgFvKgU,1186
|
|
7
|
-
lamindb_setup/_connect_instance.py,sha256=
|
|
8
|
-
lamindb_setup/_delete.py,sha256=
|
|
6
|
+
lamindb_setup/_connect_instance.py,sha256=6DiKFpw0k_gcWlZxI8ZJoqHungW-el3JbaWcmV9wGIg,12600
|
|
7
|
+
lamindb_setup/_delete.py,sha256=hf8zfVJfW74QR7eK4xJNQ6HbkkZBsl5eTqj-Ni5jPo0,7232
|
|
9
8
|
lamindb_setup/_django.py,sha256=EoyWvFzH0i9wxjy4JZhcoXCTckztP_Mrl6FbYQnMmLE,1534
|
|
10
9
|
lamindb_setup/_exportdb.py,sha256=uTIZjKKTB7arzEr1j0O6lONiT2pRBKeOFdLvOV8ZwzE,2120
|
|
11
10
|
lamindb_setup/_importdb.py,sha256=yYYShzUajTsR-cTW4CZ-UNDWZY2uE5PAgNbp-wn8Ogc,1874
|
|
12
|
-
lamindb_setup/_init_instance.py,sha256=
|
|
11
|
+
lamindb_setup/_init_instance.py,sha256=2NT4ERk0RFrcgpnH5O-sAwkd7E1QLIOaFavyFzdAZbc,11924
|
|
13
12
|
lamindb_setup/_migrate.py,sha256=4nBTFg5-BK4A2gH-D3_tcFf8EtvMnIo5Mq0e_C6_9-U,8815
|
|
14
13
|
lamindb_setup/_register_instance.py,sha256=Jeu0wyvJVSVQ_n-A_7yn7xOZIP0ncJD92DRABqzPIjA,940
|
|
15
14
|
lamindb_setup/_schema.py,sha256=b3uzhhWpV5mQtDwhMINc2MabGCnGLESy51ito3yl6Wc,679
|
|
15
|
+
lamindb_setup/_set_managed_storage.py,sha256=BUUJzKNWNEA5KnKnFZsas0ANU6w-LBZL-CKRu-sNLPE,1268
|
|
16
16
|
lamindb_setup/_setup_user.py,sha256=6Oc7Rke-yRQSZbuntdUAz8QbJ6UuPzYHI9FnYlf_q-A,3670
|
|
17
17
|
lamindb_setup/_silence_loggers.py,sha256=AKF_YcHvX32eGXdsYK8MJlxEaZ-Uo2f6QDRzjKFCtws,1568
|
|
18
18
|
lamindb_setup/core/__init__.py,sha256=dV9S-rQpNK9JcBn4hiEmiLnmNqfpPFJD9pqagMCaIew,416
|
|
@@ -20,24 +20,24 @@ lamindb_setup/core/_aws_storage.py,sha256=nEjeUv4xUVpoV0Lx-zjjmyb9w804bDyaeiM-Oq
|
|
|
20
20
|
lamindb_setup/core/_deprecated.py,sha256=3qxUI1dnDlSeR0BYrv7ucjqRBEojbqotPgpShXs4KF8,2520
|
|
21
21
|
lamindb_setup/core/_docs.py,sha256=3k-YY-oVaJd_9UIY-LfBg_u8raKOCNfkZQPA73KsUhs,276
|
|
22
22
|
lamindb_setup/core/_hub_client.py,sha256=V0qKDsCdRn-tQy2YIk4VgXcpJFmuum6N3gcavAC7gBQ,5504
|
|
23
|
-
lamindb_setup/core/_hub_core.py,sha256=
|
|
24
|
-
lamindb_setup/core/_hub_crud.py,sha256=
|
|
23
|
+
lamindb_setup/core/_hub_core.py,sha256=Cp8w0QY3DNOGWOhzzWmElj-pUm6tAkrQCLikbq_ksq8,15971
|
|
24
|
+
lamindb_setup/core/_hub_crud.py,sha256=b1XF7AJpM9Q-ttm9nPG-r3OTRWHQaGzAGIyvmb83NTo,4859
|
|
25
25
|
lamindb_setup/core/_hub_utils.py,sha256=b_M1LkdCjiMWm1EOlSb9GuPdLijwVgQDtATTpeZuXI0,1875
|
|
26
26
|
lamindb_setup/core/_settings.py,sha256=jjZ_AxRXB3Y3UP6m04BAw_dhFbJbdg2-nZWmEv2LNZ8,3141
|
|
27
27
|
lamindb_setup/core/_settings_instance.py,sha256=RFUcnBBUp303dbVEHcAaIm_q7lzlWg56OrKLwdam8Pg,16588
|
|
28
|
-
lamindb_setup/core/_settings_load.py,sha256=
|
|
29
|
-
lamindb_setup/core/_settings_save.py,sha256=
|
|
30
|
-
lamindb_setup/core/_settings_storage.py,sha256=
|
|
31
|
-
lamindb_setup/core/_settings_store.py,sha256=
|
|
32
|
-
lamindb_setup/core/_settings_user.py,sha256=
|
|
28
|
+
lamindb_setup/core/_settings_load.py,sha256=NGgCDpN85j1EqoKlrYFIlZBMlBJm33gx2-wc96CP_ZQ,3922
|
|
29
|
+
lamindb_setup/core/_settings_save.py,sha256=d1A-Ex-7H08mb8l7I0Oe0j0GilrfaDuprh_NMxhQAsQ,2704
|
|
30
|
+
lamindb_setup/core/_settings_storage.py,sha256=VgsqdIImQRfOZ6FGNY6DLVohaSxerj_F-sWtjD9hzcs,12382
|
|
31
|
+
lamindb_setup/core/_settings_store.py,sha256=dagS5c7wAMRnuZTRfCU4sKaIOyF_HwAP5Fnnn8vphno,2084
|
|
32
|
+
lamindb_setup/core/_settings_user.py,sha256=IOOd3E3YN5xPEYy7fkWQDB6X06OcY4FkBqWT-XGxrjM,1563
|
|
33
33
|
lamindb_setup/core/_setup_bionty_sources.py,sha256=OgPpZxN2_Wffy-ogEBz_97c_k8d2bD-DDVt89-u9GLY,3002
|
|
34
34
|
lamindb_setup/core/cloud_sqlite_locker.py,sha256=NIBNAGq7TTRrip9OzMdiQKj8QOuwhL9esyM0aehUqBA,6893
|
|
35
35
|
lamindb_setup/core/django.py,sha256=m0AKg2lJ1EYCtEtZ8frFFJbAR9qX0gnFcgqp7aeC2k0,3450
|
|
36
36
|
lamindb_setup/core/exceptions.py,sha256=eoI7AXgATgDVzgArtN7CUvpaMUC067vsBg5LHCsWzDM,305
|
|
37
37
|
lamindb_setup/core/hashing.py,sha256=mv9UCvAsSrdHYQAv3Kz7UOvjd5tIjvDTIYv_ettBuVY,2218
|
|
38
38
|
lamindb_setup/core/types.py,sha256=bcYnZ0uM_2NXKJCl94Mmc-uYrQlRUUVKG3sK2N-F-N4,532
|
|
39
|
-
lamindb_setup/core/upath.py,sha256=
|
|
40
|
-
lamindb_setup-0.71.
|
|
41
|
-
lamindb_setup-0.71.
|
|
42
|
-
lamindb_setup-0.71.
|
|
43
|
-
lamindb_setup-0.71.
|
|
39
|
+
lamindb_setup/core/upath.py,sha256=mou3NdF-tRTLW3E4eNDRFdCZrFZUyt-NPOVyC-DLe24,28342
|
|
40
|
+
lamindb_setup-0.71.2.dist-info/LICENSE,sha256=UOZ1F5fFDe3XXvG4oNnkL1-Ecun7zpHzRxjp-XsMeAo,11324
|
|
41
|
+
lamindb_setup-0.71.2.dist-info/WHEEL,sha256=Sgu64hAMa6g5FdzHxXv9Xdse9yxpGGMeagVtPMWpJQY,99
|
|
42
|
+
lamindb_setup-0.71.2.dist-info/METADATA,sha256=E6rBt9sU5aiigEo_sDZXTUPZdlwUwLfo4oGup46A2CQ,1620
|
|
43
|
+
lamindb_setup-0.71.2.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|