
    Ii\                        S r SSKrSSKrSSKrSSKrSSKJr  SSKJ	r	  SSK
Jr  SSKJr  SSKJrJrJrJrJrJrJr  SS	KJr  SS
KJrJr  \R6                  " S5      r\R6                  " S\R:                  \R<                  -  5      r\R6                  " SRA                  \RB                  \RB                  S9\R:                  \R<                  -  5      r" " S S\5      r#\RH                   " S S5      5       r%\(       a  \\&\%4   r'O\r' " S S\'5      r( " S S5      r)S\&S\\\	   \\   4   4S jr*S\&S\+4S jr,S\&S\\   4S jr-S\&S\4S jr.S\&S\\   4S  jr/g)!     N)UserDict)
ModuleType)TYPE_CHECKING)Version)DictList
NamedTupleOptionalTupleTypeUnion   )ConfigurationError)GRANULARITIESRateLimitItemz[,;|]{1}zf
    \s*([0-9]+)
    \s*(/|\s*per\s*)
    \s*([0-9]+)
    *\s*(hour|minute|second|day|month|year)s?\s*z#^{SINGLE}(:?{SEPARATORS}{SINGLE})*$)SINGLE
SEPARATORSc                   .    \ rS rSr% Sr\\S'   \\S'   Srg)WindowStats#   z)
Tuple to describe a rate limited window

reset_time	remaining N)__name__
__module____qualname____firstlineno____doc__int__annotations____static_attributes__r       1/venv/lib/python3.13/site-packages/limits/util.pyr   r   #   s    
 ONr#   r   c                   J    \ rS rSr% \\S'   \\   \S'   \\   \S'   \\S'   Sr	g)
Dependency.   nameversion_requiredversion_foundmoduler   N)
r   r   r   r   strr!   r   r   r   r"   r   r#   r$   r&   r&   .   s#    
Iw''G$$r#   r&   c                   V   ^  \ rS rSr\" SSS\" S5      5      rS\S\4U 4S jjrSr	U =r
$ )DependencyDict<   MissingNkeyreturnc                 .  > [         TU ]  U5      nU[        R                  :X  a  [	        U S35      eUR
                  (       aQ  UR                  (       a  UR                  UR
                  :  a&  [	        SUR
                   SUR                   S35      eU$ )Nz prerequisite not availablezThe minimum version of z of z could not be found)super__getitem__r.   r0   r   r)   r*   r(   )selfr1   
dependency	__class__s      r$   r5   DependencyDict.__getitem__?   s    W(-
///$u,G%HII((((''**E*EE$)**E*E)Fz'':< 
 r#   r   )r   r   r   r   r&   r   r0   r,   r5   r"   __classcell__)r8   s   @r$   r.   r.   <   s0    D$
90EFGs z  r#   r.   c                   l    \ rS rSr% Sr/ r\\\\	\
   4   \\   4   \S'    S	S jr\S\4S j5       rSrg)
LazyDependencyP   z
Simple utility that provides an :attr:`dependency`
to the child class to fetch any dependencies
without having to import them explicitly.
DEPENDENCIESr2   Nc                 "    [        5       U l        g )N)r.   _dependencies)r6   s    r$   __init__LazyDependency.__init__]   s    -;-=r#   c                    [        U SS5      (       d  [        5       n[        U R                  [        5      (       a  U R                   Vs0 s H  o"S_M     nnOU R                  nUR                  5        H;  u  pE[        U5      u  p&U(       d  [        R                  X'   M-  [        XEXb5      X'   M=     Xl	        U R                  $ s  snf )z
Cached mapping of the modules this storage depends on.
This is done so that the module is only imported lazily
when the storage is instantiated.

:meta private:
r@   N)
getattrr.   
isinstancer>   listitemsget_dependencyr0   r&   r@   )r6   dependenciesr7   mappingr(   minimum_versionversions          r$   rI   LazyDependency.dependencies`   s     t_d33)+L $++T22>B>O>OP>O
t+>OP++)0%&4T&:#
!)7)?)?L&)3w*L& *9 ".!!! Qs   
C)r@   )r2   N)r   r   r   r   r   r>   r   r   r,   r   r   r	   r!   rA   propertyr.   rI   r"   r   r#   r$   r<   r<   P   sW     DFL%S(7"334d3i?@E
> "n " "r#   r<   module_pathr2   c                     U [         R                  ;  a  [        U 5        U R                  S5      S   n[	        [         R                  U   SS5      n[         R                  U    [        U5      4$ ! [         a     gf = f)z-
safe function to import a module at runtime
.r   __version__z0.0.0)NN)sysmodules
__import__splitrD   r   ImportError)rO   rootrL   s      r$   rH   rH      sr    ckk){#  %a(#++d+]GD{{;')999 s   A.A1 1
A>=A>pathc                 z    [         R                  R                  S5      R                  U 5      R	                  5       $ )Nlimits)	importlib	resourcesfilesjoinpath
read_bytes)rY   s    r$   get_package_datara      s-    $$X.77=HHJJr#   limit_stringc           	         [        U [        5      (       a  [        R                  U 5      (       d  [	        SU -  5      e/ n[
        R                  U 5       H{  n[        R                  U5      nU(       d  M!  UR                  5       u  pEpg[        U5      nUR                  U" [        U5      U=(       a    [        U5      =(       d    S5      5        M}     U$ )z
parses rate limits in string notation containing multiple rate limits
(e.g. ``1/second; 5/minute``)

:param limit_string: rate limit string using :ref:`ratelimit-string`
:raise ValueError: if the string notation is invalid.

z%couldn't parse rate limit string '%s'N)rE   r,   EXPRmatch
ValueErrorr   rV   SINGLE_EXPRgroupsgranularity_from_stringappendr    )	rb   r[   limitre   amount_	multiplesgranularity_stringgranularitys	            r$   
parse_manyrq      s     |S))djj.F.F@<OPPF!!,/!!%(57<||~4Fy12DEKMMCK)Es9~)MN 0 Mr#   c                 0    [        [        U 5      5      S   $ )z
parses a single rate limit in string notation
(e.g. ``1/second`` or ``1 per second``)

:param limit_string: rate limit string using :ref:`ratelimit-string`
:raise ValueError: if the string notation is invalid.

r   )rF   rq   )rb   s    r$   parsers      s     
<()!,,r#   ro   c                     [         R                  " 5        H  nUR                  U 5      (       d  M  Us  $    [        SU -  5      e)z0

:param granularity_string:
:raise ValueError:
zno granularity matched for %s)r   valuescheck_granularity_stringrf   )ro   rp   s     r$   ri   ri      sC     %++-//0BCC . 47II
JJr#   )0r   dataclassesimportlib.resourcesr\   rerS   collectionsr   typesr   typingr   packaging.versionr   limits.typingr   r	   r
   r   r   r   r   errorsr   r[   r   r   compiler   
IGNORECASEVERBOSErg   formatpatternrd   r   	dataclassr&   r,   	_UserDictr.   r<   rH   bytesra   rq   rs   ri   r   r#   r$   <module>r      s      	 
      % N N N & 0ZZ$
jj4
 MMBJJ 
zz*11""z/A/A 2  MMBJJ	*     j)IIY (." ."b hz.BHWDU.U(V K3 K5 KS T-%8 6
- 
- 
-
K 
K]8K 
Kr#   