scruby 0.12.0__py3-none-any.whl → 0.12.3__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.

Potentially problematic release.


This version of scruby might be problematic. Click here for more details.

scruby/db.py CHANGED
@@ -11,7 +11,7 @@ import zlib
11
11
  from collections.abc import Callable
12
12
  from pathlib import Path as SyncPath
13
13
  from shutil import rmtree
14
- from typing import Any, Never, TypeVar, assert_never
14
+ from typing import Any, Literal, Never, TypeVar, assert_never
15
15
 
16
16
  import orjson
17
17
  from anyio import Path, to_thread
@@ -45,7 +45,7 @@ class Scruby[T]:
45
45
  self.__class_model = class_model
46
46
  self.__db_root = constants.DB_ROOT
47
47
  self.__hash_reduce_left = constants.HASH_REDUCE_LEFT
48
- # The maximum number of keys.
48
+ # The maximum number of branches.
49
49
  match self.__hash_reduce_left:
50
50
  case 0:
51
51
  self.__max_branch_number = 4294967296
@@ -59,18 +59,18 @@ class Scruby[T]:
59
59
  msg: str = f"{unreachable} - Unacceptable value for HASH_REDUCE_LEFT."
60
60
  logger.critical(msg)
61
61
  assert_never(Never(unreachable))
62
- # 1.Create metadata if absent.
63
- # 2.Check metadata.
64
- self._create_metadata()
65
-
66
- def _create_metadata(self) -> None:
67
- """Create metadata for collection if absent.
68
-
69
- This method is for internal use.
70
- """
62
+ # Caching a pati for metadata in the form of a tuple.
63
+ # The zero branch is reserved for metadata.
71
64
  branch_number: int = 0
