3
[ð]#  ã               @   s4  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ZddlmZm	Z	m
Z
 d dlmZmZmZmZmZmZmZmZmZmZmZ yd dlmZ ejZejZW n ek
r´   dZY nX d dlmZmZ eeƒ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d/ƒZ&ed0ƒZ'ed1ƒZ(d Z)dZ*d Z+dZ,dZ-d Z.dZ/dZ0dZ1dZ2G dd„ dej3ƒZ4edk�r~dZ5n
d2dd„Z5G dd„ de j6ƒZ7G dd„ de7ƒZ8G dd„ de7ƒZ9G dd„ de:ƒZ;G dd„ de:ƒZ<e=ƒ Z>d d!„ Z?d"d#„ Z@d$d%„ ZAd&d'„ ZBe
�rd(d)„ ZCeCƒ ZDd*d+„ ZEe@eAeBd,œZFd-d.„ ZGdS )3é    Né   )Ú_NonClosingTextIOWrapperÚ	text_typeÚPY2)ÚbyrefÚPOINTERÚc_intÚc_charÚc_char_pÚc_void_pÚ	py_objectÚ	c_ssize_tÚc_ulongÚwindllÚWINFUNCTYPE)Ú	pythonapi)ÚLPWSTRÚLPCWSTRÚGetCommandLineWÚCommandLineToArgvWé
   é   é   é   iã  é   ó   iÿ  c               @   sj   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
rfe	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© r.   r.   ú2/tmp/pip-build-w1as9q70/click/click/_winconsole.pyr   @   s   
r   Fc             C   sP   t ƒ }|rtnt}tt| ƒt|ƒ|ƒ zt|j }|j|j	ƒS t
t|ƒƒ X d S )N)r   ÚPyBUF_WRITABLEÚPyBUF_SIMPLEÚPyObject_GetBufferr   r   r	   r   Úfrom_addressr   ÚPyBuffer_Release)r   Úwritabler   ÚflagsZbuffer_typer.   r.   r/   Ú
get_bufferX   s    
r7   c               @   s   e Zd Zdd„ Zdd„ ZdS )Ú_WindowsConsoleRawIOBasec             C   s
   || _ d S )N)Úhandle)Úselfr9   r.   r.   r/   Ú__init__e   s    z!_WindowsConsoleRawIOBase.__init__c             C   s   t jj| ƒ dS )NT)ÚioÚ	RawIOBaseÚisatty)r:   r.   r.   r/   r>   h   s    z_WindowsConsoleRawIOBase.isattyN)r(   r)   r*   r;   r>   r.   r.   r.   r/   r8   c   s   r8   c               @   s   e Zd Zdd„ Zdd„ ZdS )Ú_WindowsConsoleReaderc             C   s   dS )NTr.   )r:   r.   r.   r/   Úreadableo   s    z_WindowsConsoleReader.readablec             C   s�   t |ƒ}|sdS |d r tdƒ‚t|dd�}|d }tƒ }t| j||t|ƒd ƒ}tƒ tkrdt	j
dƒ |svtdtƒ  ƒ‚|d tkr†dS d|j S )Nr   r   z>cannot read odd number of bytes from UTF-16-LE encoded consoleT)r5   gš™™™™™¹?zWindows error: %s)r   Ú
ValueErrorr7   r   ÚReadConsoleWr9   r   ÚGetLastErrorÚERROR_OPERATION_ABORTEDÚtimeÚsleepÚOSErrorÚEOFÚvalue)r:   ÚbZbytes_to_be_readÚbufferZcode_units_to_be_readZcode_units_readÚrvr.   r.   r/   Úreadintor   s"    


z_WindowsConsoleReader.readintoN)r(   r)   r*   r@   rM   r.   r.   r.   r/   r?   m   s   r?   c               @   s(   e Zd Zdd„ Zedd„ ƒZdd„ ZdS )Ú_WindowsConsoleWriterc             C   s   dS )NTr.   )r:   r.   r.   r/   r5   �   s    z_WindowsConsoleWriter.writablec             C   s    | t krdS | tkrdS d|  S )NÚERROR_SUCCESSÚERROR_NOT_ENOUGH_MEMORYzWindows error %s)rO   rP   )Úerrnor.   r.   r/   Ú_get_error_message�   s
    z(_WindowsConsoleWriter._get_error_messagec             C   sh   t |ƒ}t|ƒ}t|tƒd }tƒ }t| j||t|ƒd ƒ d|j }|dkrd|dkrdt	| j
tƒ ƒƒ‚|S )Nr   r   )r   r7   ÚminÚMAX_BYTES_WRITTENr   ÚWriteConsoleWr9   r   rI   rG   rR   rC   )r:   rJ   Zbytes_to_be_writtenr   Zcode_units_to_be_writtenZcode_units_writtenZbytes_writtenr.   r.   r/   Úwrite˜   s    


