
¿«‘_'  ã               @   s  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 d  d l  m Z d  d l  m Z d  d l  m	 Z	 d  d l  m
 Z
 d  d l  m Z d  d l  m Z d  d	 l  m Z d  d
 l  m Z d  d l  m Z d  d l  m Z d  d l  m Z d  d l m Z d  d l m Z d  d l m Z d  d l m Z d  d l Z d d l m Z d d l m Z d d l m Z y& d  d l  m Z e j Z e j Z Wn e k
 rÄd Z Yn Xe e
 ƒ Z  e j! Z! e! j" Z" e! j# Z# e! j$ Z$ e! j% Z% e! j& Z& e e ƒ d e j! f ƒ Z' e e e ƒ e e e	 ƒ ƒ d e j( f ƒ Z) e e  j e  j ƒ d e j! f ƒ Z* e" dA ƒ Z+ e" dB ƒ Z, e" dC ƒ Z- d  Z. d Z/ d  Z0 d Z1 d Z2 d  Z3 d Z4 d Z5 d  Z6 d! Z7 Gd" d# „  d# e  j8 ƒ Z9 e d k rd Z: n d$ d% d& „ Z: Gd' d( „  d( e j; ƒ Z< Gd) d* „  d* e< ƒ Z= Gd+ d, „  d, e< ƒ Z> Gd- d. „  d. e? ƒ Z@ Gd/ d0 „  d0 e? ƒ ZA eB ƒ  ZC d1 d2 „  ZD d3 d4 „  ZE d5 d6 „  ZF d7 d8 „  ZG e rád9 d: „  ZH eH ƒ  ZI d; d< „  ZJ d  eE d eF d eG i ZK d= d> „  ZL d? d@ „  ZM d S)Dé    N)Úbyref)Úc_char)Úc_char_p)Úc_int)Ú	c_ssize_t)Úc_ulong)Úc_void_p)ÚPOINTER)Ú	py_object)Úwindll)ÚWinError)ÚWINFUNCTYPE)ÚDWORD)ÚHANDLE)ÚLPCWSTR)ÚLPWSTRé   )Ú_NonClosingTextIOWrapper)ÚPY2)Ú	text_type)Ú	pythonapiÚGetCommandLineWÚCommandLineToArgvWÚ	LocalFreeé
   é   é   é   iã  é   s   iÿ  c               @   s™   e  Z d  Z d e f d e f d e f d e f d e f d e f d e f d e f d	 e f d
 e f d e f g Z	 e
 r• e	 j d d e d f ƒ d S)Ú	Py_bufferÚbufÚobjÚlenÚitemsizeÚreadonlyÚndimÚformatÚshapeÚstridesÚ
suboffsetsZinternalr   Z
smalltabler   Néÿÿÿÿ)Ú__name__Ú
__module__Ú__qualname__r   r
   r   r   r   Ú	c_ssize_pÚ_fields_r   Úinsert© r1   r1   ú2/tmp/pip-build-5gj8f0j9/click/click/_winconsole.pyr   U   s   										r   Fc             C   sp   t  ƒ  } | r t n t } t t |  ƒ t | ƒ | ƒ z! t | j } | j | j	 ƒ SWd  t
 t | ƒ ƒ Xd  S)N)r   ÚPyBUF_WRITABLEÚPyBUF_SIMPLEÚPyObject_GetBufferr
   r   r   r"   Úfrom_addressr    ÚPyBuffer_Release)r!   Úwritabler    ÚflagsZbuffer_typer1   r1   r2   Ú
get_buffern   s    	r:   c               @   s(   e  Z d  Z d d „  Z d d „  Z d S)Ú_WindowsConsoleRawIOBasec             C   s   | |  _  d  S)N)Úhandle)Úselfr<   r1   r1   r2   Ú__init__z   s    z!_WindowsConsoleRawIOBase.__init__c             C   s   t  j j |  ƒ d S)NT)ÚioÚ	RawIOBaseÚisatty)r=   r1   r1   r2   rA   }   s    z_WindowsConsoleRawIOBase.isattyN)r+   r,   r-   r>   rA   r1   r1   r1   r2   r;   y   s   r;   c               @   s(   e  Z d  Z d d „  Z d d „  Z d S)Ú_WindowsConsoleReaderc             C   s   d S)NTr1   )r=   r1   r1   r2   Úreadableƒ   s    z_WindowsConsoleReader.readablec             C   sÑ   t  | ƒ } | s d S| d r, t d ƒ ‚ t | d d ƒ} | d } t ƒ  } t t |  j ƒ | | t | ƒ d  ƒ } t ƒ  t	 k r” t
 j d ƒ | s² t d j t ƒ  ƒ ƒ ‚ | d t k rÆ d Sd | j S)Nr   r   z>cannot read odd number of bytes from UTF-16-LE encoded consoler8   Tgš™™™™™¹?zWindows error: {})r"   Ú
