Appointment.extern.jobs 源代码
from datetime import datetime, timedelta
from Appointment.models import Appoint
from Appointment.extern.constants import MessageType
from Appointment.extern.wechat import notify_appoint
from scheduler.cancel import remove_job
__all__ = [
'set_appoint_reminder',
'remove_appoint_reminder',
]
def _remind_job_id(appoint_id: int) -> str:
return f'{appoint_id}_appoint_remind'
[文档]
def set_appoint_reminder(appoint: Appoint, students_id: list[str] | None = None, *,
scheduled_only: bool = True) -> bool:
'''设置预约开始前的提醒,根据时间决定如何发送,任何时刻均可调用,开始后不提醒'''
if datetime.now() >= appoint.Astart:
return False
if datetime.now() > appoint.Astart - timedelta(minutes=15):
if scheduled_only:
return False
job_time = None
else:
job_time = appoint.Astart - timedelta(minutes=15)
notify_appoint(appoint, MessageType.REMIND, students_id=students_id,
id=_remind_job_id(appoint.Aid), job_time=job_time)
return True
[文档]
def remove_appoint_reminder(appoint_id: int, no_except: bool = True):
'''取消预约开始前的提醒,不进行任何日志记录,返回值同`remove_job`'''
return remove_job(_remind_job_id(appoint_id), no_except=no_except)