
    d                    4   d Z ddlmZ ddlZ ej        e          ZddlmZ  edd           ddl	Z	ddl
Z
ddlmZmZ dd	lmZ dd
lmZ ddlmZ ed         ZdZddZdd dZd!dZd"dZd"dZ G d d          Z e            Z e	j        d            dS )#z

    )annotationsN   )import_requiredzselenium.webdriverzmTo use bokeh.io image export functions you need selenium ('conda install selenium' or 'pip install selenium'))devnullisfile)which)Literal	WebDriver)firefoxchromium)webdriver_controlreturnr   c                     t          d          } | t          d          t          d          }|t          d          ddlm} ddlm} ddlm}  |t          	          } |            }|	                    d
            |||          S )Nr   z/firefox is not installed or not present on PATHgeckodriverz3geckodriver is not installed or not present on PATHr   Options)Servicer
   )log_path
--headless)serviceoptions)
r   RuntimeError"selenium.webdriver.firefox.optionsr   "selenium.webdriver.firefox.servicer   $selenium.webdriver.firefox.webdriverr   r   add_argument)r   r   r   r   Firefoxr   r   s          2lib/python3.11/site-packages/bokeh/io/webdriver.pycreate_firefox_webdriverr    8   s    IGLMMM&&KPQQQ::::::::::::IIIIIIgw'''GgiiG&&&77G4444    extra_optionslist[str] | Nonec                   ddl m}  |            }|                    d           |                    d           |                    d           |                    d           | r| D ]}|                    |           t          j        d          dk    r|                    d	           dd
lm}  ||          S )Nr   r   r   z--hide-scrollbarsz--force-device-scale-factor=1z--force-color-profile=srgbBOKEH_IN_DOCKER1z--no-sandboxr
   )r   )!selenium.webdriver.chrome.optionsr   r   osgetenv#selenium.webdriver.chrome.webdriverr   )r"   r   r   opChromes        r   create_chromium_webdriverr-   L   s    999999giiG&&&,---89995666 % 	% 	%B  $$$$	y"##s**^,,,GGGGGG6'""""r!   pathstrboolc                ^    t          |           ot          j        | t          j                  S N)r   r(   accessX_OK)r.   s    r   _is_executabler5   a   s!    $<<4BIdBG444r!   WebDriver | Nonec                 B    	 t                      S # t          $ r Y d S w xY wr2   )r    	Exception r!   r   _try_create_firefox_webdriverr:   d   s5    ')))   tt    
c                 B    	 t                      S # t          $ r Y d S w xY wr2   )r-   r8   r9   r!   r   _try_create_chromium_webdriverr=   j   s5    (***   ttr;   c                  z    e Zd ZU ded<   ded<   ded<   ded<   d	d
dddZddZddZddZdddZddZ	ddZ
d	S )_WebdriverStater0   reuseDriverKind | Nonekindr6   currentzset[WebDriver]_driversNT)rB   r@   r   Nonec               V    || _         || _        d | _        t                      | _        d S r2   )rB   r@   rC   setrD   )selfrB   r@   s      r   __init__z_WebdriverState.__init__x   s&    	
r!   driverr   c                b    | j                             |           |                                 d S r2   )rD   removequitrH   rJ   s     r   	terminatez_WebdriverState.terminate~   s)    V$$$r!   c                Z    | j         #|                     | j                    d | _         d S d S r2   )rC   rO   rH   s    r   resetz_WebdriverState.reset   s1    <#NN4<(((DLLL $#r!   c                    | j         r| j        -|                                  |                                 | _        | j        S r2   )r@   rC   rR   createrQ   s    r   getz_WebdriverState.get   s7    z 	)T\1JJLLL;;==DL|r!   c                d    |                      |          }| j                            |           |S r2   )_createrD   add)rH   rB   rJ   s      r   rT   z_WebdriverState.create   s.    d##&!!!r!   c                   |p| j         }|At                      }|	d| _         |S t                      }|	d| _         |S t          d          |dk    rt	                      S |dk    rt                      S t          d| d          )Nr   r   zNeither firefox and geckodriver nor a variant of chromium browser and chromedriver are available on system PATH. You can install the former with 'conda install -c conda-forge firefox geckodriver'.'z$' is not a recognized webdriver kind)rB   r=   r:   r   r-   r    
ValueError)rH   rB   driver_kindrJ   s       r   rW   z_WebdriverState._create   s    'di355F!&	244F!%	  Z [ [ [ J&&,...I%%+---RRRRSSSr!   c                    |                                   t          | j                  D ]}|                     |           d S r2   )rR   listrD   rO   rN   s     r   cleanupz_WebdriverState.cleanup   sG    

4=)) 	# 	#FNN6""""	# 	#r!   )rB   rA   r@   r0   r   rE   )rJ   r   r   rE   )r   rE   r   r   r2   )rB   rA   r   r   )__name__
__module____qualname____annotations__rI   rO   rR   rU   rT   rW   r_   r9   r!   r   r?   r?   p   s         KKK48                
       
T T T T0# # # # # #r!   r?   c                 4    t                                           S r2   )r   r_   r9   r!   r   <lambda>rf      s    )1133 r!   r`   r2   )r"   r#   r   r   )r.   r/   r   r0   )r   r6   )__doc__
__future__r   logging	getLoggerra   logutil.dependenciesr   atexitr(   os.pathr   r   shutilr   typingr	   #selenium.webdriver.remote.webdriverr   
DriverKind__all__r    r-   r5   r:   r=   r?   r   registerr9   r!   r   <module>ru      s    # " " " " " g!! 0 / / / / / $GH H H
  				 # # # # # # # #             : 9 9 9 9 9 *+
5 5 5 5(# # # # #*5 5 5 5      =# =# =# =# =# =# =# =#F $O%%  33 4 4 4 4 4r!   