
    9i_                    h   d Z ddlmZ ddlZddlZddlZddl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mZ  ej.                  d      Z ej.                  dej2                  ej4                  z        Z ej.                  dej8                   dej8                   ej8                   dej2                  ej4                  z        Z G d de      Zej>                   G d d             Z  ed      Z!ere	e"e f   Z#ne	Z# G d de#      Z$ G d d      Z%ddZ&d dZ'd!dZ(d"dZ)d#dZ*y)$     )annotationsN)UserDict)
ModuleType)TYPE_CHECKING)Version)
NamedTuple   )ConfigurationError)GRANULARITIESRateLimitItemz[,;|]{1}zS
    \s*([0-9]+)
    \s*(/|\s*per\s*)
    \s*([0-9]+)?
    \s*([a-z]+)
    \s*
    ^z(:?z)*$c                  &    e Zd ZU dZded<   ded<   y)WindowStatsz1
    tuple to describe a rate limited window
    float
reset_timeint	remainingN)__name__
__module____qualname____doc____annotations__     >/var/www/html/venv/lib/python3.12/site-packages/limits/util.pyr   r   %   s    
 Nr   r   c                  6    e Zd ZU ded<   ded<   ded<   ded<   y)	
DependencystrnamezVersion | Noneversion_requiredversion_foundr   moduleN)r   r   r   r   r   r   r   r   r   0   s    
I$$!!r   r   Missingc                        e Zd Zd fdZ xZS )DependencyDictc                   t         |   |      }|j                  t        u rMd|j                   d}|j
                  r!||j
                  rd|j
                   dndz  }|dz  }t        |      |j
                  rW|j                  r|j                  |j
                  k  r2t        d|j
                   d|j                   d	|j                         |S )
N'z' prerequisite not available.z A minimum version of z is required. z^ See https://limits.readthedocs.io/en/stable/storage.html#supported-versions for more details.zThe minimum version of z for 'z%' could not be found. Found version: )super__getitem__r#   MissingModuler    r!   r   r"   )selfkey
dependencymessage	__class__s       r   r+   zDependencyDict.__getitem__B   s    W(-
-*//**GHG**!22 -Z-H-H,IW
 %G %W--((((''**E*EE$)**E*E)F))NzOgOgNhj 
 r   )r.   r   returnr   )r   r   r   r+   __classcell__)r1   s   @r   r&   r&   A   s     r   r&   c                  <    e Zd ZU dZg Zded<   	 ddZedd       Zy)	LazyDependencyz
    Simple utility that provides an :attr:`dependency`
    to the child class to fetch any dependencies
    without having to import them explicitly.
    z%dict[str, Version | None] | list[str]DEPENDENCIESc                "    t               | _        y )N)r&   _dependencies)r-   s    r   __init__zLazyDependency.__init__k   s    -;-=r   c                P   t        | dd      st               }t        | j                  t              r| j                  D ci c]  }|d }}n| j                  }|j                         D ]$  \  }}t        |      \  }}t        ||||      ||<   & || _        | j                  S c c}w )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:
        r8   N)	getattrr&   
isinstancer6   listitemsget_dependencyr   r8   )r-   dependenciesr/   mappingr    minimum_versionversions          r   r@   zLazyDependency.dependenciesn   s     t_d3)+L $++T2>B>O>OP
:t+PP++)0 %o&4T&:#
G%//7J&T" ".D!!! Qs    
B#N)r2   None)r2   r&   )	r   r   r   r   r6   r   r9   propertyr@   r   r   r   r5   r5   ^   s2     ;=L7<
> " "r   r5   c                   	 | t         j                  vrt        |        | j                  d      d   }t	        t         j                  |   dd      }t         j                  |    t        |      fS # t        $ r t        dfcY S w xY w)z5
    safe function to import a module at runtime
    .r   __version__z0.0.0N)sysmodules
__import__splitr;   r   ImportErrorr,   )module_pathrootrC   s      r   r?   r?      sz    #ckk){#  %a(#++d+]GD{{;')999 #d""#s   A,A/ /BBc                z    t         j                  j                  d      j                  |       j	                         S )Nlimits)	importlib	resourcesfilesjoinpath
read_bytes)paths    r   get_package_datarX      s-    $$X.77=HHJJr   c           	     z   t        | t              rt        j                  |       st	        d|  d      g }t
        j                  |       D ]l  }t        j                  |      }|s|j                         \  }}}}t        |      }|j                   |t        |      |xr t        |      xs d             n |S )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 'r(   N)r<   r   EXPRmatch
ValueError
SEPARATORSrL   SINGLE_EXPRgroupsgranularity_from_stringappendr   )	limit_stringrQ   limitr[   amount_	multiplesgranularity_stringgranularitys	            r   
parse_manyri      s     |S)djj.F=l^1MNNF!!,/ !!%(7<||~4FAy"412DEKMMCK)Es9~)MN Mr   c                0    t        t        |             d   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   )r=   ri   )rb   s    r   parserk      s     
<()!,,r   c                z    t        j                         D ]  }|j                  |       s|c S  t        d|        )z<

    :param granularity_string:
    :raise ValueError:
    zno granularity matched for )r   valuescheck_granularity_stringr\   )rg   rh   s     r   r`   r`      sH     %++- //0BC 23E2FG
HHr   )rN   r   r2   z!tuple[ModuleType, Version | None])rW   r   r2   bytes)rb   r   r2   zlist[RateLimitItem])rb   r   r2   r   )rg   r   r2   ztype[RateLimitItem])+r   
__future__r   dataclassesimportlib.resourcesrR   rerI   collectionsr   typesr   typingr   packaging.versionr   limits.typingr	   errorsr   rQ   r   r   compiler]   
IGNORECASEVERBOSEr^   patternrZ   r   	dataclassr   r,   r   	_UserDictr&   r5   r?   rX   ri   rk   r`   r   r   r   <module>r      s1    "   	 
      % $ & 0RZZ$
bjj MMBJJ	 rzz		S!3!3 4[5H5H4IMMMBJJ*     9% j)IIY :+" +"\#K6
-
Ir   