U
    (Q^g[                     @   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	
dZdejkoddejd kZej	
dove Zd	Ze d
Zdd ZdrddZdd Zdd ZG dd dejZG dd deZereZeZeZeefZe e!fZ"dd Z#e$Z%dd Z&e dZ'dd Z(zd dl)Z)W n e*k
r4   Y n
X dd Z(zd dl+Z+W n e*k
r`   Y n
X d d Z(d!d" Z,d#d$ Z-d%d& Z.d'd( Z/dsd)d*Z0dtd+d,Z1dud-d.Z2d/d0 Z3nd dlZeZe4ZefZe fZ"e5Z%d1d Z,d2d Z#d3d Z&dvd4d5Z6dwd6d7Z7d8d9 Z8d:d; Z9d<d= Z:d>d? Z;dxd@dAZ<dydBdCZ=dDd$ Z-dEd& Z.dFd( Z/dzdGd*Z0d{dHd,Z1d|dId.Z2dJd0 Z3d}dKdLZ>d~dOdPZ?e@edQrejAZBdRZCnejDZBe ZCG dSdT dTeZEdZFdZGdZHdUdV ZIddWdXZJerFdYZdZd[lKmLZLmMZM d\d] ZNerdd_d`Zzd dlGZGW n e*k
r*   Y nX e ZOddadbZFdcdd ZHnded] ZNdfd ZLdgd ZMdhdi ZPdjdk ZQdldm ZReRdnd e0ZSeRdod e1ZTeRdpd e2ZUe-e.e/dqZVe0e1e2dqZWdS )    NWeakKeyDictionary   cygwinAPPENGINE_RUNTIMEzDevelopment/SERVER_SOFTWAREwinP   z\033\[((?:\d|;)*)([a-zA-Z])c                   C   s   t  pt  S N)sysgetfilesystemencodinggetdefaultencoding r   r   0/tmp/pip-install-bd4o36v9/click/click/_compat.pyget_filesystem_encoding   s    r   Fc                 C   s0   |d krt | }|d krd}t| ||d||dS )NreplaceT)line_bufferingforce_readableforce_writable)get_best_encoding_NonClosingTextIOWrapper)streamencodingerrorsr   r   r   r   r   _make_text_stream   s    r   c                 C   s.   zt | jdkW S  tk
r(   Y dS X d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   s$   t | ddpt }t|r dS |S )z1Returns the default stream encoding if not found.r   Nutf-8)getattrr   r   r    r   rvr   r   r   r   -   s    r   c                   @   s:   e Zd ZdddZer&dd Zdd Zdd	 Zd
d ZdS )r   Fc                 K   s,   t ||| | _}tjj| |||f| d S r
   )_FixupStream_streamioTextIOWrapper__init__)selfr   r   r   r   r   extrar   r   r   r)   7   s    
z!_NonClosingTextIOWrapper.__init__c                 C   sR   t |tst|rDz|   W n tk
r2   Y nX | jt|S tj| |S r
   )	
isinstancestris_bytesflush	Exceptionbufferwriter'   r(   r*   xr   r   r   r2   A   s    z_NonClosingTextIOWrapper.writec                 C   s   |D ]}|  | qd S r
   )r2   )r*   linesliner   r   r   
writelinesJ   s    z#_NonClosingTextIOWrapper.writelinesc                 C   s&   z|    W n tk
r    Y nX d S r
   )detachr0   r*   r   r   r   __del__N   s    z _NonClosingTextIOWrapper.__del__c                 C   s
   | j  S r
   )r&   isattyr9   r   r   r   r;   T   s    z_NonClosingTextIOWrapper.isattyN)FF)	__name__
__module____qualname__r)   PY2r2   r7   r:   r;   r   r   r   r   r   5   s      
		r   c                   @   sB   e Zd ZdZ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 r
   )r&   _force_readable_force_writable)r*   r   r   r   r   r   r   r)   c   s    z_FixupStream.__init__c                 C   s   t | j|S r
   )r"   r&   r*   r   r   r   r   __getattr__h   s    z_FixupStream.__getattr__c                 C   s:   t | jdd }|d k	r||S tr.| j|S | j|S )Nread1)r"   r&   r?   readlineread)r*   sizefr   r   r   rD   k   s    z_FixupStream.read1c                 C   sR   | j r
