o
    %hS                     @   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
mZmZmZ d dlmZmZ d dlmZ dee fddZG d	d
 d
eZG dd deZdS )    N)ABCabstractmethod)CallableDictOptionalUnion)compute_driver_executableget_driver_env)ParsedMessagePayloadreturnc                
   C   sr   zt 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y8   tt dr.t j	s1Y d S t j	  Y S w )Nclosed
__stderr__)
sysstderrhasattrr   filenoNotImplementedErrorAttributeErrorioUnsupportedOperationr    r   r   O/var/www/html/myenv/lib/python3.10/site-packages/playwright/_impl/_transport.py_get_stderr_fileno   s   r   c                   @   s   e Zd ZdejddfddZedddZddd	Zedd
dZ	edddZ
edddZededdfddZdedefddZdeeef defddZdS )	Transportloopr   Nc                 C   s   || _ dd | _| | _d S )Nc                 S      d S Nr   )_r   r   r   <lambda>3   s    z$Transport.__init__.<locals>.<lambda>)_loop
on_messagecreate_futureon_error_futureselfr   r   r   r   __init__1   s   
zTransport.__init__c                 C   r   r   r   r$   r   r   r   request_stop6      zTransport.request_stopc                 C   r   r   r   r&   r   r   r   dispose:   s   zTransport.disposec                       d S r   r   r&   r   r   r   wait_until_stopped=      zTransport.wait_until_stoppedc                    r*   r   r   r&   r   r   r   connectA   r,   zTransport.connectc                    r*   r   r   r&   r   r   r   runE   r,   zTransport.runmessagec                 C   r   r   r   )r$   r/   r   r   r   sendI   r(   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_messageM   s   

zTransport.serialize_messagedatac                 C   s,   t |}dtjv rtdt j|dd |S )Nr1   z[33mRECV>[0mr2   r3   )r5   loadsr7   r8   r9   r6   )r$   r=   objr   r   r   deserialize_messageS   s   

zTransport.deserialize_messager   N)__name__
__module____qualname__asyncioAbstractEventLoopr%   r   r'   r)   r+   r-   r.   r   r0   bytesr<   r   strr
   r@   r   r   r   r   r   0   s    
r   c                       sb   e Zd Zdejddf fddZdddZddd	Zdd
dZdddZ	de
ddfddZ  ZS )PipeTransportr   r   Nc                    s   t  | d| _d S )NF)superr%   _stoppedr#   	__class__r   r   r%   \   s   
zPipeTransport.__init__c                 C   s   | j sJ d| _| j   d S )NT)_outputrK   closer&   r   r   r   r'   `   s   
zPipeTransport.request_stopc                    s   | j I d H  d S r   )_stopped_futurer&   r   r   r   r+   e   s   z PipeTransport.wait_until_stoppedc                    s   t  | _zJt }ttddst dr|dd d }tj	dkr3t
 }| jt
jO  _t
j|_t \}}t j||dt j
jt j
jt d||d		I d H | _W n tyd } z| j| |d }~ww | jj| _d S )
NfrozenF__compiled__PLAYWRIGHT_BROWSERS_PATH0win32z
run-driver   )stdinstdoutr   limitenvstartupinfo)rE   FuturerP   r	   getattrr   globalsget
setdefaultplatform
subprocessSTARTUPINFOdwFlagsSTARTF_USESHOWWINDOWSW_HIDEwShowWindowr   create_subprocess_execPIPEr   _proc	Exceptionr"   set_exceptionrW   rN   )r$   rZ   r[   executable_pathentrypoint_pathexcr   r   r   r-   h   s:   


zPipeTransport.connectc                    s&  | j jsJ | j jsJ | jszR| j jdI d H }| jr W nctj|ddd}td}|rRt|d}| j j|I d H }| jrAn||8 }t	|rN|| }n|}|s.| jrWW n,| 
|}| | W n tjyw   | jsu| jtd Y nw tdI d H  | jr| j  I d H  | jd  d S )N   littleF	byteordersignedr   rV   z/Connection closed while reading from the driver)rj   rX   rW   rK   readexactlyint
from_bytesrG   minlenr@   r    rE   IncompleteReadErrorr"   rl   rk   sleepcommunicaterP   
set_result)r$   bufferlengthto_readr=   r?   r   r   r   r.      sF   



zPipeTransport.runr/   c                 C   s8   | j sJ | |}| j t|jdddd|  d S )Nrp   rq   Frr   )rN   r<   writery   to_bytes)r$   r/   r=   r   r   r   r0      s
   

zPipeTransport.sendrA   )rB   rC   rD   rE   rF   r%   r'   r+   r-   r.   r   r0   __classcell__r   r   rL   r   rI   [   s    



!$rI   )rE   r   r5   r7   rb   r   abcr   r   typingr   r   r   r   playwright._impl._driverr   r	   playwright._impl._helperr
   rv   r   r   rI   r   r   r   r   <module>   s   +