starlette icon indicating copy to clipboard operation
starlette copied to clipboard

Reraise exception from background task

Open Kludex opened this issue 5 months ago • 2 comments

  • Closes https://github.com/encode/starlette/issues/2625

Currently, the exceptions on the background tasks are swallowed:

from typing import Any

from starlette.applications import Starlette
from starlette.background import BackgroundTask
from starlette.middleware import Middleware
from starlette.middleware.base import BaseHTTPMiddleware
from starlette.requests import Request
from starlette.responses import JSONResponse
from starlette.routing import Route


class CustomHeaderMiddleware(BaseHTTPMiddleware):
    async def dispatch(self, request: Request, call_next: Any):
        response = await call_next(request)
        return response


async def bg_task():
    print("hi there")
    raise ValueError("TEST")


def homepage(request: Request):
    task = BackgroundTask(bg_task)
    message = {"status": "Ok"}
    return JSONResponse(message, background=task)


routes = [Route("/", homepage)]

middleware = [Middleware(CustomHeaderMiddleware)]

app = Starlette(routes=routes, middleware=middleware)

Kludex avatar Sep 21 '24 21:09 Kludex