72
- key_as_hash: str = f"{branch_number:08x}"[self.__hash_reduce_left :]
73
- separated_hash: str = "/".join(list(key_as_hash))
65
+ branch_number_as_hash: str = f"{branch_number:08x}"[constants.HASH_REDUCE_LEFT :]
66
+ separated_hash: str = "/".join(list(branch_number_as_hash))
67
+ self.__meta_path_tuple = (
68
+ constants.DB_ROOT,
69
+ class_model.__name__,
70
+ separated_hash,
71
+ "meta.json",
72
+ )
73
+ # Create metadata for collection, if required.
74
74
  branch_path = SyncPath(
75
75
  *(
76
76
  self.__db_root,
@@ -87,29 +87,12 @@ class Scruby[T]:
87
87
  meta_path = SyncPath(*(branch_path, "meta.json"))
88
88
  meta_path.write_text(meta_json, "utf-8")
89
89
 
90
- async def _get_meta_path(self) -> Path:
91
- """Asynchronous method for getting path to metadata of collection.
92
-
93
- This method is for internal use.
94
- """
95
- branch_number: int = 0
96
- branch_number_as_hash: str = f"{branch_number:08x}"[self.__hash_reduce_left :]
97
- separated_hash: str = "/".join(list(branch_number_as_hash))
98
- return Path(
99
- *(
100
- self.__db_root,
101
- self.__class_model.__name__,
102
- separated_hash,
103
- "meta.json",
104
- ),
105
- )
106
-
107
90
  async def _get_meta(self) -> _Meta:
108
91
  """Asynchronous method for getting metadata of collection.
109
92
 
110
93
  This method is for internal use.
111
94
  """
112
- meta_path = await self._get_meta_path()
95
+ meta_path = Path(*self.__meta_path_tuple)
113
96
  meta_json = await meta_path.read_text()
114
97
  meta: _Meta = self.__meta.model_validate_json(meta_json)
115
98
  return meta
@@ -119,21 +102,19 @@ class Scruby[T]:
119
102
 
120
103
  This method is for internal use.
121
104
  """
122
- meta_path = await self._get_meta_path()
105
+ meta_path = Path(*self.__meta_path_tuple)
123
106
  meta_json = meta.model_dump_json()
124
107
  await meta_path.write_text(meta_json, "utf-8")
125
108
 
126
- async def _counter_documents(self, number: int) -> None:
109
+ async def _counter_documents(self, step: Literal[1, -1]) -> None:
127
110
  """Asynchronous method for management of documents in metadata of collection.
128
111
 
129
112
  This method is for internal use.
130
113
  """
131
- meta_path = await self._get_meta_path()
114
+ meta_path = Path(*self.__meta_path_tuple)
132
115
  meta_json = await meta_path.read_text("utf-8")
133
116
  meta: _Meta = self.__meta.model_validate_json(meta_json)
134
- meta.counter_documents += number
135
- if meta.counter_documents < 0:
136
- meta.counter_documents = 0
117
+ meta.counter_documents += step
137
118
  meta_json = meta.model_dump_json()
138
119
  await meta_path.write_text(meta_json, "utf-8")
139
120
 
@@ -142,22 +123,10 @@ class Scruby[T]:
142
123
 
143
124
  This method is for internal use.
144
125
  """
145
- branch_number: int = 0
146
- branch_number_as_hash: str = f"{branch_number:08x}"[self.__hash_reduce_left :]
147
- separated_hash: str = "/".join(list(branch_number_as_hash))
148
- meta_path = SyncPath(
149
- *(
150
- self.__db_root,
151
- self.__class_model.__name__,
152
- separated_hash,
153
- "meta.json",
154
- ),
155
- )
126
+ meta_path = SyncPath(*self.__meta_path_tuple)
156
127
  meta_json = meta_path.read_text("utf-8")
157
128
  meta: _Meta = self.__meta.model_validate_json(meta_json)
158
129
  meta.counter_documents += number
159
- if meta.counter_documents < 0:
160
- meta.counter_documents = 0
161
130
  meta_json = meta.model_dump_json()
162
131
  meta_path.write_text(meta_json, "utf-8")
163
132
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: scruby
3
- Version: 0.12.0
3
+ Version: 0.12.3
4
4
  Summary: A fast key-value storage library.
5
5
  Project-URL: Homepage, https://github.com/kebasyaty/scruby
6
6
  Project-URL: Repository, https://github.com/kebasyaty/scruby
@@ -1,9 +1,9 @@
1
1
  scruby/__init__.py,sha256=GOVcjXmcOEDBbJQJDJlQq-x3M-VGJaMSN278EXsl2po,884
2
2
  scruby/constants.py,sha256=3LZfcxcuRqwzoB0-iogLMjKBZRdxfWJmTbyPwVRhQgY,1007
3
- scruby/db.py,sha256=fFJKCvvDmHKXzQubghG2DoRV7xumd460sHGqCDCCgh0,21877
3
+ scruby/db.py,sha256=H70ODq0SXtEBB6iTBFA_l-fZ0L1zFq5Nb_PT3Ad2TZs,20925
4
4
  scruby/errors.py,sha256=aHQri4LNcFVQrSHwjyzb1fL8O49SwjYEU4QgMOo4uyA,622
5
5
  scruby/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
6
- scruby-0.12.0.dist-info/METADATA,sha256=Ok-HJBIDsQ-DktJRjoIORaC91Vbc8qt9UPc-VN9k57Q,10925
7
- scruby-0.12.0.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
8
- scruby-0.12.0.dist-info/licenses/LICENSE,sha256=2zZINd6m_jNYlowdQImlEizyhSui5cBAJZRhWQURcEc,1095
9
- scruby-0.12.0.dist-info/RECORD,,
6
+ scruby-0.12.3.dist-info/METADATA,sha256=C7rNCceHMaFezgzg4TEvUR_vOivfvGG3bpgPOQrucLg,10925
7
+ scruby-0.12.3.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
8
+ scruby-0.12.3.dist-info/licenses/LICENSE,sha256=2zZINd6m_jNYlowdQImlEizyhSui5cBAJZRhWQURcEc,1095
9
+ scruby-0.12.3.dist-info/RECORD,,