
    UiW                        d dl Z d dlZd dlZd dlmZ d dlmZ erGd dlZ ej                         Z	 e j                  ej                  ej                  j                        Z e j                  d      d        Zd Z eej&                  j(                  ej&                  j*                  ej&                  j,                  h      Zd	 Zd
 Zd Zd Zd Zd Zd Zed        Zd Z y)    N)contextmanager)PY314annotation_formati   )maxsizec                 l    t        t        |       j                  j                               }|r|dd  }|S )N   )tuple	signature
parametersvalues)funcremove_firstr   s      G/var/www/opsc/venv/lib/python3.12/site-packages/django/utils/inspect.py_get_func_parametersr      s3    y1188:;J^
    c                 f    t        j                  |       }|r| j                  n| }t        ||      S )N)r   )inspectismethod__func__r   )meth_or_func	is_methodr   s      r   _get_callable_parametersr      s.      .I$-<  <D9==r   c                 |    t        |       }|D cg c]!  }|j                  t        v s|j                  # c}S c c}w N)r   kind	ARG_KINDSname)r   paramsparams      r   get_func_argsr!   )   s/    %d+F$*F5ejjI.EEJJFFFs   99c                    t        |       }g }|D ]  }|j                  }|dk(  r|j                  t        j                  j
                  k(  rd|z   }n,|j                  t        j                  j                  k(  rd|z   }|j                  t        j                  j                  k7  r|j                  ||j                  f       |j                  |f        |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   s        r   get_func_full_argsr,   .   s     &d+FD !zz6>::**999:DZZ7,,888$;D==G--333KKu}}-.KK ! Kr   c                 8    t        d t        |       D              S )zBReturn True if function 'func' accepts keyword arguments **kwargs.c              3   T   K   | ]   }|j                   |j                  k(  s| " y wr   )r   r'   .0ps     r   	<genexpr>z&func_accepts_kwargs.<locals>.<genexpr>H   s     TQAFFamm<SqT   ((anyr   r   s    r   func_accepts_kwargsr7   F   s    T248TTTr   c                 8    t        d t        |       D              S )zL
    Return True if function 'func' accepts positional arguments *args.
    c              3   T   K   | ]   }|j                   |j                  k(  s| " y wr   )r   r&   r/   s     r   r2   z(func_accepts_var_args.<locals>.<genexpr>O   s!     WQAFFaFVFV<VqWr3   r4   r6   s    r   func_accepts_var_argsr:   K   s     W248WWWr   c                     t        t        |       D cg c]  }|j                  t        v s| c}      }t	        j
                  |       r|dk(  S |dk(  S c c}w )z,Return True if a method only accepts 'self'.r   r	   )lenr   r   r   r   r   )methr1   counts      r   method_has_no_argsr?   R   sN    4T:Rqaff	>QRSE ))$/5A:?UaZ? Ss
   AAc                 >    t        fdt        |       D              S )Nc              3   <   K   | ]  }|j                   k(    y wr   )r   )r0   r    r   s     r   r2   z*func_supports_parameter.<locals>.<genexpr>Y   s     NeuzzT!Ns   r4   )r   r   s    `r   func_supports_parameterrB   X   s    N/G/MNNNr   c                 x    t        j                  |       rt        j                  |       ryd| j                  v ryy)NFz<locals>T)r   
isfunction	isbuiltin__qualname__r6   s    r   is_module_level_functionrG   \   s4    d#w'8'8'>T&&&r   c               #      K   t         sd yt        5  t        j                  } t        t        _        	 d | t        _        	 ddd       y# | t        _        w xY w# 1 sw Y   yxY ww)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_helpers    r   lazy_annotationsrM   f   s\      	 ?!::+G(	?/>G,? ? 0?G,? ?s2   A* AAA	A*AAA'#A*c                     t         r/t        j                  | t        j                  j
                        S t        j                  |       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)objs    r   r   r   ~   s7    
   8L8L8W8WXX  %%r   )!	functoolsr   	threading
contextlibr   django.utils.versionr   rO   LockrI   partialrJ   rP   rQ   rK   	lru_cacher   r   	frozensetr%   POSITIONAL_ONLYKEYWORD_ONLYPOSITIONAL_OR_KEYWORDr   r!   r,   r7   r:   r?   rB   rG   rM   r    r   r   <module>r_      s       % &9>>D#49#4#4(('..99$  S! "> ))&&//	G
0U
X@O ? ?.&r   