o
    2g$                     @  s   d Z ddlmZ ddlmZmZmZ ddlmZ ddl	m
Z
 ddlmZ dd	lmZ dd
lmZ ddlmZ ddlmZ erBddlZG dd deZdS )zProvide the Subreddits class.    )annotations)TYPE_CHECKINGAnyIterator)warn   )API_PATH)_deprecate_args   )	Subreddit)PRAWBase)ListingGenerator)stream_generatorNc                   @  s   e Zd ZdZed-ddZd.ddZd/ddZd.ddZd.ddZ	d.ddZ
	d0d1ddZd2ddZedd d!d"d#d$d3d&d'Zd4d(d)Zd5d+d,ZdS )6
SubredditszDSubreddits is a Listing class that provides various subreddit lists.subreddit_list!list[str | praw.models.Subreddit]returnstrc                 C  s   d dd | D S )N,c                 S  s   g | ]}t |qS  )r   .0xr   r   N/home/garg/my-data/venv/lib/python3.10/site-packages/praw/models/subreddits.py
<listcomp>   s    z'Subreddits._to_list.<locals>.<listcomp>)join)r   r   r   r   _to_list   s   zSubreddits._to_listgenerator_kwargsstr | int | dict[str, str]Iterator[praw.models.Subreddit]c                 K     t | jtd fi |S )zReturn a :class:`.ListingGenerator` for default subreddits.

        Additional keyword arguments are passed in the initialization of
        :class:`.ListingGenerator`.

        subreddits_defaultr   _redditr   selfr   r   r   r   default   
   	
zSubreddits.defaultr   c                 K  s   t dtdd | jdi |S )z?Alias for :meth:`.premium` to maintain backwards compatibility.z9'subreddits.gold' has be renamed to 'subreddits.premium'.r   )category
stacklevelNr   )r   DeprecationWarningpremiumr$   r   r   r   gold'   s   zSubreddits.goldc                 K  r    )zReturn a :class:`.ListingGenerator` for new subreddits.

        Additional keyword arguments are passed in the initialization of
        :class:`.ListingGenerator`.

        subreddits_newr"   r$   r   r   r   new0   r'   zSubreddits.newc                 K  r    )zReturn a :class:`.ListingGenerator` for popular subreddits.

        Additional keyword arguments are passed in the initialization of
        :class:`.ListingGenerator`.

        subreddits_popularr"   r$   r   r   r   popular=   r'   zSubreddits.popularc                 K  r    )zReturn a :class:`.ListingGenerator` for premium subreddits.

        Additional keyword arguments are passed in the initialization of
        :class:`.ListingGenerator`.

        subreddits_goldr"   r$   r   r   r   r+   J   r'   zSubreddits.premiumN
subredditsomit_subreddits(list[str | praw.models.Subreddit] | Nonelist[praw.models.Subreddit]c                   sz   t |tsd}t||durt |tsd}t|d |p g i}td j |d} fdd jj||d	D S )
aa  Return subreddits recommended for the given list of subreddits.

        :param subreddits: A list of :class:`.Subreddit` instances and/or subreddit
            names.
        :param omit_subreddits: A list of :class:`.Subreddit` instances and/or subreddit
            names to exclude from the results (Reddit's end may not work as expected).

        zsubreddits must be a listNz&omit_subreddits must be a list or Noneomitsub_recommended)r2   c                   s   g | ]
}t  j|d  qS )sr_name)r   r#   )r   subr%   r   r   r   m   s    z*Subreddits.recommended.<locals>.<listcomp>params)
isinstancelist	TypeErrorr   r   formatr#   get)r%   r2   r3   msgr<   urlr   r:   r   recommendedW   s   

zSubreddits.recommendedqueryc                 K  s(   | j |d|d t| jtd fi |S )a  Return a :class:`.ListingGenerator` of subreddits matching ``query``.

        Subreddits are searched by both their title and description.

        :param query: The query string to filter subreddits by.

        Additional keyword arguments are passed in the initialization of
        :class:`.ListingGenerator`.

        .. seealso::

            :meth:`.search_by_name` to search by subreddit names

        r<   )	argumentskeyqsubreddits_search)_safely_add_argumentsr   r#   r   )r%   rE   r   r   r   r   searchr   s   
zSubreddits.searchinclude_nsfwexactTF)rL   rM   boolc                  s2    j jtd |||dd} fdd|d D S )a?  Return list of :class:`.Subreddit`\ s whose names begin with ``query``.

        :param query: Search for subreddits beginning with this string.
        :param exact: Return only exact matches to ``query`` (default: ``False``).
        :param include_nsfw: Include subreddits labeled NSFW (default: ``True``).

        subreddits_name_search)include_over_18rM   rE   )datac                   s   g | ]} j |qS r   )r#   	subredditr   r:   r   r   r      s    z-Subreddits.search_by_name.<locals>.<listcomp>names)r#   postr   )r%   rE   rL   rM   resultr   r:   r   search_by_name   s
   
zSubreddits.search_by_namec                   s*    j jtd d|id} fdd|D S )zReturn list of Subreddits whose topics match ``query``.

        :param query: Search for subreddits relevant to the search topic.

        .. note::

            As of 09/01/2020, this endpoint always returns 404.

        subreddits_by_topicrE   r;   c                   s&   g | ]}| d r j|d  qS )name)rA   r#   rR   r   r:   r   r   r      s   & z.Subreddits.search_by_topic.<locals>.<listcomp>)r#   rA   r   )r%   rE   rU   r   r:   r   search_by_topic   s   
zSubreddits.search_by_topicstream_optionsc                 K  s   t | jfi |S )zYield new subreddits as they are created.

        Subreddits are yielded oldest first. Up to 100 historical subreddits will
        initially be returned.

        Keyword arguments are passed to :func:`.stream_generator`.

        )r   r.   )r%   rZ   r   r   r   stream   s   zSubreddits.stream)r   r   r   r   )r   r   r   r   )r   r   r   r   )N)r2   r   r3   r4   r   r5   )rE   r   r   r   r   r   )rE   r   rL   rN   rM   rN   r   r5   )rE   r   r   r5   )rZ   r   r   r   )__name__
__module____qualname____doc__staticmethodr   r&   r,   r.   r0   r+   rD   rK   r	   rV   rY   r[   r   r   r   r   r      s$    


	




r   )r_   
__future__r   typingr   r   r   warningsr   constr   utilr	    r   baser   listing.generatorr   r   praw.modelsprawr   r   r   r   r   <module>   s    