B
    Mhh*I              
   @   s~  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	
dZej	
dZdZejejejgejf  ed< edZdjejeje eje eeejdd	d
ZeedddZejej edddZG dd dejZG dd dZdkejej eedddZdlejej eedddZ ejej ejej dddZ!ej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%dmejej eje eje ejejej egef ejejej gejej f eeejd&d'd(Z&dnejej eje eje eejd)d*d+Z'doejej eje eje eejd,d-d.Z(ejd/d0d1Z)ejd/d2d3Z*ejd/d4d5Z+dpeje eje ejd6d7d8Z,dqeje eje ejd6d9d:Z-dreje eje ejd6d;d<Z.ej/ed=e0f eeje eje ejej d>d?d@Z1dsdCeeje eje eej2ejej ef dDdEdFZ3G dGdH dHZ4eedIdJdKZ5ejej eddLdMZ6dtejejej  eje edNdOdPZ7ej	
drJerJdQdRl8m9Z9 ed/dSdTZ:e Z;ej<ejejf edU< duejeje ejdNdVdZn8ed/dWdTZ:ejeje eje ejej dXdYdZZ9ee0d[d\d]Z=ejej edd^d_Z>ejg ejej f ejg ejf ejg ejej f d`dadbZ?e?dcdd e,Z@e?dedd e-ZAe?dfdd e.ZBe)e*e+dgZCejDeejg ejf f edh< e,e-e.dgZEejDeejeje eje gejf f edi< dS )v    N)WeakKeyDictionarycygwinwinauto_wrap_for_ansiz\033\[[;?0-9]*[a-zA-Z]F)streamencodingerrorsforce_readableforce_writablereturnc             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   0/tmp/pip-install-vv81h98y/click/click/_compat.py_make_text_stream   s    r   )r   r   c             C   s*   yt | 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 }t|r dS |S )z1Returns the default stream encoding if not found.r   Nzutf-8)getattrsysgetdefaultencodingr   )r   rvr   r   r   r   ,   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 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$   5   s    	z!_NonClosingTextIOWrapper.__init__)r   c             C   s&   y|    W n tk
r    Y nX d S )N)detach	Exception)r%   r   r   r   __del__C   s    z _NonClosingTextIOWrapper.__del__c             C   s
   | j  S )N)r"   isatty)r%   r   r   r   r*   I   s    z_NonClosingTextIOWrapper.isatty)FF)__name__
__module____qualname__r   r    OptionalstrboolAnyr$   r)   r*   __classcell__r   r   )r&   r   r   4   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$   X   s    z_FixupStream.__init__)r   r   c             C   s   t | j|S )N)r   r"   )r%   r   r   r   r   __getattr__b   s    z_FixupStream.__getattr__)sizer   c             C   s2   t | jdd }|d k	r&tt||S | j|S )Nread1)r   r"   r   r   bytesread)r%   r6   fr   r   r   r7   e   s    z_FixupStream.read1)r   c             C   sX   | j r
dS t| jdd }|d k	r.tt| S y| jd W n tk
rR   dS X dS )NTreadabler   F)r3   r   r"   r   r   r0   r9   r(   )r%   xr   r   r   r;   m   s    z_FixupStream.readablec             C   s~   | j r
dS t| jdd }|d k	r.tt| S y| jd W n: tk
rx   y| jd W n tk
rr   dS X Y nX dS )NTwritable     F)r4   r   r"   r   r   r0   writer(   )r%   r<   r   r   r   r=   y   s    z_FixupStream.writablec             C   sT   t | jdd }|d k	r$tt| S y| j| j  W n tk
rN   dS X dS )NseekableFT)r   r"   r   r   r0   seektellr(   )r%   r<   r   r   r   rA      s    z_FixupStream.seekableN)FF)r+   r,   r-   __doc__r   r    r0   r$   r/   r1   r5   intr8   r7   r;   r=   rA   r   r   r   r   r!   N   s    r!   )r   defaultr   c             C   s*   yt | dtS  tk
r$   |S X d S )Nr   )
isinstancer9   r8   r(   )r   rF   r   r   r   _is_binary_reader   s    rH   c             C   sL   y|  d W n8 tk
rF   y|  d dS  tk
r@   Y nX |S X dS )Nr?   r>   FT)r@   r(   )r   rF   r   r   r   _is_binary_writer   s    
rI   c             C   sH   t | drttj| S t| dd }|d k	rDt |drDttj|S d S )NFbufferT)rH   r   r   r    r   )r   bufr   r   r   _find_binary_reader   s    
rL   c             C   sH   t | drttj| S t| dd }|d k	rDt |drDttj|S d S )NFrJ   T)rI   r   r   r    r   )r   rK   r   r   r   _find_binary_writer   s    
rM   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    rN   )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   rO   rP   Zstream_valuer   r   r   _is_compat_stream_attr   s    rQ   )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   )rQ   )r   r   r   r   r   r   _is_compatible_text_stream   s    
rR   )text_streamr   r   	is_binaryfind_binaryr	   r
   r   c       	      C   s~   || drt t j| }nFt t j| } t| ||rH|d krDt| sH| S || }|d kr\| S |}|d krld}t|||||dS )NFr   )r	   r
   )r   r   r    TextIOrR   rN   r   )	rS   r   r   rT   rU   r	   r
   Zbinary_readerZpossible_binary_readerr   r   r   _force_correct_text_stream   s$    	
rW   )text_readerr   r   r	   r   c             C   s   t | ||tt|dS )N)r	   )rW   rH   rL   )rX   r   r   r	   r   r   r   _force_correct_text_reader  s    rY   )text_writerr   r   r
   r   c             C   s   t | ||tt|dS )N)r
   )rW   rI   rM   )rZ   r   r   r
   r   r   r   _force_correct_text_writer(  s    r[   )r   c              C   s   t tj} | d krtd| S )Nz6Was not able to determine binary stream for sys.stdin.)rL   r   stdinRuntimeError)readerr   r   r   get_binary_stdin8  s    
r_   c              C   s   t tj} | d krtd| S )Nz7Was not able to determine binary stream for sys.stdout.)rM   r   stdoutr]   )writerr   r   r   get_binary_stdout?  s    
rb   c              C   s   t tj} | d krtd| S )Nz7Was not able to determine binary stream for sys.stderr.)rM   r   stderrr]   )ra   r   r   r   get_binary_stderrF  s    
rd   )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\   rY   )r   r   r   r   r   r   get_text_stdinM  s    rf   c             C   s,   t tj| |}|d k	r|S ttj| |ddS )NT)r
   )re   r   r`   r[   )r   r   r   r   r   r   get_text_stdoutV  s    rg   c             C   s,   t tj| |}|d k	r|S ttj| |ddS )NT)r
   )re   r   rc   r[   )r   r   r   r   r   r   get_text_stderr_  s    rh   zos.PathLike[str])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)ri   rj   r   r   r   r   r   _wrap_io_openh  s    
