This commit is contained in:
2025-12-23 01:12:10 +03:00
parent 69706d0cb7
commit 6ec4bd00e2
22 changed files with 1923 additions and 175 deletions
+61 -1
View File
@@ -1,7 +1,7 @@
from apscheduler.schedulers.background import BackgroundScheduler
from apscheduler.triggers.cron import CronTrigger
from db import PostScheduler
from db import BirthdateScheduler, PostScheduler
# =========================
# Flask app (будет установлен из app.py)
@@ -13,6 +13,7 @@ flask_app = None
# =========================
scheduler: BackgroundScheduler | None = None
JOB_ID = "vk_publish_job"
BIRTHDATE_JOB_ID = "vk_birthdate_job"
def clearLog():
@@ -60,6 +61,19 @@ def vk_publish_job():
handle_vk_post()
def vk_birthdate_job():
"""
Обёртка для APScheduler
"""
if flask_app is None:
raise RuntimeError("Scheduler is not initialized with Flask app")
from vk_handler import handle_vk_birthdate
with flask_app.app_context():
handle_vk_birthdate()
# =========================
# Enable job
# =========================
@@ -89,6 +103,32 @@ def enable_publish_job():
)
def enable_birthdate_job():
"""
Включает выполнение публикации постов
"""
if not scheduler:
return
scheduleData = BirthdateScheduler.query.first()
if not scheduleData or not scheduleData.enabled:
disable_birthdate_job()
return
trigger = CronTrigger(
hour=f"{scheduleData.hour}",
minute=f"{scheduleData.minute}",
day="*",
)
scheduler.add_job(
vk_birthdate_job,
trigger=trigger,
id=BIRTHDATE_JOB_ID,
replace_existing=True,
)
# =========================
# Disable job
# =========================
@@ -97,6 +137,11 @@ def disable_publish_job():
scheduler.remove_job(JOB_ID)
def disable_birthdate_job():
if scheduler and scheduler.get_job(BIRTHDATE_JOB_ID):
scheduler.remove_job(BIRTHDATE_JOB_ID)
# =========================
# Status
# =========================
@@ -113,3 +158,18 @@ def get_scheduler_status() -> dict:
else None
),
}
def get_birthdate_scheduler_status() -> dict:
scheduler_running = bool(scheduler and scheduler.running)
job = scheduler.get_job(BIRTHDATE_JOB_ID) if scheduler_running else None
return {
"scheduler": scheduler_running,
"vk_birthdate_job": job is not None,
"next_run_time": (
job.next_run_time.strftime("%Y-%m-%d %H:%M:%S")
if job and job.next_run_time
else None
),
}