from apscheduler.schedulers.asyncio import AsyncIOScheduler from apscheduler.triggers.cron import CronTrigger from datetime import datetime from dependency_injector.wiring import inject, Provide from loguru import logger from pytz import timezone from typing import Optional from ctp_slack_bot.containers import Container @inject def start_scheduler(container: Container) -> AsyncIOScheduler: """ Start and configure the APScheduler instance. Returns: AsyncIOScheduler: Configured scheduler instance """ settings = container.settings() if container else Provide[Container.settings] zone = settings.SCHEDULER_TIMEZONE scheduler = AsyncIOScheduler(timezone=timezone(zone)) # Add jobs to the scheduler. # scheduler.add_job( # send_error_report, # CronTrigger(hour=7, minute=0), # id="daily_error_report", # name="Daily Error Report", # replace_existing=True, # ) # scheduler.add_job( # cleanup_old_transcripts, # CronTrigger(day_of_week="sun", hour=1, minute=0), # id="weekly_transcript_cleanup", # name="Weekly Transcript Cleanup", # replace_existing=True, # ) # Start the scheduler. scheduler.start() logger.info("Scheduler started with timezone: {}", settings.SCHEDULER_TIMEZONE) # logger.info("Next run for error report: {}", # scheduler.get_job("daily_error_report").next_run_time) # logger.info("Next run for transcript cleanup: {}", # scheduler.get_job("weekly_transcript_cleanup").next_run_time) return scheduler def stop_scheduler(scheduler: AsyncIOScheduler) -> None: """ Shutdown the scheduler gracefully. Args: scheduler: The scheduler instance to shut down """ if scheduler.running: logger.info("Shutting down scheduler") scheduler.shutdown(wait=False) logger.info("Scheduler shutdown complete")