3
¦YðizI  ã            
   @   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ƒo’e o’e 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-8om4l6ph/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 )zŽA 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rŽtdƒ‚dˆ kržtdƒ‚dˆ kr®t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 }	xÂt 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�s¶t jdk�rº|j	|jk�rºt jj|jƒ�rºt j|jt jƒ�rº�w‚ W Y d d }~X nX �qW |d k	�rêt 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   TzÏAppending 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%"