o
    S™`ì  ã                   @   s  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„ Zdd„ Zd!dd„Z d"dd„Z!dd„ Z"d!dd„Z#d#dd „Z$dS )$é    N)Ú	APIClient)ÚContext)Ú
ContextAPI)Ú	TLSConfig)ÚTLSParameterError)Úkwargs_from_env)Úhome_diré   )Úverbose_proxyé   )ÚEnvironment)ÚHTTP_TIMEOUT)Úunquote_path)Ú	UserError)Úgenerate_user_agent)Úget_version_infoc                   C   s   t j tƒ d¡S )Nz.docker)ÚosÚpathÚjoinr   © r   r   ú;/usr/lib/python3/dist-packages/compose/cli/docker_client.pyÚdefault_cert_path   s   r   c                 C   s@   t ||ƒ}td| |r|jndd}|r|jd| ||j d |S )NÚcomposeF©ÚhostÚtlsÚdocker)Úskip_tls_verify)Útls_config_from_optionsr   ÚverifyÚset_endpoint)r   ÚoptionsÚenvironmentr   Úctxr   r   r   Úmake_context   s
   
r$   c                 C   s
   t  | ¡S ©N)r   Úget_context)Únamer   r   r   Úload_context$   s   
r(   Fc                 C   sl   t ||| t| ƒd}|r4| ¡  ¡ }t tdƒ¡ t d|j¡ t dd dd„ |D ƒ¡¡ t	 
d|¡S |S )	N)ÚversionÚcontextr"   Útls_versionÚfullzDocker base_url: %szDocker version: %sz, c                 s   s    | ]}d | V  qdS )z%s=%sNr   )Ú.0Úitemr   r   r   Ú	<genexpr>2   s   € zget_client.<locals>.<genexpr>r   )Údocker_clientÚget_tls_versionr)   ÚitemsÚlogÚinfor   Úbase_urlr   r
   ÚVerboseProxy)r"   Úverboser)   r*   ÚclientÚversion_infor   r   r   Ú
get_client(   s   þÿr:   c                 C   sF   |   dd ¡}|s
d S d |¡}tt|ƒst d |¡¡ d S tt|ƒS )NÚCOMPOSE_TLS_VERSIONzPROTOCOL_{}z|The "{}" protocol is unavailable. You may need to update your version of Python or OpenSSL. Falling back to TLSv1 (default).)ÚgetÚformatÚhasattrÚsslr3   ÚwarningÚgetattr)r"   Úcompose_tls_versionÚtls_attr_namer   r   r   r1   7   s   

ý
r1   c                 C   sV  |pt ƒ }| d¡pd }|  dd¡}t|  d¡ƒ}t|  d¡ƒ}t|  d¡ƒ}|  d¡p0| d¡}|  d	d¡}|d urWt|||fƒsWtj |d
¡}tj |d¡}tj |d¡}|rxt|||fƒsxtj tƒ d¡}tj tƒ d
¡}tj tƒ d¡}t	|ƒ}	t|||||	gƒ}
|du r|
sdS |
r©d }|s•|r™||f}t
||||r¤d|	dS d |	dS d S )NÚDOCKER_CERT_PATHz--tlsFz--tlscacertz	--tlscertz--tlskeyz--tlsverifyÚDOCKER_TLS_VERIFYz--skip-hostname-checkzcert.pemzkey.pemzca.pemT)Úclient_certr   Úca_certÚassert_hostnameÚssl_version)r   r<   r   Úget_booleanÚanyr   r   r   r   r1   r   )r!   r"   Ú	cert_pathr   rG   ÚcertÚkeyr   Úskip_hostname_checkr+   Úadvanced_optsrF   r   r   r   r   H   sB   
ýýr   c                 C   s8  zt | |d}W n ty   tdƒ‚w |sC| dd¡}| dd¡}|s&dn|j}|r3td||d}nt ¡ }|rC|jd	||| d
 | 	¡ sKtdƒ‚|j
|d< |jrX|j|d< |r^||d< |  d¡}|rlt|ƒ|d< nt|d< tƒ |d< d| v r‚d|  d¡i|d< t|  dd¡ƒ}	tdd|	 i|¤Ž}
| d¡|
_|
S )zŠ
    Returns a docker-py client configured using environment variables
    according to the same logic as the official Docker client.
    )r"   rI   z¤TLS configuration is invalid - make sure your DOCKER_TLS_VERIFY and DOCKER_CERT_PATH are set correctly.
You might need to run `eval "$(docker-machine env default)"`r5   Nr   Fr   r   r   )r   Útls_cfgr   zwThe platform targeted with the current context is not supported.
Make sure the context in use targets a Docker Engine.
r)   ÚCOMPOSE_HTTP_TIMEOUTÚtimeoutÚ
user_agentÚLD_LIBRARY_PATH_ORIGÚLD_LIBRARY_PATHÚcredstore_envÚCOMPOSE_PARAMIKO_SSHr   Úuse_ssh_clientr   )r   r   r   r<   r   r   r   Úget_current_contextr    Úis_docker_hostÚHostr   Úintr   r   r   Ú_original_base_url)r"   r)   r*   r+   Úkwargsr   r   r   rS   Úuse_paramiko_sshr8   r   r   r   r0   v   sJ   ÿÿÿ




ÿr0   r%   )FNN)NNN)%ÚloggingÚos.pathr   r?   r   r   r   r   r   Údocker.errorsr   Údocker.utilsr   Údocker.utils.configr   Ú r
   Úconfig.environmentr   Úconstr   Úutilsr   Úerrorsr   r   r   Ú	getLoggerÚ__name__r3   r   r$   r(   r:   r1   r   r0   r   r   r   r   Ú<module>   s2    



.