"""Celery task: async report generation.""" import asyncio import logging from uuid import UUID from app.workers.celery_app import celery_app logger = logging.getLogger(__name__) def _run_async(coro): loop = asyncio.new_event_loop() try: return loop.run_until_complete(coro) finally: loop.close() @celery_app.task(name="app.workers.report_tasks.generate_report_async", bind=True) def generate_report_async(self, case_id_str: str, report_type: str): _run_async(_run(case_id_str, report_type)) async def _run(case_id_str: str, report_type: str): from app.core.database import async_session_factory from app.models.report import ReportType from app.schemas.report import ReportCreate from app.services.report_service import generate_report case_id = UUID(case_id_str) body = ReportCreate(report_type=ReportType(report_type)) async with async_session_factory() as db: try: report = await generate_report(case_id, body, db) await db.commit() logger.info("Report generated for case %s: %s", case_id, report.file_path) except Exception as e: await db.rollback() logger.error("Report generation failed: %s", e) raise