
    7|h                     R    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y)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y)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}|j                  |||
      }||d<   |S # t        $ r t        d	      w xY w)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          j/var/www/html/test/engine/venv/lib/python3.12/site-packages/langchain_community/utilities/reddit_search.pyvalidate_environmentz+RedditSearchAPIWrapper.validate_environment!   s     0&(:
 &6!"3*,B 
 *>%&0')<
 '8"#	 &.( $ 

 #0  	Q 	s   A A,querysorttime_filter	subredditlimitc                 :   | j                  |||||      }t        |      dkD  rrd| dt        |       dg}|D ]I  }|d   dn|d   }	d|d	    d
|d    d|d    d|d    d|d    d|	 d|d    d}
|j                  |
       K dj                  |      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_categoryz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   s    #ll# + 
 w<!#/	{'#g,w!W XF 	!$%o$6$>5AoDV#AlO#4 5]+, -  !"2 34 5  !+/ 0 }o .$$,: .lO,B0 a 	! 99V$$!),DEE    c                 t   | j                   j                  |      }|j                  ||||      }|D cg c]  }| }}g }	|D ]l  }
|	j                  |
j                  |
j
                  |
j                  |
j                  |
j                  |
j                  |
j                  |
j                  d       n |	S c c}w )z`Use praw to search Reddit and return a list of dictionaries,
        one for each post.
        )r!   r"   r#   r%   )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_resultsr5   results_object
submissions              r   r/   zRedditSearchAPIWrapper.resultsa   s     ,,66yA(//d5 0 
 &44!44( 	J!!&0&H&H%/%8%8","2"2!+!4!4","2"2)}} *#-#4#4		  5s   	B5N)__name__
__module____qualname____doc__r   __annotations__r   strr	   classmethodr   r    intr8   r   r/    r9   r   r   r   	   s       sm#"3-'}$(#!$ !3 !  $!FFF #F25FBEFNQF	F6 #25BENQ	dr9   r   N)rK   typingr   r   r   r   langchain_core.utilsr   pydanticr   r	   r   rP   r9   r   <module>rT      s"      , , 5 /qY qr9   