ValueErrorr:   r   ÚReadConsoleWr   r<   r   ÚGetLastErrorÚERROR_OPERATION_ABORTEDÚtimeÚsleepÚOSErrorr&   ÚEOFÚvalue)r=   ÚbZbytes_to_be_readÚbufferZcode_units_to_be_readZcode_units_readÚrvr1   r1   r2   Úreadinto†   s,    
	
			z_WindowsConsoleReader.readintoN)r+   r,   r-   rC   rP   r1   r1   r1   r2   rB   ‚   s   rB   c               @   s:   e  Z d  Z d d „  Z e d d „  ƒ Z d d „  Z d S)Ú_WindowsConsoleWriterc             C   s   d S)NTr1   )r=   r1   r1   r2   r8   ¦   s    z_WindowsConsoleWriter.writablec             C   s-   |  t  k r d S|  t k r  d Sd j |  ƒ S)NÚERROR_SUCCESSÚERROR_NOT_ENOUGH_MEMORYzWindows error {})rR   rS   r&   )Úerrnor1   r1   r2   Ú_get_error_message©   s
    z(_WindowsConsoleWriter._get_error_messagec             C   sš   t  | ƒ } t | ƒ } t | t ƒ d } t ƒ  } t t |  j ƒ | | t | ƒ d  ƒ d | j	 } | d k r– | d k r– t
 |  j t ƒ  ƒ ƒ ‚ | S)Nr   r   )r"   r:   ÚminÚMAX_BYTES_WRITTENr   ÚWriteConsoleWr   r<   r   rL   rJ   rU   rF   )r=   rM   Zbytes_to_be_writtenr    Zcode_units_to_be_writtenZcode_units_writtenZbytes_writtenr1   r1   r2   Úwrite±   s    		z_WindowsConsoleWriter.writeN)r+   r,   r-   r8   ÚstaticmethodrU   rY   r1   r1   r1   r2   rQ   ¥   s   rQ   c               @   sj   e  Z d  Z d d „  Z e d d „  ƒ Z d d „  Z d d „  Z d	 d
 „  Z d d „  Z	 d d „  Z
 d S)ÚConsoleStreamc             C   s   | |  _  | |  _ d  S)N)Ú_text_streamrN   )r=   Útext_streamZbyte_streamr1   r1   r2   r>   Æ   s    	zConsoleStream.__init__c             C   s
   |  j  j S)N)rN   Úname)r=   r1   r1   r2   r^   Ê   s    zConsoleStream.namec             C   sR   t  | t ƒ r |  j j | ƒ Sy |  j ƒ  Wn t k
 rA Yn X|  j j | ƒ S)N)Ú
