Fix: Merge background tasks from dependency and custom response

This commit is contained in:
kumarvishwajeettrivedi 2025-11-22 18:20:33 +05:30
parent cbe5bdb85f
commit 258ee6eec7
2 changed files with 42 additions and 0 deletions

View File

@ -396,6 +396,27 @@ def get_request_handler(
if isinstance(raw_response, Response):
if raw_response.background is None:
raw_response.background = solved_result.background_tasks
elif solved_result.background_tasks:
from starlette.background import BackgroundTask, BackgroundTasks
# Create a new BackgroundTasks to hold both
combined_tasks = BackgroundTasks()
# Add existing response tasks
if isinstance(raw_response.background, BackgroundTasks):
combined_tasks.tasks.extend(raw_response.background.tasks)
elif isinstance(raw_response.background, BackgroundTask):
combined_tasks.tasks.append(raw_response.background)
# Add dependency tasks
# solved_result.background_tasks is always BackgroundTasks (from dependencies/utils.py)
if isinstance(solved_result.background_tasks, BackgroundTasks):
combined_tasks.tasks.extend(solved_result.background_tasks.tasks)
elif isinstance(solved_result.background_tasks, BackgroundTask):
# Should not happen for BackgroundTasks dependency but safe to handle
combined_tasks.tasks.append(solved_result.background_tasks)
raw_response.background = combined_tasks
response = raw_response
else:
response_args: Dict[str, Any] = {

21
tests/test_issue_11215.py Normal file
View File

@ -0,0 +1,21 @@
from fastapi import BackgroundTasks, FastAPI
from fastapi.testclient import TestClient
from starlette.responses import BackgroundTask, Response
app = FastAPI()
@app.get("/")
def endpoint(tasks: BackgroundTasks):
tasks.add_task(lambda: print("Dependency task executed"))
return Response(
content="Custom response",
background=BackgroundTask(lambda: print("Response task executed")),
)
client = TestClient(app)
def test_issue_11215(capsys):
client.get("/")
captured = capsys.readouterr()
assert "Dependency task executed" in captured.out
assert "Response task executed" in captured.out