o
    Pjmj                     @   s  d dl Z d dlZd dlm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mZmZ d dl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mZm Z  d d	l!m"Z" d d
l#m$Z$ d dl%m&Z& d dl'm(Z( d dl)m*Z*m+Z+ d dl,m-Z-m.Z. d dl/m0Z0 d dl1m2Z2 d dl3m4Z4 d dl5m6Z6 d dl7m8Z8m9Z9m:Z:m;Z;m<Z<m=Z=m>Z>m?Z?m@Z@mAZAmBZBmCZCmDZD d dlEmFZFmGZGmHZHmIZImJZJmKZK d dlLmMZMmNZNmOZO d dlPmQZQ d dlRmSZS d dlTmUZU d dlVmWZW erd dlXmYZY G dd deZZdS )    N)Path)SimpleNamespace)TYPE_CHECKINGAnyCallableDictListLiteralOptionalPatternSequenceSetUnioncast)CookieGeolocationSetCookieParamStorageStateWebErrorLocation)
CDPSession)Clock)ChannelOwnerfrom_channelfrom_nullable_channel)ConsoleMessage)Credentials)Debugger)Dialog)
DisposableDisposableStub)ErrorTargetClosedError)EventContextManagerImpl)APIRequestContext)Frame)	HarRouter)HarContentPolicyHarModeRouteFromHarNotFoundPolicyRouteHandlerRouteHandlerCallbackTimeoutSettingsURLMatchWebSocketRouteHandlerCallbackasync_readfileasync_writefilelocals_to_paramsparse_errorto_impl)RequestResponseRouteWebSocketRouteWebSocketRouteHandlerserialize_headers)BindingCallPageWorker)escape_regex_flags)Tracing)Waiter)WebError)Browserc                       s~  e Zd Zedi ddddddddd	d
dddddddddddddddddddddd d!d"Zd#ed$ed%ed&ed'd(f
 fd)d*Zd'efd+d,Z	de
