a
    >xd&                     @   sb  d Z ddlZddl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ZddlmZ ddlmZmZ eeZejedddd	Zeeed
ddZeedddZeeee	eef dddZe
e ddddZdddejej dZe	edddZ eeedddZ!eeeege"f e#ej$edddZ%eee&d d!d"Z'ee"d#d$d%Z(dS )&zHelper functions.    N)Any	AwaitableCallableDictList)EventEmitter)
CDPSession)ElementHandleErrorTimeoutError)_loggermsgreturnc                 C   s    t jr| | n
| | dS )zLog error messages.N)	pyppeteerDEBUGerrordebug)r   r    r   H/var/www/html/Ranjet/env/lib/python3.9/site-packages/pyppeteer/helper.py
debugError   s    r   )funargsr   c                 G   s*   d dd |D }d|  d| d}|S )z&Convert function and arguments to str.z, c                 S   s"   g | ]}t |d u rdn|qS )N	undefined)jsondumps).0argr   r   r   
<listcomp>   s   z$evaluationString.<locals>.<listcomp>(z)())join)r   r   _argsexprr   r   r   evaluationString   s
    
r"   )exceptionDetailsr   c                 C   s   |  d}|r"| dp | dS |  dd}|  dt }|r| dD ]\}t| ddd	 t| d
d d	 t| d }| dd}|d| d| d }qJ|S )z5Get exception message from `exceptionDetails` object.	exceptiondescriptionvaluetext 
stackTraceZ
callFramesurl:Z
lineNumberZcolumnNumberfunctionNamez<anonymous>z
    at z (r   )getdictstr)r#   r$   messager)   Z	callframelocationr,   r   r   r   getExceptionMessage&   s$    
r2   )emitter	eventNamehandlerr   c                 C   s   |  || | ||dS )z6Add handler to the emitter and return emitter/handler.r3   r4   r5   )onr6   r   r   r   addEventListener9   s    r8   )	listenersr   c                 C   s:   | D ](}|d }|d }|d }| || q|   dS )zRemove listeners from emitter.r3   r4   r5   N)Zremove_listenerclear)r9   listenerr3   r4   r5   r   r   r   removeEventListeners@   s    r<   )-0NaNNInfinity	-Infinity)remoteObjectr   c                 C   sn   |  drtd|  d}|rd|dkr,dS |dkr8dS |dkrFtjS |d	krVtj S td
||  dS )z!Serialize value of remote object.objectIdz+Cannot extract value when objectId is givenZunserializableValuer=   r   r>   Nr?   r@   z$Unsupported unserializable value: {}r&   )r-   r	   mathinfformat)rA   r&   r   r   r   valueFromRemoteObjectS   s     

rF   )clientrA   r   c              
   C   sl   | d}| j }|d |s&|S z| dd|iW S  tyf } ztt| W Y d}~n
d}~0 0 |S )zRelease remote object.rB   NzRuntime.releaseObject)r-   _loopcreate_future
set_resultsend	Exceptionr   logger)rG   rA   rB   Zfut_noneer   r   r   releaseObjectg   s    


 rO   )r3   r4   	predicatetimeoutloopr   c                    s   |  tddfddtddfddddfd	d
}tdd fdd}t| ||rx|| ddfdd S )z+Wait for an event emitted from the emitter.N)targetr   c                    s     |  d S N)rJ   rS   promiser   r   resolveCallback   s    z%waitForEvent.<locals>.resolveCallback)r$   r   c                    s     |  d S rT   )set_exception)r$   rV   r   r   rejectCallback   s    z$waitForEvent.<locals>.rejectCallback)r   c                      s$   t d I d H   td d S )Ni  z(Timeout exceeded while waiting for event)asynciosleepr
   r   )rZ   rQ   r   r   timeoutTimer   s    z"waitForEvent.<locals>.timeoutTimerc                    s   | sd S    |  d S rT   r   rU   )cleanuprP   rX   r   r   	_listener   s    zwaitForEvent.<locals>._listenerc                      s   t g r   d S rT   )r<   cancelr   )eventTimeoutr;   rQ   r   r   r^      s    
zwaitForEvent.<locals>.cleanup)rI   r   rL   r8   create_task)r3   r4   rP   rQ   rR   r]   r_   r   )r^   ra   r;   rP   rW   rZ   rX   rQ   r   waitForEventz   s    rc   )objnamer   c                 C   sH   | | }t |ts*t| dt| n|dk rDt| d| |S )z;Get and check the value of name in obj is positive integer.z must be integer: r   z must be positive integer: )
isinstanceint	TypeErrortype
ValueError)rd   re   r&   r   r   r   get_positive_int   s    
rk   )funcr   c                 C   s0   |   } | ds| dr dS d| v r,dS dS )z+Heuristically check function or expression.functionzasync Tz=>F)strip
startswith)rl   r   r   r   	is_jsfunc   s    rp   ))__doc__r[   r   loggingrC   typingr   r   r   r   r   Zpyeer   r   Zpyppeteer.connectionr   Zpyppeteer.errorsr	   r
   	getLogger__name__rM   Loggerr   r/   r"   r.   r2   r8   r<   rD   ZunserializableValueMaprF   rO   boolfloatAbstractEventLooprc   rg   rk   rp   r   r   r   r   <module>   sB   
	
	#