3
(hc                 @   s\   d dl mZ d dlZd dlmZ dd Zdd Zdd	 Zd
d Zdd Z	dd Z
dd ZdS )    )absolute_importN)sixc             C   s   t jrtj| S tj| }dd |jj D }dd |jj D }|rN|d nd }dd |jj D }|rr|d nd }dd |jj D pd }||||fS )Nc             S   s    g | ]}|j tjjkr|jqS  )kindinspect	ParameterPOSITIONAL_OR_KEYWORDname).0pr   r   8/tmp/pip-install-q3hcpn_q/Django/django/utils/inspect.py
<listcomp>   s    zgetargspec.<locals>.<listcomp>c             S   s    g | ]}|j tjjkr|jqS r   )r   r   r   VAR_POSITIONALr	   )r
   r   r   r   r   r      s    r   c             S   s    g | ]}|j tjjkr|jqS r   )r   r   r   VAR_KEYWORDr	   )r
   r   r   r   r   r      s    c             S   s,   g | ]$}|j tjjkr|j|jk	r|jqS r   )r   r   r   r   defaultempty)r
   r   r   r   r   r      s    )r   PY2r   
getargspec	signature
parametersvalues)funcsigargsvarargsvarkwdefaultsr   r   r   r      s    

r   c             C   s<   t jrtj| }|jdd  S tj| }dd |jj D S )N   c             S   s"   g | ]\}}|j tjjkr|qS r   )r   r   r   r   )r
   arg_nameparamr   r   r   r   )   s    z!get_func_args.<locals>.<listcomp>)r   r   r   r   r   r   r   items)r   argspecr   r   r   r   get_func_args"   s
    

r"   c             C   sB  t jrtj| }|jdd }|jp&g }|dt|t|  }|t|t| d }dd |D t|| }|jrd|j fgng }|j	rd|j	 fgng }|| | S tj
| }g }x|jj D ]t\}	}
|	}|dkrq|
jtjjkrd| }n|
jtjjkrd| }|
jtjjkr.|j||
jf q|j|f qW |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.
    r   Nc             S   s   g | ]
}|fqS r   r   )r
   argr   r   r   r   <   s    z&get_func_full_args.<locals>.<listcomp>*z**self)r   r   r   r   r   r   lenzipr   keywordsr   r   r    r   r   r   r   r   r   append)r   r!   r   r   Z
no_defaultZwith_defaultr   kwargsr   r   r   r	   r   r   r   get_func_full_args.   s0    



r+   c             C   s   t jrjytj| }W nB tk
rV   ytj| j}W n ttfk
rP   d }Y nX Y nX | ph|d d k	S tdd tj| j	j
 D S )N   c             s   s   | ]}|j |jkr|V  qd S )N)r   r   )r
   r   r   r   r   	<genexpr>d   s    z&func_accepts_kwargs.<locals>.<genexpr>)r   r   r   r   	TypeError__call__AttributeErroranyr   r   r   )r   r!   r   r   r   func_accepts_kwargsT   s    r2   c             C   s6   t jrtj| d dk	S tdd tj| jj D S )zL
    Return True if function 'func' accepts positional arguments *args.
    r   Nc             s   s   | ]}|j |jkr|V  qd S )N)r   r   )r
   r   r   r   r   r-   q   s    z(func_accepts_var_args.<locals>.<genexpr>)r   r   r   r   r1   r   r   r   )r   r   r   r   func_accepts_var_argsi   s    r3   c             C   s:   t jrtj| d ndd tj| jj D }t|dkS )Nr   c             S   s   g | ]}|j |jkr|qS r   )r   r   )r
   r   r   r   r   r   x   s    z$func_has_no_args.<locals>.<listcomp>r   )r   r   r   r   r   r   r   r&   )r   r   r   r   r   func_has_no_argsv   s    r4   c             C   s4   t jr|tj| jkS tj| \}}}}||kS d S )N)r   PY3r   r   r   r   )r   Z	parameterr   r   r   r   r   r   r   func_supports_parameter~   s    r6   )
__future__r   r   Zdjango.utilsr   r   r"   r+   r2   r3   r4   r6   r   r   r   r   <module>   s   &