Ë
    `§1hÓ  ã                   ó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                   óh   ‡ — e Zd ZdZdd„Zd„ Zd„ Zˆ fd„Zˆ fd„Zd„ Z	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                 óD  — |r|rt        d«      ‚|| _        | j                  |«      | _        | j	                  |«      | _        | j                  |«      | _        | j                  |«      | _	        | j                  |«      | _        d | _        | j                  «       | _        y )NzCNot allowed to specify a version when using an existing server path)Ú	TypeErrorÚhostÚ_validate_portÚportÚ_validate_pathÚpathÚ_validate_versionÚversionÚ_validate_log_levelÚ	log_levelÚ_validate_envÚenvÚprocessÚ_get_status_urlÚ
status_url)Úselfr   r
   r   r   r   r   s          ú^/var/www/skyplay_api_hub/venv/lib/python3.12/site-packages/selenium/webdriver/remote/server.pyÚ__init__zServer.__init__7   s‹   € Ù‘GÜÐaÓbÐbàˆŒ	Ø×'Ñ'¨Ó-ˆŒ	Ø×'Ñ'¨Ó-ˆŒ	Ø×-Ñ-¨gÓ6ˆŒØ×1Ñ1°)Ó<ˆŒØ×%Ñ% cÓ*ˆŒàˆŒØ×.Ñ.Ó0ˆ�ó    c                 ó\   — | j                   �| j                   nd}d|› d| j                  › d�S )NÚ	localhostzhttp://ú:z/status)r   r
   )r   r   s     r   r   zServer._get_status_urlE   s/   € Ø ŸI™IÐ1ˆt�yŠy°{ˆØ˜˜˜a §	¡	˜{¨'Ð2Ð2r   c                 ód   — |r-t         j                  j                  |«      st        d|› �«      ‚|S )Nz"Can't find server .jar located at )Úosr   ÚexistsÚOSError)r   r   s     r   r   zServer._validate_pathI   s,   € ÙœŸ™Ÿ™ tÔ,ÜÐ>¸t¸fÐEÓFÐFØˆr   c                 ó´   •— 	 t        |«      }d|cxk  rdk  st        d«      ‚ t        d«      ‚|S # 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
   Ú	__class__s     €r   r	   zServer._validate_portN   sy   ø€ ð	^Ü�t“9ˆDð �TÔ"˜UÒ"ÜÐ3Ó4Ð4ð #ÜÐ3Ó4Ð4Øˆøô	 ò 	^Ü˜y×1Ñ1Ð2Ð2TÐUYÐTZÐZ[Ð\Ó]Ð]ð	^ús	   ƒ2 ²%Ac                 ó€   •— |r:t        j                  dt        |«      «      st        ‰j                  › d|› d�«      ‚|S )Nz^\d+\.\d+\.\d+$z%.__init__() got an invalid version: 'r"   )ÚreÚmatchÚstrr   r%   )r   r   r&   s     €r   r   zServer._validate_versionW   sA   ø€ ÙÜ—8‘8Ð.´°G³Ô=Ü 9×#5Ñ#5Ð"6Ð6[Ð\cÐ[dÐdeÐ fÓgÐgØˆr   c                 óL   — d}||vrt        ddj                  |«      › �«      ‚|S )N)ÚSEVEREÚWARNINGÚINFOÚCONFIGÚFINEÚFINERÚFINESTzlog_level must be one of: z, )r   Újoin)r   r   Úlevelss      r   r   zServer._validate_log_level]   s2   € ØSˆØ˜FÑ"ÜÐ8¸¿¹À6Ó9JÐ8KÐLÓMÐMØÐr   c                 óh   — |�/t        |t        j                  j                  «      st	        d«      ‚|S )Nz.env must be a mapping of environment variables)Ú
isinstanceÚcollectionsÚabcÚMappingr   )r   r   s     r   r   zServer._validate_envc   s+   € Øˆ?¤:¨c´;·?±?×3JÑ3JÔ#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_serverh   s   € Ü—	‘	“ˆÜ�i‰i‹k˜EÑ! GÒ+ð Ü—‘×&Ñ& t§¡Ô7Øð øô —<‘<×(Ñ(ò  Ü—
‘
˜3–ð úô	 �i‰i‹k˜EÑ! 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_neededr   s6   € ð
 ˆzˆØÐØ�K‰K˜Ô ÜÓ ×-Ñ-¨dÓ3°MÑ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)z¨Start 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   rJ   r   ÚshutilÚwhichr    r*   r
   r   r   ÚextendÚsocketÚAF_INETÚSOCK_STREAMÚconnectÚConnectionErrorÚConnectionRefusedErrorÚprintÚ
subprocessÚPopenr   r   ÚpidrD   ÚTimeoutErrorr   )r   r   Ú	java_pathÚcommandr   Úsocks         r   rC   zServer.start|   sœ  € ð 9=¿	¹	Ð8Iˆt×&Ñ& t§|¡|Ô4ÈtÏyÉyˆä—L‘L Ó(ˆ	ØÐÜÐfÓgÐgð ØØØØÜ�—	‘	‹NØØ�N‰NØ ØØ(Øð
ˆð �9‰9Ð Ø�N‰N˜H d§i¡iÐ0Ô1à ŸI™IÐ1ˆt�yŠy°{ˆð
	.Ü—‘œvŸ~™~¬v×/AÑ/AÓBð 0ÀdØ—‘˜d D§I¡IÐ.Ô/÷0ä!Ð$hÐim×irÑirÐhsÐ"tÓuÐu÷0ð 0ûô &ò 	.ÜÐ/Ô0Ü%×+Ñ+¨G¸¿¹ÔBˆDŒLÜÐ8¸¿¹×9IÑ9IÐ8JÐKÔLØ×(Ñ(Ô*Ü"Ð%NÈtÏÉÐ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ÚwaitrX   )r   s    r   ÚstopzServer.stop¨   s[   € à�<‰<ÐÜÐ>Ó?Ð?à�|‰|× Ñ Ó"Ð*Ø—‘×&Ñ&Ô(Ø—‘×!Ñ!Ô#ØˆDŒLÜÐ7Õ8r   )Ni\  NNr.   N)é
   )N)r%   Ú
__module__Ú__qualname__Ú__doc__r   r   r   r	   r   r   r   rD   rJ   rC   re   Ú__classcell__)r&   s   @r   r   r      sA   ø„ ñó01ò3òô
ôòòó
óCò*öX	9r   r   )r7   r   r(   rO   rR   rY   r;   r<   Ú*selenium.webdriver.common.selenium_managerr   r   © r   r   ú<module>rm      s.   ðó$ Û 	Û 	Û Û Û Û Û å F÷S9ò S9r   