apexdevkit 1.12.6__tar.gz → 1.13.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 (45) hide show
  1. {apexdevkit-1.12.6 → apexdevkit-1.13.2}/PKG-INFO +1 -1
  2. {apexdevkit-1.12.6 → apexdevkit-1.13.2}/apexdevkit/fastapi/service.py +9 -6
  3. {apexdevkit-1.12.6 → apexdevkit-1.13.2}/apexdevkit/repository/base.py +8 -8
  4. apexdevkit-1.13.2/apexdevkit/repository/decorator.py +40 -0
  5. {apexdevkit-1.12.6 → apexdevkit-1.13.2}/apexdevkit/repository/in_memory.py +5 -14
  6. apexdevkit-1.13.2/apexdevkit/repository/interface.py +37 -0
  7. {apexdevkit-1.12.6 → apexdevkit-1.13.2}/apexdevkit/repository/mongo.py +0 -7
  8. {apexdevkit-1.12.6 → apexdevkit-1.13.2}/apexdevkit/repository/sqlite.py +5 -12
  9. {apexdevkit-1.12.6 → apexdevkit-1.13.2}/pyproject.toml +1 -1
  10. apexdevkit-1.12.6/apexdevkit/repository/decorator.py +0 -37
  11. apexdevkit-1.12.6/apexdevkit/repository/interface.py +0 -35
  12. {apexdevkit-1.12.6 → apexdevkit-1.13.2}/LICENSE +0 -0
  13. {apexdevkit-1.12.6 → apexdevkit-1.13.2}/README.md +0 -0
  14. {apexdevkit-1.12.6 → apexdevkit-1.13.2}/apexdevkit/__init__.py +0 -0
  15. {apexdevkit-1.12.6 → apexdevkit-1.13.2}/apexdevkit/annotation/__init__.py +0 -0
  16. {apexdevkit-1.12.6 → apexdevkit-1.13.2}/apexdevkit/annotation/deprecate.py +0 -0
  17. {apexdevkit-1.12.6 → apexdevkit-1.13.2}/apexdevkit/environment.py +0 -0
  18. {apexdevkit-1.12.6 → apexdevkit-1.13.2}/apexdevkit/error.py +0 -0
  19. {apexdevkit-1.12.6 → apexdevkit-1.13.2}/apexdevkit/fastapi/__init__.py +0 -0
  20. {apexdevkit-1.12.6 → apexdevkit-1.13.2}/apexdevkit/fastapi/builder.py +0 -0
  21. {apexdevkit-1.12.6 → apexdevkit-1.13.2}/apexdevkit/fastapi/dependable.py +0 -0
  22. {apexdevkit-1.12.6 → apexdevkit-1.13.2}/apexdevkit/fastapi/docs.py +0 -0
  23. {apexdevkit-1.12.6 → apexdevkit-1.13.2}/apexdevkit/fastapi/resource.py +0 -0
  24. {apexdevkit-1.12.6 → apexdevkit-1.13.2}/apexdevkit/fastapi/response.py +0 -0
  25. {apexdevkit-1.12.6 → apexdevkit-1.13.2}/apexdevkit/fastapi/router.py +0 -0
  26. {apexdevkit-1.12.6 → apexdevkit-1.13.2}/apexdevkit/fastapi/schema.py +0 -0
  27. {apexdevkit-1.12.6 → apexdevkit-1.13.2}/apexdevkit/fluent.py +0 -0
  28. {apexdevkit-1.12.6 → apexdevkit-1.13.2}/apexdevkit/formatter.py +0 -0
  29. {apexdevkit-1.12.6 → apexdevkit-1.13.2}/apexdevkit/http/__init__.py +0 -0
  30. {apexdevkit-1.12.6 → apexdevkit-1.13.2}/apexdevkit/http/fake.py +0 -0
  31. {apexdevkit-1.12.6 → apexdevkit-1.13.2}/apexdevkit/http/fluent.py +0 -0
  32. {apexdevkit-1.12.6 → apexdevkit-1.13.2}/apexdevkit/http/httpx.py +0 -0
  33. {apexdevkit-1.12.6 → apexdevkit-1.13.2}/apexdevkit/http/json.py +0 -0
  34. {apexdevkit-1.12.6 → apexdevkit-1.13.2}/apexdevkit/http/url.py +0 -0
  35. {apexdevkit-1.12.6 → apexdevkit-1.13.2}/apexdevkit/py.typed +0 -0
  36. {apexdevkit-1.12.6 → apexdevkit-1.13.2}/apexdevkit/repository/__init__.py +0 -0
  37. {apexdevkit-1.12.6 → apexdevkit-1.13.2}/apexdevkit/repository/alternative/__init__.py +0 -0
  38. {apexdevkit-1.12.6 → apexdevkit-1.13.2}/apexdevkit/repository/alternative/base.py +0 -0
  39. {apexdevkit-1.12.6 → apexdevkit-1.13.2}/apexdevkit/repository/alternative/formatter_repository.py +0 -0
  40. {apexdevkit-1.12.6 → apexdevkit-1.13.2}/apexdevkit/repository/connector.py +0 -0
  41. {apexdevkit-1.12.6 → apexdevkit-1.13.2}/apexdevkit/repository/database.py +0 -0
  42. {apexdevkit-1.12.6 → apexdevkit-1.13.2}/apexdevkit/testing/__init__.py +0 -0
  43. {apexdevkit-1.12.6 → apexdevkit-1.13.2}/apexdevkit/testing/database.py +0 -0
  44. {apexdevkit-1.12.6 → apexdevkit-1.13.2}/apexdevkit/testing/fake.py +0 -0
  45. {apexdevkit-1.12.6 → apexdevkit-1.13.2}/apexdevkit/testing/rest.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: apexdevkit
