o
    S`                     @   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 r| dd\}}n| }td|r+t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/dist-packages/compose/config/environment.py	split_env   s   
r   Tc                 C   sr   t j| std| t j| std| tj| d|d}| D ]\}}|r.|n|	dd||< q&|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)dotenv_pathencodinginterpolate$z$$)
ospathexistsr   r   isfiledotenv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                     sf    }  d u r	| S rt jt  }t|S t j d}zt|W S  ty2   Y | S w )Nz.env)r   r   joingetcwdr$   r   )resultenv_file_pathbase_dirclsenv_filer   r   _initialize4   s   z.Environment.from_env_file.<locals>._initialize)updater   environ)r5   r4   r6   r7   instancer   r3   r   from_env_file2   s   zEnvironment.from_env_filec                 C   sF   |  }|  D ]\}}|d u r|tjv rtj| ||< q|||< q|S N)r    r   r9   )r5   parsed_env_optsr1   r"   r#   r   r   r   from_command_lineG   s   
zEnvironment.from_command_linec                    s~   zt  |W S  ty>   tr%zt  | W  Y S  ty$   Y nw | js;|| jvr;td	| | j
| Y dS w )Nz9The {} variable is not set. Defaulting to a blank string. )r&   __getitem__KeyErrorr   upperr)   r(   logwarningr   append)r*   r   r-   r   r   r@   S   s"   zEnvironment.__getitem__c                    s(   t  |}tr|pt  | S |S r<   )r&   __contains__r   rB   )r*   r   r1   r-   r   r   rF   e   s
   zEnvironment.__contains__c                    sF   t rt |t j| g|R i |S t j|g|R i |S r<   )r   r&   getrB   )r*   r   r+   r,   r-   r   r   rG   m   s   zEnvironment.getFc                 C   s&   |  |}|s	|S | dv rdS dS )N)0falseFT)rG   lower)r*   r   defaultr   r   r   r   get_booleanu   s   
zEnvironment.get_booleanr<   )F)__name__
__module____qualname__r'   classmethodr;   r>   r@   rF   rG   rL   __classcell__r   r   r-   r   r%   ,   s    
r%   )T)loggingr   r   r   constr   errorsr   r   	getLoggerrM   rC   r   r$   dictr%   r   r   r   r   <module>   s    

