lamindb_setup 0.73.1__tar.gz → 0.73.2__tar.gz

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.
Files changed (92) hide show
  1. {lamindb_setup-0.73.1 → lamindb_setup-0.73.2}/PKG-INFO +1 -1
  2. {lamindb_setup-0.73.1 → lamindb_setup-0.73.2}/docs/changelog.md +2 -0
  3. {lamindb_setup-0.73.1 → lamindb_setup-0.73.2}/docs/hub-prod/test-sqlite-lock.ipynb +3 -0
  4. {lamindb_setup-0.73.1 → lamindb_setup-0.73.2}/lamindb_setup/__init__.py +1 -1
  5. {lamindb_setup-0.73.1 → lamindb_setup-0.73.2}/lamindb_setup/core/_settings_instance.py +15 -3
  6. {lamindb_setup-0.73.1 → lamindb_setup-0.73.2}/lamindb_setup/core/cloud_sqlite_locker.py +2 -1
  7. {lamindb_setup-0.73.1 → lamindb_setup-0.73.2}/tests/hub-cloud/test_connect_instance.py +7 -7
  8. {lamindb_setup-0.73.1 → lamindb_setup-0.73.2}/tests/storage/test_storage_access.py +1 -1
  9. {lamindb_setup-0.73.1 → lamindb_setup-0.73.2}/.github/workflows/build.yml +0 -0
  10. {lamindb_setup-0.73.1 → lamindb_setup-0.73.2}/.github/workflows/latest-changes.jinja2 +0 -0
  11. {lamindb_setup-0.73.1 → lamindb_setup-0.73.2}/.github/workflows/latest-changes.yml +0 -0
  12. {lamindb_setup-0.73.1 → lamindb_setup-0.73.2}/.gitignore +0 -0
  13. {lamindb_setup-0.73.1 → lamindb_setup-0.73.2}/.pre-commit-config.yaml +0 -0
  14. {lamindb_setup-0.73.1 → lamindb_setup-0.73.2}/LICENSE +0 -0
  15. {lamindb_setup-0.73.1 → lamindb_setup-0.73.2}/README.md +0 -0
  16. {lamindb_setup-0.73.1 → lamindb_setup-0.73.2}/docs/hub-cloud/01-init-local-instance.ipynb +0 -0
  17. {lamindb_setup-0.73.1 → lamindb_setup-0.73.2}/docs/hub-cloud/02-connect-local-instance.ipynb +0 -0
  18. {lamindb_setup-0.73.1 → lamindb_setup-0.73.2}/docs/hub-cloud/03-add-managed-storage.ipynb +0 -0
  19. {lamindb_setup-0.73.1 → lamindb_setup-0.73.2}/docs/hub-cloud/04-test-bionty.ipynb +0 -0
  20. {lamindb_setup-0.73.1 → lamindb_setup-0.73.2}/docs/hub-cloud/05-init-hosted-instance.ipynb +0 -0
  21. {lamindb_setup-0.73.1 → lamindb_setup-0.73.2}/docs/hub-cloud/06-connect-hosted-instance.ipynb +0 -0
  22. {lamindb_setup-0.73.1 → lamindb_setup-0.73.2}/docs/hub-cloud/07-keep-artifacts-local.ipynb +0 -0
  23. {lamindb_setup-0.73.1 → lamindb_setup-0.73.2}/docs/hub-cloud/test-multi-session.ipynb +0 -0
  24. {lamindb_setup-0.73.1 → lamindb_setup-0.73.2}/docs/hub-cloud/test_notebooks.py +0 -0
  25. {lamindb_setup-0.73.1 → lamindb_setup-0.73.2}/docs/hub-prod/test-cache-management.ipynb +0 -0
  26. {lamindb_setup-0.73.1 → lamindb_setup-0.73.2}/docs/hub-prod/test-cloud-sync.ipynb +0 -0
  27. {lamindb_setup-0.73.1 → lamindb_setup-0.73.2}/docs/hub-prod/test-connect-anonymously.ipynb +0 -0
  28. {lamindb_setup-0.73.1 → lamindb_setup-0.73.2}/docs/hub-prod/test-empty-init.ipynb +0 -0
  29. {lamindb_setup-0.73.1 → lamindb_setup-0.73.2}/docs/hub-prod/test-import-schema.ipynb +0 -0
  30. {lamindb_setup-0.73.1 → lamindb_setup-0.73.2}/docs/hub-prod/test-insufficient-user-info.ipynb +0 -0
  31. {lamindb_setup-0.73.1 → lamindb_setup-0.73.2}/docs/hub-prod/test-invalid-schema.ipynb +0 -0
  32. {lamindb_setup-0.73.1 → lamindb_setup-0.73.2}/docs/hub-prod/test_notebooks2.py +0 -0
  33. {lamindb_setup-0.73.1 → lamindb_setup-0.73.2}/docs/index.md +0 -0
  34. {lamindb_setup-0.73.1 → lamindb_setup-0.73.2}/docs/notebooks.md +0 -0
  35. {lamindb_setup-0.73.1 → lamindb_setup-0.73.2}/docs/reference.md +0 -0
  36. {lamindb_setup-0.73.1 → lamindb_setup-0.73.2}/lamindb_setup/_cache.py +0 -0
  37. {lamindb_setup-0.73.1 → lamindb_setup-0.73.2}/lamindb_setup/_check.py +0 -0
  38. {lamindb_setup-0.73.1 → lamindb_setup-0.73.2}/lamindb_setup/_check_setup.py +0 -0
  39. {lamindb_setup-0.73.1 → lamindb_setup-0.73.2}/lamindb_setup/_close.py +0 -0
  40. {lamindb_setup-0.73.1 → lamindb_setup-0.73.2}/lamindb_setup/_connect_instance.py +0 -0
  41. {lamindb_setup-0.73.1 → lamindb_setup-0.73.2}/lamindb_setup/_delete.py +0 -0
  42. {lamindb_setup-0.73.1 → lamindb_setup-0.73.2}/lamindb_setup/_django.py +0 -0
  43. {lamindb_setup-0.73.1 → lamindb_setup-0.73.2}/lamindb_setup/_exportdb.py +0 -0
  44. {lamindb_setup-0.73.1 → lamindb_setup-0.73.2}/lamindb_setup/_importdb.py +0 -0
  45. {lamindb_setup-0.73.1 → lamindb_setup-0.73.2}/lamindb_setup/_init_instance.py +0 -0
  46. {lamindb_setup-0.73.1 → lamindb_setup-0.73.2}/lamindb_setup/_migrate.py +0 -0
  47. {lamindb_setup-0.73.1 → lamindb_setup-0.73.2}/lamindb_setup/_register_instance.py +0 -0
  48. {lamindb_setup-0.73.1 → lamindb_setup-0.73.2}/lamindb_setup/_schema.py +0 -0
  49. {lamindb_setup-0.73.1 → lamindb_setup-0.73.2}/lamindb_setup/_schema_metadata.py +0 -0
  50. {lamindb_setup-0.73.1 → lamindb_setup-0.73.2}/lamindb_setup/_set_managed_storage.py +0 -0
  51. {lamindb_setup-0.73.1 → lamindb_setup-0.73.2}/lamindb_setup/_setup_user.py +0 -0
  52. {lamindb_setup-0.73.1 → lamindb_setup-0.73.2}/lamindb_setup/_silence_loggers.py +0 -0
  53. {lamindb_setup-0.73.1 → lamindb_setup-0.73.2}/lamindb_setup/core/__init__.py +0 -0
  54. {lamindb_setup-0.73.1 → lamindb_setup-0.73.2}/lamindb_setup/core/_aws_credentials.py +0 -0
  55. {lamindb_setup-0.73.1 → lamindb_setup-0.73.2}/lamindb_setup/core/_aws_storage.py +0 -0
  56. {lamindb_setup-0.73.1 → lamindb_setup-0.73.2}/lamindb_setup/core/_deprecated.py +0 -0
  57. {lamindb_setup-0.73.1 → lamindb_setup-0.73.2}/lamindb_setup/core/_docs.py +0 -0
  58. {lamindb_setup-0.73.1 → lamindb_setup-0.73.2}/lamindb_setup/core/_hub_client.py +0 -0
  59. {lamindb_setup-0.73.1 → lamindb_setup-0.73.2}/lamindb_setup/core/_hub_core.py +0 -0
  60. {lamindb_setup-0.73.1 → lamindb_setup-0.73.2}/lamindb_setup/core/_hub_crud.py +0 -0
  61. {lamindb_setup-0.73.1 → lamindb_setup-0.73.2}/lamindb_setup/core/_hub_utils.py +0 -0
  62. {lamindb_setup-0.73.1 → lamindb_setup-0.73.2}/lamindb_setup/core/_settings.py +0 -0
  63. {lamindb_setup-0.73.1 → lamindb_setup-0.73.2}/lamindb_setup/core/_settings_load.py +0 -0
  64. {lamindb_setup-0.73.1 → lamindb_setup-0.73.2}/lamindb_setup/core/_settings_save.py +0 -0
  65. {lamindb_setup-0.73.1 → lamindb_setup-0.73.2}/lamindb_setup/core/_settings_storage.py +0 -0
  66. {lamindb_setup-0.73.1 → lamindb_setup-0.73.2}/lamindb_setup/core/_settings_store.py +0 -0
  67. {lamindb_setup-0.73.1 → lamindb_setup-0.73.2}/lamindb_setup/core/_settings_user.py +0 -0
  68. {lamindb_setup-0.73.1 → lamindb_setup-0.73.2}/lamindb_setup/core/_setup_bionty_sources.py +0 -0
  69. {lamindb_setup-0.73.1 → lamindb_setup-0.73.2}/lamindb_setup/core/django.py +0 -0
  70. {lamindb_setup-0.73.1 → lamindb_setup-0.73.2}/lamindb_setup/core/exceptions.py +0 -0
  71. {lamindb_setup-0.73.1 → lamindb_setup-0.73.2}/lamindb_setup/core/hashing.py +0 -0
  72. {lamindb_setup-0.73.1 → lamindb_setup-0.73.2}/lamindb_setup/core/types.py +0 -0
  73. {lamindb_setup-0.73.1 → lamindb_setup-0.73.2}/lamindb_setup/core/upath.py +0 -0
  74. {lamindb_setup-0.73.1 → lamindb_setup-0.73.2}/noxfile.py +0 -0
  75. {lamindb_setup-0.73.1 → lamindb_setup-0.73.2}/pyproject.toml +0 -0
  76. {lamindb_setup-0.73.1 → lamindb_setup-0.73.2}/tests/hub-cloud/test_delete_instance.py +0 -0
  77. {lamindb_setup-0.73.1 → lamindb_setup-0.73.2}/tests/hub-cloud/test_init_instance.py +0 -0
  78. {lamindb_setup-0.73.1 → lamindb_setup-0.73.2}/tests/hub-cloud/test_login.py +0 -0
  79. {lamindb_setup-0.73.1 → lamindb_setup-0.73.2}/tests/hub-cloud/test_migrate.py +0 -0
  80. {lamindb_setup-0.73.1 → lamindb_setup-0.73.2}/tests/hub-cloud/test_set_storage.py +0 -0
  81. {lamindb_setup-0.73.1 → lamindb_setup-0.73.2}/tests/hub-local/conftest.py +0 -0
  82. {lamindb_setup-0.73.1 → lamindb_setup-0.73.2}/tests/hub-local/test_all.py +0 -0
  83. {lamindb_setup-0.73.1 → lamindb_setup-0.73.2}/tests/hub-local/test_update_schema_in_hub.py +0 -0
  84. {lamindb_setup-0.73.1 → lamindb_setup-0.73.2}/tests/hub-prod/conftest.py +0 -0
  85. {lamindb_setup-0.73.1 → lamindb_setup-0.73.2}/tests/hub-prod/test_auto_connect.py +0 -0
  86. {lamindb_setup-0.73.1 → lamindb_setup-0.73.2}/tests/hub-prod/test_django.py +0 -0
  87. {lamindb_setup-0.73.1 → lamindb_setup-0.73.2}/tests/hub-prod/test_switch_and_fallback_env.py +0 -0
  88. {lamindb_setup-0.73.1 → lamindb_setup-0.73.2}/tests/hub-prod/test_upath.py +0 -0
  89. {lamindb_setup-0.73.1 → lamindb_setup-0.73.2}/tests/storage/test_hashing.py +0 -0
  90. {lamindb_setup-0.73.1 → lamindb_setup-0.73.2}/tests/storage/test_storage_basis.py +0 -0
  91. {lamindb_setup-0.73.1 → lamindb_setup-0.73.2}/tests/storage/test_storage_stats.py +0 -0
  92. {lamindb_setup-0.73.1 → lamindb_setup-0.73.2}/tests/storage/test_to_url.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: lamindb_setup
