
    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 j6                  e      Zd Zd ZddZ ddZ!d Z"ddZ#ddZ$y)    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                  R    t         j                  j                  t               d      S )Nz.docker)ospathjoinr	        ;/usr/lib/python3/dist-packages/compose/cli/docker_client.pydefault_cert_pathr      s    77<<
I..r   c                     t        ||      }t        d| |r|j                  nd      }|r |j                  d| ||j                          |S )NcomposeFhosttlsdocker)skip_tls_verify)tls_config_from_optionsr   verifyset_endpoint)r   optionsenvironmentr   ctxs        r   make_contextr(      sI    
!';
7C
)$#CJJ5
IC
4#**nMJr   c                 ,    t        j                  |       S N)r   get_context)names    r   load_contextr-   $   s    !!$''r   c                 v   t        ||| t        |             }|r|j                         j                         }t        j                  t        d             t        j                  d|j                         t        j                  ddj                  d |D                     t        j                  d|      S |S )N)versioncontextr&   tls_versionfullzDocker base_url: %szDocker version: %sz, c              3   &   K   | ]	  }d |z    yw)z%s=%sNr   ).0items     r   	<genexpr>zget_client.<locals>.<genexpr>2   s     Cd7T>Cs   r    )docker_clientget_tls_versionr/   itemsloginfor   base_urlr   r   VerboseProxy)r&   verboser/   r0   clientversion_infos         r   
get_clientrA   (   s    _[-IF ~~'--/!&)*&8%ClCC	E))(F;;Mr   c                     | j                  dd       }|sy dj                  |      }t        t        |      s%t        j                  dj                  |             y 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sslr:   warninggetattr)r&   compose_tls_versiontls_attr_names      r   r8   r8   7   sd    %//*?F!(()<=M3&MV'(	

 3&&r   c                    |xs
 t               }|j                  d      xs d }| j                  dd      }t        | j                  d            }t        | j                  d            }t        | j                  d            }| j                  d      xs |j                  d      }| j                  d	d      }|nt	        |||f      s`t
        j                  j                  |d
      }t
        j                  j                  |d      }t
        j                  j                  |d      }|rt	        |||f      sxt
        j                  j                  t               d      }t
        j                  j                  t               d
      }t
        j                  j                  t               d      }t        |      }	t	        |||||	g      }
|du r|
sy|
r$d }|s|r||f}t        ||||rd|	      S d |	      S y )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   rD   r   get_booleananyr   r   r   r   r8   r   )r%   r&   	cert_pathr   rP   certkeyr#   skip_hostname_checkr1   advanced_optsrO   s               r   r"   r"   H   s   .K 23;tI
++gu
%C7;;}56GK01D
w{{:.
/C [['W;+B+BCV+WF!++&=uES'4)=%>ww||Iz2ggll9i0'',,y(3c7D#./'',,02H=ww||-/<ggll,.	:!+.K$V[ABM
d{=	3+K#FG%8E#
 	
>B#
 	
 r   c                    	 t        | |      }|sq|j                  dd      }|j                  dd      }|sdn|j                  }|rt        d||      }nt        j                         }|r|j                  d	||| 
       |j                         st        d      |j                  |d<   |j                  r|j                  |d<   |r||d<   | j                  d      }|rt        |      |d<   n	t        |d<   t               |d<   d| v rd| j                  d      i|d<   t        | j                  dd            }	t        dd|	 i|}
|j                  d      |
_        |
S # t        $ r t        d      w xY w)z
    Returns a docker-py client configured using environment variables
    according to the same logic as the official Docker client.
    )r&   rR   zTLS 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)"`r<   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   rD   r#   r   r   get_current_contextr$   is_docker_hostHostr   intr   r   r   _original_base_url)r&   r/   r0   r1   kwargsr   r   r#   r]   use_paramiko_sshr?   s              r   r7   r7   v   s   
N [kR zz*d+jj%!szzid?G 446G  cW]S] ^!!#FG 	G !F:))u#yoo45GLy(y.0F< ,{/EF#
 ;??+A1EFE*:&:EfEF &

: 6FMa  NMN 	NNs   E! !E6r*   )FNN)NNN)%loggingos.pathr   rG   r    r   r   r   r   docker.errorsr   docker.utilsr   docker.utils.configr	    r   config.environmentr   constr   utilsr   errorsr   r   r   	getLogger__name__r:   r   r(   r-   rA   r8   r"   r7   r   r   r   <module>rw      sn      
     + ( (  ,      & #g!/('"+\7r   