U
    L[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   cygwinZAPPENGINE_RUNTIMEzDevelopment/ZSERVER_SOFTWAREwinP   z\033\[((?:\d|;)*)([a-zA-Z])c                   C   s   t  pt  S N)sysgetfilesystemencodinggetdefaultencoding r   r   //usr/lib/python3/dist-packages/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   Z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   r/   A   s    z_NonClosingTextIOWrapper.writec                 C   s   |D ]}|  | qd S r   )r/   )r(   linesliner   r   r   
writelinesJ   s    z#_NonClosingTextIOWrapper.writelinesc                 C   s&   z|    W n tk
r    Y nX d S r   )detachr-   r(   r   r   r   __del__N   s    z _NonClosingTextIOWrapper.__del__c                 C   s
   | j  S r   )r$   isattyr6   r   r   r   r8   T   s    z_NonClosingTextIOWrapper.isattyN)FF)	__name__
__module____qualname__r'   PY2r/   r4   r7   r8   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   rA   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$   rC   r-   r0   r   r   r   rF   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)r>   r    r$   r/   r-   r0   r   r   r   rG      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tellr-   r0   r   r   r   rJ      s    z_FixupStream.seekableN)FF)
r9   r:   r;   __doc__r'   r@   rA   rF   rG   rJ   r   r   r   r   r#   Y   s   	
r#   c                 C   s   |   S r   )	iteritemsr1   r   r   r   <lambda>   rI   rP   c                 C   s   t | ttfS r   )r)   r.   	bytearrayrO   r   r   r   r+      s    r+   z^[a-zA-Z_][a-zA-Z0-9_]*$c                 C   s   | S r   r   )rE   r   r   r   set_binary_mode   s    rR   c                 C   s4   z|   }W n tk
r    Y nX t|tj | S r   )filenor-   msvcrtZsetmodeosZO_BINARY)rE   rS   r   r   r   rR      s    c                 C   sL   z|   }W n tk
r    Y n(X t|tj}t|tj|tj @  | S r   )rS   r-   fcntlZF_GETFLZF_SETFLrU   
O_NONBLOCK)rE   rS   flagsr   r   r   rR      s    c                 C   s   t | d k	S r   )_identifier_researchrO   r   r   r   isidentifier   s    r[   c                   C   s
   t tjS r   )rR   r	   stdinr   r   r   r   get_binary_stdin   s    r]   c                   C   s   t d ttjS )Nstdout)_wrap_std_streamrR   r	   r^   r   r   r   r   get_binary_stdout   s    r`   c                   C   s   t d ttjS )Nstderr)r_   rR   r	   ra   r   r   r   r   get_binary_stderr   s    rb   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    
rg   c                 C   s4   t d ttj| |}|d k	r"|S ttj| |ddS )Nr^   Tr   )r_   re   r	   r^   r   rf   r   r   r   get_text_stdout   s    
ri   c                 C   s4   t d ttj| |}|d k	r"|S ttj| |ddS )Nra   Trh   )r_   re   r	   ra   r   rf   r   r   r   get_text_stderr   s    
rj   c                 C   s   t | tr| t d} | S )Nr   )r)   bytesdecoder   valuer   r   r   filename_to_ui  s    
ro   c                 C   s   |   S r   )r[   rO   r   r   r   rP     rI   c                 C   s   t |  S r   )iteritemsrO   r   r   r   rP     rI   c                 C   s   t | tttfS r   )r)   rk   
memoryviewrQ   rO   r   r   r   r+     s    c                 C   s0   zt | dtW S  tk
r*   | Y S X d S Nr   )r)   rC   rk   r-   r   defaultr   r   r   _is_binary_reader  s    rv   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 )NrI   rH   FT)r/   r-   rt   r   r   r   _is_binary_writer  s    

rw   c                 C   s4   t | dr| S t| dd }|d k	r0t |dr0|S d S NFr.   T)rv   r    r   Zbufr   r   r   _find_binary_reader&  s
    
rz   c                 C   s4   t | dr| S t| dd }|d k	r0t |dr0|S d S rx   )rw   r    ry   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   rd   )rv   r}   r~   rz   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   rh   )rw   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.)rz   r	   r\   RuntimeError)readerr   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.stdout.)r{   r	   r^   r   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.)r{   r	   ra   r   r   r   r   r   rb     s    
c                 C   s,   t tj| |}|d k	r|S ttj| |ddS rc   )re   r	   r\   r   rf   r   r   r   rg     s    
c                 C   s,   t tj| |}|d k	r|S ttj| |ddS NTrh   )re   r	   r^   r   rf   r   r   r   ri     s    
c                 C   s,   t tj| |}|d k	r|S ttj| |ddS r   )re   r	   ra   r   rf   r   r   r   rj     s    
c                 C   s2   t | tr| t d} n| dddd} | S )Nr   r   surrogateescape)r)   rk   rl   r   encoderm   r   r   r   ro     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)   rk   rl   )eru   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ar1   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.r1   z&Use the `overwrite`-parameter instead.r   z,Atomic writes only make sense with `w`-mode.r   z.__atomic-write)dirprefix)anyr`   ri   r]   rg   openr%   
ValueErrortempfileZmkstemprU   pathdirnamefdopen_AtomicFilerealpath)	filenamer   r   r   Zatomicr   fdtmp_filenamerE   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(   rE   r   Zreal_filenamer   r   r   r'     s    z_AtomicFile.__init__c                 C   s   | j S r   )r   r6   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_replacerU   remover   OSError_replacer   )r(   deleter   r   r   r     s    
z_AtomicFile.closec                 C   s   t | j|S r   )r    r   r?   r   r   r   r@   (  s    z_AtomicFile.__getattr__c                 C   s   | S r   r   r6   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   r6   r   r   r   __repr__1  s    z_AtomicFile.__repr__N)F)r9   r:   r;   r'   propertyr   r   r@   r   r   r   r   r   r   r   r     s   

