|
1 | 1 | import asyncpg |
2 | | -from contextlib import asynccontextmanager |
3 | | - |
| 2 | +from apscheduler.eventbrokers.redis import RedisEventBroker |
| 3 | +from apscheduler.datastores.sqlalchemy import SQLAlchemyDataStore |
4 | 4 | from fastapi import FastAPI, Depends |
5 | 5 | from fastapi_cache import FastAPICache |
6 | 6 | from fastapi_cache.backends.redis import RedisBackend |
|
9 | 9 | from app.api.shakespeare import router as shakespeare_router |
10 | 10 | from app.api.stuff import router as stuff_router |
11 | 11 | from app.config import settings as global_settings |
| 12 | +from app.database import engine |
12 | 13 | from app.utils.logging import AppLogger |
13 | 14 | from app.api.user import router as user_router |
14 | 15 | from app.api.health import router as health_router |
15 | 16 | from app.redis import get_redis, get_cache |
16 | 17 | from app.services.auth import AuthBearer |
| 18 | +from app.services.scheduler import SchedulerMiddleware |
| 19 | + |
| 20 | +from contextlib import asynccontextmanager |
| 21 | + |
| 22 | +from apscheduler import AsyncScheduler |
17 | 23 |
|
18 | 24 | logger = AppLogger().get_logger() |
19 | 25 |
|
@@ -60,3 +66,16 @@ async def lifespan(_app: FastAPI): |
60 | 66 | tags=["Health, Bearer"], |
61 | 67 | dependencies=[Depends(AuthBearer())], |
62 | 68 | ) |
| 69 | + |
| 70 | +_scheduler_data_store = SQLAlchemyDataStore(engine) |
| 71 | +_scheduler_event_broker = RedisEventBroker( |
| 72 | + client_or_url=global_settings.redis_url.unicode_string() |
| 73 | +) |
| 74 | +_scheduler_himself = AsyncScheduler(_scheduler_data_store, _scheduler_event_broker) |
| 75 | + |
| 76 | +app.add_middleware(SchedulerMiddleware, scheduler=_scheduler_himself) |
| 77 | + |
| 78 | + |
| 79 | +# TODO: every not GET meth should reset cache |
| 80 | +# TODO: every scheduler task which needs to act on database should have access to connection pool via request - maybe ? |
| 81 | +# TODO: https://stackoverflow.com/questions/16053364/make-sure-only-one-worker-launches-the-apscheduler-event-in-a-pyramid-web-app-ru |
0 commit comments