
    7|h                     R    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y)zUtil that calls Steam-WebAPI.    )AnyList)	BaseModel
ConfigDictmodel_validator)STEAM_GET_GAMES_DETAILSSTEAM_GET_RECOMMENDED_GAMESc                   (   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y)!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    b/var/www/html/test/engine/venv/lib/python3.12/site-packages/langchain_community/utilities/steam.pyget_operationsz!SteamWebAPIWrapper.get_operations%   s        before)r   valuesc                     	 ddl m} 	 ddlm}  |d      } ||      }||d<   |S # t        $ r t        d      w xY w# t        $ r t        d      w xY w)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)   st    	M#	E'
 [!c
w  	MKLL	M
  	ECDD	Es   & > ;Adetailsc                     d}|j                         D ](  \  }}|dt        |      z   dz   t        |      z   dz   z  }* |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?   sM    !--/ 	FJCfs3x''1CJ>EEF	Fr   gamesc                 R    i }|d   D ]  }|d   |d<   |d   |d<   |d   |d<    |S  |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   sV     	= 	C!$iIdO #FIf!$WIg	
 r   html_stringc                 @    ddl m}  ||d      }|j                         S )Nr   )BeautifulSoupzhtml.parser)bs4r<   get_text)r   r:   r<   soups       r   remove_html_tagsz#SteamWebAPIWrapper.remove_html_tagsR   s    %[-8}}r   r   c                     | j                   j                  j                  |      }| j                  |      }| j	                  |      }t        |j                  d            }| j                   j                  j                  |      }|j                  |      j                  d      }|j                  d      }| j                  |      }|j                  |      j                  d      j                  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   s   

,,T2 2259(():;"&&t,-JJOO33B7	}}R $$V,#xx(>?  $445IJ'mmB/33F;??@UV*"# :: "	"
  	 l*r   c                 `    | j                   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/    zz++D1>),r   rT   c                 P    | j                   j                  j                  |dd      S )NF)r   rQ   get_owned_games)r   rT   s     r   get_users_gamesz"SteamWebAPIWrapper.get_users_gamesu   s!    zz//%GGr   c                    	 dd l }| j                  |      }i }d}d}|d   D ]l  }|d   }d|d}	|j                  |	      }
|
j	                  dd      j                  d	      }|D ])  }||v r||xx   d
z  cc<   nd
||<   ||   |kD  s#||   }|}+ n t               }	d|	d<   ||	d<   |j                  |	      }t        |j                         d d      }|d   D cg c]  }|d   	 }}|D cg c]  }|d   |vs| }}|d d D cg c]  }|d   	 }}t        |      S # t        $ r t        d      w xY wc c}w c c}w c c}w )Nr   z$steamspypi library is not installed.r(   r0   appid
appdetails)requestrZ   genrez,    r\   c                 &    | j                  dd      S )Naverage_foreverr   )rF   )xs    r   <lambda>z6SteamWebAPIWrapper.recommended_games.<locals>.<lambda>   s    /@!)D r   T)r-   reverse   r   )

steamspypir!   rX   downloadrF   splitdictsortedr   r+   )r   rT   re   users_gamesr,   most_popular_genremost_popular_genre_countgamerZ   data_request
genreStore	genreListr]   rB   sorted_dataowned_gamesremaining_gamestop_5_popular_not_owneds                     r   recommended_gamesz$SteamWebAPIWrapper.recommended_gamesx   s   	F **84#$ ( 	/DME'3eDL#,,\:J"w399$?I" /F?5MQ&M$%F5M%=#;;/5e},).&/	/ v")Y 2W""<0KKMDd
 2=W1EFtG}FF(
DM,LD
 
 =LBQ<O"PD4<"P"P*++C  	FDEE	F8 G
 #Qs#   D D7,D<9D<ED4r   rm   c                 x    |dk(  r| j                  |      S |dk(  r| j                  |      S t        d| d      )Nget_games_detailsr   zInvalid mode z for Steam API.)rM   ru   
ValueError)r   r   rm   s      r   runzSteamWebAPIWrapper.run   sJ    &&((..,,))$//}TF/BCCr   )__name__
__module____qualname____doc__r   r   __annotations__r   r	   r   r   rh   r   model_configr   r   classmethodr%   r+   r/   r9   r@   rM   rU   rX   ru   ry   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$,# $,# $,LD D3 D3 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r   