o
    ·„j�  ã                   @   sÖ   d dl Z d dlZd dlZd dlmZ d dlmZ er,d dlZe ¡ Z	e j
ejejjd�Ze jdd�dd„ ƒZd	d
„ ZeejjejjejjhƒZdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zedd„ ƒZdd„ ZdS )é    N)Úcontextmanager)ÚPY314©Úannotation_formati   )Úmaxsizec                 C   s&   t t| ƒj ¡ ƒ}|r|dd … }|S )Né   )ÚtupleÚ	signatureÚ
parametersÚvalues)ÚfuncÚremove_firstr
   © r   úR/var/www/html/django_cbt/venv/lib/python3.10/site-packages/django/utils/inspect.pyÚ_get_func_parameters   s   r   c                 C   s$   t  | ¡}|r
| jn| }t||d�S )N)r   )ÚinspectÚismethodÚ__func__r   )Úmeth_or_funcÚ	is_methodr   r   r   r   Ú_get_callable_parameters   s   
r   c                 C   s   t | ƒ}dd„ |D ƒS )Nc                 S   s   g | ]
}|j tv r|j‘qS r   )ÚkindÚ	ARG_KINDSÚname©Ú.0Úparamr   r   r   Ú
<listcomp>+   s    z!get_func_args.<locals>.<listcomp>)r   )r   Úparamsr   r   r   Úget_func_args)   s   r   c                 C   s„   t | ƒ}g }|D ]7}|j}|dkrq|jtjjkrd| }n|jtjjkr)d| }|jtjjkr9| 	||jf¡ q| 	|f¡ q|S )zÆ
    Return a list of (argument name, default value) tuples. If the argument
    does not have a default value, omit it in the tuple. Arguments such as
    *args and **kwargs are also included.
    ÚselfÚ*z**)
r   r   r   r   Ú	ParameterÚVAR_POSITIONALÚVAR_KEYWORDÚdefaultÚemptyÚappend)r   r   Úargsr   r   r   r   r   Úget_func_full_args.   s   
r)   c                 C   ó   t dd„ t| ƒD ƒƒS )zBReturn True if function 'func' accepts keyword arguments **kwargs.c                 s   ó    � | ]}|j |jkr|V  qd S ©N)r   r$   ©r   Úpr   r   r   Ú	<genexpr>H   ó   € z&func_accepts_kwargs.<locals>.<genexpr>©Úanyr   ©r   r   r   r   Úfunc_accepts_kwargsF   s   r4   c                 C   r*   )zL
    Return True if function 'func' accepts positional arguments *args.
    c                 s   r+   r,   )r   r#   r-   r   r   r   r/   O   r0   z(func_accepts_var_args.<locals>.<genexpr>r1   r3   r   r   r   Úfunc_accepts_var_argsK   s   r5   c                 C   s0   t dd„ t| ƒD ƒƒ}t | ¡r|dkS |dkS )z,Return True if a method only accepts 'self'.c                 S   s   g | ]	}|j tv r|‘qS r   )r   r   r-   r   r   r   r   T   s    z&method_has_no_args.<locals>.<listcomp>r   r   )Úlenr   r   r   )ÚmethÚcountr   r   r   Úmethod_has_no_argsR   s   r9   c                    s   t ‡ fdd„t| ƒD ƒƒS )Nc                 3   s   � | ]}|j ˆ kV  qd S r,   ©r   r   r:   r   r   r/   Y   s   € z*func_supports_parameter.<locals>.<genexpr>r1   )r   r   r   r:   r   Úfunc_supports_parameterX   s   r;   c               	   c   s`   � t sdV  dS t� tj} tt_zdV  W | t_n| t_w W d  ƒ dS 1 s)w   Y  dS )a–  
    inspect.getfullargspec eagerly evaluates type annotations. To add
    compatibility with Python 3.14+ deferred evaluation, patch the module-level
    helper to provide the annotation_format that we are using elsewhere.

    This private helper could be removed when there is an upstream solution for
    https://github.com/python/cpython/issues/141560.

    This context manager is not reentrant.
    N)r   Úlockr   Ú_signature_from_callableÚsafe_signature_from_callable)Úoriginal_helperr   r   r   Úlazy_annotations\   s   €"úr@   c                 C   s    t rtj| tjjd�S t | ¡S )z“
    A wrapper around inspect.signature that leaves deferred annotations
    unevaluated on Python 3.14+, since they are not used in our case.
    r   )r   r   r	   ÚannotationlibÚFormatÚ
FORWARDREF)Úobjr   r   r   r	   t   s   
r	   ) Ú	functoolsr   Ú	threadingÚ
contextlibr   Údjango.utils.versionr   rA   ÚLockr<   Úpartialr=   rB   rC   r>   Ú	lru_cacher   r   Ú	frozensetr"   ÚPOSITIONAL_ONLYÚKEYWORD_ONLYÚPOSITIONAL_OR_KEYWORDr   r   r)   r4   r5   r9   r;   r@   r	   r   r   r   r   Ú<module>   s<    þ

ýÿ	
