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	rÜd d
l m!Z! d dl"m#Z# ej$dkrôd 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|ƒƒ ¡ }|sŒd S t|tƒsšJ ‚|r¢|S t|ƒdkr²d S t|ƒdksÂJ ‚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¡s¢t|d ƒ}d t	 
|j¡dd … ¡|_| jt| d¡ƒ7  _|j |¡ n|  | d¡¡}|j |¡ d S |d }|d }| d	¡}	|d
k�r|	sîJ ‚| j| }
|  |
|	d |	d |	d ¡ d S | j |¡}|�s>td|› d|› �ƒ‚|dk�rŒttttf |	ƒd }| j |¡}|�s~td|› �ƒ‚| |¡ d S |dk�rÊt|	tƒ�s¦J ‚| j|  ttt |	 d¡ƒ¡ d S | j| }d|v}zv| j�r&|j |¡D ]0}t |ƒ}|�r| !|  |	¡¡ n
| !|	¡ �qòn*|�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ƒr€i }| 	¡ 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¨|}||r²d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   
þ&