r   c                 C   s   t d| S )NrH   )_ansi_resubrm   r   r   r   
strip_ansi:  s    r   c                 C   s&   |d kr | d krt j} t|  S | S r   )r	   r\   r8   )r   colorr   r   r   should_strip_ansi>  s
    
r   O      )re   r_   c                  C   s   dd l } |  S rs   )localegetpreferredencoding)r   r   r   r   _get_argv_encodingO  s    r   rH   c                 C   s2   t j  | rt }||  t }| dS )Nz
)r	   ra   r,   _default_text_stdoutr/   _default_text_stdinrB   rstrip)promptr^   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   )Z	reset_all)sZ_writeZansi_wrapperr   r   _safe_writet  s
    
z'auto_wrap_for_ansi.<locals>._safe_write)_ansi_stream_wrappersgetr-   r   coloramaZAnsiToWin32r   r/   )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   Zwin32ZGetConsoleScreenBufferInfoZ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   rO   r   r   r   rP     rI   c                  G   s   d S r   r   rO   r   r   r   rP     rI   c                 C   s   t t| S r   )lenr   rO   r   r   r   term_len  s    r   c                 C   s&   z
|   W S  tk
r    Y dS X d S r   )r8   r-   r|   r   r   r   r8     s    
r8   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   r-   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   rP     rI   c                   C   s   t jS r   )r	   r^   r   r   r   r   rP     rI   c                   C   s   t jS r   )r	   ra   r   r   r   r   rP     rI   )r\   r^   ra   )FF)NN)NN)NN)F)F)F)F)NN)NN)NN)N)r   Nr   F)NN)rH   )N)Xrer%   rU   r	   r   weakrefr   version_infor<   platform
startswithZCYGWINenvironZ
APP_ENGINEZWINZDEFAULT_COLUMNScompiler   r   r   r   r   r&   r   objectr#   ZunicodeZ	text_typer*   rk   r   Zstring_typesintZlongZ	int_typesrN   ZxrangeZ
range_typer+   rY   rR   rT   ImportErrorrV   r[   r]   r`   rb   rg   ri   rj   ro   inputrangerv   rw   rz   r{   r}   r~   r   r   r   r   r   r   r   r   renamer   r   r   r   r   r   Z_winconsolere   r_   r   r   r   r8   r   r   r   Z_default_text_stderrZbinary_streamsZtext_streamsr   r   r   r   <module>   s  

   
$C
	






 
 



	
  
1%



   