apexdevkit 1.5.22__tar.gz → 1.5.24__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 (37) hide show
  1. {apexdevkit-1.5.22 → apexdevkit-1.5.24}/PKG-INFO +1 -1
  2. apexdevkit-1.5.24/apexdevkit/fastapi/__init__.py +10 -0
  3. apexdevkit-1.5.24/apexdevkit/fastapi/resource.py +129 -0
  4. {apexdevkit-1.5.22 → apexdevkit-1.5.24}/apexdevkit/fastapi/router.py +43 -75
  5. {apexdevkit-1.5.22 → apexdevkit-1.5.24}/pyproject.toml +1 -1
  6. apexdevkit-1.5.22/apexdevkit/fastapi/__init__.py +0 -26
  7. apexdevkit-1.5.22/apexdevkit/fastapi/resource.py +0 -177
  8. {apexdevkit-1.5.22 → apexdevkit-1.5.24}/LICENSE +0 -0
  9. {apexdevkit-1.5.22 → apexdevkit-1.5.24}/README.md +0 -0
  10. {apexdevkit-1.5.22 → apexdevkit-1.5.24}/apexdevkit/__init__.py +0 -0
  11. {apexdevkit-1.5.22 → apexdevkit-1.5.24}/apexdevkit/annotation/__init__.py +0 -0
  12. {apexdevkit-1.5.22 → apexdevkit-1.5.24}/apexdevkit/annotation/deprecate.py +0 -0
  13. {apexdevkit-1.5.22 → apexdevkit-1.5.24}/apexdevkit/error.py +0 -0
  14. {apexdevkit-1.5.22 → apexdevkit-1.5.24}/apexdevkit/fastapi/builder.py +0 -0
  15. {apexdevkit-1.5.22 → apexdevkit-1.5.24}/apexdevkit/fastapi/dependable.py +0 -0
  16. {apexdevkit-1.5.22 → apexdevkit-1.5.24}/apexdevkit/fastapi/docs.py +0 -0
  17. {apexdevkit-1.5.22 → apexdevkit-1.5.24}/apexdevkit/fastapi/response.py +0 -0
  18. {apexdevkit-1.5.22 → apexdevkit-1.5.24}/apexdevkit/fastapi/schema.py +0 -0
  19. {apexdevkit-1.5.22 → apexdevkit-1.5.24}/apexdevkit/fastapi/service.py +0 -0
  20. {apexdevkit-1.5.22 → apexdevkit-1.5.24}/apexdevkit/formatter.py +0 -0
  21. {apexdevkit-1.5.22 → apexdevkit-1.5.24}/apexdevkit/http/__init__.py +0 -0
  22. {apexdevkit-1.5.22 → apexdevkit-1.5.24}/apexdevkit/http/fake.py +0 -0
  23. {apexdevkit-1.5.22 → apexdevkit-1.5.24}/apexdevkit/http/fluent.py +0 -0
  24. {apexdevkit-1.5.22 → apexdevkit-1.5.24}/apexdevkit/http/httpx.py +0 -0
  25. {apexdevkit-1.5.22 → apexdevkit-1.5.24}/apexdevkit/http/json.py +0 -0
  26. {apexdevkit-1.5.22 → apexdevkit-1.5.24}/apexdevkit/http/url.py +0 -0
  27. {apexdevkit-1.5.22 → apexdevkit-1.5.24}/apexdevkit/py.typed +0 -0
  28. {apexdevkit-1.5.22 → apexdevkit-1.5.24}/apexdevkit/repository/__init__.py +0 -0
  29. {apexdevkit-1.5.22 → apexdevkit-1.5.24}/apexdevkit/repository/base.py +0 -0
  30. {apexdevkit-1.5.22 → apexdevkit-1.5.24}/apexdevkit/repository/connector.py +0 -0
  31. {apexdevkit-1.5.22 → apexdevkit-1.5.24}/apexdevkit/repository/database.py +0 -0
  32. {apexdevkit-1.5.22 → apexdevkit-1.5.24}/apexdevkit/repository/in_memory.py +0 -0
  33. {apexdevkit-1.5.22 → apexdevkit-1.5.24}/apexdevkit/repository/interface.py +0 -0
  34. {apexdevkit-1.5.22 → apexdevkit-1.5.24}/apexdevkit/testing/__init__.py +0 -0
  35. {apexdevkit-1.5.22 → apexdevkit-1.5.24}/apexdevkit/testing/database.py +0 -0
  36. {apexdevkit-1.5.22 → apexdevkit-1.5.24}/apexdevkit/testing/fake.py +0 -0
  37. {apexdevkit-1.5.22 → apexdevkit-1.5.24}/apexdevkit/testing/rest.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: apexdevkit
