a
   R-`                   @   st   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 e 	e
Zdd Zdd
dZG dd deZdS )    N   )IS_WINDOWS_PLATFORM   )ConfigurationError)EnvFileNotFoundc                 C   s^   t | tr| dd} d  }}d| v r8| dd\}}n| }td|rVtd|||fS )Nzutf-8replace=r   z\sz:environment variable name '{}' may not contain whitespace.)
isinstancebytesdecodesplitresearchr   format)envkeyvalue r   >/usr/lib/python3.9/site-packages/compose/config/environment.py	split_env   s    
r   Tc                 C   st   t j| std| nt j| s6td| tj| d|d}| D ] \}}|r^|n
|	dd||< qN|S )zA
    Read in a line delimited file of environment variables.
    zCouldn't find env file: {}z{} is not a file.z	utf-8-sig)Zdotenv_pathencodinginterpolate$z$$)
ospathexistsr   r   isfiledotenvZdotenv_valuesitemsr   )filenamer   r   kvr   r   r   env_vars_from_file   s    r"   c                       sd   e Zd Z fddZedddZedd Z fdd	Z fd
dZ fddZ	dddZ
  ZS )Environmentc                    s"   t  j|i | g | _d| _d S )NF)super__init__missing_keyssilent)selfargskwargs	__class__r   r   r%   -   s    zEnvironment.__init__Nc                    s&    fdd}| }| tj |S )Nc                     sZ    }  d u r| S r&t j }nt j d}zt|W S  tyT   Y n0 | S )Nz.env)r   r   joinr"   r   )resultZenv_file_pathbase_dirclsenv_filer   r   _initialize4   s    z.Environment.from_env_file.<locals>._initialize)updater   environ)r1   r0   r2   r3   instancer   r/   r   from_env_file2   s    zEnvironment.from_env_filec                 C   sF   |  }|  D ]2\}}|d u r8|tjv r8tj| ||< q|||< q|S N)r   r   r5   )r1   Zparsed_env_optsr.   r    r!   r   r   r   from_command_lineF   s    
zEnvironment.from_command_linec                    s   zt  |W S  ty|   trJzt  | W  Y S  tyH   Y n0 | jsv|| jvrvtd	| | j
| Y dS 0 d S )Nz9The {} variable is not set. Defaulting to a blank string. )r$   __getitem__KeyErrorr   upperr'   r&   logZwarningr   append)r(   r   r+   r   r   r;   R   s     zEnvironment.__getitem__c                    s(   t  |}tr$|p"t  | S |S r8   )r$   __contains__r   r=   )r(   r   r.   r+   r   r   r@   d   s
    zEnvironment.__contains__c                    sF   t r,t |t j| g|R i |S t j|g|R i |S r8   )r   r$   getr=   )r(   r   r)   r*   r+   r   r   rA   l   s    zEnvironment.getFc                 C   s&   |  |}|s|S | dv r"dS dS )N)0ZfalseFT)rA   lower)r(   r   defaultr   r   r   r   get_booleant   s    
zEnvironment.get_boolean)N)F)__name__
__module____qualname__r%   classmethodr7   r9   r;   r@   rA   rE   __classcell__r   r   r+   r   r#   ,   s   
r#   )T)Zloggingr   r   r   constr   errorsr   r   Z	getLoggerrF   r>   r   r"   dictr#   r   r   r   r   <module>   s   

