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mZ ddlm	Z	 ddlm
Z
 dd	lmZ dd
lmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ eeZddddddddddddhZi fd d!Zd"d# Zi fd$d%Z d&d' Z!d4d)d*Z"d5d,d-Z#d.d/ Z$d0d1 Z%d6d2d3Z&dS )7    )absolute_import)unicode_literalsN   )errors)verbose_proxy   )config)parallel)Environment)API_VERSIONS)LABEL_CONFIG_FILES)LABEL_ENVIRONMENT_FILE)LABEL_WORKING_DIR)Project)docker_client)get_tls_version)tls_config_from_options)get_version_infoZeventsexeckillZlogspauseZpsZrestartZrmstartstoptopZunpausec                 C   s   | d}| d}t|p| |}| dd tk|_t| | d}|d k	rZ|d}t| t| ||| d| d|t	||||| d| d	 |d
S )N--project-directory
--env-fileZCOMMANDz--host=z--project-namez	--verbose--compatibility--no-interpolate)	project_nameverbosehost
tls_configenvironmentoverride_dircompatibilityinterpolateenvironment_file)
getr
   from_env_fileSILENT_COMMANDSZsilentset_parallel_limitlstripget_projectget_config_path_from_optionsr   )project_diroptionsadditional_optionsr$   r'   r#   r!    r2   5/usr/lib/python3/dist-packages/compose/cli/command.pyproject_from_options+   s*    





r4   c              
   C   sh   |  d}|rdzt|}W n* tk
rD   td|  dY nX |dkrXtdtj| d S )NZCOMPOSE_PARALLEL_LIMITz7COMPOSE_PARALLEL_LIMIT must be an integer (found: "{}")r   z-COMPOSE_PARALLEL_LIMIT can not be less than 2)	r(   int
ValueErrorr   Z	UserErrorformatr	   ZGlobalLimitZset_global_limit)r#   Zparallel_limitr2   r2   r3   r+   D   s    


r+   c                 C   sX   | d}| d}t|p| |}t| ||}tt| |||| d| d S )Nr   r   r   r   )r(   r
   r)   r.   r   loadfind)base_dirr0   r1   r$   r'   r#   config_pathr2   r2   r3   get_config_from_optionsT   s    

  
r<   c                 C   sL   dd }| d}|r||S | d}|rH| dtj}|||S d S )Nc                 S   s   dd | D S )Nc                 S   s&   g | ]}t |tjr|d n|qS )zutf-8)
isinstancesixZbinary_typedecode).0pr2   r2   r3   
<listcomp>d   s     zGget_config_path_from_options.<locals>.unicode_paths.<locals>.<listcomp>r2   )pathsr2   r2   r3   unicode_pathsc   s    z3get_config_path_from_options.<locals>.unicode_pathsz--fileZCOMPOSE_FILEZCOMPOSE_PATH_SEPARATOR)r(   ospathsepsplit)r:   r0   r#   rD   Zfile_optionconfig_filesrF   r2   r2   r3   r.   b   s    

r.   Fc                 C   sp   t |||| t| d}|rlt| }ttd td|j tdd	dd |D  t
d|S |S )	N)versionr"   r!   r#   tls_versionZfullzDocker base_url: %szDocker version: %sz, c                 s   s   | ]}d | V  qdS )z%s=%sNr2   )r@   itemr2   r2   r3   	<genexpr>}   s     zget_client.<locals>.<genexpr>Zdocker)r   r   r>   Z	iteritemsrI   loginfor   Zbase_urljoinr   ZVerboseProxy)r#   r    rI   r"   r!   rJ   clientversion_infor2   r2   r3   
get_clientq   s        rR   Tc              
   C   s   |st | }t| |||}t|j||}t|||	}|dt|j	 }t
|||||d}t|, t||||dt||
W  5 Q R  S Q R X d S )NZCOMPOSE_API_VERSION)r    rI   r"   r!   r#   ZDOCKER_DEFAULT_PLATFORM)r
   r)   r   r9   get_project_nameworking_dirr8   r(   r   rI   rR   r   Zhandle_connection_errorsr   Zfrom_configexecution_context_labels)r/   r;   r   r    r!   r"   r#   r$   r%   r&   r'   config_detailsZconfig_dataapi_versionrP   r2   r2   r3   r-      s8    
     r-   c                 C   sL   d ttj| jd tt| g}|d k	rH|d t	tj
| |S )Nz{0}={1})r7   r   rE   pathabspathrT   r   config_files_labelappendr   normpath)rV   r'   Zextra_labelsr2   r2   r3   rU      s    

rU   c                 C   s   d ttdd | jD S )N,c                 s   s   | ]}t j|jV  qd S )N)rE   rX   r\   filename)r@   cr2   r2   r3   rL      s     z%config_files_label.<locals>.<genexpr>)rO   mapstrrH   )rV   r2   r2   r3   rZ      s    rZ   c                 C   sT   dd }|st | }|p"|d}|r0||S tjtj| }|rP||S dS )Nc                 S   s   t dd|  S )Nz[^-_a-z0-9] )resublower)namer2   r2   r3   normalize_name   s    z(get_project_name.<locals>.normalize_nameZCOMPOSE_PROJECT_NAMEdefault)r
   r)   r(   rE   rX   basenamerY   )rT   r   r#   rg   projectr2   r2   r3   rS      s    
rS   )FNNNN)
NNFNNNNFTN)NN)'Z
__future__r   r   ZloggingrE   rc   r>   rb   r   r   r   r	   Zconfig.environmentr
   Zconstr   r   r   r   rj   r   r   r   r   Zutilsr   Z	getLogger__name__rM   r*   r4   r+   r<   r.   rR   r-   rU   rZ   rS   r2   r2   r2   r3   <module>   sh   
  
             
