o
    %hc^                  	   @   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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mZ d dlmZ d dlm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# d d	l$m%Z% erzd d
l&m'Z' d dl(m)Z) eeee* ge*f  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Z0de,defddZ1dee, dee fddZ2G dd deZ3G dd deZ4	d/d eej5 d!e6d"e7de4fd#d$Z8d%ee d&eeee* ge*f  defd'd(Z9d)edefd*d+Z:d,eee7  de7fd-d.Z;dS )0    N)Path)
TYPE_CHECKINGAnyCallableDictListMappingOptional	TypedDictUnioncast)EventEmitter)AsyncIOEventEmitter)TargetClosedErrorrewrite_error)EventGreenlet)ErrorParsedMessagePayloadparse_error)	Transport)
LocalUtils)
Playwrightc                       s   e Zd Zd fddZ				dd
edededededefddZ					dd
edededededefddZ
				dd
edededededdfddZd
ededee dedef
ddZ  ZS )Channel
connection
ConnectionobjectChannelOwnerreturnNc                    s6   t    | _|j _| _ d fdd d S )Nerrorc                    s    j | S N)_connection_on_event_listener_error)excself P/var/www/html/myenv/lib/python3.10/site-packages/playwright/_impl/_connection.py<lambda>;   s    z"Channel.__init__.<locals>.<lambda>)super__init__r    _guid_objecton)r$   r   r   	__class__r#   r&   r)   6   s
   
zChannel.__init__Fmethodtimeout_calculatorparamsis_internaltitlec                    &   j  fdd||I d H S )Nc                           dS NF_inner_sendr%   r/   r1   r$   r0   r%   r&   r'   F       zChannel.send.<locals>.<lambda>r    wrap_api_callr$   r/   r0   r1   r2   r3   r%   r9   r&   send=      
zChannel.sendc                    r4   )Nc                      r5   NTr7   r%   r9   r%   r&   r'   T   r:   z-Channel.send_return_as_dict.<locals>.<lambda>r;   r=   r%   r9   r&   send_return_as_dictK   r?   zChannel.send_return_as_dictc                    s"   j  fdd|| d S )Nc                      s   j j tdS r@   )r    _send_message_to_serverr+   _augment_paramsr%   r9   r%   r&   r'   c   s    z'Channel.send_no_reply.<locals>.<lambda>)r    wrap_api_call_syncr=   r%   r9   r&   send_no_replyY   s
   	zChannel.send_no_replyreturn_as_dictc                    s   | j jr| j j}d | j _|| j | j|t||}tj| j jj|j	htj
dI d H \}}|j	 s8|j	  tt| }	|	sDd S t|	tsKJ |rO|	S t|	dkrWd S t|	dks_J tt|	}
|	|
 S )N)return_whenr      )r    _errorrB   r+   rC   asynciowait
_transporton_error_futurefutureFIRST_COMPLETEDdonecancelnextiterresult
isinstancedictlen)r$   r/   r0   r1   rF   r   callbackrP   _rT   keyr%   r%   r&   r8   m   s6   

zChannel._inner_send)r   r   r   r   r   N)NFN)__name__
__module____qualname__r)   strTimeoutCalculatorr   boolr   r>   rA   rE   r	   r8   __classcell__r%   r%   r-   r&   r   5   sz    


r   c                
       s   e Zd Zded dedededdf
 fdd	Zd
ee ddfddZdddZ	deeef ddfddZ
dededdfddZdedededdf fddZdededdf fddZ  ZS )r   parent)r   r   typeguidinitializerr   Nc                    s   t  j|jd |j| _|j| _|| _|| _t|tr|jn|| _t|tr(|nd | _	i | _
t| j| | _|| _d| _| | jj
|< | j	rJ| | j	j
|< i | _d S )N)loopF)r(   r)   _loop_dispatcher_fiber_typer*   rU   r   r    _parent_objectsr   _channel_initializer_was_collected_event_to_subscription_mapping)r$   rb   rc   rd   re   r-   r%   r&   r)      s"   
zChannelOwner.__init__reasonc                 C   sT   | j r	| j j| j= | jj| j= |dk| _t| j D ]}|| q| j  d S )Ngc)	rj   rk   r*   r    rn   listvalues_disposeclear)r$   rp   r   r%   r%   r&   rt      s   
zChannelOwner._disposechildc                 C   s(   t d|jj|j= || j|j< | |_d S )Nr   )r   rj   rk   r*   )r$   rv   r%   r%   r&   _adopt   s   
zChannelOwner._adoptmappingc                 C   s
   || _ d S r   )ro   )r$   rx   r%   r%   r&   "_set_event_to_subscription_mapping      
