
    ui
              
           d dl Z d dlmZ d dlmZ d dlmZmZmZm	Z	 d dl
mZ d dlmZmZ  G d de          Z G d	 d
e          Zdedede	e	def         ge	def         f         fdZdS )    N)abstractmethod)wraps)OptionalAnyDictCallable)	Component)QuotaProviderResourcec                   (     e Zd Zdedef fdZ xZS )RateLimitErrorresourcequotac                 r    t                                          d| d|            || _        || _        d S )Nzrate limit error. resource: z quota: )super__init__r   r   )selfr   r   	__class__s      R/var/www/icac/venv/lib/python3.11/site-packages/chromadb/rate_limiting/__init__.pyr   zRateLimitError.__init__   s>    QQQ%QQRRR
     )__name__
__module____qualname__r   intr   __classcell__)r   s   @r   r   r   
   sK        ! !# ! ! ! ! ! ! ! ! ! !r   r   c            
       D    e Zd Zeddededee         defd            ZdS )	RateLimitingProvider   keyr   pointreturnc                     dS )a  
        Determines if a request identified by `key` can proceed given the current rate limit.

        :param key: The identifier for the requestor (unused in this simplified implementation).
        :param quota: The quota which will be used for bucket size.
        :param point: The number of tokens required to fulfill the request.
        :return: True if the request can proceed, False otherwise.
        N )r   r   r   r    s       r   
is_allowedzRateLimitingProvider.is_allowed   s	     	r   N)r   )	r   r   r   r   strr   r   boolr$   r#   r   r   r   r      sW        	 	c 	# 	hsm 	D 	 	 	 ^	 	 	r   r   subjectr   r!   .c                 h     dt           dt          f         dt           dt          f         f fd}|S )Nf.r!   c                 &    t          j                   d         }|vrt          d d|           |                              t	                     dt
          dt          t
          t
          f         dt
          f fd            }|S )Nr   z+rate_limit decorator have unknown subject "z", available argskwargsr!   c                 Z   | j         j        j         	| g|R i |S |v r	|         }n*t          |          
k     r 	| g|R i |S |
dz
           }j        dz   t          |          z   }| j         j        j         | j                             t                    }| j                             t                    }|	                    t          |                    }| 	| g|R i |S |
                    ||          }|du rt          j        |           	| g|R i |S )Nr   -)r   r'   F)r   r   )_systemsettings"chroma_rate_limiting_provider_impllenvaluer%   requirer
   r   get_for_subjectr$   r   )r   r+   r,   subject_value	key_valuequota_providerrate_limiterr   r$   r)   	key_indexr   r'   s            r   wrapperz.rate_limit.<locals>.decorator.<locals>.wrapper*   s}    |$GOq///////&   &wt99y((1T3D333F333 $Y] 3 ,s=/A/AAIL!DD!\11-@@N<//0DEEL"22!3}+=+= 3  E }q///////%00EBBJU""$hnEJJJJ1T+D+++F+++r   )inspectgetfullargspec	Exceptionindexr   r   r   )r)   	args_namer;   r:   r   r'   s   `  @r   	decoratorzrate_limit.<locals>.decorator"   s    *1--a0	)##_g__T]__   OOG,,		q	, 	,S#X 	,3 	, 	, 	, 	, 	, 	, 	, 	, 
	,4 r   )r   r   )r'   r   rA   s   `` r   
rate_limitrB      sP    #Xc3h' #HS#X,> # # # # # # #J r   )r<   abcr   	functoolsr   typingr   r   r   r   chromadb.configr	   chromadb.quotar
   r   r>   r   r   r%   rB   r#   r   r   <module>rH      s)                0 0 0 0 0 0 0 0 0 0 0 0 % % % % % % 2 2 2 2 2 2 2 2! ! ! ! !Y ! ! !    9   (($(xS!"HS#X$667( ( ( ( ( (r   