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   úG/var/www/html/CropPilot/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   €
&ÿ€þr4   Úlist)Únamez--formatÚoutput_formatÚsimple)r8   Ú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(   ©r2   Nr9   r+   T)ÚindentÚ	sort_keysr%   zexport Ú )r%   r:   ú=)
r)   r4   r   ÚclickÚechor9   ÚdumpsÚsortedÚshlexr$   )r"   r7   r#   r2   ÚvaluesÚprefixÚkÚvr   r   r   Úlist_valuesS   s   

ÿ
€ûrI   Ú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   r@   rA   r/   r1   )r"   rK   rM   r#   r$   r%   Úsuccessr   r   r   Ú	set_valuep   s   


rO   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)   r4   r   Úgetr@   rA   r/   r1   )r"   rK   r#   r2   rE   Ústored_valuer   r   r   rP   †   s   

ÿ
rP   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   r@   rA   r/   r1   )r"   rK   r#   r$   rN   r   r   r   Úunset—   s   


rR   )Ú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)Ú.0rG   rH   ©rZ   r   r   Ú
<dictcomp>¿   s
    þzrun.<locals>.<dictcomp>zNo command given.r   N)r)   r   r   Úisfiler@   ÚBadParameterr   ÚitemsrA   r/   r1   Úrun_commandÚargs)r"   rZ   rW   r#   Údotenv_as_dictr   r]   r   Úrunª   s   
ÿ

þ

re   ÚcommandÚenvc                 C   sd   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Úbufsizer:   rg   )rc   rg   N)r   r[   ÚcopyÚupdater/   Úplatformr
   Úcommunicater1   Ú
returncodeÚexecvpe)rf   rg   Úcmd_envÚpÚ_r   r   r   rb   Ì   s   


rb   )3r9   r   rD   r/   Ú
contextlibr   Útypingr   r   r   r   r   r   rl   Ú
subprocessr
   r@   ÚImportErrorr0   Úwriter1   Úmainr   r   r   r!   r   Ústrr   ÚgroupÚoptionÚPathÚChoiceÚBOOLÚversion_optionÚpass_contextÚContextr*   ÚPathLiker4   rf   rI   ÚargumentrO   rP   rR   ÚUNPROCESSEDÚboolÚtuplere   rb   r   r   r   r   Ú<module>   s¨     
ÿû
ûûû
,
û
$ýÿý,&