apexdevkit 1.12.5__tar.gz → 1.12.6__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.
- {apexdevkit-1.12.5 → apexdevkit-1.12.6}/PKG-INFO +1 -1
- apexdevkit-1.12.6/apexdevkit/repository/alternative/__init__.py +7 -0
- apexdevkit-1.12.6/apexdevkit/repository/alternative/base.py +49 -0
- apexdevkit-1.12.6/apexdevkit/repository/alternative/formatter_repository.py +50 -0
- {apexdevkit-1.12.5 → apexdevkit-1.12.6}/apexdevkit/repository/decorator.py +4 -1
- {apexdevkit-1.12.5 → apexdevkit-1.12.6}/pyproject.toml +1 -1
- {apexdevkit-1.12.5 → apexdevkit-1.12.6}/LICENSE +0 -0
- {apexdevkit-1.12.5 → apexdevkit-1.12.6}/README.md +0 -0
- {apexdevkit-1.12.5 → apexdevkit-1.12.6}/apexdevkit/__init__.py +0 -0
- {apexdevkit-1.12.5 → apexdevkit-1.12.6}/apexdevkit/annotation/__init__.py +0 -0
- {apexdevkit-1.12.5 → apexdevkit-1.12.6}/apexdevkit/annotation/deprecate.py +0 -0
- {apexdevkit-1.12.5 → apexdevkit-1.12.6}/apexdevkit/environment.py +0 -0
- {apexdevkit-1.12.5 → apexdevkit-1.12.6}/apexdevkit/error.py +0 -0
- {apexdevkit-1.12.5 → apexdevkit-1.12.6}/apexdevkit/fastapi/__init__.py +0 -0
- {apexdevkit-1.12.5 → apexdevkit-1.12.6}/apexdevkit/fastapi/builder.py +0 -0
- {apexdevkit-1.12.5 → apexdevkit-1.12.6}/apexdevkit/fastapi/dependable.py +0 -0
- {apexdevkit-1.12.5 → apexdevkit-1.12.6}/apexdevkit/fastapi/docs.py +0 -0
- {apexdevkit-1.12.5 → apexdevkit-1.12.6}/apexdevkit/fastapi/resource.py +0 -0
- {apexdevkit-1.12.5 → apexdevkit-1.12.6}/apexdevkit/fastapi/response.py +0 -0
- {apexdevkit-1.12.5 → apexdevkit-1.12.6}/apexdevkit/fastapi/router.py +0 -0
- {apexdevkit-1.12.5 → apexdevkit-1.12.6}/apexdevkit/fastapi/schema.py +0 -0
- {apexdevkit-1.12.5 → apexdevkit-1.12.6}/apexdevkit/fastapi/service.py +0 -0
- {apexdevkit-1.12.5 → apexdevkit-1.12.6}/apexdevkit/fluent.py +0 -0
- {apexdevkit-1.12.5 → apexdevkit-1.12.6}/apexdevkit/formatter.py +0 -0
- {apexdevkit-1.12.5 → apexdevkit-1.12.6}/apexdevkit/http/__init__.py +0 -0
- {apexdevkit-1.12.5 → apexdevkit-1.12.6}/apexdevkit/http/fake.py +0 -0
- {apexdevkit-1.12.5 → apexdevkit-1.12.6}/apexdevkit/http/fluent.py +0 -0
- {apexdevkit-1.12.5 → apexdevkit-1.12.6}/apexdevkit/http/httpx.py +0 -0
- {apexdevkit-1.12.5 → apexdevkit-1.12.6}/apexdevkit/http/json.py +0 -0
- {apexdevkit-1.12.5 → apexdevkit-1.12.6}/apexdevkit/http/url.py +0 -0
- {apexdevkit-1.12.5 → apexdevkit-1.12.6}/apexdevkit/py.typed +0 -0
- {apexdevkit-1.12.5 → apexdevkit-1.12.6}/apexdevkit/repository/__init__.py +0 -0
- {apexdevkit-1.12.5 → apexdevkit-1.12.6}/apexdevkit/repository/base.py +0 -0
- {apexdevkit-1.12.5 → apexdevkit-1.12.6}/apexdevkit/repository/connector.py +0 -0
- {apexdevkit-1.12.5 → apexdevkit-1.12.6}/apexdevkit/repository/database.py +0 -0
- {apexdevkit-1.12.5 → apexdevkit-1.12.6}/apexdevkit/repository/in_memory.py +0 -0
- {apexdevkit-1.12.5 → apexdevkit-1.12.6}/apexdevkit/repository/interface.py +0 -0
- {apexdevkit-1.12.5 → apexdevkit-1.12.6}/apexdevkit/repository/mongo.py +0 -0
- {apexdevkit-1.12.5 → apexdevkit-1.12.6}/apexdevkit/repository/sqlite.py +0 -0
- {apexdevkit-1.12.5 → apexdevkit-1.12.6}/apexdevkit/testing/__init__.py +0 -0
- {apexdevkit-1.12.5 → apexdevkit-1.12.6}/apexdevkit/testing/database.py +0 -0
- {apexdevkit-1.12.5 → apexdevkit-1.12.6}/apexdevkit/testing/fake.py +0 -0
- {apexdevkit-1.12.5 → apexdevkit-1.12.6}/apexdevkit/testing/rest.py +0 -0
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
from dataclasses import dataclass, field
|
|
2
|
+
from typing import Any, Iterator
|
|
3
|
+
|
|
4
|
+
from apexdevkit.error import DoesNotExistError, ExistsError
|
|
5
|
+
|
|
6
|
+
_Raw = dict[str, Any]
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
@dataclass
|
|
10
|
+
class MemoryPersistence: # pragma: no cover
|
|
11
|
+
items: dict[str, _Raw] = field(init=False, default_factory=dict)
|
|
12
|
+
|
|
13
|
+
def create(self, item: _Raw) -> _Raw:
|
|
14
|
+
self._ensure_does_not_exist(item)
|
|
15
|
+
self.items[item["id"]] = item
|
|
16
|
+
|
|
17
|
+
return item
|
|
18
|
+
|
|
19
|
+
def _ensure_does_not_exist(self, new: _Raw) -> None:
|
|
20
|
+
if new["id"] in self.items.keys():
|
|
21
|
+
error = ExistsError(self.items[new["id"]])
|
|
22
|
+
error.with_duplicate(lambda item: f"id<{item['id']}>")
|
|
23
|
+
error.fire()
|
|
24
|
+
|
|
25
|
+
def read(self, item_id: str) -> _Raw:
|
|
26
|
+
self._ensure_exists(item_id)
|
|
27
|
+
|
|
28
|
+
return self.items[item_id]
|
|
29
|
+
|
|
30
|
+
def _ensure_exists(self, item_id: str) -> None:
|
|
31
|
+
if item_id not in self.items.keys():
|
|
32
|
+
raise DoesNotExistError(item_id)
|
|
33
|
+
|
|
34
|
+
def update(self, item: _Raw) -> None:
|
|
35
|
+
self._ensure_exists(item["id"])
|
|
36
|
+
|
|
37
|
+
self.delete(item["id"])
|
|
38
|
+
self.create(item)
|
|
39
|
+
|
|
40
|
+
def delete(self, item_id: str) -> None:
|
|
41
|
+
self._ensure_exists(item_id)
|
|
42
|
+
|
|
43
|
+
self.items.pop(item_id)
|
|
44
|
+
|
|
45
|
+
def __iter__(self) -> Iterator[_Raw]:
|
|
46
|
+
yield from self.items.values()
|
|
47
|
+
|
|
48
|
+
def __len__(self) -> int:
|
|
49
|
+
return len(self.items)
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
from dataclasses import dataclass
|
|
2
|
+
from typing import Any, Generic, Iterator, Self
|
|
3
|
+
|
|
4
|
+
from apexdevkit.formatter import Formatter
|
|
5
|
+
from apexdevkit.repository.alternative import MemoryPersistence
|
|
6
|
+
from apexdevkit.repository.interface import ItemT
|
|
7
|
+
|
|
8
|
+
_Raw = dict[str, Any]
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
@dataclass
|
|
12
|
+
class FormatterRepository(Generic[ItemT]):
|
|
13
|
+
base: MemoryPersistence
|
|
14
|
+
formatter: Formatter[_Raw, ItemT]
|
|
15
|
+
|
|
16
|
+
def create(self, item: ItemT) -> ItemT:
|
|
17
|
+
return self.formatter.load(self.base.create(self.formatter.dump(item)))
|
|
18
|
+
|
|
19
|
+
def create_many(self, items: list[ItemT]) -> list[ItemT]:
|
|
20
|
+
return [
|
|
21
|
+
self.formatter.load(
|
|
22
|
+
self.base.create(
|
|
23
|
+
self.formatter.dump(item),
|
|
24
|
+
),
|
|
25
|
+
)
|
|
26
|
+
for item in items
|
|
27
|
+
]
|
|
28
|
+
|
|
29
|
+
def read(self, item_id: str) -> ItemT:
|
|
30
|
+
return self.formatter.load(self.base.read(item_id))
|
|
31
|
+
|
|
32
|
+
def update(self, item: ItemT) -> None:
|
|
33
|
+
self.base.update(self.formatter.dump(item))
|
|
34
|
+
|
|
35
|
+
def update_many(self, items: list[ItemT]) -> None:
|
|
36
|
+
for item in items:
|
|
37
|
+
self.base.update(self.formatter.dump(item))
|
|
38
|
+
|
|
39
|
+
def delete(self, item_id: str) -> None:
|
|
40
|
+
self.base.delete(item_id)
|
|
41
|
+
|
|
42
|
+
def bind(self, **kwargs: Any) -> Self:
|
|
43
|
+
return self
|
|
44
|
+
|
|
45
|
+
def __iter__(self) -> Iterator[ItemT]:
|
|
46
|
+
for raw in self.base:
|
|
47
|
+
yield self.formatter.load(raw)
|
|
48
|
+
|
|
49
|
+
def __len__(self) -> int:
|
|
50
|
+
return len(self.base)
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
from dataclasses import dataclass
|
|
2
|
-
from typing import Iterator
|
|
2
|
+
from typing import Any, Iterator
|
|
3
3
|
|
|
4
4
|
from apexdevkit.repository.base import RepositoryBase
|
|
5
5
|
from apexdevkit.repository.interface import IdT, ItemT, Repository
|
|
@@ -27,6 +27,9 @@ class RepositoryDecorator(RepositoryBase[IdT, ItemT]):
|
|
|
27
27
|
def delete(self, item_id: IdT) -> None:
|
|
28
28
|
self.inner.delete(item_id)
|
|
29
29
|
|
|
30
|
+
def bind(self, **kwargs: Any) -> Repository[IdT, ItemT]:
|
|
31
|
+
return self.inner.bind(**kwargs)
|
|
32
|
+
|
|
30
33
|
def __iter__(self) -> Iterator[ItemT]:
|
|
31
34
|
return self.inner.__iter__()
|
|
32
35
|
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|