î
É XÞ$  ã               @   s¨   d  Z  d d l Z d d l Z d d l Z d d l m Z d d l Z d d l Z d d „  Z e j	 e j
 f d d „ Z d d	 „  Z Gd
 d „  d e ƒ Z e ƒ  Z d S)zLogging
é    N)Úbackwardcompatc                 s   ‡  f d d †  } | S)Nc                s#   d j  t ˆ  ƒ |  t j j g ƒ S)NÚ )ÚjoinÚlistÚcoloramaÚStyleÚ	RESET_ALL)Úinp)Úcolors© ú2/home/ubuntu/projects/ifolica/build/pip/pip/log.pyÚwrapped   s    z_color_wrap.<locals>.wrappedr   )r
   r   r   )r
   r   Ú_color_wrap   s    r   c             C   sm   t  |  t j ƒ s |  n |  j } | | k r1 d St | d ƒ rP | j ƒ  rP d S| j d ƒ d k ri d Sd S)NFÚisattyTÚTERMÚANSI)Ú
isinstancer   ÚAnsiToWin32r   Úhasattrr   Úget)ÚconsumerÚenvironÚstdÚreal_consumerr   r   r   Úshould_color   s    	r   c             C   s    d j  |  j d ƒ d  d … ƒ }  d j  | j d ƒ d  d … ƒ } | j d ƒ \ } } t t | ƒ d ƒ } d j  | | g ƒ } t j |  ƒ t j | ƒ k  S)NÚ.é   é   )r   ÚsplitÚstrÚintÚpkg_resourcesÚparse_version)Úcurrent_versionÚremoval_versionÚmajorÚminorÚwarn_versionr   r   r   Úshould_warn&   s    ""r(   c               @   s²  e  Z d  Z d Z e j d Z e j Z e j Z e j e j d Z	 e j Z Z
 e j Z e j Z e e e e	 e e e g Z i e e j j ƒ e 6e e j j ƒ e 6e e j j ƒ e 6Z 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 d „  Z d d „  Z d d „  Z d d „  Z d d d „ Z  d d  d! „ Z! d" d# „  Z" d$ d% „  Z# d& d' „  Z$ e% d( d) „  ƒ Z& d* d+ „  Z' d S),ÚLoggerz‰
    Logging object for use in command-line script.  Allows ranges of
    levels, to avoid some redundancy of displayed information.
    r   r   c             C   s1   g  |  _  d |  _ d |  _ d  |  _ d |  _ d  S)Nr   F)Ú	consumersÚindentÚexplicit_levelsÚin_progressÚin_progress_hanging)Úselfr   r   r   Ú__init__L   s
    				zLogger.__init__c             G   s‡   t  j j d ƒ rs xn | D]S \ } } t | d ƒ rV |  j j | t j | ƒ f ƒ q |  j j | | f ƒ q Wn |  j j | ƒ d  S)NÚwinÚwrite)	ÚsysÚplatformÚ
startswithr   r*   Úappendr   r   Úextend)r/   r*   Úlevelr   r   r   r   Úadd_consumersS   s    	zLogger.add_consumersc             O   s   |  j  |  j | | | Ž d  S)N)ÚlogÚDEBUG)r/   ÚmsgÚargsÚkwr   r   r   Údebug_   s    zLogger.debugc             O   s   |  j  |  j | | | Ž d  S)N)r:   ÚINFO)r/   r<   r=   r>   r   r   r   Úinfob   s    zLogger.infoc             O   s   |  j  |  j | | | Ž d  S)N)r:   ÚNOTIFY)r/   r<   r=   r>   r   r   r   Únotifye   s    zLogger.notifyc             O   s   |  j  |  j | | | Ž d  S)N)r:   ÚWARN)r/   r<   r=   r>   r   r   r   Úwarnh   s    zLogger.warnc             O   s   |  j  |  j | | | Ž d  S)N)r:   ÚERROR)r/   r<   r=   r>   r   r   r   Úerrork   s    zLogger.errorc             O   s   |  j  |  j | | | Ž d  S)N)r:   ÚFATAL)r/   r<   r=   r>   r   r   r   Úfataln   s    zLogger.fatalc             O   sL   d d l  m } t | | ƒ r5 |  j | | | Ž n |  j | | | Ž d S)a…  
        Logs deprecation message which is log level WARN if the
        ``removal_version`` is > 1 minor release away and log level ERROR
        otherwise.

        removal_version should be the version that the deprecated feature is
        expected to be removed in, so something that will not exist in
        version 1.7, but will in 1.6 would have a removal_version of 1.7.
        r   )Ú__version__N)ÚpiprJ   r(   rE   rG   )r/   r$   r<   r=   ÚkwargsrJ   r   r   r   Ú
deprecatedq   s    
zLogger.deprecatedc       
      O   sx  | r | r t  d ƒ ‚ q n  | p' | } | r= | | } n | } d |  j | } |  j rp d | | f } n  x|  j D]ö \ } } |  j | | ƒ rz |  j râ | t j t j f k râ d |  _ t j j	 d ƒ t j j
 ƒ  n  t | d ƒ rc| d } t | t j ƒ r7|  j j | d d „  ƒ }	 |	 | ƒ } n  | j	 | ƒ t | d	 ƒ rm| j
 ƒ  qmqp| | ƒ qz qz Wd  S)
