Report PDF emailing

This commit is contained in:
2026-06-18 21:07:34 +01:00
parent 7254719794
commit 364f4fe57e
16 changed files with 1428 additions and 16 deletions
+50
View File
@@ -0,0 +1,50 @@
from __future__ import annotations
import logging
import time
from datetime import datetime
from zoneinfo import ZoneInfo
from app.config import config
from app.db import init_db
from app.reporting import due_jobs, send_scheduled_job
logging.basicConfig(level=logging.INFO, format="%(asctime)s %(levelname)s %(message)s")
logger = logging.getLogger(__name__)
def run_once() -> int:
tz = ZoneInfo(config.app_timezone)
now = datetime.now(tz)
jobs = due_jobs(now)
sent = 0
for job in jobs:
logger.info(
"Sending %s report for %s to %s",
job.cadence,
f"{job.start_date} to {job.end_date}",
job.recipient_email,
)
try:
if send_scheduled_job(job, tz):
sent += 1
except Exception:
logger.exception("Scheduled report failed")
return sent
def main() -> None:
init_db()
poll_seconds = max(60, config.report_scheduler_poll_seconds)
logger.info("Report scheduler started; polling every %s seconds", poll_seconds)
while True:
run_once()
time.sleep(poll_seconds)
if __name__ == "__main__":
main()