a
    ¥Q•hœ.  ã                   @   s(  d dl Z d dlZ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mZmZmZ ddlmZmZ ddlmZ eedf Ze e¡Zee ee d	œd
d„ZG dd„ dƒZd.eeee ee dœdd„Ze	eee eeee ee f  dœdd„ƒZ d/eeeee!ee eee! eef dœdd„Z"d0eeeee eee! ef dœdd„Z#eeeee f  e!eeee f dœdd„Z$eee d œd!d"„Z%d1ee!e!ed$œd%d&„Z&d2ee eee  e!e!e!ee e!d(œd)d*„Z'd3ee eee  e!e!ee eeee f d+œd,d-„Z(dS )4é    N)ÚOrderedDict)Úcontextmanager)ÚIOÚDictÚIterableÚIteratorÚMappingÚOptionalÚTupleÚUnioné   )ÚBindingÚparse_stream)Úparse_variableszos.PathLike[str])ÚmappingsÚreturnc                 c   s*   | D ] }|j rt d|jj¡ |V  qd S )Nz;Python-dotenv could not parse statement starting at line %s)ÚerrorÚloggerÚwarningÚoriginalÚline)r   Úmapping© r   úD/var/www/sistema_ama/venv/lib/python3.9/site-packages/dotenv/main.pyÚwith_warn_for_invalid_lines   s    þr   c                	   @   s¬   e Zd Zdee eee  eee eeddœdd„Ze	e
ee  dœdd	„ƒZeeee f dœd
d„Ze
eeee f  dœdd„Zedœdd„Zeee dœdd„ZdS )ÚDotEnvNFT)Údotenv_pathÚstreamÚverboseÚencodingÚinterpolateÚoverrider   c                 C   s.   || _ || _d | _|| _|| _|| _|| _d S ©N)r   r   Ú_dictr   r   r    r!   )Úselfr   r   r   r   r    r!   r   r   r   Ú__init__#   s    	zDotEnv.__init__)r   c                 c   sˆ   | j rLtj | j ¡rLt| j | jd��}|V  W d   ƒ q„1 s@0    Y  n8| jd ur`| jV  n$| jrxt 	d| j ptd¡ t
 d¡V  d S )N©r   z3Python-dotenv could not find configuration file %s.ú.envÚ )r   ÚosÚpathÚisfileÚopenr   r   r   r   ÚinfoÚioÚStringIO)r$   r   r   r   r   Ú_get_stream4   s    &

þzDotEnv._get_streamc                 C   s@   | j r| j S |  ¡ }| jr0tt|| jd�ƒ| _ n
t|ƒ| _ | j S )zReturn dotenv as dict)r!   )r#   Úparser    r   Úresolve_variablesr!   )r$   Z
raw_valuesr   r   r   ÚdictC   s    
zDotEnv.dictc                 c   sV   |   ¡ �:}tt|ƒƒD ]}|jd ur|j|jfV  qW d   ƒ n1 sH0    Y  d S r"   )r0   r   r   ÚkeyÚvalue)r$   r   r   r   r   r   r1   Q   s    

zDotEnv.parsec                 C   sJ   |   ¡ sdS |   ¡  ¡ D ],\}}|tjv r2| js2q|dur|tj|< qdS )zI
        Load the current dotenv as system environment variable.
        FNT)r3   Úitemsr)   Úenvironr!   )r$   ÚkÚvr   r   r   Úset_as_environment_variablesW   s    z#DotEnv.set_as_environment_variables)r4   r   c                 C   s2   |   ¡ }||v r|| S | jr.t d|| j¡ dS )z	
        zKey %s not found in %s.N)r3   r   r   r   r   )r$   r4   Údatar   r   r   Úgetf   s    z
DotEnv.get)NFNTT)Ú__name__Ú
__module__Ú__qualname__r	   ÚStrPathr   ÚstrÚboolr%   r   r   r0   r   r3   r
   r1   r:   r<   r   r   r   r   r   "   s(        ù
