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()