a
    ҏiP                     @   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 d dlm	Z	m
Z
mZmZmZmZmZmZmZ d dlmZ d dlmZ d dlmZ d dlZd dlmZ d dlmZmZmZ d d	lmZ e	rd d
l m!Z! d dl"m#Z# ej$dkrd dlm%Z% nd dl&m%Z% G dd deZ'G dd deZ(G dd dZ)G dd de(Z*G dd deZ+e'e
dddZ,ee' ee
 dddZ-G dd de%Z.G dd  d e%Z/eej0 e1ee/ d!d"d#Z2eed$d%d&Z3eee4  e4d'd(d)Z5dS )*    N)Path)	TYPE_CHECKINGAnyCallableDictListMappingOptionalUnioncast)greenlet)EventEmitter)AsyncIOEventEmitter)TargetClosedError)ErrorParsedMessagePayloadparse_error)	Transport)
LocalUtils)
Playwright)      )	TypedDictc                       sz   e Zd Zdddd fddZdeeeddd	Zdeeedd
dZdeeddddZ	ee
e eedddZ  ZS )Channel
ConnectionChannelOwnerN)
connectionobjectreturnc                    s"   t    || _|j| _|| _d S N)super__init___connection_guid_object)selfr   r   	__class__ L/home/Claro/venv/lib/python3.9/site-packages/playwright/_impl/_connection.pyr!   7   s    
zChannel.__init__)methodparamsr   c                    s   j  fddI d H S )Nc                      s     dS NF
inner_sendr(   r*   r+   r%   r(   r)   <lambda>?       zChannel.send.<locals>.<lambda>r"   wrap_api_callr%   r*   r+   r(   r/   r)   send=   s    zChannel.sendc                    s   j  fddI d H S )Nc                      s     dS NTr-   r(   r/   r(   r)   r0   D   r1   z-Channel.send_return_as_dict.<locals>.<lambda>r2   r4   r(   r/   r)   send_return_as_dictB   s    zChannel.send_return_as_dictc                    s   j  fdd d S )Nc                      s    j j d u ri ndS r6   )r"   _send_message_to_serverr$   r(   r/   r(   r)   r0   J   s   z'Channel.send_no_reply.<locals>.<lambda>)r"   wrap_api_call_syncr4   r(   r/   r)   send_no_replyG   s    zChannel.send_no_reply)r*   r+   return_as_dictr   c           
         s   |d u ri }| j | j||}| j jr:| j j}d | j _|tj| j jj|jhtj	dI d H \}}|j
 st|j  tt| }|sd S t|tsJ |r|S t|dkrd S t|dksJ tt|}	||	 S )N)Zreturn_whenr      )r"   r8   r$   _errorasynciowait