ør   úutf-8)r   Ú
key_to_getr   r   c                 C   s   t | d|d� |¡S )z
    Get the value of a given key from the given .env.

    Returns `None` if the key isn't found or doesn't have a value.
    T)r   r   )r   r<   )r   rD   r   r   r   r   Úget_keyt   s    
rE   )r*   r   r   c              	   c   sâ   t j | ¡sDt| d|d��}| d¡ W d   ƒ n1 s:0    Y  tjd|dd��l}z:t| |d��}||fV  W d   ƒ n1 s„0    Y  W n  ty°   t  |j	¡ ‚ Y n0 W d   ƒ n1 sÆ0    Y  t
 |j	| ¡ d S )NÚw)Úmoder   r(   F)rG   r   Údeleter&   )r)   r*   r+   r,   ÚwriteÚtempfileÚNamedTemporaryFileÚBaseExceptionÚunlinkÚnameÚshutilÚmove)r*   r   ÚsourceÚdestr   r   r   Úrewrite�   s    (,&rS   ÚalwaysF)r   Ú
key_to_setÚvalue_to_setÚ
quote_modeÚexportr   r   c                 C   s  |dvrt d|› �ƒ‚|dkp.|dko.| ¡  }|rHd | dd¡¡}n|}|rdd|› d	|› d
�}n|› d	|› d
�}t| |d��‚\}	}
d}d}tt|	ƒƒD ]<}|j|kr¸|
 |¡ d}qš|
 |j	j
¡ |j	j
 d
¡ }qš|sô|rê|
 d
¡ |
 |¡ W d  ƒ n1 �s
0    Y  d||fS )z³
    Adds or Updates a key/value to the given .env

    If the .env path given doesn't exist, fails instead of risking creating
    an orphan .env somewhere in the filesystem
    )rT   ÚautoÚneverzUnknown quote_mode: rT   rY   z'{}'ú'z\'zexport ú=Ú
r&   FTN)Ú
ValueErrorÚisalnumÚformatÚreplacerS   r   r   r4   rI   r   ÚstringÚendswith)r   rU   rV   rW   rX   r   ÚquoteZ	value_outZline_outrQ   rR   ZreplacedZmissing_newliner   r   r   r   Úset_key“   s2    þ


*re   )r   Úkey_to_unsetrW   r   r   c                 C   s¦   t j | ¡s t d| ¡ d|fS d}t| |d��D\}}tt|ƒƒD ]"}|j|krVd}qB| 	|j
j¡ qBW d  ƒ n1 sz0    Y  |sžt d|| ¡ d|fS ||fS )z¢
    Removes a given key from the given `.env` file.

    If the .env path given doesn't exist, fails.
    If the given key doesn't exist in the .env, fails.
    z(Can't delete from %s - it doesn't exist.NFr&   Tz/Key %s not removed from %s - key doesn't exist.)r)   r*   Úexistsr   r   rS   r   r   r4   rI   r   rb   )r   rf   rW   r   ZremovedrQ   rR   r   r   r   r   Ú	unset_keyÄ   s    
.rh   )Úvaluesr!   r   c                    s‚   i }| D ]t\}}|d u rd }nVt |ƒ}i ‰ |rFˆ  tj¡ ˆ  |¡ nˆ  |¡ ˆ  tj¡ d ‡ fdd„|D ƒ¡}|||< q|S )Nr(   c                 3   s   | ]}|  ˆ ¡V  qd S r"   )Úresolve)Ú.0Zatom©Úenvr   r   Ú	<genexpr>õ   ó    z$resolve_variables.<locals>.<genexpr>)r   Úupdater)   r7   Újoin)ri   r!   Ú
new_valuesrN   r5   ÚresultZatomsr   rl   r   r2   ã   s    

