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  | _zt }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}|rt|d}| j j|I d H }| jrq||8 }t	|r|| }qZ|}qZ| jrW 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   +