3
ezI              
   @   sV  U d dl 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 ej	j
dZej	j
do^dejkZdejkozdejjdd	kZej	j
doe oe ZdZejejejgejf  ejd
ZedddZdlejeje eje eeejdddZeedddZejedddZG dd dej Z!G dd dZ"dmejeedddZ#dnejeeddd Z$ejejej dd!d"Z%ejejej dd#d$Z&ejedd%d&Z'ejeeje ed'd(d)Z(ejeje eje ed*d+d,Z)doejeje eje ejejegef ejejgejej f eeejd-d.d/Z*dpejeje eje eejd0d1d2Z+dqejeje eje eejd3d4d5Z,ejdd6d7Z-ejdd8d9Z.ejdd:d;Z/dreje eje ejd<d=d>Z0dseje eje ejd<d?d@Z1dteje eje ejd<dAdBZ2ej3eej4e5f eeje eje ejdCdDdEZ6dueeeje eje eej7ejef dHdIdJZ8G dKdL dLZ9eedMdNdOZ:ejeddPdQZ;dvejej eje edRdSdTZ<ej	j
dr<er<dUdVl=m>Z> eddWdXZ?e Z@ejAejejf @dwejeje ejdRdYdZZn8edd[dXZ?ejeje eje ejej d\d]d^Z>ee5d_d`daZBejeddbdcZCejg ejf ejg ejf ejg ejf dddedfZDeDdgdh e0ZEeDdidh e1ZFeDdjdh e2ZGe-e.e/dkZHejIeejg ejf f He0e1e2dkZJejIeejeje eje gejf f JdS )x    N)WeakKeyDictionarycygwinwinZGCCZAPPENGINE_RUNTIMEzDevelopment/ZSERVER_SOFTWARE z\033\[[;?0-9]*[a-zA-Z])returnc               C   s   t j pt j S )N)sysgetfilesystemencodinggetdefaultencoding r
   r
   ./tmp/pip-build-3irwxpxt/click/click/_compat.pyget_filesystem_encoding   s    r   F)streamencodingerrorsforce_readableforce_writabler   c             C   s0   |d krt | }|d krd}t| ||d||dS )NreplaceT)line_bufferingr   r   )get_best_encoding_NonClosingTextIOWrapper)r   r   r   r   r   r
   r
   r   _make_text_stream   s    r   )r   r   c             C   s*   yt j| jdkS  tk
r$   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   )r   r   c             C   s$   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   5   s    r   c            	       s\   e Zd Zdejeje eje eeejdd fddZ	ddddZ
edd	d
Z  ZS )r   FN)r   r   r   r   r   extrar   c                s4   t jt jt||| | _}t j|||f| d S )N)tcastBinaryIO_FixupStream_streamsuper__init__)selfr   r   r   r   r   r   )	__class__r
   r   r&   >   s    	z!_NonClosingTextIOWrapper.__init__)r   c             C   s&   y| j   W n tk
r    Y nX d S )N)detach	Exception)r'   r
   r
   r   __del__L   s    z _NonClosingTextIOWrapper.__del__c             C   s
   | j j S )N)r$   isatty)r'   r
   r
   r   r,   R   s    z_NonClosingTextIOWrapper.isatty)FF)__name__
__module____qualname__r    r"   OptionalstrboolAnyr&   r+   r,   __classcell__r
   r
   )r(   r   r   =   s    r   c               @   sr   e Zd ZdZdejeedddZeej	dddZ
eed	d
dZedddZedddZed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).
    F)r   r   r   c             C   s   || _ || _|| _d S )N)r$   _force_readable_force_writable)r'   r   r   r   r
   r
   r   r&   a   s    z_FixupStream.__init__)r   r   c             C   s   t | j|S )N)r   r$   )r'   r   r
   r
   r   __getattr__k   s    z_FixupStream.__getattr__)sizer   c             C   s2   t | jdd }|d k	r&tjt||S | jj|S )Nread1)r   r$   r    r!   bytesread)r'   r8   fr
   r
   r   r9   n   s    z_FixupStream.read1)r   c             C   sX   | j r
dS t| jdd }|d k	r.tjt| S y| jjd W n tk
rR   dS X dS )NTreadabler   F)r5   r   r$   r    r!   r2   r;   r*   )r'   xr
   r
   r   r=   v   s    z_FixupStream.readablec             C   s~   | j r
dS t| jdd }|d k	r.tjt| S y| jjd W n: tk
rx   y| jjd W n tk
rr   dS X Y nX dS )NTwritabler       F)r6   r   r$   r    r!   r2   writer*   )r'   r>   r
   r
   r   r?      s    z_FixupStream.writablec             C   sT   t | jdd }|d k	r$tjt| S y| jj| jj  W n tk
rN   dS X dS )NseekableFT)r   r$   r    r!   r2   seektellr*   )r'   r>   r
   r
   r   rB      s    z_FixupStream.seekableN)FF)r-   r.   r/   __doc__r    r"   r2   r&   r1   r3   r7   intr:   r9   r=   r?   rB   r
   r
   r
   r   r#   W   s    r#   )r   defaultr   c             C   s*   yt | jdtS  tk
r$   |S X d S )Nr   )
isinstancer;   r:   r*   )r   rG   r
   r
   r   _is_binary_reader   s    rI   c             C   sL   y| j d W n8 tk
rF   y| j d dS  tk
r@   Y nX |S X dS )Nr@   r   FT)rA   r*   )r   rG   r
   r
   r   _is_binary_writer   s    
rJ   c             C   sH   t | drtjtj| S t| dd }|d k	rDt |drDtjtj|S d S )NFbufferT)rI   r    r!   r"   r   )r   bufr
   r
   r   _find_binary_reader   s    
rM   c             C   sH   t | drtjtj| S t| dd }|d k	rDt |drDtjtj|S d S )NFrK   T)rJ   r    r!   r"   r   )r   rL   r
   r
   r   _find_binary_writer   s    
rN   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_misconfigured   s    rO   )r   attrvaluer   c             C   s$   t | |d}||kp"|dko"|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   rP   rQ   Zstream_valuer
   r
   r   _is_compat_stream_attr   s    rR   )r   r   r   r   c             C   s   t | d|ot | d|S )zcCheck 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_stream   s    
rS   )text_streamr   r   	is_binaryfind_binaryr   r   r   c       	      C   s   || drt jt j| }nHt jt j| } t| ||rJ|d koBt|  rJ| S || }|d kr^| S |}|d krnd}t|||||dS )NFr   )r   r   )r    r!   r"   TextIOrS   rO   r   )	rT   r   r   rU   rV   r   r   Zbinary_readerZpossible_binary_readerr
   r
   r   _force_correct_text_stream   s$    	
rX   )text_readerr   r   r   r   c             C   s   t | ||tt|dS )N)r   )rX   rI   rM   )rY   r   r   r   r
   r
   r   _force_correct_text_reader!  s    rZ   )text_writerr   r   r   r   c             C   s   t | ||tt|dS )N)r   )rX   rJ   rN   )r[   r   r   r   r
   r
   r   _force_correct_text_writer1  s    r\   c              C   s   t tj} | d krtd| S )Nz6Was not able to determine binary stream for sys.stdin.)rM   r   stdinRuntimeError)readerr
   r
   r   get_binary_stdinA  s    
r`   c              C   s   t tj} | d krtd| S )Nz7Was not able to determine binary stream for sys.stdout.)rN   r   stdoutr^   )writerr
   r
   r   get_binary_stdoutH  s    
