fastapi-utils
fastapi-utils copied to clipboard
[BUG] Cannot use get_db as a dependency with repeated task
While using fastapi-utils
scheduler, passing Depends(get_db)
as a parameter to the function doesn't work.
This is how it works within FastAPI endpoint:
@app.post("/sample_test")
async def sample_test(db: Session = Depends(get_db)):
return db.query(models.User.height).all()
This is how it doesn't work with FastAPI utils:
@app.on_event("startup")
@repeat_every(seconds=10)
async def sample_test(db: Session = Depends(get_db)):
return db.query(models.User.height).all()
(note that the functions are the same, only decorators have changed)
There is no error, but the query is not being called (I think the session is not created?). It just gets stuck.
The get_db()
function differs a little bit between those two, but under the hood it does the same for both.
Environment:
- OS: Windows 10
- Python 3.9.5 with:
- FastAPI Utils 0.2.1
- FastAPI 0.63.0
- SQLAlchemy 1.4.22
- SQL Server v.18.8
Yup. I face the same issue here
I am also facing the same issue, any solution?
The reason it doesn't work in repeat_task is because Depends
can't be used in our own functions. It has to be in FastAPI function. Refer to this: https://github.com/tiangolo/fastapi/issues/1693#issuecomment-665833384
However, I also trying to access Session
from a repeated_task
function and is unable. Did anyone found any workaround?
well, you can always get your objects without the dependency injection mechanism... Not great for testing though
from app.db import SessionLocal
....
@app.on_event("startup")
@repeat_every(seconds=60)
async def do_something() -> None:
db = SessionLocal()
....