apexdevkit 1.12.5__tar.gz → 1.13.1__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 (43) hide show
  1. {apexdevkit-1.12.5 → apexdevkit-1.13.1}/PKG-INFO +1 -1
  2. {apexdevkit-1.12.5 → apexdevkit-1.13.1}/apexdevkit/fastapi/service.py +3 -3
  3. apexdevkit-1.13.1/apexdevkit/repository/alternative/__init__.py +7 -0
  4. apexdevkit-1.13.1/apexdevkit/repository/alternative/base.py +49 -0
  5. apexdevkit-1.13.1/apexdevkit/repository/alternative/formatter_repository.py +50 -0
  6. {apexdevkit-1.12.5 → apexdevkit-1.13.1}/apexdevkit/repository/base.py +5 -5
  7. {apexdevkit-1.12.5 → apexdevkit-1.13.1}/apexdevkit/repository/decorator.py +9 -6
  8. {apexdevkit-1.12.5 → apexdevkit-1.13.1}/apexdevkit/repository/in_memory.py +4 -4
  9. {apexdevkit-1.12.5 → apexdevkit-1.13.1}/apexdevkit/repository/interface.py +4 -5
  10. {apexdevkit-1.12.5 → apexdevkit-1.13.1}/apexdevkit/repository/sqlite.py +5 -5
  11. {apexdevkit-1.12.5 → apexdevkit-1.13.1}/pyproject.toml +1 -1
  12. {apexdevkit-1.12.5 → apexdevkit-1.13.1}/LICENSE +0 -0
  13. {apexdevkit-1.12.5 → apexdevkit-1.13.1}/README.md +0 -0
  14. {apexdevkit-1.12.5 → apexdevkit-1.13.1}/apexdevkit/__init__.py +0 -0
  15. {apexdevkit-1.12.5 → apexdevkit-1.13.1}/apexdevkit/annotation/__init__.py +0 -0
  16. {apexdevkit-1.12.5 → apexdevkit-1.13.1}/apexdevkit/annotation/deprecate.py +0 -0
  17. {apexdevkit-1.12.5 → apexdevkit-1.13.1}/apexdevkit/environment.py +0 -0
  18. {apexdevkit-1.12.5 → apexdevkit-1.13.1}/apexdevkit/error.py +0 -0
  19. {apexdevkit-1.12.5 → apexdevkit-1.13.1}/apexdevkit/fastapi/__init__.py +0 -0
  20. {apexdevkit-1.12.5 → apexdevkit-1.13.1}/apexdevkit/fastapi/builder.py +0 -0
  21. {apexdevkit-1.12.5 → apexdevkit-1.13.1}/apexdevkit/fastapi/dependable.py +0 -0
  22. {apexdevkit-1.12.5 → apexdevkit-1.13.1}/apexdevkit/fastapi/docs.py +0 -0
  23. {apexdevkit-1.12.5 → apexdevkit-1.13.1}/apexdevkit/fastapi/resource.py +0 -0
  24. {apexdevkit-1.12.5 → apexdevkit-1.13.1}/apexdevkit/fastapi/response.py +0 -0
  25. {apexdevkit-1.12.5 → apexdevkit-1.13.1}/apexdevkit/fastapi/router.py +0 -0
  26. {apexdevkit-1.12.5 → apexdevkit-1.13.1}/apexdevkit/fastapi/schema.py +0 -0
  27. {apexdevkit-1.12.5 → apexdevkit-1.13.1}/apexdevkit/fluent.py +0 -0
  28. {apexdevkit-1.12.5 → apexdevkit-1.13.1}/apexdevkit/formatter.py +0 -0
  29. {apexdevkit-1.12.5 → apexdevkit-1.13.1}/apexdevkit/http/__init__.py +0 -0
  30. {apexdevkit-1.12.5 → apexdevkit-1.13.1}/apexdevkit/http/fake.py +0 -0
  31. {apexdevkit-1.12.5 → apexdevkit-1.13.1}/apexdevkit/http/fluent.py +0 -0
  32. {apexdevkit-1.12.5 → apexdevkit-1.13.1}/apexdevkit/http/httpx.py +0 -0
  33. {apexdevkit-1.12.5 → apexdevkit-1.13.1}/apexdevkit/http/json.py +0 -0
  34. {apexdevkit-1.12.5 → apexdevkit-1.13.1}/apexdevkit/http/url.py +0 -0
  35. {apexdevkit-1.12.5 → apexdevkit-1.13.1}/apexdevkit/py.typed +0 -0
  36. {apexdevkit-1.12.5 → apexdevkit-1.13.1}/apexdevkit/repository/__init__.py +0 -0
  37. {apexdevkit-1.12.5 → apexdevkit-1.13.1}/apexdevkit/repository/connector.py +0 -0
  38. {apexdevkit-1.12.5 → apexdevkit-1.13.1}/apexdevkit/repository/database.py +0 -0
  39. {apexdevkit-1.12.5 → apexdevkit-1.13.1}/apexdevkit/repository/mongo.py +0 -0
  40. {apexdevkit-1.12.5 → apexdevkit-1.13.1}/apexdevkit/testing/__init__.py +0 -0
  41. {apexdevkit-1.12.5 → apexdevkit-1.13.1}/apexdevkit/testing/database.py +0 -0
  42. {apexdevkit-1.12.5 → apexdevkit-1.13.1}/apexdevkit/testing/fake.py +0 -0
  43. {apexdevkit-1.12.5 → apexdevkit-1.13.1}/apexdevkit/testing/rest.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: apexdevkit
