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.
- {apexdevkit-1.5.22 → apexdevkit-1.5.24}/PKG-INFO +1 -1
- apexdevkit-1.5.24/apexdevkit/fastapi/__init__.py +10 -0
- apexdevkit-1.5.24/apexdevkit/fastapi/resource.py +129 -0
- {apexdevkit-1.5.22 → apexdevkit-1.5.24}/apexdevkit/fastapi/router.py +43 -75
- {apexdevkit-1.5.22 → apexdevkit-1.5.24}/pyproject.toml +1 -1
- apexdevkit-1.5.22/apexdevkit/fastapi/__init__.py +0 -26
- apexdevkit-1.5.22/apexdevkit/fastapi/resource.py +0 -177
- {apexdevkit-1.5.22 → apexdevkit-1.5.24}/LICENSE +0 -0
- {apexdevkit-1.5.22 → apexdevkit-1.5.24}/README.md +0 -0
- {apexdevkit-1.5.22 → apexdevkit-1.5.24}/apexdevkit/__init__.py +0 -0
- {apexdevkit-1.5.22 → apexdevkit-1.5.24}/apexdevkit/annotation/__init__.py +0 -0
- {apexdevkit-1.5.22 → apexdevkit-1.5.24}/apexdevkit/annotation/deprecate.py +0 -0
- {apexdevkit-1.5.22 → apexdevkit-1.5.24}/apexdevkit/error.py +0 -0
- {apexdevkit-1.5.22 → apexdevkit-1.5.24}/apexdevkit/fastapi/builder.py +0 -0
- {apexdevkit-1.5.22 → apexdevkit-1.5.24}/apexdevkit/fastapi/dependable.py +0 -0
- {apexdevkit-1.5.22 → apexdevkit-1.5.24}/apexdevkit/fastapi/docs.py +0 -0
- {apexdevkit-1.5.22 → apexdevkit-1.5.24}/apexdevkit/fastapi/response.py +0 -0
- {apexdevkit-1.5.22 → apexdevkit-1.5.24}/apexdevkit/fastapi/schema.py +0 -0
- {apexdevkit-1.5.22 → apexdevkit-1.5.24}/apexdevkit/fastapi/service.py +0 -0
- {apexdevkit-1.5.22 → apexdevkit-1.5.24}/apexdevkit/formatter.py +0 -0
- {apexdevkit-1.5.22 → apexdevkit-1.5.24}/apexdevkit/http/__init__.py +0 -0
- {apexdevkit-1.5.22 → apexdevkit-1.5.24}/apexdevkit/http/fake.py +0 -0
- {apexdevkit-1.5.22 → apexdevkit-1.5.24}/apexdevkit/http/fluent.py +0 -0
- {apexdevkit-1.5.22 → apexdevkit-1.5.24}/apexdevkit/http/httpx.py +0 -0
- {apexdevkit-1.5.22 → apexdevkit-1.5.24}/apexdevkit/http/json.py +0 -0
- {apexdevkit-1.5.22 → apexdevkit-1.5.24}/apexdevkit/http/url.py +0 -0
- {apexdevkit-1.5.22 → apexdevkit-1.5.24}/apexdevkit/py.typed +0 -0
- {apexdevkit-1.5.22 → apexdevkit-1.5.24}/apexdevkit/repository/__init__.py +0 -0
- {apexdevkit-1.5.22 → apexdevkit-1.5.24}/apexdevkit/repository/base.py +0 -0
- {apexdevkit-1.5.22 → apexdevkit-1.5.24}/apexdevkit/repository/connector.py +0 -0
- {apexdevkit-1.5.22 → apexdevkit-1.5.24}/apexdevkit/repository/database.py +0 -0
- {apexdevkit-1.5.22 → apexdevkit-1.5.24}/apexdevkit/repository/in_memory.py +0 -0
- {apexdevkit-1.5.22 → apexdevkit-1.5.24}/apexdevkit/repository/interface.py +0 -0
- {apexdevkit-1.5.22 → apexdevkit-1.5.24}/apexdevkit/testing/__init__.py +0 -0
- {apexdevkit-1.5.22 → apexdevkit-1.5.24}/apexdevkit/testing/database.py +0 -0
- {apexdevkit-1.5.22 → apexdevkit-1.5.24}/apexdevkit/testing/fake.py +0 -0
- {apexdevkit-1.5.22 → apexdevkit-1.5.24}/apexdevkit/testing/rest.py +0 -0
|
@@ -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
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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,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
|
|
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
|