d'd(fd-d.Zd/ed'd(fd0d1Zd2ed'd(fd3d4Zd5ed'd(fd6d7Zd8ed'd(fd9d:Zd8ee d'd(fd;d<Zd8ed'd(fd=d>Zd8ee d'd(fd?d@Zed'ee
 fdAdBZed'edC fdDdEZdFeeeef  dGee dHee dIeee e ef  dJee! d'd(fdKdLZ"d'e
fdMdNZ#ddOeee$e f d'ee% fdPdQZ&dRe$e' d'd(fdSdTZ(	(	(	(ddUeee e f dVeee e f dWeee e f d'd(fdXdYZ)	(ddZe$e d[ed'd(fd\d]Z*dd^d_Z+dd`e,d'd(fdadbZ-dceeef d'd(fdddeZ.dfed'd(fdgdhZ/	(ddiedWeeef d'e0fdjdkZ1dUedle2d'e0fdmdnZ3dUedle2d'e0fdodpZ4	(ddqe5dre6dse7d'e8fdtduZ9	(ddqe5dree6 d'd(fdvdwZ:	(ddxee; dyee; dze<d{ d'd(fd|d}Z=dqe5dre>d'd(fd~dZ?dddZ@	(ddze<d{ d'd(fddZA	(	(	(	(	(ddeeef dqee e ef deBdede<d de!d'd(fddZCdddZDdddZE	(	(ddede2d8ed'eFfddZGdddZHd'efddZIdded'd(fddZJ	(ddWeeef ded'eKfddZLdeeKeef d'd(fddZMd'ee fddZN	(ddede2d8ed'eOfddZP	(	(dde2eQgef d8ed'eFeQ fddZR	(	(dde2e
gef d8ed'eFe
 fddZSdeTd'd(fddZUdeVdedee dee
 d'd(f
ddZWdeVdeeX dedee
 d'd(f
ddZYded'd(fddZZde[d'd(fddZ\de]dee
 de^d'd(fddZ_deVdee
 d'd(fddZ`deXdee
 d'd(fddZaed'ee
 fddZbed'eeT fddZcdee
edf d'eefddÄZfed'egfddńZhed'eifddǄZjedddʄZked'elfdd̄Zmed'enfdd΄Zo  ZpS )BrowserContextBackgroundPagebackgroundpageClosecloseConsoleconsoler   dialogDownloaddownloadFrameAttachedframeattachedFrameDetachedframedetachedFrameNavigatedframenavigatedr:   page	PageClose	pageclosePageLoadpageloadr?   weberrorServiceWorkerserviceworkerr3   requestr4   responseRequestFailedrequestfailedRequestFinishedrequestfinishedparenttypeguidinitializerreturnNc                    sj  t  |||| d  _|jjdkrtd| _g  _g  _g  _i  _	t
d  _d  _|d  _t  _ jd _ jd _ttt|d  _ttt|d  _t|d  _ j j_t  _t  _ jd fd	d
  jd fdd
  jd fdd
  jd fdd
  jd fdd
  jd fdd
  jd fdd
  jd fdd
  jd fdd
  jd fdd
  jd fdd
  jd fd d
  jd! fd"d
 t   _! " j#j$ fd#d
 d  _%g  _& 't(j#j)dt(j#j*dt(j#j+dt(j#j,dt(j#j-d!t(j#j.di d$ _/d S )%Nr@   optionsbaseURLrecordVideotracingdebuggerrequestContextbindingCallc                         t| d S )Nbinding)_on_bindingr   paramsself V/home/thesage/.local/lib/python3.10/site-packages/playwright/_impl/_browser_context.py<lambda>       z)BrowserContext.__init__.<locals>.<lambda>rE   c                          S N)	_on_close)_rp   rr   rs   rt          rQ   c                    rk   )NrQ   )_on_pager   rn   rp   rr   rs   rt      ru   routec                    s    j  t| dS )Nr|   )_loopcreate_task	_on_router   getrn   rp   rr   rs   rt      s
    webSocketRoutec                    s    j  t| d S )Nr   )r}   r~   _on_web_socket_router   rn   rp   rr   rs   rt      s
    
serviceWorkerc                    rk   )Nworker)_on_service_workerr   rn   rp   rr   rs   rt      ru   rG   c                    s
     | S rw   )_on_console_message)eventrp   rr   rs   rt         
 rH   c                    rk   )NrH   )
_on_dialogr   rn   rp   rr   rs   rt      ru   	pageErrorc              
      s:     t| d d t| d tt| dpddddS )NerrorrQ   location r   )urllinecolumn)_on_page_errorr1   r   r   r   r   rn   rp   rr   rs   rt      s    
rY   c                         t| d t| dS )NrY   rQ   )_on_requestr   r   r   rn   rp   rr   rs   rt          
rZ   c                    r   )NrZ   rQ   )_on_responser   r   r   rn   rp   rr   rs   rt      r   requestFailedc              	      s,     t| d | d | dt| dS )NrY   responseEndTimingfailureTextrQ   )_on_request_failedr   r   r   rn   rp   rr   rs   rt      s    
requestFinishedc              	      s0     t| d t| d| d t| dS )NrY   rZ   r   rQ   )_on_request_finishedr   r   r   rn   rp   rr   rs   rt      s    
c                    s    j dS NT)_closed_future
set_result)contextrp   rr   rs   rt          F)0super__init___browser	__class____name__r   _pages_routes_web_socket_routes	_bindingsr+   _timeout_settings_owner_page_optionsset_service_workersr   	_base_url_videos_dirr=   r   _tracingr   	_debugger_requestr   _clockr   _credentials_channelonasyncioFuturer   onceEventsrD   _close_reason_har_routers"_set_event_to_subscription_mappingrA   rF   r   r3   r4   r]   r[   _closing_or_closed)rq   r_   r`   ra   rb   r   rp   rs   r   q   s   







	





	

	

