"""ARQ worker: раз в минуту опрашивает Nova Poshta по заказам без чека. Запускается отдельным процессом: `arq app.worker.WorkerSettings`. """ from __future__ import annotations from typing import Any from arq import cron from arq.connections import RedisSettings from app.core.config import settings from app.core.logging import configure_logging, get_logger from app.db.session import SessionFactory from app.services.nova_poshta.np_client import NpTrackingClient from app.services.orders import sync_np_statuses log = get_logger(__name__) async def startup(ctx: dict[str, Any]) -> None: configure_logging() ctx["np_client"] = NpTrackingClient(settings) log.info("worker_starting", environment=settings.environment) async def poll_np_statuses(ctx: dict[str, Any]) -> None: async with SessionFactory() as session: await sync_np_statuses(session, ctx["np_client"]) log.info("np_statuses_polled") class WorkerSettings: redis_settings = RedisSettings.from_dsn(settings.redis_url) on_startup = startup cron_jobs = [cron(poll_np_statuses, minute=set(range(60)), run_at_startup=True)]