z/ChannelOwner._set_event_to_subscription_mappingeventenabledc                    s2   j |rj fddd d S d S )Nc                      s   j dd  dS )NupdateSubscription)r{   r|   )rl   rE   r%   r|   protocol_eventr$   r%   r&   r'      s
    z3ChannelOwner._update_subscription.<locals>.<lambda>T)ro   getr    rD   )r$   r{   r|   r%   r~   r&   _update_subscription   s   z!ChannelOwner._update_subscriptionkvc                    s*   |  |s| |d t ||| d S r@   )	listenersr   r(   _add_event_handler)r$   r{   r   r   r-   r%   r&   r      s   
zChannelOwner._add_event_handlerfc                    s,   t  || | |s| |d d S d S r6   )r(   remove_listenerr   r   )r$   r{   r   r-   r%   r&   r      s   
zChannelOwner.remove_listener)rv   r   r   N)r[   r\   r]   r   r^   r   r)   r	   rt   rw   ry   r`   r   r   r   r   ra   r%   r%   r-   r&   r      s$    
"r   c                   @   s    e Zd ZdejddfddZdS )ProtocolCallbackrf   r   Nc                    sb     |  _t dtjdd f fdd r/  j fdd d S d S )Ntaskr   c                    s(   r   |  rj  d S d S r   )remove_done_callback	cancelledrN   rQ   )r   cbcurrent_taskr$   r%   r&   r      s
   
z%ProtocolCallback.__init__.<locals>.cbc                    s   r  S d S r   )r   )rY   )r   r   r%   r&   r'      s   z+ProtocolCallback.__init__.<locals>.<lambda>)create_futurerN   rJ   r   Taskadd_done_callback)r$   rf   r%   r   r&   r)      s   

zProtocolCallback.__init__)r[   r\   r]   rJ   AbstractEventLoopr)   r%   r%   r%   r&   r      s    r   c                       s(   e Zd Zd
 fddZddd	Z  ZS )RootChannelOwnerr   r   r   Nc                    s   t  |ddi  d S )NRoot )r(   r)   )r$   r   r-   r%   r&   r)      s   zRootChannelOwner.__init__r   c                    s    t | jdd ddiI d H S )N
initializesdkLanguagepython)from_channelrl   r>   r#   r%   r%   r&   r      s   zRootChannelOwner.initialize)r   r   r   N)r   r   )r[   r\   r]   r)   r   ra   r%   r%   r-   r&   r      s    r   c                       s  e Zd Z	d?dedeeeeegef dede	j
ded ddf fd	d
Zed@ddZdAddZdAddZdAddZdAddZdAddZd?deddfddZdedeegdf ddfddZdeddfdd Z	!dBd"ed#ed$ed%edef
d&d'Zd(eddfd)d*Zd+eddfd,d-Zd.ed/eded0edef
d1d2Zd3edefd4d5Zd3edefd6d7Z 	dCd8eg ef d9ed:edefd;d<Z!	dCd8eg ef d9ed:edefd=d>Z"  Z#S )Dr   Ndispatcher_fiberobject_factory	transportrf   local_utilsr   r   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&   r'     s   
 z%Connection.__init__.<locals>.<lambda>r   FApiZone)default)r(   r)   rh   rL   
on_message_waiting_for_object_last_idrk   
_callbacks_object_factory_is_sync_child_ws_connectionsrg   r   playwright_futurerI   	is_remote
_init_taskcontextvars
ContextVar	_api_zone_local_utils_tracing_count_closed_error)r$   r   r   r   rf   r   r-   r#   r&   r)     s*   


zConnection.__init__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 r@   )r   r#   r%   r%   r&   mark_as_remote(  rz   zConnection.mark_as_remotec                    s   d| _ |  I d H  d S r@   )r   runr#   r%   r%   r&   run_as_sync+  s   zConnection.run_as_syncc                    sX   t   _t  _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&   init3  s   zConnection.run.<locals>.initr   N)
rJ   get_running_looprg   r   r   rL   connectcreate_taskr   r   )r$   r   r%   r#   r&   r   /  s   

zConnection.runc                 C   s2   | j   | j  | j| j   |   d S r   )rL   request_stoprh   switchrg   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   )rL   r   r   r   r#   r%   r%   r&   
stop_async@  s   
zConnection.stop_asynccausec                 C   s   |rt |nt  | _| jr| j s| j  | jD ]}|j  q| j	 D ]}|j
r-q'|j r3q'|j| j q'| j  | d d S )Nclose)r   r   r   rP   rQ   r   rL   disposer   rs   no_replyrN   r   set_exceptionru   emit)r$   r   ws_connectionrX   r%   r%   r&   r   E  s   



zConnection.cleanuprd   rX   c                 C   s   || j |< d S r   )r   )r$   rd   rX   r%   r%   r&   call_on_object_with_known_nameU  s   z)Connection.call_on_object_with_known_name
is_tracingc                 C   s(   |r|  j d7  _ d S |  j d8  _ d S )NrH   )r   )r$   r   r%   r%   r&   set_is_tracingZ  s   zConnection.set_is_tracingFr   r/   r1   r   c                 C   sZ  | j r| j |jrtd|  jd7  _| j}t| j}t| j}tt	j
t|dt	jdd|_||_|| j|< tt| j }|dg }	|	r[|	d d |	d d	 |	d d
 dnd }
ttj  d |d |d  d}|
rw|
|d< |d }|r||d< ||j|| ||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.rH   __pw_stack_trace__
   )limitframesr   filelinecolumn)r   r   r   i  apiName)wallTimer   internallocationr3   )idrd   r/   r1   metadata
localUtils)r   rn   r   r   r   rg   rJ   r   r   	tracebackStackSummarygetattrextract_stackstack_tracer   r   ParsedStackTracer   r   intdatetimenow	timestampr*   _replace_channels_with_guidsr   r   add_stack_to_tracing_no_replyrL   r>   )r$   r   r/   r1   r   r   rX   r   stack_trace_informationr   r   r   r3   messager%   r%   r&   rB   `  s\   