_transportZon_error_futurefutureZFIRST_COMPLETEDdonecancelnextiterresult
isinstancedictlen)
r%   r*   r+   r;   callbackerrorrB   _rF   keyr(   r(   r)   r.   O   s8    

zChannel.inner_send)N)N)N)__name__
__module____qualname__r!   strr   r   r5   r7   r:   r	   boolr.   __classcell__r(   r(   r&   r)   r   6   s   	
r   c                       s   e Zd Zed eeedd fddZee ddddZd dd	d
dZ	eeef ddddZ
eeddddZeeedd fddZeedd fddZ  ZS )r   )r   r   Nparenttypeguidinitializerr   c                    s   t  j|jd |j| _|j| _|| _|| _t|tr<|jn|| _t|trP|nd | _	i | _
t| j| | _|| _d| _| | jj
|< | j	r| | j	j
|< i | _d S )N)loopF)r    r!   _loop_dispatcher_fiber_typer#   rG   r   r"   _parent_objectsr   _channelZ_initializer_was_collected_event_to_subscription_mapping)r%   rU   rV   rW   rX   r&   r(   r)   r!   t   s"    zChannelOwner.__init__)reasonr   c                 C   sT   | j r| j j| j= | jj| j= |dk| _t| j D ]}|| q6| j  d S )Ngc)	r]   r^   r#   r"   r`   listvalues_disposeclear)r%   rb   r   r(   r(   r)   rf      s    
zChannelOwner._dispose)childr   c                 C   s(   t d|jj|j= || j|j< | |_d S )Nr   )r   r]   r^   r#   )r%   rh   r(   r(   r)   _adopt   s    zChannelOwner._adopt)mappingr   c                 C   s
   || _ d S r   )ra   )r%   rj   r(   r(   r)   "_set_event_to_subscription_mapping   s    z/ChannelOwner._set_event_to_subscription_mapping)eventenabledr   c                    s.   j |r*j fddd d S )Nc                      s   j d dS )NZupdateSubscription)rl   rm   )r_   r:   r(   rm   Zprotocol_eventr%   r(   r)   r0      s   
z3ChannelOwner._update_subscription.<locals>.<lambda>T)ra   getr"   r9   )r%   rl   rm   r(   rn   r)   _update_subscription   s    z!ChannelOwner._update_subscription)rl   kvr   c                    s*   |  |s| |d t ||| d S r6   )	listenersrp   r    _add_event_handler)r%   rl   rq   rr   r&   r(   r)   rt      s    
zChannelOwner._add_event_handler)rl   fr   c                    s(   t  || | |s$| |d d S r,   )r    remove_listenerrs   rp   )r%   rl   ru   r&   r(   r)   rv      s    
zChannelOwner.remove_listener)rN   rO   rP   r
   rQ   r   r!   r	   rf   ri   rk   rR   rp   r   rt   rv   rS   r(   r(   r&   r)   r   s   s   
r   c                   @   s   e Zd ZejddddZdS )ProtocolCallbackN)rY   r   c                    s\     |  _t tjd d fdd rX  j fdd d S )N)taskr   c                    s$   r   |  r j  d S r   )remove_done_callback	cancelledrA   rC   )rx   cbcurrent_taskr%   r(   r)   r|      s    
z%ProtocolCallback.__init__.<locals>.cbc                    s   r  S d S r   )ry   )rL   )r|   r}   r(   r)   r0      s    z+ProtocolCallback.__init__.<locals>.<lambda>)create_futurerA   r>   r}   ZTaskZadd_done_callback)r%   rY   r(   r{   r)   r!      s    

zProtocolCallback.__init__)rN   rO   rP   r>   AbstractEventLoopr!   r(   r(   r(   r)   rw      s   rw   c                       s2   e Zd Zddd fddZdddd	Z  ZS )
RootChannelOwnerr   N)r   r   c                    s   t  |ddi  d S )NZRoot )r    r!   )r%   r   r&   r(   r)   r!      s    zRootChannelOwner.__init__r   r   c                    s   t | jdddiI d H S )N
initializeZsdkLanguagepython)from_channelr_   r5   r%   r(   r(   r)   r      s    zRootChannelOwner.initialize)rN   rO   rP   r!   r   rS   r(   r(   r&   r)   r      s   r   c                       sp  e Zd Zd0eeeeeegef ee	j
ed dd fddZeddddZddd	d
ZddddZddddZddddZddddZd1eddddZeeegdf ddddZeddddZd2eeeeedddZedd d!d"Zeeeeed#d$d%Zeed&d'd(Zeed&d)d*Zd3eg ef eed+d,d-Z d4eg ef eed+d.d/Z!  Z"S )5r   Nr   )dispatcher_fiberobject_factory	transportrY   local_utilsr   c                    s   t    | _| _ fdd j_i  _d _i  _i  _| _	d _
g  _| _|  _d  _d _d  _tjdd d _| _d _d  _d S )Nc                    s
     | S r   )dispatch)msgr   r(   r)   r0      r1   z%Connection.__init__.<locals>.<lambda>r   FZApiZone)default)r    r!   r[   r@   Z
on_message_waiting_for_object_last_idr^   
_callbacks_object_factory_is_sync_child_ws_connectionsrZ   r~   playwright_futurer=   	is_remote
_init_taskcontextvarsZ
ContextVar	_api_zone_local_utils_tracing_count_closed_error)r%   r   r   r   rY   r   r&   r   r)   r!      s*    

zConnection.__init__r   c                 C   s   | j s
J | j S r   )r   r   r(   r(   r)   r      s    
zConnection.local_utilsc                 C   s
   d| _ d S r6   )r   r   r(   r(   r)   mark_as_remote  s    zConnection.mark_as_remotec                    s   d| _ |  I d H  d S r6   )r   runr   r(   r(   r)   run_as_sync  s    zConnection.run_as_syncc                    sZ   t   _t  _d d fdd} j I d H   j|  _ j	 I d H  d S )Nr   c                      s    j  j I d H  d S r   )r   
