o
    T۷i                     @   s  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mZm	Z	m
Z
mZmZ ejdkr1d dlmZ zd dlZW n eyK   ejd ed Y nw ddlmZmZmZ dd	lmZ d
ee fddZe ejdde ejddddejddde g dddejdddej!ddej"edej#dej$deded ed
df
d!d"Z%ed#ej&d
e
ee  fd$d%Z'e%j(d&d'ej#ejd(d)d*e g d+d,ddej$d)ed
dfd-d.Z)e%j(d/d'ej#ej*d0dd1ej*d2dd1dej$d0ed2ed
dfd3d4Z+e%( ej#ej*d0dd1dej$d0ed
dfd5d6Z,e%( ej#ej*d0dd1dej$d0ed
dfd7d8Z-e%j(dddd9d:ej#ejd;dd<d=ej*d>d?ej.d@dej$dAe/d>e0edBf d
dfdCdDZ1dEee dFe	eef d
dfdGdHZ2dS )I    N)contextmanager)IOAnyDictIteratorListOptionalwin32)PopenzkIt seems python-dotenv is not installed with cli option. 
Run pip install "python-dotenv[cli]" to fix this.   )dotenv_valuesset_key	unset_key)__version__returnc                  C   s4   zt  } W n
 ty   Y dS w t j| d}|S )zZ
    Return a path for the ${pwd}/.env file.

    If pwd does not exist, return None.
    Nz.env)osgetcwdFileNotFoundErrorpathjoin)cwdr    r   @/home/ubuntu/vllm_env/lib/python3.10/site-packages/dotenv/cli.pyenumerate_env   s   r   z-fz--fileT)	file_okayzNLocation of the .env file, defaults to .env file in current working directory.)defaulttypehelpz-qz--quotealways)r   neverautozbWhether to quote or not the variable values. Default mode is always. This does not affect parsing.z-ez--exportFz;Whether to write the dot file as an executable bash script.)versionctxfilequoteexportc                 C   s   |||d| _ dS )zAThis script is used to set, get or unset values from a .env file.)QUOTEEXPORTFILEN)obj)r"   r#   r$   r%   r   r   r   cli&   s   r*   r   c              
   c   s    zt | }|V  W d   W dS 1 sw   Y  W dS  ty? } ztd| tjd td W Y d}~dS d}~ww )z~
    Open a file and yield the corresponding (decoded) stream.

    Exits with error code 2 if the file cannot be opened.
    NzError opening env file: )r#      )openOSErrorprintsysstderrexit)r   streamexcr   r   r   stream_fileC   s   
&r4   list)namez--formatoutput_formatsimple)r8   jsonshellr%   zlThe format in which to display the list. Default format is simple, which displays name=value without quotes.c                 C   s   | j d }t|}t|d}W d   n1 sw   Y  |dkr/ttj|ddd dS |dkr5d	nd
}t|D ]}|| }|durZ|dv rNt	|}t| | d|  q;dS )z!Display all the stored key/value.r(   r2   Nr9   r+   T)indent	sort_keysr%   zexport  )r%   r:   =)
r)   r4   r   clickechor9   dumpssortedshlexr$   )r"   r7   r#   r2   valuesprefixkvr   r   r   list_valuesS   s   


rI   setkey)requiredvaluec                 C   s^   | j d }| j d }| j d }t|||||\}}}|r(t| d|  dS td dS )z
    Store the given key/value.

    This doesn't follow symlinks, to avoid accidentally modifying a file at a
    potentially untrusted path.
    r(   r&   r'   r?   r   N)r)   r   r@   rA   r/   r1   )r"   rK   rM   r#   r$   r%   successr   r   r   	set_valuep   s   


rO   c                 C   sf   | j d }t|}t|d}W d   n1 sw   Y  ||}|r,t| dS td dS )z%Retrieve the value for the given key.r(   r;   Nr   )r)   r4   r   getr@   rA   r/   r1   )r"   rK   r#   r2   rE   stored_valuer   r   r   rP      s   


rP   c                 C   sJ   | j d }| j d }t|||\}}|rtd|  dS td dS )z
    Removes the given key.

    This doesn't follow symlinks, to avoid accidentally modifying a file at a
    potentially untrusted path.
    r(   r&   zSuccessfully removed r   N)r)   r   r@   rA   r/   r1   )r"   rK   r#   r$   rN   r   r   r   unset   s   


rR   )allow_extra_argsallow_interspersed_argsignore_unknown_options)context_settingsz--override/--no-overridezKOverride variables from the environment file with those from the .env file.)r   r   commandline)nargsr   override.c                    sv   | j d }tj|stjd| d| d fddt| D }|s/td t	
d tg || j| d	S )
z/Run command with environment variables present.r(   zInvalid value for '-f' "z" does not exist.)r"   c                    s,   i | ]\}}|d ur s|t jvr||qS )N)r   environ).0rG   rH   rZ   r   r   
<dictcomp>   s
    zrun.<locals>.<dictcomp>zNo command given.r   N)r)   r   r   isfiler@   BadParameterr   itemsrA   r/   r1   run_commandargs)r"   rZ   rW   r#   dotenv_as_dictr   r]   r   run   s   




re   commandenvc                 C   sd   t j }|| tjdkr&t| ddd|d}| \}}t|j	 dS t j
| d | |d dS )a  Replace the current process with the specified command.

    Replaces the current process with the specified command and the variables from `env`
    added in the current environment variables.

    Parameters
    ----------
    command: List[str]
        The command and it's parameters
    env: Dict
        The additional environment variables

    Returns
    -------
    None
        This function does not return any value. It replaces the current process with the new one.

    r	   Tr   F)universal_newlinesbufsizer:   rg   )rc   rg   N)r   r[   copyupdater/   platformr
   communicater1   
returncodeexecvpe)rf   rg   cmd_envp_r   r   r   rb      s   


rb   )3r9   r   rD   r/   
contextlibr   typingr   r   r   r   r   r   rl   
subprocessr
   r@   ImportErrorr0   writer1   mainr   r   r   r!   r   strr   groupoptionPathChoiceBOOLversion_optionpass_contextContextr*   PathLiker4   rf   rI   argumentrO   rP   rR   UNPROCESSEDbooltuplere   rb   r   r   r   r   <module>   s     


,

$,&