σ
b]c           @`  ss  d  d l  m Z m Z d  d l Z d  d l Z d  d l Z d  d l Z d  d l Z d  d l m	 Z	 m
 Z
 m Z d  d l m Z d  d l m Z m Z d  d l m Z m Z m Z d  d l m Z d  d l m Z d  d	 l m Z d  d
 l m Z d  d l m Z e r%d  d l m Z m  Z  m! Z! n  y d  d l m" Z" Wn e# k
 rRd Z" n Xe j% e&  Z' d   Z( e( e e  Z) d e* f d     YZ+ d e f d     YZ, d e f d     YZ- d e* f d     YZ. d e* f d     YZ/ d e/ e+ e. f d     YZ0 d e0 e) f d     YZ1 d e0 e, f d     YZ2 d e0 e f d      YZ3 d! e0 e f d"     YZ4 d# e0 e- f d$     YZ5 d% e/ e+ e. e f d&     YZ6 i e2 e2 f d' 6e1 e6 f d( 6e3 e6 f d) 6e4 e6 f d* 6e5 e6 f d+ 6Z7 d d,  Z8 e j9 d-    Z: d. e* f d/     YZ; d0 e* f d1     YZ< d2 e< f d3     YZ= d4 e< f d5     YZ> e j9 d6    Z? d S(7   i    (   t   absolute_importt   divisionN(   t   SIGINTt   default_int_handlert   signal(   t   six(   t   HIDE_CURSORt   SHOW_CURSOR(   t   Bart   FillingCirclesBart   IncrementalBar(   t   Spinner(   t   WINDOWS(   t   get_indentation(   t   format_size(   t   MYPY_CHECK_RUNNING(   t   Anyt   Iteratort   IO(   t   coloramac         C`  s¨   t  |  j d d   } | s | St  |  d t j    t  |  d t j    g } | t t  |  d g    7} y  t j   j |  j |  Wn t k
 r | SX|  Sd  S(   Nt   encodingt
   empty_fillt   fillt   phases(	   t   getattrt   filet   NoneR   t	   text_typet   listt   joint   encodet   UnicodeEncodeError(   t	   preferredt   fallbackR   t
   characters(    (    s5   lib/python2.7/site-packages/pip/_internal/utils/ui.pyt   _select_progress_class!   s     t   InterruptibleMixinc           B`  s)   e  Z d  Z d   Z d   Z d   Z RS(   sΒ  
    Helper to ensure that self.finish() gets called on keyboard interrupt.

    This allows downloads to be interrupted without leaving temporary state
    (like hidden cursors) behind.

    This class is similar to the progress library's existing SigIntMixin
    helper, but as of version 1.2, that helper has the following problems:

    1. It calls sys.exit().
    2. It discards the existing SIGINT handler completely.
    3. It leaves its own handler in place even after an uninterrupted finish,
       which will have unexpected delayed effects if the user triggers an
       unrelated keyboard interrupt some time after a progress-displaying
       download has already completed, for example.
    c         O`  sM   t  t |   j | |   t t |  j  |  _ |  j d k rI t |  _ n  d S(   s=   
        Save the original SIGINT handler for later.
        N(	   t   superR$   t   __init__R   R   t   handle_sigintt   original_handlerR   R   (   t   selft   argst   kwargs(    (    s5   lib/python2.7/site-packages/pip/_internal/utils/ui.pyR&   Q   s    c         C`  s'   t  t |   j   t t |  j  d S(   s½   
        Restore the original SIGINT handler after finishing.

        This should happen regardless of whether the progress display finishes
        normally, or gets interrupted.
        N(   R%   R$   t   finishR   R   R(   (   R)   (    (    s5   lib/python2.7/site-packages/pip/_internal/utils/ui.pyR,   a   s    c         C`  s   |  j    |  j | |  d S(   s²   
        Call self.finish() before delegating to the original SIGINT handler.

        This handler should only be in place while the progress display is
        active.
        N(   R,   R(   (   R)   t   signumt   frame(    (    s5   lib/python2.7/site-packages/pip/_internal/utils/ui.pyR'   k   s    
(   t   __name__t
   __module__t   __doc__R&   R,   R'   (    (    (    s5   lib/python2.7/site-packages/pip/_internal/utils/ui.pyR$   ?   s   		
t	   SilentBarc           B`  s   e  Z d    Z RS(   c         C`  s   d  S(   N(    (   R)   (    (    s5   lib/python2.7/site-packages/pip/_internal/utils/ui.pyt   updatex   s    (   R/   R0   R3   (    (    (    s5   lib/python2.7/site-packages/pip/_internal/utils/ui.pyR2   v   s   t   BlueEmojiBarc           B`  s    e  Z d  Z d Z d Z d Z RS(   s   %(percent)d%%t    u   πΉu   π·u   π΅(   u   πΉu   π·u   π΅(   R/   R0   t   suffixt
   bar_prefixt
   bar_suffixR   (    (    (    s5   lib/python2.7/site-packages/pip/_internal/utils/ui.pyR4   |   s   t   DownloadProgressMixinc           B`  sJ   e  Z d    Z e d    Z e d    Z e d    Z d d  Z RS(   c         O`  s8   t  t |   j | |   d t   d |  j |  _ d  S(   NR5   i   (   R%   R9   R&   R   t   message(   R)   R*   R+   (    (    s5   lib/python2.7/site-packages/pip/_internal/utils/ui.pyR&      s    c         C`  s   t  |  j  S(   N(   R   t   index(   R)   (    (    s5   lib/python2.7/site-packages/pip/_internal/utils/ui.pyt
   downloaded   s    c         C`  s(   |  j  d k r d St d |  j   d S(   Ng        s   ...i   s   /s(   t   avgR   (   R)   (    (    s5   lib/python2.7/site-packages/pip/_internal/utils/ui.pyt   download_speed   s    c         C`  s   |  j  r d |  j Sd S(   Ns   eta %st    (   t   etat   eta_td(   R)   (    (    s5   lib/python2.7/site-packages/pip/_internal/utils/ui.pyt
   pretty_eta   s    	i   c         c`  s1   x  | D] } | V|  j  |  q W|  j   d  S(   N(   t   nextR,   (   R)   t   itt   nt   x(    (    s5   lib/python2.7/site-packages/pip/_internal/utils/ui.pyt   iter   s    (   R/   R0   R&   t   propertyR<   R>   RB   RG   (    (    (    s5   lib/python2.7/site-packages/pip/_internal/utils/ui.pyR9      s
   	t   WindowsMixinc           B`  s   e  Z d    Z RS(   c         `  s   t  r   j r t   _ n  t t    j | |   t  r t r t j   j    _   f d     j _	   f d     j _
 n  d  S(   Nc           `  s     j  j j   S(   N(   R   t   wrappedt   isatty(    (   R)   (    s5   lib/python2.7/site-packages/pip/_internal/utils/ui.pyt   <lambda>Έ   R?   c           `  s     j  j j   S(   N(   R   RJ   t   flush(    (   R)   (    s5   lib/python2.7/site-packages/pip/_internal/utils/ui.pyRL   Ό   R?   (   R   t   hide_cursort   FalseR%   RI   R&   R   t   AnsiToWin32R   RK   RM   (   R)   R*   R+   (    (   R)   s5   lib/python2.7/site-packages/pip/_internal/utils/ui.pyR&   €   s    (   R/   R0   R&   (    (    (    s5   lib/python2.7/site-packages/pip/_internal/utils/ui.pyRI   ’   s   t   BaseDownloadProgressBarc           B`  s   e  Z e j Z d  Z d Z RS(   s   %(percent)d%%s0   %(downloaded)s %(download_speed)s %(pretty_eta)s(   R/   R0   t   syst   stdoutR   R:   R6   (    (    (    s5   lib/python2.7/site-packages/pip/_internal/utils/ui.pyRQ   Ώ   s   	t   DefaultDownloadProgressBarc           B`  s   e  Z RS(    (   R/   R0   (    (    (    s5   lib/python2.7/site-packages/pip/_internal/utils/ui.pyRT   Κ   s   t   DownloadSilentBarc           B`  s   e  Z RS(    (   R/   R0   (    (    (    s5   lib/python2.7/site-packages/pip/_internal/utils/ui.pyRU   Ο   s   t   DownloadBarc           B`  s   e  Z RS(    (   R/   R0   (    (    (    s5   lib/python2.7/site-packages/pip/_internal/utils/ui.pyRV   Σ   s   t   DownloadFillingCirclesBarc           B`  s   e  Z RS(    (   R/   R0   (    (    (    s5   lib/python2.7/site-packages/pip/_internal/utils/ui.pyRW   Ψ   s   t   DownloadBlueEmojiProgressBarc           B`  s   e  Z RS(    (   R/   R0   (    (    (    s5   lib/python2.7/site-packages/pip/_internal/utils/ui.pyRX   έ   s   t   DownloadProgressSpinnerc           B`  s)   e  Z e j Z d  Z d   Z d   Z RS(   s!   %(downloaded)s %(download_speed)sc         C`  s4   t  |  d  s' t j |  j  |  _ n  t |  j  S(   Nt   _phaser(   t   hasattrt	   itertoolst   cycleR   RZ   RC   (   R)   (    (    s5   lib/python2.7/site-packages/pip/_internal/utils/ui.pyt
   next_phaseθ   s    c         C`  sm   |  j  |  } |  j   } |  j |  } d j | | r; d n d | | rM d n d | g  } |  j |  d  S(   NR?   R5   (   R:   R^   R6   R   t   writeln(   R)   R:   t   phaseR6   t   line(    (    s5   lib/python2.7/site-packages/pip/_internal/utils/ui.pyR3   ν   s    (   R/   R0   RR   RS   R   R6   R^   R3   (    (    (    s5   lib/python2.7/site-packages/pip/_internal/utils/ui.pyRY   β   s   		t   offt   ont   asciit   prettyt   emojic         C`  sF   | d  k s | d k r* t |  d   j St |  d d |  j Sd  S(   Ni    i   t   max(   R   t	   BAR_TYPESRG   (   t   progress_barRg   (    (    s5   lib/python2.7/site-packages/pip/_internal/utils/ui.pyt   DownloadProgressProvider  s    c         c`  sc   t  r d  VnQ |  j   s0 t j   t j k r8 d  Vn' |  j t  z	 d  VWd  |  j t  Xd  S(   N(	   R   RK   t   loggert   getEffectiveLevelt   loggingt   INFOt   writeR   R   (   R   (    (    s5   lib/python2.7/site-packages/pip/_internal/utils/ui.pyt   hidden_cursor  s    "	t   RateLimiterc           B`  s#   e  Z d    Z d   Z d   Z RS(   c         C`  s   | |  _  d |  _ d  S(   Ni    (   t   _min_update_interval_secondst   _last_update(   R)   t   min_update_interval_seconds(    (    s5   lib/python2.7/site-packages/pip/_internal/utils/ui.pyR&   )  s    	c         C`  s&   t  j    } | |  j } | |  j k S(   N(   t   timeRs   Rr   (   R)   t   nowt   delta(    (    s5   lib/python2.7/site-packages/pip/_internal/utils/ui.pyt   ready.  s    c         C`  s   t  j    |  _ d  S(   N(   Ru   Rs   (   R)   (    (    s5   lib/python2.7/site-packages/pip/_internal/utils/ui.pyt   reset4  s    (   R/   R0   R&   Rx   Ry   (    (    (    s5   lib/python2.7/site-packages/pip/_internal/utils/ui.pyRq   (  s   		t   SpinnerInterfacec           B`  s   e  Z d    Z d   Z RS(   c         C`  s   t     d  S(   N(   t   NotImplementedError(   R)   (    (    s5   lib/python2.7/site-packages/pip/_internal/utils/ui.pyt   spin:  s    c         C`  s   t     d  S(   N(   R{   (   R)   t   final_status(    (    s5   lib/python2.7/site-packages/pip/_internal/utils/ui.pyR,   >  s    (   R/   R0   R|   R,   (    (    (    s5   lib/python2.7/site-packages/pip/_internal/utils/ui.pyRz   9  s   	t   InteractiveSpinnerc           B`  s5   e  Z d d  d d  Z d   Z d   Z d   Z RS(   s   -\|/g      ΐ?c         C`  s   | |  _  | d  k r! t j } n  | |  _ t |  |  _ t |  _ t	 j
 |  |  _ |  j j d t   |  j  d  d |  _ d  S(   NR5   s    ... i    (   t   _messageR   RR   RS   t   _fileRq   t   _rate_limiterRO   t	   _finishedR\   R]   t   _spin_cycleRo   R   t   _width(   R)   R:   R   t
   spin_charsRt   (    (    s5   lib/python2.7/site-packages/pip/_internal/utils/ui.pyR&   D  s    			"c         C`  sy   |  j  s t  d |  j } |  j j | d |  j |  |  j j |  t |  |  _ |  j j   |  j j   d  S(   Ns   R5   (	   R   t   AssertionErrorR   R   Ro   t   lenRM   R   Ry   (   R)   t   statust   backup(    (    s5   lib/python2.7/site-packages/pip/_internal/utils/ui.pyt   _writeS  s    c         C`  s:   |  j  r d  S|  j j   s  d  S|  j t |  j   d  S(   N(   R   R   Rx   R   RC   R   (   R)   (    (    s5   lib/python2.7/site-packages/pip/_internal/utils/ui.pyR|   _  s
    	c         C`  sD   |  j  r d  S|  j |  |  j j d  |  j j   t |  _  d  S(   Ns   
(   R   R   R   Ro   RM   t   True(   R)   R}   (    (    s5   lib/python2.7/site-packages/pip/_internal/utils/ui.pyR,   g  s    	N(   R/   R0   R   R&   R   R|   R,   (    (    (    s5   lib/python2.7/site-packages/pip/_internal/utils/ui.pyR~   C  s
   		t   NonInteractiveSpinnerc           B`  s/   e  Z d  d  Z d   Z d   Z d   Z RS(   i<   c         C`  s2   | |  _  t |  _ t |  |  _ |  j d  d  S(   Nt   started(   R   RO   R   Rq   R   t   _update(   R)   R:   Rt   (    (    s5   lib/python2.7/site-packages/pip/_internal/utils/ui.pyR&   v  s    		c         C`  s7   |  j  s t  |  j j   t j d |  j |  d  S(   Ns   %s: %s(   R   R   R   Ry   Rk   t   infoR   (   R)   R   (    (    s5   lib/python2.7/site-packages/pip/_internal/utils/ui.pyR   }  s    c         C`  s1   |  j  r d  S|  j j   s  d  S|  j d  d  S(   Ns   still running...(   R   R   Rx   R   (   R)   (    (    s5   lib/python2.7/site-packages/pip/_internal/utils/ui.pyR|     s
    	c         C`  s.   |  j  r d  S|  j d | f  t |  _  d  S(   Ns   finished with status '%s'(   R   R   R   (   R)   R}   (    (    s5   lib/python2.7/site-packages/pip/_internal/utils/ui.pyR,     s    	(   R/   R0   R&   R   R|   R,   (    (    (    s5   lib/python2.7/site-packages/pip/_internal/utils/ui.pyR   u  s   		c         c`  s³   t  j j   r3 t j   t j k r3 t |   } n t |   } y t	 t  j  
 | VWd  QXWnA t
 k
 r | j d    n. t k
 r‘ | j d    n X| j d  d  S(   Nt   canceledt   errort   done(   RR   RS   RK   Rk   Rl   Rm   Rn   R~   R   Rp   t   KeyboardInterruptR,   t	   Exception(   R:   t   spinner(    (    s5   lib/python2.7/site-packages/pip/_internal/utils/ui.pyt   open_spinner  s    $(@   t
   __future__R    R   t
   contextlibR\   Rm   RR   Ru   R   R   R   t   pip._vendorR   t   pip._vendor.progressR   R   t   pip._vendor.progress.barR   R	   R
   t   pip._vendor.progress.spinnerR   t   pip._internal.utils.compatR   t   pip._internal.utils.loggingR   t   pip._internal.utils.miscR   t   pip._internal.utils.typingR   t   typingR   R   R   R   R   R   t	   getLoggerR/   Rk   R#   t   _BaseBart   objectR$   R2   R4   R9   RI   RQ   RT   RU   RV   RW   RX   RY   Rh   Rj   t   contextmanagerRp   Rq   Rz   R~   R   R   (    (    (    s5   lib/python2.7/site-packages/pip/_internal/utils/ui.pyt   <module>   sl   
	7	
	
2