zBrowserContext.__init__c                 C   s   d| j  dS )Nz<BrowserContext browser=>)browserrp   rr   rr   rs   __repr__   s   zBrowserContext.__repr__c                 C   sJ   | j | | tjj| |jr!|j s#|jtjj| d S d S d S rw   )	r   appendemitrA   r   r:   _opener	is_closedPopup)rq   rQ   rr   rr   rs   r{      s
   zBrowserContext._on_pager|   c                    s   |_ |j } j }|D ]`}|r|js jr d S ||jjs%q| jvr+q|j	r4 j
| z||I d H }W t jdkrSt j fddd nt jdkrjt j fddd w w |rp d S qz|dI d H  W d S  ty   Y d S w )Nr   c                      rv   rw   )_update_interception_patternsrr   rp   rr   rs   rt   	  rz   z*BrowserContext._on_route.<locals>.<lambda>T)_contextrY   
_safe_pager   copy_close_was_calledr   matchesr   will_expireremovehandlelenr   r~   _connectionwrap_api_call_inner_continue	Exception)rq   r|   rQ   route_handlersroute_handlerhandledrr   rp   rs   r      sJ   


zBrowserContext._on_routeweb_socket_routec                    s@   t  fdd| jD d }|r| I d H  d S    d S )Nc                 3   s     | ]}|  jr|V  qd S rw   )r   r   ).0r   r   rr   rs   	<genexpr>  s    

z6BrowserContext._on_web_socket_route.<locals>.<genexpr>)nextr   r   connect_to_server)rq   r   r   rr   r   rs   r     s   
z#BrowserContext._on_web_socket_routebinding_callc                 C   s2   | j |jd }|d u rd S t|| d S )Nname)r   r   _initializerr   r~   call)rq   r   funcrr   rr   rs   rm   #  s   zBrowserContext._on_bindingtimeoutc                 C   
   |  |S rw   )$_set_default_navigation_timeout_implrq   r   rr   rr   rs   set_default_navigation_timeout)     
z-BrowserContext.set_default_navigation_timeoutc                 C      | j | d S rw   )r   r   r   rr   rr   rs   r   ,     z3BrowserContext._set_default_navigation_timeout_implc                 C   r   rw   )_set_default_timeout_implr   rr   rr   rs   set_default_timeout/  r   z"BrowserContext.set_default_timeoutc                 C   r   rw   )r   r   r   rr   rr   rs   r   2  r   z(BrowserContext._set_default_timeout_implc                 C   s
   | j  S rw   )r   r   rp   rr   rr   rs   pages5     
zBrowserContext.pagesr@   c                 C      | j S rw   )r   rp   rr   rr   rs   r   9     zBrowserContext.browserrecord_har_pathrecord_har_contentrecord_har_omit_contentrecord_har_url_filterrecord_har_modec                    s\   |sd S t |}|drdnd}|p|du rdn|}| jj|d |||p&ddI d H  d S )Nz.zipattachembedTomitfullharrQ   r   update_contentupdate_mode)strendswithr   _record_into_har)rq   r   r   r   r   r   default_policycontent_policyrr   rr   rs   _initialize_har_from_options=  s    z+BrowserContext._initialize_har_from_optionsc                    s(   | j rtdt| jdd I d H S )Nz Please use browser.new_context()newPage)r   r    r   r   sendrp   rr   rr   rs   new_pageV  s   zBrowserContext.new_pageurlsc                    s:   |d u rg }t |tr|g}| jdd t|dI d H S )Ncookies)r	  )
isinstancer   r   r  dict)rq   r	  rr   rr   rs   r
  [  s   
zBrowserContext.cookiesr
  c                    "   | j dd t|dI d H  d S )N
addCookies)r
  r   r  r  )rq   r
  rr   rr   rs   add_cookiesb      zBrowserContext.add_cookiesr   domainpathc                    s   | j dd t|tr|nd t|tr|jnd t|tr t|nd t|tr(|nd t|tr1|jnd t|tr;t|nd t|trC|nd t|trL|jnd t|trVt|nd d	I d H  d S )NclearCookies)	r   nameRegexSourcenameRegexFlagsr  domainRegexSourcedomainRegexFlagsr  pathRegexSourcepathRegexFlags)r   r  r  r   r   patternr<   )rq   r   r  r  rr   rr   rs   clear_cookiese  s   zBrowserContext.clear_cookiespermissionsoriginc                    "   | j dd tt I d H  d S )NgrantPermissionsr   r  r0   locals)rq   r  r  rr   rr   rs   grant_permissions  s    z BrowserContext.grant_permissionsc                    s   | j dd I d H  d S )NclearPermissions)r   r  rp   rr   rr   rs   clear_permissions  s   z BrowserContext.clear_permissionsgeolocationc                    r  )NsetGeolocationr!  )rq   r&  rr   rr   rs   set_geolocation  r  zBrowserContext.set_geolocationheadersc                    s&   | j dd tt|dI d H  d S )NsetExtraHTTPHeaders)r)  )r   r  r  r8   )rq   r)  rr   rr   rs   set_extra_http_headers  s   z%BrowserContext.set_extra_http_headersofflinec                    r  )N
setOffline)r,  r  )rq   r,  rr   rr   rs   set_offline  r  zBrowserContext.set_offlinescriptc                    sJ   |rt |I d H  }t|tstdt| jdd t|dI d H S )Nz1Either path or script parameter must be specifiedaddInitScript)source)	r.   decoder  r   r    r   r   r  r  )rq   r/  r  rr   rr   rs   add_init_script  s   
zBrowserContext.add_init_scriptcallbackc                    sl   | j D ]}||jv rtd| dq|| jv r!td| d|| j|< t| jdd t|dI d H S )Nz
Function "z1" has been already registered in one of the pagesz" has been already registeredexposeBinding)r   )r   r   r    r   r   r  r  )rq   r   r4  rQ   rr   rr   rs   expose_binding  s   




zBrowserContext.expose_bindingc                    s   |  | fddI d H S )Nc                    s    | S rw   rr   )r1  argsr4  rr   rs   rt     rz   z0BrowserContext.expose_function.<locals>.<lambda>)r6  )rq   r   r4  rr   r8  rs   expose_function  s   zBrowserContext.expose_functionr   handlertimesc              	      sL   j dtj jrdnd|  I d H  t fddS )Nr   TFc                      s     S rw   )unrouterr   r:  rq   r   rr   rs   rt     r   z&BrowserContext.route.<locals>.<lambda>)r   insertr)   r   _dispatcher_fiberr   r   )rq   r   r:  r;  rr   r=  rs   r|     s   
zBrowserContext.routec                    s\   g }g }| j D ]}|j|ks|r|j|kr|| q|| q| ||dI d H  d S )Ndefault)r   r   r:  r   _unroute_internal)rq   r   r:  removed	remainingr|   rr   rr   rs   r<    s   
zBrowserContext.unrouterB  rC  behavior)r@  ignoreErrorswaitc                    sH   || _  d ur dkrtjt fdd| I d H  |  I d H  d S )Nr@  c                    s
   |   S rw   )stop)routerrD  rr   rs   rt     r   z2BrowserContext._unroute_internal.<locals>.<lambda>)r   r   gathermapr   )rq   rB  rC  rD  rr   rI  rs   rA    s
   z BrowserContext._unroute_internalc                    s,   | j dt| j|| |  I d H  d S )Nr   )r   r>  r7   r   (_update_web_socket_interception_patterns)rq   r   r:  rr   rr   rs   route_web_socket  s   zBrowserContext.route_web_socketc                 C   s   | j D ]}|  qg | _ d S rw   )r   dispose)rq   rH  rr   rr   rs   _dispose_har_routers  s   


z#BrowserContext._dispose_har_routersc                    s$   |  | jg |I d H  |   d S rw   )rA  r   rO  )rq   rD  rr   rr   rs   unroute_all  s   zBrowserContext.unroute_allr   notFoundupdateupdateContent)r   r   
updateModec                    sj   |r| j j|d |||dI d H  d S tj| jjt||pd|dI d H }| j| |	| I d H  d S )Nr   abort)local_utilsfilenot_found_actionurl_matcher)
r   r  r%   creater   rV  r   r   r   add_context_route)rq   r   r   rQ  rR  rS  rT  rH  rr   rr   rs   route_from_har  s$   	zBrowserContext.route_from_harc                    ,   t | j}| jdd d|iI d H  d S )NsetNetworkInterceptionPatternspatterns)r)   prepare_interception_patternsr   r   r  rq   r_  rr   rr   rs   r     s
   
z,BrowserContext._update_interception_patternsc                    r]  )N setWebSocketInterceptionPatternsr_  )r7   r`  r   r   r  ra  rr   rr   rs   rL    s   
z7BrowserContext._update_web_socket_interception_patternsr   	predicatec                 C   sz   |d u r	| j  }t| d| d}||d| d| d |tjjkr0|| tjjdd  || || t	|
 S )Nzbrowser_context.expect_event()zTimeout z%ms exceeded while waiting for event ""c                   S   s   t  S rw   )r!   rr   rr   rr   rs   rt   #  s    z-BrowserContext.expect_event.<locals>.<lambda>)r   r   r>   reject_on_timeoutrA   r   rD   reject_on_eventwait_for_eventr"   result)rq   r   rc  r   waiterrr   rr   rs   expect_event  s   
