o
    ûÞh³0  ã                   @   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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d	ee d
ee fdd„ZG dd„ dƒZ	d7dededee d
ee fdd„Z e
dedee d
eeee ee f  fdd„ƒZ!			d8dedededede"dee d
eee" eef fdd„Z#		d9ded ededee d
eee" ef f
d!d"„Z$d#eeeee f  d$e"d
eeee f fd%d&„Z%ded
ee fd'd(„Z&	)		d:d*ed+e"d,e"d
efd-d.„Z'					/	d;dee d0eee  d1e"d$e"d2e"dee d
e"fd3d4„Z(				/	d<dee d0eee  d1e"d2e"dee d
eeee f fd5d6„Z)dS )=é    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   úK/var/www/html/premium_crap/venv/lib/python3.10/site-packages/dotenv/main.pyÚwith_warn_for_invalid_lines   s   €þúr   c                   @   sÄ   e Zd Z					ddee deee  dedee ded	ed
dfdd„Ze	d
e
ee  fdd„ƒZd
eeee f fdd„Zd
e
eeee f  fdd„Zd
efdd„Zded
ee f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__c                 c   s�   � | j r)tj | j ¡r)t| j | jd��}|V  W d   ƒ d S 1 s"w   Y  d S | jd ur4| jV  d S | jr@t 	d| j p>d¡ 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   sD   | j r| j S |  ¡ }| jrtt|| jd�ƒ| _ | j S t|ƒ| _ | j S )zReturn dotenv as dict)r!   )r#   Úparser    r   Úresolve_variablesr!   )r$   Ú
raw_valuesr   r   r   ÚdictC   s   ÿ
þzDotEnv.dictc                 c   sZ   � |   ¡ �}tt|ƒƒD ]}|jd ur|j|jfV  qW d   ƒ d S 1 s&w   Y  d S r"   )r0   r   r   ÚkeyÚvalue)r$   r   r   r   r   r   r1   S   s   €

€þ"ÿzDotEnv.parsec                 C   sJ   |   ¡ sdS |   ¡  ¡ D ]\}}|tjv r| jsq|dur"|tj|< qdS )zI
        Load the current dotenv as system environment variable.
        FNT)r4   Úitemsr)   Úenvironr!   )r$   ÚkÚvr   r   r   Úset_as_environment_variablesY   s   
€z#DotEnv.set_as_environment_variablesr5   c                 C   s2   |   ¡ }||v r|| S | jrt d|| j¡ dS )ú zKey %s not found in %s.N)r4   r   r   r   r   )r$   r5   Údatar   r   r   Úgeth   s   z
DotEnv.get)NFNTT)Ú__name__Ú
__module__Ú__qualname__r	   ÚStrPathr   ÚstrÚboolr%   r   r   r0   r   r4   r
   r1   r;   r>   r   r   r   r   r   "   s6    ùþ
ýüûúù
ør   úutf-8r   Ú
key_to_getr   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   rF   r   r   r   r   Úget_keyu   s   
rG   r*   c                 c   sÔ   � t  | ¡ ¡  tjd|dd��<}d }zt| |d��}||fV  W d   ƒ n1 s*w   Y  W n tyD } z|}W Y d }~nd }~ww W d   ƒ n1 sOw   Y  |d u rat |j	| ¡ d S t
 |j	¡ |d ‚)NÚwF)Úmoder   Údeleter&   )ÚpathlibÚPathÚtouchÚtempfileÚNamedTemporaryFiler,   ÚBaseExceptionÚshutilÚmoveÚnamer)   Úunlink)r*   r   Údestr   ÚsourceÚerrr   r   r   Úrewrite‚   s&   €ÿ€€ÿ€ûrX   ÚalwaysFÚ
key_to_setÚvalue_to_setÚ
quote_modeÚexportc                 C   s  |dvrt d|› �ƒ‚|dkp|dko| ¡  }|r$d | dd¡¡}n|}|r2d|› d	|› d
�}n|› d	|› d
�}t| |d��A\}	}
d}d}tt|	ƒƒD ]}|j|kr\|
 |¡ d}qM|
 |j	j
¡ |j	j
 d
¡ }qM|sz|ru|
 d
¡ |
 |¡ W d  ƒ n1 s„w   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
    )rY   ÚautoÚneverzUnknown quote_mode: rY   r^   z'{}'ú'z\'zexport ú=Ú