set_result_root_objectr   r(   r   r(   r)   init  s    zConnection.run.<locals>.init)
r>   Zget_running_looprZ   r   r   r@   connectZcreate_taskr   r   )r%   r   r(   r   r)   r     s    

zConnection.runc                 C   s2   | j   | j  | j| j   |   d S r   )r@   request_stopr[   switchrZ   Zrun_until_completewait_until_stoppedcleanupr   r(   r(   r)   	stop_sync  s    

zConnection.stop_syncc                    s&   | j   | j  I d H  |   d S r   )r@   r   r   r   r   r(   r(   r)   
stop_async  s    
zConnection.stop_async)causer   c                 C   s~   |rt t|nt  | _| jr2| j s2| j  | jD ]}|j  q8| j	
 D ]}|j| j qR| j	  | d d S )Nclose)r   rQ   r   r   rB   rC   r   r@   Zdisposer   re   rA   set_exceptionrg   emit)r%   r   Zws_connectionrJ   r(   r(   r)   r   "  s    


zConnection.cleanup)rW   rJ   r   c                 C   s   || j |< d S r   )r   )r%   rW   rJ   r(   r(   r)   call_on_object_with_known_name/  s    z)Connection.call_on_object_with_known_name)
is_tracingr   c                 C   s&   |r|  j d7  _ n|  j d8  _ d S )Nr<   )r   )r%   r   r(   r(   r)   set_in_tracing4  s    zConnection.set_in_tracingF)r   r*   r+   no_replyr   c              	   C   sB  | j r| j |jrtd|  jd7  _| j}t| j}t| j}tt	j
t|dt	 |_||_|| j|< tt| j }|dg }	t|	dkr|	d d |	d d |	d d d	nd }
||j|| |ttj  d
 |d |