zBrowserContext.expect_eventc                 C   s   d| _ | jr.| | jjv r| jj|  | jjd usJ | | jjjjjv r.| jjjjj|  |   | j	
  | tjj|  d S r   )r   r   	_contextsr   _browser_type_playwright	selectors_contexts_for_selectorsrO  r   _reset_stack_counterr   rA   r   rD   rp   rr   rr   rs   rx   (  s   
zBrowserContext._on_closec                 C   r   rw   )r   rp   rr   rr   rs   r   :  s   zBrowserContext.is_closedreasonc                    sz    j rd S | _d _  jj|dI d H  d fdd} jj|dI d H   jdd d|iI d H   jI d H  d S )	NT)rr  rc   c                      s    j  I d H  d S rw   )r   _export_all_harsrr   rp   rr   rs   _inner_closeE  s   z*BrowserContext.close.<locals>._inner_closerE   rr  rc   N)	r   r   rY   rN  r   r   r   r  r   )rq   rr  rt  rr   rp   rs   rE   =  s   zBrowserContext.close	indexedDBc                    s:   | j dd d|iI d H }|rt|t|I d H  |S )NstorageStaterv  )r   send_return_as_dictr/   jsondumps)rq   r  rv  ri  rr   rr   rs   storage_stateL  s   