3
- Version: 1.12.5
3
+ Version: 1.13.1
4
4
  Summary: Apex Development Tools for python.
5
5
  Author: Apex Dev
6
6
  Author-email: dev@apex.ge
@@ -52,14 +52,14 @@ ItemT = TypeVar("ItemT")
52
52
  @dataclass
53
53
  class RestfulRepositoryBuilder(Generic[ItemT]):
54
54
  formatter: Formatter[dict[str, Any], ItemT] = field(init=False)
55
- repository: Repository[Any, ItemT] = field(init=False)
55
+ repository: Repository[ItemT] = field(init=False)
56
56
 
57
57
  def with_formatter(self, formatter: Formatter[dict[str, Any], ItemT]) -> Self:
58
58
  self.formatter = formatter
59
59
 
60
60
  return self
61
61
 
62
- def with_repository(self, repository: Repository[Any, ItemT]) -> Self:
62
+ def with_repository(self, repository: Repository[ItemT]) -> Self:
63
63
  self.repository = repository
64
64
 
65
65
  return self
@@ -71,7 +71,7 @@ class RestfulRepositoryBuilder(Generic[ItemT]):
71
71
  @dataclass
72
72
  class _RestfulRepository(RestfulService, Generic[ItemT]):
73
73
  formatter: Formatter[dict[str, Any], ItemT]
74
- repository: Repository[Any, ItemT]
74
+ repository: Repository[ItemT]
75
75
 
76
76
  def create_one(self, item: RawItem) -> RawItem:
77
77
  return self.formatter.dump(self.repository.create(self.formatter.load(item)))
@@ -0,0 +1,7 @@
1
+ from apexdevkit.repository.alternative.base import MemoryPersistence
2
+ from apexdevkit.repository.alternative.formatter_repository import FormatterRepository
3
+
4
+ __all__ = [
5
+ "MemoryPersistence",
6
+ "FormatterRepository",
7
+ ]
@@ -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,16 +1,16 @@
1
1
  from typing import Any, Generic, Iterator
2
2
 
3
- from apexdevkit.repository.interface import IdT, ItemT, Repository
3
+ from apexdevkit.repository.interface import ItemT, Repository
4
4
 
5
5
 
6
- class RepositoryBase(Generic[IdT, ItemT]): # pragma: no cover
6
+ class RepositoryBase(Generic[ItemT]): # pragma: no cover
7
7
  def create(self, item: ItemT) -> ItemT:
8
8
  raise NotImplementedError
9
9
 
10
10
  def create_many(self, items: list[ItemT]) -> list[ItemT]:
11
11
  raise NotImplementedError
