o
    h5                     @   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%( ej#ejd&d'e g d(d)ddej$d*e)d
dfd+d,Z*e%( ej#ej+d-dd.ej+d/dd.dej$d-ed/ed
dfd0d1Z,e%( ej#ej+d-dd.dej$d-ed
dfd2d3Z-e%( ej#ej+d-dd.dej$d-ed
dfd4d5Z.e%j(d6did7ej#ejd8dd9d:ej+d;d<ej/d=dej$d>e)d;ee d
dfd?d@Z0dAee dBeeef d
dfdCdDZ1dS )E    N)contextmanager)AnyDictIO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   5/usr/local/lib/python3.10/site-packages/dotenv/cli.pyenumerate_env   s   r   z-fz--fileT)Z	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_file5   s   
&r3   z--formatsimple)r4   jsonshellr$   zlThe format in which to display the list. Default format is simple, which displays name=value without quotes.formatc                 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'   r1   Nr5   r*   T)indent	sort_keysr$   zexport  )r$   r6   =)
r(   r3   r   clickechor5   dumpssortedshlexr#   )r!   r7   r"   r1   valuesprefixkvr   r   r   listE   s   


rF   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.r'   r%   r&   r<   r   N)r(   r   r=   r>   r0   )r!   rG   rI   r"   r#   r$   successr   r   r   set^   s   


rK   c                 C   sd   | 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'   r8   Nr   )r(   r3   r   getr=   r>   r0   )r!   rG   r"   r1   rB   Zstored_valuer   r   r   rL   n   s   


rL   c                 C   sH   | j d }| j d }t|||\}}|rtd|  dS td dS )zRemoves the given key.r'   r%   zSuccessfully removed r   N)r(   r   r=   r>   r0   )r!   rG   r"   r#   rJ   r   r   r   unset   s   

rM   Zignore_unknown_options)Zcontext_settingsz--override/--no-overridezKOverride variables from the environment file with those from the .env file.)r   r   commandline)nargsr   overridec                    sj   | j d }tj|stjd| d| d fddt| D }|s.td t	d t
|| 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).0rD   rE   rQ   r   r   
<dictcomp>   s
    zrun.<locals>.<dictcomp>zNo command given.r   N)r(   r   r   isfiler=   ZBadParameterr   itemsr>   r0   run_command)r!   rQ   rN   r"   Zdotenv_as_dictr   rT   r   run   s   





rY   commandenvc                 C   sb   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bufsizer6   r[   )argsr[   N)r   rR   copyupdater.   platformr
   communicater0   
returncodeexecvpe)rZ   r[   Zcmd_envp_r   r   r   rX      s   


rX   )2r5   r   rA   r.   
contextlibr   typingr   r   r   r   r   r   ra   
subprocessr
   r=   ImportErrorr/   writer0   mainr   r   r   r    r   strr   groupoptionPathZChoiceZBOOLZversion_optionZpass_contextContextr)   PathLiker3   rZ   boolrF   argumentrK   rL   rM   ZUNPROCESSEDrY   rX   r   r   r   r   <module>   s     




,$(&