zBrowserContext.storage_staterw  c                    sH   t |ttfrtt|I d H }n|}| jdd d|iI d H  d S )NsetStorageStaterw  )r  r   r   ry  loadsr.   r   r  )rq   rw  staterr   rr   rs   set_storage_stateV  s
   z BrowserContext.set_storage_statec                 C   s   | j r| j S | jr| jj S d S rw   )r   r   rp   rr   rr   rs   _effective_close_reason_  s
   z&BrowserContext._effective_close_reasonc              	      sN   |  |||4 I d H }W d   I d H  n1 I d H sw   Y  |I d H S rw   )rk  )rq   r   rc  r   
event_inforr   rr   rs   rh  f  s
   (
zBrowserContext.wait_for_eventc                 C      |  tjj||S rw   )rk  r:   r   rF   rq   rc  r   rr   rr   rs   expect_console_messagem     z%BrowserContext.expect_console_messagec                 C   r  rw   )rk  rA   r   r:   r  rr   rr   rs   expect_paget  r  zBrowserContext.expect_pager   c                 C   s&   | |_ | j| | tjj| d S rw   )r   r   addr   rA   r   rW   )rq   r   rr   rr   rs   r   {  s   z!BrowserContext._on_service_workerresponse_end_timingfailure_textc                 C   s<   ||_ || | tjj| |r|tjj| d S d S rw   )_failure_text_set_response_end_timingr   rA   r   r[   r:   )rq   rY   r  r  rQ   rr   rr   rs   r     s   
z!BrowserContext._on_request_failedc                 C   sF   | | | tjj| |r|tjj| |r!|jd d S d S r   )r  r   rA   r   r]   r:   _finished_futurer   )rq   rY   rZ   r  rQ   rr   rr   rs   r     s   
z#BrowserContext._on_request_finishedc                 C   sX   t || j| j}|j}|r|tjj| |j}|r"|t	jj| | t
jj| d S rw   )r   r}   r?  r   r   r;   r   rF   rQ   r:   rA   )rq   r   messager   rQ   rr   rr   rs   r     s   z"BrowserContext._on_console_messagec                 C   sd   |  tjj|}|j}|r| tjj|p|}|s0|jdkr't|	  d S t|
  d S d S )Nbeforeunload)r   rA   r   r   rQ   r:   r`   r   r~   acceptdismiss)rq   rH   has_listenersrQ   rr   rr   rs   r     s   
zBrowserContext._on_dialogr   r   c              	   C   s<   |  tjjt| j| j||| |r| tjj| d S d S rw   )r   rA   r   r?   r}   r?  r:   	PageError)rq   r   rQ   r   rr   rr   rs   r     s   zBrowserContext._on_page_errorc                 C   ,   |  tjj| |r| tjj| d S d S rw   )r   rA   r   r3   r:   )rq   rY   rQ   rr   rr   rs   r        zBrowserContext._on_requestc                 C   r  rw   )r   rA   r   r4   r:   )rq   rZ   rQ   rr   rr   rs   r     r  zBrowserContext._on_responsec                 C   s   g S rw   rr   rp   rr   rr   rs   background_pages  s   zBrowserContext.background_pagesc                 C   s
   t | jS rw   )listr   rp   rr   rr   rs   service_workers  r   zBrowserContext.service_workersc                    s\   t |}i }t|tr|j|d< nt|tr|j|d< ntdt| jdd |I d H S )NrQ   framezpage: expected Page or FramenewCDPSession)r2   r  r:   r   r$   r    r   r  )rq   rQ   ro   rr   rr   rs   new_cdp_session  s   

zBrowserContext.new_cdp_sessionc                 C   r   rw   )r   rp   rr   rr   rs   rg     r   zBrowserContext.tracingc                 C   r   rw   )r   rp   rr   rr   rs   rh     r   zBrowserContext.debuggerr#   c                 C   r   rw   )r   rp   rr   rr   rs   rY     r   zBrowserContext.requestc                 C   r   rw   )r   rp   rr   rr   rs   clock  r   zBrowserContext.clockc                 C   r   rw   )r   rp   rr   rr   rs   credentials  r   zBrowserContext.credentialsrr   rw   )NNNru  )NN)NNNNN)rc   r#   )qr   
__module____qualname__r   r   r   r   r   r   r   r:   r{   r5   r   r6   r   r9   rm   floatr   r
   r   r   r   propertyr   r   r   r   r   r&   boolr   r'   r  r  r   r   r
  r   r  r  r#  r%  r   r(  r+  r.  r   r3  r   r6  r9  r,   r*   intr   r|   r<  r)   r	   rA  r-   rM  rO  rP  r(   r\  r   rL  r"   rk  rx   r   rE   r   r{  r  r  r   rh  r   r  r  r;   r   r3   r   r4   r   r   r   r   r    r   r   r   r   r  r  r$   r   r  r=   rg   r   rh   rY   r   r  r   r  __classcell__rr   rr   r   rs   rA   [   s2   	
{ 
$









	
	









	
	
	





rA   )[r   ry  pathlibr   typesr   typingr   r   r   r   r   r	   r
   r   r   r   r   r    playwright._impl._api_structuresr   r   r   r   r   playwright._impl._cdp_sessionr   playwright._impl._clockr   playwright._impl._connectionr   r   r   !playwright._impl._console_messager   playwright._impl._credentialsr   playwright._impl._debuggerr   playwright._impl._dialogr   playwright._impl._disposabler   r   playwright._impl._errorsr    r!   'playwright._impl._event_context_managerr"   playwright._impl._fetchr#   playwright._impl._framer$   playwright._impl._har_routerr%   playwright._impl._helperr&   r'   r(   r)   r*   r+   r,   r-   r.   r/   r0   r1   r2   playwright._impl._networkr3   r4   r5   r6   r7   r8   playwright._impl._pager9   r:   r;   playwright._impl._str_utilsr<   playwright._impl._tracingr=   playwright._impl._waiterr>   playwright._impl._web_errorr?   playwright._impl._browserr@   rA   rr   rr   rr   rs   <module>   s:   8< 