U
    ^»{jæ  ã                   @  sÊ   d dl m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Zd dl	m
Z
 e ¡ Zertd dlmZ d dlmZmZ ddd	œd
d„Zdddœdd„Zddddœddddddœdd„Zddddœdd„ZdS )é    )ÚannotationsN)ÚTYPE_CHECKING)Úget_chrome_download_path)ÚPath)ÚAnyÚSequencez
str | PathÚbool)ÚpathÚreturnc                 C  s$   zt  | t j¡W S    Y dS X d S )NF)ÚosÚaccessÚX_OK)r	   © r   úY/var/www/html/bwave/python/venv/lib/python3.8/site-packages/choreographer/utils/_which.pyÚ_is_exe   s    r   Ústrz
str | None)Úkeyr
   c                 C  s`   zDdd l }| | |j| › d�d|j¡d¡d }t d|¡ d¡}W n tk
rZ   Y d S X |S )Nr   z\shell\open\commandÚ z"(.*?)"é   )	ÚwinregÚQueryValueExÚOpenKeyÚHKEY_CLASSES_ROOTZKEY_READÚreÚsearchÚgroupÚ	Exception)r   r   ÚcommandÚexer   r   r   Ú_which_from_windows_reg   s"    üùø	r   F)Ú
skip_localÚ
ms_prog_idÚverify_localzSequence[str])Úexecutable_namesr    r!   r"   r
   c                C  sô   t  d|› �¡ d}t| tƒr$| g} |r@t  d¡ |r–tdƒ‚nVtƒ }t  d|› �¡ |dk	rx| ¡ rxt  d¡ t|ƒS t  d|› d�¡ |r–td	ƒ‚t 	¡ d
krÈdt
jd< |rÈt|ƒ }rÈt|ƒrÈ|S | D ]"}t |¡}|rÌt|ƒrÌ|  S qÌdS )aW  
    Look for and return first name found in PATH.

    Args:
        executable_names: the list of names to look for
        skip_local: (default False) don't look for a choreo download of anything.
        ms_prog_id: A windows registry ID string to lookup program paths
        verify_local: (default False) force using local install.

    z%Looking for browser, skipping local? Nz0Skipping searching for local download of chrome.z,Cannot set both skip_local and verify_local.z+Looking for at local chrome download path: zReturning local chrome.z Local chrome not found at path: Ú.z*verify_local set to True, local not found.ÚWindowsÚ0Z"NoDefaultCurrentDirectoryInExePath)Ú_loggerÚdebugÚ
isinstancer   Ú
ValueErrorr   ÚexistsÚRuntimeErrorÚplatformÚsystemr   Úenvironr   r   ÚshutilÚwhich)r#   r    r!   r"   r	   Zlocal_chromer   r   r   r   Úbrowser_which/   s<    




ÿ
þý

r2   r   )ÚargsÚkwargsr
   c                  O  s   t j dt| |Ž¡S )a4  
    Call `browser_which()` but check for user override first.

    It looks for the browser in path.

    Accepts the same arguments as `browser_which':

    Args:
        executable_names: the list of names to look for
        skip_local: (default False) don't look for a choreo download of anything.

    ZBROWSER_PATH)r   r/   Úgetr2   )r3   r4   r   r   r   Úget_browser_pathf   s    r6   )Ú
__future__r   r   r-   r   r0   Útypingr   ZlogistroZchoreographer.cli._cli_utilsr   Ú	getLoggerr'   Úpathlibr   r   r   r   r   r2   r6   r   r   r   r   Ú<module>   s$   û7