dS t| jdd }|d k	r&| S z| jd W n tk
rL   Y dS X dS )NTreadabler   F)r@   r"   r&   rF   r0   r3   r   r   r   rI   v   s    z_FixupStream.readablec                 C   sz   | j r
dS t| jdd }|d k	r&| S z| jd W n> tk
rt   z| jd W n tk
rn   Y Y dS X Y nX dS )NTwritable     F)rA   r"   r&   r2   r0   r3   r   r   r   rJ      s    z_FixupStream.writablec                 C   sN   t | jdd }|d k	r| S z| j| j  W n tk
rH   Y dS X dS )NseekableFT)r"   r&   seektellr0   r3   r   r   r   rM      s    z_FixupStream.seekableN)FF)
r<   r=   r>   __doc__r)   rC   rD   rI   rJ   rM   r   r   r   r   r%   Y   s   	
r%   c                 C   s   |   S r
   )	iteritemsr4   r   r   r   <lambda>   rL   rS   c                 C   s   t | ttfS r
   )r,   r1   	bytearrayrR   r   r   r   r.      s    r.   z^[a-zA-Z_][a-zA-Z0-9_]*$c                 C   s   | S r
   r   )rH   r   r   r   set_binary_mode   s    rU   c                 C   s4   z|   }W n tk
r    Y nX t|tj | S r
   )filenor0   msvcrtZsetmodeosO_BINARY)rH   rV   r   r   r   rU      s    c                 C   sL   z|   }W n tk
r    Y n(X t|tj}t|tj|tj @  | S r
   )rV   r0   fcntlZF_GETFLZF_SETFLrX   
