
    -eb                    V   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 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d         ZdZd#d$dZd%d&dZd'dZd(dZd#d)dZd#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)which)Literal)Version	WebDriver)settings)firefoxchromium)webdriver_control   scale_factorfloatreturnr   c                   t          d          }|t          d          t          d          }|t          d          dd l}ddlm} ddlm} ddlm} t          |j
                  t          d	          k    r |            }n |t          
          } |            }|                    d           |                    d|              |||          S )Nr   z/firefox is not installed or not present on PATHgeckodriverz3geckodriver is not installed or not present on PATHr   OptionsServicer
   z4.11)log_path
--headlesszlayout.css.devPixelsPerPxserviceoptions)r   RuntimeErrorselenium"selenium.webdriver.firefox.optionsr   "selenium.webdriver.firefox.servicer   $selenium.webdriver.firefox.webdriverr   r	   __version__r   add_argumentset_preference)	r   r   r   r    r   r   Firefoxr   r   s	            2lib/python3.11/site-packages/bokeh/io/webdriver.pycreate_firefox_webdriverr)   <   s   IGLMMM&&KPQQQOOO::::::::::::IIIIIIx#$$77 '))'7+++giiG&&&6<8IJJJ77G4444    extra_optionslist[str] | Nonec                "   ddl m} ddlm} ddlm} t          j                    }|'dD ]}t          |          }| nt          d           ||          } |            }|
                    d           |
                    d           |
                    d	|            |
                    d
           | r| D ]}	|
                    |	           t          j        d          dk    r|
                    d            |||          S )Nr   r   r   r
   )chromedriverzchromium.chromedriverzchromedriver-binaryzchromedriver or its variant is not installed or not present on PATH; use BOKEH_CHROMEDRIVER_PATH to specify a customized chromedriver's locationr   z--hide-scrollbarsz--force-device-scale-factor=z--force-color-profile=srgbBOKEH_IN_DOCKER1z--no-sandboxr   )!selenium.webdriver.chrome.optionsr   !selenium.webdriver.chrome.servicer   #selenium.webdriver.chrome.webdriverr   r   chromedriver_pathr   r   r%   osgetenv)
r+   r   r   r   Chromeexecutable_path
executabler   r   ops
             r(   create_chromium_webdriverr;   W   s{   999999999999GGGGGG022OZ 	n 	nJ#J//O* +   m n n n go&&GgiiG&&&,---FFFGGG5666 % 	% 	%B  $$$$	y"##s**^,,,6'73333r*   
web_driverboolc                ,    t          |          }|| k    S N)!get_web_driver_device_pixel_ratio)r   r<   device_pixel_ratios      r(   4scale_factor_less_than_web_driver_device_pixel_ratiorB   w   s    ::FF--r*   c                4    d}|                      |          }|S )Nz+        return window.devicePixelRatio
    )execute_script)r<   'calculate_web_driver_device_pixel_ratiorA   s      r(   r@   r@   |   s'    /+ !+ 9 9:a b br*   WebDriver | Nonec                F    	 t          |           S # t          $ r Y d S w xY wNr   )r)   	ExceptionrI   s    r(   _try_create_firefox_webdriverrK      s:    '\BBBB   tt    
  c                F    	 t          |           S # t          $ r Y d S w xY wrH   )r;   rJ   rI   s    r(   _try_create_chromium_webdriverrN      s:    (lCCCC   ttrL   c                  ~    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dZdd dZdd dZ	ddZ
d	S )!_WebdriverStater=   reuseDriverKind | NonekindrF   currentzset[WebDriver]_driversNT)rS   rQ   r   Nonec               V    || _         || _        d | _        t                      | _        d S r?   )rS   rQ   rT   setrU   )selfrS   rQ   s      r(   __init__z_WebdriverState.__init__   s&    	
r*   driverr   c                b    | j                             |           |                                 d S r?   )rU   removequitrY   r[   s     r(   	terminatez_WebdriverState.terminate   s)    V$$$r*   c                Z    | j         #|                     | j                    d | _         d S d S r?   )rT   r`   )rY   s    r(   resetz_WebdriverState.reset   s1    <#NN4<(((DLLL $#r*   r   r   r   c                    | j         r| j        t          || j                  s/|                                  |                     |          | _        | j        S rH   )rQ   rT   rB   rb   create)rY   r   s     r(   getz_WebdriverState.get   sU    z 	BT\19mdl:, :,1JJLLL;;L;AADL|r*   c                h    |                      ||          }| j                            |           |S rH   )_createrU   add)rY   rS   r   r[   s       r(   rd   z_WebdriverState.create   s2    d>>&!!!r*   c                    |p| j         }|Et          |          }|	d| _         |S t          |          }|	d| _         |S t          d          |dk    rt	          |          S |dk    rt          |          S t          d| d          )NrI   r   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)rS   rN   rK   r   r;   r)   
ValueError)rY   rS   r   driver_kindr[   s        r(   rg   z_WebdriverState._create   s    'di3NNNF!&	2MMMF!%	  Z [ [ [ J&&,,GGGGI%%+FFFFRRRRSSSr*   c                    |                                   t          | j                  D ]}|                     |           d S r?   )rb   listrU   r`   r_   s     r(   cleanupz_WebdriverState.cleanup   sG    

4=)) 	# 	#FNN6""""	# 	#r*   )rS   rR   rQ   r=   r   rV   )r[   r   r   rV   )r   rV   r   r   r   r   r   Nr   )rS   rR   r   r   r   r   )__name__
__module____qualname____annotations__rZ   r`   rb   re   rd   rg   ro    r*   r(   rP   rP      s         KKK48                
        
T T T T T0# # # # # #r*   rP   c                 4    t                                           S r?   )r   ro   rw   r*   r(   <lambda>ry      s    )1133 r*   rp   rq   rr   )r+   r,   r   r   r   r   )r   r   r<   r   r   r=   )r<   r   r   r   )r   r   r   rF   )!__doc__
__future__r   logging	getLoggerrs   logutil.dependenciesr   atexitr5   os.pathr   shutilr   typingr   packaging.versionr	   #selenium.webdriver.remote.webdriverr   r   
DriverKind__all__r)   r;   rB   r@   rK   rN   rP   r   registerrw   r*   r(   <module>r      s    # " " " " " g!! 0 / / / / / $GH H H
  				                   & % % % % % 9 9 9 9 9 9        *+
5 5 5 5 564 4 4 4 4@. . . .
           ># ># ># ># ># ># ># >#H $O%%  33 4 4 4 4 4r*   