U
    ]1                     @   s   d dl mZ 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
Z
d dlZd dlZddlmZ ze W n ek
r   eZY nX dddZd	d
 Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd ZdS )     )absolute_import)division)unicode_literalsN   IS_WINDOWS_PLATFORMc                 C   sL   t |   }|dks |dkr$dS |dks4|dkr8dS |dkrD|S dS dS )	z
    Prompt the user for a yes or no.

    Can optionally specify a default value, which will only be
    used if they enter a blank line.

    Unrecognised input (anything other than "y", "n", "yes",
    "no" or "") will return None.
    yZyesTnZnoF N)inputstriplower)promptdefaultZanswer r   3/usr/lib/python3/dist-packages/compose/cli/utils.pyyesno   s    
r   c                 C   s&   t j|  t j  t j dS )z
    Version of input (raw_input in Python 2) which forces a flush of sys.stdout
    to avoid problems where the prompt fails to appear due to line buffering
    
)sysstdoutwriteflushstdinreadlinerstrip)r   r   r   r   r   0   s    
r   c               
   O   sb   t tjdL}z$tj| ||d|W W  5 Q R  S  tk
rR   Y W 5 Q R  dS X W 5 Q R X dS )zO
    Like subprocess.call(), but redirects stdout and stderr to /dev/null.
    w)r   stderr   N)openosdevnull
subprocesscallWindowsError)argskwargsZshutupr   r   r   call_silently:   s
    $r&   c                   C   s   t  dkS )NZDarwin)platformsystemr   r   r   r   is_macG   s    r)   c                   C   s   t  dkot  d dkS )NZLinuxr   ZUbuntu)r'   r(   Zlinux_distributionr   r   r   r   	is_ubuntuK   s    r*   c                   C   s   t S )Nr   r   r   r   r   
is_windowsO   s    r+   c                 C   sT   d tjt }| dkr|S | dkrBd |tjt t t	j
S td | d S )Nz#docker-compose version {}, build {}composeZfullz;{}
docker-py version: {}
{} version: {}
OpenSSL version: {}z{} is not a valid version scope)formatr,   __version__get_build_versiondockerversionr'   Zpython_implementationZpython_versionsslZOPENSSL_VERSION
ValueError)ZscopeZversioninfor   r   r   get_version_infoS   s     r4   c               
   C   sT   t jt jtjd} t j| s(dS t| }| 	 W  5 Q R  S Q R X d S )NZGITSHAunknown)
r   pathjoindirnamer,   __file__existsr   readr   )filenameZfhr   r   r   r/   j   s
    
r/   c                   C   s   t  otjdS )Nz/Applications/Docker.app)r)   r   r6   isdirr   r   r   r   is_docker_for_mac_installeds   s    r>   c                  C   s^   d tjd tjg} zt }t }W n tk
r@   Y nX | d || d	| S )Nzdocker-compose/{}zdocker-py/{}z{}/{} )
r-   r,   r.   r0   r'   r(   releaseIOErrorappendr7   )partsZp_systemZ	p_releaser   r   r   generate_user_agentw   s    

rD   c                 C   s`   dddddddg}| r&t t| dnd	}|t|krBt|d
 }d| td|d  || S )NBZkBZMBZGBZTBZPBZEBi  r   r   z{0:.4g} {1}
      )intmathloglenr-   pow)sizesuffixesorderr   r   r   human_readable_file_size   s    rP   c                 C   sB   t | tjs| S tr6z| dW S  tk
r4   Y nX | ddS )Nzwindows-1250zutf-8replace)
isinstancesixZbinary_typer   decodeUnicodeDecodeError)sr   r   r   binarystr_to_unicode   s    rW   )N)Z
__future__r   r   r   rI   r   r'   r2   r!   r   r0   rS   r,   Zconstr   r#   	NameErrorOSErrorr   r   r&   r)   r*   r+   r4   r/   r>   rD   rP   rW   r   r   r   r   <module>   s8   


	