From 60857489373e64f8fbef3705c04413c3e1dbd6c0 Mon Sep 17 00:00:00 2001 From: nggit <12218311+nggit@users.noreply.github.com> Date: Fri, 1 Dec 2023 05:49:11 +0700 Subject: [PATCH] refactor error_500 --- tremolo/asgi_server.py | 4 ++++ tremolo/http_server.py | 12 +++++++++--- tremolo/lib/http_protocol.py | 6 ++++-- 3 files changed, 17 insertions(+), 5 deletions(-) diff --git a/tremolo/asgi_server.py b/tremolo/asgi_server.py index 2156532..c46e4f7 100644 --- a/tremolo/asgi_server.py +++ b/tremolo/asgi_server.py @@ -10,6 +10,7 @@ WebSocketClientClosed, WebSocketServerClosed ) +from .handlers import error_500 from .lib.contexts import ServerContext from .lib.http_protocol import HTTPProtocol from .lib.websocket import WebSocket @@ -85,6 +86,9 @@ async def headers_received(self): # update the handler with the ASGI main task self.handler = self.loop.create_task(self.main()) + async def handle_error_500(self, exc): + return await error_500(request=self.request, exc=exc) + def connection_lost(self, exc): if self.handler is not None and not self.handler.done(): self._set_app_close_timeout() diff --git a/tremolo/http_server.py b/tremolo/http_server.py index f48020d..e0c267c 100644 --- a/tremolo/http_server.py +++ b/tremolo/http_server.py @@ -10,9 +10,9 @@ class HTTPServer(HTTPProtocol): __slots__ = ('_routes', '_middlewares', '_server') - def __init__(self, lock=None, **kwargs): - self._routes = kwargs['_routes'] - self._middlewares = kwargs['_middlewares'] + def __init__(self, _routes=None, _middlewares=None, lock=None, **kwargs): + self._routes = _routes + self._middlewares = _middlewares self._server = { 'loop': kwargs['loop'], 'logger': kwargs['logger'], @@ -355,3 +355,9 @@ async def headers_received(self): self._routes[0][1][1], {**self._routes[0][1][2], **options} ) + + async def handle_error_500(self, exc): + # internal server error + return await self._routes[0][-1][1](request=self.request, + response=self.response, + exc=exc) diff --git a/tremolo/lib/http_protocol.py b/tremolo/lib/http_protocol.py index 28f889a..09154d6 100644 --- a/tremolo/lib/http_protocol.py +++ b/tremolo/lib/http_protocol.py @@ -153,6 +153,9 @@ async def put_to_queue( async def headers_received(self): return + async def handle_error_500(self, exc): + return + def handler_timeout(self): if (self.request is None or self.request.upgraded or self.handler is None): @@ -206,8 +209,7 @@ async def handle_exception(self, exc): data = b'' try: - data = await self.options['_routes'][0][-1][1]( - request=self.request, response=self.response, exc=exc) + data = await self.handle_error_500(exc) if data is None: data = b''