o
    QhT                     @   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mZ d dlmZ d dlmZm Z m!Z! d d	l"m#Z# ertd d
l$m%Z% 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,de(defddZ-dee( dee fddZ.G dd deZ/G dd deZ0d eej1 d!e2dee0 fd"d#Z3d$edefd%d&Z4d'eee5  de5fd(d)Z6dS )*    N)Path)
TYPE_CHECKINGAnyCallableDictListMappingOptional	TypedDictUnioncast)EventEmitter)AsyncIOEventEmitter)TargetClosedError)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fddZdd	ed
edefddZdd	ed
eddfddZ	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 Y/home/air/yokohama/back/venv/lib/python3.10/site-packages/playwright/_impl/_connection.py<lambda>8   s    z"Channel.__init__.<locals>.<lambda>)super__init__r   _guid_objecton)r#   r   r   	__class__r"   r%   r(   3   s
   
zChannel.__init__methodparamsc                        j  fddI d H S )Nc                           dS NF
inner_sendr$   r.   r/   r#   r$   r%   r&   <       zChannel.send.<locals>.<lambda>r   wrap_api_callr#   r.   r/   r$   r5   r%   send:      
zChannel.sendc                    r0   )Nc                      r1   NTr3   r$   r5   r$   r%   r&   A   r6   z-Channel.send_return_as_dict.<locals>.<lambda>r7   r9   r$   r5   r%   send_return_as_dict?   r;   zChannel.send_return_as_dictc                    s   j  fdd d S )Nc                      s$   j j d u ri dS dS r<   )r   _send_message_to_serverr*   r$   r5   r$   r%   r&   G   s
    z'Channel.send_no_reply.<locals>.<lambda>)r   wrap_api_call_syncr9   r$   r5   r%   send_no_replyD   s   zChannel.send_no_replyreturn_as_dictc           
         s   |d u ri }| j jr| j j}d | j _|| j | j|t|}tj| j jj|j	htj
dI d H \}}|j	 s=|j	  tt| }|sId S t|tsPJ |rT|S t|dkr\d S t|dksdJ tt|}	||	 S )N)return_whenr      )r   _errorr>   r*   _filter_noneasynciowait
_transporton_error_futurefutureFIRST_COMPLETEDdonecancelnextiterresult
isinstancedictlen)
r#   r.   r/   rA   r   callbackrL   _rP   keyr$   r$   r%   r4   L   s:   

zChannel.inner_send)r   r   r   r   r   Nr   )__name__
__module____qualname__r(   strr   r   r:   r=   r@   r	   boolr4   __classcell__r$   r$   r,   r%   r   2   s    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)   rQ   r   r   _parent_objectsr   _channel_initializer_was_collected_event_to_subscription_mapping)r#   r]   r^   r_   r`   r,   r$   r%   r(   q   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)	re   rf   r)   r   ri   listvalues_disposeclear)r#   rk   r   r$   r$   r%   ro      s   
zChannelOwner._disposechildc                 C   s(   t d|jj|j= || j|j< | |_d S )Nr   )r   re   rf   r)   )r#   rq   r$   r$   r%   _adopt   s   
zChannelOwner._adoptmappingc                 C   s
   || _ d S r   )rj   )r#   rs   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S )NupdateSubscription)rv   rw   )rg   r@   r$   rw   protocol_eventr#   r$   r%   r&      s    
z3ChannelOwner._update_subscription.<locals>.<lambda>T)rj   getr   r?   )r#   rv   rw   r$   ry   r%   _update_subscription   s   z!ChannelOwner._update_subscriptionkvc                    s*   |  |s| |d t ||| d S r<   )	listenersr|   r'   _add_event_handler)r#   rv   r}   r~   r,   r$   r%   r      s   
zChannelOwner._add_event_handlerfc                    s,   t  || | |s| |d d S d S r2   )r'   remove_listenerr   r|   )r#   rv   r   r,   r$   r%   r      s   
zChannelOwner.remove_listener)rq   r   r   N)rW   rX   rY   r   rZ   r   r(   r	   ro   rr   rt   r[   r|   r   r   r   r\   r$   r$   r,   r%   r   p   s$    

"r   c                   @   s    e Zd ZdejddfddZdS )ProtocolCallbackra   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	cancelledrJ   rM   )r   cbcurrent_taskr#   r$   r%   r      s
   
z%ProtocolCallback.__init__.<locals>.cbc                    s   r  S d S r   )r   )rU   )r   r   r$   r%   r&      s   z+ProtocolCallback.__init__.<locals>.<lambda>)create_futurerJ   rF   r   Taskadd_done_callback)r#   ra   r$   r   r%   r(      s   

