a
    Ò�éi  ã                   @   s²   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 d dl	m
Z
 d dlmZmZmZmZ d dlmZ d dlmZ ee dœdd	„ZG d
d„ deƒZG dd„ deƒZdS )é    N)ÚABCÚabstractmethod)ÚPath)ÚCallableÚDictÚOptionalÚUnion)Úget_driver_env)ÚParsedMessagePayload©Úreturnc                
   C   sv   z6t jd u stt jdƒsW d S t jjr,W d S t j ¡ W S  tttjfyp   tt dƒr\t j	sbY d S t j	 ¡  Y S 0 d S )NÚclosedÚ
__stderr__)
ÚsysÚstderrÚhasattrr   ÚfilenoÚNotImplementedErrorÚAttributeErrorÚioÚUnsupportedOperationr   © r   r   úK/home/Claro/venv/lib/python3.9/site-packages/playwright/_impl/_transport.pyÚ_get_stderr_fileno   s    r   c                   @   s°   e Zd Zejddœdd„Zeddœdd„ƒZddœdd	„Zeddœd
d„ƒZ	eddœdd„ƒZ
eddœdd„ƒZeeddœdd„ƒZeedœdd„Zeeef edœdd„ZdS )Ú	TransportN)Úloopr   c                 C   s   || _ dd„ | _| ¡ | _d S )Nc                 S   s   d S ©Nr   )Ú_r   r   r   Ú<lambda>4   ó    z$Transport.__init__.<locals>.<lambda>)Z_loopÚ
on_messageZcreate_futureÚon_error_future)Úselfr   r   r   r   Ú__init__2   s    
zTransport.__init__r   c                 C   s   d S r   r   ©r"   r   r   r   Úrequest_stop7   s    zTransport.request_stopc                 C   s   d S r   r   r$   r   r   r   Údispose;   s    zTransport.disposec                 Ã   s   d S r   r   r$   r   r   r   Úwait_until_stopped>   s    zTransport.wait_until_stoppedc                 Ã   s   d S r   r   r$   r   r   r   ÚconnectB   s    zTransport.connectc                 Ã   s   d S r   r   r$   r   r   r   ÚrunF   s    zTransport.run©Úmessager   c                 C   s   d S r   r   )r"   r+   r   r   r   ÚsendJ   s    zTransport.sendc                 C   s0   t  |¡}dtjv r(tdt j|dd�ƒ | ¡ S )NÚDEBUGPz[32mSEND>[0mé   ©Úindent)ÚjsonÚdumpsÚosÚenvironÚprintÚencode)r"   r+   Úmsgr   r   r   Úserialize_messageN   s    

zTransport.serialize_message)Údatar   c                 C   s,   t  |¡}dtjv r(tdt j|dd�ƒ |S )Nr-   z[33mRECV>[0mr.   r/   )r1   Úloadsr3   r4   r5   r2   )r"   r9   Úobjr   r   r   Údeserialize_messageT   s    

zTransport.deserialize_message)Ú__name__Ú
__module__Ú__qualname__ÚasyncioÚAbstractEventLoopr#   r   r%   r&   r'   r(   r)   r   r,   Úbytesr8   r   Ústrr
   r<   r   r   r   r   r   1   s   r   c                       sp   e Zd Zejeddœ‡ fdd„Zddœdd„Zddœdd	„Zddœd
d„Z	ddœdd„Z
eddœdd„Z‡  ZS )ÚPipeTransportN)r   Údriver_executabler   c                    s   t ƒ  |¡ d| _|| _d S )NF)Úsuperr#   Ú_stoppedÚ_driver_executable)r"   r   rE   ©Ú	__class__r   r   r#   ]   s    zPipeTransport.__init__r   c                 C   s   | j s
J ‚d| _| j  ¡  d S )NT)Ú_outputrG   Úcloser$   r   r   r   r%   d   s    
zPipeTransport.request_stopc                 Ã   s   | j I d H  d S r   )Ú_stopped_futurer$   r   r   r   r'   i   s    z PipeTransport.wait_until_stoppedc              
   Ã   sÐ   t  ¡ | _z‚tƒ }ttddƒr*| dd¡ d }tjdkrXt 	¡ }| j
tjO  _
tj|_t jt| jƒdt jjt jjtƒ d||d�I d H | _W n4 tyÀ } z| j |¡ |‚W Y d }~n
d }~0 0 | jj| _d S )	NÚfrozenFZPLAYWRIGHT_BROWSERS_PATHÚ0Úwin32z
run-driveré €  )ÚstdinÚstdoutr   ÚlimitÚenvÚstartupinfo)r@   ZFuturerM   r	   Úgetattrr   Ú
setdefaultÚplatformÚ
subprocessZSTARTUPINFOZdwFlagsZSTARTF_USESHOWWINDOWZSW_HIDEZwShowWindowZcreate_subprocess_execrC   rH   ÚPIPEr   Ú_procÚ	Exceptionr!   Úset_exceptionrR   rK   )r"   rU   rV   Úexcr   r   r   r(   l   s0    

ø
zPipeTransport.connectc                 Ã   s*  | j jsJ ‚| j jsJ ‚| j�s
z¦| j j d¡I d H }| jrBW �q
tj|ddd�}tdƒ}|r¤t|dƒ}| j j |¡I d H }| jr„q¤||8 }t	|ƒrž|| }qZ|}qZ| jr°W �q
|  
|¡}|  |¡ W n0 tjyö   | jsì| j tdƒ¡ Y �q
Y n0 t d¡I d H  q| j  ¡ I d H  | j d ¡ d S )Né   ÚlittleF©Ú	byteorderÚsignedr   rQ   z/Connection closed while reading from the driver)r\   rS   rR   rG   ZreadexactlyÚintÚ
from_bytesrB   ÚminÚlenr<   r    r@   ZIncompleteReadErrorr!   r^   r]   ÚsleepÚwaitrM   Z
set_result)r"   ÚbufferÚlengthZto_readr9   r;   r   r   r   r)   ‹   s>    


ÿzPipeTransport.runr*   c                 C   s8   | j s
J ‚|  |¡}| j  t|ƒjdddd�| ¡ d S )Nr`   ra   Frb   )rK   r8   Úwriterh   Úto_bytes)r"   r+   r9   r   r   r   r,   ¯   s
    

ÿzPipeTransport.send)r=   r>   r?   r@   rA   r   r#   r%   r'   r(   r)   r   r,   Ú__classcell__r   r   rI   r   rD   \   s   þ$rD   )r@   r   r1   r3   rZ   r   Úabcr   r   Úpathlibr   Útypingr   r   r   r   Zplaywright._impl._driverr	   Zplaywright._impl._helperr
   re   r   r   rD   r   r   r   r   Ú<module>   s   +