isinstancer   r\   rY   ÚflushÚ	ExceptionrN   )r=   Úxr1   r1   r2   rY   Î   s    zConsoleStream.writec             C   s"   x | D] } |  j  | ƒ q Wd  S)N)rY   )r=   ÚlinesÚliner1   r1   r2   Ú
writelines×   s    zConsoleStream.writelinesc             C   s   t  |  j | ƒ S)N)Úgetattrr\   )r=   r^   r1   r1   r2   Ú__getattr__Û   s    zConsoleStream.__getattr__c             C   s   |  j  j ƒ  S)N)rN   rA   )r=   r1   r1   r2   rA   Þ   s    zConsoleStream.isattyc             C   s   d j  |  j |  j ƒ S)Nz'<ConsoleStream name={!r} encoding={!r}>)r&   r^   Úencoding)r=   r1   r1   r2   Ú__repr__á   s    zConsoleStream.__repr__N)r+   r,   r-   r>   Úpropertyr^   rY   re   rg   rA   ri   r1   r1   r1   r2   r[   Å   s   	r[   c               @   s:   e  Z d  Z d Z d d „  Z d d „  Z d d „  Z d S)	ÚWindowsChunkedWriterzå
    Wraps a stream (such as stdout), acting as a transparent proxy for all
    attribute access apart from method 'write()' which we wrap to write in
    limited chunks due to a Windows limitation on binary console streams.
    c             C   s   | |  _  d  S)N)Ú_WindowsChunkedWriter__wrapped)r=   Úwrappedr1   r1   r2   r>   î   s    zWindowsChunkedWriter.__init__c             C   s   t  |  j | ƒ S)N)rf   rl   )r=   r^   r1   r1   r2   rg   ó   s    z WindowsChunkedWriter.__getattr__c             C   sd   t  | ƒ } d } xK | | k  r_ t | | t ƒ } |  j j | | | | … ƒ | | 7} q Wd  S)Nr   )r"   rV   rW   rl   rY   )r=   ÚtextZtotal_to_writeZwrittenZto_writer1   r1   r2   rY   ö   s    zWindowsChunkedWriter.writeN)r+   r,   r-   Ú__doc__r>   rg   rY   r1   r1   r1   r2   rk   ç   s   rk   c             C   s^   t  rZ t j ƒ  d  d … d k rZ |  t k rZ t t |  t t t |  ƒ ƒ ƒ t j |  ƒ d  S)Nr   é   r   )rp   r   )r   ÚsysÚgetwindowsversionÚ_wrapped_std_streamsÚsetattrrk   rf   Úadd)r^   r1   r1   r2   Ú_wrap_std_stream  s
    rv   c             C   s4   t  t j t t ƒ ƒ d d d d ƒ} t | |  ƒ S)Nz	utf-16-leÚstrictÚline_bufferingT)r   r?   ÚBufferedReaderrB   ÚSTDIN_HANDLEr[   )Úbuffer_streamr]   r1   r1   r2   Ú_get_text_stdin  s    	r|   c             C   s4   t  t j t t ƒ ƒ d d d d ƒ} t | |  ƒ S)Nz	utf-16-lerw   rx   T)r   r?   ÚBufferedWriterrQ   ÚSTDOUT_HANDLEr[   )r{   r]   r1   r1   r2   Ú_get_text_stdout  s    	r   c             C   s4   t  t j t t ƒ ƒ d d d d ƒ} t | |  ƒ S)Nz	utf-16-lerw   rx   T)r   r?   r}   rQ   ÚSTDERR_HANDLEr[   )r{   r]   r1   r1   r2   Ú_get_text_stderr"  s    	r�   c               C   s#   t  j d j t j d d  … ƒ ƒ S)Nú r   )ÚzlibÚcrc32Újoinrq   Úargvr1   r1   r1   r2   Ú_hash_py_argv.  s    r‡   c                 sú   t  d ƒ }  t t ƒ  t |  ƒ ƒ ‰  ˆ  s3 t ƒ  ‚ z) ‡  f d d †  t d |  j ƒ Dƒ } Wd  t ˆ  ƒ Š  Xt t	 d ƒ sì | d d  … } x] t
 | ƒ d k rë | d } | j d ƒ sÇ | d k rÈ P| d d  … } | j d	 ƒ r� Pq� W| d d  … S)
Nr   c                s   g  |  ] } ˆ  | ‘ q Sr1   r1   )Ú.0Úi)Úargv_unicoder1   r2   ú
<listcomp>9  s   	 z%_get_windows_argv.<locals>.<listcomp>Úfrozenr   ú-ú-cú-m)rŽ   r�   )r   r   r   r   r   ÚrangerL   r   Úhasattrrq   r"   Ú
startswith)Zargcr†   Úargr1   )rŠ   r2   Ú_get_windows_argv3  s$    	)

r”   c             C   sg   t  |  d ƒ s d Sy |  j ƒ  } Wn t k
 r; d SYn Xt j | ƒ } t t | t t ƒ  ƒ ƒ ƒ S)NÚfilenoF)	r‘   r•   rJ   ÚmsvcrtZget_osfhandleÚboolÚGetConsoleModer   r   )Úfr•   r<   r1   r1   r2   Ú_is_consoleR  s    	rš   c             C   s£   t  d  k	 rŸ | d k rŸ | d k rŸ t |  ƒ rŸ t j |  j ƒ  ƒ } | d  k	 rŸ t s| t |  d d  ƒ }  |  d  k r• d  Sn t j |  j ƒ  t	 j
 ƒ | |  ƒ Sd  S)Nú	utf-16-lerw   rN   )r›   N)rw   N)r:   rš   Ú_stream_factoriesÚgetr•   r   rf   r–   ZsetmodeÚosÚO_BINARY)r™   rh   ÚerrorsÚfuncr1   r1   r2   Ú_get_windows_console_stream_  s    r¢   iöÿÿÿiõÿÿÿiôÿÿÿ)NÚctypesr?   rž   rq   rH   rƒ   r   r   r   r   r   r   r   r	   r
   r   r   r   Zctypes.wintypesr   r   r   r   r–   Ú_compatr   r   r   r   r5   r7   ÚImportErrorr.   Úkernel32ZGetStdHandlerE   rX   r˜   rF   r   Úshell32r   r   rz   r~   r€   r4   r3   rR   rS   rG   ZSTDIN_FILENOZSTDOUT_FILENOZSTDERR_FILENOrK   rW   Ú	Structurer   r:   r@   r;   rB   rQ   Úobjectr[   rk   Úsetrs   rv   r|   r   r�   r‡   Z_initial_argv_hashr”   rœ   rš   r¢   r1   r1   r1   r2   Ú<module>
   sž   									# "	


	