U
    M}g                     @   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Z3z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 eHd6< ej@eId7d8d9ZJej@ejKeL ejKeL ejKej@ d:d;d<ZMd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	LocalFreeiii   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,   5/tmp/pip-unpacked-wheel-pvl2u_o2/click/_winconsole.pyr   K   s   r   Fc              	   C   sT   t  }|rtnt}tt| t|| zt|j }|	|j
W S tt| X d S N)r   PyBUF_WRITABLEPyBUF_SIMPLEPyObject_GetBufferr
   r   PyBuffer_Releaser   r   from_addressr   )r   writabler   flagsZbuffer_typer,   r,   r-   
get_buffer]   s    
r6   c                       s$   e Zd Zdd Z fddZ  ZS )_WindowsConsoleRawIOBasec                 C   s
   || _ d S r.   )handle)selfr8   r,   r,   r-   __init__j   s    z!_WindowsConsoleRawIOBase.__init__c                    s   t    dS NT)superisattyr9   	__class__r,   r-   r=   m   s    
z_WindowsConsoleRawIOBase.isatty)r'   r(   r)   r:   r=   __classcell__r,   r,   r?   r-   r7   i   s   r7   c                   @   s   e Zd Zdd Zdd ZdS )_WindowsConsoleReaderc                 C   s   dS r;   r,   r>   r,   r,   r-   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
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)r4   g?zWindows error: )r   
ValueErrorr6   r   ReadConsoleWr   r8   r   GetLastErrorERROR_OPERATION_ABORTEDtimesleepOSErrorEOFvalue)r9   bZbytes_to_be_readbufferZcode_units_to_be_readZcode_units_readrvr,   r,   r-   readintov   s0    

z_WindowsConsoleReader.readintoN)r'   r(   r)   rC   rP   r,   r,   r,   r-   rB   r   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 r;   r,   r>   r,   r,   r-   r4      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 )rR   rS   )errnor,   r,   r-   _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
| t |S )Nr   r   )r   r6   minMAX_BYTES_WRITTENr   WriteConsoleWr   r8   r   rL   rJ   rU   rF   )r9   rM   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)   r4   staticmethodrU   rY   r,   r,   r,   r-   rQ      s   
rQ   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 r.   )_text_streamrN   )r9   r\   r]   r,   r,   r-   r:      s    zConsoleStream.__init__)r^   c                 C   s   | j jS r.   )rN   namer>   r,   r,   r-   r`      s    zConsoleStream.name)xr^   c                 C   sD   t |tr| j|S z|   W n tk
r6   Y nX | j|S r.   )
isinstancestrr_   rY   flush	ExceptionrN   )r9   ra   r,   r,   r-   rY      s    
zConsoleStream.write)linesr^   c                 C   s   |D ]}|  | qd S r.   )rY   )r9   rf   liner,   r,   r-   
writelines   s    zConsoleStream.writelines)r`   r^   c                 C   s   t | j|S r.   )getattrr_   )r9   r`   r,   r,   r-   __getattr__   s    zConsoleStream.__getattr__c                 C   s
   | j  S r.   )rN   r=   r>   r,   r,   r-   r=      s    zConsoleStream.isattyc                 C   s   d| j d| jdS )Nz<ConsoleStream name=z
 encoding=>)r`   encodingr>   r,   r,   r-   __repr__   s    zConsoleStream.__repr__)r'   r(   r)   tTextIOBinaryIOr:   propertyrc   r`   AnyStrintrY   Iterablerh   Anyrj   boolr=   rm   r,   r,   r,   r-   r[      s   	r[   )buffer_streamr^   c                 C   s.   t tttdddd}ttjt|| S N	utf-16-lestrictT)line_buffering)	r   ioBufferedReaderrB   STDIN_HANDLErn   castro   r[   rw   r\   r,   r,   r-   _get_text_stdin   s    r   c                 C   s.   t tttdddd}ttjt|| S rx   )	r   r|   BufferedWriterrQ   STDOUT_HANDLErn   r   ro   r[   r   r,   r,   r-   _get_text_stdout   s    r   c                 C   s.   t tttdddd}ttjt|| S rx   )	r   r|   r   rQ   STDERR_HANDLErn   r   ro   r[   r   r,   r,   r-   _get_text_stderr   s    r   )r   r   r   _stream_factories)fr^   c              	   C   sV   t | dsdS z|  }W n ttjfk
r6   Y dS X t|}tt|t	t
 S )NfilenoF)hasattrr   rJ   r|   UnsupportedOperationmsvcrtZget_osfhandlerv   GetConsoleModer   r   )r   r   r8   r,   r,   r-   _is_console   s    

r   )r   rl   errorsr^   c                 C   sZ   t d k	rV|dkrV|dkrVt| rVt|  }|d k	rVt| dd }|d krNd S ||S d S )N>   Nry   >   Nrz   rN   )r6   r   r   getr   ri   )r   rl   r   funcrM   r,   r,   r-   _get_windows_console_stream  s    r   )F)Nr|   sysrH   typingrn   ctypesr   r   r   r   r   r   r   r	   r
   r   Zctypes.wintypesr   r   r   r   _compatr   platformAssertionErrorr   r   r   r*   kernel32ZGetStdHandlerE   rX   r   rF   r   shell32r   r   r~   r   r   r0   r/   rR   rS   rG   ZSTDIN_FILENOZSTDOUT_FILENOZSTDERR_FILENOrK   rW   r   ImportErrorr6   r   r1   r2   	RawIOBaser7   rB   rQ   r[   rp   ro   r   r   r   r   Mappingrs   Callable__annotations__rv   r   Optionalrc   r   r,   r,   r,   r-   <module>	   s    

	#  

(  
