a
    ai%                     @   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rbd dlmZ zd dlZW n( ey   ejd ed Y n0 ddlmZmZmZ dd	lmZ ee d
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#ej$eeeddddZ%eej&e
ee  d d!d"Z'e%j(d#d$ej#ejd%d&d'e g d(d)dej$edd*d+d,Z)e%j(d-d$ej#ej*d.dd/ej*d0dd/ej$eedd1d2d3Z+e%( ej#ej*d.dd/ej$edd4d5d6Z,e%( ej#ej*d.dd/ej$edd4d7d8Z-e%j(d9did:ej#ejd;dd<d=ej*d>d?ej.d@ej$e/ee ddAdBdCZ0ee e	eef ddDdEdFZ1dS )G    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 0 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   D/var/www/html/SiteWeb/venv/lib/python3.9/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exportr   c                 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   r   c              
   c   sz   z2t | }|V  W d   n1 s&0    Y  W nB tyt } z*td| tjd td W Y d}~n
d}~0 0 dS )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    
(r3   list)namez--formatoutput_formatsimple)r7   jsonshellr$   zlThe format in which to display the list. Default format is simple, which displays name=value without quotes.)r!   r6   r   c                 C   s   | j d }t|}t|d}W d   n1 s20    Y  |dkr\ttj|ddd nX|dkrhd	nd
}t|D ]>}|| }|durt|dv rt	|}t| | d|  qtdS )z!Display all the stored key/value.r'   r1   Nr8   r*   T)indent	sort_keysr$   zexport  )r$   r9   =)
r(   r3   r   clickechor8   dumpssortedshlexr#   )r!   r6   r"   r1   valuesprefixkvr   r   r   list_valuesS   s    

(
rH   setkey)requiredvalue)r!   rJ   rL   r   c                 C   s\   | j d }| j d }| j d }t|||||\}}}|rNt| d|  n
td dS )zStore the given key/value.r'   r%   r&   r>   r   N)r(   r   r?   r@   r.   r0   )r!   rJ   rL   r"   r#   r$   successr   r   r   	set_valuep   s    


rN   )r!   rJ   r   c                 C   sd   | j d }t|}t|d}W d   n1 s20    Y  ||}|rVt| n
td dS )z%Retrieve the value for the given key.r'   r:   Nr   )r(   r3   r   getr?   r@   r.   r0   )r!   rJ   r"   r1   rD   Zstored_valuer   r   r   rO      s    

(
rO   c                 C   sH   | j d }| j d }t|||\}}|r:td|  n
td dS )zRemoves the given key.r'   r%   zSuccessfully removed r   N)r(   r   r?   r@   r.   r0   )r!   rJ   r"   r#   rM   r   r   r   unset   s    

rP   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   )r!   overriderQ   r   c                    sl   | 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).0rF   rG   rT   r   r   
<dictcomp>   s   zrun.<locals>.<dictcomp>zNo command given.r   N)r(   r   r   isfiler?   ZBadParameterr   itemsr@   r.   r0   run_command)r!   rT   rQ   r"   Zdotenv_as_dictr   rW   r   run   s    





r\   )commandenvr   c                 C   sb   t j }|| tjdkrJt| ddd|d}| \}}t|j	 n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bufsizer9   r^   )argsr^   N)r   rU   copyupdater.   platformr
   communicater0   
returncodeexecvpe)r]   r^   Zcmd_envp_r   r   r   r[      s    


r[   )2r8   r   rC   r.   
contextlibr   typingr   r   r   r   r   r   rd   
subprocessr
   r?   ImportErrorr/   writer0   mainr   r   r   r    r   strr   groupoptionPathZChoiceZBOOLZversion_optionZpass_contextContextr)   PathLiker3   r]   rH   argumentrN   rO   rP   ZUNPROCESSEDboolr\   r[   r   r   r   r   <module>   s    


$

"