o
    iX                     @   s
  d dl Z d dlZd dl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 ejr1d dlZe	eZedZdZd	Zd
efddZedee d G dd deZG dd deZG dd deZd
efddZd
eeef fddZ dddZ!dddZ"dS )    N)when_imported)config)
get_logger)WrappingContext)tracerTz
if (window.DD_RUM && window.DD_RUM.stopSession) {
    window.DD_RUM.stopSession();
    return true;
} else {
    return false;
}
i  returnc                  C   sF   t d} | d u rtS zt| W S  ty"   td| t t Y S w )N%DD_CIVISIBILITY_RUM_FLUSH_WAIT_MILLISzZCould not convert DD_CIVISIBILITY_RUM_FLUSH_WAIT_MILLIS value %s to int, using default: %s)osgetenv_DEFAULT_FLUSH_SLEEP_MSint	Exceptionlogwarning)env_flush_sleep_ms r   [/home/ubuntu/.local/lib/python3.10/site-packages/ddtrace/contrib/internal/selenium/patch.py_get_flush_sleep_ms    s   

r   selenium)flush_sleep_msc                       sN   e Zd ZdddZdddZddd	Zd fd
dZdedefddZ  Z	S )SeleniumWrappingContextBaser   Nc                 C      d S Nr   selfr   r   r   _handle_enter7      z)SeleniumWrappingContextBase._handle_enterc                 C   r   r   r   r   r   r   r   _handle_return:   r   z*SeleniumWrappingContextBase._handle_return-selenium.webdriver.remote.webdriver.WebDriverc                 C   s,   z|  dW S  ty   td Y d S w )Nr   z)Could not get Selenium WebDriver instance)	get_localKeyErrorr   debugr   r   r   r   _get_webdriver_instance=   s   
z3SeleniumWrappingContextBase._get_webdriver_instancec                    s<   t    z|   W | S  ty   tjddd Y | S w )Nz-Error handling selenium instrumentation enterTexc_info)super	__enter__r   r   r   r"   r   	__class__r   r   r'   D   s   

z%SeleniumWrappingContextBase.__enter__valuec                 C   s2   z|    W |S  ty   tjddd Y |S w )zHAlways return the original value no matter what our instrumentation doesz%Error handling instrumentation returnTr$   )r   r   r   r"   )r   r*   r   r   r   
__return__N   s   
z&SeleniumWrappingContextBase.__return__r   N)r   r   )r   r   )
__name__
__module____qualname__r   r   r#   r'   r   r+   __classcell__r   r   r(   r   r   6   s    



r   c                   @      e Zd ZdddZdS )SeleniumGetWrappingContextr   Nc           	      C   s  t  }|j}|d u s|ddkrd S |  }|d u rd S |d }|dt|d |dd |dd	 |d
t  |j	
d}|j	
d}|d}|d u r[|d| n|d|fvrg|dd |d}|d u rx|d| d S |d|fvr|dd d S d S )Ntypetestl            'datadog-ci-visibility-test-execution-id)namer*   ztest.is_browsertrueztest.browser.driverr   ztest.browser.driver_versionbrowserNamebrowserVersionztest.browser.name ztest.browser.version)r   current_root_spantrace_idget_tagr#   
add_cookiestrset_tagget_versioncapabilitiesget)	r   	root_spantest_trace_idwebdriver_instancetrace_id_64bitbrowser_namebrowser_versionexisting_browser_nameexisting_browser_versionr   r   r   r   Y   s2   

z)SeleniumGetWrappingContext._handle_returnr,   )r-   r.   r/   r   r   r   r   r   r2   X       r2   c                   @   r1   )SeleniumQuitWrappingContextr   Nc                 C   sp   t  }|d u s|ddkrd S |  }|d u rd S |t}ttj	j
d  |r1|dd |d d S )Nr3   r4   i  ztest.is_rum_activer7   r5   )r   r;   r=   r#   execute_script_RUM_STOP_SESSION_SCRIPTtimesleepr   r   r   r@   delete_cookie)r   rD   rF   is_rum_activer   r   r   r      s   
z)SeleniumQuitWrappingContext._handle_enterr,   )r-   r.   r/   r   r   r   r   r   rM      rL   rM   c                  C   s0   dd l } z| jW S  ty   td Y dS w )Nr   zCould not get Selenium versionr:   )r   __version__AttributeErrorr   r"   )r   r   r   r   rA      s   
rA   c                   C   s   ddiS )Nr   *r   r   r   r   r   _supported_versions   s   rW   c                  C   s2   dd l } t| ddrd S tddd }d| _d S )Nr   _datadog_patchFz#selenium.webdriver.remote.webdriverc                 S   s4   t | jj  t| jj  t| jj  d S r   )r2   	WebDriverrC   wraprM   quitclose)mr   r   r   _   s   zpatch.<locals>._T)r   getattrr   rX   )r   r^   r   r   r   patch   s   

r`   c                  C   s^   dd l } ddlm} t| ddsd S t|j  t|j	  t|j
  d| _d S )Nr   )rY   rX   F)r   #selenium.webdriver.remote.webdriverrY   r_   r2   extractrC   unwraprM   r[   r\   rX   )r   rY   r   r   r   unpatch   s   
rd   r,   )#r
   rP   typingtwrapt.importerr   ddtracer   ddtrace.internal.loggerr   !ddtrace.internal.wrapping.contextr   ddtrace.tracer   TYPE_CHECKINGra   r   r-   r   TypeVarr   rO   r   r   r   _adddictr   r2   rM   r?   rA   rW   r`   rd   r   r   r   r   <module>   s4    
	
"(

