a
    a*j                     @   sX   d dl Z d dlmZmZmZmZmZ d dlmZm	Z	 G dd de
ZG dd de
ZdS )    N)CallableIteratorListOptionalUnion)RateLimitItem
parse_manyc                   @   s   e Zd ZdZeedef eeeedef f  e	ee
e  eeeedef f  eede	f  eeedef f e	dd
ddZee	ddd	Zeedd
dZdS )Limitz@
    simple wrapper to encapsulate limits and their context
    .N)
limitkey_funcscope
per_methodmethodserror_messageexempt_whencostoverride_defaultsreturnc
           
      C   s:   || _ || _|| _|| _|| _|| _|| _|| _|	| _d S N)	r
   r   _Limit__scoper   r   r   r   r   r   )
selfr
   r   r   r   r   r   r   r   r    r   L/var/www/html/assistant/venv/lib/python3.9/site-packages/slowapi/wrappers.py__init__   s    zLimit.__init__r   c                 C   s   | j dur|   S dS )zg
        Check if the limit is exempt.
        Return True to exempt the route from the limit.
        NF)r   r   r   r   r   	is_exempt"   s    zLimit.is_exemptc                 C   s.   | j d u rdS t| j r$|  tjS | j S d S )N )r   callablerequestZendpointr   r   r   r   r   *   s    
zLimit.scope)__name__
__module____qualname____doc__r   r   strr   r   boolr   intr   propertyr   r   r   r   r   r   r	      s    

r	   c                   @   s   e Zd ZdZeeedef f edef eeeedef f  eee	e  eeeedef f  eedef  ee
ede
f f ed	ddZee dddZd	d
 ZdS )
LimitGroupzb
    represents a group of related limits either from a string or a callable that returns one
    .)	limit_providerkey_functionr   r   r   r   r   r   r   c
           
      C   sR   || _ || _|| _|| _|r*dd |D p,|| _|| _|| _|| _|	| _d | _	d S )Nc                 S   s   g | ]}|  qS r   )lower).0mr   r   r   
<listcomp>M       z'LimitGroup.__init__.<locals>.<listcomp>)
_LimitGroup__limit_provider_LimitGroup__scoper*   r   r   r   r   r   r   r   )
r   r)   r*   r   r   r   r   r   r   r   r   r   r   r   =   s    zLimitGroup.__init__r   c                 c   s   t | jrzdt| jj v rpdt| jj v sJJ d| jj d| jd u r\t	d| | | j}q|  }n| j}t
|}|D ].}t|| j| j| j| j| j| j| j| j	V  qd S )Nkeyr   zLimit provider function z needs a `request` argumentz`request` object can't be None)r   r0   inspect	signature
parameterskeysr*   r    r   	Exceptionr   r	   r1   r   r   r   r   r   r   )r   Z	limit_rawZlimit_itemsr
   r   r   r   __iter__T   s0    


zLimitGroup.__iter__c                 C   s
   || _ | S r   )r   )r   r   r   r   r   with_requesto   s    zLimitGroup.with_requestN)r    r!   r"   r#   r   r$   r   r   r%   r   r&   r   r   r	   r8   r9   r   r   r   r   r(   8   s   

r(   )r3   typingr   r   r   r   r   Zlimitsr   r   objectr	   r(   r   r   r   r   <module>   s   1