o
    !\i                     @   sv   d Z ddlmZmZ ddlmZ ddlmZ ddlZddl	m
Z
 ddlmZ ddlmZ eeZG d	d
 d
eZdS )zBase agent class    )ABCabstractmethod)Session)OptionalN)AgentRunRepository)	RunStatus)datetimec                   @   sb   e Zd ZdZdedefddZdefddZdde	de
e de
e fddZede	fddZd
S )	BaseAgentzBase class for all agentsdb
agent_namec                 C   s    || _ || _t|| _d | _d S )N)r
   r   r   run_repocurrent_run)selfr
   r    r   N/var/www/www-root/data/www/176.119.141.140/sports-predictor/app/agents/base.py__init__   s   

zBaseAgent.__init__returnc                 C   sH   | j | j}|j| _| j |jtj t	d| j d|j  |jS )zStart a new agent runzStarted  run )
r   creater   idr   update_statusr   RUNNINGloggerinfo)r   runr   r   r   	start_run   s
   zBaseAgent.start_runTNsuccesserrorlogsc                 C   s\   | j sdS |r
tjntj}| jj| j |||d td| j d| j  d|j	  d| _ dS )zFinish the current runN)r   r   z	Finished r   z with status )
r   r   	COMPLETEDFAILEDr   r   r   r   r   value)r   r   r   r   statusr   r   r   
finish_run   s   "
zBaseAgent.finish_runc                 C   s   dS )zExecute the agent's main logicNr   )r   r   r   r   r   (   s   zBaseAgent.run)TNN)__name__
__module____qualname____doc__r   strr   intr   boolr   r#   r   r   r   r   r   r   r	      s     
r	   )r'   abcr   r   sqlalchemy.ormr   typingr   logging-app.core.db.repositories.agent_run_repositoryr   app.core.db.models.agent_runr   r   	getLoggerr$   r   r	   r   r   r   r   <module>   s    