O_NONBLOCK)rH   rV   flagsr   r   r   rU      s    c                 C   s   t | d k	S r
   )_identifier_researchrR   r   r   r   isidentifier   s    r_   c                   C   s
   t tjS r
   )rU   r   stdinr   r   r   r   get_binary_stdin   s    ra   c                   C   s   t d ttjS )Nstdout)_wrap_std_streamrU   r   rb   r   r   r   r   get_binary_stdout   s    rd   c                   C   s   t d ttjS )Nstderr)rc   rU   r   re   r   r   r   r   get_binary_stderr   s    rf   c                 C   s,   t tj| |}|d k	r|S ttj| |ddS NTr   )_get_windows_console_streamr   r`   r   r   r   r$   r   r   r   get_text_stdin   s    
rk   c                 C   s4   t d ttj| |}|d k	r"|S ttj| |ddS )Nrb   Tr   )rc   ri   r   rb   r   rj   r   r   r   get_text_stdout   s    
rm   c                 C   s4   t d ttj| |}|d k	r"|S ttj| |ddS )Nre   Trl   )rc   ri   r   re   r   rj   r   r   r   get_text_stderr   s    
rn   c                 C   s   t | tr| t d} | S )Nr   )r,   bytesdecoder   valuer   r   r   filename_to_ui  s    
rs   c                 C   s   |   S r
   )r_   rR   r   r   r   rS     rL   c                 C   s   t |  S r
   )iteritemsrR   r   r   r   rS     rL   c                 C   s   t | tttfS r
   )r,   ro   
memoryviewrT   rR   r   r   r   r.     s    c                 C   s0   zt | dtW S  tk
r*   | Y S X d S Nr   )r,   rF   ro   r0   r   defaultr   r   r   _is_binary_reader  s    rz   c                 C   sT   z|  d W n@ tk
rN   z|  d W Y dS  tk
rD   Y nX | Y S X dS )NrL   rK   FT)r2   r0   rx   r   r   r   _is_binary_writer  s    

r{   c                 C   s4   t | dr| S t| dd }|d k	r0t |dr0|S d S NFr1   T)rz   r"   r   bufr   r   r   _find_binary_reader&  s
    
r   c                 C   s4   t | dr| S t| dd }|d k	r0t |dr0|S d S r|   )r{   r"   r}   r   r   r   _find_binary_writer5  s
    
r   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_misconfiguredD  s    r   c                 C   s@   t | dd }t | dd }||kr,||kr,dS |d kr<|d k	S dS )Nr   r   TF)r"   )r   r   r   Zstream_encodingZstream_errorsr   r   r   _is_compatible_text_streamL  s    r   c                 C   sd   t | dr| }n8|d kr$t| s$| S t| ||r4| S t| }|d krH| S |d krTd}t||||dS )NFr   rh   )rz   r   r   r   r   )Ztext_readerr   r   r   Zbinary_readerr   r   r   _force_correct_text_reader[  s    
r   c                 C   sd   t | dr| }n8|d kr$t| s$| S t| ||r4| S t| }|d krH| S |d krTd}t||||dS )NFr   rl   )r{   r   r   r   r   )Ztext_writerr   r   r   Zbinary_writerr   r   r   _force_correct_text_writery  s    
r   c                  C   s   t tj} | d krtd| S )Nz6Was not able to determine binary stream for sys.stdin.)r   r   r`   RuntimeError)readerr   r   r   ra     s    
c                  C   s   t tj} | d krtd| S )Nz7Was not able to determine binary stream for sys.stdout.)r   r   rb   r   writerr   r   r   rd     s    
c                  C   s   t tj} | d krtd| S )Nz7Was not able to determine binary stream for sys.stderr.)r   r   re   r   r   r   r   r   rf     s    
c                 C   s,   t tj| |}|d k	r|S ttj| |ddS rg   )ri   r   r`   r   rj   r   r   r   rk     s    
c                 C   s,   t tj| |}|d k	r|S ttj| |ddS NTrl   )ri   r   rb   r   rj   r   r   r   rm     s    
c                 C   s,   t tj| |}|d k	r|S ttj| |ddS r   )ri   r   re   r   rj   r   r   r   rn     s    
c                 C   s2   t | tr| t d} n| dddd} | S )Nr   r!   surrogateescape)r,   ro   rp   r   encoderq   r   r   r   rs     s    
 c                 C   sB   t | dr| j}n|d k	r |}nt| }t|tr>|dd}|S )Nstrerrorr!   r   )hasattrr   r-   r,   ro   rp   )ery   msgr   r   r   get_streerror  s    

r   rstrictc           	         s&  | dkrbt  fdddD r@d kr0t dfS t||ddfS d krRt dfS t||ddfS |s|d kr|t|  dfS tj|  ||ddfS d	 krtd
d krtdd krtddd l}|j	t
j| dd\}}|d k	rtj| ||d}nt
| }t||t
j| dfS )N-c                 3   s   | ]}| kV  qd S r
   r   ).0mmoder   r   	<genexpr>  s     zopen_stream.<locals>.<genexpr>)war4   bF)r   r   Tr   zAppending 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.r4   z&Use the `overwrite`-parameter instead.r   z,Atomic writes only make sense with `w`-mode.r   z.__atomic-write)dirprefix)anyrd   rm   ra   rk   openr'   
ValueErrortempfilemkstemprX   pathdirnamefdopen_AtomicFilerealpath)	filenamer   r   r   Zatomicr   fdtmp_filenamerH   r   r   r   open_stream  s8    



r   r   Tc                   @   sJ   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*   rH   r   Zreal_filenamer   r   r   r)     s    z_AtomicFile.__init__c                 C   s   | j S r
   )r   r9   r   r   r   r     s    z_AtomicFile.nameFc                 C   sV   | j r
d S | j  ts>zt| j W n tk
r<   Y nX t| j	| j d| _ d S )NT)
r   r   close_can_replacerX   remover   OSError_replacer   )r*   deleter   r   r   r     s    
z_AtomicFile.closec                 C   s   t | j|S r
   )r"   r   rB   r   r   r   rC   (  s    z_AtomicFile.__getattr__c                 C   s   | S r
   r   r9   r   r   r   	__enter__+  s    z_AtomicFile.__enter__c                 C   s   | j |d k	d d S )N)r   )r   )r*   exc_type	exc_valuetbr   r   r   __exit__.  s    z_AtomicFile.__exit__c                 C   s
   t | jS r
   )reprr   r9   r   r   r   __repr__1  s    z_AtomicFile.__repr__N)F)r<   r=   r>   r)   propertyr   r   rC   r   r   r   r   r   r   r   r     s   

r   c                 C   s   t d| S )NrK   )_ansi_resubrq   r   r   r   
strip_ansi:  s    r   c                 C   s&   |d kr | d krt j} t|  S | S r
   )r   r`   r;   )r   colorr   r   r   should_strip_ansi>  s
    