Nz6You may give positional or keyword arguments, not bothú z%02i %sFÚ
r2   c             S   s   |  S)Nr   )Úxr   r   r   Ú<lambda>Ÿ   s    zLogger.log.<locals>.<lambda>Úflush)Ú	TypeErrorr+   r,   r*   Úlevel_matchesr.   r3   ÚstdoutÚstderrr2   rR   r   r   Úosr   ÚCOLORSr   )
r/   r8   r<   r=   r>   ÚrenderedÚconsumer_levelr   Úwrite_contentÚ	colorizerr   r   r   r:   ‚   s6    			
z
Logger.logc             C   s   |  j  |  j ƒ o t j j ƒ  S)z$Should we display download progress?)Ústdout_level_matchesrB   r3   rU   r   )r/   r   r   r   Ú_show_progress¨   s    zLogger._show_progressc             C   s‚   |  j  s# t d | |  j  f ƒ ‚ |  j ƒ  rc t j j d |  j | ƒ t j j ƒ  d |  _ n	 d |  _ | |  _  d  |  _	 d  S)Nz0Tried to start_progress(%r) while in_progress %rrN   TF)
r-   ÚAssertionErrorr^   r3   rU   r2   r+   rR   r.   Úlast_message)r/   r<   r   r   r   Ústart_progress¬   s    		zLogger.start_progresszdone.c             C   s­   |  j  s t d ƒ ‚ |  j ƒ  r— |  j sY t j j d |  j  | d ƒ t j j ƒ  q— t j	 d ƒ t j	 d ƒ t j j | d ƒ t j j ƒ  n  d  |  _  d |  _ d  S)Nz,Tried to end_progress without start_progressz...rO   r   F)
r-   r_   r^   r.   r3   rU   r2   rR   ÚloggerÚshow_progress)r/   r<   r   r   r   Úend_progress¹   s    			zLogger.end_progressNc             C   s´   |  j  r° | d k r5 t j j d ƒ t j j ƒ  q° |  j rg d t d t |  j ƒ t | ƒ ƒ } n d } t j j d d |  j |  j	 | | f ƒ t j j ƒ  | |  _ n  d S)zaIf we are in a progress scope, and no log messages have been
        shown, write out another '.'Nr   rN   r   r   z	%s%s%s%s)
r.   r3   rU   r2   rR   r`   ÚmaxÚlenr+   r-   )r/   ÚmessageÚpaddingr   r   r   rc   Ê   s    		)zLogger.show_progressc             C   s   |  j  | |  j ƒ  ƒ S)z9Returns true if a message at this level will go to stdout)rT   Ú_stdout_level)r/   r8   r   r   r   r]   Û   s    zLogger.stdout_level_matchesc             C   s4   x* |  j  D] \ } } | t j k r
 | Sq
 W|  j S)z%Returns the level that stdout runs at)r*   r3   rU   rH   )r/   r8   r   r   r   r   ri   ß   s    zLogger._stdout_levelc             C   sl   t  | t ƒ r^ | j | j } } | d k	 r> | | k r> d S| d k	 sV | | k rZ d Sd S| | k Sd S)am  
        >>> l = Logger()
        >>> l.level_matches(3, 4)
        False
        >>> l.level_matches(3, 2)
        True
        >>> l.level_matches(slice(None, 3), 3)
        False
        >>> l.level_matches(slice(None, 3), 2)
        True
        >>> l.level_matches(slice(1, 3), 1)
        True
        >>> l.level_matches(slice(2, 3), 1)
        False
        NFT)r   ÚsliceÚstartÚstop)r/   r8   rZ   rk   rl   r   r   r   rT   æ   s    zLogger.level_matchesc             C   s?   |  j  } | d k  r | d S| t | ƒ k r7 | d S| | S)Nr   r   éÿÿÿÿ)ÚLEVELSrf   )Úclsr8   Úlevelsr   r   r   Úlevel_for_integer   s    	zLogger.level_for_integerc             C   s–   g  } g  } xR |  j  D]G \ } } | t j k r | j | | f ƒ | j | t j f ƒ q q Wx | D] } |  j  j | ƒ qh W|  j  j | ƒ d  S)N)r*   r3   rU   r6   rV   Úremover7   )r/   Ú	to_removeÚto_addrZ   r   Úitemr   r   r   Úmove_stdout_to_stderr	  s    zLogger.move_stdout_to_stderr)(Ú__name__Ú
__module__Ú__qualname__Ú__doc__Úloggingr;   ÚVERBOSE_DEBUGr@   rD   rB   ÚWARNINGrF   rH   rn   r   r   ÚForeÚYELLOWÚREDrX   r0   r9   r?   rA   rC   rE   rG   rI   rM   r:   r^   ra   rd   rc   r]   ri   rT   Úclassmethodrq   rv   r   r   r   r   r)   7   s@   				&	r)   )rz   r3   rW   r{   rK   r   r   r!   r   rU   rV   r   r(   Úobjectr)   rb   r   r   r   r   Ú<module>   s   Ý