Skip to content

Commit a63c3e2

Browse files
committed
add scheduler middleware
1 parent 171a801 commit a63c3e2

File tree

2 files changed

+11
-8
lines changed

2 files changed

+11
-8
lines changed

app/main.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -77,5 +77,5 @@ async def lifespan(_app: FastAPI):
7777

7878

7979
# TODO: every not GET meth should reset cache
80-
# TODO: every scheduler task which needs to act on database hsould have access to connection pool via request
80+
# TODO: every scheduler task which needs to act on database should have access to connection pool via request - maybe ?
8181
# TODO: https://stackoverflow.com/questions/16053364/make-sure-only-one-worker-launches-the-apscheduler-event-in-a-pyramid-web-app-ru

app/services/scheduler.py

Lines changed: 10 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,23 +1,26 @@
11
from datetime import datetime
22

3+
from sqlalchemy import text
34
from starlette.types import ASGIApp, Receive, Scope, Send
4-
55
from apscheduler import AsyncScheduler
66
from apscheduler.triggers.interval import IntervalTrigger
77

8+
from app.database import AsyncSessionFactory
89
from app.utils.logging import AppLogger
910

1011
logger = AppLogger().get_logger()
1112

1213

13-
def tick():
14-
15-
logger.info(f">>>> Be or not to be...{datetime.now()}")
14+
async def tick():
15+
async with AsyncSessionFactory() as session:
16+
stmt = text("select 1;")
17+
logger.info(f">>>> Be or not to be...{datetime.now()}")
18+
result = await session.execute(stmt)
19+
logger.info(f">>>> Result: {result.scalar()}")
20+
return True
1621

1722

1823
class SchedulerMiddleware:
19-
# TODO: need access to request to be able to get db conn pool
20-
2124
def __init__(
2225
self,
2326
app: ASGIApp,
@@ -30,7 +33,7 @@ async def __call__(self, scope: Scope, receive: Receive, send: Send) -> None:
3033
if scope["type"] == "lifespan":
3134
async with self.scheduler:
3235
await self.scheduler.add_schedule(
33-
tick, IntervalTrigger(seconds=25), id="tick"
36+
tick, IntervalTrigger(seconds=25), id="tick-sql-25"
3437
)
3538
await self.scheduler.start_in_background()
3639
await self.app(scope, receive, send)

0 commit comments

Comments
 (0)