B
    CVvgç  ã               @   s`   d dl Z d dlZe jdd�dd„ ƒZdd„ Zdd	„ Zd
d„ Zdd„ Zdd„ Zdd„ Z	dd„ Z
dS )é    Ni   )Úmaxsizec             C   s(   t t | ¡j ¡ ƒ}|r$|dd … }|S )Né   )ÚtupleÚinspectÚ	signatureÚ
parametersÚvalues)ÚfuncÚremove_firstr   © r   ú8/tmp/pip-install-o3oxmrkh/Django/django/utils/inspect.pyÚ_get_func_parameters   s    r   c             C   s$   t  | ¡}|r| jn| }t||d�S )N)r
   )r   ÚismethodÚ__func__r   )Zmeth_or_funcZ	is_methodr	   r   r   r   Ú_get_callable_parameters   s    
r   c             C   s   t | ƒ}dd„ |D ƒS )Nc             S   s    g | ]}|j tjjkr|j‘qS r   )Úkindr   Ú	ParameterÚPOSITIONAL_OR_KEYWORDÚ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 }xv|D ]n}|j}|dkr&q|jtjjkr>d| }n|jtjjkrTd| }|jtjjkrt| 	||jf¡ q| 	|f¡ qW |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   r   ÚVAR_POSITIONALÚVAR_KEYWORDÚdefaultÚemptyÚappend)r	   r   Úargsr   r   r   r   r   Úget_func_full_args   s    

r"   c             C   s   t dd„ t| ƒD ƒƒS )zBReturn True if function 'func' accepts keyword arguments **kwargs.c             s   s   | ]}|j |jkr|V  qd S )N)r   r   )r   Úpr   r   r   ú	<genexpr>6   s    z&func_accepts_kwargs.<locals>.<genexpr>)Úanyr   )r	   r   r   r   Úfunc_accepts_kwargs3   s    r&   c             C   s   t dd„ t| ƒD ƒƒS )zL
    Return True if function 'func' accepts positional arguments *args.
    c             s   s   | ]}|j |jkr|V  qd S )N)r   r   )r   r#   r   r   r   r$   @   s    z(func_accepts_var_args.<locals>.<genexpr>)r%   r   )r	   r   r   r   Úfunc_accepts_var_args;   s    r'   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 |jkr|‘qS r   )r   r   )r   r#   r   r   r   r   H   s    z&method_has_no_args.<locals>.<listcomp>r   r   )Úlenr   r   r   )ÚmethÚcountr   r   r   Úmethod_has_no_argsE   s    r+   c                s   t ‡ fdd„t| ƒD ƒƒS )Nc             3   s   | ]}|j ˆ kV  qd S )N)r   )r   r   )r   r   r   r$   O   s    z*func_supports_parameter.<locals>.<genexpr>)r%   r   )r	   r   r   )r   r   Úfunc_supports_parameterN   s    r,   )Ú	functoolsr   Ú	lru_cacher   r   r   r"   r&   r'   r+   r,   r   r   r   r   Ú<module>   s   
	