39 lines
912 B
Python
39 lines
912 B
Python
import asyncio
|
|
import logging
|
|
|
|
from app.db.base import SessionLocal
|
|
from app.pomodoro.completion import PomodoroCompletionHandler
|
|
from app.pomodoro.service import PomodoroService
|
|
|
|
logger = logging.getLogger(__name__)
|
|
|
|
WATCH_INTERVAL_SEC = 2
|
|
|
|
|
|
async def pomodoro_watcher_loop() -> None:
|
|
while True:
|
|
try:
|
|
await asyncio.sleep(WATCH_INTERVAL_SEC)
|
|
await _tick()
|
|
except asyncio.CancelledError:
|
|
raise
|
|
except Exception:
|
|
logger.exception("Pomodoro watcher error")
|
|
|
|
|
|
async def _tick() -> None:
|
|
db = SessionLocal()
|
|
try:
|
|
service = PomodoroService(db)
|
|
service.get_status()
|
|
|
|
pending = service.get_pending_completions()
|
|
if not pending:
|
|
return
|
|
|
|
handler = PomodoroCompletionHandler(db)
|
|
for session in pending:
|
|
await handler.process(session)
|
|
finally:
|
|
db.close()
|