diff --git a/httpout/response.py b/httpout/response.py index 6c6b14c..1e065c3 100644 --- a/httpout/response.py +++ b/httpout/response.py @@ -10,6 +10,7 @@ class HTTPResponse: def __init__(self, response): self.response = response + self.protocol = response.request.protocol self.loop = response.request.protocol.loop self.logger = response.request.protocol.logger self.tasks = set() @@ -37,7 +38,7 @@ async def handle_exception(self, exc): self.response.request.http_keepalive = False if isinstance(exc, Exception): - if self.response.request.protocol.options['debug']: + if self.protocol.options['debug']: te = TracebackException.from_exception(exc) await self.response.write( b'\n' % b'
  • '.join( @@ -55,7 +56,7 @@ async def handle_exception(self, exc): if exc.code: await self.response.write(str(exc.code).encode()) else: - self.response.request.protocol.print_exception(exc) + self.protocol.print_exception(exc) def run_coroutine(self, coro): fut = concurrent.futures.Future() @@ -121,29 +122,9 @@ def set_status(self, status=200, message='OK'): def set_content_type(self, content_type='text/html; charset=utf-8'): self.call_soon(self.response.set_content_type, content_type) - async def _run_middleware(self): - g = self.response.request.protocol.globals - ctx = self.response.request.protocol.context - middlewares = g.options['_middlewares']['response'] - i = len(middlewares) - - try: - while i > 0: - i -= 1 - - if await middlewares[i][1](globals=g, - context=ctx, - loop=self.loop, - logger=self.logger, - request=self.response.request, - response=self.response): - break - except Exception as exc: - await self.response.handle_exception(exc) - async def write(self, data, **kwargs): if not self.response.headers_sent(): - await self._run_middleware() + await self.protocol.run_middlewares('response', reverse=True) await self.response.write(data, **kwargs)