lamindb_setup 1.5.2__py3-none-any.whl → 1.6.1__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 CHANGED
@@ -33,7 +33,7 @@ Modules & settings:
33
33
 
34
34
  """
35
35
 
36
- __version__ = "1.5.2" # denote a release candidate for 0.1.0 with 0.1rc1
36
+ __version__ = "1.6.1" # denote a release candidate for 0.1.0 with 0.1rc1
37
37
 
38
38
  import os
39
39
 
@@ -2,7 +2,7 @@ from __future__ import annotations
2
2
 
3
3
  import importlib
4
4
  import os
5
- from typing import TYPE_CHECKING
5
+ from typing import TYPE_CHECKING, Any
6
6
  from uuid import UUID
7
7
 
8
8
  from lamin_utils import logger
@@ -67,10 +67,12 @@ def update_db_using_local(
67
67
  db_updated = None
68
68
  # check if postgres
69
69
  if hub_instance_result["db_scheme"] == "postgresql":
70
- db_dsn_hub = LaminDsnModel(db=hub_instance_result["db"])
71
70
  if db is not None:
72
- db_dsn_local = LaminDsnModel(db=db)
71
+ # use only the provided db if it is set
72
+ db_dsn_hub = LaminDsnModel(db=db)
73
+ db_dsn_local = db_dsn_hub
73
74
  else:
75
+ db_dsn_hub = LaminDsnModel(db=hub_instance_result["db"])
74
76
  # read directly from the environment
75
77
  if os.getenv("LAMINDB_INSTANCE_DB") is not None:
76
78
  logger.important("loading db URL from env variable LAMINDB_INSTANCE_DB")
@@ -78,16 +80,15 @@ def update_db_using_local(
78
80
  # read from a cached settings file in case the hub result is only
79
81
  # read level or inexistent
80
82
  elif settings_file.exists() and (
81
- db_dsn_hub.db.user is None
82
- or (db_dsn_hub.db.user is not None and "read" in db_dsn_hub.db.user)
83
+ db_dsn_hub.db.user in {None, "none"} or "read" in db_dsn_hub.db.user # type:ignore
83
84
  ):
84
85
  isettings = load_instance_settings(settings_file)
85
86
  db_dsn_local = LaminDsnModel(db=isettings.db)
86
87
  else:
87
88
  # just take the default hub result and ensure there is actually a user
88
89
  if (
89
- db_dsn_hub.db.user == "none"
90
- and db_dsn_hub.db.password == "none"
90
+ db_dsn_hub.db.user in {None, "none"}
91
+ and db_dsn_hub.db.password in {None, "none"}
91
92
  and raise_permission_error
92
93
  ):
93
94
  raise PermissionError(
@@ -95,13 +96,13 @@ def update_db_using_local(
95
96
  " a DB URL and pass it via --db <db_url>"
96
97
  )
97
98
  db_dsn_local = db_dsn_hub
98
- if not check_db_dsn_equal_up_to_credentials(db_dsn_hub.db, db_dsn_local.db):
99
- raise ValueError(
100
- "The local differs from the hub database information:\n 1. did you"
101
- " pass a wrong db URL with --db?\n 2. did your database get updated by"
102
- " an admin?\nConsider deleting your cached database environment:\nrm"
103
- f" {settings_file.as_posix()}"
104
- )
99
+ if not check_db_dsn_equal_up_to_credentials(db_dsn_hub.db, db_dsn_local.db):
100
+ raise ValueError(
101
+ "The local differs from the hub database information:\n"
102
+ "did your database get updated by an admin?\n"
103
+ "Consider deleting your cached database environment:\nrm"
104
+ f" {settings_file.as_posix()}"
105
+ )
105
106
  db_updated = LaminDsn.build(
106
107
  scheme=db_dsn_hub.db.scheme,
107
108
  user=db_dsn_local.db.user,
@@ -188,7 +189,7 @@ def _connect_instance(
188
189
 
189
190
 
190
191
  @unlock_cloud_sqlite_upon_exception(ignore_prev_locker=True)
191
- def connect(instance: str | None = None, **kwargs) -> str | tuple | None:
192
+ def connect(instance: str | None = None, **kwargs: Any) -> str | tuple | None:
192
193
  """Connect to an instance.
