
    ZeIi                       U d Z ddlmZ ddlmZ ddlmZmZmZ d-d	Z	 G d
 de          Z
 e e
dd           e
dd           e
dd           e
dd           e
dd           e
dd                    Zi Zded<    G d de          Ze G d de                      Z G d  d!e          Z G d" d#e          Z G d$ d%e          Z G d& d'e          Z G d( d)e          Z G d* d+e          Zd,S ).     )annotations)total_ordering)ClassVar
NamedTuplecastvaluebytes | str | int | floatreturnstrc                r    t          | t                    r|                                 S t          |           S )z4
    normalize a byte/str/int or float to a str
    )
isinstancebytesdecoder   )r	   s    R/var/www/html/MCyber-Diagnostic/venv/lib/python3.11/site-packages/limits/limits.pysafe_stringr   
   s0    
 % ||~~u::    c                  $    e Zd ZU ded<   ded<   dS )Granularityintsecondsr   nameN)__name__
__module____qualname____annotations__ r   r   r   r      s"         LLLIIIIIr   r   iQ dayi ' monthi yeari  hour<   minute   second)r   r   r    r!   r#   r%   zdict[str, type[RateLimitItem]]GRANULARITIESc                        e Zd Zd	 fdZ xZS )
RateLimitItemMetar   r   parentstuple[type, ...]dct"dict[str, Granularity | list[str]]r   c                    d|vrg |d<   t                                          | |||          }d|v r4t          t          t                   |          t
          |d         d         <   |S )N	__slots__GRANULARITYr$   )super__new__r   typeRateLimitItemr&   )clsr   r)   r+   granularity	__class__s        r   r1   zRateLimitItemMeta.__new__'   sp     c!!!Cggooc4#>>C37]#[4 4M#m,Q/0 r   )r   r   r)   r*   r+   r,   r   r(   )r   r   r   r1   __classcell__)r6   s   @r   r(   r(   &   s=                 r   r(   c                  |    e Zd ZU dZg dZded<   	 	 dddZedd            Zd dZ	d!dZ
d"dZd#dZd$dZd dZdS )%r3   a]  
    defines a Rate limited resource which contains the characteristic
    namespace, amount and granularity multiples of the rate limiting window.

    :param amount: the rate limit amount
    :param multiples: multiple of the 'per' :attr:`GRANULARITY`
     (e.g. 'n' per 'm' seconds)
    :param namespace: category for the specific rate limit
    )	namespaceamount	multipleszClassVar[Granularity]r/   r$   LIMITERr:   r   r;   
int | Noner9   r   c                h    || _         t          |          | _        t          |pd          | _        d S )Nr$   )r9   r   r:   r;   )selfr:   r;   r9   s       r   __init__zRateLimitItem.__init__N   s/     #&kkY^!,,r   granularity_stringr   boolc                `    |                                 | j        j        | j        j         dhv S )z
        Checks if this instance matches a *granularity_string*
        of type ``n per hour``, ``n per minute`` etc,
        by comparing with :attr:`GRANULARITY`

        s)lowerr/   r   )r4   rA   s     r   check_granularity_stringz&RateLimitItem.check_granularity_stringU   s;     "''))O #&&&.
 
 	
r   c                *    | j         j        | j        z  S )zM
        :return: the duration the limit is enforced for in seconds.
        )r/   r   r;   r?   s    r   
get_expiryzRateLimitItem.get_expiryc   s    
 '$.88r   identifiersr
   c                    d                     d |D             t          | j                  t          | j                  | j        j        gz             }| j         d| S )a#  
        Constructs a key for the current limit and any additional
        identifiers provided.

        :param identifiers: a list of strings to append to the key
        :return: a string key identifying this resource with
         each identifier separated with a '/' delimiter.
        /c                ,    g | ]}t          |          S r   )r   ).0ks     r   
<listcomp>z)RateLimitItem.key_for.<locals>.<listcomp>t   s    111[^^111r   )joinr   r:   r;   r/   r   r9   )r?   rJ   	remainders      r   key_forzRateLimitItem.key_forj   sm     HH11[111DK((DN++ %
 
	 ...9...r   otherobjectc                    t          |t                    r0| j        |j        k    o| j        |j        k    o| j        |j        k    S dS )NF)r   r3   r:   r/   r;   r?   rT   s     r   __eq__zRateLimitItem.__eq__~   sP    e]++ 	u|+ 6$(996Neo5
 ur   c                >    | j          d| j         d| j        j         S )Nz per r   )r:   r;   r/   r   rH   s    r   __repr__zRateLimitItem.__repr__   s(    +LLDNLLT5E5JLLLr   c                6    | j         j        |j         j        k     S N)r/   r   rW   s     r   __lt__zRateLimitItem.__lt__   s    '%*;*CCCr   c                P    t          | j        | j        | j        | j        f          S r\   )hashr9   r:   r;   r/   rH   s    r   __hash__zRateLimitItem.__hash__   s"    T^T[$.$BRSTTTr   N)r$   r<   )r:   r   r;   r=   r9   r   )rA   r   r   rB   )r   r   )rJ   r
   r   r   )rT   rU   r   rB   )r   r   )rT   r3   r   rB   )r   r   r   __doc__r.   r   r@   classmethodrF   rI   rS   rX   rZ   r]   r`   r   r   r   r3   r3   :   s          544I&&&& HQ- - - - - 
 
 
 [
9 9 9 9/ / / /(   M M M MD D D DU U U U U Ur   r3   )	metaclassc                  "    e Zd ZdZed         ZdS )RateLimitItemPerYearz)
    per year rate limited resource.
    r    Nr   r   r   ra   
TIME_TYPESr/   r   r   r   re   re      s%          V$KLr   re   c                  "    e Zd ZdZed         ZdS )RateLimitItemPerMonthz*
    per month rate limited resource.
    r   Nrf   r   r   r   ri   ri      s%          W%KMr   ri   c                  "    e Zd ZdZed         ZdS )RateLimitItemPerDayz(
    per day rate limited resource.
    r   Nrf   r   r   r   rk   rk      s%          U#KKr   rk   c                  "    e Zd ZdZed         ZdS )RateLimitItemPerHourz)
    per hour rate limited resource.
    r!   Nrf   r   r   r   rm   rm      s%          V$KMr   rm   c                  "    e Zd ZdZed         ZdS )RateLimitItemPerMinutez+
    per minute rate limited resource.
    r#   Nrf   r   r   r   ro   ro      %          X&KNr   ro   c                  "    e Zd ZdZed         ZdS )RateLimitItemPerSecondz+
    per second rate limited resource.
    r%   Nrf   r   r   r   rr   rr      rp   r   rr   N)r	   r
   r   r   )ra   
__future__r   	functoolsr   limits.typingr   r   r   r   r   dictrg   r&   r   r2   r(   r3   re   ri   rk   rm   ro   rr   r   r   r   <module>rw      s    " " " " " " $ $ $ $ $ $ 4 4 4 4 4 4 4 4 4 4       *   
 TL%((
+'
1
1	+V	4	4	Wf	%	%;r8$$;q(##  
 13 2 2 2 2       ( SU SU SU SU SU/ SU SU SU SUl    =       M       -       =       ]       ]     r   