rm   rstrictzt.Union[str, os.PathLike[str]])filenamerj   r   r   atomicr   c          
      s.  d k}t | } t | dkrrt fdddD rT|rDt dfS t||ddfS |rbt dfS t||ddfS |st|  ||dfS d	 krt	d
d krt	dd krt	ddd l
}dd l}yt | 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t j| d|dd}
y"t |
|	|d krXdn|}P W nt tk
r } zT|j
|jkst jdkr|j
|jkrt j|jrt |jt jrĐw W d d }~X Y nX qW |d k	rt |
| t| ||}t ||
t j!| }t"#t"j$t"j% |dfS )Nrk   -c             3   s   | ]}| kV  qd S )Nr   ).0m)rj   r   r   	<genexpr>  s    zopen_stream.<locals>.<genexpr>)war<   F)r   r   Trw   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.r<   z&Use the `overwrite`-parameter instead.rv   z,Atomic writes only make sense with `w`-mode.r   O_BINARYz.__atomic-writel        Z08xi  nt)&osfspathfsdecodeanyrb   rg   r_   rf   rm   
ValueErrorerrnorandomstatst_modeOSErrorO_RDWRO_CREATO_EXCLr   pathjoindirname	randrangerl   EEXISTr   EACCESisdirrp   accessW_OKchmod_AtomicFilerealpathr   r   IOr1   )rp   rj   r   r   rq   binaryr   r   Zpermflagstmp_filenamefder:   afr   )rj   r   open_streamu  s`    





r   c               @   s   e Zd Zej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ejeje  ejdd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  t| j| j d| _ d S )NT)r   r   closerz   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   r5     s    z_AtomicFile.__getattr__c             C   s   | S )Nr   )r%   r   r   r   	__enter__  s    z_AtomicFile.__enter__)exc_type_r   c             G   s   | j |d k	d d S )N)r   )r   )r%   r   r   r   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/   r$   propertyr   r0   r   r5   r   r.   TypeBaseExceptionr   r   r   r   r   r   r     s    r   )rP   r   c             C   s   t d| S )Nr>   )_ansi_resub)rP   r   r   r   
strip_ansi  s    r   c             C   s(   xt | ttfr| j} qW | jjdS )Nz
ipykernel.)rG   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      )re   c              C   s   dd l } |  S )Nr   )localegetpreferredencoding)r   r   r   r   _get_argv_encoding   s    r   _ansi_stream_wrappersc                s   yt | }W n tk
r&   d}Y nX |dk	r4|S ddl}t| |}|j| |dt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&      Y nX d S )N)r   	reset_all)s)_writeansi_wrapperr   r   _safe_write  s
    z'auto_wrap_for_ansi.<locals>._safe_write)r   getr(   coloramar   AnsiToWin32r   r   rV   r   r@   )r   r   cachedr   r   r   r   r   )r   r   r   r     s$    

c               C   s   t tjdd pt S )Nr   )r   r   r\   getfilesystemencodingr   r   r   r   r   .  s    )r:   r   r   r   c             C   s   d S )Nr   )r:   r   r   r   r   r   re   1  s    re   )r<   r   c             C   s   t t| S )N)lenr   )r<   r   r   r   term_len7  s    r   c             C   s"   y|   S  tk
r   dS X d S )NF)r*   r(   )r   r   r   r   r*   ;  s    r*   )src_funcwrapper_funcr   c                s(   t   tjtj d fdd}|S )N)r   c                 sr    } | d krd S y  | }W n tk
r8   d }Y nX |d k	rF|S  }y| | < W n tk
rl   Y nX |S )N)r   r(   )r   r   )cacher   r   r   r   funcH  s    
z&_make_cached_stream_func.<locals>.func)r   r   r.   rV   )r   r   r   r   )r   r   r   r   _make_cached_stream_funcB  s    r   c               C   s   t jS )N)r   r\   r   r   r   r   <lambda>^  r?   r   c               C   s   t jS )N)r   r`   r   r   r   r   r   _  r?   c               C   s   t jS )N)r   rc   r   r   r   r   r   `  r?   )r\   r`   rc   binary_streamstext_streams)FF)F)F)FF)F)F)NN)NN)NN)rn   Nro   F)NN)N)Fr   iorz   rer   typingr   weakrefr   platformr   ZCYGWINZWINr   r.   CallablerV   __annotations__compiler   r    r/   r0   r   r   r   r1   r   TextIOWrapperr   r!   rH   rI   rL   rM   rN   rQ   rR   rW   rY   r[   r_   rb   rd   rf   rg   rh   UnionrE   rm   ZTupler   r   r   r   r   Z_winconsolere   r   r   MutableMappingr   r*   r   Z_default_text_stdinZ_default_text_stdoutZ_default_text_stderrr   Mappingr   r   r   r   r   <module>   s    "
 E	  	
 V*
    K% &