z"Connection._send_message_to_serverr   c              
      s  j rd S |d}|rWj|}|j rd S |jrd S |d}|rG|dsGt|d t|d}d	|j
 |_|j| d S |d}|j| d S |d }|d }|d}	|d	kr|	slJ j| }
|
|	d
 |	d |	d  d S j|}|std| d| |dkrttttf |	d }j|}|std| || d S |dkrt|	tsJ j| ttt |	d d S j| }d|v}zWjr|j|D ]/dtjdd ffdd dt dd f fdd}t!|}|r|"|	 q|"|	 qW d S |r,|j#||	 W d S |j#||	 W d S  t$yN } z%| W Y d }~d S d }~ww )Nr   r   rT   logr   rd   r/   r1   
__create__rc   re   zCannot find object to "z": 	__adopt__zUnknown new child: __dispose__rp   z	jsonPipe@rN   r   c                    s   |   }|r | d S d S r   )	exceptionr!   )rN   r"   r#   r%   r&   _done_callback  s   z+Connection.dispatch.<locals>._done_callbackc                    s$   | }t |r|  d S d S r   )rJ   isfuturer   )r1   potential_future)r   listenerr%   r&   %_listener_with_error_handler_attached  s   
zBConnection.dispatch.<locals>._listener_with_error_handler_attached)&r   r   r   poprN   r   r   r   format_call_logjoinr   format_stackr   _replace_guids_with_channelsr   rk   _create_remote_object	Exceptionr   r   r^   rw   rU   rV   rt   r	   r   rl   r   rJ   Futurer   r   r   r   BaseExceptionr!   )r$   r   r   rX   r   parsed_errorrT   rd   r/   r1   rb   r   
child_guidrv   "should_replace_guids_with_channelsr   gr"   r%   )r   r   r$   r&   r     s   





 


zConnection.dispatchr"   c                 C   s2   t dtjd tjt|||jtjd || _d S )Nz Error occurred in event listener)r   )printsysstderrr   print_exceptionrc   __traceback__rI   )r$   r"   r%   r%   r&   r!     s   
z#Connection._on_event_listener_errorrb   rc   re   c                 C   s8   |  |}| ||||}|| jv r| j|| |S r   )r   r   r   r   )r$   rb   rc   rd   re   rT   r%   r%   r&   r     s
   

