from __future__ import annotations from apscheduler.schedulers.background import BackgroundScheduler from .reporting import send_due_reports from .settings import get_bool_setting _scheduler: BackgroundScheduler | None = None def get_scheduler() -> BackgroundScheduler: global _scheduler if _scheduler is None: _scheduler = BackgroundScheduler(timezone='UTC') return _scheduler def start_scheduler(app) -> None: if app.config.get('TESTING'): return if not get_bool_setting('report_scheduler_enabled', False): return scheduler = get_scheduler() if scheduler.running: return def _job(): with app.app_context(): send_due_reports() scheduler.add_job(_job, 'interval', minutes=60, id='send_due_reports', replace_existing=True) scheduler.start()