a
    Ò�é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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   ú:/home/Claro/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 ršt 	|¡}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š    
ÿ
ûûû
$
û
ý"