blob: c4111e09dbfb242b3cf88a98e95ad1bfd660b182 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
|
from __future__ import annotations
from typing import TYPE_CHECKING, cast
__all__ = ("get_route_handlers", "wrap_in_exception_handler")
if TYPE_CHECKING:
from litestar.routes import ASGIRoute, HTTPRoute, WebSocketRoute
from litestar.routes.base import BaseRoute
from litestar.types import ASGIApp, ExceptionHandlersMap, RouteHandlerType
def wrap_in_exception_handler(app: ASGIApp, exception_handlers: ExceptionHandlersMap) -> ASGIApp:
"""Wrap the given ASGIApp in an instance of ExceptionHandlerMiddleware.
Args:
app: The ASGI app that is being wrapped.
exception_handlers: A mapping of exceptions to handler functions.
Returns:
A wrapped ASGIApp.
"""
from litestar.middleware.exceptions import ExceptionHandlerMiddleware
return ExceptionHandlerMiddleware(app=app, exception_handlers=exception_handlers, debug=None)
def get_route_handlers(route: BaseRoute) -> list[RouteHandlerType]:
"""Retrieve handler(s) as a list for given route.
Args:
route: The route from which the route handlers are extracted.
Returns:
The route handlers defined on the route.
"""
route_handlers: list[RouteHandlerType] = []
if hasattr(route, "route_handlers"):
route_handlers.extend(cast("HTTPRoute", route).route_handlers)
else:
route_handlers.append(cast("WebSocketRoute | ASGIRoute", route).route_handler)
return route_handlers
|