3
- Version: 1.12.6
3
+ Version: 1.13.2
4
4
  Summary: Apex Development Tools for python.
5
5
  Author: Apex Dev
6
6
  Author-email: dev@apex.ge
@@ -3,6 +3,7 @@ from dataclasses import dataclass, field
3
3
  from typing import Any, Dict, Generic, Iterable, Self, TypeVar
4
4
 
5
5
  from apexdevkit.formatter import Formatter
6
+ from apexdevkit.repository.decorator import BatchRepositoryDecorator
6
7
  from apexdevkit.repository.interface import Repository
7
8
 
8
9
  RawItem = dict[str, Any]
@@ -52,14 +53,14 @@ ItemT = TypeVar("ItemT")
52
53
  @dataclass
53
54
  class RestfulRepositoryBuilder(Generic[ItemT]):
54
55
  formatter: Formatter[dict[str, Any], ItemT] = field(init=False)
55
- repository: Repository[Any, ItemT] = field(init=False)
56
+ repository: Repository[ItemT] = field(init=False)
56
57
 
57
58
  def with_formatter(self, formatter: Formatter[dict[str, Any], ItemT]) -> Self:
58
59
  self.formatter = formatter
59
60
 
60
61
  return self
61
62
 
62
- def with_repository(self, repository: Repository[Any, ItemT]) -> Self:
63
+ def with_repository(self, repository: Repository[ItemT]) -> Self:
63
64
  self.repository = repository
64
65
 
65
66
  return self
@@ -71,7 +72,7 @@ class RestfulRepositoryBuilder(Generic[ItemT]):
71
72
  @dataclass
72
73
  class _RestfulRepository(RestfulService, Generic[ItemT]):
73
74
  formatter: Formatter[dict[str, Any], ItemT]
74
- repository: Repository[Any, ItemT]
75
+ repository: Repository[ItemT]
75
76
 
76
77
  def create_one(self, item: RawItem) -> RawItem:
77
78
  return self.formatter.dump(self.repository.create(self.formatter.load(item)))
@@ -79,7 +80,7 @@ class _RestfulRepository(RestfulService, Generic[ItemT]):
79
80
  def create_many(self, items: RawCollection) -> RawCollection:
80
81
  return [
81
82
  self.formatter.dump(item)
82
- for item in self.repository.create_many(
83
+ for item in BatchRepositoryDecorator(self.repository).create_many(
83
84
  [self.formatter.load(fields) for fields in items]
84
85
  )
85
86
  ]
@@ -106,7 +107,7 @@ class _RestfulRepository(RestfulService, Generic[ItemT]):
106
107
 
107
108
  updates.append(self.formatter.load(data))
108
109
 
109
- self.repository.update_many(updates)
110
+ BatchRepositoryDecorator(self.repository).update_many(updates)
110
111
 
111
112
  return [self.formatter.dump(item) for item in updates]
112
113
 
@@ -116,7 +117,9 @@ class _RestfulRepository(RestfulService, Generic[ItemT]):
116
117
  return item
117
118
 
118
119
  def replace_many(self, items: RawCollection) -> RawCollection:
119
- self.repository.update_many([self.formatter.load(item) for item in items])
120
+ BatchRepositoryDecorator(self.repository).update_many(
121
+ [self.formatter.load(item) for item in items]
122
+ )
120
123
 
121
124
  return items
122
125
 
@@ -1,28 +1,28 @@
1
- from typing import Any, Generic, Iterator
1
+ from typing import Any, Generic, Iterable, 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
- def create_many(self, items: list[ItemT]) -> list[ItemT]:
10
+ def create_many(self, items: Iterable[ItemT]) -> Iterable[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:
17
17
  raise NotImplementedError
18
18
 
19
- def update_many(self, items: list[ItemT]) -> None:
19
+ def update_many(self, items: Iterable[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]:
@@ -0,0 +1,40 @@
1
+ from dataclasses import dataclass
2
+ from typing import Any, Iterable, Iterator
3
+
4
+ from apexdevkit.repository.base import RepositoryBase
5
+ from apexdevkit.repository.interface import ItemT, Repository
6
+
7
+
8
+ @dataclass
9
+ class RepositoryDecorator(RepositoryBase[ItemT]):
10
+ inner: Repository[ItemT]
11
+
12
+ def create(self, item: ItemT) -> ItemT:
13
+ return self.inner.create(item)
14
+
15
+ def read(self, item_id: str) -> ItemT:
16
+ return self.inner.read(item_id)
17
+
18
+ def update(self, item: ItemT) -> None:
19
+ self.inner.update(item)
20
+
21
+ def delete(self, item_id: str) -> None:
22
+ self.inner.delete(item_id)
23
+
24
+ def bind(self, **kwargs: Any) -> Repository[ItemT]:
25
+ return self.inner.bind(**kwargs)
26
+
27
+ def __iter__(self) -> Iterator[ItemT]:
28
+ return self.inner.__iter__()
29
+
30
+ def __len__(self) -> int:
31
+ return self.inner.__len__()
32
+
33
+
34
+ class BatchRepositoryDecorator(RepositoryDecorator[ItemT]):
35
+ def create_many(self, items: Iterable[ItemT]) -> Iterable[ItemT]:
36
+ return [self.inner.create(item) for item in items]
37
+
38
+ def update_many(self, items: Iterable[ItemT]) -> None:
39
+ for item in items:
40
+ self.inner.update(item)
@@ -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
 
@@ -34,15 +34,10 @@ class InMemoryRepository(RepositoryBase[IdT, ItemT]):
34
34
  return self
35
35
 
36
36
  def with_seeded(self, *items: ItemT) -> Self:
37
- self.create_many(list(items))
38
-
39
- return self
40
-
41
- def create_many(self, items: list[ItemT]) -> list[ItemT]:
42
37
  for item in items:
43
38
  self.create(item)
44
39
 
45
- return items
40
+ return self
46
41
 
47
42
  def create(self, item: ItemT) -> ItemT:
48
43
  self._ensure_does_not_exist(item)
@@ -63,19 +58,15 @@ class InMemoryRepository(RepositoryBase[IdT, ItemT]):
63
58
  def _pk(self, item: ItemT) -> Any:
64
59
  return self._keys[0](item)
65
60
 
66
- def update_many(self, items: list[ItemT]) -> None:
67
- for item in items:
68
- self.update(item)
69
-
70
61
  def update(self, item: ItemT) -> None:
71
62
  self.delete(self._pk(item))
72
63
  self.create(item)
73
64
 
74
- def delete(self, item_id: IdT) -> None:
65
+ def delete(self, item_id: str) -> None:
75
66
  item = self.read(item_id)
76
67
  del self.items[self._pk(item)]
77
68
 
78
- def read(self, item_id: IdT) -> ItemT:
69
+ def read(self, item_id: str) -> ItemT:
79
70
  for key in self._keys:
80
71
  for item in self:
81
72
  if key(item) == str(item_id):
@@ -0,0 +1,37 @@
1
+ from __future__ import annotations
2
+
3
+ from collections.abc import Iterable
4
+ from typing import Any, Iterator, Protocol, TypeVar
5
+
6
+ ItemT = TypeVar("ItemT")
7
+
8
+
9
+ class Repository(Protocol[ItemT]): # pragma: no cover
10
+ def create(self, item: ItemT) -> ItemT:
11
+ pass
12
+
13
+ def read(self, item_id: str) -> ItemT:
14
+ pass
15
+
16
+ def update(self, item: ItemT) -> None:
17
+ pass
18
+
19
+ def delete(self, item_id: str) -> None:
20
+ pass
21
+
22
+ def bind(self, **kwargs: Any) -> Repository[ItemT]:
23
+ pass
24
+
25
+ def __iter__(self) -> Iterator[ItemT]:
26
+ pass
27
+
28
+ def __len__(self) -> int:
29
+ pass
30
+
31
+
32
+ class BatchRepository(Repository[ItemT], Protocol[ItemT]): # pragma: no cover
33
+ def create_many(self, items: Iterable[ItemT]) -> Iterable[ItemT]:
34
+ pass
35
+
36
+ def update_many(self, items: Iterable[ItemT]) -> None:
37
+ pass
@@ -49,9 +49,6 @@ class MongoRepository(Generic[ItemT]):
49
49
  self.collection(client).insert_one(self.formatter.dump(item))
50
50
  return item
51
51
 
52
- def create_many(self, items: list[ItemT]) -> list[ItemT]:
53
- return [self.create(item) for item in items]
54
-
55
52
  def read(self, item_id: str) -> ItemT:
56
53
  with self.connector.connect() as client:
57
54
  raw = self.collection(client).find_one({"id": item_id})
@@ -69,10 +66,6 @@ class MongoRepository(Generic[ItemT]):
69
66
  return_document=ReturnDocument.AFTER,
70
67
  )
71
68
 
72
- def update_many(self, items: list[ItemT]) -> None:
73
- for item in items:
74
- self.update(item)
75
-
76
69
  def delete(self, item_id: str) -> None:
77
70
  with self.connector.connect() as client:
78
71
  result = self.collection(client).delete_one({"id": item_id})
@@ -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]:
@@ -39,10 +39,7 @@ class SqliteRepository(RepositoryBase[IdT, ItemT]):
39
39
  self.table.duplicate(item).fire()
40
40
  return item
41
41
 
42
- def create_many(self, items: list[ItemT]) -> list[ItemT]:
43
- return [self.create(item) for item in items]
44
-
45
- def read(self, item_id: IdT) -> ItemT:
42
+ def read(self, item_id: str) -> ItemT:
46
43
  raw = self.db.execute(self.table.select(str(item_id))).fetch_one()
47
44
 
48
45
  if not raw:
@@ -53,11 +50,7 @@ class SqliteRepository(RepositoryBase[IdT, ItemT]):
53
50
  def update(self, item: ItemT) -> None:
54
51
  self.db.execute(self.table.update(item)).fetch_none()
55
52
 
56
- def update_many(self, items: list[ItemT]) -> None:
57
- for item in items:
58
- self.update(item)
59
-
60
- def delete(self, item_id: IdT) -> None:
53
+ def delete(self, item_id: str) -> None:
61
54
  self.db.execute(self.table.delete(str(item_id))).fetch_none()
62
55
 
63
56
  def delete_all(self) -> None:
@@ -1,6 +1,6 @@
1
1
  [tool.poetry]
2
2
  name = "apexdevkit"
3
- version = "1.12.6"
3
+ version = "1.13.2"
4
4
  description = "Apex Development Tools for python."
5
5
  authors = ["Apex Dev <dev@apex.ge>"]
6
6
  readme = "README.md"
@@ -1,37 +0,0 @@
1
- from dataclasses import dataclass
2
- from typing import Any, Iterator
3
-
4
- from apexdevkit.repository.base import RepositoryBase
5
- from apexdevkit.repository.interface import IdT, ItemT, Repository
6
-
7
-
8
- @dataclass
9
- class RepositoryDecorator(RepositoryBase[IdT, ItemT]):
10
- inner: Repository[IdT, ItemT]
11
-
12
- def create(self, item: ItemT) -> ItemT:
13
- return self.inner.create(item)
14
-
15
- def create_many(self, items: list[ItemT]) -> list[ItemT]:
16
- return self.inner.create_many(items)
17
-
18
- def read(self, item_id: IdT) -> ItemT:
19
- return self.inner.read(item_id)
20
-
21
- def update(self, item: ItemT) -> None:
22
- self.inner.update(item)
23
-
24
- def update_many(self, items: list[ItemT]) -> None:
25
- self.inner.update_many(items)
26
-
27
- def delete(self, item_id: IdT) -> None:
28
- self.inner.delete(item_id)
29
-
30
- def bind(self, **kwargs: Any) -> Repository[IdT, ItemT]:
31
- return self.inner.bind(**kwargs)
32
-
33
- def __iter__(self) -> Iterator[ItemT]:
34
- return self.inner.__iter__()
35
-
36
- def __len__(self) -> int:
37
- return self.inner.__len__()
@@ -1,35 +0,0 @@
1
- from __future__ import annotations
2
-
3
- from typing import Any, Iterator, Protocol, TypeVar
4
-
5
- ItemT = TypeVar("ItemT")
6
- IdT = TypeVar("IdT", contravariant=True)
7
-
8
-
9
- class Repository(Protocol[IdT, ItemT]): # pragma: no cover
10
- def create(self, item: ItemT) -> ItemT:
11
- pass
12
-
13
- def create_many(self, items: list[ItemT]) -> list[ItemT]:
14
- pass
15
-
16
- def read(self, item_id: IdT) -> ItemT:
17
- pass
18
-
19
- def update(self, item: ItemT) -> None:
20
- pass
21
-
22
- def update_many(self, items: list[ItemT]) -> None:
23
- pass
24
-
25
- def delete(self, item_id: IdT) -> None:
26
- pass
27
-
28
- def bind(self, **kwargs: Any) -> Repository[IdT, ItemT]:
29
- pass
30
-
31
- def __iter__(self) -> Iterator[ItemT]:
32
- pass
33
-
34
- def __len__(self) -> int:
35
- pass
File without changes
File without changes