3
- Version: 0.73.1
3
+ Version: 0.73.2
4
4
  Summary: Setup & configure LaminDB.
5
5
  Author-email: Lamin Labs <laminlabs@gmail.com>
6
6
  Description-Content-Type: text/markdown
@@ -3,6 +3,8 @@
3
3
  <!-- prettier-ignore -->
4
4
  Name | PR | Developer | Date | Version
5
5
  --- | --- | --- | --- | ---
6
+ 🐛 Fix permission error when screening for local storage root | [778](https://github.com/laminlabs/lamindb-setup/pull/778) | [falexwolf](https://github.com/falexwolf) | 2024-06-19 | 0.73.2
7
+ 🐛 Fix same root check in get_locker | [777](https://github.com/laminlabs/lamindb-setup/pull/777) | [Koncopd](https://github.com/Koncopd) | 2024-06-13 |
6
8
  ✨ Add .ome.zarr as composite suffix | [775](https://github.com/laminlabs/lamindb-setup/pull/775) | [sunnyosun](https://github.com/sunnyosun) | 2024-06-05 |
7
9
  🏗️ Update instance schema in the hub | [774](https://github.com/laminlabs/lamindb-setup/pull/774) | [fredericenard](https://github.com/fredericenard) | 2024-06-04 |
8
10
  ⬆️ Migrate to upath 0.2.2 | [723](https://github.com/laminlabs/lamindb-setup/pull/723) | [Koncopd](https://github.com/Koncopd) | 2024-06-02 |
@@ -75,6 +75,9 @@
75
75
  "source": [
76
76
  "ln_setup.init(storage=\"s3://lamindb-ci/test-load-lock\", name=\"test-load-lock\")\n",
77
77
  "instance_id = ln_setup.settings.instance._id\n",
78
+ "\n",
79
+ "assert ln_setup.settings.instance._cloud_sqlite_locker is ln_setup.settings.instance._cloud_sqlite_locker\n",
80
+ "\n",
78
81
  "ln_setup.close()"
79
82
  ]
80
83
  },
@@ -34,7 +34,7 @@ Modules & settings:
34
34
 
35
35
  """
36
36
 
37
- __version__ = "0.73.1" # denote a release candidate for 0.1.0 with 0.1rc1
37
+ __version__ = "0.73.2" # 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
@@ -120,13 +120,25 @@ class InstanceSettings:
120
120
  if root_path.exists():
121
121
  marker_path = root_path / ".lamindb/_is_initialized"
122
122
  if marker_path.exists():
123
- uid = marker_path.read_text()
123
+ try:
124
+ uid = marker_path.read_text()
125
+ except PermissionError:
126
+ logger.warning(
127
+ f"ignoring the following location because no permission to read it: {marker_path}"
128
+ )
129
+ continue
124
130
  if uid == record.uid:
125
131
  found = True
126
132
  break
127
133
  elif uid == "":
128
- # legacy instance that was not yet marked properly
129
- mark_storage_root(record.root, record.uid)
134
+ try:
135
+ # legacy instance that was not yet marked properly
136
+ mark_storage_root(record.root, record.uid)
137
+ except PermissionError:
138
+ logger.warning(
139
+ f"ignoring the following location because no permission to write to it: {marker_path}"
140
+ )
141
+ continue
130
142
  else:
131
143
  continue
132
144
  else:
@@ -111,6 +111,7 @@ class Locker:
111
111
  if self._counter <= MAX_MSG_COUNTER:
112
112
  self._counter += 1
113
113
 
114
+ # Lamport's bakery algorithm
114
115
  def _lock_unsafe(self):
115
116
  if self._has_lock:
116
117
  return None
@@ -186,7 +187,7 @@ def get_locker(isettings) -> Locker:
186
187
  if (
187
188
  _locker is None
188
189
  or _locker.user != user_uid
189
- or _locker.root is not storage_root
190
+ or _locker.root != storage_root
190
191
  or _locker.instance_id != isettings._id
191
192
  ):
192
193
  _locker = Locker(user_uid, storage_root, isettings._id)
@@ -28,7 +28,7 @@ def test_connect_after_revoked_access():
28
28
  # if a previous test run failed, this will
29
29
  # error with a violation of a unique constraint
30
30
  collaborator_handler.add_by_slug(
31
- "laminlabs/static-test-instance-private-sqlite",
31
+ "testuser1/static-test-instance-private-sqlite",
32
32
  "testuser2",
33
33
  "write",
34
34
  "default",
@@ -38,19 +38,19 @@ def test_connect_after_revoked_access():
38
38
  pass
39
39
  ln_setup.login("testuser2@lamin.ai")
40
40
  ln_setup.connect(
41
- "https://lamin.ai/laminlabs/static-test-instance-private-sqlite", _test=True
41
+ "https://lamin.ai/testuser1/static-test-instance-private-sqlite", _test=True
42
42
  )
43
43
  assert (
44
44
  ln_setup.settings.instance.storage.root_as_str
45
45
  == "s3://lamindb-setup-private-bucket"
46
46
  )
47
47
  collaborator_handler.delete_by_slug(
48
- "laminlabs/static-test-instance-private-sqlite", "testuser2"
48
+ "testuser1/static-test-instance-private-sqlite", "testuser2"
49
49
  )
50
50
  # make the instance private
51
51
  with pytest.raises(InstanceNotFoundError):
52
52
  ln_setup.connect(
53
- "https://lamin.ai/laminlabs/static-test-instance-private-sqlite",
53
+ "https://lamin.ai/testuser1/static-test-instance-private-sqlite",
54
54
  _test=True,
55
55
  )
56
56
 
@@ -61,7 +61,7 @@ def test_connect_after_private_public_switch():
61
61
  # this assumes that testuser1 is an admin of static-test-instance-private-sqlite
62
62
  ln_setup.login("testuser1@lamin.ai")
63
63
  ln_setup.connect(
64
- "https://lamin.ai/laminlabs/static-test-instance-private-sqlite", _test=True
64
+ "https://lamin.ai/testuser1/static-test-instance-private-sqlite", _test=True
65
65
  )
66
66
  admin_hub = connect_hub_with_auth()
67
67
  # make the instance private
@@ -74,7 +74,7 @@ def test_connect_after_private_public_switch():
74
74
  ln_setup.login("testuser2")
75
75
  with pytest.raises(InstanceNotFoundError):
76
76
  ln_setup.connect(
77
- "https://lamin.ai/laminlabs/static-test-instance-private-sqlite",
77
+ "https://lamin.ai/testuser1/static-test-instance-private-sqlite",
78
78
  _test=True,
79
79
  )
80
80
  # make the instance public
@@ -85,7 +85,7 @@ def test_connect_after_private_public_switch():
85
85
  )
86
86
  # load instance with non-collaborator user, should work now
87
87
  ln_setup.connect(
88
- "https://lamin.ai/laminlabs/static-test-instance-private-sqlite", _test=True
88
+ "https://lamin.ai/testuser1/static-test-instance-private-sqlite", _test=True
89
89
  )
90
90
  # make the instance private again
91
91
  update_instance(
@@ -17,7 +17,7 @@ def test_connect_instance_with_private_storage_and_no_storage_access():
17
17
  # this should fail because of insufficient AWS permission for the storage bucket
18
18
  # that has the SQLite file on it, but because _test=True, we don't actually try to
19
19
  # pull the SQLite file -> see the line below to proxy this
20
- ln_setup.connect("laminlabs/static-test-instance-private-sqlite", _test=True)
20
+ ln_setup.connect("testuser1/static-test-instance-private-sqlite", _test=True)
21
21
  with pytest.raises(PermissionError):
22
22
  (ln_setup.settings.storage.root / "test_file").exists()
23
23
  # connecting to a postgres instance should work because it doesn't touch
File without changes
File without changes