from apscheduler.schedulers.background import BackgroundScheduler from apscheduler.triggers.cron import CronTrigger from db import PostScheduler # ===== Scheduler ===== scheduler: BackgroundScheduler | None = None JOB_ID = "vk_publish_job" def start_scheduler(): global scheduler if scheduler is None: scheduler = BackgroundScheduler() scheduler.start() # ===== Добавление задачи ===== def enable_publish_job(): """ Включает выполнение handle_vk_post """ from vk_handler import handle_vk_post scheduleData = PostScheduler.query.first() if not scheduleData or not scheduleData.enabled: return start_hour = scheduleData.start_hour end_hour = scheduleData.end_hour interval_minutes = scheduleData.interval_minutes trigger = CronTrigger( hour=f"{start_hour}-{end_hour - 1}", minute=f"*/{interval_minutes}" ) scheduler.add_job(handle_vk_post, trigger=trigger, id=JOB_ID, replace_existing=True) # ===== Отключение задачи ===== def disable_publish_job(): if scheduler and scheduler.get_job(JOB_ID): scheduler.remove_job(JOB_ID) def get_scheduler_status() -> dict: scheduler_running = bool(scheduler and scheduler.running) job = scheduler.get_job(JOB_ID) if scheduler_running else None status = { "scheduler": scheduler_running, "vk_publish_job": job is not None, "next_run_time": None, } if job: status["next_run_time"] = ( job.next_run_time.strftime("%Y-%m-%d %H:%M:%S") if job.next_run_time else None ) return status