
    !\i                         d Z ddlmZ ddlmZmZ ddlZddlmZ ddlm	Z	 ddl
mZ ddlmZ  ej                  e      Z G d	 d
e      Zy)zData quality agent    )Session)datetime	timedeltaN)	BaseAgent)MatchRepository)MatchStatus)Featurec                   4     e Zd ZdZdef fdZdefdZ xZS )QualityAgentzAgent for data quality checksdbc                 F    t         |   |d       t        |      | _        y )Nr   )super__init__r   
match_repo)selfr   	__class__s      /app/app/agents/quality_agent.pyr   zQualityAgent.__init__   s    ^,)"-    returnc           
         | j                         }g }	 | j                  j                  d      }|D cg c]  }|j                  |j                  | }}|r|j                  dt        |       d       | j                  j                  d      }|D cg c]  }|j                  s|j                   }}t        |      t        t        |            z
  }|dkD  r|j                  d| d       | j                  j                  t              j                  t              j                  t        j                   j#                  d      t        j$                  t&        j(                  j*                  k(  t        j,                  t/        j0                         k\  t        j,                  t/        j0                         t3        d	
      z   k        j5                         }	|	dkD  r|j                  d|	 d       | j                  j                  t              j                  t        j$                  t&        j(                  j*                  k(  t        j,                  t/        j0                         t3        d
      z
  k        j5                         }
|
dkD  r|j                  d|
 d       |r=dj7                  |      }t8        j;                  d|        | j=                  d|       yd}t8        j?                  |       | j=                  d|       yc c}w c c}w # t@        $ rB}tC        |      }t8        jE                  d| d       | j=                  d|       Y d}~yd}~ww xY w)zRun quality checksi  )limitNzFound z  finished matches without scoresi'  r   z potential duplicate matches   )daysz" upcoming matches without features   z& old matches still marked as scheduled
zQuality issues found:
T)successlogszNo quality issues foundzQuality check failed: )exc_infoF)r   error)#	start_runr   get_finished
home_score
away_scoreappendlenget_upcoming	source_idsetr   queryMatch	outerjoinr	   filteridis_statusr   	SCHEDULEDvalue
match_dater   nowr   countjoinloggerwarning
finish_runinfo	Exceptionstrr   )r   run_idissuesfinished_matchesmmissing_scoresall_matches
source_ids
duplicatesmatches_without_featuresold_scheduledr   e	error_msgs                 r   runzQualityAgent.run   s   !7	#;;$;G++a<<'1<<+? +  
 s>':&;;[\] //66U6CK/:J{!akk!++{JJZ3s:+??JA~zl2NOP (,ww}}U';'E'Eg'N'U'U

t$ 5 5 ; ;;  HLLN2  HLLNYA5F$FF	(
 eg % (!+'?&@@bcd !GGMM%077 5 5 ; ;;  8<<>I14E#EE eg 
 q }o5[\] yy(!8?@48 	 1D!48] KL  	AILL1)=LMOOEO;		sB    L !LAL L)L7H/L '*L 
L 	M'%8M""M')	__name__
__module____qualname____doc__r   r   boolrH   __classcell__)r   s   @r   r   r      s    '.7 .<T <r   r   )rL   sqlalchemy.ormr   r   r   loggingapp.agents.baser   )app.core.db.repositories.match_repositoryr   app.core.db.models.matchr   app.core.db.models.featurer	   	getLoggerrI   r6   r    r   r   <module>rW      s=     " (  % E 0 .			8	$C9 Cr   