î
ªÍ Xc  ã               @   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 |  ƒ St j |  ƒ } d d „  | j j ƒ  Dƒ } d d „  | j j ƒ  Dƒ } | rm | d n d  } d d „  | j j ƒ  Dƒ } | rŸ | d n d  } d d „  | j j ƒ  Dƒ pÄ d  } | | | | 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   úB/home/ubuntu/projects/ifolica/build/django/django/utils/inspect.pyú
<listcomp>   s   	 zgetargspec.<locals>.<listcomp>c             S   s.   g  |  ]$ } | j  t j j k r | j ‘ q Sr   )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 Sr   )r   r   r   ÚVAR_KEYWORDr	   )r
   r   r   r   r   r      s   	 c             S   s@   g  |  ]6 } | j  t j j k r | j | j k	 r | j ‘ q Sr   )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   sR   t  j r) t j |  ƒ } | j d d  … St j |  ƒ } d d „  | j j ƒ  Dƒ S)Né   c             S   s1   g  |  ]' \ } } | j  t j j k r | ‘ q Sr   )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   s½  t  j rê t j |  ƒ } | j d d … } | j p7 g  } | d t | ƒ t | ƒ … } | t | ƒ t | ƒ d … } d d „  | Dƒ t | | ƒ } | j r¶ d | j f g n g  } | j	 rØ d | j	 f g n g  } | | | St j
 |  ƒ } g  } x· | j j ƒ  D]¦ \ }	 }
 |	 } | d k r3qn  |
 j t j j k rUd | } n" |
 j t j j k rwd | } n  |
 j t j j k r¥| j | |
 j f ƒ q| j | 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.
    r   Nc             S   s   g  |  ] } | f ‘ q Sr   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 r} y t j |  ƒ } WnI t k
 rg y t j |  j ƒ } Wn t t f k
 rb d  } Yn XYn X| p| | d d  k	 St 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   sI   t  j r  t j |  ƒ d d k	 St 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   sQ   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 Sr   )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   sH   t  j r | t j |  ƒ j k St j |  ƒ \ } } } } | | k Sd  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   &