o
    Ö]¼jÑ  ã                   @   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   úM/home/dinkstrade/pdmp-scanner/venv/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   €
&ÿ€þr5   Úlist)Únamez--formatÚoutput_formatÚsimple)r9   Ú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(   ©r3   Nr:   r,   T)ÚindentÚ	sort_keysr%   zexport Ú )r%   r;   ú=)
r)   r5   r   ÚclickÚechor:   ÚdumpsÚsortedÚshlexr$   )r"   r8   r#   r3   ÚvaluesÚprefixÚkÚvr   r   r   Úlist_valuesS   s   

ÿ
€ûrJ   Ú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   rA   rB   r0   r2   )r"   rL   rN   r#   r$   r%   Úsuccessr   r   r   Ú	set_valuep   s   


rP   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)   r5   r   ÚgetrA   rB   r0   r2   )r"   rL   r#   r3   rF   Ústored_valuer   r   r   rQ   †   s   

ÿ
rQ   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   rA   rB   r0   r2   )r"   rL   r#   r$   rO   r   r   r   Úunset—   s   


rS   )Ú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)Ú.0rH   rI   ©r[   r   r   Ú
<dictcomp>¿   s
    þzrun.<locals>.<dictcomp>zNo command given.r   N)r)   r   r   ÚisfilerA   ÚBadParameterr   ÚitemsrB   r0   r2   Úrun_commandÚargs)r"   r[   rX   r#   Údotenv_as_dictr   r^   r   Úrunª   s   
ÿ

þ

rf   ÚcommandÚenvc                 C   sØ   t j ¡ }| |¡ tjdkrCzt| ddd|d�}W n ty4   td| d › �tj	d� t 
d¡ Y nw | ¡ \}}t 
|j¡ d
S zt j| d | |d	� W d
S  tyk   td| d › �tj	d� t 
d¡ Y d
S w )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;   rh   zCommand not found: r+   r   )rd   rh   N)r   r\   ÚcopyÚupdater0   Úplatformr
   r   r/   r1   r2   ÚcommunicateÚ
returncodeÚexecvpe)rg   rh   Úcmd_envÚpÚ_r   r   r   rc   Ì   s&   




ÿþþrc   )3r:   r   rE   r0   Ú
contextlibr   Útypingr   r   r   r   r   r   rm   Ú
subprocessr
   rA   ÚImportErrorr1   Úwriter2   Úmainr   r   r   r!   r   Ústrr   ÚgroupÚoptionÚPathÚChoiceÚBOOLÚversion_optionÚpass_contextÚContextr*   ÚPathLiker5   rg   rJ   ÚargumentrP   rQ   rS   ÚUNPROCESSEDÚboolÚtuplerf   rc   r   r   r   r   Ú<module>   s¨     
ÿû
ûûû
,
û
$ýÿý,&