apexdevkit 1.23.6__tar.gz → 1.23.7__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 (55) hide show
  1. {apexdevkit-1.23.6 → apexdevkit-1.23.7}/PKG-INFO +1 -1
  2. {apexdevkit-1.23.6 → apexdevkit-1.23.7}/apexdevkit/fastapi/resource.py +19 -0
  3. {apexdevkit-1.23.6 → apexdevkit-1.23.7}/apexdevkit/fastapi/router.py +22 -1
  4. {apexdevkit-1.23.6 → apexdevkit-1.23.7}/apexdevkit/fastapi/schema.py +12 -0
  5. {apexdevkit-1.23.6 → apexdevkit-1.23.7}/apexdevkit/fastapi/service.py +3 -0
  6. {apexdevkit-1.23.6 → apexdevkit-1.23.7}/apexdevkit/testing/rest.py +9 -0
  7. {apexdevkit-1.23.6 → apexdevkit-1.23.7}/pyproject.toml +1 -1
  8. {apexdevkit-1.23.6 → apexdevkit-1.23.7}/LICENSE +0 -0
  9. {apexdevkit-1.23.6 → apexdevkit-1.23.7}/README.md +0 -0
  10. {apexdevkit-1.23.6 → apexdevkit-1.23.7}/apexdevkit/__init__.py +0 -0
  11. {apexdevkit-1.23.6 → apexdevkit-1.23.7}/apexdevkit/annotation/__init__.py +0 -0
  12. {apexdevkit-1.23.6 → apexdevkit-1.23.7}/apexdevkit/annotation/deprecate.py +0 -0
  13. {apexdevkit-1.23.6 → apexdevkit-1.23.7}/apexdevkit/date.py +0 -0
  14. {apexdevkit-1.23.6 → apexdevkit-1.23.7}/apexdevkit/environment.py +0 -0
  15. {apexdevkit-1.23.6 → apexdevkit-1.23.7}/apexdevkit/error.py +0 -0
  16. {apexdevkit-1.23.6 → apexdevkit-1.23.7}/apexdevkit/fastapi/__init__.py +0 -0
  17. {apexdevkit-1.23.6 → apexdevkit-1.23.7}/apexdevkit/fastapi/builder.py +0 -0
  18. {apexdevkit-1.23.6 → apexdevkit-1.23.7}/apexdevkit/fastapi/dependable.py +0 -0
  19. {apexdevkit-1.23.6 → apexdevkit-1.23.7}/apexdevkit/fastapi/docs.py +0 -0
  20. {apexdevkit-1.23.6 → apexdevkit-1.23.7}/apexdevkit/fastapi/name.py +0 -0
  21. {apexdevkit-1.23.6 → apexdevkit-1.23.7}/apexdevkit/fastapi/request.py +0 -0
  22. {apexdevkit-1.23.6 → apexdevkit-1.23.7}/apexdevkit/fastapi/response.py +0 -0
  23. {apexdevkit-1.23.6 → apexdevkit-1.23.7}/apexdevkit/fluent.py +0 -0
  24. {apexdevkit-1.23.6 → apexdevkit-1.23.7}/apexdevkit/formatter.py +0 -0
  25. {apexdevkit-1.23.6 → apexdevkit-1.23.7}/apexdevkit/http/__init__.py +0 -0
  26. {apexdevkit-1.23.6 → apexdevkit-1.23.7}/apexdevkit/http/fake.py +0 -0
  27. {apexdevkit-1.23.6 → apexdevkit-1.23.7}/apexdevkit/http/fluent.py +0 -0
  28. {apexdevkit-1.23.6 → apexdevkit-1.23.7}/apexdevkit/http/httpx/__init__.py +0 -0
  29. {apexdevkit-1.23.6 → apexdevkit-1.23.7}/apexdevkit/http/httpx/client.py +0 -0
  30. {apexdevkit-1.23.6 → apexdevkit-1.23.7}/apexdevkit/http/httpx/hooks.py +0 -0
  31. {apexdevkit-1.23.6 → apexdevkit-1.23.7}/apexdevkit/http/json.py +0 -0
  32. {apexdevkit-1.23.6 → apexdevkit-1.23.7}/apexdevkit/http/url.py +0 -0
  33. {apexdevkit-1.23.6 → apexdevkit-1.23.7}/apexdevkit/id.py +0 -0
  34. {apexdevkit-1.23.6 → apexdevkit-1.23.7}/apexdevkit/key_fn.py +0 -0
  35. {apexdevkit-1.23.6 → apexdevkit-1.23.7}/apexdevkit/py.typed +0 -0
  36. {apexdevkit-1.23.6 → apexdevkit-1.23.7}/apexdevkit/query/__init__.py +0 -0
  37. {apexdevkit-1.23.6 → apexdevkit-1.23.7}/apexdevkit/query/generator.py +0 -0
  38. {apexdevkit-1.23.6 → apexdevkit-1.23.7}/apexdevkit/query/query.py +0 -0
  39. {apexdevkit-1.23.6 → apexdevkit-1.23.7}/apexdevkit/repository/__init__.py +0 -0
  40. {apexdevkit-1.23.6 → apexdevkit-1.23.7}/apexdevkit/repository/base.py +0 -0
  41. {apexdevkit-1.23.6 → apexdevkit-1.23.7}/apexdevkit/repository/connector.py +0 -0
  42. {apexdevkit-1.23.6 → apexdevkit-1.23.7}/apexdevkit/repository/database.py +0 -0
  43. {apexdevkit-1.23.6 → apexdevkit-1.23.7}/apexdevkit/repository/decorator.py +0 -0
  44. {apexdevkit-1.23.6 → apexdevkit-1.23.7}/apexdevkit/repository/in_memory.py +0 -0
  45. {apexdevkit-1.23.6 → apexdevkit-1.23.7}/apexdevkit/repository/interface.py +0 -0
  46. {apexdevkit-1.23.6 → apexdevkit-1.23.7}/apexdevkit/repository/mssql.py +0 -0
  47. {apexdevkit-1.23.6 → apexdevkit-1.23.7}/apexdevkit/repository/repository.py +0 -0
  48. {apexdevkit-1.23.6 → apexdevkit-1.23.7}/apexdevkit/repository/sql.py +0 -0
  49. {apexdevkit-1.23.6 → apexdevkit-1.23.7}/apexdevkit/repository/sqlite.py +0 -0
  50. {apexdevkit-1.23.6 → apexdevkit-1.23.7}/apexdevkit/server.py +0 -0
  51. {apexdevkit-1.23.6 → apexdevkit-1.23.7}/apexdevkit/synchronization.py +0 -0
  52. {apexdevkit-1.23.6 → apexdevkit-1.23.7}/apexdevkit/testing/__init__.py +0 -0
  53. {apexdevkit-1.23.6 → apexdevkit-1.23.7}/apexdevkit/testing/database.py +0 -0
  54. {apexdevkit-1.23.6 → apexdevkit-1.23.7}/apexdevkit/testing/fake.py +0 -0
  55. {apexdevkit-1.23.6 → apexdevkit-1.23.7}/apexdevkit/value.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: apexdevkit
