o
    ѷ6i                     @   sl   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 d dl	m
Z
 eeZG dd dZdS )    N)Path)WebDriverExceptionc                   @   sd   e Zd ZdZdedefddZedefddZ	edee
 defdd	Zed
ee fddZdS )SeleniumManagerzWrapper for getting information from the Selenium Manager binaries.

    This implementation is still in beta, and may change.
    argsreturnc                 C   s\   t |  g| }t tjkr|d |d |d |d |d | |S )zDetermines the locations of the requested assets.

        Args:
            args: the commands to send to the selenium manager binary.

        Returns:
            Dictionary of assets and their path.
        z--debugz--language-bindingpythonz--outputjson)str_get_binaryloggergetEffectiveLevelloggingDEBUGappend_run)selfr    r   o/var/www/hoanhtaovolam_webdjango/env/lib/python3.10/site-packages/selenium/webdriver/common/selenium_manager.pybinary_paths%   s   	





zSeleniumManager.binary_pathsc                  C   s  t tjd} td}|dur| |} d}td }dur,t	
d| t |}nF|  r3| }n?ddddddd	}tjd
v rEt nd}tjdv rSt	dtj |tj|f}|du rjtdtj d| t tj|}|du sz| std| t	
d| |S )zDetermines the path of the correct Selenium Manager binary.

        Returns:
            The Selenium Manager executable location.

        Raises:
            WebDriverException: If the platform is unsupported.
        zselenium-managerEXENSE_MANAGER_PATHz2Selenium Manager set by env SE_MANAGER_PATH to: %szmacos/selenium-managerzwindows/selenium-manager.exezlinux/selenium-manager))darwinany)win32r   )cygwinr   )linuxx86_64)freebsdr   )openbsdr   )r   r   r   r   )r   r   zFSelenium Manager binary may not be compatible with %s; verify settingsz/Unsupported platform/architecture combination: /z2Unable to obtain working Selenium Manager binary; z$Selenium Manager binary found at: %s)r   __file__parentjoinpath	sysconfigget_config_varwith_suffixosgetenvr   debugexistssysplatformmachinewarninggetr   is_file)compiled_pathexepathenv_pathallowedarchlocationr   r   r   r
   8   s8   



	
zSeleniumManager._get_binaryc              
   C   s   d | }td| z8tjdkrtj| dtjd}ntj| dd}|j	d
d}|j	d
d}|d	kr=t|ng i d
}W n tyW } ztd| |d}~ww t|d  |d }|jrwtd| d|j d| d| |S )zExecutes the Selenium Manager Binary.

        Args:
            args: the components of the command being executed.

        Returns:
            The log string containing the driver location.
         zExecuting process: %sr   T)capture_outputcreationflags)r8   zutf-8
 )logsresultzUnsuccessful command executed: Nr<   r=   z; code: )joinr   r(   r*   r+   
subprocessrunCREATE_NO_WINDOWstdoutdecoderstripstderrr   loads	Exceptionr   r   _process_logs
returncode)r   commandcompleted_procrB   rE   outputerrr=   r   r   r   r   i   s(   


 zSeleniumManager._run	log_itemsc                 C   sD   | D ]}|d dkrt |d  q|d dv rt |d  qd S )NlevelWARNmessage)r   INFO)r   r-   r(   )rN   itemr   r   r   rH      s   zSeleniumManager._process_logsN)__name__
__module____qualname____doc__listdictr   staticmethodr   r
   r	   r   rH   r   r   r   r   r      s    0r   )r   r   r&   r+   r?   r*   r#   pathlibr   selenium.commonr   	getLoggerrT   r   r   r   r   r   r   <module>   s   
