lamindb_setup 0.81.4__py3-none-any.whl → 1.0.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 +31 -2
- lamindb_setup/_check_setup.py +32 -16
- lamindb_setup/_close.py +1 -1
- lamindb_setup/_connect_instance.py +36 -34
- lamindb_setup/_delete.py +2 -2
- lamindb_setup/_django.py +6 -6
- lamindb_setup/_exportdb.py +4 -4
- lamindb_setup/_importdb.py +2 -2
- lamindb_setup/_init_instance.py +34 -53
- lamindb_setup/_migrate.py +6 -1
- lamindb_setup/_schema_metadata.py +15 -11
- lamindb_setup/core/_aws_credentials.py +10 -2
- lamindb_setup/core/_deprecated.py +12 -5
- lamindb_setup/core/_hub_core.py +2 -2
- lamindb_setup/core/_hub_crud.py +8 -11
- lamindb_setup/core/_hub_utils.py +0 -9
- lamindb_setup/core/_settings.py +2 -2
- lamindb_setup/core/_settings_instance.py +32 -9
- lamindb_setup/core/_settings_load.py +1 -1
- lamindb_setup/core/_settings_storage.py +1 -1
- lamindb_setup/core/_settings_user.py +1 -1
- lamindb_setup/core/_setup_bionty_sources.py +3 -3
- lamindb_setup/core/django.py +6 -7
- lamindb_setup/core/hashing.py +16 -5
- lamindb_setup/core/upath.py +79 -45
- {lamindb_setup-0.81.4.dist-info → lamindb_setup-1.0.0.dist-info}/METADATA +4 -5
- lamindb_setup-1.0.0.dist-info/RECORD +47 -0
- {lamindb_setup-0.81.4.dist-info → lamindb_setup-1.0.0.dist-info}/WHEEL +1 -1
- lamindb_setup-0.81.4.dist-info/RECORD +0 -47
- {lamindb_setup-0.81.4.dist-info → lamindb_setup-1.0.0.dist-info}/LICENSE +0 -0
lamindb_setup/core/upath.py
CHANGED
|
@@ -12,14 +12,15 @@ from itertools import islice
|
|
|
12
12
|
from pathlib import Path, PosixPath, PurePosixPath, WindowsPath
|
|
13
13
|
from typing import TYPE_CHECKING, Any, Literal
|
|
14
14
|
|
|
15
|
+
import click
|
|
15
16
|
import fsspec
|
|
16
17
|
from lamin_utils import logger
|
|
17
18
|
from upath import UPath
|
|
18
|
-
from upath.implementations.cloud import CloudPath
|
|
19
|
+
from upath.implementations.cloud import CloudPath # keep CloudPath!
|
|
19
20
|
from upath.implementations.local import LocalPath
|
|
20
21
|
|
|
21
22
|
from ._aws_credentials import HOSTED_BUCKETS, get_aws_credentials_manager
|
|
22
|
-
from .hashing import HASH_LENGTH, b16_to_b64, hash_from_hashes_list
|
|
23
|
+
from .hashing import HASH_LENGTH, b16_to_b64, hash_from_hashes_list, hash_string
|
|
23
24
|
|
|
24
25
|
if TYPE_CHECKING:
|
|
25
26
|
from .types import UPathStr
|
|
@@ -192,12 +193,15 @@ class ProgressCallback(fsspec.callbacks.Callback):
|
|
|
192
193
|
def update_relative_value(self, inc=1):
|
|
193
194
|
if inc != 0:
|
|
194
195
|
self.value += inc
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
196
|
+
self.call()
|
|
197
|
+
else:
|
|
198
|
+
# this is specific to http filesystem
|
|
199
|
+
# for some reason the last update is 0 always
|
|
200
|
+
# sometimes the reported result is less that 100%
|
|
201
|
+
# here 100% is forced manually in this case
|
|
202
|
+
if self.value < 1.0 and self.value >= 0.999:
|
|
203
|
+
self.value = self.size
|
|
204
|
+
self.call()
|
|
201
205
|
|
|
202
206
|
def branch(self, path_1, path_2, kwargs):
|
|
203
207
|
if self.adjust_size:
|
|
@@ -264,7 +268,17 @@ def download_to(self, local_path: UPathStr, print_progress: bool = True, **kwarg
|
|
|
264
268
|
)
|
|
265
269
|
kwargs["callback"] = callback
|
|
266
270
|
|
|
267
|
-
|
|
271
|
+
cloud_path_str = str(self)
|
|
272
|
+
local_path_str = str(local_path)
|
|
273
|
+
# needed due to https://github.com/fsspec/filesystem_spec/issues/1766
|
|
274
|
+
# otherwise fsspec calls fs._ls_real where it reads the body and parses links
|
|
275
|
+
# so the file is downloaded 2 times
|
|
276
|
+
# upath doesn't call fs.ls to infer type, so it is safe to call
|
|
277
|
+
if self.protocol in {"http", "https"} and self.stat().as_info()["type"] == "file":
|
|
278
|
+
self.fs.use_listings_cache = True
|
|
279
|
+
self.fs.dircache[cloud_path_str] = []
|
|
280
|
+
|
|
281
|
+
self.fs.download(cloud_path_str, local_path_str, **kwargs)
|
|
268
282
|
|
|
269
283
|
|
|
270
284
|
def upload_from(
|
|
@@ -312,8 +326,7 @@ def upload_from(
|
|
|
312
326
|
destination = self.as_posix()
|
|
313
327
|
|
|
314
328
|
# the below lines are to avoid s3fs triggering create_bucket in upload if
|
|
315
|
-
# dirs are present it allows to avoid permission error
|
|
316
|
-
# would be easier to just
|
|
329
|
+
# dirs are present, it allows to avoid the permission error
|
|
317
330
|
if self.protocol == "s3" and local_path_is_dir and create_folder:
|
|
318
331
|
bucket = self.drive
|
|
319
332
|
if bucket not in self.fs.dircache:
|
|
@@ -505,7 +518,7 @@ def compute_file_tree(
|
|
|
505
518
|
skip_suffixes_tuple = ()
|
|
506
519
|
else:
|
|
507
520
|
skip_suffixes_tuple = tuple(skip_suffixes) # type: ignore
|
|
508
|
-
|
|
521
|
+
n_files = 0
|
|
509
522
|
n_directories = 0
|
|
510
523
|
|
|
511
524
|
# by default only including registered files
|
|
@@ -518,7 +531,7 @@ def compute_file_tree(
|
|
|
518
531
|
include_paths = set()
|
|
519
532
|
|
|
520
533
|
def inner(dir_path: Path, prefix: str = "", level: int = -1):
|
|
521
|
-
nonlocal
|
|
534
|
+
nonlocal n_files, n_directories, suffixes
|
|
522
535
|
if level == 0:
|
|
523
536
|
return
|
|
524
537
|
stripped_dir_path = dir_path.as_posix().rstrip("/")
|
|
@@ -551,7 +564,7 @@ def compute_file_tree(
|
|
|
551
564
|
suffix = extract_suffix_from_path(child_path)
|
|
552
565
|
suffixes.add(suffix)
|
|
553
566
|
n_files_per_dir_and_type[suffix] += 1
|
|
554
|
-
|
|
567
|
+
n_files += 1
|
|
555
568
|
if n_files_per_dir_and_type[suffix] == n_max_files_per_dir_and_type:
|
|
556
569
|
yield prefix + "..."
|
|
557
570
|
elif n_files_per_dir_and_type[suffix] > n_max_files_per_dir_and_type:
|
|
@@ -564,15 +577,15 @@ def compute_file_tree(
|
|
|
564
577
|
for line in islice(iterator, n_max_files):
|
|
565
578
|
folder_tree += f"\n{line}"
|
|
566
579
|
if next(iterator, None):
|
|
567
|
-
folder_tree += f"\n... only showing {n_max_files} out of {
|
|
580
|
+
folder_tree += f"\n... only showing {n_max_files} out of {n_files} files"
|
|
568
581
|
directory_info = "directory" if n_directories == 1 else "directories"
|
|
569
582
|
display_suffixes = ", ".join([f"{suffix!r}" for suffix in suffixes])
|
|
570
|
-
suffix_message = f" with suffixes {display_suffixes}" if
|
|
583
|
+
suffix_message = f" with suffixes {display_suffixes}" if n_files > 0 else ""
|
|
571
584
|
message = (
|
|
572
585
|
f"{n_directories} sub-{directory_info} &"
|
|
573
|
-
f" {
|
|
586
|
+
f" {n_files} files{suffix_message}\n{path.resolve()}{folder_tree}"
|
|
574
587
|
)
|
|
575
|
-
return message,
|
|
588
|
+
return message, n_files
|
|
576
589
|
|
|
577
590
|
|
|
578
591
|
# adapted from: https://stackoverflow.com/questions/9727673
|
|
@@ -726,12 +739,26 @@ warnings.filterwarnings(
|
|
|
726
739
|
)
|
|
727
740
|
|
|
728
741
|
|
|
729
|
-
def create_path(path:
|
|
730
|
-
|
|
731
|
-
|
|
732
|
-
if
|
|
733
|
-
|
|
734
|
-
|
|
742
|
+
def create_path(path: UPathStr, access_token: str | None = None) -> UPath:
|
|
743
|
+
upath = UPath(path)
|
|
744
|
+
|
|
745
|
+
if upath.protocol == "s3":
|
|
746
|
+
# add managed credentials and other options for AWS s3 paths
|
|
747
|
+
return get_aws_credentials_manager().enrich_path(upath, access_token)
|
|
748
|
+
|
|
749
|
+
if upath.protocol in {"http", "https"}:
|
|
750
|
+
# this is needed because by default aiohttp drops a connection after 5 min
|
|
751
|
+
# so it is impossible to download large files
|
|
752
|
+
client_kwargs = upath.storage_options.get("client_kwargs", {})
|
|
753
|
+
if "timeout" not in client_kwargs:
|
|
754
|
+
from aiohttp import ClientTimeout
|
|
755
|
+
|
|
756
|
+
client_kwargs = {
|
|
757
|
+
**client_kwargs,
|
|
758
|
+
"timeout": ClientTimeout(sock_connect=30, sock_read=30),
|
|
759
|
+
}
|
|
760
|
+
return UPath(upath, client_kwargs=client_kwargs)
|
|
761
|
+
return upath
|
|
735
762
|
|
|
736
763
|
|
|
737
764
|
def get_stat_file_cloud(stat: dict) -> tuple[int, str | None, str | None]:
|
|
@@ -749,20 +776,26 @@ def get_stat_file_cloud(stat: dict) -> tuple[int, str | None, str | None]:
|
|
|
749
776
|
# s3
|
|
750
777
|
# StorageClass is checked to be sure that it is indeed s3
|
|
751
778
|
# because http also has ETag
|
|
752
|
-
elif "ETag" in stat
|
|
779
|
+
elif "ETag" in stat:
|
|
753
780
|
etag = stat["ETag"]
|
|
754
|
-
|
|
755
|
-
|
|
756
|
-
|
|
757
|
-
|
|
758
|
-
# we can add more logic later down-the-road
|
|
759
|
-
hash = b16_to_b64(etag)
|
|
760
|
-
hash_type = "md5"
|
|
781
|
+
if "mimetype" in stat:
|
|
782
|
+
# http
|
|
783
|
+
hash = hash_string(etag.strip('"'))
|
|
784
|
+
hash_type = "md5-etag"
|
|
761
785
|
else:
|
|
762
|
-
|
|
763
|
-
|
|
764
|
-
|
|
765
|
-
|
|
786
|
+
# s3
|
|
787
|
+
# small files
|
|
788
|
+
if "-" not in etag:
|
|
789
|
+
# only store hash for non-multipart uploads
|
|
790
|
+
# we can't rapidly validate multi-part uploaded files client-side
|
|
791
|
+
# we can add more logic later down-the-road
|
|
792
|
+
hash = b16_to_b64(etag)
|
|
793
|
+
hash_type = "md5"
|
|
794
|
+
else:
|
|
795
|
+
stripped_etag, suffix = etag.split("-")
|
|
796
|
+
suffix = suffix.strip('"')
|
|
797
|
+
hash = b16_to_b64(stripped_etag)
|
|
798
|
+
hash_type = f"md5-{suffix}" # this is the S3 chunk-hashing strategy
|
|
766
799
|
if hash is not None:
|
|
767
800
|
hash = hash[:HASH_LENGTH]
|
|
768
801
|
return size, hash, hash_type
|
|
@@ -787,17 +820,18 @@ def get_stat_dir_cloud(path: UPath) -> tuple[int, str | None, str | None, int]:
|
|
|
787
820
|
if compute_list_hash:
|
|
788
821
|
hashes.append(object[accessor].strip('"='))
|
|
789
822
|
size = sum(sizes)
|
|
790
|
-
|
|
823
|
+
n_files = len(sizes)
|
|
791
824
|
if compute_list_hash:
|
|
792
825
|
hash, hash_type = hash_from_hashes_list(hashes), "md5-d"
|
|
793
|
-
return size, hash, hash_type,
|
|
826
|
+
return size, hash, hash_type, n_files
|
|
794
827
|
|
|
795
828
|
|
|
796
|
-
class InstanceNotEmpty(
|
|
797
|
-
|
|
829
|
+
class InstanceNotEmpty(click.ClickException):
|
|
830
|
+
def show(self, file=None):
|
|
831
|
+
pass
|
|
798
832
|
|
|
799
833
|
|
|
800
|
-
# is as fast as boto3: https://lamin.ai/laminlabs/
|
|
834
|
+
# is as fast as boto3: https://lamin.ai/laminlabs/lamin-site-assets/transform/krGp3hT1f78N5zKv
|
|
801
835
|
def check_storage_is_empty(
|
|
802
836
|
root: UPathStr, *, raise_error: bool = True, account_for_sqlite_file: bool = False
|
|
803
837
|
) -> int:
|
|
@@ -820,20 +854,20 @@ def check_storage_is_empty(
|
|
|
820
854
|
root_string += "/"
|
|
821
855
|
directory_string = root_string + ".lamindb"
|
|
822
856
|
objects = root_upath.fs.find(directory_string)
|
|
823
|
-
|
|
824
|
-
n_diff =
|
|
857
|
+
n_files = len(objects)
|
|
858
|
+
n_diff = n_files - n_offset_objects
|
|
825
859
|
ask_for_deletion = (
|
|
826
860
|
"delete them prior to deleting the instance"
|
|
827
861
|
if raise_error
|
|
828
862
|
else "consider deleting them"
|
|
829
863
|
)
|
|
830
864
|
message = (
|
|
831
|
-
f"Storage '{directory_string}' contains {
|
|
865
|
+
f"Storage '{directory_string}' contains {n_files - n_offset_objects} objects"
|
|
832
866
|
f" - {ask_for_deletion}"
|
|
833
867
|
)
|
|
834
868
|
if n_diff > 0:
|
|
835
869
|
if raise_error:
|
|
836
|
-
raise InstanceNotEmpty(message)
|
|
870
|
+
raise InstanceNotEmpty(message) from None
|
|
837
871
|
else:
|
|
838
872
|
logger.warning(message)
|
|
839
873
|
return n_diff
|
|
@@ -1,20 +1,19 @@
|
|
|
1
|
-
Metadata-Version: 2.
|
|
1
|
+
Metadata-Version: 2.3
|
|
2
2
|
Name: lamindb_setup
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 1.0.0
|
|
4
4
|
Summary: Setup & configure LaminDB.
|
|
5
5
|
Author-email: Lamin Labs <open-source@lamin.ai>
|
|
6
6
|
Requires-Python: >=3.9
|
|
7
7
|
Description-Content-Type: text/markdown
|
|
8
|
-
Requires-Dist: lnschema_core>=0.51.0
|
|
9
8
|
Requires-Dist: lamin_utils>=0.3.3
|
|
10
|
-
Requires-Dist: django
|
|
9
|
+
Requires-Dist: django>=5,<5.2
|
|
11
10
|
Requires-Dist: dj_database_url>=1.3.0,<3.0.0
|
|
12
11
|
Requires-Dist: pydantic-settings
|
|
13
12
|
Requires-Dist: appdirs<2.0.0
|
|
14
13
|
Requires-Dist: requests
|
|
15
14
|
Requires-Dist: universal_pathlib==0.2.5
|
|
16
15
|
Requires-Dist: botocore<2.0.0
|
|
17
|
-
Requires-Dist: supabase>=2.8.1,<=2.
|
|
16
|
+
Requires-Dist: supabase>=2.8.1,<=2.11.0
|
|
18
17
|
Requires-Dist: psutil
|
|
19
18
|
Requires-Dist: urllib3<2 ; extra == "aws"
|
|
20
19
|
Requires-Dist: aiobotocore[boto3]>=2.5.4,<3.0.0 ; extra == "aws"
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
lamindb_setup/__init__.py,sha256=dZS2wAvosUu5ohrewEzLf0RhpnMQOr6PMw7hPBPxeng,2646
|
|
2
|
+
lamindb_setup/_cache.py,sha256=1XnM-V_KprbjpgPY7Bg3FYn53Iz_2_fEgcMOaSdKKbg,1332
|
|
3
|
+
lamindb_setup/_check.py,sha256=28PcG8Kp6OpjSLSi1r2boL2Ryeh6xkaCL87HFbjs6GA,129
|
|
4
|
+
lamindb_setup/_check_setup.py,sha256=DJ4lZp4N9Dcri8H7PEOl-YDoi4qqfQnXvwBuL4venAw,3425
|
|
5
|
+
lamindb_setup/_close.py,sha256=pf8PHrtRBC6TycBtVAXzD9EZSGufoyp5M82o6zLHmt4,1240
|
|
6
|
+
lamindb_setup/_connect_instance.py,sha256=C1cAcTUV0OWnwPoxdlZwZtoMwybLypGY77mIIQLmiBg,16110
|
|
7
|
+
lamindb_setup/_delete.py,sha256=Mip5M9tCxyfsjzdcPCl6x9CQ0TkYTqKNNWDIcJ-KVMo,5677
|
|
8
|
+
lamindb_setup/_django.py,sha256=uIQflpkp8l3axyPaKURlk3kacgpElVP5KOKmFxYSMGk,1454
|
|
9
|
+
lamindb_setup/_entry_points.py,sha256=Hs2oJQOCTaGUdWn-1mufM6qUZr9W_EJ_Oc3f0_Vc0Yw,616
|
|
10
|
+
lamindb_setup/_exportdb.py,sha256=QLjoH4dEwqa01A12naKaDPglCCzl2_VLKWFfJRE_uSg,2113
|
|
11
|
+
lamindb_setup/_importdb.py,sha256=fKv9ev5OOj_-bmzC8XZ1GxOcjIjI486yrHSHDWQrJeI,1874
|
|
12
|
+
lamindb_setup/_init_instance.py,sha256=JV34P4ShinIdeUmHeoOvNE3WtzLbk37HcsWxfaEC_ks,13944
|
|
13
|
+
lamindb_setup/_migrate.py,sha256=jmapRWceXFCALTIfVz6IYKP0afJY2F04sOOy4whaDrM,8997
|
|
14
|
+
lamindb_setup/_register_instance.py,sha256=alQuYp2f8Ct8xvRC1gt8p_HZ0tqCd3gZD3kiPBLPpsI,1269
|
|
15
|
+
lamindb_setup/_schema.py,sha256=b3uzhhWpV5mQtDwhMINc2MabGCnGLESy51ito3yl6Wc,679
|
|
16
|
+
lamindb_setup/_schema_metadata.py,sha256=7ITlzIK32GHdhMq9e0GtPM3QbzJWhUvzPutiHrjjPk0,13986
|
|
17
|
+
lamindb_setup/_set_managed_storage.py,sha256=4tDxXQMt8Gw028uY3vIQxZQ7qBNXhQMc8saarNK_Z-s,2043
|
|
18
|
+
lamindb_setup/_setup_user.py,sha256=-g7Xj6510BDyM8kuqAsVBZFwehlhBa_uWBSV1rPeuM8,4586
|
|
19
|
+
lamindb_setup/_silence_loggers.py,sha256=AKF_YcHvX32eGXdsYK8MJlxEaZ-Uo2f6QDRzjKFCtws,1568
|
|
20
|
+
lamindb_setup/core/__init__.py,sha256=BxIVMX5HQq8oZ1OuY_saUEJz5Tdd7gaCPngxVu5iou4,417
|
|
21
|
+
lamindb_setup/core/_aws_credentials.py,sha256=_wBWC10MGx3PW9UXGhsVNlq7YvCER3RhfRgAdlxEjNM,6120
|
|
22
|
+
lamindb_setup/core/_aws_storage.py,sha256=nEjeUv4xUVpoV0Lx-zjjmyb9w804bDyaeiM-OqbfwM0,1799
|
|
23
|
+
lamindb_setup/core/_deprecated.py,sha256=HN7iUBdEgahw5e4NHCd1VJooUfieNb6GRzS5x8jU-q8,2549
|
|
24
|
+
lamindb_setup/core/_docs.py,sha256=3k-YY-oVaJd_9UIY-LfBg_u8raKOCNfkZQPA73KsUhs,276
|
|
25
|
+
lamindb_setup/core/_hub_client.py,sha256=cN19XbZmvLCxL_GKdOcKbedNRL7kR47vmLmA--NMv-U,6306
|
|
26
|
+
lamindb_setup/core/_hub_core.py,sha256=qVGGsWVfP6GK9UzmEz1kuR_B8wFkgTstMJJoMHeUF0c,20007
|
|
27
|
+
lamindb_setup/core/_hub_crud.py,sha256=IAuPZes1am8OFwtcf5jSRQPGG1eKwVTEsp9Li-uq0cQ,5377
|
|
28
|
+
lamindb_setup/core/_hub_utils.py,sha256=6dyDGyzYFgVfR_lE3VN3CP1jGp98gxPtr-T91PAP05U,2687
|
|
29
|
+
lamindb_setup/core/_private_django_api.py,sha256=KIn43HOhiRjkbTbddyJqv-WNTTa1bAizbM1tWXoXPBg,2869
|
|
30
|
+
lamindb_setup/core/_settings.py,sha256=eslFO84vb5uRRfJ3r_uu4O8677l8lU5BbpZJMSAYw6A,8244
|
|
31
|
+
lamindb_setup/core/_settings_instance.py,sha256=agzlSvKhvLyyNPf-Gw-M3FYn2ARpR1QEoCexhIHX5IU,19437
|
|
32
|
+
lamindb_setup/core/_settings_load.py,sha256=boeNntqIZ_DjelRBUAGp0ujc5akmbrrsk-LY28exa7E,4099
|
|
33
|
+
lamindb_setup/core/_settings_save.py,sha256=rxGxgaK5i9exKqSJERQQyY1WZio20meoQJoYXlVW-1w,3138
|
|
34
|
+
lamindb_setup/core/_settings_storage.py,sha256=dPIvbA6PkdjM8gsX6zxtH7VNMc4vhkuEO4luVMZY7RQ,12243
|
|
35
|
+
lamindb_setup/core/_settings_store.py,sha256=WcsgOmgnu9gztcrhp-N4OONNZyxICHV8M0HdJllTaEo,2219
|
|
36
|
+
lamindb_setup/core/_settings_user.py,sha256=lWqV3HmZCsEq2UsU_iVNW0p9ddsNg7-B6xOaMNH1aw0,1475
|
|
37
|
+
lamindb_setup/core/_setup_bionty_sources.py,sha256=qTPMV5TEbNiTB81QqG2rSs6W8j8kQ7kVQMLOXRzAxBI,4004
|
|
38
|
+
lamindb_setup/core/cloud_sqlite_locker.py,sha256=i6TrT7HG0lqliPvZTlsZ_uplPaqhPBbabyfeR32SkA8,7107
|
|
39
|
+
lamindb_setup/core/django.py,sha256=jSbckc_R39BhnANGhO5YFzKA8BHNANJDDgS5rwkDWmU,3828
|
|
40
|
+
lamindb_setup/core/exceptions.py,sha256=4NpLUNUIfXYVTFX2FvLZF8RW34exk2Vn2X3G4YhnTRg,276
|
|
41
|
+
lamindb_setup/core/hashing.py,sha256=2kZy_7NQB1WoUK8SBrhFX90lBpTkBr1V9tf7FS9Fe2Q,3380
|
|
42
|
+
lamindb_setup/core/types.py,sha256=zJii2le38BJUmsNVvzDrbzGYr0yaeb-9Rw9IKmsBr3k,523
|
|
43
|
+
lamindb_setup/core/upath.py,sha256=UqfZcSIEflje2393osJ0tleizGKip5N1VJtXXVFUH7U,31061
|
|
44
|
+
lamindb_setup-1.0.0.dist-info/LICENSE,sha256=UOZ1F5fFDe3XXvG4oNnkL1-Ecun7zpHzRxjp-XsMeAo,11324
|
|
45
|
+
lamindb_setup-1.0.0.dist-info/WHEEL,sha256=CpUCUxeHQbRN5UGRQHYRJorO5Af-Qy_fHMctcQ8DSGI,82
|
|
46
|
+
lamindb_setup-1.0.0.dist-info/METADATA,sha256=d-m3YDWkYyQlU4qym2osn4UZZAH_lHVBr9t_Tb5xf4g,1689
|
|
47
|
+
lamindb_setup-1.0.0.dist-info/RECORD,,
|
|
@@ -1,47 +0,0 @@
|
|
|
1
|
-
lamindb_setup/__init__.py,sha256=41Rm-lDXIF3ir0Xsj-vpB0EZO5SmkipsRc5pmUzBEvk,1714
|
|
2
|
-
lamindb_setup/_cache.py,sha256=1XnM-V_KprbjpgPY7Bg3FYn53Iz_2_fEgcMOaSdKKbg,1332
|
|
3
|
-
lamindb_setup/_check.py,sha256=28PcG8Kp6OpjSLSi1r2boL2Ryeh6xkaCL87HFbjs6GA,129
|
|
4
|
-
lamindb_setup/_check_setup.py,sha256=6cSfpmVOSgU7YiVHfJpBTGTQ7rrnwunt1pJT_jkgNM8,3196
|
|
5
|
-
lamindb_setup/_close.py,sha256=cXNwK7QTTyNFt2XTpLnO3KHljJ7ShOcISk95np_dltE,1239
|
|
6
|
-
lamindb_setup/_connect_instance.py,sha256=ClSM1zQAqVmNBapmB7H3dzmnWdn1dkpr_y5HAsF74XU,16070
|
|
7
|
-
lamindb_setup/_delete.py,sha256=yjLIegM2Lh6sWRSTTybI17wK_kA4_pF_k3iVUkkgEAE,5681
|
|
8
|
-
lamindb_setup/_django.py,sha256=DWUTjjVhEViX0S-zIkeqQgKovWqVgWMl4Y0ANwlA3Pw,1505
|
|
9
|
-
lamindb_setup/_entry_points.py,sha256=Hs2oJQOCTaGUdWn-1mufM6qUZr9W_EJ_Oc3f0_Vc0Yw,616
|
|
10
|
-
lamindb_setup/_exportdb.py,sha256=43g77-tH-vAlTn8ig1mMD9-KXLKvxUeDLaq0gVu3l-c,2114
|
|
11
|
-
lamindb_setup/_importdb.py,sha256=yYYShzUajTsR-cTW4CZ-UNDWZY2uE5PAgNbp-wn8Ogc,1874
|
|
12
|
-
lamindb_setup/_init_instance.py,sha256=zJbkP22h4Yif_VNooL06FFoHqH1EU45CqiLwF8FUaKs,14368
|
|
13
|
-
lamindb_setup/_migrate.py,sha256=x_b4k4XRfLSD-EEFMc324yK6DIK7goW33wUytbIWlNs,8917
|
|
14
|
-
lamindb_setup/_register_instance.py,sha256=alQuYp2f8Ct8xvRC1gt8p_HZ0tqCd3gZD3kiPBLPpsI,1269
|
|
15
|
-
lamindb_setup/_schema.py,sha256=b3uzhhWpV5mQtDwhMINc2MabGCnGLESy51ito3yl6Wc,679
|
|
16
|
-
lamindb_setup/_schema_metadata.py,sha256=49wDLbhRhatDeADjHOPfQURt65lf_OZ7lob1ZiAT_ac,13773
|
|
17
|
-
lamindb_setup/_set_managed_storage.py,sha256=4tDxXQMt8Gw028uY3vIQxZQ7qBNXhQMc8saarNK_Z-s,2043
|
|
18
|
-
lamindb_setup/_setup_user.py,sha256=-g7Xj6510BDyM8kuqAsVBZFwehlhBa_uWBSV1rPeuM8,4586
|
|
19
|
-
lamindb_setup/_silence_loggers.py,sha256=AKF_YcHvX32eGXdsYK8MJlxEaZ-Uo2f6QDRzjKFCtws,1568
|
|
20
|
-
lamindb_setup/core/__init__.py,sha256=BxIVMX5HQq8oZ1OuY_saUEJz5Tdd7gaCPngxVu5iou4,417
|
|
21
|
-
lamindb_setup/core/_aws_credentials.py,sha256=E8yanKOq-idaIz5y9D9SazHaYJKX69VLK3pn7jl82do,5815
|
|
22
|
-
lamindb_setup/core/_aws_storage.py,sha256=nEjeUv4xUVpoV0Lx-zjjmyb9w804bDyaeiM-OqbfwM0,1799
|
|
23
|
-
lamindb_setup/core/_deprecated.py,sha256=3qxUI1dnDlSeR0BYrv7ucjqRBEojbqotPgpShXs4KF8,2520
|
|
24
|
-
lamindb_setup/core/_docs.py,sha256=3k-YY-oVaJd_9UIY-LfBg_u8raKOCNfkZQPA73KsUhs,276
|
|
25
|
-
lamindb_setup/core/_hub_client.py,sha256=cN19XbZmvLCxL_GKdOcKbedNRL7kR47vmLmA--NMv-U,6306
|
|
26
|
-
lamindb_setup/core/_hub_core.py,sha256=cZfEDFq2z0cHjyPqwg7K5K3vw9C2nDHnbIHmmAjVbeM,19997
|
|
27
|
-
lamindb_setup/core/_hub_crud.py,sha256=ro4dvZ0EaHs7_QwJH6BoKl69Wc9HEPDkIc9BFyO_DMg,5460
|
|
28
|
-
lamindb_setup/core/_hub_utils.py,sha256=08NwQsb53-tXa_pr-f0tPTN0FeeVf_i1p3dEbEWD0F4,3016
|
|
29
|
-
lamindb_setup/core/_private_django_api.py,sha256=KIn43HOhiRjkbTbddyJqv-WNTTa1bAizbM1tWXoXPBg,2869
|
|
30
|
-
lamindb_setup/core/_settings.py,sha256=NYrSGtAw68mlQJgzBnV-DECi-RUBn32eeosyYCBtW3I,8232
|
|
31
|
-
lamindb_setup/core/_settings_instance.py,sha256=ajcq9zRNE598tTqyMkMqaEOubVfFeE998DPtbgyzK3A,18801
|
|
32
|
-
lamindb_setup/core/_settings_load.py,sha256=5OpghcbkrK9KBM_0Iu-61FTI76UbOpPkkJpUittXS-w,4098
|
|
33
|
-
lamindb_setup/core/_settings_save.py,sha256=rxGxgaK5i9exKqSJERQQyY1WZio20meoQJoYXlVW-1w,3138
|
|
34
|
-
lamindb_setup/core/_settings_storage.py,sha256=FOTyi89BZ48a8elCQ91C4B6oMO4tBnva4J6Tk40N9Ww,12249
|
|
35
|
-
lamindb_setup/core/_settings_store.py,sha256=WcsgOmgnu9gztcrhp-N4OONNZyxICHV8M0HdJllTaEo,2219
|
|
36
|
-
lamindb_setup/core/_settings_user.py,sha256=iz0MqFLKXqm8LYx_CHmr02_oNvYWFLIxKkJLdpS5W08,1476
|
|
37
|
-
lamindb_setup/core/_setup_bionty_sources.py,sha256=jZOPXpipW_5IjMO-bLMk-_wVwk7-5MLd72K2rnqqy7U,4001
|
|
38
|
-
lamindb_setup/core/cloud_sqlite_locker.py,sha256=i6TrT7HG0lqliPvZTlsZ_uplPaqhPBbabyfeR32SkA8,7107
|
|
39
|
-
lamindb_setup/core/django.py,sha256=E4U9nUlV2kHd-G5v6iSdFGAAWixlQDxOFwMwOMG9xfw,3864
|
|
40
|
-
lamindb_setup/core/exceptions.py,sha256=4NpLUNUIfXYVTFX2FvLZF8RW34exk2Vn2X3G4YhnTRg,276
|
|
41
|
-
lamindb_setup/core/hashing.py,sha256=26dtak7XgmrWa_D1zuDyxObRQcriMtnc1yEigkKASmM,3142
|
|
42
|
-
lamindb_setup/core/types.py,sha256=zJii2le38BJUmsNVvzDrbzGYr0yaeb-9Rw9IKmsBr3k,523
|
|
43
|
-
lamindb_setup/core/upath.py,sha256=X5Jjm50-br1Qq3eRlO6U4ykidptc2QzoQtq-ilaPt4Q,29602
|
|
44
|
-
lamindb_setup-0.81.4.dist-info/LICENSE,sha256=UOZ1F5fFDe3XXvG4oNnkL1-Ecun7zpHzRxjp-XsMeAo,11324
|
|
45
|
-
lamindb_setup-0.81.4.dist-info/WHEEL,sha256=EZbGkh7Ie4PoZfRQ8I0ZuP9VklN_TvcZ6DSE5Uar4z4,81
|
|
46
|
-
lamindb_setup-0.81.4.dist-info/METADATA,sha256=xstSHpwOECuKUylOziRLHFHtafUtglGT1CQA0lUGscs,1730
|
|
47
|
-
lamindb_setup-0.81.4.dist-info/RECORD,,
|
|
File without changes
|