3
- Version: 1.5.22
3
+ Version: 1.5.24
4
4
  Summary: Apex Development Tools for python.
5
5
  Author: Apex Dev
6
6
  Author-email: dev@apex.ge
@@ -0,0 +1,10 @@
1
+ from apexdevkit.fastapi.builder import FastApiBuilder, RestfulServiceBuilder
2
+ from apexdevkit.fastapi.dependable import inject
3
+ from apexdevkit.fastapi.service import RestfulRepositoryBuilder
4
+
5
+ __all__ = [
6
+ "FastApiBuilder",
7
+ "RestfulServiceBuilder",
8
+ "inject",
9
+ "RestfulRepositoryBuilder",
10
+ ]
@@ -0,0 +1,129 @@
1
+ from dataclasses import dataclass
2
+ from functools import cached_property
3
+ from typing import Any, Callable
4
+
5
+ from starlette.responses import JSONResponse
6
+
7
+ from apexdevkit.error import DoesNotExistError, ExistsError, ForbiddenError
8
+ from apexdevkit.fastapi.response import RestfulResponse
9
+ from apexdevkit.testing import RestfulName
10
+
11
+ _Response = JSONResponse | dict[str, Any]
12
+
13
+
14
+ @dataclass
15
+ class RestfulResource:
16
+ name: RestfulName
17
+
18
+ @cached_property
19
+ def response(self) -> RestfulResponse:
20
+ return RestfulResponse(name=self.name)
21
+
22
+ def create_one(self, Service, Item) -> Callable[..., _Response]: # type: ignore
23
+ def endpoint(service: Service, item: Item) -> _Response:
24
+ try:
25
+ item = service.create_one(item)
26
+ except ExistsError as e:
27
+ return JSONResponse(self.response.exists(e), 409)
28
+ except ForbiddenError as e:
29
+ return JSONResponse(self.response.forbidden(e), 403)
30
+
31
+ return self.response.created_one(item)
32
+
33
+ return endpoint
34
+
35
+ def create_many(self, Service, Collection) -> Callable[..., _Response]: # type: ignore
36
+ def endpoint(service: Service, items: Collection) -> _Response:
37
+ try:
38
+ return self.response.created_many(service.create_many(items))
39
+ except ExistsError as e:
40
+ return JSONResponse(self.response.exists(e), 409)
41
+ except ForbiddenError as e:
42
+ return JSONResponse(self.response.forbidden(e), 403)
43
+
44
+ return endpoint
45
+
46
+ def read_one(self, Service, ItemId) -> Callable[..., _Response]: # type: ignore
47
+ def endpoint(service: Service, item_id: ItemId) -> _Response:
48
+ try:
49
+ return self.response.found_one(service.read_one(item_id))
50
+ except DoesNotExistError as e:
51
+ return JSONResponse(self.response.not_found(e), 404)
52
+ except ForbiddenError as e:
53
+ return JSONResponse(self.response.forbidden(e), 403)
54
+
55
+ return endpoint
56
+
57
+ def read_all(self, Service) -> Callable[..., _Response]: # type: ignore
58
+ def endpoint(service: Service) -> _Response:
59
+ try:
60
+ return self.response.found_many(list(service.read_all()))
61
+ except ForbiddenError as e:
62
+ return JSONResponse(self.response.forbidden(e), 403)
63
+
64
+ return endpoint
65
+
66
+ def update_one(self, Service, ItemId, Updates) -> Callable[..., _Response]: # type: ignore
67
+ def endpoint(service: Service, item_id: ItemId, updates: Updates) -> _Response:
68
+ try:
69
+ service.update_one(item_id, **updates)
70
+ except DoesNotExistError as e:
71
+ return JSONResponse(self.response.not_found(e), 404)
72
+ except ForbiddenError as e:
73
+ return JSONResponse(self.response.forbidden(e), 403)
74
+
75
+ return self.response.ok()
76
+
77
+ return endpoint
78
+
79
+ def update_many(self, Service, Collection) -> Callable[..., _Response]: # type: ignore
80
+ def endpoint(service: Service, items: Collection) -> _Response:
81
+ try:
82
+ service.update_many(items)
83
+ except DoesNotExistError as e:
84
+ return JSONResponse(self.response.not_found(e), 404)
85
+ except ForbiddenError as e:
86
+ return JSONResponse(self.response.forbidden(e), 403)
87
+
88
+ return self.response.ok()
89
+
90
+ return endpoint
91
+
92
+ def replace_one(self, Service, Item) -> Callable[..., _Response]: # type: ignore
93
+ def endpoint(service: Service, item: Item) -> _Response:
94
+ try:
95
+ service.replace_one(item)
96
+ except DoesNotExistError as e:
97
+ return JSONResponse(self.response.not_found(e), 404)
98
+ except ForbiddenError as e:
99
+ return JSONResponse(self.response.forbidden(e), 403)
100
+
101
+ return self.response.ok()
102
+
103
+ return endpoint
104
+
105
+ def replace_many(self, Service, Collection) -> Callable[..., _Response]: # type: ignore
106
+ def endpoint(service: Service, items: Collection) -> _Response:
107
+ try:
108
+ service.replace_many(items)
109
+ except DoesNotExistError as e:
110
+ return JSONResponse(self.response.not_found(e), 404)
111
+ except ForbiddenError as e:
112
+ return JSONResponse(self.response.forbidden(e), 403)
113
+
114
+ return self.response.ok()
115
+
116
+ return endpoint
117
+
118
+ def delete_one(self, Service, ItemId) -> Callable[..., _Response]: # type: ignore
119
+ def endpoint(service: Service, item_id: ItemId) -> _Response:
120
+ try:
121
+ service.delete_one(item_id)
122
+ except DoesNotExistError as e:
123
+ return JSONResponse(self.response.not_found(e), 404)
124
+ except ForbiddenError as e:
125
+ return JSONResponse(self.response.forbidden(e), 403)
126
+
127
+ return self.response.ok()
128
+
129
+ return endpoint
@@ -1,12 +1,14 @@
1
1
  from dataclasses import dataclass, field
