beta 2.0
This commit is contained in:
+61
-1
@@ -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
|
||||
),
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user