U
    ]                     @   s   d dl mZ d dl m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 eeZd	d
 Zdd ZG dd deZdS )    )absolute_import)unicode_literalsN   )IS_WINDOWS_PLATFORM   )ConfigurationError)EnvFileNotFoundc                 C   s`   t | tjr| dd} d  }}d| kr:| dd\}}n| }td|rXtd|||fS )Nzutf-8replace=r   z\sz:environment variable name '{}' may not contain whitespace.)	
isinstancesixZbinary_typedecodesplitresearchr   format)envkeyvalue r   </usr/lib/python3/dist-packages/compose/config/environment.py	split_env   s    r   c                 C   s   t j| std| nt j| s6td| i }tt	| ddt}|D ]h}|
 }|rT|dsTzt|\}}|||< W qT tk
r } ztd| |jW 5 d}~X Y qTX qTW 5 Q R X |S )zA
    Read in a line delimited file of environment variables.
    zCouldn't find env file: {}z{} is not a file.rz	utf-8-sig#zIn file {}: {}N)ospathexistsr   r   isfile
contextlibclosingcodecsopenstrip
startswithr   r   msg)filenamer   Zfileobjlinekver   r   r   env_vars_from_file"   s    0r*   c                       sb   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 Z
  ZS )Environmentc                    s"   t t| j|| g | _d| _d S )NF)superr+   __init__missing_keyssilent)selfargskwargs	__class__r   r   r-   8   s    zEnvironment.__init__Nc                    s&    fdd}| }| tj |S )Nc                     s\    }  d kr| S r&t j }nt j d}zt|W S  tk
rV   Y nX | S )Nz.env)r   r   joinr*   r   )resultZenv_file_pathbase_dirclsenv_filer   r   _initialize?   s    z.Environment.from_env_file.<locals>._initialize)updater   environ)r9   r8   r:   r;   instancer   r7   r   from_env_file=   s    zEnvironment.from_env_filec                 C   sF   |  }|  D ]2\}}|d kr8|tjkr8tj| ||< q|||< q|S N)itemsr   r=   )r9   Zparsed_env_optsr6   r'   r(   r   r   r   from_command_lineQ   s    
zEnvironment.from_command_linec                    s   zt t| |W S  tk
r   trVzt t| | W  Y S  tk
rT   Y nX | js|| jkrt	d
| | j| Y dS X d S )Nz9The {} variable is not set. Defaulting to a blank string. )r,   r+   __getitem__KeyErrorr   upperr/   r.   logZwarningr   append)r0   r   r3   r   r   rD   ]   s     zEnvironment.__getitem__c                    s0   t t| |}tr,|p*t t| | S |S r@   )r,   r+   __contains__r   rF   )r0   r   r6   r3   r   r   rI   o   s
    zEnvironment.__contains__c                    sF   t r.tt| |tt| j| f||S tt| j|f||S r@   )r   r,   r+   getrF   )r0   r   r1   r2   r3   r   r   rJ   w   s    
zEnvironment.getc                 C   s&   |  |}|sdS | dkr"dS dS )NF)0ZfalseT)rJ   lower)r0   r   r   r   r   r   get_boolean   s    
zEnvironment.get_boolean)N)__name__
__module____qualname__r-   classmethodr?   rB   rD   rI   rJ   rM   __classcell__r   r   r3   r   r+   7   s   
r+   )Z
__future__r   r   r    r   Zloggingr   r   r   Zconstr   errorsr   r   Z	getLoggerrN   rG   r   r*   dictr+   r   r   r   r   <module>   s   