rc   c              C   s   t tj} | d krtd| S )Nz7Was not able to determine binary stream for sys.stderr.)rN   r   stderrr^   )rb   r
   r
   r   get_binary_stderrO  s    
re   )r   r   r   c             C   s,   t tj| |}|d k	r|S ttj| |ddS )NT)r   )_get_windows_console_streamr   r]   rZ   )r   r   r   r
   r
   r   get_text_stdinV  s    rg   c             C   s,   t tj| |}|d k	r|S ttj| |ddS )NT)r   )rf   r   ra   r\   )r   r   r   r
   r
   r   get_text_stdout_  s    rh   c             C   s,   t tj| |}|d k	r|S ttj| |ddS )NT)r   )rf   r   rd   r\   )r   r   r   r
   r
   r   get_text_stderrh  s    ri   )filemoder   r   r   c             C   s"   d|krt | |S t | |||dS )z?Handles not passing ``encoding`` and ``errors`` in binary mode.b)r   r   )open)rj   rk   r   r   r
   r
   r   _wrap_io_openq  s    
rn   rstrict)filenamerk   r   r   atomicr   c                s  d k}t j| dkrht fdddD rJ|r:t dfS t||d	dfS |rXt dfS t||d	dfS |s~t|  ||d
fS d krtdd krtdd krtddd l	}dd l
}yt j| j}W n tk
r   d }Y nX t jt jB t jB }	|r|	tt ddO }	xt jjt jj| d|jdd}
y"t j|
|	|d krNdn|}P W nt tk
r } zV|j	|jkst jdkr|j	|jkrt jj|jrt j|jt jrw W Y d d }~X nX qW |d k	rt j|
| t| ||}t||
t jj | }t!j"t!j#|d
fS )Nrl   -c             3   s   | ]}| kV  qd S )Nr
   ).0m)rk   r
   r   	<genexpr>  s    zopen_stream.<locals>.<genexpr>war>   F)r   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   O_BINARYz.__atomic-write       Z08xi  nt)rw   rx   r>   l        )$osfsdecodeanyrc   rh   r`   rg   rn   
ValueErrorerrnorandomstatst_modeOSErrorO_RDWRO_CREATO_EXCLr   pathjoindirname	randrangerm   EEXISTr   EACCESisdirrq   accessW_OKchmod_AtomicFilerealpathr    r!   IO)rq   rk   r   r   rr   binaryr   r   Zpermflagstmp_filenamefder<   afr
   )rk   r   open_stream~  s^    




r   c               @   s|   e Zd ZejeeddddZeedddZde	dd	d
dZ
eejdddZd dddZdd ZedddZdS )r   N)r<   r   real_filenamer   c             C   s   || _ || _|| _d| _d S )NF)_f_tmp_filename_real_filenameclosed)r'   r<   r   r   r
   r
   r   r&     s    z_AtomicFile.__init__)r   c             C   s   | j S )N)r   )r'   r
   r
   r   r     s    z_AtomicFile.nameF)deleter   c             C   s.   | j r
d S | jj  tj| j| j d| _ d S )NT)r   r   closer}   r   r   r   )r'   r   r
   r
   r   r     s
    
z_AtomicFile.close)r   r   c             C   s   t | j|S )N)r   r   )r'   r   r
   r
   r   r7     s    z_AtomicFile.__getattr__c             C   s   | S )Nr
   )r'   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 )N)reprr   )r'   r
   r
   r   __repr__  s    z_AtomicFile.__repr__)F)r-   r.   r/   r    r   r1   r&   propertyr   r2   r   r3   r7   r   r   r   r
   r
   r
   r   r     s   r   )rQ   r   c             C   s   t jd| S )Nr   )_ansi_resub)rQ   r
   r
   r   
strip_ansi  s    r   c             C   s(   xt | ttfr| j} qW | jjjdS )Nz
ipykernel.)rH   r#   r   r$   r(   r.   
startswith)r   r
   r
   r   _is_jupyter_kernel_output  s    
r   )r   colorr   c             C   s0   |d kr*| d krt j} t|  o(t|  S | S )N)r   r]   r,   r   )r   r   r
   r
   r   should_strip_ansi  s
    r   rz   )rf   c              C   s   dd l } | j S )Nr   )localegetpreferredencoding)r   r
   r
   r   _get_argv_encoding  s    r   c                s   yt j| }W n tk
r&   d}Y nX |dk	r4|S ddl}t| |}|j| |dtjtjj	}|j
  fdd}||_
y|t | < W n tk
r   Y nX |S )zbSupport ANSI color and style codes on Windows by wrapping a
        stream with colorama.
        Nr   )stripc                s,   y | S  t k
r&   j   Y nX d S )N)BaseException	reset_all)s)_writeansi_wrapperr
   r   _safe_write$  s
    z'auto_wrap_for_ansi.<locals>._safe_write)_ansi_stream_wrappersgetr*   coloramar   AnsiToWin32r    r!   rW   r   rA   )r   r   cachedr   r   r   r   r
   )r   r   r   auto_wrap_for_ansi  s$    

r   c               C   s   t tjdd pt S )Nr   )r   r   r]   r   r
   r
   r
   r   r   6  s    )r<   r   r   r   c             C   s   d S )Nr
   )r<   r   r   r
   r
   r   rf   9  s    rf   )r>   r   c             C   s   t t| S )N)lenr   )r>   r
   r
   r   term_len?  s    r   c             C   s"   y| j  S  tk
r   dS X d S )NF)r,   r*   )r   r
   r
   r   r,   C  s    r,   )src_funcwrapper_funcr   c                s"   t   tjd fdd}|S )N)r   c                 sf    } y j | }W n tk
r,   d }Y nX |d k	r:|S  }y| | < W n tk
r`   Y nX |S )N)r   r*   )r   r   )cacher   r   r
   r   funcO  s    
z&_make_cached_stream_func.<locals>.func)r   r    rW   )r   r   r   r
   )r   r   r   r   _make_cached_stream_funcJ  s    r   c               C   s   t jS )N)r   r]   r
   r
   r
   r   <lambda>a  s    r   c               C   s   t jS )N)r   ra   r
   r
   r
   r   r   b  s    c               C   s   t jS )N)r   rd   r
   r
   r
   r   r   c  s    )r]   ra   rd   )FF)F)F)FF)F)F)NN)NN)NN)ro   Nrp   F)NN)N)Kr   ior}   rer   typingr    weakrefr   platformr   ZCYGWINversionZMSYS2environr   Z
APP_ENGINEZWINr   r0   CallablerW   compiler   r1   r   r"   r2   r   r   r   r   TextIOWrapperr   r#   rI   rJ   rM   rN   rO   rR   rS   rX   rZ   r\   r`   rc   re   rg   rh   ri   UnionPathLikerF   rn   Tupler   r   r   r   r   Z_winconsolerf   r   r   MutableMappingr   r,   r   Z_default_text_stdinZ_default_text_stdoutZ_default_text_stderrZbinary_streamsMappingZtext_streamsr
   r
   r
   r   <module>   s    

 E		
 D*
   J%"