
_i^                 @   s  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 e j d  d k Z e j	 j
 d  Z e j	 j
 d  o d e j k Z d e j k o d e j j d	 d
  k Z e j	 j
 d  o e o e Z d Z e j d  Z d d   Z d d d d  Z d d   Z d d   Z Gd d   d e j  Z Gd d   d e  Z e re Z e Z e  e f Z! e" e# f Z$ d d   Z% e& Z' d d   Z( e j d  Z) d d    Z* y d  d l+ Z+ Wn e, k
 rYn Xd! d    Z* y d  d l- Z- Wn e, k
 rYn Xd" d    Z* d# d$   Z. d% d&   Z/ d' d(   Z0 d) d*   Z1 d d d+ d,  Z2 d d d- d.  Z3 d d d/ d0  Z4 d1 d2   Z5 nDd  d l Z e  Z e6 Z e  f Z! e" f Z$ e7 Z' d3 d   Z. d4 d   Z% d5 d   Z( d d6 d7  Z8 d d8 d9  Z9 d: d;   Z: d< d=   Z; d> d?   Z< d@ dA   Z= dB dC   Z> d d dD dE  Z? d dF dG  Z@ d dH dI  ZA dJ d&   Z/ dK d(   Z0 dL d*   Z1 d d dM d,  Z2 d d dN d.  Z3 d d dO d0  Z4 dP d2   Z5 d dQ dR  ZB dS dT   ZC dU d dV d dW dX  ZD eE e dY  r(e jF ZG dZ ZH n e jI ZG e ZH Gd[ d\   d\ e  ZJ d ZK d ZL d ZM d] d^   ZN d_ d`   ZO d d da db  ZP e rdc Z dd de lQ mR ZR mS ZS df dg   ZT e rd
 dh di  Z y d  d lL ZL Wn e, k
 rYq=Xe   ZU d dj dk  ZK dl dm   ZM n$ dn dg   ZT do d   ZR dp d   ZS dq dr   ZV ds dt   ZW du dv   ZX eX dw d   e2  ZY eX dx d   e3  ZZ eX dy d   e4  Z[ dz e/ d{ e0 d| e1 i Z\ dz e2 d{ e3 d| e4 i Z] d S)}    N)WeakKeyDictionary   cygwinwinZGCCZAPPENGINE_RUNTIMEzDevelopment/ZSERVER_SOFTWARE P   z\033\[[;?0-9]*[a-zA-Z]c               C   s   t  j   p t  j   S)N)sysgetfilesystemencodinggetdefaultencoding r   r   ./tmp/pip-build-5gj8f0j9/click/click/_compat.pyget_filesystem_encoding   s    r   Fc          
   C   sL   | d  k r t  |   } | d  k r* d } t |  | | d d d | d | S)Nreplaceline_bufferingTforce_readableforce_writable)get_best_encoding_NonClosingTextIOWrapper)streamencodingerrorsr   r   r   r   r   _make_text_stream   s    r   c             C   s7   y t  j |   j d k SWn t k
 r2 d SYn Xd S)z$Checks if a given encoding is ascii.asciiFN)codecslookupnameLookupError)r   r   r   r   is_ascii_encoding,   s    r   c             C   s2   t  |  d d  p t j   } t |  r. d S| S)z1Returns the default stream encoding if not found.r   Nzutf-8)getattrr   r
   r   )r   rvr   r   r   r   4   s    r   c               @   sX   e  Z d  Z d d d d  Z e r< d d   Z d d   Z d d	   Z d
 d   Z d S)r   Fc             K   s9   t  | | |  |  _ } t j j |  | | | |  d  S)N)_FixupStream_streamioTextIOWrapper__init__)selfr   r   r   r   r   extrar   r   r   r$   =   s    	z!_NonClosingTextIOWrapper.__init__c             C   sg   t  | t  s t |  rT y |  j   Wn t k
 r= Yn X|  j j t |   St j j |  |  S)N)	
