
    >fh                     d    d dl Z d dlZd dlZd dlZd dlZd dlZd dlZd dlZd dlm	Z	  G d d      Z
y)    N)SeleniumManagerc                   X    e Zd ZdZddZed        Zed        Zej                  d        Zed        Z	e	j                   fd       Z	ed        Z
e
j                   fd	       Z
ed
        Zej                  d        Zed        Zej                  d        ZddZddZd Zd Z xZS )Servera  Manage a Selenium Grid (Remote) Server in standalone mode.

    This class contains functionality for downloading the server and starting/stopping it.

    For more information on Selenium Grid, see:
        - https://www.selenium.dev/documentation/grid/getting_started/

    Parameters:
    -----------
    host : str
        Hostname or IP address to bind to (determined automatically if not specified)
    port : int or str
        Port to listen on (4444 if not specified)
    path : str
        Path/filename of existing server .jar file (Selenium Manager is used if not specified)
    version : str
        Version of server to download (latest version if not specified)
    log_level : str
        Logging level to control logging output ("INFO" if not specified)
        Available levels: "SEVERE", "WARNING", "INFO", "CONFIG", "FINE", "FINER", "FINEST"
    env: collections.abc.Mapping
        Mapping that defines the environment variables for the server process
    c                     |r|rt        d      || _        || _        || _        || _        || _        || _        d | _        y )NzCNot allowed to specify a version when using an existing server path)	TypeErrorhostportpathversion	log_levelenvprocess)selfr   r	   r
   r   r   r   s          S/var/www/zara/venv/lib/python3.12/site-packages/selenium/webdriver/remote/server.py__init__zServer.__init__7   sD    Gabb			"    c                 \    | j                   | j                   nd}d| d| j                   dS )N	localhostzhttp://:z/status)r   r	   )r   r   s     r   
status_urlzServer.status_urlC   s/     II1tyy{a		{'22r   c                     | j                   S N)_pathr   s    r   r
   zServer.pathH       zzr   c                 p    |r-t         j                  j                  |      st        d|       || _        y )Nz"Can't find server .jar located at )osr
   existsOSErrorr   )r   r
   s     r   r
   zServer.pathL   s.    t,>tfEFF
r   c                     | j                   S r   )_portr   s    r   r	   zServer.portR   r   r   c                     	 t        |      }d|cxk  rdk  st        d       t        d      || _        y # t        $ r t        j                   d| d      w xY w)Nz".__init__() got an invalid port: ''r   i  zport must be 0-65535)int
ValueErrorr   __name__r!   )r   r	   	__class__s     r   r	   zServer.portV   s{    	^t9D T"U"344 #344
	  	^y1122TUYTZZ[\]]	^s	   8 %Ac                     | j                   S r   )_versionr   s    r   r   zServer.version`   s    }}r   c                     |r:t        j                  dt        |            st        j                   d| d      || _        y )Nz^\d+\.\d+\.\d+$z%.__init__() got an invalid version: 'r#   )rematchstrr   r&   r)   )r   r   r'   s     r   r   zServer.versiond   sC    88.G=9#5#5"66[\c[dde fggr   c                     | j                   S r   )
_log_levelr   s    r   r   zServer.log_levelk   s    r   c                 X    d}||vrt        ddj                  |             || _        y )N)SEVEREWARNINGINFOCONFIGFINEFINERFINESTzlog_level must be one of: z, )r   joinr/   )r   r   levelss      r   r   zServer.log_levelo   s3    SF"869J8KLMM#r   c                     | j                   S r   )_envr   s    r   r   z
Server.envv   s    yyr   c                 t    |/t        |t        j                  j                        st	        d      || _        y )Nz.env must be a mapping of environment variables)
isinstancecollectionsabcMappingr   r;   )r   r   s     r   r   z
Server.envz   s-    ?:c;??3J3J#KLMM	r   c                 ^   t        j                          }t        j                          |z
  |k  r+	 t        j                  j                  | j                         yy# t        j
                  j                  $ r t        j                  d       Y nw xY wt        j                          |z
  |k  rU)NTg?F)timeurllibrequesturlopenr   errorURLErrorsleep)r   timeoutstarts      r   _wait_for_serverzServer._wait_for_server   s    		iikE!G+ &&t7  <<((  

3 	 iikE!G+s   )A 2BBc                 f    dg}||j                  |       t               j                  |      d   S )zqDownload the server if it doesn't already exist.

        Latest version is downloaded unless specified.
        z--griddriver_path)appendr   binary_paths)r   r   argss      r   download_if_neededzServer.download_if_needed   s6    
 zKK  --d3MBBr   c                    | j                   | j                  | j                        n| j                   }t        j                  d      }|t        d      |d|ddt        | j                        d| j                  dd	d
d	g}| j                  |j                  d| j                  g       | j                  | j                  nd}	 t        j                  t        j                  t        j                        5 }|j                  || j                  f       ddd       t        d| j                         # 1 sw Y   !xY w# t         $ r t#        d       t%        j&                  || j(                        | _        t#        d| j*                  j,                          | j/                         st1        d| j2                         t#        d       Y | j*                  S w xY w)zStart the server.

        Selenium Manager will detect the server location and download it if necessary,
        unless an existing server path was specified.
        NjavazJCan't find java on system PATH. JRE is required to run the Selenium serverz-jar
standalonez--portz--log-levelz--selenium-managertruez--enable-managed-downloadsz--hostr   zDSelenium server is already running, or something else is using port zStarting Selenium server...)r   z$Selenium server running as process: z)Timed out waiting for Selenium server at zSelenium server is ready)r
   rQ   r   shutilwhichr   r-   r	   r   r   extendsocketAF_INETSOCK_STREAMconnectConnectionErrorConnectionRefusedErrorprint
subprocessPopenr   r   pidrK   TimeoutErrorr   )r   r
   	java_pathcommandr   socks         r   rJ   zServer.start   s    9=		8It&&t||4tyyLL(	fgg 		NNN (
 99 NNHdii01 II1tyy{
	.v~~v/A/AB 0ddDII./0!$himirirhs"tuu0 0 & 	./0%++GBDL89I9I8JKL((*"%NtN_#`aa,-||	.s+   2E 7D5 E 5D>:E BGGc                     | j                   t        d      | j                   j                         4| j                   j                          | j                   j	                          d| _         t        d       y)zStop the server.NzSelenium server isn't runningz#Selenium server has been terminated)r   RuntimeErrorpoll	terminatewaitr_   r   s    r   stopzServer.stop   s[    <<>??||  "*&&(!!#DL78r   )Ni\  NNr3   N)
   r   )r&   
__module____qualname____doc__r   propertyr   r
   setterr	   r   r   r   rK   rQ   rJ   rl   __classcell__)r'   s   @r   r   r      s   0
 3 3   
[[ 
   
[[    ^^      $ $   	ZZ 
C*X	9r   r   )r>   r   r+   rV   rY   r`   rB   rC   *selenium.webdriver.common.selenium_managerr   r    r   r   <module>rv      s.   $  	 	      Fk9 k9r   