o
    S`                     @   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Zd dlZddl	m
Z
 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 )    N   IS_WINDOWS_PLATFORMc                 C   sH   t |   }|dks|dkrdS |dks|dkrdS |dkr"|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.
    yyesTnnoF N)inputstriplower)promptdefault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
   %   s   
r
   c               	   O   sj   t tjd%}ztj| ||d|W W  d   S  ty*   Y W d   dS w 1 s.w   Y  dS )zO
    Like subprocess.call(), but redirects stdout and stderr to /dev/null.
    w)r   stderrN   )openosdevnull
subprocesscallOSError)argskwargsshutupr   r   r   call_silently/   s   r'   c                   C   s   t  dkS )NDarwin)platformsystemr   r   r   r   is_mac<   s   r+   c                   C   s   t  dkot d dkS )NLinuxr   Ubuntu)r)   r*   distrolinux_distributionr   r   r   r   	is_ubuntu@   s   r0   c                   C   s   t S Nr   r   r   r   r   
is_windowsD   s   r2   c                 C   sP   d tjt }| dkr|S | dkr!d |tjt t t	j
S td | )Nz#docker-compose version {}, build {}composefullz;{}
docker-py version: {}
{} version: {}
OpenSSL version: {}z{} is not a valid version scope)formatr3   __version__get_build_versiondockerversionr)   python_implementationpython_versionsslOPENSSL_VERSION
ValueError)scopeversioninfor   r   r   get_version_infoH   s"   rA   c                  C   s`   t jt jtjd} t j| sdS t| }| 	 W  d    S 1 s)w   Y  d S )NGITSHAunknown)
r   pathjoindirnamer3   __file__existsr   readr   )filenamefhr   r   r   r7   _   s   

$r7   c                   C   s   t  otjdS )Nz/Applications/Docker.app)r+   r   rD   isdirr   r   r   r   is_docker_for_mac_installedh   s   rM   c                  C   s\   d tjd tjg} z
t }t }W n	 ty   Y n
w | d || d	| S )Nzdocker-compose/{}zdocker-py/{}z{}/{} )
r5   r3   r6   r8   r)   r*   releaser#   appendrE   )partsp_system	p_releaser   r   r   generate_user_agentl   s   


rT   c                 C   sV   g d}| rt t| dnd}|t|krt|d }d| td|d  || S )N)BkBMBGBTBPBEBi  r   r   z	{:.4g} {}
      )intmathloglenr5   pow)sizesuffixesorderr   r   r   human_readable_file_size{   s   rf   c                 C   s>   t | ts| S trz| dW S  ty   Y nw | ddS )Nzwindows-1250zutf-8replace)
isinstancebytesr   decodeUnicodeDecodeError)sr   r   r   binarystr_to_unicode   s   
rm   r1   )r_   r   r)   r<   r!   r   r.   r8   r3   constr   r   r
   r'   r+   r0   r2   rA   r7   rM   rT   rf   rm   r   r   r   r   <module>   s,    

	