a
    bg                     @   sL   d Z ddlmZmZ ddlmZmZmZ ddlm	Z	m
Z
 G dd deZdS )zUtil that calls Steam-WebAPI.    )AnyList)	BaseModel
ConfigDictmodel_validator)STEAM_GET_GAMES_DETAILSSTEAM_GET_RECOMMENDED_GAMESc                   @   s  e Zd ZU dZdZeed< ddedddedgZ	e
e ed	< ed
dZe
e dddZeddeeedddZeedddZeedddZeedddZeedddZeedd d!Zee
e d"d#d$Zeed"d%d&Zeeed'd(d)ZdS )*SteamWebAPIWrapperzWrapper for Steam API.NsteamZget_game_detailszGet Game Details)modenamedescriptionget_recommended_gameszGet Recommended Games
operationsZforbid)extra)returnc                 C   s   | j S )zReturn a list of operations.)r   )self r   q/var/www/html/cobodadashboardai.evdpl.com/venv/lib/python3.9/site-packages/langchain_community/utilities/steam.pyget_operations%   s    z!SteamWebAPIWrapper.get_operationsbefore)r   )valuesr   c                 C   st   zddl m} W n ty*   tdY n0 zddlm} W n tyV   tdY n0 |d}||}||d< |S )z8Validate api key and python package has been configured.r   )Steamz+python-steam-api library is not installed. )configz#decouple library is not installed. Z	STEAM_KEYr
   )r
   r   ImportErrorZdecoupler   )clsr   r   r   ZKEYr
   r   r   r   validate_environment)   s    z'SteamWebAPIWrapper.validate_environment)detailsr   c                 C   s:   d}|  D ](\}}|dt| d t| d 7 }q|S )zParse the details result. zThe z is: 
)itemsstr)r   r   resultkeyvaluer   r   r   parse_to_str?   s    "zSteamWebAPIWrapper.parse_to_str)gamesr   c                 C   s>   i }|d D ],}|d |d< |d |d< |d |d<  q:q|S )zjThe response may contain more than one game, so we need to choose the right
        one and return the id.appsidlinkZpricer   )r   r&   Z	game_infoZappr   r   r   get_id_link_priceF   s    z$SteamWebAPIWrapper.get_id_link_price)html_stringr   c                 C   s   ddl m} ||d}| S )Nr   )BeautifulSoupzhtml.parser)Zbs4r,   Zget_text)r   r+   r,   Zsoupr   r   r   remove_html_tagsR   s    
z#SteamWebAPIWrapper.remove_html_tags)r   r   c                 C   s   | j j|}| |}| |}t|d}| j j|}||d}|d}| |}||dd}	d| d d |	 d }
||
 }|S )Nr(   datadetailed_descriptionsupported_languageszThe summary of the game is: r   z)The supported languages of the game are: )	r
   r'   Zsearch_gamesr*   r%   r!   getZget_app_detailsr-   )r   r   r&   Zinfo_partOne_dictZinfo_partOner(   Z	info_dictr.   r/   r0   Zinfo_partTwoinfor   r   r   details_of_gamesX   s.    



z#SteamWebAPIWrapper.details_of_gamesc                 C   s   | j j|}|d d }|S )NZplayerZsteamid)r
   usersZsearch_user)r   r   usersteam_idr   r   r   get_steam_idp   s    zSteamWebAPIWrapper.get_steam_id)r6   r   c                 C   s   | j j|ddS )NF)r
   r4   Zget_owned_games)r   r6   r   r   r   get_users_gamesu   s    z"SteamWebAPIWrapper.get_users_gamesc                    s6  zdd l }W n ty&   tdY n0 | |}i }d}d}|d D ]v}|d }d|d}	||	}
|
ddd	}|D ]>}||v r||  d
7  < nd
||< || |kr||| }|}q|qFt }	d|	d< ||	d< ||	}t| dd dd}dd |d D   fdd|D }dd |d d D }t	|S )Nr   z$steamspypi library is not installed.r   r&   appidZ
appdetails)requestr9   genrez,    r:   c                 S   s   |  ddS )NZaverage_foreverr   )r1   )xr   r   r   <lambda>       z6SteamWebAPIWrapper.recommended_games.<locals>.<lambda>T)r#   reversec                 S   s   g | ]}|d  qS r9   r   .0gamer   r   r   
<listcomp>   r?   z8SteamWebAPIWrapper.recommended_games.<locals>.<listcomp>c                    s   g | ]}|d   vr|qS rA   r   rB   Zowned_gamesr   r   rE      s   c                 S   s   g | ]}|d  qS )r   r   rB   r   r   r   rE      r?      )

steamspypir   r8   downloadr1   splitdictsortedr   r!   )r   r6   rH   Zusers_gamesr"   Zmost_popular_genreZmost_popular_genre_countrD   r9   Zdata_requestZ
genreStoreZ	genreListr;   r.   Zsorted_dataZremaining_gamesZtop_5_popular_not_ownedr   rF   r   recommended_gamesx   sB    




z$SteamWebAPIWrapper.recommended_games)r   rD   r   c                 C   s8   |dkr|  |S |dkr$| |S td| dd S )NZget_games_detailsr   zInvalid mode z for Steam API.)r3   rM   
ValueError)r   r   rD   r   r   r   run   s
    

zSteamWebAPIWrapper.run)__name__
__module____qualname____doc__r
   r   __annotations__r   r   r   r   rK   r   Zmodel_configr   r   classmethodr   r!   r%   r*   r-   r3   r7   r8   rM   rO   r   r   r   r   r	      s4   
&r	   N)rS   typingr   r   Zpydanticr   r   r   Z&langchain_community.tools.steam.promptr   r   r	   r   r   r   r   <module>   s   