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-8app2_gc/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rd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   iii)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




$