"""Celery task for qualifying Artist Socials TikTok videos via Gemini.""" import uuid from datetime import datetime, timezone from sqlmodel import Session from app.core.celery_app import celery_app from app.core.db import engine from app.models import QualificationStatus, SocialVideo @celery_app.task(bind=True, max_retries=2, default_retry_delay=30) def analyze_social_video_task(self, social_video_id: str) -> None: with Session(engine) as session: sv = session.get(SocialVideo, uuid.UUID(social_video_id)) if sv is None: return sv.qualification_status = QualificationStatus.PROCESSING session.add(sv) session.commit() video_path = sv.video_path try: from app.services.social_intelligence import SocialVideoAnalyzer result = SocialVideoAnalyzer().analyze(video_path) with Session(engine) as session: sv = session.get(SocialVideo, uuid.UUID(social_video_id)) if sv is None: return sv.is_qualified = result.is_qualified sv.disqualification_reason = result.disqualification_reason sv.qualification_status = ( QualificationStatus.QUALIFIED if result.is_qualified else QualificationStatus.DISQUALIFIED ) sv.analyzed_at = datetime.now(timezone.utc) session.add(sv) session.commit() except Exception as exc: with Session(engine) as session: sv = session.get(SocialVideo, uuid.UUID(social_video_id)) if sv is not None: sv.qualification_status = QualificationStatus.PENDING session.add(sv) session.commit() raise self.retry(exc=exc)