U
    g                     @   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 d dlm	Z	m
Z
mZmZmZ zd dlZW n* ek
r   ejd ed Y nX ddlmZmZmZ ddlmZ d	d
 Ze ejdde ejddddejdddedddg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"& ej ejd"d#ed#d$d%d&gd'dej!e'dd(d)d*Z(e"& ej ej)d+dd,ej)d-dd,ej!e	e	dd.d/d0Z*e"& ej ej)d+dd,ej!e	dd1d2d3Z+e"& ej ej)d+dd,ej!e	dd1d4d5Z,e"j&d6did7ej ejd8dd9d:ej)d;d<ej-d=ej!e'ee$ dd>d?d@Z.ee$ e
e$e$f e/dAdBdCZ0dS )D    N)contextmanager)Popen)AnyDictIOIteratorListzkIt 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__c                  C   s6   zt  } W n tk
r"   Y dS X 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   ./tmp/pip-unpacked-wheel-d6easkbl/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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exportreturnc                 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   sb   zt | }|V  W 5 Q R X W n> tk
r\ } z td| tjd td W 5 d}~X Y nX dS )z~
    Open a file and yield the corresponding (decoded) stream.

    Exits with error code 2 if the file cannot be opened.
    zError opening env file: )r      N)openOSErrorprintsysstderrexit)r   streamexcr   r   r   stream_file3   s    
r1   z--formatsimplejsonshellr!   zlThe format in which to display the list. Default format is simple, which displays name=value without quotes.)r   formatr"   c              	   C   s   | j d }t|}t|d}W 5 Q R X |dkrHttj|ddd nX|dkrTdnd	}t|D ]>}|| }|d
k	r`|dkrt	|}t| | d|  q`d
S )z!Display all the stored key/value.r%   r/   r3   r(   T)indent	sort_keysr!   zexport  N)r!   r4   =)
r&   r1   r
   clickechor3   dumpssortedshlexr    )r   r5   r   r/   valuesprefixkvr   r   r   listC   s    


rD   key)requiredvalue)r   rE   rG   r"   c                 C   sZ   | 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.   )r   rE   rG   r   r    r!   successr   r   r   set\   s    


rI   )r   rE   r"   c              	   C   sN   | j d }t|}t|d}W 5 Q R X ||}|rBt| ntd dS )z%Retrieve the value for the given key.r%   r6   r	   N)r&   r1   r
   getr;   r<   r.   )r   rE   r   r/   r@   Zstored_valuer   r   r   rJ   l   s    


rJ   c                 C   sF   | 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.   )r   rE   r   r    rH   r   r   r   unset}   s    

rK   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   overriderL   r"   c                    sr   | j d }tj|s,tjd| d| d fddt| D }|s\td t	d t
||}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 k	r s"|t jkr||qS )N)r   environ).0rB   rC   rO   r   r   
<dictcomp>   s     
 zrun.<locals>.<dictcomp>zNo command given.r	   N)r&   r   r   isfiler;   ZBadParameterr
   itemsr<   r.   run_command)r   rO   rL   r   Zdotenv_as_dictretr   rR   r   run   s    






rX   )commandenvr"   c                 C   s8   t j }|| t| ddd|d}| \}}|jS )aw  Run command in sub process.

    Runs the command in a sub process with 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
    -------
    int
        The return code of the command

    Tr   F)universal_newlinesbufsizer4   rZ   )r   rP   copyupdater   communicate
returncode)rY   rZ   Zcmd_envp_r   r   r   rV      s    

rV   )1r3   r   r?   r,   
contextlibr   
subprocessr   typingr   r   r   r   r   r;   ImportErrorr-   writer.   mainr
   r   r   r   r   r   groupoptionPathZChoiceZBOOLZversion_optionZpass_contextContextr'   PathLikestrr1   rY   boolrD   argumentrI   rJ   rK   ZUNPROCESSEDrX   intrV   r   r   r   r   <module>   s|   



$"