zProtocolCallback.__init__)rW   rX   rY   rF   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iI d H S )N
initializesdkLanguagepython)from_channelrg   r:   r"   r$   r$   r%   r      s   zRootChannelOwner.initialize)r   r   r   N)r   r   )rW   rX   rY   r(   r   r\   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d@ddZd@ddZd@ddZd@ddZd@d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	!dAd"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!	!dAd8eg ef d9edefd:d;Z"	!dAd8eg ef d9edefd<d=Z#  Z$S )Br   Ndispatcher_fiberobject_factory	transportra   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(   rc   rH   
on_message_waiting_for_object_last_idrf   
_callbacks_object_factory_is_sync_child_ws_connectionsrb   r   playwright_futurerD   	is_remote
_init_taskcontextvars
ContextVar	_api_zone_local_utils_tracing_count_closed_error)r#   r   r   r   ra   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  ru   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%   init  s   zConnection.run.<locals>.initr   N)
rF   get_running_looprb   r   r   rH   connectcreate_taskr   r   )r#   r   r$   r"   r%   r   	  s   

zConnection.runc                 C   s2   | j   | j  | j| j   |   d S r   )rH   request_stoprc   switchrb   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   )rH   r   r   r   r"   r$   r$   r%   
stop_async  s   
zConnection.stop_asynccausec                 C   s~   |rt t|nt  | _| jr| j s| j  | jD ]}|j  q| j	
 D ]	}|j| j q)| j	  | d d S )Nclose)r   rZ   r   r   rL   rM   r   rH   disposer   rn   rJ   set_exceptionrp   emit)r#   r   ws_connectionrT   r$   r$   r%   r     s   


zConnection.cleanupr_   rT   c                 C   s   || j |< d S r   )r   )r#   r_   rT   r$   r$   r%   call_on_object_with_known_name,  s   z)Connection.call_on_object_with_known_name
is_tracingc                 C   s(   |r|  j d7  _ d S |  j d8  _ d S )NrC   )r   )r#   r   r$   r$   r%   set_in_tracing1  s   zConnection.set_in_tracingFr   r.   r/   no_replyc                 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 }	|	rY|	d d |	d d |	d d d	nd }
ttj  d
 |d |d  d}|
ru|
|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.rC   __pw_stack_trace__framesr   filelinecolumn)r   r   r   i  apiName)wallTimer   internallocation)idr_   r.   r/   metadata
localUtils)r   ri   r   r   r   rb   rF   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_replyrH   r:   )r#   r   r.   r/   r   r   rT   r   stack_trace_informationr   r   r   messager$   r$   r%   r>   7  sV   






z"Connection._send_message_to_serverr   c              
      s  j rd S |d}|rbj|}|j rd S |jrd S |d}|rR|dsRt|d }dt	