r   O      )ri   rc   c                  C   s   dd l } |  S rw   )localegetpreferredencoding)r   r   r   r   _get_argv_encodingO  s    r   rK   c                 C   s2   t j  | rt }||  t }| dS )Nz
)r   re   r/   _default_text_stdoutr2   _default_text_stdinrE   rstrip)promptrb   r`   r   r   r   	raw_inputT  s    

r   c                    s   zt | }W n tk
r&   d}Y nX |dk	r4|S t| |}tj| |dj}|j  fdd}||_z|t | < W n tk
r   Y n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&   z
 | W S        Y nX d S r
   )	reset_all)s_writeZansi_wrapperr   r   _safe_writet  s
    
z'auto_wrap_for_ansi.<locals>._safe_write)_ansi_stream_wrappersgetr0   r   coloramaAnsiToWin32r   r2   )r   r   cachedr   r$   r   r   r   r   auto_wrap_for_ansic  s"    

r   c                  C   s*   t jt jjj} | j| j | j| j fS r
   )	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   r`   r   r   r   r   r   r     s    c                  G   s   d S r
   r   rR   r   r   r   rS     rL   c                  G   s   d S r
   r   rR   r   r   r   rS     rL   c                 C   s   t t| S r
   )lenr   rR   r   r   r   term_len  s    r   c                 C   s&   z
|   W S  tk
r    Y dS X d S r   )r;   r0   r   r   r   r   r;     s    
r;   c                    s   t    fdd}|S )Nc                     sl    } z  | }W n tk
r,   d }Y nX |d k	r:|S  }z } | | < W n tk
rf   Y nX |S r
   )r   r0   r#   cachesrc_funcwrapper_funcr   r   func  s    
z&_make_cached_stream_func.<locals>.funcr   )r   r   r   r   r   r   _make_cached_stream_func  s    r   c                   C   s   t jS r
   )r   r`   r   r   r   r   rS     rL   c                   C   s   t jS r
   )r   rb   r   r   r   r   rS     rL   c                   C   s   t jS r
   )r   re   r   r   r   r   rS     rL   )r`   rb   re   )FF)NN)NN)NN)F)F)F)F)NN)NN)NN)N)r   Nr   F)NN)rK   )N)Xrer'   rX   r   r   weakrefr   version_infor?   platform
startswithZCYGWINenvironZ
APP_ENGINEZWINZDEFAULT_COLUMNScompiler   r   r   r    r   r(   r   objectr%   unicode	text_typer-   ro   r   string_typesintlong	int_typesrQ   xrangeZ
range_typer.   r]   rU   rW   ImportErrorrZ   r_   ra   rd   rf   rk   rm   rn   rs   inputrangerz   r{   r   r   r   r   r   r   r   r   r   r   r   r   renamer   r   r   r   r   r   Z_winconsoleri   rc   r   r   r   r;   r   r   r   Z_default_text_stderrZbinary_streamsZtext_streamsr   r   r   r   <module>   s  

   
$C
	






 
 



	
  
1%



   