starmallow 0.3.8__py3-none-any.whl → 0.4.0__py3-none-any.whl
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.
- starmallow/__init__.py +1 -1
- starmallow/applications.py +22 -0
- starmallow/decorators.py +4 -0
- starmallow/endpoint.py +3 -0
- starmallow/request_resolver.py +3 -3
- starmallow/requests.py +36 -0
- starmallow/routing.py +95 -10
- {starmallow-0.3.8.dist-info → starmallow-0.4.0.dist-info}/METADATA +1 -1
- {starmallow-0.3.8.dist-info → starmallow-0.4.0.dist-info}/RECORD +11 -10
- {starmallow-0.3.8.dist-info → starmallow-0.4.0.dist-info}/WHEEL +0 -0
- {starmallow-0.3.8.dist-info → starmallow-0.4.0.dist-info}/licenses/LICENSE.md +0 -0
starmallow/__init__.py
CHANGED
starmallow/applications.py
CHANGED
@@ -251,6 +251,7 @@ class StarMallow(Starlette):
|
|
251
251
|
name: str = None,
|
252
252
|
include_in_schema: bool = True,
|
253
253
|
status_code: Optional[int] = None,
|
254
|
+
request_class: Type[Request] = Default(Request),
|
254
255
|
response_model: Optional[Type[Any]] = None,
|
255
256
|
response_class: Type[Response] = JSONResponse,
|
256
257
|
# OpenAPI summary
|
@@ -275,6 +276,7 @@ class StarMallow(Starlette):
|
|
275
276
|
name=name,
|
276
277
|
include_in_schema=include_in_schema,
|
277
278
|
status_code=status_code,
|
279
|
+
request_class=request_class,
|
278
280
|
response_model=response_model,
|
279
281
|
response_class=response_class,
|
280
282
|
summary=summary,
|
@@ -296,6 +298,7 @@ class StarMallow(Starlette):
|
|
296
298
|
name: str = None,
|
297
299
|
include_in_schema: bool = True,
|
298
300
|
status_code: Optional[int] = None,
|
301
|
+
request_class: Type[Request] = Default(Request),
|
299
302
|
response_model: Optional[Type[Any]] = None,
|
300
303
|
response_class: Type[Response] = JSONResponse,
|
301
304
|
# OpenAPI summary
|
@@ -319,6 +322,7 @@ class StarMallow(Starlette):
|
|
319
322
|
name=name,
|
320
323
|
include_in_schema=include_in_schema,
|
321
324
|
status_code=status_code,
|
325
|
+
request_class=request_class,
|
322
326
|
response_model=response_model,
|
323
327
|
response_class=response_class,
|
324
328
|
summary=summary,
|
@@ -356,6 +360,7 @@ class StarMallow(Starlette):
|
|
356
360
|
callbacks: Optional[List[BaseRoute]] = None,
|
357
361
|
deprecated: Optional[bool] = None,
|
358
362
|
include_in_schema: bool = True,
|
363
|
+
default_request_class: Type[Request] = Default(Request),
|
359
364
|
default_response_class: Type[Response] = Default(JSONResponse),
|
360
365
|
generate_unique_id_function: Callable[[APIRoute], str] = Default(
|
361
366
|
generate_unique_id,
|
@@ -369,6 +374,7 @@ class StarMallow(Starlette):
|
|
369
374
|
callbacks=callbacks,
|
370
375
|
deprecated=deprecated,
|
371
376
|
include_in_schema=include_in_schema,
|
377
|
+
default_request_class=default_request_class,
|
372
378
|
default_response_class=default_response_class,
|
373
379
|
generate_unique_id_function=generate_unique_id_function,
|
374
380
|
)
|
@@ -380,6 +386,7 @@ class StarMallow(Starlette):
|
|
380
386
|
name: str = None,
|
381
387
|
include_in_schema: bool = True,
|
382
388
|
status_code: Optional[int] = None,
|
389
|
+
request_class: Type[Request] = Default(Request),
|
383
390
|
response_model: Optional[Type[Any]] = None,
|
384
391
|
response_class: Type[Response] = JSONResponse,
|
385
392
|
# OpenAPI summary
|
@@ -402,6 +409,7 @@ class StarMallow(Starlette):
|
|
402
409
|
name=name,
|
403
410
|
include_in_schema=include_in_schema,
|
404
411
|
status_code=status_code,
|
412
|
+
request_class=request_class,
|
405
413
|
response_model=response_model,
|
406
414
|
response_class=response_class,
|
407
415
|
summary=summary,
|
@@ -422,6 +430,7 @@ class StarMallow(Starlette):
|
|
422
430
|
name: str = None,
|
423
431
|
include_in_schema: bool = True,
|
424
432
|
status_code: Optional[int] = None,
|
433
|
+
request_class: Type[Request] = Default(Request),
|
425
434
|
response_model: Optional[Type[Any]] = None,
|
426
435
|
response_class: Type[Response] = JSONResponse,
|
427
436
|
# OpenAPI summary
|
@@ -444,6 +453,7 @@ class StarMallow(Starlette):
|
|
444
453
|
name=name,
|
445
454
|
include_in_schema=include_in_schema,
|
446
455
|
status_code=status_code,
|
456
|
+
request_class=request_class,
|
447
457
|
response_model=response_model,
|
448
458
|
response_class=response_class,
|
449
459
|
summary=summary,
|
@@ -464,6 +474,7 @@ class StarMallow(Starlette):
|
|
464
474
|
name: str = None,
|
465
475
|
include_in_schema: bool = True,
|
466
476
|
status_code: Optional[int] = None,
|
477
|
+
request_class: Type[Request] = Default(Request),
|
467
478
|
response_model: Optional[Type[Any]] = None,
|
468
479
|
response_class: Type[Response] = JSONResponse,
|
469
480
|
# OpenAPI summary
|
@@ -486,6 +497,7 @@ class StarMallow(Starlette):
|
|
486
497
|
name=name,
|
487
498
|
include_in_schema=include_in_schema,
|
488
499
|
status_code=status_code,
|
500
|
+
request_class=request_class,
|
489
501
|
response_model=response_model,
|
490
502
|
response_class=response_class,
|
491
503
|
summary=summary,
|
@@ -506,6 +518,7 @@ class StarMallow(Starlette):
|
|
506
518
|
name: str = None,
|
507
519
|
include_in_schema: bool = True,
|
508
520
|
status_code: Optional[int] = None,
|
521
|
+
request_class: Type[Request] = Default(Request),
|
509
522
|
response_model: Optional[Type[Any]] = None,
|
510
523
|
response_class: Type[Response] = JSONResponse,
|
511
524
|
# OpenAPI summary
|
@@ -528,6 +541,7 @@ class StarMallow(Starlette):
|
|
528
541
|
name=name,
|
529
542
|
include_in_schema=include_in_schema,
|
530
543
|
status_code=status_code,
|
544
|
+
request_class=request_class,
|
531
545
|
response_model=response_model,
|
532
546
|
response_class=response_class,
|
533
547
|
summary=summary,
|
@@ -548,6 +562,7 @@ class StarMallow(Starlette):
|
|
548
562
|
name: str = None,
|
549
563
|
include_in_schema: bool = True,
|
550
564
|
status_code: Optional[int] = None,
|
565
|
+
request_class: Type[Request] = Default(Request),
|
551
566
|
response_model: Optional[Type[Any]] = None,
|
552
567
|
response_class: Type[Response] = JSONResponse,
|
553
568
|
# OpenAPI summary
|
@@ -570,6 +585,7 @@ class StarMallow(Starlette):
|
|
570
585
|
name=name,
|
571
586
|
include_in_schema=include_in_schema,
|
572
587
|
status_code=status_code,
|
588
|
+
request_class=request_class,
|
573
589
|
response_model=response_model,
|
574
590
|
response_class=response_class,
|
575
591
|
summary=summary,
|
@@ -590,6 +606,7 @@ class StarMallow(Starlette):
|
|
590
606
|
name: str = None,
|
591
607
|
include_in_schema: bool = True,
|
592
608
|
status_code: Optional[int] = None,
|
609
|
+
request_class: Type[Request] = Default(Request),
|
593
610
|
response_model: Optional[Type[Any]] = None,
|
594
611
|
response_class: Type[Response] = JSONResponse,
|
595
612
|
# OpenAPI summary
|
@@ -612,6 +629,7 @@ class StarMallow(Starlette):
|
|
612
629
|
name=name,
|
613
630
|
include_in_schema=include_in_schema,
|
614
631
|
status_code=status_code,
|
632
|
+
request_class=request_class,
|
615
633
|
response_model=response_model,
|
616
634
|
response_class=response_class,
|
617
635
|
summary=summary,
|
@@ -632,6 +650,7 @@ class StarMallow(Starlette):
|
|
632
650
|
name: str = None,
|
633
651
|
include_in_schema: bool = True,
|
634
652
|
status_code: Optional[int] = None,
|
653
|
+
request_class: Type[Request] = Default(Request),
|
635
654
|
response_model: Optional[Type[Any]] = None,
|
636
655
|
response_class: Type[Response] = JSONResponse,
|
637
656
|
# OpenAPI summary
|
@@ -654,6 +673,7 @@ class StarMallow(Starlette):
|
|
654
673
|
name=name,
|
655
674
|
include_in_schema=include_in_schema,
|
656
675
|
status_code=status_code,
|
676
|
+
request_class=request_class,
|
657
677
|
response_model=response_model,
|
658
678
|
response_class=response_class,
|
659
679
|
summary=summary,
|
@@ -674,6 +694,7 @@ class StarMallow(Starlette):
|
|
674
694
|
name: str = None,
|
675
695
|
include_in_schema: bool = True,
|
676
696
|
status_code: Optional[int] = None,
|
697
|
+
request_class: Type[Request] = Default(Request),
|
677
698
|
response_model: Optional[Type[Any]] = None,
|
678
699
|
response_class: Type[Response] = JSONResponse,
|
679
700
|
# OpenAPI summary
|
@@ -696,6 +717,7 @@ class StarMallow(Starlette):
|
|
696
717
|
name=name,
|
697
718
|
include_in_schema=include_in_schema,
|
698
719
|
status_code=status_code,
|
720
|
+
request_class=request_class,
|
699
721
|
response_model=response_model,
|
700
722
|
response_class=response_class,
|
701
723
|
summary=summary,
|
starmallow/decorators.py
CHANGED
@@ -2,6 +2,7 @@ from dataclasses import dataclass, field
|
|
2
2
|
from enum import Enum
|
3
3
|
from typing import TYPE_CHECKING, Any, Callable, Dict, List, Optional, Type, Union
|
4
4
|
|
5
|
+
from starlette.requests import Request
|
5
6
|
from starlette.responses import Response
|
6
7
|
from starlette.routing import BaseRoute
|
7
8
|
|
@@ -20,6 +21,7 @@ class EndpointOptions:
|
|
20
21
|
include_in_schema: bool = True
|
21
22
|
status_code: Optional[int] = None
|
22
23
|
deprecated: Optional[bool] = None
|
24
|
+
request_class: Type[Request] = Request
|
23
25
|
response_model: Optional[Type[Any]] = None
|
24
26
|
response_class: Type[Response] = JSONResponse
|
25
27
|
# OpenAPI summary
|
@@ -46,6 +48,7 @@ def route(
|
|
46
48
|
include_in_schema: bool = True,
|
47
49
|
status_code: Optional[int] = None,
|
48
50
|
deprecated: Optional[bool] = None,
|
51
|
+
request_class: Type[Request] = Default(Request),
|
49
52
|
response_model: Optional[Type[Any]] = None,
|
50
53
|
response_class: Type[Response] = JSONResponse,
|
51
54
|
# OpenAPI summary
|
@@ -73,6 +76,7 @@ def route(
|
|
73
76
|
include_in_schema=include_in_schema,
|
74
77
|
status_code=status_code,
|
75
78
|
deprecated=deprecated,
|
79
|
+
request_class=request_class,
|
76
80
|
response_model=response_model,
|
77
81
|
response_class=response_class,
|
78
82
|
summary=summary,
|
starmallow/endpoint.py
CHANGED
@@ -245,6 +245,9 @@ class EndpointMixin:
|
|
245
245
|
elif is_marshmallow_schema(model):
|
246
246
|
return SchemaModel(model() if inspect.isclass(model) else model, **kwargs)
|
247
247
|
elif is_marshmallow_field(model):
|
248
|
+
if inspect.isclass(model):
|
249
|
+
model = model()
|
250
|
+
|
248
251
|
if model.load_default is not None and model.load_default != kwargs.get('load_default', ma.missing):
|
249
252
|
logger.warning(
|
250
253
|
f"'{parameter_name}' model and annotation have different 'load_default' values."
|
starmallow/request_resolver.py
CHANGED
@@ -269,7 +269,7 @@ async def resolve_params(
|
|
269
269
|
dependency_cache=dependency_cache,
|
270
270
|
)
|
271
271
|
if errors:
|
272
|
-
return None, errors, background_tasks
|
272
|
+
return None, errors, background_tasks, response
|
273
273
|
|
274
274
|
arg_values, errors = await resolve_basic_args(
|
275
275
|
request,
|
@@ -278,7 +278,7 @@ async def resolve_params(
|
|
278
278
|
params,
|
279
279
|
)
|
280
280
|
if errors:
|
281
|
-
return None, errors, background_tasks
|
281
|
+
return None, errors, background_tasks, response
|
282
282
|
|
283
283
|
resolved_values, errors = await resolve_subparams(
|
284
284
|
request,
|
@@ -288,7 +288,7 @@ async def resolve_params(
|
|
288
288
|
dependency_cache=dependency_cache,
|
289
289
|
)
|
290
290
|
if errors:
|
291
|
-
return None, errors, background_tasks
|
291
|
+
return None, errors, background_tasks, response
|
292
292
|
|
293
293
|
return {
|
294
294
|
**security_values,
|
starmallow/requests.py
ADDED
@@ -0,0 +1,36 @@
|
|
1
|
+
from typing import Any
|
2
|
+
|
3
|
+
from starlette.requests import Request
|
4
|
+
|
5
|
+
try:
|
6
|
+
import ujson
|
7
|
+
except ImportError: # pragma: nocover
|
8
|
+
ujson = None # type: ignore
|
9
|
+
|
10
|
+
|
11
|
+
try:
|
12
|
+
import orjson
|
13
|
+
except ImportError: # pragma: nocover
|
14
|
+
orjson = None # type: ignore
|
15
|
+
|
16
|
+
|
17
|
+
class UJSONRequest(Request):
|
18
|
+
|
19
|
+
async def json(self) -> Any:
|
20
|
+
assert ujson is not None, "ujson must be installed to use UJSONRequest"
|
21
|
+
|
22
|
+
if not hasattr(self, "_json"):
|
23
|
+
body = await self.body()
|
24
|
+
self._json = ujson.loads(body)
|
25
|
+
return self._json
|
26
|
+
|
27
|
+
|
28
|
+
class ORJSONRequest(Request):
|
29
|
+
|
30
|
+
async def json(self) -> Any:
|
31
|
+
assert orjson is not None, "orjson must be installed to use ORJSONRequest"
|
32
|
+
|
33
|
+
if not hasattr(self, "_json"):
|
34
|
+
body = await self.body()
|
35
|
+
self._json = orjson.loads(body)
|
36
|
+
return self._json
|
starmallow/routing.py
CHANGED
@@ -3,14 +3,32 @@ import functools
|
|
3
3
|
import inspect
|
4
4
|
import logging
|
5
5
|
from enum import Enum, IntEnum
|
6
|
-
from typing import
|
6
|
+
from typing import (
|
7
|
+
Any,
|
8
|
+
Awaitable,
|
9
|
+
Callable,
|
10
|
+
Coroutine,
|
11
|
+
Dict,
|
12
|
+
List,
|
13
|
+
Optional,
|
14
|
+
Set,
|
15
|
+
Tuple,
|
16
|
+
Type,
|
17
|
+
Union,
|
18
|
+
)
|
7
19
|
|
8
20
|
import marshmallow as ma
|
9
21
|
from starlette import routing
|
10
22
|
from starlette.concurrency import run_in_threadpool
|
11
23
|
from starlette.requests import Request
|
12
24
|
from starlette.responses import Response
|
13
|
-
from starlette.routing import
|
25
|
+
from starlette.routing import (
|
26
|
+
BaseRoute,
|
27
|
+
Match,
|
28
|
+
compile_path,
|
29
|
+
is_async_callable,
|
30
|
+
wrap_app_handling_exceptions,
|
31
|
+
)
|
14
32
|
from starlette.status import WS_1008_POLICY_VIOLATION
|
15
33
|
from starlette.types import ASGIApp, Receive, Scope, Send
|
16
34
|
from starlette.websockets import WebSocket
|
@@ -57,6 +75,30 @@ async def run_endpoint_function(
|
|
57
75
|
return await run_in_threadpool(endpoint_model.call, **kwargs)
|
58
76
|
|
59
77
|
|
78
|
+
def request_response(
|
79
|
+
func: Callable[[Request], Union[Awaitable[Response], Response]],
|
80
|
+
request_class: Type[Request],
|
81
|
+
) -> ASGIApp:
|
82
|
+
"""
|
83
|
+
Takes a function or coroutine `func(request) -> response`,
|
84
|
+
and returns an ASGI application.
|
85
|
+
"""
|
86
|
+
|
87
|
+
async def app(scope: Scope, receive: Receive, send: Send) -> None:
|
88
|
+
request = request_class(scope, receive, send)
|
89
|
+
|
90
|
+
async def app(scope: Scope, receive: Receive, send: Send) -> None:
|
91
|
+
if is_async_callable(func):
|
92
|
+
response = await func(request)
|
93
|
+
else:
|
94
|
+
response = await run_in_threadpool(func, request)
|
95
|
+
await response(scope, receive, send)
|
96
|
+
|
97
|
+
await wrap_app_handling_exceptions(app, request)(scope, receive, send)
|
98
|
+
|
99
|
+
return app
|
100
|
+
|
101
|
+
|
60
102
|
def websocket_session(func: Callable) -> ASGIApp:
|
61
103
|
"""
|
62
104
|
Takes a coroutine `func(session)`, and returns an ASGI application.
|
@@ -173,6 +215,9 @@ class APIRoute(routing.Route, EndpointMixin):
|
|
173
215
|
include_in_schema: bool = True,
|
174
216
|
status_code: Optional[int] = None,
|
175
217
|
deprecated: Optional[bool] = None,
|
218
|
+
request_class: Union[Type[Request], DefaultPlaceholder] = Default(
|
219
|
+
Request,
|
220
|
+
),
|
176
221
|
response_model: Optional[ma.Schema] = None,
|
177
222
|
response_class: Union[Type[Response], DefaultPlaceholder] = Default(
|
178
223
|
JSONResponse,
|
@@ -205,7 +250,7 @@ class APIRoute(routing.Route, EndpointMixin):
|
|
205
250
|
endpoint_handler = endpoint_handler.func
|
206
251
|
if inspect.isfunction(endpoint_handler) or inspect.ismethod(endpoint_handler):
|
207
252
|
# Endpoint is function or method. Treat it as `func(request) -> response`.
|
208
|
-
self.app = request_response(endpoint)
|
253
|
+
self.app = request_response(endpoint, request_class)
|
209
254
|
if methods is None:
|
210
255
|
methods = ["GET"]
|
211
256
|
else:
|
@@ -226,7 +271,6 @@ class APIRoute(routing.Route, EndpointMixin):
|
|
226
271
|
self.status_code = status_code
|
227
272
|
self.deprecated = deprecated
|
228
273
|
self.response_model = response_model
|
229
|
-
self.response_class = response_class
|
230
274
|
self.summary = summary
|
231
275
|
self.operation_id = operation_id
|
232
276
|
self.callbacks = callbacks
|
@@ -234,6 +278,16 @@ class APIRoute(routing.Route, EndpointMixin):
|
|
234
278
|
self.responses = responses or {}
|
235
279
|
self.openapi_extra = openapi_extra
|
236
280
|
|
281
|
+
if isinstance(request_class, DefaultPlaceholder):
|
282
|
+
self.request_class: Request = request_class.value
|
283
|
+
else:
|
284
|
+
self.request_class = request_class
|
285
|
+
|
286
|
+
if isinstance(response_class, DefaultPlaceholder):
|
287
|
+
self.response_class: Response = response_class.value
|
288
|
+
else:
|
289
|
+
self.response_class = response_class
|
290
|
+
|
237
291
|
self.generate_unique_id_function = generate_unique_id_function
|
238
292
|
if isinstance(generate_unique_id_function, DefaultPlaceholder):
|
239
293
|
current_generate_unique_id: Callable[
|
@@ -279,16 +333,16 @@ class APIRoute(routing.Route, EndpointMixin):
|
|
279
333
|
|
280
334
|
self.endpoint_model = self.get_endpoint_model(
|
281
335
|
self.path_format,
|
282
|
-
endpoint,
|
283
|
-
name=name,
|
336
|
+
self.endpoint,
|
337
|
+
name=self.name,
|
284
338
|
methods=self.methods,
|
285
|
-
status_code=status_code,
|
286
|
-
response_model=response_model,
|
287
|
-
response_class=response_class,
|
339
|
+
status_code=self.status_code,
|
340
|
+
response_model=self.response_model,
|
341
|
+
response_class=self.response_class,
|
288
342
|
route=self,
|
289
343
|
)
|
290
344
|
|
291
|
-
self.app = request_response(get_request_handler(self.endpoint_model))
|
345
|
+
self.app = request_response(get_request_handler(self.endpoint_model), self.request_class)
|
292
346
|
|
293
347
|
|
294
348
|
class APIRouter(routing.Router):
|
@@ -297,6 +351,7 @@ class APIRouter(routing.Router):
|
|
297
351
|
self,
|
298
352
|
*args,
|
299
353
|
tags: Optional[List[Union[str, Enum]]] = None,
|
354
|
+
default_request_class: Type[Request] = Default(Request),
|
300
355
|
default_response_class: Type[Response] = Default(JSONResponse),
|
301
356
|
deprecated: Optional[bool] = None,
|
302
357
|
include_in_schema: bool = True,
|
@@ -311,6 +366,7 @@ class APIRouter(routing.Router):
|
|
311
366
|
super().__init__(*args, **kwargs)
|
312
367
|
|
313
368
|
self.tags: List[Union[str, Enum]] = tags or []
|
369
|
+
self.default_request_class = default_request_class
|
314
370
|
self.default_response_class = default_response_class
|
315
371
|
self.deprecated = deprecated
|
316
372
|
self.include_in_schema = include_in_schema
|
@@ -348,6 +404,7 @@ class APIRouter(routing.Router):
|
|
348
404
|
include_in_schema: bool = True,
|
349
405
|
status_code: Optional[int] = None,
|
350
406
|
deprecated: Optional[bool] = None,
|
407
|
+
request_class: Type[Request] = Default(Request),
|
351
408
|
response_model: Optional[Type[Any]] = None,
|
352
409
|
response_class: Type[Response] = JSONResponse,
|
353
410
|
# OpenAPI summary
|
@@ -394,6 +451,7 @@ class APIRouter(routing.Router):
|
|
394
451
|
include_in_schema=endpoint_options.include_in_schema and include_in_schema and self.include_in_schema,
|
395
452
|
status_code=endpoint_options.status_code or status_code,
|
396
453
|
deprecated=endpoint_options.deprecated or deprecated or self.deprecated,
|
454
|
+
request_class=endpoint_options.request_class or request_class,
|
397
455
|
response_model=endpoint_options.response_model or response_model,
|
398
456
|
response_class=endpoint_options.response_class or response_class,
|
399
457
|
summary=endpoint_options.summary or summary,
|
@@ -418,6 +476,7 @@ class APIRouter(routing.Router):
|
|
418
476
|
include_in_schema=include_in_schema and self.include_in_schema,
|
419
477
|
status_code=status_code,
|
420
478
|
deprecated=deprecated or self.deprecated,
|
479
|
+
request_class=request_class,
|
421
480
|
response_model=response_model,
|
422
481
|
response_class=response_class,
|
423
482
|
summary=summary,
|
@@ -442,6 +501,7 @@ class APIRouter(routing.Router):
|
|
442
501
|
include_in_schema: bool = True,
|
443
502
|
status_code: Optional[int] = None,
|
444
503
|
deprecated: Optional[bool] = None,
|
504
|
+
request_class: Type[Request] = Default(Request),
|
445
505
|
response_model: Optional[Type[Any]] = None,
|
446
506
|
response_class: Type[Response] = JSONResponse,
|
447
507
|
# OpenAPI summary
|
@@ -468,6 +528,7 @@ class APIRouter(routing.Router):
|
|
468
528
|
include_in_schema=include_in_schema,
|
469
529
|
status_code=status_code,
|
470
530
|
deprecated=deprecated,
|
531
|
+
request_class=request_class,
|
471
532
|
response_model=response_model,
|
472
533
|
response_class=response_class,
|
473
534
|
summary=summary,
|
@@ -517,6 +578,7 @@ class APIRouter(routing.Router):
|
|
517
578
|
*,
|
518
579
|
prefix: str = "",
|
519
580
|
tags: Optional[List[Union[str, Enum]]] = None,
|
581
|
+
default_request_class: Type[Request] = Default(Request),
|
520
582
|
default_response_class: Type[Response] = Default(JSONResponse),
|
521
583
|
responses: Optional[Dict[Union[int, str], Dict[str, Any]]] = None,
|
522
584
|
callbacks: Optional[List[BaseRoute]] = None,
|
@@ -543,6 +605,12 @@ class APIRouter(routing.Router):
|
|
543
605
|
for route in router.routes:
|
544
606
|
if isinstance(route, APIRoute):
|
545
607
|
combined_responses = {**responses, **route.responses}
|
608
|
+
use_request_class = get_value_or_default(
|
609
|
+
route.request_class,
|
610
|
+
router.default_request_class,
|
611
|
+
default_request_class,
|
612
|
+
self.default_request_class,
|
613
|
+
)
|
546
614
|
use_response_class = get_value_or_default(
|
547
615
|
route.response_class,
|
548
616
|
router.default_response_class,
|
@@ -584,6 +652,7 @@ class APIRouter(routing.Router):
|
|
584
652
|
and self.include_in_schema
|
585
653
|
and include_in_schema
|
586
654
|
),
|
655
|
+
request_class=use_request_class,
|
587
656
|
response_class=use_response_class,
|
588
657
|
name=route.name,
|
589
658
|
openapi_extra=route.openapi_extra,
|
@@ -620,6 +689,7 @@ class APIRouter(routing.Router):
|
|
620
689
|
include_in_schema: bool = True,
|
621
690
|
status_code: Optional[int] = None,
|
622
691
|
deprecated: Optional[bool] = None,
|
692
|
+
request_class: Type[Request] = Default(Request),
|
623
693
|
response_model: Optional[Type[Any]] = None,
|
624
694
|
response_class: Type[Response] = JSONResponse,
|
625
695
|
# OpenAPI summary
|
@@ -644,6 +714,7 @@ class APIRouter(routing.Router):
|
|
644
714
|
include_in_schema=include_in_schema,
|
645
715
|
status_code=status_code,
|
646
716
|
deprecated=deprecated,
|
717
|
+
request_class=request_class,
|
647
718
|
response_model=response_model,
|
648
719
|
response_class=response_class,
|
649
720
|
summary=summary,
|
@@ -665,6 +736,7 @@ class APIRouter(routing.Router):
|
|
665
736
|
include_in_schema: bool = True,
|
666
737
|
status_code: Optional[int] = None,
|
667
738
|
deprecated: Optional[bool] = None,
|
739
|
+
request_class: Type[Request] = Default(Request),
|
668
740
|
response_model: Optional[Type[Any]] = None,
|
669
741
|
response_class: Type[Response] = JSONResponse,
|
670
742
|
# OpenAPI summary
|
@@ -689,6 +761,7 @@ class APIRouter(routing.Router):
|
|
689
761
|
include_in_schema=include_in_schema,
|
690
762
|
status_code=status_code,
|
691
763
|
deprecated=deprecated,
|
764
|
+
request_class=request_class,
|
692
765
|
response_model=response_model,
|
693
766
|
response_class=response_class,
|
694
767
|
summary=summary,
|
@@ -710,6 +783,7 @@ class APIRouter(routing.Router):
|
|
710
783
|
include_in_schema: bool = True,
|
711
784
|
status_code: Optional[int] = None,
|
712
785
|
deprecated: Optional[bool] = None,
|
786
|
+
request_class: Type[Request] = Default(Request),
|
713
787
|
response_model: Optional[Type[Any]] = None,
|
714
788
|
response_class: Type[Response] = JSONResponse,
|
715
789
|
# OpenAPI summary
|
@@ -734,6 +808,7 @@ class APIRouter(routing.Router):
|
|
734
808
|
include_in_schema=include_in_schema,
|
735
809
|
status_code=status_code,
|
736
810
|
deprecated=deprecated,
|
811
|
+
request_class=request_class,
|
737
812
|
response_model=response_model,
|
738
813
|
response_class=response_class,
|
739
814
|
summary=summary,
|
@@ -755,6 +830,7 @@ class APIRouter(routing.Router):
|
|
755
830
|
include_in_schema: bool = True,
|
756
831
|
status_code: Optional[int] = None,
|
757
832
|
deprecated: Optional[bool] = None,
|
833
|
+
request_class: Type[Request] = Default(Request),
|
758
834
|
response_model: Optional[Type[Any]] = None,
|
759
835
|
response_class: Type[Response] = JSONResponse,
|
760
836
|
# OpenAPI summary
|
@@ -779,6 +855,7 @@ class APIRouter(routing.Router):
|
|
779
855
|
include_in_schema=include_in_schema,
|
780
856
|
status_code=status_code,
|
781
857
|
deprecated=deprecated,
|
858
|
+
request_class=request_class,
|
782
859
|
response_model=response_model,
|
783
860
|
response_class=response_class,
|
784
861
|
summary=summary,
|
@@ -800,6 +877,7 @@ class APIRouter(routing.Router):
|
|
800
877
|
include_in_schema: bool = True,
|
801
878
|
status_code: Optional[int] = None,
|
802
879
|
deprecated: Optional[bool] = None,
|
880
|
+
request_class: Type[Request] = Default(Request),
|
803
881
|
response_model: Optional[Type[Any]] = None,
|
804
882
|
response_class: Type[Response] = JSONResponse,
|
805
883
|
# OpenAPI summary
|
@@ -824,6 +902,7 @@ class APIRouter(routing.Router):
|
|
824
902
|
include_in_schema=include_in_schema,
|
825
903
|
status_code=status_code,
|
826
904
|
deprecated=deprecated,
|
905
|
+
request_class=request_class,
|
827
906
|
response_model=response_model,
|
828
907
|
response_class=response_class,
|
829
908
|
summary=summary,
|
@@ -845,6 +924,7 @@ class APIRouter(routing.Router):
|
|
845
924
|
include_in_schema: bool = True,
|
846
925
|
status_code: Optional[int] = None,
|
847
926
|
deprecated: Optional[bool] = None,
|
927
|
+
request_class: Type[Request] = Default(Request),
|
848
928
|
response_model: Optional[Type[Any]] = None,
|
849
929
|
response_class: Type[Response] = JSONResponse,
|
850
930
|
# OpenAPI summary
|
@@ -869,6 +949,7 @@ class APIRouter(routing.Router):
|
|
869
949
|
include_in_schema=include_in_schema,
|
870
950
|
status_code=status_code,
|
871
951
|
deprecated=deprecated,
|
952
|
+
request_class=request_class,
|
872
953
|
response_model=response_model,
|
873
954
|
response_class=response_class,
|
874
955
|
summary=summary,
|
@@ -890,6 +971,7 @@ class APIRouter(routing.Router):
|
|
890
971
|
include_in_schema: bool = True,
|
891
972
|
status_code: Optional[int] = None,
|
892
973
|
deprecated: Optional[bool] = None,
|
974
|
+
request_class: Type[Request] = Default(Request),
|
893
975
|
response_model: Optional[Type[Any]] = None,
|
894
976
|
response_class: Type[Response] = JSONResponse,
|
895
977
|
# OpenAPI summary
|
@@ -914,6 +996,7 @@ class APIRouter(routing.Router):
|
|
914
996
|
include_in_schema=include_in_schema,
|
915
997
|
status_code=status_code,
|
916
998
|
deprecated=deprecated,
|
999
|
+
request_class=request_class,
|
917
1000
|
response_model=response_model,
|
918
1001
|
response_class=response_class,
|
919
1002
|
summary=summary,
|
@@ -935,6 +1018,7 @@ class APIRouter(routing.Router):
|
|
935
1018
|
include_in_schema: bool = True,
|
936
1019
|
status_code: Optional[int] = None,
|
937
1020
|
deprecated: Optional[bool] = None,
|
1021
|
+
request_class: Type[Request] = Default(Request),
|
938
1022
|
response_model: Optional[Type[Any]] = None,
|
939
1023
|
response_class: Type[Response] = JSONResponse,
|
940
1024
|
# OpenAPI summary
|
@@ -959,6 +1043,7 @@ class APIRouter(routing.Router):
|
|
959
1043
|
include_in_schema=include_in_schema,
|
960
1044
|
status_code=status_code,
|
961
1045
|
deprecated=deprecated,
|
1046
|
+
request_class=request_class,
|
962
1047
|
response_model=response_model,
|
963
1048
|
response_class=response_class,
|
964
1049
|
summary=summary,
|
@@ -1,21 +1,22 @@
|
|
1
|
-
starmallow/__init__.py,sha256=
|
2
|
-
starmallow/applications.py,sha256=
|
1
|
+
starmallow/__init__.py,sha256=fE4KZucjP-MqtKdZJkyPl8VpJdp0A1h_jNbSkHuJF8c,322
|
2
|
+
starmallow/applications.py,sha256=7tRWNi-Vqsurb-bvQUuSeTVX0_9HIqSFzRdMwQUb7Sk,30810
|
3
3
|
starmallow/concurrency.py,sha256=MVRjo4Vqss_yqhaoeVt3xb7rLaSuAq_q9uYgTwbsojE,1375
|
4
4
|
starmallow/constants.py,sha256=u0h8cJKhJY0oIZqzr7wpEZG2bPLrw5FroMnn3d8KBNQ,129
|
5
5
|
starmallow/dataclasses.py,sha256=ap9DInvQjH2AyI4MAAnbDEuNnbPb94PigaNmEb7AQU8,2658
|
6
6
|
starmallow/datastructures.py,sha256=iH_KJuJ6kBCWEsnHFLdA3iyb6ZxhfdMHYrJlhiEZtDU,839
|
7
|
-
starmallow/decorators.py,sha256=
|
7
|
+
starmallow/decorators.py,sha256=7635d-JxCbEIqlAloekenGO2ucBSD16Q7zc4v6IQGPU,3773
|
8
8
|
starmallow/delimited_field.py,sha256=gonWgYg6G5xH2yXAyfDgkePmQ8dUaRSp2hdJ3mCfOBw,3466
|
9
9
|
starmallow/docs.py,sha256=eA39LunVMEoPU5ge4qxm2eiJbrFTUSUu5EhG1L_LKxk,6268
|
10
|
-
starmallow/endpoint.py,sha256=
|
10
|
+
starmallow/endpoint.py,sha256=YdEtRKF1Z-p_KXoqJJNP_9nEwOzvgxYoMI3Rly7ECrM,15888
|
11
11
|
starmallow/endpoints.py,sha256=UrwVZCxbmWI20iNtJ0oXxo4d3-y12TjsOGs_jnStTiU,939
|
12
12
|
starmallow/exception_handlers.py,sha256=gr2qLYWEtsIEH28n7OreEiiLVz6Y7b6osRyS9esJbBk,891
|
13
13
|
starmallow/exceptions.py,sha256=vabtPJkTmtCdC8_2OPBE8Osz0v0KxaSOX6IWf1jgNkc,872
|
14
14
|
starmallow/fields.py,sha256=arrTabCYoJFZcoY69EZTBH3YUg7CUSr3-zYLiAjYLTM,1238
|
15
15
|
starmallow/params.py,sha256=-f6ut1p_w_I8lyEgRciJxUtHmoVXKAD2Ug4KuRjPlJA,8661
|
16
|
-
starmallow/request_resolver.py,sha256=
|
16
|
+
starmallow/request_resolver.py,sha256=kT7B0BWSqBP_9Jl865Ya_Op9I3W4FyfBxXjvtucWT_0,10785
|
17
|
+
starmallow/requests.py,sha256=o_yNhH9WJ35uAGuoXa5_gihevHeaveOvkP525dbwQSU,843
|
17
18
|
starmallow/responses.py,sha256=k2pf_m21ykf_FECdODUz400pMucMJJf_Zm8TXFujvaU,2012
|
18
|
-
starmallow/routing.py,sha256=
|
19
|
+
starmallow/routing.py,sha256=8oXJb-3EixI3iYEY2q0r31x8NZnB56RKKIEfhtjjTpQ,42157
|
19
20
|
starmallow/schema_generator.py,sha256=BKtXVQoNFWoAIEtiRNylWls_7nyFIshy3_myooogjoI,17806
|
20
21
|
starmallow/serializers.py,sha256=rBEKMNgONgz_bai12uDvAEMCI_aEFGsqMSeIoWtlrOI,12514
|
21
22
|
starmallow/types.py,sha256=8GXWjvzXQhF5NMHf14fbid6uErxVd1Xk_w2I4FoUgZ4,717
|
@@ -33,7 +34,7 @@ starmallow/security/http.py,sha256=cpGjM1kFDq3i_bOY96kMkf4cspBUxFkkET9lTK3NA-0,6
|
|
33
34
|
starmallow/security/oauth2.py,sha256=1nv1580PY4cwgu5gzpQCf2MfMNv2Cfv05753AUHPOhQ,10005
|
34
35
|
starmallow/security/open_id_connect_url.py,sha256=IPsL2YzWc2mPwJbrUn6oFRTi7uRAG6mR62CGwmzBs1k,1399
|
35
36
|
starmallow/security/utils.py,sha256=bd8T0YM7UQD5ATKucr1bNtAvz_Y3__dVNAv5UebiPvc,293
|
36
|
-
starmallow-0.
|
37
|
-
starmallow-0.
|
38
|
-
starmallow-0.
|
39
|
-
starmallow-0.
|
37
|
+
starmallow-0.4.0.dist-info/METADATA,sha256=jPVSz2HCZ8VpNCrkbR2ZPV_ia-WHWodk73LdQUF3jkU,5651
|
38
|
+
starmallow-0.4.0.dist-info/WHEEL,sha256=y1bSCq4r5i4nMmpXeUJMqs3ipKvkZObrIXSvJHm1qCI,87
|
39
|
+
starmallow-0.4.0.dist-info/licenses/LICENSE.md,sha256=QelyGgOzch8CXzy6HrYwHh7nmj0rlWkDA0YzmZ3CPaY,1084
|
40
|
+
starmallow-0.4.0.dist-info/RECORD,,
|
File without changes
|
File without changes
|