r&   FTN)Ú
ValueErrorÚisalnumÚformatÚreplacerX   r   r   r5   Úwriter   ÚstringÚendswith)r   rZ   r[   r\   r]   r   ÚquoteÚ	value_outÚline_outrV   rU   ÚreplacedÚmissing_newliner   r   r   r   Úset_key˜   s6   ÿ



€ó
ro   Úkey_to_unsetc                 C   s¦   t j | ¡st d| ¡ d|fS d}t| |d��"\}}tt|ƒƒD ]}|j|kr+d}q!| 	|j
j¡ q!W d  ƒ n1 s=w   Y  |sOt 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   rX   r   r   r5   rg   r   rh   )r   rp   r\   r   ÚremovedrV   rU   r   r   r   r   Ú	unset_keyÈ   s"   
üÿÿrs   Úvaluesr!   c                    s‚   i }| D ]:\}}|d u rd }n+t |ƒ}i ‰ |r#ˆ  tj¡ ˆ  |¡ nˆ  |¡ ˆ  tj¡ d ‡ fdd„|D ƒ¡}|||< q|S )Nr(   c                 3   s   � | ]}|  ˆ ¡V  qd S r"   )Úresolve)Ú.0Úatom©Úenvr   r   Ú	<genexpr>û   s   € z$resolve_variables.<locals>.<genexpr>)r   Úupdater)   r8   Újoin)rt   r!   Ú
new_valuesrS   r6   ÚresultÚatomsr   rx   r   r2   é   s   

r2   c                 c   s€   � t j | ¡stdƒ‚t j | ¡rt j | ¡} d}t j | ¡}||kr>|V  t j t j |t jj¡¡}||}}||ks#dS dS )zL
    Yield directories starting from the given directory up to the root
    zStarting path not foundN)	r)   r*   rq   ÚIOErrorr+   ÚdirnameÚabspathr|   Úpardir)r*   Úlast_dirÚcurrent_dirÚ
parent_dirr   r   r   Ú_walk_to_root  s   €
ýr‡   r'   ÚfilenameÚraise_error_if_not_foundÚusecwdc                 C   sê   dd„ }dd„ }|s|ƒ s|ƒ st tddƒrt ¡ }n:t ¡ }t}|jj|ks/tj 	|jj¡sG|j
dus6J ‚|j
}|jj|ks/tj 	|jj¡r/|jj}tj tj |¡¡}t|ƒD ]}	tj |	| ¡}
tj |
¡rl|
  S qY|rst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   sP   t tdƒs
t tdƒrdS ztddddgd�} W n
 ty!   Y dS w t | dƒ S )	z<Decide whether this is running in a REPL or IPython notebookÚps1Úps2TÚ__main__NÚ__file__)ÚfromlistF)ÚhasattrÚsysÚ
__import__ÚModuleNotFoundError)Úmainr   r   r   Ú_is_interactive  s   ÿz$find_dotenv.<locals>._is_interactivec                   S   s   t  ¡ d uS r"   )r‘   Úgettracer   r   r   r   Ú_is_debugger)  s   z!find_dotenv.<locals>._is_debuggerÚfrozenFNzFile not foundr(   )Úgetattrr‘   r)   ÚgetcwdÚ	_getframerŽ   Úf_codeÚco_filenamer*   rq   Úf_backr�   r‚   r‡   r|   r+   r€   )rˆ   r‰   rŠ   r•   r—   r*   ÚframeÚcurrent_fileÚframe_filenamer�   Ú
check_pathr   r   r   Úfind_dotenv  s0   

ÿüÿÿr£   Tr   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 with it's default parameters. If you need to change the default parameters
    of `find_dotenv()`, you can explicitly call `find_dotenv()` and pass the result
    to this function as `dotenv_path`.
    N©r   r   r   r    r!   r   )r£   r   r;   )r   r   r   r!   r    r   Údotenvr   r   r   Úload_dotenvG  s   ú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   r4   )r   r   r   r    r   r   r   r   Údotenv_valueso  s   úùr§   )rE   )rY   FrE   )rY   rE   )r'   FF)NNFFTrE   )NNFTrE   )*r.   Úloggingr)   rK   rQ   r‘   rN   Úcollectionsr   Ú
contextlibr   Útypingr   r   r   r   r   r	   r
   r   Úparserr   r   Ú	variablesr   rC   rB   Ú	getLoggerr?   r   r   r   rG   rX   rD   ro   rs   r2   r‡   r£   r¦   r§   r   r   r   r   Ú<module>   sø    (

Výÿþý
üÿþýúÿþýüûú
ù3üÿþýü
û!ÿþ
ýýÿþý
ü4úÿ
þýüûú
ù)ûÿ
þýüûú