eight-hourr/backend/services/scheduler.py

64 lines
1.5 KiB
Python
Raw Permalink Normal View History

2026-07-17 06:55:36 +00:00
from __future__ import annotations
import logging
from datetime import datetime
from apscheduler.schedulers.asyncio import AsyncIOScheduler
from apscheduler.triggers.cron import CronTrigger
from config import settings
from services.fill_service import FillService
logger = logging.getLogger(__name__)
_scheduler: AsyncIOScheduler | None = None
async def _auto_fill_job() -> None:
service = FillService()
result = await service.fill_today()
logger.info("Auto fill result: %s", result.get("message") or result)
def start_scheduler() -> AsyncIOScheduler | None:
global _scheduler
if not settings.auto_fill_enabled:
logger.info("Auto fill scheduler disabled")
return None
if _scheduler is not None:
return _scheduler
_scheduler = AsyncIOScheduler()
_scheduler.add_job(
_auto_fill_job,
CronTrigger(
hour=settings.auto_fill_hour,
minute=settings.auto_fill_minute,
),
id="daily_pts_fill",
replace_existing=True,
)
_scheduler.start()
logger.info(
"Scheduler started: daily fill at %02d:%02d",
settings.auto_fill_hour,
settings.auto_fill_minute,
)
return _scheduler
def stop_scheduler() -> None:
global _scheduler
if _scheduler is not None:
_scheduler.shutdown(wait=False)
_scheduler = None
def reschedule_scheduler() -> None:
from config import reload_settings
reload_settings()
stop_scheduler()
start_scheduler()