isinstancestris_bytesflush	Exceptionbufferwriter"   r#   )r%   xr   r   r   r-   N   s    z_NonClosingTextIOWrapper.writec             C   s"   x | D] } |  j  |  q Wd  S)N)r-   )r%   linesliner   r   r   
writelinesW   s    z#_NonClosingTextIOWrapper.writelinesc             C   s'   y |  j    Wn t k
 r" Yn Xd  S)N)detachr+   )r%   r   r   r   __del__[   s    z _NonClosingTextIOWrapper.__del__c             C   s   |  j  j   S)N)r!   isatty)r%   r   r   r   r4   a   s    z_NonClosingTextIOWrapper.isattyN)	__name__
__module____qualname__r$   PY2r-   r1   r3   r4   r   r   r   r   r   <   s   		r   c               @   sd   e  Z d  Z d Z d d d d  Z d d   Z d d   Z d	 d
   Z d d   Z d d   Z	 d S)r    aQ  The new io interface needs more from streams than streams
    traditionally implement.  As such, this fix-up code is necessary in
    some circumstances.

    The forcing of readable and writable flags are there because some tools
    put badly patched objects on sys (one such offender are certain version
    of jupyter notebook).
    Fc             C   s   | |  _  | |  _ | |  _ d  S)N)r!   _force_readable_force_writable)r%   r   r   r   r   r   r   r$   p   s    		z_FixupStream.__init__c             C   s   t  |  j |  S)N)r   r!   )r%   r   r   r   r   __getattr__u   s    z_FixupStream.__getattr__c             C   sQ   t  |  j d d   } | d  k	 r+ | |  St rA |  j j |  S|  j j |  S)Nread1)r   r!   r8   readlineread)r%   sizefr   r   r   r<   x   s    
z_FixupStream.read1c             C   sf   |  j  r d St |  j d d   } | d  k	 r5 |   Sy |  j j d  Wn t k
 ra d SYn Xd S)NTreadabler   F)r9   r   r!   r>   r+   )r%   r.   r   r   r   rA      s    		z_FixupStream.readablec             C   s   |  j  r d St |  j d d   } | d  k	 r5 |   Sy |  j j d  Wn? t k
 r y |  j j d  Wn t k
 r d SYn XYn Xd S)NTwritabler       F)r:   r   r!   r-   r+   )r%   r.   r   r   r   rB      s    	z_FixupStream.writablec             C   sb   t  |  j d d   } | d  k	 r( |   Sy |  j j |  j j    Wn t k
 r] d SYn Xd S)NseekableFT)r   r!   seektellr+   )r%   r.   r   r   r   rD      s    	z_FixupStream.seekableN)
r5   r6   r7   __doc__r$   r;   r<   rA   rB   rD   r   r   r   r   r    f   s   r    c             C   s
   |  j    S)N)	iteritems)r.   r   r   r   <lambda>   s    rI   c             C   s   t  |  t t f  S)N)r'   r,   	bytearray)r.   r   r   r   r)      s    r)   z^[a-zA-Z_][a-zA-Z0-9_]*$c             C   s   |  S)Nr   )r@   r   r   r   set_binary_mode   s    rK   c             C   s<   y |  j    } Wn t k
 r$ Yn Xt j | t j  |  S)N)filenor+   msvcrtZsetmodeosO_BINARY)r@   rL   r   r   r   rK      s    c             C   s\   y |  j    } Wn t k
 r$ Yn4 Xt j | t j  } t j | t j | t j @ |  S)N)rL   r+   fcntlF_GETFLF_SETFLrN   
