Files
LetterFeed/backend/app/core/scheduler.py
Matt 2739fbc897 add job to scheduler instead of running immediately (#23)
* add job to scheduler instead of running immediately

* fix test

* Apply suggestions from code review

* linting
2025-10-21 22:23:48 +02:00

62 lines
1.8 KiB
Python

from datetime import datetime
from apscheduler.schedulers.background import BackgroundScheduler
from app.core.database import SessionLocal
from app.core.logging import get_logger
from app.crud.settings import get_settings
from app.services.email_processor import process_emails
"""Scheduler for background tasks like email processing."""
logger = get_logger(__name__)
def job():
"""Process emails as a scheduled job."""
logger.info("Scheduler job starting: process_emails")
db = SessionLocal()
try:
process_emails(db)
logger.info("Scheduler job finished: process_emails")
except Exception as e:
logger.error(f"Error in scheduled job process_emails: {e}", exc_info=True)
finally:
db.close()
scheduler = BackgroundScheduler()
def start_scheduler_with_interval():
"""Start the scheduler with an interval based on application settings."""
logger.info("Attempting to start scheduler...")
db = SessionLocal()
try:
settings = get_settings(db)
interval = settings.email_check_interval if settings else 15
logger.info(f"Setting scheduler interval to {interval} minutes")
scheduler.add_job(
job,
"interval",
minutes=interval,
id="email_check_job",
replace_existing=True,
)
if not scheduler.running:
scheduler.add_job(
job,
"date",
run_date=datetime.now(),
id="initial_email_check",
replace_existing=True,
)
scheduler.start()
logger.info("Scheduler started.")
else:
logger.info("Scheduler is already running.")
except Exception as e:
logger.error(f"Failed to start scheduler: {e}", exc_info=True)
finally:
db.close()