a
    bg                     @   sL   d Z ddlmZmZmZmZ ddlmZ ddlm	Z	m
Z
 G dd de	ZdS )zWrapper for the Reddit API    )AnyDictListOptional)get_from_dict_or_env)	BaseModelmodel_validatorc                   @   s   e Zd ZU dZeed< ee ed< ee ed< ee ed< edde	e
edd	d
ZeeeeeedddZeeeeeee
 dddZdS )RedditSearchAPIWrapperaW  Wrapper for Reddit API

    To use, set the environment variables ``REDDIT_CLIENT_ID``,
    ``REDDIT_CLIENT_SECRET``, ``REDDIT_USER_AGENT`` to set the client ID,
    client secret, and user agent, respectively, as given by Reddit's API.
    Alternatively, all three can be supplied as named parameters in the
    constructor: ``reddit_client_id``, ``reddit_client_secret``, and
    ``reddit_user_agent``, respectively.

    Example:
        .. code-block:: python

            from langchain_community.utilities import RedditSearchAPIWrapper
            reddit_search = RedditSearchAPIWrapper()
    reddit_clientreddit_client_idreddit_client_secretreddit_user_agentbefore)mode)valuesreturnc                 C   s   t |dd}||d< t |dd}||d< t |dd}||d< zddl}W n tyb   td	Y n0 |j|||d
}||d< |S )z}Validate that the API ID, secret and user agent exists in environment
        and check that praw module is present.
        r   ZREDDIT_CLIENT_IDr   ZREDDIT_CLIENT_SECRETr   ZREDDIT_USER_AGENTr   Nz?praw package not found, please install it with pip install praw)Z	client_idZclient_secret
user_agentr
   )r   prawImportErrorZReddit)clsr   r   r   r   r   r
    r   y/var/www/html/cobodadashboardai.evdpl.com/venv/lib/python3.9/site-packages/langchain_community/utilities/reddit_search.pyvalidate_environment!   s2    
z+RedditSearchAPIWrapper.validate_environment)querysorttime_filter	subredditlimitr   c                 C   s   | j |||||d}t|dkrd| dt| dg}|D ]n}|d du rPdn|d }	d	|d
  d|d  d|d  d|d  d|d  d|	 d|d  d}
||
 q<d|S d| dS dS )z2Search Reddit and return posts as a single string.)r   r   r   r   r   r   zSearching r/z found z posts:post_categoryNzN/AzPost Title: '
post_titlez'
                    User: post_authorz 
                    Subreddit: post_subredditz!:
                    Text body: 	post_textz
                    Post URL: post_urlz$
                    Post Category: z.
                    Score: 
post_score
z did not find any posts:)resultslenappendjoin)selfr   r   r   r   r   r&   outputrcategorypr   r   r   runF   s6    
zRedditSearchAPIWrapper.runc           
      C   sj   | j |}|j||||d}dd |D }g }|D ]0}	||	j|	j|	j|	j|	j|	j	|	j
|	jd q4|S )z`Use praw to search Reddit and return a list of dictionaries,
        one for each post.
        )r   r   r   r   c                 S   s   g | ]}|qS r   r   ).0r,   r   r   r   
<listcomp>k       z2RedditSearchAPIWrapper.results.<locals>.<listcomp>)r!   r   r   r"   r$   Zpost_idr#   r    )r
   r   searchr(   Zsubreddit_name_prefixedr-   titleZselftextZscoreidurlauthor)
r*   r   r   r   r   r   ZsubredditObjectZsearch_resultsZresults_objectZ
submissionr   r   r   r&   a   s&    zRedditSearchAPIWrapper.resultsN)__name__
__module____qualname____doc__r   __annotations__r   strr   classmethodr   r   intr/   r   r&   r   r   r   r   r	   	   s   
$

r	   N)r;   typingr   r   r   r   Zlangchain_core.utilsr   Zpydanticr   r   r	   r   r   r   r   <module>   s   