12
12
 
13
- def read(self, item_id: IdT) -> ItemT:
13
+ def read(self, item_id: str) -> ItemT:
14
14
  raise NotImplementedError
15
15
 
16
16
  def update(self, item: ItemT) -> None:
@@ -19,10 +19,10 @@ class RepositoryBase(Generic[IdT, ItemT]): # pragma: no cover
19
19
  def update_many(self, items: list[ItemT]) -> None:
20
20
  raise NotImplementedError
21
21
 
22
- def delete(self, item_id: IdT) -> None:
22
+ def delete(self, item_id: str) -> None:
23
23
  raise NotImplementedError
24
24
 
25
- def bind(self, **kwargs: Any) -> Repository[IdT, ItemT]:
25
+ def bind(self, **kwargs: Any) -> Repository[ItemT]:
26
26
  raise NotImplementedError
27
27
 
28
28
  def __iter__(self) -> Iterator[ItemT]:
@@ -1,13 +1,13 @@
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
- from apexdevkit.repository.interface import IdT, ItemT, Repository
5
+ from apexdevkit.repository.interface import ItemT, Repository
6
6
 
7
7
 
8
8
  @dataclass
9
- class RepositoryDecorator(RepositoryBase[IdT, ItemT]):
10
- inner: Repository[IdT, ItemT]
9
+ class RepositoryDecorator(RepositoryBase[ItemT]):
10
+ inner: Repository[ItemT]
11
11
 
12
12
  def create(self, item: ItemT) -> ItemT:
13
13
  return self.inner.create(item)
@@ -15,7 +15,7 @@ class RepositoryDecorator(RepositoryBase[IdT, ItemT]):
15
15
  def create_many(self, items: list[ItemT]) -> list[ItemT]:
16
16
  return self.inner.create_many(items)
17
17
 
18
- def read(self, item_id: IdT) -> ItemT:
18
+ def read(self, item_id: str) -> ItemT:
19
19
  return self.inner.read(item_id)
20
20
 
21
21
  def update(self, item: ItemT) -> None:
@@ -24,9 +24,12 @@ class RepositoryDecorator(RepositoryBase[IdT, ItemT]):
24
24
  def update_many(self, items: list[ItemT]) -> None:
25
25
  self.inner.update_many(items)
26
26
 
27
- def delete(self, item_id: IdT) -> None:
27
+ def delete(self, item_id: str) -> None:
28
28
  self.inner.delete(item_id)
29
29
 
30
+ def bind(self, **kwargs: Any) -> Repository[ItemT]:
31
+ return self.inner.bind(**kwargs)
32
+
30
33
  def __iter__(self) -> Iterator[ItemT]:
31
34
  return self.inner.__iter__()
32
35
 
@@ -4,7 +4,7 @@ from typing import Any, Callable, Iterable, Iterator, Self
4
4
  from apexdevkit.error import DoesNotExistError, ExistsError
5
5
  from apexdevkit.formatter import Formatter
6
6
  from apexdevkit.repository import RepositoryBase
7
- from apexdevkit.repository.interface import IdT, ItemT
7
+ from apexdevkit.repository.interface import ItemT
8
8
 
9
9
  KeyFunction = Callable[[Any], str]
10
10
  _Raw = dict[str, Any]
@@ -19,7 +19,7 @@ class AttributeKey:
19
19
 
20
20
 
21
21
  @dataclass
22
- class InMemoryRepository(RepositoryBase[IdT, ItemT]):
22
+ class InMemoryRepository(RepositoryBase[ItemT]):
23
23
  formatter: Formatter[_Raw, ItemT]
24
24
  items: dict[str, _Raw] = field(default_factory=dict)
25
25
 
@@ -71,11 +71,11 @@ class InMemoryRepository(RepositoryBase[IdT, ItemT]):
71
71
  self.delete(self._pk(item))
72
72
  self.create(item)
73
73
 
74
- def delete(self, item_id: IdT) -> None:
74
+ def delete(self, item_id: str) -> None:
75
75
  item = self.read(item_id)
76
76
  del self.items[self._pk(item)]
