apexdevkit 1.12.4__tar.gz → 1.12.5__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.4 → apexdevkit-1.12.5}/PKG-INFO +1 -1
- {apexdevkit-1.12.4 → apexdevkit-1.12.5}/apexdevkit/formatter.py +1 -1
- {apexdevkit-1.12.4 → apexdevkit-1.12.5}/apexdevkit/repository/in_memory.py +27 -32
- {apexdevkit-1.12.4 → apexdevkit-1.12.5}/pyproject.toml +1 -1
- {apexdevkit-1.12.4 → apexdevkit-1.12.5}/LICENSE +0 -0
- {apexdevkit-1.12.4 → apexdevkit-1.12.5}/README.md +0 -0
- {apexdevkit-1.12.4 → apexdevkit-1.12.5}/apexdevkit/__init__.py +0 -0
- {apexdevkit-1.12.4 → apexdevkit-1.12.5}/apexdevkit/annotation/__init__.py +0 -0
- {apexdevkit-1.12.4 → apexdevkit-1.12.5}/apexdevkit/annotation/deprecate.py +0 -0
- {apexdevkit-1.12.4 → apexdevkit-1.12.5}/apexdevkit/environment.py +0 -0
- {apexdevkit-1.12.4 → apexdevkit-1.12.5}/apexdevkit/error.py +0 -0
- {apexdevkit-1.12.4 → apexdevkit-1.12.5}/apexdevkit/fastapi/__init__.py +0 -0
- {apexdevkit-1.12.4 → apexdevkit-1.12.5}/apexdevkit/fastapi/builder.py +0 -0
- {apexdevkit-1.12.4 → apexdevkit-1.12.5}/apexdevkit/fastapi/dependable.py +0 -0
- {apexdevkit-1.12.4 → apexdevkit-1.12.5}/apexdevkit/fastapi/docs.py +0 -0
- {apexdevkit-1.12.4 → apexdevkit-1.12.5}/apexdevkit/fastapi/resource.py +0 -0
- {apexdevkit-1.12.4 → apexdevkit-1.12.5}/apexdevkit/fastapi/response.py +0 -0
- {apexdevkit-1.12.4 → apexdevkit-1.12.5}/apexdevkit/fastapi/router.py +0 -0
- {apexdevkit-1.12.4 → apexdevkit-1.12.5}/apexdevkit/fastapi/schema.py +0 -0
- {apexdevkit-1.12.4 → apexdevkit-1.12.5}/apexdevkit/fastapi/service.py +0 -0
- {apexdevkit-1.12.4 → apexdevkit-1.12.5}/apexdevkit/fluent.py +0 -0
- {apexdevkit-1.12.4 → apexdevkit-1.12.5}/apexdevkit/http/__init__.py +0 -0
- {apexdevkit-1.12.4 → apexdevkit-1.12.5}/apexdevkit/http/fake.py +0 -0
- {apexdevkit-1.12.4 → apexdevkit-1.12.5}/apexdevkit/http/fluent.py +0 -0
- {apexdevkit-1.12.4 → apexdevkit-1.12.5}/apexdevkit/http/httpx.py +0 -0
- {apexdevkit-1.12.4 → apexdevkit-1.12.5}/apexdevkit/http/json.py +0 -0
- {apexdevkit-1.12.4 → apexdevkit-1.12.5}/apexdevkit/http/url.py +0 -0
- {apexdevkit-1.12.4 → apexdevkit-1.12.5}/apexdevkit/py.typed +0 -0
- {apexdevkit-1.12.4 → apexdevkit-1.12.5}/apexdevkit/repository/__init__.py +0 -0
- {apexdevkit-1.12.4 → apexdevkit-1.12.5}/apexdevkit/repository/base.py +0 -0
- {apexdevkit-1.12.4 → apexdevkit-1.12.5}/apexdevkit/repository/connector.py +0 -0
- {apexdevkit-1.12.4 → apexdevkit-1.12.5}/apexdevkit/repository/database.py +0 -0
- {apexdevkit-1.12.4 → apexdevkit-1.12.5}/apexdevkit/repository/decorator.py +0 -0
- {apexdevkit-1.12.4 → apexdevkit-1.12.5}/apexdevkit/repository/interface.py +0 -0
- {apexdevkit-1.12.4 → apexdevkit-1.12.5}/apexdevkit/repository/mongo.py +0 -0
- {apexdevkit-1.12.4 → apexdevkit-1.12.5}/apexdevkit/repository/sqlite.py +0 -0
- {apexdevkit-1.12.4 → apexdevkit-1.12.5}/apexdevkit/testing/__init__.py +0 -0
- {apexdevkit-1.12.4 → apexdevkit-1.12.5}/apexdevkit/testing/database.py +0 -0
- {apexdevkit-1.12.4 → apexdevkit-1.12.5}/apexdevkit/testing/fake.py +0 -0
- {apexdevkit-1.12.4 → apexdevkit-1.12.5}/apexdevkit/testing/rest.py +0 -0
|
@@ -42,7 +42,7 @@ class DataclassFormatter(Generic[_TargetT]):
|
|
|
42
42
|
raw = deepcopy(raw)
|
|
43
43
|
|
|
44
44
|
for key, formatter in self.sub_formatters.items():
|
|
45
|
-
raw[key] = formatter.load(raw.pop(key))
|
|
45
|
+
raw[key] = formatter.load(raw.pop(key)) if raw[key] else None
|
|
46
46
|
|
|
47
47
|
return self.resource(**raw)
|
|
48
48
|
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
from copy import deepcopy
|
|
2
1
|
from dataclasses import dataclass, field
|
|
3
2
|
from typing import Any, Callable, Iterable, Iterator, Self
|
|
4
3
|
|
|
@@ -24,19 +23,19 @@ class InMemoryRepository(RepositoryBase[IdT, ItemT]):
|
|
|
24
23
|
formatter: Formatter[_Raw, ItemT]
|
|
25
24
|
items: dict[str, _Raw] = field(default_factory=dict)
|
|
26
25
|
|
|
27
|
-
|
|
26
|
+
_keys: list[KeyFunction] = field(init=False, default_factory=list)
|
|
27
|
+
|
|
28
|
+
def bind(self, **kwargs: Any) -> Self:
|
|
29
|
+
return self
|
|
28
30
|
|
|
29
31
|
def with_key(self, function: KeyFunction) -> Self:
|
|
30
|
-
self.
|
|
32
|
+
self._keys.append(function)
|
|
31
33
|
|
|
32
34
|
return self
|
|
33
35
|
|
|
34
36
|
def with_seeded(self, *items: ItemT) -> Self:
|
|
35
|
-
|
|
36
|
-
self.create(item)
|
|
37
|
-
return self
|
|
37
|
+
self.create_many(list(items))
|
|
38
38
|
|
|
39
|
-
def bind(self, **kwargs: Any) -> Self:
|
|
40
39
|
return self
|
|
41
40
|
|
|
42
41
|
def create_many(self, items: list[ItemT]) -> list[ItemT]:
|
|
@@ -47,7 +46,7 @@ class InMemoryRepository(RepositoryBase[IdT, ItemT]):
|
|
|
47
46
|
|
|
48
47
|
def create(self, item: ItemT) -> ItemT:
|
|
49
48
|
self._ensure_does_not_exist(item)
|
|
50
|
-
self.items[self.
|
|
49
|
+
self.items[self._pk(item)] = self.formatter.dump(item)
|
|
51
50
|
|
|
52
51
|
return item
|
|
53
52
|
|
|
@@ -55,39 +54,41 @@ class InMemoryRepository(RepositoryBase[IdT, ItemT]):
|
|
|
55
54
|
for existing in self:
|
|
56
55
|
error = ExistsError(existing)
|
|
57
56
|
|
|
58
|
-
for key in self.
|
|
57
|
+
for key in self._keys:
|
|
59
58
|
if key(new) == key(existing):
|
|
60
59
|
error.with_duplicate(key)
|
|
61
60
|
|
|
62
61
|
error.fire()
|
|
63
62
|
|
|
64
|
-
def
|
|
65
|
-
|
|
66
|
-
for item in self:
|
|
67
|
-
if key(item) == str(item_id):
|
|
68
|
-
return item
|
|
69
|
-
|
|
70
|
-
raise DoesNotExistError(item_id)
|
|
71
|
-
|
|
72
|
-
def update(self, item: ItemT) -> None:
|
|
73
|
-
try:
|
|
74
|
-
del self.items[self._key_functions[0](item)]
|
|
75
|
-
except KeyError:
|
|
76
|
-
raise DoesNotExistError(self._key_functions[0](item))
|
|
77
|
-
self.create(item)
|
|
63
|
+
def _pk(self, item: ItemT) -> Any:
|
|
64
|
+
return self._keys[0](item)
|
|
78
65
|
|
|
79
66
|
def update_many(self, items: list[ItemT]) -> None:
|
|
80
67
|
for item in items:
|
|
81
68
|
self.update(item)
|
|
82
69
|
|
|
70
|
+
def update(self, item: ItemT) -> None:
|
|
71
|
+
self.delete(self._pk(item))
|
|
72
|
+
self.create(item)
|
|
73
|
+
|
|
83
74
|
def delete(self, item_id: IdT) -> None:
|
|
84
|
-
|
|
75
|
+
item = self.read(item_id)
|
|
76
|
+
del self.items[self._pk(item)]
|
|
77
|
+
|
|
78
|
+
def read(self, item_id: IdT) -> ItemT:
|
|
79
|
+
for key in self._keys:
|
|
85
80
|
for item in self:
|
|
86
81
|
if key(item) == str(item_id):
|
|
87
|
-
|
|
88
|
-
|
|
82
|
+
return item
|
|
83
|
+
|
|
89
84
|
raise DoesNotExistError(item_id)
|
|
90
85
|
|
|
86
|
+
def __iter__(self) -> Iterator[ItemT]:
|
|
87
|
+
yield from [self.formatter.load(raw) for raw in self.items.values()]
|
|
88
|
+
|
|
89
|
+
def __len__(self) -> int:
|
|
90
|
+
return len(self.items)
|
|
91
|
+
|
|
91
92
|
def search(self, **kwargs: Any) -> Iterable[ItemT]:
|
|
92
93
|
items = []
|
|
93
94
|
|
|
@@ -96,9 +97,3 @@ class InMemoryRepository(RepositoryBase[IdT, ItemT]):
|
|
|
96
97
|
items.append(self.formatter.load(item))
|
|
97
98
|
|
|
98
99
|
return items
|
|
99
|
-
|
|
100
|
-
def __iter__(self) -> Iterator[ItemT]:
|
|
101
|
-
yield from [self.formatter.load(deepcopy(raw)) for raw in self.items.values()]
|
|
102
|
-
|
|
103
|
-
def __len__(self) -> int:
|
|
104
|
-
return len(self.items)
|
|
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
|