lamindb_setup 0.74.1__py2.py3-none-any.whl → 0.74.3__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 CHANGED
@@ -34,7 +34,7 @@ Modules & settings:
34
34
 
35
35
  """
36
36
 
37
- __version__ = "0.74.1" # denote a release candidate for 0.1.0 with 0.1rc1
37
+ __version__ = "0.74.3" # denote a release candidate for 0.1.0 with 0.1rc1
38
38
 
39
39
  import sys
40
40
  from os import name as _os_name
@@ -74,7 +74,8 @@ def update_db_using_local(
74
74
  # read from a cached settings file in case the hub result is only
75
75
  # read level or inexistent
76
76
  elif settings_file.exists() and (
77
- "read" in db_dsn_hub.db.user or db_dsn_hub.db.user is None
77
+ db_dsn_hub.db.user is None
78
+ or (db_dsn_hub.db.user is not None and "read" in db_dsn_hub.db.user)
78
79
  ):
79
80
  isettings = load_instance_settings(settings_file)
80
81
  db_dsn_local = LaminDsnModel(db=isettings.db)
@@ -101,7 +102,7 @@ def update_db_using_local(
101
102
  scheme=db_dsn_hub.db.scheme,
102
103
  user=db_dsn_local.db.user,
103
104
  password=db_dsn_local.db.password,
104
- host=db_dsn_hub.db.host,
105
+ host=db_dsn_hub.db.host, # type: ignore
105
106
  port=db_dsn_hub.db.port,
106
107
  database=db_dsn_hub.db.database,
107
108
  )
@@ -29,7 +29,7 @@ MODELS = {
29
29
  # "ExperimentalFactor": False,
30
30
  # "DevelopmentalStage": False,
31
31
  # "Ethnicity": False,
32
- # "PublicSource": False,
32
+ # "Source": False,
33
33
  # },
34
34
  # "wetlab": {
35
35
  # "ExperimentType": False,
@@ -245,7 +245,10 @@ def init(
245
245
  if instance_state == "connected":
246
246
  settings.auto_connect = True # we can also debate this switch here
247
247
  return None
248
- ssettings = init_storage(storage, instance_id=instance_id)
248
+ # cannot past instance_id here because instance does not yet exist!
249
+ # the instance_id field of the storage table is populated at the end of
250
+ # init_instance_hub
251
+ ssettings = init_storage(storage)
249
252
  isettings = InstanceSettings(
250
253
  id=instance_id, # type: ignore
251
254
  owner=settings.user.handle,
@@ -5,7 +5,7 @@ from urllib.request import urlretrieve
5
5
 
6
6
  from gotrue.errors import AuthUnknownError
7
7
  from lamin_utils import logger
8
- from pydantic import BaseSettings
8
+ from pydantic_settings import BaseSettings
9
9
  from supabase import Client, create_client # type: ignore
10
10
  from supabase.lib.client_options import ClientOptions
11
11
 
@@ -59,9 +59,11 @@ class Environment:
59
59
 
60
60
  # runs ~0.5s
61
61
  def connect_hub(
62
- fallback_env: bool = False, client_options: ClientOptions = ClientOptions()
62
+ fallback_env: bool = False, client_options: ClientOptions | None = None
63
63
  ) -> Client:
64
64
  env = Environment(fallback=fallback_env)
65
+ if client_options is None:
66
+ client_options = ClientOptions(auto_refresh_token=False)
65
67
  return create_client(env.supabase_api_url, env.supabase_anon_key, client_options)
66
68
 
67
69
 
@@ -93,20 +93,21 @@ def _select_storage(
93
93
  return False
94
94
  else:
95
95
  existing_storage = response.data[0]
96
- if ssettings._instance_id is not None:
97
- # consider storage settings that are meant to be managed by an instance
98
- if UUID(existing_storage["instance_id"]) != ssettings._instance_id:
99
- # everything is alright if the instance_id matches
100
- # we're probably just switching storage locations
101
- # below can be turned into a warning and then delegate the error
102
- # to a unique constraint violation below
103
- raise ValueError(
104
- f"Storage root {root} is already managed by instance {existing_storage['instance_id']}."
105
- )
106
- else:
107
- # if the request is agnostic of the instance, that's alright,
108
- # we'll update the instance_id with what's stored in the hub
109
- ssettings._instance_id = UUID(existing_storage["instance_id"])
96
+ if existing_storage["instance_id"] is not None:
97
+ if ssettings._instance_id is not None:
98
+ # consider storage settings that are meant to be managed by an instance
99
+ if UUID(existing_storage["instance_id"]) != ssettings._instance_id:
100
+ # everything is alright if the instance_id matches
101
+ # we're probably just switching storage locations
102
+ # below can be turned into a warning and then delegate the error
103
+ # to a unique constraint violation below
104
+ raise ValueError(
105
+ f"Storage root {root} is already managed by instance {existing_storage['instance_id']}."
106
+ )
107
+ else:
108
+ # if the request is agnostic of the instance, that's alright,
109
+ # we'll update the instance_id with what's stored in the hub
110
+ ssettings._instance_id = UUID(existing_storage["instance_id"])
110
111
  ssettings._uuid_ = UUID(existing_storage["id"])
111
112
  if update_uid:
112
113
  ssettings._uid = existing_storage["lnid"]
@@ -145,11 +146,14 @@ def _init_storage(ssettings: StorageSettings, client: Client) -> None:
145
146
  id = uuid.uuid5(uuid.NAMESPACE_URL, root)
146
147
  else:
147
148
  id = uuid.uuid4()
148
- if ssettings._instance_id is None:
149
+ if ssettings._instance_id is None and settings._instance_exists:
149
150
  logger.warning(
150
151
  f"will manage storage location {ssettings.root_as_str} with instance {settings.instance.slug}"
151
152
  )
152
153
  ssettings._instance_id = settings.instance._id
154
+ instance_id_hex = (
155
+ None if ssettings._instance_id is None else ssettings._instance_id.hex
156
+ )
153
157
  fields = {
154
158
  "id": id.hex,
155
159
  "lnid": ssettings.uid,
@@ -157,7 +161,7 @@ def _init_storage(ssettings: StorageSettings, client: Client) -> None:
157
161
  "root": root,
158
162
  "region": ssettings.region,
159
163
  "type": ssettings.type,
160
- "instance_id": ssettings._instance_id.hex,
164
+ "instance_id": instance_id_hex,
161
165
  # the empty string is important as we want the user flow to be through LaminHub
162
166
  # if this errors with unique constraint error, the user has to update
163
167
  # the description in LaminHub
@@ -1,9 +1,10 @@
1
1
  from __future__ import annotations
2
2
 
3
- from typing import Optional
3
+ from typing import Any, ClassVar, Optional
4
+ from urllib.parse import urlparse, urlunparse
4
5
 
5
- from pydantic import BaseModel, validator
6
- from pydantic.networks import MultiHostDsn
6
+ from pydantic import BaseModel, Field, GetCoreSchemaHandler
7
+ from pydantic_core import CoreSchema, core_schema
7
8
 
8
9
 
9
10
  def validate_schema_arg(schema: str | None = None) -> str:
@@ -20,26 +21,59 @@ def validate_db_arg(db: str | None) -> None:
20
21
  LaminDsnModel(db=db)
21
22
 
22
23
 
23
- class LaminDsn(MultiHostDsn):
24
- """Custom DSN Type for Lamin.
25
-
26
- This class allows us to customize the allowed schemes for databases
27
- and also handles the parsing and building of DSN strings with the
28
- database name instead of URL path.
29
- """
30
-
31
- allowed_schemes = {
24
+ class LaminDsn(str):
25
+ allowed_schemes: ClassVar[set[str]] = {
32
26
  "postgresql",
33
27
  # future enabled schemes
34
28
  # "snowflake",
35
29
  # "bigquery"
36
30
  }
37
- user_required = True
38
- __slots__ = ()
31
+
32
+ @classmethod
33
+ def __get_pydantic_core_schema__(
34
+ cls, source_type: Any, handler: GetCoreSchemaHandler
35
+ ) -> CoreSchema:
36
+ return core_schema.no_info_after_validator_function(
37
+ cls.validate,
38
+ core_schema.str_schema(),
39
+ serialization=core_schema.plain_serializer_function_ser_schema(str),
40
+ )
41
+
42
+ @classmethod
43
+ def validate(cls, v: Any) -> LaminDsn:
44
+ if isinstance(v, str):
45
+ parsed = urlparse(v)
46
+ if parsed.scheme not in cls.allowed_schemes:
47
+ raise ValueError(f"Invalid scheme: {parsed.scheme}")
48
+ return cls(v)
49
+ elif isinstance(v, cls):
50
+ return v
51
+ else:
52
+ raise ValueError(f"Invalid value for LaminDsn: {v}")
53
+
54
+ @property
55
+ def user(self) -> str | None:
56
+ return urlparse(self).username
57
+
58
+ @property
59
+ def password(self) -> str | None:
60
+ return urlparse(self).password
61
+
62
+ @property
63
+ def host(self) -> str | None:
64
+ return urlparse(self).hostname
65
+
66
+ @property
67
+ def port(self) -> int | None:
68
+ return urlparse(self).port
39
69
 
40
70
  @property
41
- def database(self):
42
- return self.path[1:]
71
+ def database(self) -> str:
72
+ return urlparse(self).path.lstrip("/")
73
+
74
+ @property
75
+ def scheme(self) -> str:
76
+ return urlparse(self).scheme
43
77
 
44
78
  @classmethod
45
79
  def build(
@@ -49,28 +83,27 @@ class LaminDsn(MultiHostDsn):
49
83
  user: str | None = None,
50
84
  password: str | None = None,
51
85
  host: str,
52
- port: str | None = None,
86
+ port: int | None = None,
53
87
  database: str | None = None,
54
88
  query: str | None = None,
55
89
  fragment: str | None = None,
56
- **_kwargs: str,
57
- ) -> str:
58
- return super().build(
59
- scheme=scheme,
60
- user=user,
61
- password=password,
62
- host=host,
63
- port=str(port),
64
- path=f"/{database}",
65
- query=query,
66
- fragment=fragment,
67
- )
90
+ ) -> LaminDsn:
91
+ netloc = host
92
+ if port is not None:
93
+ netloc = f"{netloc}:{port}"
94
+ if user is not None:
95
+ auth = user
96
+ if password is not None:
97
+ auth = f"{auth}:{password}"
98
+ netloc = f"{auth}@{netloc}"
99
+
100
+ path = f"/{database}" if database else ""
101
+
102
+ url = urlunparse((scheme, netloc, path, "", query or "", fragment or ""))
103
+ return cls(url)
68
104
 
69
105
 
70
106
  class LaminDsnModel(BaseModel):
71
- db: LaminDsn
107
+ db: LaminDsn = Field(..., description="The database DSN")
72
108
 
73
- @validator("db")
74
- def check_db_name(cls, v):
75
- assert v.path and len(v.path) > 1, "database must be provided"
76
- return v
109
+ model_config = {"arbitrary_types_allowed": True}
@@ -4,7 +4,7 @@ from typing import TYPE_CHECKING, Optional
4
4
  from uuid import UUID, uuid4
5
5
 
6
6
  from lamin_utils import logger
7
- from pydantic.error_wrappers import ValidationError
7
+ from pydantic import ValidationError
8
8
 
9
9
  from ._settings_instance import InstanceSettings
10
10
  from ._settings_storage import StorageSettings
@@ -44,6 +44,8 @@ def save_settings(
44
44
  if type == Optional[bool]:
45
45
  type = bool
46
46
  if "__" not in store_key:
47
+ if store_key == "model_config":
48
+ continue
47
49
  if store_key == "storage_root":
48
50
  value = settings.storage.root_as_str
49
51
  elif store_key == "storage_region":
@@ -2,7 +2,7 @@ import os
2
2
  from pathlib import Path
3
3
  from typing import Optional
4
4
 
5
- from pydantic import BaseSettings
5
+ from pydantic_settings import BaseSettings, SettingsConfigDict
6
6
 
7
7
  if "LAMIN_SETTINGS_DIR" in os.environ:
8
8
  # Needed when running with AWS Lambda, as only tmp/ directory has a write access
@@ -58,10 +58,7 @@ class InstanceSettingsStore(BaseSettings):
58
58
  id: str
59
59
  git_repo: Optional[str]
60
60
  keep_artifacts_local: Optional[bool]
61
-
62
- class Config:
63
- env_prefix = "lamindb_instance_"
64
- env_file = ".env"
61
+ model_config = SettingsConfigDict(env_prefix="lamindb_instance_", env_file=".env")
65
62
 
66
63
 
67
64
  class UserSettingsStore(BaseSettings):
@@ -72,7 +69,4 @@ class UserSettingsStore(BaseSettings):
72
69
  uuid: str
73
70
  handle: str
74
71
  name: str
75
-
76
- class Config:
77
- env_prefix = "lamin_user_"
78
- env_file = ".env"
72
+ model_config = SettingsConfigDict(env_prefix="lamin_user_", env_file=".env")
@@ -9,14 +9,14 @@ if TYPE_CHECKING:
9
9
 
10
10
 
11
11
  def write_bionty_sources(isettings: InstanceSettings) -> None:
12
- """Write bionty sources to PublicSource table."""
12
+ """Write bionty sources to Source table."""
13
13
  if "bionty" not in isettings.schema:
14
14
  return None
15
15
  import shutil
16
16
 
17
17
  import bionty_base
18
18
  from bionty_base.dev._handle_sources import parse_sources_yaml
19
- from lnschema_bionty.models import PublicSource
19
+ from lnschema_bionty.models import Source
20
20
 
21
21
  shutil.copy(
22
22
  bionty_base.settings.current_sources, bionty_base.settings.lamindb_sources
@@ -32,16 +32,11 @@ def write_bionty_sources(isettings: InstanceSettings) -> None:
32
32
  .set_index(["entity", key])
33
33
  )
34
34
 
35
- try:
36
- currently_used = _get_currently_used("organism")
37
- key = "organism"
38
- except KeyError:
39
- currently_used = _get_currently_used("species")
40
- key = "species"
35
+ currently_used = _get_currently_used("organism")
41
36
 
42
37
  all_records = []
43
38
  for kwargs in all_sources_dict:
44
- act = currently_used.loc[(kwargs["entity"], kwargs[key])].to_dict()
39
+ act = currently_used.loc[(kwargs["entity"], kwargs["organism"])].to_dict()
45
40
  if (act["source"] == kwargs["source"]) and (
46
41
  act["version"] == kwargs["version"]
47
42
  ):
@@ -49,15 +44,13 @@ def write_bionty_sources(isettings: InstanceSettings) -> None:
49
44
 
50
45
  # when the database is not yet migrated but setup is updated
51
46
  # won't need this once lamindb is released with the new pin
52
- if hasattr(PublicSource, "species") and "organism" in kwargs:
53
- kwargs["species"] = kwargs.pop("organism")
54
- elif hasattr(PublicSource, "organism") and "species" in kwargs:
55
- kwargs["organism"] = kwargs.pop("species")
56
47
  kwargs["run"] = None # can't yet access tracking information
57
- record = PublicSource(**kwargs)
48
+ kwargs["in_db"] = False
49
+ # kwargs["name"] = kwargs.pop("source")
50
+ record = Source(**kwargs)
58
51
  all_records.append(record)
59
52
 
60
- PublicSource.objects.bulk_create(all_records, ignore_conflicts=True)
53
+ Source.objects.bulk_create(all_records, ignore_conflicts=True)
61
54
 
62
55
 
63
56
  def load_bionty_sources(isettings: InstanceSettings):
@@ -68,11 +61,11 @@ def load_bionty_sources(isettings: InstanceSettings):
68
61
  import bionty_base
69
62
  from bionty_base.dev._handle_sources import parse_currently_used_sources
70
63
  from bionty_base.dev._io import write_yaml
71
- from lnschema_bionty.models import PublicSource
64
+ from lnschema_bionty.models import Source
72
65
 
73
66
  try:
74
67
  # need try except because of integer primary key migration
75
- active_records = PublicSource.objects.filter(currently_used=True).all().values()
68
+ active_records = Source.objects.filter(currently_used=True).all().values()
76
69
  write_yaml(
77
70
  parse_currently_used_sources(active_records),
78
71
  bionty_base.settings.lamindb_sources,
@@ -1,14 +1,14 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: lamindb_setup
3
- Version: 0.74.1
3
+ Version: 0.74.3
4
4
  Summary: Setup & configure LaminDB.
5
- Author-email: Lamin Labs <laminlabs@gmail.com>
5
+ Author-email: Lamin Labs <open-source@lamin.ai>
6
6
  Description-Content-Type: text/markdown
7
7
  Requires-Dist: lnschema_core>=0.51.0
8
8
  Requires-Dist: lamin_utils>=0.3.3
9
9
  Requires-Dist: django>4.2,<5.3.0
10
10
  Requires-Dist: dj_database_url>=1.3.0,<3.0.0
11
- Requires-Dist: pydantic[dotenv]<2.0.0
11
+ Requires-Dist: pydantic-settings
12
12
  Requires-Dist: appdirs<2.0.0
13
13
  Requires-Dist: requests
14
14
  Requires-Dist: universal_pathlib==0.2.2
@@ -1,14 +1,14 @@
1
- lamindb_setup/__init__.py,sha256=py6U8kAsM7yVxbCmuhhE_tINXO4q4Oc7G9kjonGLzT8,1542
1
+ lamindb_setup/__init__.py,sha256=FLoipEAQXtUmcK_Dwo1brKCnl2kfCxuCwN6GTe1FgxU,1542
2
2
  lamindb_setup/_cache.py,sha256=wA7mbysANwe8hPNbjDo9bOmXJ0xIyaS5iyxIpxSWji4,846
3
3
  lamindb_setup/_check.py,sha256=28PcG8Kp6OpjSLSi1r2boL2Ryeh6xkaCL87HFbjs6GA,129
4
4
  lamindb_setup/_check_setup.py,sha256=cNEL9Q4yPpmEkGKHH8JgullWl1VUZwALJ4RHn9wZypY,2613
5
5
  lamindb_setup/_close.py,sha256=1QS9p2SCacgovYn6xqWU4zFvwHN1RgIccvzwJgFvKgU,1186
6
- lamindb_setup/_connect_instance.py,sha256=wDmXP6bZovdG9IZYNfoNmDeG5GFYeX2B7HzsG8lBkhY,12443
6
+ lamindb_setup/_connect_instance.py,sha256=dWqvNBBxqCG6xOiY_fI-P5ccyzno_ePGP3Rp1rgNq3g,12512
7
7
  lamindb_setup/_delete.py,sha256=Y8KSFYgY0UHAvjd7cCL6hZ_XiLeJwx50BguVATcj_Xo,5524
8
8
  lamindb_setup/_django.py,sha256=EoyWvFzH0i9wxjy4JZhcoXCTckztP_Mrl6FbYQnMmLE,1534
9
- lamindb_setup/_exportdb.py,sha256=uTIZjKKTB7arzEr1j0O6lONiT2pRBKeOFdLvOV8ZwzE,2120
9
+ lamindb_setup/_exportdb.py,sha256=43g77-tH-vAlTn8ig1mMD9-KXLKvxUeDLaq0gVu3l-c,2114
10
10
  lamindb_setup/_importdb.py,sha256=yYYShzUajTsR-cTW4CZ-UNDWZY2uE5PAgNbp-wn8Ogc,1874
11
- lamindb_setup/_init_instance.py,sha256=e6OJSpN2eJZd22kAfUVEUbqXF48FzNfLc5xMTS8gZ84,11919
11
+ lamindb_setup/_init_instance.py,sha256=jcKtXLOwkoq7bC-0j0xnNU4_up9nPl0iKQPNoJbBts8,12078
12
12
  lamindb_setup/_migrate.py,sha256=P4n3x0SYzO9szjF2-JMa7z4mQadtWjHv5ow4HbCDZLI,8864
13
13
  lamindb_setup/_register_instance.py,sha256=LlD2n44Gmh8OXrAkL9iL9NiML8QDKnk4d869MhXoOWI,1083
14
14
  lamindb_setup/_schema.py,sha256=b3uzhhWpV5mQtDwhMINc2MabGCnGLESy51ito3yl6Wc,679
@@ -21,26 +21,26 @@ lamindb_setup/core/_aws_credentials.py,sha256=uKMQO9q42Hnepz8aj3RxwLKDWUJx8pNOYr
21
21
  lamindb_setup/core/_aws_storage.py,sha256=nEjeUv4xUVpoV0Lx-zjjmyb9w804bDyaeiM-OqbfwM0,1799
22
22
  lamindb_setup/core/_deprecated.py,sha256=3qxUI1dnDlSeR0BYrv7ucjqRBEojbqotPgpShXs4KF8,2520
23
23
  lamindb_setup/core/_docs.py,sha256=3k-YY-oVaJd_9UIY-LfBg_u8raKOCNfkZQPA73KsUhs,276
24
- lamindb_setup/core/_hub_client.py,sha256=g0Lmpv19xiUWoD67SpdT6re1EDfrd7D6Bsz4gIKpx_E,5504
25
- lamindb_setup/core/_hub_core.py,sha256=RGjTqf1owuWmkXAYy0EPaoHAaJ-0T0hAidkqa3cIdiM,16352
24
+ lamindb_setup/core/_hub_client.py,sha256=Gpt3TmxWQMVenKugCu1agUb-xGN9YFsQOKmrHuFiiDs,5605
25
+ lamindb_setup/core/_hub_core.py,sha256=VToaY2uUHpP5ETkNeuMO4gUeuAfj6ap8uFSndCN1fGk,16592
26
26
  lamindb_setup/core/_hub_crud.py,sha256=b1XF7AJpM9Q-ttm9nPG-r3OTRWHQaGzAGIyvmb83NTo,4859
27
- lamindb_setup/core/_hub_utils.py,sha256=b_M1LkdCjiMWm1EOlSb9GuPdLijwVgQDtATTpeZuXI0,1875
27
+ lamindb_setup/core/_hub_utils.py,sha256=w5IRtrxZcvxmGSJslzuZF89ewkzXV4cCUmZUVrqmAfo,3026
28
28
  lamindb_setup/core/_private_django_api.py,sha256=KIn43HOhiRjkbTbddyJqv-WNTTa1bAizbM1tWXoXPBg,2869
29
29
  lamindb_setup/core/_settings.py,sha256=46axQ5HPvI0X9YuotgdpuSOfSo7qYU1DudIx3vxpFk0,4471
30
30
  lamindb_setup/core/_settings_instance.py,sha256=OMN6ZROF7iV9Juh0bgE9fOmedE7EJI_YniztwJ5-acI,17623
31
- lamindb_setup/core/_settings_load.py,sha256=NGgCDpN85j1EqoKlrYFIlZBMlBJm33gx2-wc96CP_ZQ,3922
32
- lamindb_setup/core/_settings_save.py,sha256=d1A-Ex-7H08mb8l7I0Oe0j0GilrfaDuprh_NMxhQAsQ,2704
31
+ lamindb_setup/core/_settings_load.py,sha256=63PTIVLk3oH1XUmznswygcOk_8VADrJLMB6O9AOppYg,3907
32
+ lamindb_setup/core/_settings_save.py,sha256=n_tYfb9EBSxwm4LHyPRHJptE5uB8lmHhcRkz1JkAmhg,2781
33
33
  lamindb_setup/core/_settings_storage.py,sha256=65aobewYX6VfOeYZjZQOOI7ZD_3b4QA9TDmrduU0m4c,13262
34
- lamindb_setup/core/_settings_store.py,sha256=dagS5c7wAMRnuZTRfCU4sKaIOyF_HwAP5Fnnn8vphno,2084
34
+ lamindb_setup/core/_settings_store.py,sha256=VEE8Ff2A7y4j8ksOaa7g48jNaOqe1PBnBjb1PKKGUKU,2115
35
35
  lamindb_setup/core/_settings_user.py,sha256=P2lC4WDRAFfT-Xq3MlXJ-wMKIHCoGNhMTQfRGIAyUNQ,1344
36
- lamindb_setup/core/_setup_bionty_sources.py,sha256=h_pBANsSGK6ujAFsG21mtADHVJoMLKDR4eGgRP4Fgls,3072
36
+ lamindb_setup/core/_setup_bionty_sources.py,sha256=i_fVCnoh38ouTKKeM-MUXQbkkxMcrSz5dTM_mOCHUcU,2732
37
37
  lamindb_setup/core/cloud_sqlite_locker.py,sha256=reu02M4aE2BT_A5AFqwhv48l91mOMyQ4zTd-hh-wtuU,6922
38
38
  lamindb_setup/core/django.py,sha256=QUQm3zt5QIiD8uv6o9vbSm_bshqiSWzKSkgD3z2eJCg,3542
39
39
  lamindb_setup/core/exceptions.py,sha256=eoI7AXgATgDVzgArtN7CUvpaMUC067vsBg5LHCsWzDM,305
40
40
  lamindb_setup/core/hashing.py,sha256=_JliYeCcjT_foOUJ5ck1rvcCo9q7r4b4SaSclQ_w4Qo,3071
41
41
  lamindb_setup/core/types.py,sha256=bcYnZ0uM_2NXKJCl94Mmc-uYrQlRUUVKG3sK2N-F-N4,532
42
42
  lamindb_setup/core/upath.py,sha256=dwudkTVsXuyjS-2xR16WomcWtXJAEfRZ0ZzFq8_EDhE,27157
43
- lamindb_setup-0.74.1.dist-info/LICENSE,sha256=UOZ1F5fFDe3XXvG4oNnkL1-Ecun7zpHzRxjp-XsMeAo,11324
44
- lamindb_setup-0.74.1.dist-info/WHEEL,sha256=Sgu64hAMa6g5FdzHxXv9Xdse9yxpGGMeagVtPMWpJQY,99
45
- lamindb_setup-0.74.1.dist-info/METADATA,sha256=r-xZGjftei2ae6s9yYK6Btrz8GXH_GOdFp-BoGvHISg,1642
46
- lamindb_setup-0.74.1.dist-info/RECORD,,
43
+ lamindb_setup-0.74.3.dist-info/LICENSE,sha256=UOZ1F5fFDe3XXvG4oNnkL1-Ecun7zpHzRxjp-XsMeAo,11324
44
+ lamindb_setup-0.74.3.dist-info/WHEEL,sha256=Sgu64hAMa6g5FdzHxXv9Xdse9yxpGGMeagVtPMWpJQY,99
45
+ lamindb_setup-0.74.3.dist-info/METADATA,sha256=dqS1Dfpqk1G-BoZzexMF8b1wv_MxWPuqKwKMM1rvWx8,1638
46
+ lamindb_setup-0.74.3.dist-info/RECORD,,