r2   )r*   r   c                 c   st   t j | ¡stdƒ‚t j | ¡r,t j | ¡} d}t j | ¡}||krp|V  t j t j |t jj¡¡}|| }}q<dS )zL
    Yield directories starting from the given directory up to the root
    zStarting path not foundN)	r)   r*   rg   ÚIOErrorr+   ÚdirnameÚabspathrq   Úpardir)r*   Zlast_dirZcurrent_dirZ
parent_dirr   r   r   Ú_walk_to_rootü   s    rx   r'   )ÚfilenameÚraise_error_if_not_foundÚusecwdr   c           
      C   s²   dd„ }|s|ƒ st tddƒr(t ¡ }nJt ¡ }t}|jj|krV|jdusNJ ‚|j}q4|jj}tj	 
tj	 |¡¡}t|ƒD ]&}tj	 || ¡}	tj	 |	¡rz|	  S qz|r®tdƒ‚dS )z‡
    Search in increasingly higher folders for the given file

    Returns path to the file if found, or an empty string otherwise
    c                  S   s   t ddddgd�} t| dƒ S )z> Decide whether this is running in a REPL or IPython notebook Ú__main__NÚ__file__)Úfromlist)Ú
__import__Úhasattr)Úmainr   r   r   Ú_is_interactive  s    z$find_dotenv.<locals>._is_interactiveÚfrozenFNzFile not foundr(   )ÚgetattrÚsysr)   ÚgetcwdÚ	_getframer}   Úf_codeÚco_filenameÚf_backr*   ru   rv   rx   rq   r+   rt   )
ry   rz   r{   r‚   r*   ÚframeZcurrent_fileZframe_filenameru   Ú
check_pathr   r   r   Úfind_dotenv  s"    

r�   T)r   r   r   r!   r    r   r   c                 C   s2   | du r|du rt ƒ } t| |||||d�}| ¡ S )aÑ  Parse a .env file and then load all the variables found as environment variables.

    Parameters:
        dotenv_path: Absolute or relative path to .env file.
        stream: Text stream (such as `io.StringIO`) with .env content, used if
            `dotenv_path` is `None`.
        verbose: Whether to output a warning the .env file is missing.
        override: Whether to override the system environment variables with the variables
            from the `.env` file.
        encoding: Encoding to be used to read the file.
    Returns:
        Bool: True if at least one environment variable is set else False

    If both `dotenv_path` and `stream` are `None`, `find_dotenv()` is used to find the
    .env file.
    N©r   r   r   r    r!   r   )r�   r   r:   )r   r   r   r!   r    r   Údotenvr   r   r   Úload_dotenv7  s    úr�   )r   r   r   r    r   r   c                 C   s.   | du r|du rt ƒ } t| |||d|d� ¡ S )a‘  
    Parse a .env file and return its content as a dict.

    The returned dict will have `None` values for keys without values in the .env file.
    For example, `foo=bar` results in `{"foo": "bar"}` whereas `foo` alone results in
    `{"foo": None}`

    Parameters:
        dotenv_path: Absolute or relative path to the .env file.
        stream: `StringIO` object with .env content, used if `dotenv_path` is `None`.
        verbose: Whether to output a warning if the .env file is missing.
        encoding: Encoding to be used to read the file.

    If both `dotenv_path` and `stream` are `None`, `find_dotenv()` is used to find the
    .env file.
    NTrŽ   )r�   r   r3   )r   r   r   r    r   r   r   r   Údotenv_values]  s    úr‘   )rC   )rT   FrC   )rT   rC   )r'   FF)NNFFTrC   )NNFTrC   ))r.   Úloggingr)   rO   r…   rJ   Úcollectionsr   Ú
contextlibr   Útypingr   r   r   r   r   r	   r
   r   Úparserr   r   Ú	variablesr   rA   r@   Ú	getLoggerr=   r   r   r   rE   rS   rB   re   rh   r2   rx   r�   r�   r‘   r   r   r   r   Ú<module>   s²   (

U ýüý   úù4  üû ý   ýü*      ú
ù'     û
ú