
    Ng                     Z    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e          ZdS )zUtil that calls Steam-WebAPI.    )AnyList)	BaseModel
ConfigDictmodel_validator)STEAM_GET_GAMES_DETAILSSTEAM_GET_RECOMMENDED_GAMESc                   T   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
          Zde
e         fdZ ed          ededefd                        ZdedefdZdedefdZdedefdZdedefdZdedefdZdede
e         fdZdedefdZdededefd ZdS )!SteamWebAPIWrapperzWrapper for Steam API.Nsteamget_game_detailszGet Game Details)modenamedescriptionget_recommended_gameszGet Recommended Games
operationsforbid)extrareturnc                     | j         S )zReturn a list of operations.)r   )selfs    _/var/www/html/ai-engine/env/lib/python3.11/site-packages/langchain_community/utilities/steam.pyget_operationsz!SteamWebAPIWrapper.get_operations%   s
        before)r   valuesc                     	 ddl m} n# t          $ r t          d          w xY w	 ddlm} n# t          $ r t          d          w xY w |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. 	STEAM_KEYr   )r   r   ImportErrordecoupler   )clsr   r   r   KEYr   s         r   validate_environmentz'SteamWebAPIWrapper.validate_environment)   s    	M####### 	M 	M 	MKLLL	M	E''''''' 	E 	E 	ECDDD	E f[!!c

ws   	 #. Adetailsc                     d}|                                 D ]0\  }}|dt          |          z   dz   t          |          z   dz   z  }1|S )zParse the details result. zThe z is: 
)itemsstr)r   r&   resultkeyvalues        r   parse_to_strzSteamWebAPIWrapper.parse_to_str?   sU    !--// 	F 	FJCfs3xx''1CJJ>EEFFr   gamesc                 b    i }|d         D ]#}|d         |d<   |d         |d<   |d         |d<    |S )zjThe response may contain more than one game, so we need to choose the right
        one and return the id.appsidlinkprice )r   r0   	game_infoapps       r   get_id_link_pricez$SteamWebAPIWrapper.get_id_link_priceF   sN     	= 	 	C!$iIdO #FIf!$WIgr   html_stringc                 N    ddl m}  ||d          }|                                S )Nr   )BeautifulSoupzhtml.parser)bs4r<   get_text)r   r:   r<   soups       r   remove_html_tagsz#SteamWebAPIWrapper.remove_html_tagsR   s3    %%%%%%}[-88}}r   r   c                 `   | j         j                            |          }|                     |          }|                     |          }t          |                    d                    }| j         j                            |          }|                    |                              d          }|                    d          }|                     |          }|                    |                              d                              d          }	d|z   dz   dz   |	z   dz   }
||
z   }|S )Nr3   datadetailed_descriptionsupported_languageszThe summary of the game is: r)   z)The supported languages of the game are: )	r   r2   search_gamesr9   r/   r+   getget_app_detailsr@   )r   r   r0   info_partOne_dictinfo_partOner3   	info_dictrB   rC   rD   info_partTwoinfos               r   details_of_gamesz#SteamWebAPIWrapper.details_of_gamesX   s3   
,,T22 22599(():;;"&&t,,--JO33B77	}}R  $$V,,#xx(>??  $445IJJ'mmB//33F;;??@UVV*"# :: "	"
  	 l*r   c                 `    | j         j                            |          }|d         d         }|S )Nplayersteamid)r   userssearch_user)r   r   usersteam_ids       r   get_steam_idzSteamWebAPIWrapper.get_steam_idp   s-    z++D11>),r   rT   c                 D    | j         j                            |dd          S )NF)r   rQ   get_owned_games)r   rT   s     r   get_users_gamesz"SteamWebAPIWrapper.get_users_gamesu   s    z//%GGGr   c                    	 dd l }n# t          $ r t          d          w xY w|                     |          }i }d}d}|d         D ]}|d         }d|d}	|                    |	          }
|
                    dd                              d	          }|D ]2}||v r||xx         d
z  cc<   nd
||<   ||         |k    r
||         }|}3t                      }	d|	d<   ||	d<   |                    |	          }t          |                                d d          }d |d         D             fd|D             }d |d d         D             }t          |          S )Nr   z$steamspypi library is not installed.r(   r0   appid
appdetails)requestrZ   genrez,    r\   c                 .    |                      dd          S )Naverage_foreverr   )rF   )xs    r   <lambda>z6SteamWebAPIWrapper.recommended_games.<locals>.<lambda>   s    /@!)D)D r   T)r-   reversec                     g | ]
}|d          S rZ   r6   .0games     r   
<listcomp>z8SteamWebAPIWrapper.recommended_games.<locals>.<listcomp>   s    FFFtG}FFFr   c                 (    g | ]}|d          v|S re   r6   )rg   rh   owned_gamess     r   ri   z8SteamWebAPIWrapper.recommended_games.<locals>.<listcomp>   s.     
 
 
DM,L,LD,L,L,Lr   c                     g | ]
}|d          S )r   r6   rf   s     r   ri   z8SteamWebAPIWrapper.recommended_games.<locals>.<listcomp>   s    "P"P"PD4<"P"P"Pr      )

steamspypir!   rX   downloadrF   splitdictsortedr   r+   )r   rT   rn   users_gamesr,   most_popular_genremost_popular_genre_countrh   rZ   data_request
genreStore	genreListr]   rB   sorted_dataremaining_gamestop_5_popular_not_ownedrk   s                    @r   recommended_gamesz$SteamWebAPIWrapper.recommended_gamesx   s   	F 	F 	F 	FDEEE	F**844#$ ( 	/ 	/DME'3eDDL#,,\::J"w3399$??I" / /F??5MMMQ&MMMM$%F5M%=#;;;/5e},).&/ vv")Y 2W""<00KKMMDDd
 
 
 GFW1EFFF
 
 
 
(
 
 
 #Q"POBQB<O"P"P"P*+++s    "r   rh   c                     |dk    r|                      |          S |dk    r|                     |          S t          d| d          )Nget_games_detailsr   zInvalid mode z for Steam API.)rM   r|   
ValueError)r   r   rh   s      r   runzSteamWebAPIWrapper.run   s\    &&&((...,,,))$///BTBBBCCCr   )__name__
__module____qualname____doc__r   r   __annotations__r   r	   r   r   rq   r   model_configr   r   classmethodr%   r+   r/   r9   r@   rM   rU   rX   r|   r   r6   r   r   r   r      s          E3 '&2	
 	
 ,+6	
 	
JT
    :  LT
     _(###$ 3    [ $#(D S    
t 
 
 
 
 
C C    S S    0     
H HS	 H H H H$,# $,# $, $, $, $,LD D3 D3 D D D D D Dr   r   N)r   typingr   r   pydanticr   r   r   &langchain_community.tools.steam.promptr   r	   r   r6   r   r   <module>r      s    # #         ; ; ; ; ; ; ; ; ; ;       WD WD WD WD WD WD WD WD WD WDr   