
    j                    p   d dl mZ d dlZd dlmZmZ d dlmZ d dlm	Z	m
Z
mZ ddlmZ ddlmZmZ e	r
dd	lmZmZmZ d
ZdZeefZee
df         Zeee
f         Z	 	 	 d3d4dZd5dZ ed          	 	 	 d6d7d%            Zd8d9d'Z  G d( d)          Z!d:d+Z"d;d.Z# ed/          d<d0            Z$d=d1Z%d2 Z&dS )>    )annotationsN)	ContainerIterable)	lru_cache)TYPE_CHECKINGAnyCallable   WrongKeyError)default_formatdefault_formatter)KeyKeyOrTemplateKeyTemplate
__kwargs____args__. funcr	   templateKeyTemplate | NoneargsArgskwargsKwargs | Nonereturnr   c                    |pi }|s|rt           |vrt          |vr|}nt          | ||          }|pt          |           }t	          |fi |S )a  
    Get cache key name for function (:param func) called with args and kwargs
    if func_args is passed key build with parameters are included in func_args dict or tuple otherwise use all of them
    Used function module and name as prefix if key parameter not passed
    :param func: Target function
    :param template: precompile template
    :param args: call positional arguments
    :param kwargs: call keyword arguments
    :return: cache key for call
    )_KWARGS_ARGS_get_call_valuesget_cache_key_templater   )r   r   r   r   
key_values_key_templates         V/DATA/AppData/hermes/projects/honcho/.venv/lib/python3.11/site-packages/cashews/key.pyget_cache_keyr%      sq      \rF :H :!8!8U(=R=R

%dD&99
< 6t < <M-66:666    Iterable[str]c              #     K   t          |           }|j                                        D ]Q\  }}|j        t          j        j        k    r
t          V  )|j        t          j        j        k    r
t          V  M|V  Rd S N)
_get_func_signature
parametersitemskindinspect	ParameterVAR_KEYWORDr   VAR_POSITIONALr   )r   	signature
param_nameparams       r$   get_func_paramsr5   .   s      #D))I&17799  
E:*666MMMMZ7,;;;KKKK r&   i'  )maxsize keyKeyOrTemplate | Noneprefixstrexclude_parametersr   r   c                    |t          | |          }n!d|v rt          |t          |                      |r| d| }|S )a  
    Get cache key name for function (:param func) called with args and kwargs
    Used function module and name as prefix if key parameter not passed
    :param func: Target function
    :param key: template for key, may contain alias to args or kwargs passed to a call
    :param prefix: a prefix
    :param exclude_parameters: array of `args` and `kwargs` names to exclude from a key
        template (if key parameter not passed)
    :return: cache key template
    N{:)generate_key_template_check_key_paramsr5   )r   r8   r:   r<   s       r$   r!   r!   9   s\    $ {#D*<==#::c?4#8#8999  #Jr&   r   c                    t          t          |                     }| j         d| j         }|r|d         dk    r| j         d| j         }|D ]&}||v r|t
          v r
|d| dz  }|d| d| dz  }'|S )ab  
    Generate template for function (:param func) called with args and kwargs
    Used function module and name as prefix if key parameter not passed
    :param func: Target function
    :param exclude_parameters: array of `args` and `kwargs` names to exclude
        from a key template (if key parameter not passed)
    :return: cache key template
    r?   r   selfz:{})tupler5   
__module____name____qualname___ARGS_KWARGS)r   r<   func_paramskey_templater3   s        r$   r@   r@   U   s     --..Ko7777L @{1~///??D,=??! > >
+++%%0*0000LL=
==z====LLr&   c                       e Zd Zd Zd Zd ZdS )_Starc                    | S r)   r   rC   items     r$   __getattr__z_Star.__getattr__m       r&   c                    | S r)   r   rO   s     r$   __getitem__z_Star.__getitem__p   rR   r&   c                    dS )N*r   )rC   r   r   s      r$   __call__z_Star.__call__s   s    sr&   N)rG   rF   rH   rQ   rT   rW   r   r&   r$   rM   rM   l   sA                r&   rM   rJ   c                    d |D             }d }t          j        |          5  t          | fi | d d d            d S # 1 swxY w Y   d S )Nc                ,    i | ]}|t                      S r   )rM   ).0r4   s     r$   
<dictcomp>z%_check_key_params.<locals>.<dictcomp>x   s    ;;;e5%'';;;r&   c                (    t          d|  d          )NzWrong parameter placeholder 'z' in the key r   )names    r$   _defaultz#_check_key_params.<locals>._defaultz   s    ODOOOPPPr&   )r   defaultr   )r8   rJ   r^   s      r$   rA   rA   w   s    ;;{;;;KQ Q Q 
	"8	,	, + +s**k***+ + + + + + + + + + + + + + + + + +s   ?AAKwargsdictc                x    i }t          | ||                                          D ]\  }}|t          vr|||<   |S )z
    Return dict with arguments and their values for function call with given positional and keywords arguments
    :param func: Target function
    :param args: call positional arguments
    :param kwargs: call keyword arguments
    )r    r,   rI   )r   r   r   r"   _key_values         r$   get_call_valuesre      sP     J(tV<<BBDD & &f|##%Jtr&   i  c                *    t          j        |           S r)   )r.   r2   )r   s    r$   r*   r*      s    T"""r&   c                P   |s^i |}t          |           j                                        D ]&\  }}|j        t          j        j        k    r||v r||= 'i |t          |iS  t          |           j        |i |}|	                                 i }|j
                                        D ]{\  }}	|j        j        |         }|j        t          j        j        k    r |	|t          <   |                    |	           Q|j        t          j        j        k    r|	|t          <   v|	||<   ||S r)   )r*   r+   r,   r-   r.   r/   r0   r   bindapply_defaults	argumentsr2   updater1   r   )
r   r   r   _kwargsr]   	parameterr2   result_namerd   s
             r$   r    r       s=    ,V*2488CIIKK 	" 	"OD)~!2!>>>47??DM+&+'7+++.#D)).???IF",2244 # #v'0':'Ee'L	>W.:::$F7OMM&!!!!^w0???"F5MM"F5MMMr&   c                      fd}|S )Nc                       fd}|S )Nc                V    dvrt          | d          d<     i |           S )Nr8   )rC   )r<   )r!   )methodr   
decor_funcr   s    r$   outerz%noself.<locals>._decor.<locals>.outer   sD    F"" 6vR[ \ \ \u.::t.v..v666r&   r   )r   r   ru   rt   s   `` r$   _decorznoself.<locals>._decor   s/    	7 	7 	7 	7 	7 	7 	7
 r&   r   )rt   rv   s   ` r$   noselfrw      s#         Mr&   )Nr   N)
r   r	   r   r   r   r   r   r   r   r   )r   r	   r   r'   )Nr7   r   )
r   r	   r8   r9   r:   r;   r<   r   r   r   )r   )r   r	   r<   r   r   r   )r8   r   rJ   r'   )r   r	   r   r   r   r`   r   ra   )r   r	   )r   r	   r   r   r   r`   )'
__future__r   r.   collections.abcr   r   	functoolsr   typingr   r   r	   
exceptionsr   	formatterr   r   _typingr   r   r   r   r   rI   rE   r   ra   r;   r`   r%   r5   r!   r@   rM   rA   re   r*   r    rw   r   r&   r$   <module>r      s    " " " " " "  / / / / / / / /       / / / / / / / / / / % % % % % % 8 8 8 8 8 8 8 8 98888888888
wS#X	c3h
 $( 	7 7 7 7 72    5 !%$&	    6    .       + + + +    4# # # #   .	 	 	 	 	r&   