3
¦Yði´  ã               @   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sät‚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-8om4l6ph/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rŒd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�   iöÿÿÿiõÿÿÿiôÿÿÿ)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ˆ    

	#  

&