3
e                 @   s  U 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 ejdkstd dlZd dlmZ d dlmZ e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edejfZ&ed<Z'ed=Z(ed>Z)d Z*dZ+d Z,dZ-dZ.d Z/dZ0dZ1dZ2dZ3yd d lm4Z4 W n e5k
r   dZ6Y n(X G d!d" d"eZ7e4j8Z8e4j9Z9d?d$d%Z6G d&d' d'e j:Z;G d(d) d)e;Z<G d*d+ d+e;Z=G d,d- d-Z>ej?ej@d.d/d0ZAej?ej@d.d1d2ZBej?ej@d.d3d4ZCeAeBeCd5ZDejEeFejGej?gej@f f Dej@eHd6d7d8ZIej@ejJeK ejJeK ejJej@ d9d:d;ZLdS )@    N)byref)c_char)c_char_p)c_int)	c_ssize_t)c_ulong)c_void_p)POINTER)	py_object)	Structure)DWORD)HANDLE)LPCWSTR)LPWSTR   )_NonClosingTextIOWrapperwin32)windll)WINFUNCTYPEGetCommandLineWCommandLineToArgvW	LocalFree
            i        i  )	pythonapic               @   sR   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	dS )	Py_bufferbufobjlenitemsizereadonlyndimformatshapestrides
suboffsetsZinternalN)
__name__
__module____qualname__r   r
   r   r   r   	c_ssize_p_fields_ r/   r/   2/tmp/pip-build-3irwxpxt/click/click/_winconsole.pyr   K   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/   r0   
get_buffer]   s    
r8   c                   s$   e Zd Zdd Z fddZ  ZS )_WindowsConsoleRawIOBasec             C   s
   || _ d S )N)handle)selfr:   r/   r/   r0   __init__j   s    z!_WindowsConsoleRawIOBase.__init__c                s   t  j  dS )NT)superisatty)r;   )	__class__r/   r0   r>   m   s    
z_WindowsConsoleRawIOBase.isatty)r*   r+   r,   r<   r>   __classcell__r/   r/   )r?   r0   r9   i   s   r9   c               @   s   e Zd Zdd Zdd ZdS )_WindowsConsoleReaderc             C   s   dS )NTr/   )r;   r/   r/   r0   readables   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rht
jd |s|tdt  |d tkrdS d|j S )Nr   r   z>cannot read odd number of bytes from UTF-16-LE encoded consoleT)r6   g?zWindows error: )r"   
ValueErrorr8   r   ReadConsoleWr   r:   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/   r0   readintov   s,    

z_WindowsConsoleReader.readintoN)r*   r+   r,   rB   rO   r/   r/   r/   r0   rA   r   s   rA   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/   r0   r6      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 )rQ   rR   )errnor/   r/   r0   _get_error_message   s
    z(_WindowsConsoleWriter._get_error_messagec             C   sl   t |}t|}t|td }t }tt| j||t|d  d|j	 }|dkrh|dkrht
| jt |S )Nr   r   )r"   r8   minMAX_BYTES_WRITTENr   WriteConsoleWr   r:   r   rK   rI   rT   rE   )r;   rL   Zbytes_to_be_writtenr    Zcode_units_to_be_writtenZcode_units_writtenZbytes_writtenr/   r/   r0   write   s    
z_WindowsConsoleWriter.writeN)r*   r+   r,   r6   staticmethodrT   rX   r/   r/   r/   r0   rP      s   rP   c               @   s   e Zd ZejejddddZeedddZ	ej
edd	d
Zejej
 ddddZeejdddZedddZdd ZdS )ConsoleStreamN)text_streambyte_streamreturnc             C   s   || _ || _d S )N)_text_streamrM   )r;   r[   r\   r/   r/   r0   r<      s    zConsoleStream.__init__)r]   c             C   s   | j jS )N)rM   name)r;   r/   r/   r0   r_      s    zConsoleStream.name)xr]   c             C   sD   t |tr| jj|S y| j  W n tk
r6   Y nX | jj|S )N)
isinstancestrr^   rX   flush	ExceptionrM   )r;   r`   r/   r/   r0   rX      s    
zConsoleStream.write)linesr]   c             C   s   x|D ]}| j | qW d S )N)rX   )r;   re   liner/   r/   r0   
writelines   s    
zConsoleStream.writelines)r_   r]   c             C   s   t | j|S )N)getattrr^   )r;   r_   r/   r/   r0   __getattr__   s    zConsoleStream.__getattr__c             C   s
   | j j S )N)rM   r>   )r;   r/   r/   r0   r>      s    zConsoleStream.isattyc             C   s   d| j d| jdS )Nz<ConsoleStream name=z
 encoding=>)r_   encoding)r;   r/   r/   r0   __repr__   s    zConsoleStream.__repr__)r*   r+   r,   tTextIOBinaryIOr<   propertyrb   r_   ZAnyStrintrX   Iterablerg   ZAnyri   boolr>   rl   r/   r/   r/   r0   rZ      s   	rZ   )buffer_streamr]   c             C   s.   t tjttdddd}tjtjt|| S )Nz	utf-16-lestrictT)line_buffering)	r   ioBufferedReaderrA   STDIN_HANDLErm   castrn   rZ   )rt   r[   r/   r/   r0   _get_text_stdin   s    r{   c             C   s.   t tjttdddd}tjtjt|| S )Nz	utf-16-leru   T)rv   )	r   rw   BufferedWriterrP   STDOUT_HANDLErm   rz   rn   rZ   )rt   r[   r/   r/   r0   _get_text_stdout   s    r~   c             C   s.   t tjttdddd}tjtjt|| S )Nz	utf-16-leru   T)rv   )	r   rw   r|   rP   STDERR_HANDLErm   rz   rn   rZ   )rt   r[   r/   r/   r0   _get_text_stderr   s    r   )r   r   r   )fr]   c             C   sT   t | dsdS y| j }W n ttjfk
r4   dS X tj|}tt|t	t
 S )NfilenoF)hasattrr   rI   rw   UnsupportedOperationmsvcrtZget_osfhandlers   GetConsoleModer   r   )r   r   r:   r/   r/   r0   _is_console   s    

r   )r   rk   errorsr]   c             C   sZ   t d k	rV|dkrV|dkrVt| rVtj| j }|d k	rVt| dd }|d krNd S ||S d S )N	utf-16-leru   rM   >   r   N>   Nru   )r8   r   _stream_factoriesgetr   rh   )r   rk   r   funcrL   r/   r/   r0   _get_windows_console_stream  s    r   iii)F)Mrw   sysrG   typingrm   ctypesr   r   r   r   r   r   r   r	   r
   r   Zctypes.wintypesr   r   r   r   _compatr   platformAssertionErrorr   r   r   r-   kernel32ZGetStdHandlerD   rW   r   rE   r   shell32r   r   ry   r}   r   r2   r1   rQ   rR   rF   ZSTDIN_FILENOZSTDOUT_FILENOZSTDERR_FILENOrJ   rV   r   ImportErrorr8   r   r3   r5   	RawIOBaser9   rA   rP   rZ   ro   rn   r{   r~   r   r   Mappingrq   Callablers   r   Optionalrb   r   r/   r/   r/   r0   <module>	   s    

	#  

&