o
    !\ij                     @   s~   d Z ddlmZmZ ddlmZ ddlZddlmZmZm	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%Flashscore data source implementation    )ListOptional)datetimeN)BaseDataSource	MatchData
LeagueData)FlashscoreClient)FlashscoreParser)settingsc                
   @   sz   e Zd ZdZdd Zddedee fddZ				dd
ede	e
 de	e
 dee fddZdede	e fddZdd Zd	S )FlashscoreSourcezFlashscore data sourcec                 C   s"   t jstdt | _t | _d S )Nz"Flashscore is disabled in settings)r
   flashscore_enabled
ValueErrorr   clientr	   parserself r   a/var/www/www-root/data/www/176.119.141.140/sports-predictor/app/data_sources/flashscore/source.py__init__   s   zFlashscoreSource.__init__footballsportreturnc              
   C   sv   zd| d}| j |}|std g W S | j|jW S  ty: } ztd|  g W  Y d}~S d}~ww )zGet available leagues/zFailed to fetch leagues pagezError fetching leagues: N)	r   getloggerwarningr   parse_leaguestext	Exceptionerror)r   r   urlresponseer   r   r   get_leagues   s   
zFlashscoreSource.get_leaguesNleague_source_id	from_dateto_datec              
      s   z:d| d}| j |}|std|  g W S | j|j|} r- fdd|D }r8fdd|D }|W S  tyV } ztd|  g W  Y d}~S d}~ww )	zGet matches for a leaguez/football/league/r   z#Failed to fetch matches for league c                    s   g | ]	}|j  kr|qS r   
match_date.0m)r%   r   r   
<listcomp>7       z0FlashscoreSource.get_matches.<locals>.<listcomp>c                    s   g | ]	}|j  kr|qS r   r'   r)   )r&   r   r   r,   9   r-   zError fetching matches: N)	r   r   r   r   r   parse_matchesr   r   r   )r   r$   r%   r&   r    r!   matchesr"   r   )r%   r&   r   get_matches$   s"   zFlashscoreSource.get_matchesmatch_source_idc              
   C   sl   zd| d}| j |}|sW dS | j|j|W S  ty5 } ztd|  W Y d}~dS d}~ww )zGet detailed match informationz/match/r   NzError fetching match details: )r   r   r   parse_match_detailsr   r   r   r   )r   r1   r    r!   r"   r   r   r   get_match_details@   s   z"FlashscoreSource.get_match_detailsc                 C   s   | j   dS )zClose the clientN)r   closer   r   r   r   r4   M   s   zFlashscoreSource.close)r   )NN)__name__
__module____qualname____doc__r   strr   r   r#   r   r   r   r0   r3   r4   r   r   r   r   r      s"    
r   )r8   typingr   r   r   loggingapp.data_sources.baser   r   r   "app.data_sources.flashscore.clientr   #app.data_sources.flashscore.parsersr	   app.core.configr
   	getLoggerr5   r   r   r   r   r   r   <module>   s    