O_NONBLOCK)r@   rL   flagsr   r   r   rK      s    c             C   s   t  j |   d  k	 S)N)_identifier_research)r.   r   r   r   isidentifier   s    rW   c               C   s   t  t j  S)N)rK   r   stdinr   r   r   r   get_binary_stdin   s    rY   c               C   s   t  d  t t j  S)Nstdout)_wrap_std_streamrK   r   rZ   r   r   r   r   get_binary_stdout   s    
r\   c               C   s   t  d  t t j  S)Nstderr)r[   rK   r   r]   r   r   r   r   get_binary_stderr   s    
r^   c             C   s>   t  t j |  |  } | d  k	 r% | St t j |  | d d S)Nr   T)_get_windows_console_streamr   rX   r   )r   r   r   r   r   r   get_text_stdin   s    r`   c             C   sH   t  d  t t j |  |  } | d  k	 r/ | St t j |  | d d S)NrZ   r   T)r[   r_   r   rZ   r   )r   r   r   r   r   r   get_text_stdout   s
    
ra   c             C   sH   t  d  t t j |  |  } | d  k	 r/ | St t j |  | d d S)Nr]   r   T)r[   r_   r   r]   r   )r   r   r   r   r   r   get_text_stderr  s
    
rb   c             C   s(   t  |  t  r$ |  j t   d  }  |  S)Nr   )r'   bytesdecoder   )valuer   r   r   filename_to_ui  s    rf   c             C   s
   |  j    S)N)rW   )r.   r   r   r   rI     s    c             C   s   t  |  j    S)N)iteritems)r.   r   r   r   rI     s    c             C   s   t  |  t t t f  S)N)r'   rc   
memoryviewrJ   )r.   r   r   r   r)     s    c             C   s7   y t  |  j d  t  SWn t k
 r2 | SYn Xd  S)Nr   )r'   r>   rc   r+   )r   defaultr   r   r   _is_binary_reader   s    rk   c             C   sX   y |  j  d  Wn@ t k
 rS y |  j  d  d SWn t k
 rJ Yn X| SYn Xd S)NrC   r   FT)r-   r+   )r   rj   r   r   r   _is_binary_writer(  s    	rl   c             C   sH   t  |  d  r |  St |  d d   } | d  k	 rD t  | d  rD | Sd  S)NFr,   T)rk   r   )r   bufr   r   r   _find_binary_reader4  s
    rn   c             C   sH   t  |  d  r |  St |  d d   } | d  k	 rD t  | d  rD | Sd  S)NFr,   T)rl   r   )r   rm   r   r   r   _find_binary_writerC  s
    ro   c             C   s   t  t |  d d  p d  S)z3A stream is misconfigured if its encoding is ASCII.r   Nr   )r   r   )r   r   r   r   _stream_is_misconfiguredR  s    rp   c             C   s4   t  |  | d  } | | k p3 | d k o3 | d k	 S)zA stream attribute is compatible if it is equal to the
        desired value or the desired value is unset and the attribute
        has a value.
        N)r   )r   attrre   Zstream_valuer   r   r   _is_compat_stream_attrZ  s    rr   c             C   s"   t  |  d |  o! t  |  d |  S)zkCheck if a stream's encoding and errors attributes are
        compatible with the desired values.
        r   r   )rr   )r   r   r   r   r   r   _is_compatible_text_streamb  s    rs   c             C   s   | |  d  r |  } nK t  |  | |  rG | d  k o? t |   rG |  S| |   } | d  k rc |  S| d  k ru d } t | | | d | d | S)NFr   r   r   )rs   rp   r   )Ztext_streamr   r   Z	is_binaryZfind_binaryr   r   Zbinary_readerr   r   r   _force_correct_text_streamj  s     		rt   c             C   s   t  |  | | t t d | S)Nr   )rt   rk   rn   )Ztext_readerr   r   r   r   r   r   _force_correct_text_reader  s    ru   c             C   s   t  |  | | t t d | S)Nr   )rt   rl   ro   )Ztext_writerr   r   r   r   r   r   _force_correct_text_writer  s    rv   c              C   s+   t  t j  }  |  d  k r' t d   |  S)Nz6Was not able to determine binary stream for sys.stdin.)rn   r   rX   RuntimeError)readerr   r   r   rY     s    c              C   s+   t  t j  }  |  d  k r' t d   |  S)Nz7Was not able to determine binary stream for sys.stdout.)ro   r   rZ   rw   )writerr   r   r   r\     s
    	c              C   s+   t  t j  }  |  d  k r' t d   |  S)Nz7Was not able to determine binary stream for sys.stderr.)ro   r   r]   rw   )ry   r   r   r   r^     s
    	c             C   s>   t  t j |  |  } | d  k	 r% | St t j |  | d d S)Nr   T)r_   r   rX   ru   )r   r   r   r   r   r   r`     s
    c             C   s>   t  t j |  |  } | d  k	 r% | St t j |  | d d S)Nr   T)r_   r   rZ   rv   )r   r   r   r   r   r   ra     s
    c             C   s>   t  t j |  |  } | d  k	 r% | St t j |  | d d S)Nr   T)r_   r   r]   rv   )r   r   r   r   r   r   rb     s
    c             C   sI   t  |  t  r' |  j t   d  }  n |  j d d  j d d  }  |  S)Nr   zutf-8surrogateescape)r'   rc   rd   r   encode)re   r   r   r   rf     s    c             C   sa   t  |  d  r |  j } n! | d  k	 r0 | } n t |   } t | t  r] | j d d  } | S)Nstrerrorzutf-8r   )hasattrr|   r(   r'   rc   rd   )erj   msgr   r   r   get_streerror  s    	r   c             C   s   d | k } | r i  } n d | d | i } t  s: | rM t j |  | |  St j |  d j | j d d    } t | |  S)a+  On Python 2, :func:`io.open` returns a text file wrapper that
    requires passing ``unicode`` to ``write``. Need to open the file in
    binary mode then wrap it in a subclass that can write ``str`` and
    ``unicode``.

    Also handles not passing ``encoding`` and ``errors`` in binary mode.
    br   r   z{}btr   )r8   r"   openformatr   r   )filemoder   r   binarykwargsr@   r   r   r   _wrap_io_open  s    	'r   rstrictc                s  d   k } |  d k r t    f d d   d d d g D  rl | rS t   d f St d	 | d
 |  d f S| r t   d f St d	 | d
 |  d f S| s t |    | |  d f Sd   k r t d   d   k r t d   d   k r t d   d d  l } d d  l } y t	 j
 |   j } Wn t k
 rGd  } Yn Xt	 j t	 j Bt	 j B}	 | r{|	 t t	 d d  O}	 x t	 j j t	 j j |   d j | j d    }
 y, t	 j |
 |	 | d  k rd n |  } PWq~t k
 rj} zk | j | j k sRt	 j d k rU| j | j k rUt	 j j | j  rUt	 j | j t	 j  rUw~  WYd  d  } ~ Xq~Xq~W| d  k	 rt	 j |
 |  t |   | |  } t | |
 t	 j j  |    d f S)Nr   -c             3   s   |  ] } |   k Vq d  S)Nr   ).0m)r   r   r   	<genexpr>  s    zopen_stream.<locals>.<genexpr>war.   Fr   r   TzAppending to an existing file is not supported, because that would involve an expensive `copy`-operation to a temporary file. Open the file in normal `w`-mode and copy explicitly if that's what you're after.z&Use the `overwrite`-parameter instead.z,Atomic writes only make sense with `w`-mode.r   rO   z.__atomic-write{:08x}       i  ntl        )!anyr\   ra   rY   r`   r   
ValueErrorerrnorandomrN   statst_modeOSErrorO_RDWRO_CREATO_EXCLr   pathjoindirnamer   	randranger   EEXISTr   ZEACCESisdirfilenameaccessW_OKchmod_AtomicFilerealpath)r   r   r   r   Zatomicr   r   r   ZpermrT   tmp_filenamefdr~   r@   r   )r   r   open_stream  s\    (		'r   r   Tc               @   sm   e  Z d  Z d d   Z e d d    Z d d d  Z d d	   Z d
 d   Z d d   Z	 d d   Z
 d S)r   c             C   s(   | |  _  | |  _ | |  _ d |  _ d  S)NF)_f_tmp_filename_real_filenameclosed)r%   r@   r   Zreal_filenamer   r   r   r$   T  s    			z_AtomicFile.__init__c             C   s   |  j  S)N)r   )r%   r   r   r   r   Z  s    z_AtomicFile.nameFc             C   si   |  j  r d  S|  j j   t sI y t j |  j  Wn t k
 rH Yn Xt |  j	 |  j  d |  _  d  S)NT)
r   r   close_can_replacerN   remover   r   _replacer   )r%   deleter   r   r   r   ^  s    	z_AtomicFile.closec             C   s   t  |  j |  S)N)r   r   )r%   r   r   r   r   r;   j  s    z_AtomicFile.__getattr__c             C   s   |  S)Nr   )r%   r   r   r   	__enter__m  s    z_AtomicFile.__enter__c             C   s   |  j  d | d  k	  d  S)Nr   )r   )r%   exc_type	exc_valuetbr   r   r   __exit__p  s    z_AtomicFile.__exit__c             C   s   t  |  j  S)N)reprr   )r%   r   r   r   __repr__s  s    z_AtomicFile.__repr__N)r5   r6   r7   r$   propertyr   r   r;   r   r   r   r   r   r   r   r   S  s   r   c             C   s   t  j d |   S)Nr   )_ansi_resub)re   r   r   r   
strip_ansi|  s    r   c             C   sB   t  r
 d  Sx" t |  t t f  r. |  j }  q W|  j j j d  S)Nz
ipykernel.)WINr'   r    r   r!   	__class__r6   
startswith)r   r   r   r   _is_jupyter_kernel_output  s
    r   c             C   s>   | d  k r9 |  d  k r! t  j }  t |   o8 t |   S| S)N)r   rX   r4   r   )r   colorr   r   r   should_strip_ansi  s
    	r   O   r   )r_   r[   c              C   s   d d  l  }  |  j   S)Nr   )localegetpreferredencoding)r   r   r   r   _get_argv_encoding  s    r   c             C   sE   t  j j   |  r) t   } | j |   t   } | j   j d  S)Nz
)r   r]   r*   _default_text_stdoutr-   _default_text_stdinr=   rstrip)promptrZ   rX   r   r   r   	raw_input  s    		r   c                s   y t  j |   } Wn t k
 r- d } Yn X| d k	 r> | St |  |  } t j |  d |   j } | j      f d d   } | | _ y | t  |  <Wn t k
 r Yn X| S)a  This function wraps a stream so that calls through colorama
            are issued to the win32 console API to recolor on demand.  It
            also ensures to reset the colors if a write call is interrupted
            to not destroy the console afterwards.
            Nstripc          	      s*   y   |   SWn  j      Yn Xd  S)N)	reset_all)s)_writeansi_wrapperr   r   _safe_write  s
    
z'auto_wrap_for_ansi.<locals>._safe_write)_ansi_stream_wrappersgetr+   r   coloramaAnsiToWin32r   r-   )r   r   cachedr   r   r   r   )r   r   r   auto_wrap_for_ansi  s"    			r   c              C   s9   t  j j t  j j  j }  |  j |  j |  j |  j f S)N)	r   win32GetConsoleScreenBufferInfoSTDOUTZsrWindowZRightZLeftZBottomZTop)r   r   r   r   get_winterm_size  s    	r   c               C   s   t  t j d d   p t   S)Nr   )r   r   rX   r   r   r   r   r   r     s    c              G   s   d  S)Nr   )r.   r   r   r   rI     s    c              G   s   d  S)Nr   )r.   r   r   r   rI     s    c             C   s   t  t |    S)N)lenr   )r.   r   r   r   term_len  s    r   c             C   s+   y |  j    SWn t k
 r& d SYn Xd  S)NF)r4   r+   )r   r   r   r   r4     s    r4   c                s%   t          f d d   } | S)Nc                 s      }  y   j  |   } Wn t k
 r6 d  } Yn X| d  k	 rG | S   } y    }  |   |  <Wn t k
 r{ Yn X| S)N)r   r+   )r   r   )cachesrc_funcwrapper_funcr   r   func  s    			z&_make_cached_stream_func.<locals>.func)r   )r   r   r   r   )r   r   r   r   _make_cached_stream_func  s    	r   c               C   s   t  j S)N)r   rX   r   r   r   r   rI     s    c               C   s   t  j S)N)r   rZ   r   r   r   r   rI     s    c               C   s   t  j S)N)r   r]   r   r   r   r   rI     s    rX   rZ   r]   )^r   r"   rN   rer   weakrefr   version_infor8   platformr   ZCYGWINversionZMSYS2environr   Z
APP_ENGINEr   ZDEFAULT_COLUMNScompiler   r   r   r   r   r#   r   objectr    unicode	text_typer   r(   string_typesintlongZ	int_typesrH   xrangeZ
range_typer)   rU   rK   rM   ImportErrorrP   rW   rY   r\   r^   r`   ra   rb   rf   inputrangerk   rl   rn   ro   rp   rr   rs   rt   ru   rv   r   r   r   r}   r   r   r   renamer   r   r   r   r   r   r   Z_winconsoler_   r[   r   r   r   r4   r   r   r   Z_default_text_stderrZbinary_streamsZtext_streamsr   r   r   r   <module>   s   ! *C	
		#

J			$		