3
- Version: 1.23.6
3
+ Version: 1.23.7
4
4
  Summary: Apex Development Tools for python.
5
5
  Author: Apex Dev
6
6
  Author-email: dev@apex.ge
@@ -88,6 +88,19 @@ class RestfulResource:
88
88
 
89
89
  return endpoint
90
90
 
91
+ def sum_with(self, Service, FilterOptions) -> _Endpoint: # type: ignore
92
+ def endpoint(service: Service, options: FilterOptions) -> _Response:
93
+ try:
94
+ return {
95
+ "status": "success",
96
+ "code": 200,
97
+ "count": service.sum_with(options),
98
+ }
99
+ except ForbiddenError as e:
100
+ return JSONResponse(self.response.forbidden(e), 403)
101
+
102
+ return endpoint
103
+
91
104
  def read_all(self, Service) -> _Endpoint: # type: ignore
92
105
  def endpoint(service: Service) -> _Response:
93
106
  try:
@@ -312,3 +325,9 @@ class SummaryResponse(BaseModel):
312
325
  status: str
313
326
  code: int
314
327
  data: _SummaryListEnvelope
328
+
329
+
330
+ class SumResponse(BaseModel):
331
+ status: str
332
+ code: int
333
+ count: int
@@ -7,7 +7,7 @@ from fastapi import APIRouter, Depends, Path, Query
7
7
  from fastapi.responses import JSONResponse
