o
    ïT·j”  ã                	   @  s  d dl m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 ddl	m
Z
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gZe dd„ e edƒeddƒ¡D ƒ¡Zd+dd„Zd,dd„Zd,dd„ZG dd„ dejƒZ d-dd „Z!d.d#d$„Z"d/d&d'„Z#d0d1d*d„Z$dS )2é    )ÚannotationsN)Ú	Generatoré   )ÚClientConnectionÚconnect)ÚSimpleQueue)ÚConnectionClosed)ÚClose)ÚStreamReader)ÚversionÚmainc                 C  s"   i | ]}|t t|ƒƒd d… “qS )r   éÿÿÿÿ)ÚreprÚchr)Ú.0Úi© r   úQ/home/dinkstrade/pdmp-scanner/venv/lib/python3.10/site-packages/websockets/cli.pyÚ
<dictcomp>!   s   " r   é    é   é    ÚstringÚstrÚreturnc                 C  s
   |   t¡S )zAMake a string safe for a terminal by escaping control characters.)Ú	translateÚTERMINAL_ESCAPES©r   r   r   r   Úescape%   s   
r   ÚNonec                 C  ó"   t j d| › d�¡ t j ¡  d S )Nz	7
[A[Lz
8[B©ÚsysÚstdoutÚwriteÚflushr   r   r   r   Úprint_during_input*   s   øþr&   c                 C  r    )Nz[KÚ
r!   r   r   r   r   Úprint_over_input>   s   üþr(   c                   @  sH   e Zd Zddd„Zddd„Zdd
d„Zddd„Zddd„Zddd„ZdS )Ú	ReadLinesr   r   c                 C  s   t ƒ | _tƒ | _d S ©N)r
   Úreaderr   Úmessages©Úselfr   r   r   Ú__init__K   s   zReadLines.__init__úGenerator[None, None, None]c                 c  sF   � 	 t j d¡ t j ¡  | j t j¡E d H }| j | 	¡  
d¡¡ q)NTz> z
)r"   r#   r$   r%   r+   Ú	read_lineÚmaxsizer,   ÚputÚdecodeÚrstrip)r.   Úliner   r   r   ÚparseO   s   €
üzReadLines.parseÚ	transportúasyncio.BaseTransportc                 C  s   |   ¡ | _t| jƒ d S r*   )r7   ÚparserÚnext)r.   r8   r   r   r   Úconnection_madeV   ó   
zReadLines.connection_madeÚdataÚbytesc                 C  s   | j  |¡ t| jƒ d S r*   )r+   Ú	feed_datar;   r:   )r.   r>   r   r   r   Údata_receivedZ   s   zReadLines.data_receivedc                 C  s   | j  ¡  d S r*   )r+   Úfeed_eofr-   r   r   r   Úeof_received^   s   zReadLines.eof_receivedÚexcúException | Nonec                 C  s   | j  ¡  | j ¡  d S r*   )r+   Údiscardr,   Úabort)r.   rD   r   r   r   Úconnection_lostb   r=   zReadLines.connection_lostN)r   r   )r   r0   )r8   r9   r   r   )r>   r?   r   r   )rD   rE   r   r   )	Ú__name__Ú
__module__Ú__qualname__r/   r7   r<   rA   rC   rH   r   r   r   r   r)   J   s    




r)   Ú	websocketr   c                 Ã  sF   �| 2 z3 d H W }t |tƒrtdt|ƒ ƒ qtd| ¡  ƒ q6 d S )Nz< z< (binary) )Ú
isinstancer   r&   r   Úhex)rL   Úmessager   r   r   Úprint_incoming_messagesg   s   €
ürP   r,   úSimpleQueue[str]c                 Ã  sX   �	 z	|  ¡ I d H }W n
 ty   Y d S w z
|  |¡I d H  W n
 ty*   Y d S w qr*   )ÚgetÚEOFErrorÚsendr   )rL   r,   rO   r   r   r   Úsend_outgoing_messageso   s   €ÿÿùrU   Úuric           	   
   Ã  sf  �z	t | ƒI d H }W n" ty, } ztd| › d|› d�ƒ t d¡ W Y d }~nd }~ww td| › d�ƒ t ¡ }| ttj	¡I d H \}}t 
t|ƒ¡}t 
t||jƒ¡}z(ztj||gtjd�I d H  W n
 tjyo   Y nw W | ¡  | ¡  | ¡  n| ¡  | ¡  | ¡  w | ¡ I d H  |jd urœ|jd usžJ ‚t|j|jƒ}tdtt|ƒƒ› d�ƒ d S )NzFailed to connect to z: Ú.r   zConnected to )Úreturn_whenzConnection closed: )r   Ú	ExceptionÚprintr"   ÚexitÚasyncioÚget_running_loopÚconnect_read_piper)   ÚstdinÚcreate_taskrP   rU   r,   ÚwaitÚFIRST_COMPLETEDÚCancelledErrorÚcancelÚcloseÚ
close_codeÚclose_reasonr	   r(   r   r   )	rV   rL   rD   Úloopr8   ÚprotocolÚincomingÚoutgoingÚclose_statusr   r   r   Úinteractive_client~   sH   €€þÿ
ÿü
ÿ€
þ
rm   Úargvúlist[str] | Nonec                 C  sÔ   t jdddd�}| ¡ }|jddd� |jdd	d
d� | | ¡}|jr,tdt› �ƒ d S |jd u r:| 	¡  t
 d¡ t
jdkrDt d¡ zdd l}W n	 tyS   Y nw zt t|jƒ¡ W d S  tyi   Y d S w )NÚ
websocketszInteractive WebSocket client.F)ÚprogÚdescriptionÚadd_helpz	--versionÚ
store_true)ÚactionrV   z<uri>ú?)ÚmetavarÚnargszwebsockets é   Úwin32Ú r   )ÚargparseÚArgumentParserÚadd_mutually_exclusive_groupÚadd_argumentÚ
parse_argsr   rZ   Úwebsockets_versionrV   Úprint_usager"   r[   ÚplatformÚosÚsystemÚreadlineÚImportErrorr\   Úrunrm   ÚKeyboardInterrupt)rn   r:   ÚgroupÚargsr†   r   r   r   r   §   s6   ý




ÿÿ)r   r   r   r   )r   r   r   r   )rL   r   r   r   )rL   r   r,   rQ   r   r   )rV   r   r   r   r*   )rn   ro   r   r   )%Ú
__future__r   r|   r\   Ú	itertoolsr„   r"   Útypingr   Úasyncio.clientr   r   Úasyncio.messagesr   Ú
exceptionsr   Úframesr	   Ústreamsr
   r   r�   Ú__all__r   Ú	maketransÚchainÚranger   r   r&   r(   ÚProtocolr)   rP   rU   rm   r   r   r   r   r   Ú<module>   s2    ÿ





)