|d  dd}| jdkr(|	r(|jdkr(| j||	 | j| || j|< |S )Nz?The object has been collected to prevent unbounded heap growth.r<   Z__pw_stack_trace__framesr   filelinecolumn)r   r   r   i  apiName)ZwallTimer   locationZinternal)idrW   r*   r+   metadataZ
localUtils)r   r`   r   r   rw   rZ   r>   r}   r   	tracebackStackSummarygetattrextract_stackstack_tracer   r   ParsedStackTracer   ro   rI   r#   _replace_channels_with_guidsintdatetimenow	timestampr   r   Zadd_stack_to_tracing_no_replyr@   r5   )r%   r   r*   r+   r   r   rJ   rx   Zstack_trace_informationr   r   messager(   r(   r)   r8   :  sR    







z"Connection._send_message_to_server)r   r   c              
   C   s  | j r
d S |d}|r| j|}|j r2d S |jr<d S |d}|r|dst|d }dt	
|jdd  |_| jt|d7  _|j| n| |d}|j| d S |d }|d }|d	}	|d
kr|	sJ | j| }
| |
|	d |	d |	d  d S | j|}|s>td| d| |dkrttttf |	d }| j|}|s~td| || d S |dkrt|	tsJ | j| ttt |	d d S | j| }d|v}zv| jr&|j|D ]0}t |}|r|!| |	 n
|!|	 qn*|rB|j"|| |	 n|j"||	 W nB t#y } z(t$dt%j&d t	'  || _(W Y d }~n
d }~0 0 d S )Nr   rK   rF   r   ilogrW   r*   r+   Z
__create__rV   rX   zCannot find object to "z": Z	__adopt__zUnknown new child: Z__dispose__rb   z	jsonPipe@z Error occurred in event listener)r   ))r   ro   r   poprA   rz   r   r   joinr   format_listr   _stack_messageformat_call_logr   _replace_guids_with_channelsr   r^   _create_remote_object	Exceptionr   r   rQ   ri   rG   rH   rf   r	   r   r_   rs   r   r   r   BaseExceptionprintsysstderr	print_excr=   )r%   r   r   rJ   rK   Zparsed_errorrF   rW   r*   r+   rU   r   Z
child_guidrh   Z"should_replace_guids_with_channelsZlistenergexcr(   r(   r)   r   l  s|    








 

zConnection.dispatchrT   c                 C   s8   |  |}| ||||}|| jv r4| j|| |S r   )r   r   r   r   )r%   rU   rV   rW   rX   rF   r(   r(   r)   r     s
    

z Connection._create_remote_object)payloadr   c                 C   s   |d u r|S t |trt|S t |tr8tt| j|S t |trNt|jdS t |tri }|	 D ]\}}| |||< qd|S |S )N)rW   )
rG   r   rQ   rd   mapr   r   rH   r#   itemsr%   r   rF   rM   valuer(   r(   r)   r     s    



z'Connection._replace_channels_with_guidsc                 C   s|   |d u r|S t |tr&tt| j|S t |trx|d| jv rP| j|d  jS i }| D ]\}}| |||< q\|S |S )NrW   )	rG   rd   r   r   rH   ro   r^   r_   r   r   r(   r(   r)   r     s    

z'Connection._replace_guids_with_channels)r|   is_internalr   c              	      sr   | j  r| I d H S t| j}t|dt }| j t	|| z| I d H W | j d  S | j d  0 d S NZ__pw_stack__
r   ro   r>   r}   rZ   r   inspectstackset+_extract_stack_trace_information_from_stackr%   r|   r   rx   str(   r(   r)   r3     s    
zConnection.wrap_api_callc              	   C   sf   | j  r| S t| j}t|dt }| j t	|| z| W | j d  S | j d  0 d S r   r   r   r(   r(   r)   r9     s    
zConnection.wrap_api_call_sync)N)N)F)F)F)#rN   rO   rP   r   r   r   rQ   r   r   r>   r   r	   r!   propertyr   r   r   r   r   r   r   r   r   rR   r   rw   r8   r   r   r   r   r   r3   r9   rS   r(   r(   r&   r)   r      sX     2N  r   )channelr   c                 C   s   | j S r   r$   r   r(   r(   r)   r     s    r   c                 C   s   | r
| j S d S r   r   r   r(   r(   r)   from_nullable_channel  s    r   c                   @   s2   e Zd ZU eed< eed< eed< ee ed< dS )
StackFramer   r   r   functionN)rN   rO   rP   rQ   __annotations__r   r	   r(   r(   r(   r)   r     s   
r   c                   @   s&   e Zd ZU ee ed< ee ed< dS )r   r   r   N)rN   rO   rP   r   r   r   r	   rQ   r(   r(   r(   r)   r     s   
r   )r   r   r   c           	      C   s   t ttjjd }d}d}g }| D ]z}|j|}d}d|d jv r\|d jd jj	d }||d j
j7 }|s||j|jd|d |r|}q$|r$|}d}q$|s|}||rdn|dS )Nr   r   r%   .)r   r   r   r   )r   r   )rQ   r   
playwright__file__parentsfilename
startswithf_localsr'   rN   f_codeco_nameappendlineno)	r   r   Zplaywright_module_pathZlast_internal_api_nameZapi_nameZparsed_framesframeZis_playwright_internalmethod_namer(   r(   r)   r     s8    
r   )dr   c                 C   s   dd |   D S )Nc                 S   s   i | ]\}}|d ur||qS r   r(   ).0rq   rr   r(   r(   r)   
<dictcomp>9  r1   zfilter_none.<locals>.<dictcomp>)r   )r   r(   r(   r)   filter_none8  s    r   )r   r   c                 C   s8   | sdS t ttdd | dkr&dS dd|  d S )Nr   c                 S   s   |   S r   )strip)xr(   r(   r)   r0   ?  r1   z!format_call_log.<locals>.<lambda>r   z
Call log:
z
  - 
)rI   rd   filterr   )r   r(   r(   r)   r   <  s
    r   )6r>   r   r   r   r   r   pathlibr   typingr   r   r   r   r   r   r	   r
   r   r   Zpyeer   Zpyee.asyncior   r   Zplaywright._impl._errorsr   Zplaywright._impl._helperr   r   r   Zplaywright._impl._transportr   Zplaywright._impl._local_utilsr   Zplaywright._impl._playwrightr   version_infor   Ztyping_extensionsr   r   rw   r   r   r   r   r   r   	FrameInforR   r   r   rQ   r   r(   r(   r(   r)   <module>   sH   ,
=G   
&