2
2
  from functools import cached_property
3
- from typing import Annotated, Any, Callable, Self, TypeVar
3
+ from typing import Annotated, Any, Callable, Self, Type, TypeVar
4
4
 
5
- from fastapi import APIRouter, Depends, Path
5
+ from fastapi import APIRouter, Depends, HTTPException, Path
6
6
  from fastapi.responses import JSONResponse
7
7
 
8
+ from apexdevkit.error import DoesNotExistError
8
9
  from apexdevkit.fastapi.builder import RestfulServiceBuilder
9
10
  from apexdevkit.fastapi.resource import RestfulResource
11
+ from apexdevkit.fastapi.response import RestfulResponse
10
12
  from apexdevkit.fastapi.schema import RestfulSchema, SchemaFields
11
13
  from apexdevkit.fastapi.service import RawCollection, RawItem, RestfulService
12
14
  from apexdevkit.testing import RestfulName
@@ -51,7 +53,7 @@ class RestfulRouter:
51
53
 
52
54
  @property
53
55
  def resource(self) -> RestfulResource:
54
- return RestfulResource(self.name, self.infra, RestfulName(self.parent))
56
+ return RestfulResource(self.name)
55
57
 
56
58
  @property
57
59
  def id_alias(self) -> str:
@@ -93,14 +95,7 @@ class RestfulRouter:
93
95
  self.router.add_api_route(
94
96
  "",
95
97
  self.resource.create_one(
96
- User=Annotated[
97
- Any,
98
- Depends(extract_user),
99
- ],
100
- ParentId=Annotated[
101
- str,
102
- Path(alias=self.parent_id_alias, default_factory=str),
103
- ],
98
+ Service=self._service(extract_user),
104
99
  Item=Annotated[
105
100
  RawItem,
106
101
  Depends(self.schema.for_create_one()),
@@ -124,14 +119,7 @@ class RestfulRouter:
124
119
  self.router.add_api_route(
125
120
  "/batch",
126
121
  self.resource.create_many(
127
- User=Annotated[
128
- Any,
129
- Depends(extract_user),
130
- ],
131
- ParentId=Annotated[
132
- str,
133
- Path(alias=self.parent_id_alias, default_factory=str),
134
- ],
122
+ Service=self._service(extract_user),
135
123
  Collection=Annotated[
136
124
  RawCollection,
137
125
  Depends(self.schema.for_create_many()),
@@ -155,14 +143,7 @@ class RestfulRouter:
155
143
  self.router.add_api_route(
156
144
  self.item_path,
157
145
  self.resource.read_one(
158
- User=Annotated[
159
- Any,
160
- Depends(extract_user),
161
- ],
162
- ParentId=Annotated[
163
- str,
164
- Path(alias=self.parent_id_alias, default_factory=str),
165
- ],
146
+ Service=self._service(extract_user),
166
147
  ItemId=Annotated[
167
148
  str,
168
149
  Path(alias=self.id_alias),
@@ -186,14 +167,7 @@ class RestfulRouter:
186
167
  self.router.add_api_route(
187
168
  "",
188
169
  self.resource.read_all(
189
- User=Annotated[
190
- Any,
191
- Depends(extract_user),
192
- ],
193
- ParentId=Annotated[
194
- str,
195
- Path(alias=self.parent_id_alias, default_factory=str),
196
- ],
170
+ Service=self._service(extract_user),
197
171
  ),
198
172
  methods=["GET"],
199
173
  status_code=200,
@@ -213,14 +187,7 @@ class RestfulRouter:
213
187
  self.router.add_api_route(
214
188
  self.item_path,
215
189
  self.resource.update_one(
216
- User=Annotated[
217
- Any,
218
- Depends(extract_user),
219
- ],
220
- ParentId=Annotated[
221
- str,
222
- Path(alias=self.parent_id_alias, default_factory=str),
223
- ],
190
+ Service=self._service(extract_user),
224
191
  ItemId=Annotated[
225
192
  str,
226
193
  Path(alias=self.id_alias),
@@ -248,14 +215,7 @@ class RestfulRouter:
248
215
  self.router.add_api_route(
249
216
  "",
250
217
  self.resource.update_many(
251
- User=Annotated[
252
- Any,
253
- Depends(extract_user),
254
- ],
255
- ParentId=Annotated[
256
- str,
257
- Path(alias=self.parent_id_alias, default_factory=str),
258
- ],
218
+ Service=self._service(extract_user),
259
219
  Collection=Annotated[
260
220
  RawCollection,
261
221
  Depends(self.schema.for_update_many()),
@@ -279,14 +239,7 @@ class RestfulRouter:
279
239
  self.router.add_api_route(
280
240
  "",
281
241
  self.resource.replace_one(
282
- User=Annotated[
283
- Any,
284
- Depends(extract_user),
285
- ],
286
- ParentId=Annotated[
287
- str,
288
- Path(alias=self.parent_id_alias, default_factory=str),
289
- ],
242
+ Service=self._service(extract_user),
290
243
  Item=Annotated[
291
244
  RawItem,
292
245
  Depends(self.schema.for_replace_one()),
@@ -310,14 +263,7 @@ class RestfulRouter:
310
263
  self.router.add_api_route(
311
264
  "/batch",
312
265
  self.resource.replace_many(
313
- User=Annotated[
314
- Any,
315
- Depends(extract_user),
316
- ],
317
- ParentId=Annotated[
318
- str,
319
- Path(alias=self.parent_id_alias, default_factory=str),
320
- ],
266
+ Service=self._service(extract_user),
321
267
  Collection=Annotated[
322
268
  RawCollection,
323
269
  Depends(self.schema.for_replace_many()),
@@ -341,14 +287,7 @@ class RestfulRouter:
341
287
  self.router.add_api_route(
342
288
  self.item_path,
343
289
  self.resource.delete_one(
344
- User=Annotated[
345
- Any,
346
- Depends(extract_user),
347
- ],
348
- ParentId=Annotated[
349
- str,
350
- Path(alias=self.parent_id_alias, default_factory=str),
351
- ],
290
+ Service=self._service(extract_user),
352
291
  ItemId=Annotated[
353
292
  str,
354
293
  Path(alias=self.id_alias),
@@ -383,3 +322,32 @@ class RestfulRouter:
383
322
 
384
323
  def build(self) -> APIRouter:
385
324
  return self.router
325
+
326
+ def _service(
327
+ self, extract_user: Callable[..., Any] = no_user
328
+ ) -> Type[RestfulService]:
329
+ User = Annotated[Any, Depends(extract_user)]
330
+ ParentId = Annotated[str, Path(alias=self.parent_id_alias)]
331
+
332
+ def srv_child(user: User, parent_id: ParentId) -> RestfulService:
333
+ try:
334
+ return self.infra.with_user(user).with_parent(parent_id).build()
335
+ except DoesNotExistError as e:
336
+ raise HTTPException(
337
+ status_code=404,
338
+ detail=RestfulResponse(RestfulName(self.parent)).not_found(e),
339
+ )
340
+
341
+ def srv_root(user: User) -> RestfulService:
342
+ try:
343
+ return self.infra.with_user(user).build()
344
+ except DoesNotExistError as e:
345
+ raise HTTPException(
346
+ status_code=404,
347
+ detail=RestfulResponse(RestfulName(self.parent)).not_found(e),
348
+ )
349
+
350
+ if self.parent:
351
+ return Annotated[RestfulService, Depends(srv_child)] # type: ignore
352
+ else:
353
+ return Annotated[RestfulService, Depends(srv_root)] # type: ignore
@@ -1,6 +1,6 @@
1
1
  [tool.poetry]
2
2
  name = "apexdevkit"
3
- version = "1.5.22"
3
+ version = "1.5.24"
4
4
  description = "Apex Development Tools for python."
5
5
  authors = ["Apex Dev <dev@apex.ge>"]
6
6
  readme = "README.md"
@@ -1,26 +0,0 @@
1
- from apexdevkit.fastapi.builder import FastApiBuilder
2
- from apexdevkit.fastapi.dependable import inject
3
- from apexdevkit.fastapi.docs import NoData, Response
4
- from apexdevkit.fastapi.response import (
5
- BadRequest,
6
- ErrorResponse,
7
- ResourceCreated,
8
- ResourceExists,
9
- ResourceFound,
10
- ResourceNotFound,
11
- SuccessResponse,
12
- )
13
-
14
- __all__ = [
15
- "FastApiBuilder",
16
- "inject",
17
- "NoData",
18
- "Response",
19
- "SuccessResponse",
20
- "ResourceCreated",
21
- "ResourceFound",
22
- "ResourceExists",
23
- "ResourceNotFound",
24
- "ErrorResponse",
25
- "BadRequest",
26
- ]
@@ -1,177 +0,0 @@
1
- from dataclasses import dataclass
2
- from functools import cached_property
3
- from typing import Any, Callable
4
-
5
- from starlette.responses import JSONResponse
6
-
7
- from apexdevkit.error import DoesNotExistError, ExistsError, ForbiddenError
8
- from apexdevkit.fastapi.builder import RestfulServiceBuilder
9
- from apexdevkit.fastapi.response import RestfulResponse
10
- from apexdevkit.testing import RestfulName
11
-
12
- _Response = JSONResponse | dict[str, Any]
13
-
14
-
15
- @dataclass
16
- class RestfulResource:
17
- name: RestfulName
18
- infra: RestfulServiceBuilder
19
- parent: RestfulName
20
-
21
- @cached_property
22
- def response(self) -> RestfulResponse:
23
- return RestfulResponse(name=self.name)
24
-
25
- def create_one(self, User, ParentId, Item) -> Callable[..., _Response]: # type: ignore
26
- def endpoint(user: User, parent_id: ParentId, item: Item) -> _Response:
27
- try:
28
- service = self.infra.with_user(user).with_parent(parent_id).build()
29
- except DoesNotExistError as e:
30
- return JSONResponse(RestfulResponse(self.parent).not_found(e), 404)
31
-
32
- try:
33
- item = service.create_one(item)
34
- except ExistsError as e:
35
- return JSONResponse(self.response.exists(e), 409)
36
- except ForbiddenError as e:
37
- return JSONResponse(self.response.forbidden(e), 403)
38
-
39
- return self.response.created_one(item)
40
-
41
- return endpoint
42
-
43
- def create_many(self, User, ParentId, Collection) -> Callable[..., _Response]: # type: ignore
44
- def endpoint(user: User, parent_id: ParentId, items: Collection) -> _Response:
45
- try:
46
- service = self.infra.with_user(user).with_parent(parent_id).build()
47
- except DoesNotExistError as e:
48
- return JSONResponse(RestfulResponse(self.parent).not_found(e), 404)
49
-
50
- try:
51
- return self.response.created_many(service.create_many(items))
52
- except ExistsError as e:
53
- return JSONResponse(self.response.exists(e), 409)
54
- except ForbiddenError as e:
55
- return JSONResponse(self.response.forbidden(e), 403)
56
-
57
- return endpoint
58
-
59
- def read_one(self, User, ParentId, ItemId) -> Callable[..., _Response]: # type: ignore
60
- def endpoint(user: User, parent_id: ParentId, item_id: ItemId) -> _Response:
61
- try:
62
- service = self.infra.with_user(user).with_parent(parent_id).build()
63
- except DoesNotExistError as e:
64
- return JSONResponse(RestfulResponse(self.parent).not_found(e), 404)
65
-
66
- try:
67
- return self.response.found_one(service.read_one(item_id))
68
- except DoesNotExistError as e:
69
- return JSONResponse(self.response.not_found(e), 404)
70
- except ForbiddenError as e:
71
- return JSONResponse(self.response.forbidden(e), 403)
72
-
73
- return endpoint
74
-
75
- def read_all(self, User, ParentId) -> Callable[..., _Response]: # type: ignore
76
- def endpoint(user: User, parent_id: ParentId) -> _Response:
77
- try:
78
- service = self.infra.with_user(user).with_parent(parent_id).build()
79
- except DoesNotExistError as e:
80
- return JSONResponse(RestfulResponse(self.parent).not_found(e), 404)
81
- try:
82
- return self.response.found_many(list(service.read_all()))
83
- except ForbiddenError as e:
84
- return JSONResponse(self.response.forbidden(e), 403)
85
-
86
- return endpoint
87
-
88
- def update_one(self, User, ParentId, ItemId, Updates) -> Callable[..., _Response]: # type: ignore
89
- def endpoint(
90
- user: User,
91
- parent_id: ParentId,
92
- item_id: ItemId,
93
- updates: Updates,
94
- ) -> _Response:
95
- try:
96
- service = self.infra.with_user(user).with_parent(parent_id).build()
97
- except DoesNotExistError as e:
98
- return JSONResponse(RestfulResponse(self.parent).not_found(e), 404)
99
- try:
100
- service.update_one(item_id, **updates)
101
- except DoesNotExistError as e:
102
- return JSONResponse(self.response.not_found(e), 404)
103
- except ForbiddenError as e:
104
- return JSONResponse(self.response.forbidden(e), 403)
105
-
106
- return self.response.ok()
107
-
108
- return endpoint
109
-
110
- def update_many(self, User, ParentId, Collection) -> Callable[..., _Response]: # type: ignore
111
- def endpoint(user: User, parent_id: ParentId, items: Collection) -> _Response:
112
- try:
113
- service = self.infra.with_user(user).with_parent(parent_id).build()
114
- except DoesNotExistError as e:
115
- return JSONResponse(RestfulResponse(self.parent).not_found(e), 404)
116
- try:
117
- service.update_many(items)
118
- except DoesNotExistError as e:
119
- return JSONResponse(self.response.not_found(e), 404)
120
- except ForbiddenError as e:
121
- return JSONResponse(self.response.forbidden(e), 403)
122
-
123
- return self.response.ok()
124
-
125
- return endpoint
126
-
127
- def replace_one(self, User, ParentId, Item) -> Callable[..., _Response]: # type: ignore
128
- def endpoint(user: User, parent_id: ParentId, item: Item) -> _Response:
129
- try:
130
- service = self.infra.with_user(user).with_parent(parent_id).build()
131
- except DoesNotExistError as e:
132
- return JSONResponse(RestfulResponse(self.parent).not_found(e), 404)
133
- try:
134
- service.replace_one(item)
135
- except DoesNotExistError as e:
136
- return JSONResponse(self.response.not_found(e), 404)
137
- except ForbiddenError as e:
138
- return JSONResponse(self.response.forbidden(e), 403)
139
-
140
- return self.response.ok()
141
-
142
- return endpoint
143
-
144
- def replace_many(self, User, ParentId, Collection) -> Callable[..., _Response]: # type: ignore
145
- def endpoint(user: User, parent_id: ParentId, items: Collection) -> _Response:
146
- try:
147
- service = self.infra.with_user(user).with_parent(parent_id).build()
148
- except DoesNotExistError as e:
149
- return JSONResponse(RestfulResponse(self.parent).not_found(e), 404)
150
- try:
151
- service.replace_many(items)
152
- except DoesNotExistError as e:
153
- return JSONResponse(self.response.not_found(e), 404)
154
- except ForbiddenError as e:
155
- return JSONResponse(self.response.forbidden(e), 403)
156
-
157
- return self.response.ok()
158
-
159
- return endpoint
160
-
161
- def delete_one(self, User, ParentId, ItemId) -> Callable[..., _Response]: # type: ignore
162
- def endpoint(user: User, parent_id: ParentId, item_id: ItemId) -> _Response:
163
- try:
164
- service = self.infra.with_user(user).with_parent(parent_id).build()
165
- except DoesNotExistError as e:
166
- return JSONResponse(RestfulResponse(self.parent).not_found(e), 404)
167
-
168
- try:
169
- service.delete_one(item_id)
170
- except DoesNotExistError as e:
171
- return JSONResponse(self.response.not_found(e), 404)
172
- except ForbiddenError as e:
173
- return JSONResponse(self.response.forbidden(e), 403)
174
-
175
- return self.response.ok()
176
-
177
- return endpoint
File without changes
File without changes