a
    >xd                     @   s   d Z ddlZddl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 ddlmZ G dd	 d	Zd
dddddZdS )zNavigator Watcher module.    N)Any	AwaitableDictListUnion)helper)TimeoutError)FrameManagerFrame)
merge_dictc                   @   s   e Zd ZdZdeeeeeddddZ	eddddZ
ed d	d
dZed	ddZdeddddZdeddddZeee edddZdd	ddZdd	ddZdS )NavigatorWatcherzNavigatorWatcher class.N)frameManagerframetimeoutoptionskwargsreturnc                    s   t ||} | | _| _|j _| _d _t	 jt
jj jt	 jt
jj jt	 jt
jj jg _ jjj _ j  _ jtj j  gtjjd _ j fdd dS )zMake new navigator watcher.F)return_whenc                    s      S N_cleanup)futself S/var/www/html/Ranjet/env/lib/python3.9/site-packages/pyppeteer/navigator_watcher.py<lambda>6       z+NavigatorWatcher.__init__.<locals>.<lambda>N)r   _validate_optionsZ_frameManager_frame	_loaderId_initialLoaderId_timeout_hasSameDocumentNavigationr   ZaddEventListenerr	   ZEventsZLifecycleEvent_checkLifecycleCompleteZFrameNavigatedWithinDocument_navigatedWithinDocumentZFrameDetached_eventListenersZ_client_loopcreate_future_lifecycleCompletePromisecreate_taskasynciowait_createTimeoutPromise
concurrentfuturesFIRST_COMPLETED_navigationPromiseadd_done_callback)r   r   r   r   r   r   r   r   r   __init__   sD    




zNavigatorWatcher.__init__)r   r   c                 C   s   d|v rt dd|v r t d|ddkr6t d|ddkr\d	d l}|td
 |dd}t|trx|}n$t|tr|g}nt	dt
| g | _|D ]0}t|}|d u rt d| | j| qd S )NZnetworkIdleTimeoutz3`networkIdleTimeout` option is no longer supported.ZnetworkIdleInflightz4`networkIdleInflight` option is no longer supported.	waitUntilZnetworkidlezH`networkidle` option is no logner supported. Use `networkidle2` instead.documentloadedr   zO`documentloaded` option is no longer supported. Use `domcontentloaded` instead.loadz>`waitUntil` option should be str or list of str, but got type z%Unknown value for options.waitUntil: )
ValueErrorgetlogging	getLogger__name__warning
isinstanceliststr	TypeErrortype_expectedLifecyclepyppeteerToProtocolLifecycleappend)r   r   r9   Z
_waitUntilr4   valueZprotocolEventr   r   r   r   8   sF    



z"NavigatorWatcher._validate_optionsr   c                    sX   j  _jrFdj d d d fdd}j | _nj  _jS )NzNavigation Timeout Exceeded: z ms exceeded.rF   c                      s*   t jd I d H  jt  d S )Ni  )r+   sleepr"   _maximumTimerset_exceptionr   r   ZerrorMessager   r   r   _timeout_func_   s    z=NavigatorWatcher._createTimeoutPromise.<locals>._timeout_func)r'   r(   rH   r"   r*   _timeout_timer)r   rK   r   rJ   r   r-   Z   s    z&NavigatorWatcher._createTimeoutPromisec                 C   s   | j S )zReturn navigation promise.)r1   r   r   r   r   navigationPromiseh   s    z"NavigatorWatcher.navigationPromise)r   r   c                 C   s    || j krd S d| _|   d S )NT)r   r#   r$   r   r   r   r   r   r%   l   s    
z)NavigatorWatcher._navigatedWithinDocumentc                 C   sF   | j j| jkr| jsd S | | j | js,d S | j sB| jd  d S r   )	r   r    r!   r#   _checkLifecyclerB   r)   done
set_resultrN   r   r   r   r$   r   s    
z(NavigatorWatcher._checkLifecycleComplete)r   expectedLifecycler   c                 C   s<   |D ]}||j vr dS q|jD ]}| ||s  dS q dS )NFT)Z_lifecycleEventsZchildFramesrO   )r   r   rR   eventchildr   r   r   rO   |   s    

z NavigatorWatcher._checkLifecyclec                 C   s   |    dS )zCancel navigation.Nr   r   r   r   r   cancel   s    zNavigatorWatcher.cancelc                 C   s.   t | j | j  | j  | j  d S r   )r   ZremoveEventListenersr&   r)   rU   rH   rL   r   r   r   r   r      s    

zNavigatorWatcher._cleanup)N)N)N)r;   
__module____qualname____doc__r	   r
   intr   r   r3   r   r   r-   rM   r%   r$   r   r?   boolrO   rU   r   r   r   r   r   r      s    %"

r   r6   ZDOMContentLoadedZnetworkIdleZnetworkAlmostIdle)r6   Zdomcontentloadedr5   Znetworkidle0Znetworkidle2)rX   r+   concurrent.futuresr.   typingr   r   r   r   r   Z	pyppeteerr   Zpyppeteer.errorsr   Zpyppeteer.frame_managerr	   r
   Zpyppeteer.utilr   r   rC   r   r   r   r   <module>   s    