Files
medods_vk/scheduler.py
T

66 lines
1.6 KiB
Python

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