z Connection._create_remote_objectpayloadc                 C   s   |d u r|S t |trt|S t |tjjr#t |ts#tt| j|S t |t	r.t
|jdS t |t
rGi }| D ]\}}| |||< q9|S |S )N)rd   )rU   r   r^   collectionsabcSequencerr   mapr   r   rV   r*   itemsr$   r  rT   rZ   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r<|d| jv r(| j|d  jS i }| D ]\}}| |||< q.|S |S )Nrd   )	rU   rr   r
  r   rV   r   rk   rl   r  r  r%   r%   r&   r     s   

z'Connection._replace_guids_with_channelsr   r2   r3   c              
      s   | j  r| I d H S t| j}t|dd ptd}t|||}| j 	| z(z| I d H W W | j 	d  S  t
yQ } zt||d  d| d d }~ww | j 	d  w N__pw_stack__r   r   z: r   r   rJ   r   rg   r   inspectstack+_extract_stack_trace_information_from_stacksetr   r   r$   r   r2   r3   r   st	parsed_str   r%   r%   r&   r<     s&   
zConnection.wrap_api_callc              
   C   s   | j  r| S t| j}t|dd ptd}t|||}| j 	| z%z| W W | j 	d  S  t
yJ } zt||d  d| d d }~ww | j 	d  w r  r  r  r%   r%   r&   rD   2  s$   
zConnection.wrap_api_call_syncr   )r   r   r   )F)FN)$r[   r\   r]   r   r   r   r^   r   r   rJ   r   r	   r)   propertyr   r   r   r   r   r   r   r   r`   r   r   rB   r   r   r   r!   r   r   r   r<   rD   ra   r%   r%   r-   r&   r     s    






7V
	



r   channelr   c                 C   s   | j S r   r+   r  r%   r%   r&   r   E  s   r   c                 C   s   | r| j S d S r   r  r  r%   r%   r&   from_nullable_channelI  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)r[   r\   r]   r^   __annotations__r   r	   r%   r%   r%   r&   r  M  s
   
 r  c                   @   s2   e Zd ZU ee ed< ee ed< ee ed< dS )r   r   r   r3   N)r[   r\   r]   r   r  r  r	   r^   r%   r%   r%   r&   r   T  s   
 r   r  r2   r3   c           
      C   s   t ttjjd }d}d}g }| D ]F}tjjj|jkrq|j|}d}	d|d j	v r7|d j	d j
jd }	|	|d jj7 }	|sM||j|jd|	d |rR|	}q|rX|}d}q|s]|}||red|dS ||dS )Nr   r   r$   .)r   r   r   r  )r   r   r3   )r^   r   
playwright__file__parents_impl_impl_to_api_mappingfilename
startswithf_localsr.   r[   f_codeco_nameappendlineno)
r  r2   r3   playwright_module_pathlast_internal_api_nameapi_nameparsed_framesframeis_playwright_internalmethod_namer%   r%   r&   r  Z  sF   r  r1   r0   c                 C   s*   | d u ri } |r||  d| d< t| S )Ntimeout)r   _filter_none)r1   r0   r%   r%   r&   rC     s
   rC   dc                 C   s>   i }|   D ]\}}|d u rqt|trt|n|||< q|S r   )r  rU   rV   r5  )r6  rT   r   r   r%   r%   r&   r5    s   r5  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&   r'     s    z!format_call_log.<locals>.<lambda>r   z
Call log:

)rW   rr   filterr   )r   r%   r%   r&   r     s
   r   r   )<rJ   collections.abcr  r   r   r  r  r   pathlibr   typingr   r   r   r   r   r   r	   r
   r   r   pyeer   pyee.asyncior   r!  %playwright._impl._impl_to_api_mappingplaywright._impl._errorsr   r   playwright._impl._greenletsr   playwright._impl._helperr   r   r   playwright._impl._transportr   playwright._impl._local_utilsr   playwright._impl._playwrightr   floatr_   r   r   r   r   r   r   r  r  r   	FrameInfor`   r^   r  rC   r5  r   r%   r%   r%   r&   <module>   sf   0^I  D
-
	