
    Ng                     Z    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e	          ZdS )zWrapper for the Reddit API    )AnyDictListOptional)get_from_dict_or_env)	BaseModelmodel_validatorc                       e Zd ZU dZeed<   ee         ed<   ee         ed<   ee         ed<    ed          e	de
d	efd
                        Zdededededed	efdZdededededed	ee
         f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                 
   t          |dd          }||d<   t          |dd          }||d<   t          |dd          }||d<   	 ddl}n# t          $ r t          d	          w xY w|                    |||
          }||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   s          g/var/www/html/ai-engine/env/lib/python3.11/site-packages/langchain_community/utilities/reddit_search.pyvalidate_environmentz+RedditSearchAPIWrapper.validate_environment!   s     0&(:
 
 &6!"3*,B 
  
 *>%&0')<
 
 '8"#	KKKK 	 	 	Q  	
 &.( $ 
 

 #0s   A	 	A#querysorttime_filter	subredditlimitc                    |                      |||||          }t          |          dk    rd| dt          |           dg}|D ]e}|d         dn|d         }	d	|d
          d|d          d|d          d|d          d|d          d|	 d|d          d}
|                    |
           fd                    |          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ps              r   runzRedditSearchAPIWrapper.runF   sI    #ll# + 
 
 w<<!!W	!W!W#g,,!W!W!W XF 	! 	!$%o$6$>55AoDV0AlO 0 0]+0 0 !"2 30 0 !"+0 0  !}	0 0
 %-0 0 lO0 0 0 a    99V$$$E)EEEE    c                    | j                             |          }|                    ||||          }d |D             }g }|D ]H}	|                    |	j        |	j        |	j        |	j        |	j        |	j	        |	j
        |	j        d           I|S )z`Use praw to search Reddit and return a list of dictionaries,
        one for each post.
        )r!   r"   r#   r%   c                     g | ]}|S  r<   ).0r5   s     r   
<listcomp>z2RedditSearchAPIWrapper.results.<locals>.<listcomp>k   s    444!444r9   )r*   r'   r(   r+   r-   post_idr,   r)   )r   r$   searchr1   subreddit_name_prefixedr6   titleselftextscoreidurlauthor)
r3   r!   r"   r#   r$   r%   subredditObjectsearch_resultsresults_object
submissions
             r   r/   zRedditSearchAPIWrapper.resultsa   s     ,66yAA(//d5 0 
 
 54^444( 	 	J!!&0&H%/%8","2!+!4","2)} *#-#4	 	    r9   N)__name__
__module____qualname____doc__r   __annotations__r   strr	   classmethodr   r    intr8   r   r/   r<   r9   r   r   r   	   s;            sm###"3-'''}$$$_(###!$ !3 ! ! ! [ $#!FFF #F25FBEFNQF	F F F F6 #25BENQ	d     r9   r   N)rO   typingr   r   r   r   langchain_core.utilsr   pydanticr   r	   r   r<   r9   r   <module>rW      s        , , , , , , , , , , , , 5 5 5 5 5 5 / / / / / / / /q q q q qY q q q q qr9   