
    Ii                     d    S SK r S SKJrJrJrJrJr  S SKJrJ	r	   " S S\
5      r " S S\
5      rg)    N)CallableIteratorListOptionalUnion)RateLimitItem
parse_manyc                       \ rS rSrSrS\S\S\4   S\\	\\S\4   4      S\
S\\\      S	\\	\\S\4   4      S
\\S\
4      S\	\\S\4   4   S\
SS4S jr\S\
4S j5       r\S\4S j5       rSrg)Limit   z8
simple wrapper to encapsulate limits and their context
limitkey_func.scope
per_methodmethodserror_messageexempt_whencostoverride_defaultsreturnNc
                 p    Xl         X l        X0l        X@l        XPl        X`l        Xpl        Xl        Xl        g N)	r   r   _Limit__scoper   r   r   r   r   r   )
selfr   r   r   r   r   r   r   r   r   s
             6/venv/lib/python3.13/site-packages/slowapi/wrappers.py__init__Limit.__init__   s4     
 $*&	!2    c                 @    U R                   b  U R                  5       $ S$ )zO
Check if the limit is exempt.
Return True to exempt the route from the limit.
F)r   r   s    r   	is_exemptLimit.is_exempt"   s#     &*%5%5%At!LuLr   c                     U R                   c  g[        U R                   5      (       a  U R                  [        R                  5      $ U R                   $ )N )r   callablerequestendpointr    s    r   r   Limit.scope*   sI     << DLL)) W--. \\r   )	__scoper   r   r   r   r   r   r   r   )__name__
__module____qualname____firstlineno____doc__r   r   strr   r   boolr   intr   propertyr!   r   __static_attributes__ r   r   r   r      s
   33 38$3 c8CH#5567	3
 3 $s)$3  c8CH+=&= >?3 hsDy123 C#s(++,3  3 
3, M4 M M 
s 
 
r   r   c                       \ rS rSrSrS\\\S\4   4   S\S\4   S\\\\S\4   4      S\	S\\
\      S	\\\\S\4   4      S
\\S\	4      S\\\S\4   4   S\	4S jrS\\   4S jrS rSrg)
LimitGroup8   zZ
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
                     Xl         X0l        X l        X@l        U=(       a     U V
s/ s H  oR	                  5       PM     sn
=(       d    UU l        X`l        Xpl        Xl        Xl	        S U l
        g s  sn
f r   )_LimitGroup__limit_provider_LimitGroup__scoper9   r   lowerr   r   r   r   r   r&   )r   r8   r9   r   r   r   r   r   r   r   ms              r   r   LimitGroup.__init__=   sb     !/($?w#?w!GGIw#?J7*&	!2 $@s   A0r   c              #      #    [        U R                  5      (       a  S[        R                  " U R                  5      R                  R                  5       ;   a  S[        R                  " U R                  5      R                  R                  5       ;   d   SU R                  R                   S35       eU R                  c  [        S5      eU R                  U R                  U R                  5      5      nOU R                  5       nOU R                  n[        U5      nU Hh  n[        UU R                  U R                  U R                  U R                  U R                  U R                   U R"                  U R$                  5	      v   Mj     g 7f)Nkeyr&   zLimit provider function z needs a `request` argumentz`request` object can't be None)r%   r;   inspect	signature
parameterskeysr9   r*   r&   	Exceptionr	   r   r<   r   r   r   r   r   r   )r   	limit_rawlimit_itemsr   s       r   __iter__LimitGroup.__iter__T   sA    D))**))$*?*?@KKPPRR!2!243D3D!E!P!P!U!U!WWf-d.?.?.H.H-IIdefW<<'#$DEE 11$2C2CDLL2QR	 113	--I+5i+@ E!!""  		&&
 
 !s   FFc                     Xl         U $ r   )r&   )r   r&   s     r   with_requestLimitGroup.with_requesto   s    r   )
__limit_providerr)   r   r   r   r9   r   r   r   r&   N)r*   r+   r,   r-   r.   r   r/   r   r   r0   r   r1   r   r   r   rI   rL   r3   r4   r   r   r6   r6   8   s    c8CH#556 sCx( c8CH#5567	
  $s)$  c8CH+=&= >? hsDy12 C#s(++,  .(5/ 6r   r6   )rB   typingr   r   r   r   r   limitsr   r	   objectr   r6   r4   r   r   <module>rR      s*     < < ,.F .b9 9r   