pythonasyncioapiasyncfastapiframeworkjsonjson-schemaopenapiopenapi3pydanticpython-typespython3redocreststarletteswaggerswagger-uiuvicornweb
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
26 lines
861 B
26 lines
861 B
from fastapi import BackgroundTasks, FastAPI
|
|
from starlette.responses import JSONResponse
|
|
|
|
app = FastAPI()
|
|
|
|
|
|
def write_log(message: str):
|
|
with open("log.txt", mode="a") as log:
|
|
log.write(message)
|
|
|
|
|
|
# Correct: use only BackgroundTasks (no background= on Response)
|
|
@app.get("/correct")
|
|
async def send_notification(background_tasks: BackgroundTasks):
|
|
background_tasks.add_task(write_log, "Notification sent")
|
|
return JSONResponse(content={"message": "done"})
|
|
|
|
|
|
# Wrong: background= on Response silently overrides BackgroundTasks
|
|
@app.get("/wrong")
|
|
async def send_notification_wrong(background_tasks: BackgroundTasks):
|
|
background_tasks.add_task(write_log, "This task will NOT run")
|
|
return JSONResponse(
|
|
content={"message": "done"},
|
|
background=None, # If this were a BackgroundTask, it would override the line above
|
|
)
|
|
|