"""Daily Sync Inbox cron — 05:00 AM PKT via httpx POST /email/sync. Worker: taskiq worker taskiq_management.broker_setup:broker cron_schdule.tasks Scheduler: taskiq scheduler taskiq_management.broker_setup:scheduler cron_schdule.tasks """ from __future__ import annotations import logging import os import httpx from dotenv import load_dotenv from cron_schdule.plugins import call_inbox_sync_api from taskiq_management.broker_setup import broker load_dotenv() logger=logging.getLogger("cron_schdule.inbox_sync") # 05:00 Asia/Karachi (PKT, UTC+5, no DST). Override the expression or zone in .env. INBOX_SYNC_CRON=os.getenv("INBOX_SYNC_CRON","0 5 * * *") INBOX_SYNC_CRON_TZ=os.getenv("INBOX_SYNC_CRON_TZ","Asia/Karachi") INBOX_SYNC_TOP=int(os.getenv("INBOX_SYNC_TOP","100")) INBOX_SYNC_SKIP=int(os.getenv("INBOX_SYNC_SKIP","0")) INBOX_SYNC_TEST_ON=os.getenv("INBOX_SYNC_TEST_ON","true").strip().lower() not in ("0","false","no") @broker.task( task_name="cron_schdule.sync_inbox", schedule=[{"cron":INBOX_SYNC_CRON,"cron_offset":INBOX_SYNC_CRON_TZ}], ) async def sync_inbox_daily() -> dict: """Enqueue Outlook mailbox sync the same way the Inbox UI button does.""" try: payload=await call_inbox_sync_api( top=INBOX_SYNC_TOP, skip=INBOX_SYNC_SKIP, test_on=INBOX_SYNC_TEST_ON, ) except RuntimeError as e: logger.warning("daily inbox sync skipped: %s",e) return {"error":"not_configured","detail":str(e)} except httpx.ConnectError as e: logger.warning("daily inbox sync unreachable: %s",e) return {"error":"unreachable","detail":str(e)} except httpx.HTTPStatusError as e: status=e.response.status_code if e.response is not None else None logger.warning("daily inbox sync HTTP %s",status) return {"error":"http_error","status_code":status} data=payload.get("data") if isinstance(payload,dict) else None return {"status":"ok","data":data}