77
77
 
78
- def read(self, item_id: IdT) -> ItemT:
78
+ def read(self, item_id: str) -> ItemT:
79
79
  for key in self._keys:
80
80
  for item in self:
81
81
  if key(item) == str(item_id):
@@ -3,17 +3,16 @@ from __future__ import annotations
3
3
  from typing import Any, Iterator, Protocol, TypeVar
4
4
 
5
5
  ItemT = TypeVar("ItemT")
6
- IdT = TypeVar("IdT", contravariant=True)
7
6
 
8
7
 
9
- class Repository(Protocol[IdT, ItemT]): # pragma: no cover
8
+ class Repository(Protocol[ItemT]): # pragma: no cover
10
9
  def create(self, item: ItemT) -> ItemT:
11
10
  pass
12
11
 
13
12
  def create_many(self, items: list[ItemT]) -> list[ItemT]:
14
13
  pass
15
14
 
16
- def read(self, item_id: IdT) -> ItemT:
15
+ def read(self, item_id: str) -> ItemT:
17
16
  pass
18
17
 
19
18
  def update(self, item: ItemT) -> None:
@@ -22,10 +21,10 @@ class Repository(Protocol[IdT, ItemT]): # pragma: no cover
22
21
  def update_many(self, items: list[ItemT]) -> None:
23
22
  pass
24
23
 
25
- def delete(self, item_id: IdT) -> None:
24
+ def delete(self, item_id: str) -> None:
26
25
  pass
27
26
 
28
- def bind(self, **kwargs: Any) -> Repository[IdT, ItemT]:
27
+ def bind(self, **kwargs: Any) -> Repository[ItemT]:
29
28
  pass
30
29
 
31
30
  def __iter__(self) -> Iterator[ItemT]:
@@ -6,15 +6,15 @@ from typing import Any, Generic, Iterator
6
6
 
7
7
  from apexdevkit.error import DoesNotExistError, ExistsError
8
8
  from apexdevkit.repository import Database, DatabaseCommand, RepositoryBase
9
- from apexdevkit.repository.interface import IdT, ItemT
9
+ from apexdevkit.repository.interface import ItemT
10
10
 
11
11
 
12
12
  @dataclass
13
- class SqliteRepository(RepositoryBase[IdT, ItemT]):
13
+ class SqliteRepository(RepositoryBase[ItemT]):
14
14
  db: Database
15
15
  table: SqlTable[ItemT]
16
16
 
17
- def bind(self, **kwargs: Any) -> SqliteRepository[IdT, ItemT]:
17
+ def bind(self, **kwargs: Any) -> SqliteRepository[ItemT]:
18
18
  return SqliteRepository(self.db, self.table.bind(**kwargs))
19
19
 
20
20
  def __iter__(self) -> Iterator[ItemT]:
@@ -42,7 +42,7 @@ class SqliteRepository(RepositoryBase[IdT, ItemT]):
42
42
  def create_many(self, items: list[ItemT]) -> list[ItemT]:
43
43
  return [self.create(item) for item in items]
44
44
 
45
- def read(self, item_id: IdT) -> ItemT:
45
+ def read(self, item_id: str) -> ItemT:
46
46
  raw = self.db.execute(self.table.select(str(item_id))).fetch_one()
47
47
 
48
48
  if not raw:
@@ -57,7 +57,7 @@ class SqliteRepository(RepositoryBase[IdT, ItemT]):
57
57
  for item in items:
58
58
  self.update(item)
59
59
 
60
- def delete(self, item_id: IdT) -> None:
60
+ def delete(self, item_id: str) -> None:
61
61
  self.db.execute(self.table.delete(str(item_id))).fetch_none()
62
62
 
63
63
  def delete_all(self) -> None:
@@ -1,6 +1,6 @@
1
1
  [tool.poetry]
2
2
  name = "apexdevkit"
3
- version = "1.12.5"
3
+ version = "1.13.1"
4
4
  description = "Apex Development Tools for python."
5
5
  authors = ["Apex Dev <dev@apex.ge>"]
6
6
  readme = "README.md"
File without changes
File without changes