|jdd  |_| jt|d7  _|j| d S |d}|j| d S |d }|d }|d	}	|d
kr|	swJ 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 |r7|j%||	 W d S |j%||	 W d S  t&yY } z'| W Y d }~d S d }~ww )Nr   r   rP   r   ilogr_   r.   r/   
__create__r^   r`   zCannot find object to "z": 	__adopt__zUnknown new child: __dispose__rk   z	jsonPipe@rJ   r   c                    s   |   }|r | d S d S r   )	exceptionr    )rJ   r!   r"   r$   r%   _done_callback  s   z+Connection.dispatch.<locals>._done_callbackc                    s$   | }t |r|  d S d S r   )rF   isfuturer   )r/   potential_future)r   listenerr$   r%   %_listener_with_error_handler_attached  s   
zBConnection.dispatch.<locals>._listener_with_error_handler_attached)(r   r{   r   poprJ   r   r   r   joinr   format_listr   _stack_messageformat_call_logr   _replace_guids_with_channelsr   rf   _create_remote_object	Exceptionr   r   rZ   rr   rQ   rR   ro   r	   r   rg   r   rF   Futurer   r   r   r   BaseExceptionr    )r#   r   r   rT   r   parsed_errorrP   r_   r.   r/   r]   r   
child_guidrq   "should_replace_guids_with_channelsr   gr!   r$   )r   r   r#   r%   r   k  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_exceptionr^   __traceback__rD   )r#   r!   r$   r$   r%   r      s   
z#Connection._on_event_listener_errorr]   r^   r`   c                 C   s8   |  |}| ||||}|| jv r| j|| |S r   )r   r   r   r   )r#   r]   r^   r_   r`   rP   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)r_   )rQ   r   rZ   collectionsabcSequencerm   mapr   r   rR   r)   itemsr#   r   rP   rV   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 )Nr_   )	rQ   rm   r  r   rR   r{   rf   rg   r  r  r$   r$   r%   r     s   

z'Connection._replace_guids_with_channelsr   is_internalc              	      sp   | j  r| I d H S t| j}t|dt }| j t	|| z| I d H W | j d  S | j d  w N__pw_stack__
r   r{   rF   r   rb   r   inspectstackset+_extract_stack_trace_information_from_stackr#   r   r  r   str$   r$   r%   r8     s   
zConnection.wrap_api_callc              	   C   sb   | j  r| S t| j}t|dt }| j t	|| z
| W | j d  S | j d  w r	  r  r  r$   r$   r%   r?     s   
zConnection.wrap_api_call_syncr   )r   r   r   )F)%rW   rX   rY   r   r   r   rZ   r   r   rF   r   r	   r(   propertyr   r   r   r   r   r   r   r   r   r[   r   r   r>   r   r   r   r    r   r   r   r8   r?   r\   r$   r$   r,   r%   r      s    






4W
	



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)rW   rX   rY   rZ   __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)rW   rX   rY   r   r  r  r	   rZ   r$   r$   r$   r%   r     s   
 r   r  r  c           	      C   s   t ttjjd }d}d}g }| D ]=}|j|}d}d|d jv r.|d jd jj	d }||d j
j7 }|sD||j|jd|d |rI|}q|rO|}d}q|sT|}||r[ddS |dS )Nr   r   r#   .)r   r   r   r  )r   r   )rZ   r   
playwright__file__parentsfilename
startswithf_localsr-   rW   f_codeco_nameappendlineno)	r  r  playwright_module_pathlast_internal_api_nameapi_nameparsed_framesframeis_playwright_internalmethod_namer$   r$   r%   r  #  s>   r  dc                 C   s   dd |   D S )Nc                 S   s   i | ]\}}|d ur||qS r   r$   ).0r}   r~   r$   r$   r%   
<dictcomp>J  s    z _filter_none.<locals>.<dictcomp>)r  )r,  r$   r$   r%   rE   I  s   rE   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&   P  s    z!format_call_log.<locals>.<lambda>r   z
Call log:
z
  - 
)rS   rm   filterr   )r   r$   r$   r%   r   M  s
   r   )7rF   collections.abcr  r   r   r  r   r   pathlibr   typingr   r   r   r   r   r   r	   r
   r   r   pyeer   pyee.asyncior   r  playwright._impl._errorsr   playwright._impl._greenletsr   playwright._impl._helperr   r   r   playwright._impl._transportr   playwright._impl._local_utilsr   playwright._impl._playwrightr   r   r   r   r   r   r   r  r  r   	FrameInfor[   r  rE   rZ   r   r$   r$   r$   r%   <module>   sN   0>G  4
&