z_WindowsConsoleWriter.writeN)r(   r)   r*   r5   ÚstaticmethodrR   rV   r.   r.   r.   r/   rN   ‹   s   rN   c               @   sH   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_streamrK   )r:   Útext_streamZbyte_streamr.   r.   r/   r;   ª   s    zConsoleStream.__init__c             C   s   | j jS )N)rK   Úname)r:   r.   r.   r/   r[   ®   s    zConsoleStream.namec             C   sD   t |tƒr| jj|ƒS y| jƒ  W n tk
r6   Y nX | jj|ƒS )N)Ú
isinstancer   rY   rV   ÚflushÚ	ExceptionrK   )r:   Úxr.   r.   r/   rV   ²   s    
zConsoleStream.writec             C   s   x|D ]}| j |ƒ qW d S )N)rV   )r:   ÚlinesÚliner.   r.   r/   Ú
writelines»   s    
zConsoleStream.writelinesc             C   s   t | j|ƒS )N)ÚgetattrrY   )r:   r[   r.   r.   r/   Ú__getattr__¿   s    zConsoleStream.__getattr__c             C   s
   | j jƒ S )N)rK   r>   )r:   r.   r.   r/   r>   Â   s    zConsoleStream.isattyc             C   s   d| j | jf S )Nz#<ConsoleStream name=%r encoding=%r>)r[   Úencoding)r:   r.   r.   r/   Ú__repr__Å   s    zConsoleStream.__repr__N)r(   r)   r*   r;   Úpropertyr[   rV   rb   rd   r>   rf   r.   r.   r.   r/   rX   ¨   s   	rX   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:   Úwrappedr.   r.   r/   r;   Ò   s    zWindowsChunkedWriter.__init__c             C   s   t | j|ƒS )N)rc   ri   )r:   r[   r.   r.   r/   rd   ×   s    z WindowsChunkedWriter.__getattr__c             C   sL   t |ƒ}d}x:||k rFt|| tƒ}| jj|||| … ƒ ||7 }qW d S )Nr   )r   rS   rT   ri   rV   )r:   ÚtextZtotal_to_writeZwrittenZto_writer.   r.   r/   rV   Ú   s    
zWindowsChunkedWriter.writeN)r(   r)   r*   Ú__doc__r;   rd   rV   r.   r.   r.   r/   rh   Ì   s   rh   c             C   sD   t r@tjƒ d d… dkr@| tkr@tt| ttt| ƒƒƒ tj| ƒ d S )Nr   é   r   )rm   r   )r   ÚsysÚgetwindowsversionÚ_wrapped_std_streamsÚsetattrrh   rc   Úadd)r[   r.   r.   r/   Ú_wrap_std_streamç   s     rs   c             C   s$   t tjttƒƒdddd�}t|| ƒS )Nz	utf-16-leÚstrictT)Úline_buffering)r   r<   ÚBufferedReaderr?   ÚSTDIN_HANDLErX   )Úbuffer_streamrZ   r.   r.   r/   Ú_get_text_stdinî   s    ry   c             C   s$   t tjttƒƒdddd�}t|| ƒS )Nz	utf-16-lert   T)ru   )r   r<   ÚBufferedWriterrN   ÚSTDOUT_HANDLErX   )rx   rZ   r.   r.   r/   Ú_get_text_stdoutõ   s    r|   c             C   s$   t tjttƒƒdddd�}t|| ƒS )Nz	utf-16-lert   T)ru   )r   r<   rz   rN   ÚSTDERR_HANDLErX   )rx   rZ   r.   r.   r/   Ú_get_text_stderrü   s    r~   c               C   s   t jdjtjdd … ƒƒS )Nú r   )ÚzlibÚcrc32Újoinrn   Úargvr.   r.   r.   r/   Ú_hash_py_argv  s    r„   c                 sœ   t dƒ} ttƒ t| ƒƒ‰ ‡ fdd„td| jƒD ƒ}ttdƒs�|dd … }xFt|ƒdkrŽ|d }|j	dƒ sr|dkrtP |dd … }|j	d	ƒrJP qJW |dd … S )
Nr   c                s   g | ]}ˆ | ‘qS r.   r.   )Ú.0Úi)Úargv_unicoder.   r/   ú
<listcomp>  s    z%_get_windows_argv.<locals>.<listcomp>Úfrozenr   ú-ú-cú-m)r‹   rŒ   )
r   r   r   r   ÚrangerI   Úhasattrrn   r   Ú
startswith)Zargcrƒ   Úargr.   )r‡   r/   Ú_get_windows_argv	  s    

r‘   )r   r   r   c             C   s|   t d k	rx|dkrx|dkrxt| dƒrx| jƒ rxtj| jƒ ƒ}|d k	rxts^t| dd ƒ} | d krpd S ntj	| jƒ t
jƒ || ƒS d S )Nú	utf-16-lert   r>   rK   )r’   N)rt   N)r7   rŽ   r>   Ú_stream_factoriesÚgetÚfilenor   rc   ÚmsvcrtZsetmodeÚosÚO_BINARY)Úfre   ÚerrorsÚfuncr.   r.   r/   Ú_get_windows_console_stream"  s    rœ   iöÿÿÿiõÿÿÿiôÿÿÿ)F)Hr<   r—   rn   r€   rE   Úctypesr–   Ú_compatr   r   r   r   r   r   r	   r
   r   r   r   r   r   r   r   r2   r4   ÚImportErrorZctypes.wintypesr   r   r+   Úkernel32ZGetStdHandlerB   rU   rC   r   Úshell32r   rw   r{   r}   r1   r0   rO   rP   rD   ZSTDIN_FILENOZSTDOUT_FILENOZSTDERR_FILENOrH   rT   Ú	Structurer   r7   r=   r8   r?   rN   ÚobjectrX   rh   Úsetrp   rs   ry   r|   r~   r„   Z_initial_argv_hashr‘   r“   rœ   r.   r.   r.   r/   Ú<module>   sz   4




$