from apscheduler.schedulers.asyncio import AsyncIOScheduler from apscheduler.triggers.date import DateTrigger from datetime import datetime, timedelta from scheduler.refresh_sharepoint_content_job import refresh_sharepoint_content_job from scheduler.cleanup_document_job import cleanup_document_job from common.log.log_utils import log_entry_exit_async from scheduler.constants import ScheduleJobLocker from scheduler.schedule_job_locker import init_lock @log_entry_exit_async async def create_scheduler() -> AsyncIOScheduler: scheduler: AsyncIOScheduler = AsyncIOScheduler() await register_job(scheduler) return scheduler @log_entry_exit_async async def register_job(scheduler): await init_lock(ScheduleJobLocker.REFRESH_SHAREPOINT_CONTENT_JOB_LOCKER) scheduler.add_job(refresh_sharepoint_content_job, "interval", seconds=(3600 + 3)) # Register cleanup_document_job as a one-time job await init_lock(ScheduleJobLocker.CLEANUP_DOCUMENT_JOB_LOCKER) execution_time = datetime.now() + timedelta( seconds=60 ) # Schedule to run 60 seconds from now scheduler.add_job( cleanup_document_job, # Job function trigger=DateTrigger(run_date=execution_time), # One-time trigger id="cleanup_document_one_time", # Optional: Give the job an ID )