o
    ȳg                     @   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	de
d	efd
dZdededededed	efddZdededededed	ee
 f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y/   td	w |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   REDDIT_CLIENT_IDr   REDDIT_CLIENT_SECRETr   REDDIT_USER_AGENTr   Nz?praw package not found, please install it with pip install praw)	client_idclient_secret
user_agentr
   )r   prawImportErrorReddit)clsr   r   r   r   r   r
    r   g/var/www/html/chatdoc2/venv/lib/python3.10/site-packages/langchain_community/utilities/reddit_search.pyvalidate_environment!   s4   z+RedditSearchAPIWrapper.validate_environmentquerysorttime_filter	subredditlimitc                 C   s   | j |||||d}t|dkr[d| dt| dg}|D ]7}|d du r(dn|d }	d	|d
  d|d  d|d  d|d  d|d  d|	 d|d  d}
||
 qd|S d| 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 ]}	||	j|	j|	j|	j|	j|	j	|	j
|	jd q|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   ).0r2   r   r   r   
<listcomp>k   s    z2RedditSearchAPIWrapper.results.<locals>.<listcomp>)r'   r$   r%   r(   r*   post_idr)   r&   )r
   r"   searchr.   subreddit_name_prefixedr3   titleselftextscoreidurlauthor)
r0   r   r    r!   r"   r#   subredditObjectsearch_resultsresults_object
submissionr   r   r   r,   a   s&   zRedditSearchAPIWrapper.resultsN)__name__
__module____qualname____doc__r   __annotations__r   strr   classmethodr   r   intr5   r   r,   r   r   r   r   r	   	   sF   
 #
r	   N)rH   typingr   r   r   r   langchain_core.utilsr   pydanticr   r   r	   r   r   r   r   <module>   s
    