8
8
 
9
9
  from apexdevkit.fastapi.name import RestfulName
10
- from apexdevkit.fastapi.resource import RestfulResource, SummaryResponse
10
+ from apexdevkit.fastapi.resource import RestfulResource, SummaryResponse, SumResponse
11
11
  from apexdevkit.fastapi.response import RestfulResponse
12
12
  from apexdevkit.fastapi.schema import RestfulSchema, Schema, SchemaFields
13
13
  from apexdevkit.fastapi.service import RawCollection, RawItem, RestfulService
@@ -185,6 +185,27 @@ class RestfulRouter:
185
185
 
186
186
  return self
187
187
 
188
+ def with_sum_endpoint(
189
+ self,
190
+ dependency: Dependency | None = None,
191
+ is_documented: bool = True,
192
+ ) -> Self:
193
+ self.router.add_api_route(
194
+ "/sum",
195
+ self.resource.sum_with(
196
+ Service=self._resolve(dependency),
197
+ FilterOptions=Annotated[RawItem, Depends(self.schema.for_sum())],
198
+ ),
199
+ methods=["POST"],
200
+ status_code=200,
201
+ responses={},
202
+ response_model=SumResponse,
203
+ include_in_schema=is_documented,
204
+ summary="Sum",
205
+ )
206
+
207
+ return self
208
+
188
209
  def with_read_all_endpoint(
189
210
  self,
190
211
  dependency: Dependency | None = None,
@@ -24,6 +24,9 @@ class SchemaFields(ABC):
24
24
  def filters(self) -> FluentDict[type]:
25
25
  return JsonDict()
26
26
 
27
+ def sum_filters(self) -> FluentDict[type]:
28
+ return JsonDict()
29
+
27
30
  @abstractmethod
28
31
  def readable(self) -> FluentDict[type]: # pragma: no cover
29
32
  pass
@@ -43,6 +46,7 @@ class RestfulSchema:
43
46
  "UpdateManyItem", self.fields.editable().merge(self.fields.id())
44
47
  )
45
48
  self._schema_for("Filter", self.fields.filters())
49
+ self._schema_for("Sum", self.fields.sum_filters())
46
50
 
47
51
  self._schema_for("Item", {self.name.singular: schema})
48
52
  self._schema_for("Collection", {self.name.plural: list[schema], "count": int})
@@ -143,6 +147,14 @@ class RestfulSchema:
143
147
 
144
148
  return _
145
149
 
150
+ def for_sum(self) -> Callable[[BaseModel], dict[str, Any]]:
151
+ schema = self.schemas["Sum"]
152
+
153
+ def _(request: schema) -> dict[str, Any]:
154
+ return request.model_dump()
155
+
156
+ return _
157
+
146
158
 
147
159
  @dataclass(frozen=True)
148
160
  class Schema:
@@ -38,6 +38,9 @@ class RestfulService: # pragma: no cover
38
38
  def filter_with(self, options: RawItem) -> RawCollection:
39
39
  raise NotImplementedError(self.filter_with.__name__)
40
40
 
41
+ def sum_with(self, options: RawItem) -> int:
42
+ raise NotImplementedError(self.filter_with.__name__)
43
+
41
44
  def read_all(self) -> RawCollection:
42
45
  raise NotImplementedError(self.read_all.__name__)
43
46
 
@@ -59,6 +59,15 @@ class _RestResource:
59
59
  ),
60
60
  )
61
61
 
62
+ def sum_with(self) -> _TestRequest:
63
+ return _TestRequest(
64
+ self.name,
65
+ HttpRequest(
66
+ HttpMethod.post,
67
+ self.http.with_endpoint(self.name.plural).with_endpoint("sum"),
68
+ ),
69
+ )
70
+
62
71
  def read_all(self) -> _TestRequest:
63
72
  return _TestRequest(
64
73
  self.name,
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "apexdevkit"
3
- version = "1.23.6"
3
+ version = "1.23.7"
4
4
  description = "Apex Development Tools for python."
5
5
  readme = "README.md"
6
6
  authors = [
File without changes
File without changes