193
194
 
194
195
  Args:
@@ -345,11 +346,15 @@ def migrate_lnschema_core(
345
346
  if db_type == "sqlite":
346
347
  import sqlite3
347
348
 
349
+ # maybe also use LAMINDB_DJANGO_DATABASE_URL here?
348
350
  conn = sqlite3.connect(parsed_uri.path)
349
351
  elif db_type in ["postgresql", "postgres"]:
350
352
  import psycopg2
351
353
 
352
- conn = psycopg2.connect(isettings.db)
354
+ # do not ignore LAMINDB_DJANGO_DATABASE_URL if it is set
355
+ conn = psycopg2.connect(
356
+ os.environ.get("LAMINDB_DJANGO_DATABASE_URL", isettings.db)
357
+ )
353
358
  else:
354
359
  raise ValueError("Unsupported database type. Use 'sqlite' or 'postgresql' URI.")
355
360
 
@@ -98,13 +98,31 @@ def register_user(usettings):
98
98
  def register_initial_records(isettings: InstanceSettings, usettings):
99
99
  """Register space, user & storage in DB."""
100
100
  from django.db.utils import OperationalError
101
- from lamindb.models import Space
101
+ from lamindb.models import Branch, Space
102
102
 
103
103
  try:
104
104
  Space.objects.get_or_create(
105
+ uid="A",
105
106
  name="All",
106
107
  description="Every team & user with access to the instance has access.",
107
108
  )
109
+ Branch.objects.get_or_create(
110
+ id=-1,
111
+ uid="T",
112
+ name="Trash",
113
+ description="The trash.",
114
+ )
115
+ Branch.objects.get_or_create(
116
+ id=0,
117
+ uid="A",
118
+ name="Archive",
119
+ description="The archive.",
120
+ )
121
+ Branch.objects.get_or_create(
122
+ uid="M",
123
+ name="Main",
124
+ description="The main & default branch of the instance.",
125
+ )
108
126
  register_user(usettings)
109
127
  register_storage_in_instance(isettings.storage)
110
128
  except OperationalError as error:
@@ -206,7 +224,7 @@ class CannotSwitchDefaultInstance(SystemExit):
206
224
  MESSAGE_CANNOT_SWITCH_DEFAULT_INSTANCE = """
207
225
  You cannot write to different instances in the same Python session.
208
226
 
209
- Do you want to read from another instance via `Record.using()`? For example:
227
+ Do you want to read from another instance via `SQLRecord.using()`? For example:
210
228
 
211
229
  ln.Artifact.using("laminlabs/cellxgene").filter()
212
230
 
@@ -159,7 +159,7 @@ class FieldMetadata(BaseModel):
159
159
 
160
160
  class _ModelHandler:
161
161
  def __init__(self, model, module_name: str, included_modules: list[str]) -> None:
162
- from lamindb.models import LinkORM
162
+ from lamindb.models import IsLink
163
163
 
164
164
  self.model = model
165
165
  self.class_name = model.__name__
@@ -168,7 +168,7 @@ class _ModelHandler:
168
168
  self.table_name = model._meta.db_table
169
169
  self.included_modules = included_modules
170
170
  self.fields = self._get_fields_metadata(self.model)
171
- self.is_link_table = issubclass(model, LinkORM)
171
+ self.is_link_table = issubclass(model, IsLink)
172
172
  self.name_field = model._name_field if hasattr(model, "_name_field") else None
173
173
  self.ontology_id_field = (
174
174
  model._ontology_id_field if hasattr(model, "_ontology_id_field") else None
@@ -245,7 +245,7 @@ class _ModelHandler:
245
245
  return related_fields
246
246
 
247
247
  def _get_field_metadata(self, model, field: Field):
248
- from lamindb.models import LinkORM
248
+ from lamindb.models import IsLink
249
249
 
250
250
  internal_type = field.get_internal_type()
251
251
  model_name = field.model._meta.model_name
@@ -296,7 +296,7 @@ class _ModelHandler:
296
296
  model_name=model_name,
297
297
  field_name=field_name,
298
298
  type=internal_type,
299
- is_link_table=issubclass(field.model, LinkORM),
299
+ is_link_table=issubclass(field.model, IsLink),
300
300
  is_primary_key=is_primary_key,
301
301
  is_editable=is_editable,
302
302
  max_length=max_length,
@@ -400,7 +400,7 @@ class _SchemaHandler:
400
400
  return self.to_dict(include_django_objects=False)
401
401
 
402
402
  def _get_modules_metadata(self):
403
- from lamindb.models import Record, Registry
403
+ from lamindb.models import Registry, SQLRecord
404
404
 
405
405
  all_models = {
406
406
  module_name: {
@@ -411,7 +411,7 @@ class _SchemaHandler:
411
411
  module_name
412
412
  ).models.__dict__.values()
413
413
  if model.__class__ is Registry
414
- and model is not Record
414
+ and model is not SQLRecord
415
415
  and not model._meta.abstract
416
416
  and model.__get_module_name__() == module_name
417
417
  }
@@ -2,6 +2,7 @@ from __future__ import annotations
2
2
 
3
3
  import json
4
4
  import os
5
+ from typing import Literal
5
6
  from urllib.request import urlretrieve
6
7
 
7
8
  from gotrue.errors import AuthUnknownError
@@ -25,7 +26,7 @@ def load_fallback_connector() -> Connector:
25
26
  return connector
26
27
 
27
28
 
28
- PROD_URL = "https://hub.lamin.ai"
29
+ PROD_URL = "https://laesaummdydllppgfchu.supabase.co"
29
30
  PROD_ANON_KEY = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJzdXBhYmFzZSIsInJlZiI6ImxhZXNhdW1tZHlkbGxwcGdmY2h1Iiwicm9sZSI6ImFub24iLCJpYXQiOjE2NTY4NDA1NTEsImV4cCI6MTk3MjQxNjU1MX0.WUeCRiun0ExUxKIv5-CtjF6878H8u26t0JmCWx3_2-c"
30
31
 
31
32
 
@@ -197,10 +198,20 @@ def requests_client():
197
198
  return requests
198
199
 
199
200
 
200
- def request_get_auth(url: str, access_token: str, renew_token: bool = True):
201
+ def request_with_auth(
202
+ url: str,
203
+ method: Literal["get", "post", "put", "delete", "head", "options"],
204
+ access_token: str,
205
+ renew_token: bool = True,
206
+ **kwargs,
207
+ ):
201
208
  requests = requests_client()
202
209
 
203
- response = requests.get(url, headers={"Authorization": f"Bearer {access_token}"})
210
+ headers = kwargs.pop("headers", {})
211
+ headers["Authorization"] = f"Bearer {access_token}"
212
+
213
+ make_request = getattr(requests, method)
214
+ response = make_request(url, headers=headers, **kwargs)
204
215
  # upate access_token and try again if failed
205
216
  if response.status_code != 200 and renew_token:
206
217
  from lamindb_setup import settings
@@ -212,7 +223,7 @@ def request_get_auth(url: str, access_token: str, renew_token: bool = True):
212
223
  settings.user.access_token = access_token
213
224
  save_user_settings(settings.user)
214
225
 
215
- response = requests.get(
216
- url, headers={"Authorization": f"Bearer {access_token}"}
217
- )
226
+ headers["Authorization"] = f"Bearer {access_token}"
227
+
228
+ response = make_request(url, headers=headers, **kwargs)
218
229
  return response
@@ -17,7 +17,7 @@ from ._hub_client import (
17
17
  call_with_fallback,
18
18
  call_with_fallback_auth,
19
19
  connect_hub,
20
- request_get_auth,
20
+ request_with_auth,
21
21
  )
22
22
  from ._hub_crud import (
23
23
  _delete_instance_record,
@@ -36,6 +36,7 @@ from ._hub_utils import (
36
36
  from ._settings import settings
37
37
  from ._settings_instance import InstanceSettings
38
38
  from ._settings_storage import StorageSettings, base62
39
+ from .hashing import hash_and_encode_as_b62
39
40
 
40
41
  if TYPE_CHECKING:
41
42
  from supabase import Client # type: ignore
@@ -116,6 +117,28 @@ def _select_storage(
116
117
  return True
117
118
 
118
119
 
120
+ def _select_storage_or_parent(path: str, client: Client) -> dict | None:
121
+ result = client.rpc("existing_root_or_child", {"_path": path}).execute().data
122
+ if result["root"] is None:
123
+ return None
124
+ result["uid"] = result.pop("lnid")
125
+ result["instance_uid"] = hash_and_encode_as_b62(
126
+ UUID(result.pop("instance_id")).hex
127
+ )[:12]
128
+ return result
129
+
130
+
131
+ def select_storage_or_parent(path: str, access_token: str | None = None) -> dict | None:
132
+ if settings.user.handle != "anonymous" or access_token is not None:
133
+ return call_with_fallback_auth(
134
+ _select_storage_or_parent,
135
+ path=path,
136
+ access_token=access_token,
137
+ )
138
+ else:
139
+ return call_with_fallback(_select_storage_or_parent, path=path)
140
+
141
+
119
142
  def init_storage_hub(
120
143
  ssettings: StorageSettings,
121
144
  auto_populate_instance: bool = True,
@@ -472,7 +495,7 @@ def access_db(
472
495
  )
473
496
  url = instance_api_url + url
474
497
 
475
- response = request_get_auth(url, access_token, renew_token) # type: ignore
498
+ response = request_with_auth(url, "get", access_token, renew_token) # type: ignore
476
499
  response_json = response.json()
477
500
  if response.status_code != 200:
478
501
  raise PermissionError(
@@ -5,6 +5,7 @@ import sys
5
5
  from typing import TYPE_CHECKING
6
6
 
7
7
  from appdirs import AppDirs
8
+ from lamin_utils import logger
8
9
 
9
10
  from ._settings_load import (
10
11
  load_instance_settings,
@@ -162,7 +163,16 @@ class SetupSettings:
162
163
  self._cache_dir = cache_dir
163
164
  else:
164
165
  cache_dir = self._cache_dir
165
- cache_dir.mkdir(parents=True, exist_ok=True)
166
+ try:
167
+ cache_dir.mkdir(parents=True, exist_ok=True)
168
+ # we don not want this to error
169
+ # beause no actual writing happens on just getting the cache dir
170
+ # in cloud_to_local_no_update for example
171
+ # so it should not fail on read-only systems
172
+ except Exception as e:
173
+ logger.warning(
174
+ f"Failed to create lamin cache directory at {cache_dir}: {e}"
175
+ )
166
176
  return cache_dir
167
177
 
168
178
  @property
@@ -2,9 +2,7 @@ from __future__ import annotations
2
2
 
3
3
  import os
4
4
  import secrets
5
- import shutil
6
5
  import string
7
- from pathlib import Path
8
6
  from typing import TYPE_CHECKING, Any, Literal
9
7
 
10
8
  import fsspec
@@ -208,7 +206,7 @@ class StorageSettings:
208
206
  ):
209
207
  self._uid = uid
210
208
  self._uuid_ = uuid
211
- self._root_init = UPath(root)
209
+ self._root_init = UPath(root).expanduser()
212
210
  if isinstance(self._root_init, LocalPathClasses): # local paths
213
211
  try:
214
212
  (self._root_init / ".lamindb").mkdir(parents=True, exist_ok=True)
@@ -2,6 +2,7 @@ import os
2
2
  from pathlib import Path
3
3
  from typing import Optional
4
4
 
5
+ from lamin_utils import logger
5
6
  from pydantic_settings import BaseSettings, SettingsConfigDict
6
7
 
7
8
  if "LAMIN_SETTINGS_DIR" in os.environ:
@@ -12,7 +13,11 @@ else:
12
13
  # hence, let's take home/.lamin
13
14
  settings_dir = Path.home() / ".lamin"
14
15
 
15
- settings_dir.mkdir(parents=True, exist_ok=True)
16
+
17
+ try:
18
+ settings_dir.mkdir(parents=True, exist_ok=True)
19
+ except Exception as e:
20
+ logger.warning(f"Failed to create lamin settings directory at {settings_dir}: {e}")
16
21
 
17
22
 
18
23
  def get_settings_file_name_prefix():
@@ -9,12 +9,17 @@ from lamin_utils import logger
9
9
  from .upath import UPath, create_mapper, infer_filesystem
10
10
 
11
11
  if TYPE_CHECKING:
12
+ from collections.abc import Callable
12
13
  from pathlib import Path
14
+ from typing import ParamSpec, TypeVar
13
15
  from uuid import UUID
14
16
 
15
17
  from ._settings_instance import InstanceSettings
16
18
  from ._settings_user import UserSettings
17
19
 
20
+ P = ParamSpec("P")
21
+ R = TypeVar("R")
22
+
18
23
  EXPIRATION_TIME = 24 * 60 * 60 * 7 # 7 days
19
24
 
20
25
  MAX_MSG_COUNTER = 100 # print the msg after this number of iterations
@@ -207,7 +212,9 @@ def clear_locker():
207
212
 
208
213
 
209
214
  # decorator
210
- def unlock_cloud_sqlite_upon_exception(ignore_prev_locker: bool = False):
215
+ def unlock_cloud_sqlite_upon_exception(
216
+ ignore_prev_locker: bool = False,
217
+ ) -> Callable[[Callable[P, R]], Callable[P, R]]:
211
218
  """Decorator to unlock a cloud sqlite instance upon an exception.
212
219
 
213
220
  Ignores `InstanceLockedException`.
@@ -3,6 +3,8 @@ from __future__ import annotations
3
3
  # flake8: noqa
4
4
  import builtins
5
5
  import os
6
+ import sys
7
+ import importlib as il
6
8
  import jwt
7
9
  import time
8
10
  from pathlib import Path
@@ -170,8 +172,7 @@ def setup_django(
170
172
 
171
173
  module_names = ["core"] + list(isettings.modules)
172
174
  raise_import_error = True if init else False
173
- installed_apps = ["django.contrib.contenttypes"]
174
- installed_apps += [
175
+ installed_apps = [
175
176
  package_name
176
177
  for name in module_names
177
178
  if (
@@ -242,3 +243,44 @@ def setup_django(
242
243
 
243
244
  if isettings.keep_artifacts_local:
244
245
  isettings._search_local_root()
246
+
247
+
248
+ # THIS IS NOT SAFE
249
+ # especially if lamindb is imported already
250
+ # django.setup fails if called for the second time
251
+ # reset_django() allows to call setup again,
252
+ # needed to connect to a different instance in the same process if connected already
253
+ # there could be problems if models are already imported from lamindb or other modules
254
+ # these 'old' models can have any number of problems
255
+ def reset_django():
256
+ from django.conf import settings
257
+ from django.apps import apps
258
+ from django.db import connections
259
+
260
+ if not settings.configured:
261
+ return
262
+
263
+ connections.close_all()
264
+
265
+ if getattr(settings, "_wrapped", None) is not None:
266
+ settings._wrapped = None
267
+
268
+ app_names = {"django"} | {app.name for app in apps.get_app_configs()}
269
+
270
+ apps.app_configs.clear()
271
+ apps.apps_ready = apps.models_ready = apps.ready = apps.loading = False
272
+ apps.clear_cache()
273
+
274
+ # i suspect it is enough to just drop django and all the apps from sys.modules
275
+ # the code above is just a precaution
276
+ for module_name in list(sys.modules):
277
+ if module_name.partition(".")[0] in app_names:
278
+ del sys.modules[module_name]
279
+
280
+ il.invalidate_caches()
281
+
282
+ global db_token_manager
283
+ db_token_manager = DBTokenManager()
284
+
285
+ global IS_SETUP
286
+ IS_SETUP = False
@@ -821,7 +821,7 @@ register_implementation("s3", S3QueryPath, clobber=True)
821
821
 
822
822
 
823
823
  def create_path(path: UPathStr, access_token: str | None = None) -> UPath:
824
- upath = UPath(path)
824
+ upath = UPath(path).expanduser()
825
825
 
826
826
  if upath.protocol == "s3":
827
827
  # add managed credentials and other options for AWS s3 paths
lamindb_setup/py.typed ADDED
File without changes
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: lamindb_setup
3
- Version: 1.5.2
3
+ Version: 1.6.1
4
4
  Summary: Setup & configure LaminDB.
5
5
  Author-email: Lamin Labs <open-source@lamin.ai>
6
6
  Requires-Python: >=3.10
@@ -1,47 +1,48 @@
1
- lamindb_setup/__init__.py,sha256=FWTWZQC537S1pBQ8gLeqbyA-GkCqstvtPrSFUKpx7sw,2754
1
+ lamindb_setup/__init__.py,sha256=m38LZFyp_VF7qZdwLHYO-6TxKvZo3vTYw9mvjFFdsv4,2754
2
2
  lamindb_setup/_cache.py,sha256=ixasm_9pUFy-ztbhbqJRVP88uTbFclL60MwUUvZhMFs,1509
3
3
  lamindb_setup/_check.py,sha256=28PcG8Kp6OpjSLSi1r2boL2Ryeh6xkaCL87HFbjs6GA,129
4
4
  lamindb_setup/_check_setup.py,sha256=uveV6CGiwm9M5OMe3lxfAMDs5SU7j1EogJsQB03ZaRw,5928
5
- lamindb_setup/_connect_instance.py,sha256=qqB-ene_OLTgqd-M7ke9_gT6u81gzNy_Gx5K7FMUaag,18007
5
+ lamindb_setup/_connect_instance.py,sha256=JhC5A8mlJjV_XFmLFfwMf4LN9_wr5StOEOexAMitK3k,18270
6
6
  lamindb_setup/_delete.py,sha256=2KnZOqd5Kgr45XzjiDE9der35LODDUajZD6_hcurGtQ,5676
7
7
  lamindb_setup/_disconnect.py,sha256=p6tRLhixU4CuSxMKqzGTr-ovKmTRlZ8aID5dWQxOsg8,1092
8
8
  lamindb_setup/_django.py,sha256=uIQflpkp8l3axyPaKURlk3kacgpElVP5KOKmFxYSMGk,1454
9
9
  lamindb_setup/_entry_points.py,sha256=sKwXPX9xjOotoAjvgkU5LBwjjHLWVkh0ZGdiSsrch9k,522
10
10
  lamindb_setup/_exportdb.py,sha256=QLjoH4dEwqa01A12naKaDPglCCzl2_VLKWFfJRE_uSg,2113
11
11
  lamindb_setup/_importdb.py,sha256=fKv9ev5OOj_-bmzC8XZ1GxOcjIjI486yrHSHDWQrJeI,1874
12
- lamindb_setup/_init_instance.py,sha256=5RBv2X18SfnIrciHljaoVsFF25te2P7KwHx0Ww87HLw,14750
12
+ lamindb_setup/_init_instance.py,sha256=S5sk1nSMYe0Kxo_gpQygu0gBsIsAF1QIfLh_d5SeEF0,15253
13
13
  lamindb_setup/_migrate.py,sha256=ya-15sc91i4JmEWI4j00T2892x8hdy2fSW-qz4IdxLs,9739
14
14
  lamindb_setup/_register_instance.py,sha256=X7ZGlCVOZKq4zTpi3bxML4jzo6hgN9UYmdTxxf6JLmc,1205
15
15
  lamindb_setup/_schema.py,sha256=b3uzhhWpV5mQtDwhMINc2MabGCnGLESy51ito3yl6Wc,679
16
- lamindb_setup/_schema_metadata.py,sha256=WGZg2H5h-bwoJ3ypwh98Jc-VDYU9LCSU1i-PoWmn3Sw,14756
16
+ lamindb_setup/_schema_metadata.py,sha256=x4u15X_X-4dsS0Zot3mOwn_IWO0e7LL0Ip8vyUOffNQ,14758
17
17
  lamindb_setup/_set_managed_storage.py,sha256=qC3ACD_PWG-MrzcS3fQpjDEOuxAaJBgPqCU_bDvqtXo,2043
18
18
  lamindb_setup/_setup_user.py,sha256=8BSGsW5jfmB4FlkhMt5osYXBbVCdOQeAVATb-oAYxa0,4495
19
19
  lamindb_setup/_silence_loggers.py,sha256=AKF_YcHvX32eGXdsYK8MJlxEaZ-Uo2f6QDRzjKFCtws,1568
20
+ lamindb_setup/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
20
21
  lamindb_setup/core/__init__.py,sha256=BxIVMX5HQq8oZ1OuY_saUEJz5Tdd7gaCPngxVu5iou4,417
21
22
  lamindb_setup/core/_aws_options.py,sha256=BLLAtasJp7T0quMG7KgH8PmfHAn62izBwA7bYFwLV88,7748
22
23
  lamindb_setup/core/_aws_storage.py,sha256=nEjeUv4xUVpoV0Lx-zjjmyb9w804bDyaeiM-OqbfwM0,1799
23
24
  lamindb_setup/core/_deprecated.py,sha256=HN7iUBdEgahw5e4NHCd1VJooUfieNb6GRzS5x8jU-q8,2549
24
25
  lamindb_setup/core/_docs.py,sha256=3k-YY-oVaJd_9UIY-LfBg_u8raKOCNfkZQPA73KsUhs,276
25
- lamindb_setup/core/_hub_client.py,sha256=XJ9V0th11zcx87tDTDVtYf5YjnEC06_jiSRHcnbFseg,7510
26
- lamindb_setup/core/_hub_core.py,sha256=G5P7sZjH-2ZrWvmfQgJSB1Kw1JP01t070S4eX62mlwc,21738
26
+ lamindb_setup/core/_hub_client.py,sha256=TD92DxeDC1mJvPuA8Y03DVKcAiLGr8uaddPiQ66KXm0,7788
27
+ lamindb_setup/core/_hub_core.py,sha256=iLzPWbTwlUxmaCMOnU2jFtRqSYvP05DDI5IM5hUZVN0,22560
27
28
  lamindb_setup/core/_hub_crud.py,sha256=IAuPZes1am8OFwtcf5jSRQPGG1eKwVTEsp9Li-uq0cQ,5377
28
29
  lamindb_setup/core/_hub_utils.py,sha256=6dyDGyzYFgVfR_lE3VN3CP1jGp98gxPtr-T91PAP05U,2687
29
30
  lamindb_setup/core/_private_django_api.py,sha256=By63l3vIEtK1pq246FhHq3tslxsaTJGKm5VakYluWp4,2656
30
- lamindb_setup/core/_settings.py,sha256=zkogVBqRly37pyDOReVDV019hR3oY2POImobDjs8CM8,8375
31
+ lamindb_setup/core/_settings.py,sha256=rpakpthAcvjOeAmldvZquml-7NJ8i44Hu_P8pJV_coo,8790
31
32
  lamindb_setup/core/_settings_instance.py,sha256=ftHAFFbg_0iThuywuQM37RIiCQnMEOc1dftTig1_DZo,19382
32
33
  lamindb_setup/core/_settings_load.py,sha256=adVwwEiwglrNNpZFgoP-EENZkzxZvKOzUr3z204pe94,4658
33
34
  lamindb_setup/core/_settings_save.py,sha256=P04ZnWFSN4Qq_QFWXNvJDs4yxrY9CjQBol_BDku_JEw,3227
34
- lamindb_setup/core/_settings_storage.py,sha256=op31t12T_fCfTG8OSfnXnIxB9VCQPg8Oo2cnZHVap8Y,14203
35
- lamindb_setup/core/_settings_store.py,sha256=zyybc6fJXJcFNTjBrgtgbPhriInuhpmQKNoGmy8ScFA,2298
35
+ lamindb_setup/core/_settings_storage.py,sha256=mo7KyhRUbGx38m3ahFfsEKMhLUvXcHun7TE7Al2D0QE,14177
36
+ lamindb_setup/core/_settings_store.py,sha256=Qe5tsTtQO9TJ5jqr-VgiDs6MOkFrxO6y0kYEVveCN-I,2450
36
37
  lamindb_setup/core/_settings_user.py,sha256=5hmnMu6fxrHAcwBEtIL0P9N8V4B0SjhzIdqFQ9o3Tsg,1476
37
38
  lamindb_setup/core/_setup_bionty_sources.py,sha256=ox3X-SHiHa2lNPSWjwZhINypbLacX6kGwH6hVVrSFZc,1505
38
- lamindb_setup/core/cloud_sqlite_locker.py,sha256=i6TrT7HG0lqliPvZTlsZ_uplPaqhPBbabyfeR32SkA8,7107
39
- lamindb_setup/core/django.py,sha256=qOh71aBjBsrksDq4AGEP3LS2V5hKOh6MhCIY1Sudeos,8084
39
+ lamindb_setup/core/cloud_sqlite_locker.py,sha256=UBpmWcFLPhxwSWIF98n461NUJSYAHVXhsYmk8LpUTQU,7288
40
+ lamindb_setup/core/django.py,sha256=6nKn_sokPqXqWE9EdRvhNzS5tjsMo3IZSfHiwTN_HcI,9348
40
41
  lamindb_setup/core/exceptions.py,sha256=4NpLUNUIfXYVTFX2FvLZF8RW34exk2Vn2X3G4YhnTRg,276
41
42
  lamindb_setup/core/hashing.py,sha256=M3Q1-ywnqh4Uy5zojbQfLju19HU0ySp8Oi7FGIJXfFI,3667
42
43
  lamindb_setup/core/types.py,sha256=zJii2le38BJUmsNVvzDrbzGYr0yaeb-9Rw9IKmsBr3k,523
43
- lamindb_setup/core/upath.py,sha256=U5CBiHVoEBEUi-YzYd0G8wMONkO-wcXQQ9htfDWbw-s,33876
44
- lamindb_setup-1.5.2.dist-info/LICENSE,sha256=UOZ1F5fFDe3XXvG4oNnkL1-Ecun7zpHzRxjp-XsMeAo,11324
45
- lamindb_setup-1.5.2.dist-info/WHEEL,sha256=CpUCUxeHQbRN5UGRQHYRJorO5Af-Qy_fHMctcQ8DSGI,82
46
- lamindb_setup-1.5.2.dist-info/METADATA,sha256=ezs2jSr-kFuLaNsm2MOGjVJ6768Pvxg6c_46nytI3Kk,1792
47
- lamindb_setup-1.5.2.dist-info/RECORD,,
44
+ lamindb_setup/core/upath.py,sha256=5ECvPWBfgxqRuvr0oOpsmUHyXrMVmt5TTSqevh9CIwU,33889
45
+ lamindb_setup-1.6.1.dist-info/LICENSE,sha256=UOZ1F5fFDe3XXvG4oNnkL1-Ecun7zpHzRxjp-XsMeAo,11324
46
+ lamindb_setup-1.6.1.dist-info/WHEEL,sha256=CpUCUxeHQbRN5UGRQHYRJorO5Af-Qy_fHMctcQ8DSGI,82
47
+ lamindb_setup-1.6.1.dist-info/METADATA,sha256=O6yvdWQMBiPbQNx3Ly31rC_emPl29gDKwY8XasMeYWs,1792
48
+ lamindb_setup-1.6.1.dist-info/RECORD,,