B
    L[#                 @   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d
Z'ed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
d/d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 )0    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CommandLineToArgvWiii   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	dded f dS )	Py_bufferbufobjlenitemsizereadonlyndimformatshapestrides
suboffsetsZinternalZ
smalltabler   N)__name__
__module____qualname__r   r   r   r   r
   	c_ssize_pZ_fields_r   insert r*   r*   0lib/python3.7/site-packages/click/_winconsole.pyr   @   s   
r   Fc          	   C   sP   t  }|rtnt}tt| t|| zt|j }||j	S t
t| X d S )N)r   PyBUF_WRITABLEPyBUF_SIMPLEPyObject_GetBufferr   r   r	   r   Zfrom_addressr   PyBuffer_Release)r   writabler   flagsZbuffer_typer*   r*   r+   
get_bufferX   s    
r2   c               @   s   e Zd Zdd Zdd ZdS )_WindowsConsoleRawIOBasec             C   s
   || _ d S )N)handle)selfr4   r*   r*   r+   __init__e   s    z!_WindowsConsoleRawIOBase.__init__c             C   s   t j|  dS )NT)io	RawIOBaseisatty)r5   r*   r*   r+   r9   h   s    z_WindowsConsoleRawIOBase.isattyN)r%   r&   r'   r6   r9   r*   r*   r*   r+   r3   c   s   r3   c               @   s   e Zd Zdd Zdd ZdS )_WindowsConsoleReaderc             C   s   dS )NTr*   )r5   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	
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)r0   g?zWindows error: %s)r   
ValueErrorr2   r   ReadConsoleWr4   r   GetLastErrorERROR_OPERATION_ABORTEDtimeZsleepOSErrorEOFvalue)r5   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;   rG   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*   )r5   r*   r*   r+   r0      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)rI   rJ   )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	| 
t |S )Nr   r   )r   r2   minMAX_BYTES_WRITTENr   WriteConsoleWr4   r   rC   rA   rL   r>   )r5   rD   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'   r0   staticmethodrL   rP   r*   r*   r*   r+   rH      s   rH   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_streamrE   )r5   text_streamZbyte_streamr*   r*   r+   r6      s    zConsoleStream.__init__c             C   s   | j jS )N)rE   name)r5   r*   r*   r+   rU      s    zConsoleStream.namec             C   sD   t |tr| j|S y|   W n tk
r6   Y nX | j|S )N)
isinstancer   rS   rP   flush	ExceptionrE   )r5   xr*   r*   r+   rP      s    
zConsoleStream.writec             C   s   x|D ]}|  | qW d S )N)rP   )r5   linesliner*   r*   r+   
writelines   s    
zConsoleStream.writelinesc             C   s   t | j|S )N)getattrrS   )r5   rU   r*   r*   r+   __getattr__   s    zConsoleStream.__getattr__c             C   s
   | j  S )N)rE   r9   )r5   r*   r*   r+   r9      s    zConsoleStream.isattyc             C   s   d| j | jf S )Nz#<ConsoleStream name=%r encoding=%r>)rU   encoding)r5   r*   r*   r+   __repr__   s    zConsoleStream.__repr__N)r%   r&   r'   r6   propertyrU   rP   r\   r^   r9   r`   r*   r*   r*   r+   rR      s   	rR   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)r5   wrappedr*   r*   r+   r6      s    zWindowsChunkedWriter.__init__c             C   s   t | j|S )N)r]   rc   )r5   rU   r*   r*   r+   r^      s    z WindowsChunkedWriter.__getattr__c             C   sL   t |}d}x:||k rFt|| t}| j||||   ||7 }qW d S )Nr   )r   rM   rN   rc   rP   )r5   textZtotal_to_writeZwrittenZto_writer*   r*   r+   rP      s    
zWindowsChunkedWriter.writeN)r%   r&   r'   __doc__r6   r^   rP   r*   r*   r*   r+   rb      s   rb   c             C   sD   t r@t d d dkr@| tkr@tt| ttt|  t|  d S )Nr   )   r   )r   sysZgetwindowsversion_wrapped_std_streamssetattrrb   r]   add)rU   r*   r*   r+   _wrap_std_stream   s     rl   c             C   s$   t tttdddd}t|| S )Nz	utf-16-lestrictT)line_buffering)r   r7   BufferedReaderr:   STDIN_HANDLErR   )buffer_streamrT   r*   r*   r+   _get_text_stdin   s    rr   c             C   s$   t tttdddd}t|| S )Nz	utf-16-lerm   T)rn   )r   r7   BufferedWriterrH   STDOUT_HANDLErR   )rq   rT   r*   r*   r+   _get_text_stdout   s    ru   c             C   s$   t tttdddd}t|| S )Nz	utf-16-lerm   T)rn   )r   r7   rs   rH   STDERR_HANDLErR   )rq   rT   r*   r*   r+   _get_text_stderr   s    rw   c               C   s   t dtjdd  S )N r   )zlibZcrc32joinrh   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  }xDt|dkr|d }|	drp|dkrrP |dd  }|	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   -)z-cz-m)
r   r   r   r   rangerC   hasattrrh   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|  rxt|  }|d k	rxts^t| dd } | d krpd S nt	|  t
j || S d S )N)z	utf-16-leN)rm   Nr9   rE   )r2   r   r9   _stream_factoriesgetfilenor   r]   msvcrtZsetmodeosZO_BINARY)fr_   errorsfuncr*   r*   r+   _get_windows_console_stream"  s    r   )F)Hr7   r   rh   ry   r@   Zctypesr   Z_compatr   r   r   r   r   r   r	   r
   r   r   r   r   r   r   r   r.   r/   ImportErrorZctypes.wintypesr   r   r(   Zkernel32ZGetStdHandler=   rO   r>   r   Zshell32r   rp   rt   rv   r-   r,   rI   rJ   r?   ZSTDIN_FILENOZSTDOUT_FILENOZSTDERR_FILENOrB   rN   Z	Structurer   r2   r8   r3   r:   rH   objectrR   rb   setri   rl   rr   ru   rw   r|   Z_initial_argv_hashr   r   r   r*   r*   r*   r+   <module>   sz   4




$