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.backfill_photo_id_job import backfill_photo_id_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: AsyncIOScheduler): await init_lock(ScheduleJobLocker.REFRESH_SHAREPOINT_CONTENT_JOB_LOCKER) scheduler.add_job(refresh_sharepoint_content_job, "interval", seconds=(3600 + 3)) await init_lock(ScheduleJobLocker.BACKFILL_PHOTO_ID_JOB_LOCKER) scheduler.add_job( backfill_photo_id_job, "date", run_date=datetime(2025, 2, 7, 20, 0, 0), ) # Register cleanup_document_job as a one-time job # This job is just one-time job for removing many unused documents # Run already, now comment it out # 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 # )