o
    Nrf                     @   sb   d dl Z d dlZd dlmZmZ d dlmZ d dlmZ ddl	m
Z
mZmZmZ G dd dZdS )	    N)copyfilermtree)ContextException)	TLSConfig   )get_context_hostget_meta_dirget_meta_fileget_tls_dirc                   @   s   e Zd ZdZ		d+ddZ		d,ddZd	d
 Zedd Zedd Z	dd Z
dd Zdd Zdd Zdd Zdd Zdd Zedd Zedd  Zed!d" Zed#d$ Zed%d& Zed'd( Zed)d* ZdS )-Contextz
A context.NFc           	      C   s   |st d|| _d | _|| _i | _i | _d| _d| _|s5|r#|dkr%dn|}|t||| di| _d S |	 D ]9\}}t
|tsLtd| d| || j|< |dkrVq9|dt||| j| d< t|d	| | j| d	< q9d S )
NzName not providedz	IN MEMORYswarmdockerHostSkipTLSVerifyz$Unknown endpoint format for context z: r   r   )	Exceptionnamecontext_typeorchestrator	endpointstls_cfg	meta_pathtls_pathr   items
isinstancedictr   getbool)	selfr   r   hostr   tlsZdefault_endpointkv r#   _/var/www/html/software/conda/envs/catlas/lib/python3.10/site-packages/docker/context/context.py__init__   sJ   

zContext.__init__r   c                 C   s@   t || |d| j|< |r|| j| d< |r|| j|< d S d S )Nr   ZDefaultNamespace)r   r   r   )r   r   r   r   Zskip_tls_verifyZdef_namespacer#   r#   r$   set_endpoint>   s   
zContext.set_endpointc                 C   s   |   S N)__call__r   r#   r#   r$   inspectK   s   zContext.inspectc                 C   s`   t |}|r.| |d |d dd |dd d}|d dd |_|  t||_|S d S )NNameMetadataStackOrchestrator	Endpoints)r   r   Type)r   
_load_metar   r   _load_certsr   r   )clsr   metainstancer#   r#   r$   load_contextN   s   


zContext.load_contextc              
   C   s   t |}tj|sd S i }zt|}t|}W d    n1 s#w   Y  W n ttt	fyC } zt
d| d| |d }~ww |d  D ]&\}}|dkrSqJ|dtd d|d | d< t|dd|d | d< qJ|S )	Nz)Detected corrupted meta file for context z : r.   r   r   Fr   T)r	   ospathisfileopenjsonloadOSErrorKeyError
ValueErrorr   r   r   r   r   )r2   r   Z	meta_filemetadatafer!   r"   r#   r#   r$   r0   \   s6   


zContext._load_metac           	      C   s  i }t | j}| j D ]m}tjtj||sqd }d }d }ttj||D ]+}|	dr:tj|||}q*|	drHtj|||}q*|	drUtj|||}q*t
|||gryd }|dkrn| jd ddsnd}t||f||d||< q|| _|| _d S )	Ncacertkeyr   r   FT)client_certca_certverify)r
   r   r   keysr6   r7   isdirjoinlistdir
startswithallr   r   r   r   )	r   certstls_direndpointrF   rC   rD   filenamerG   r#   r#   r$   r1   x   s8   






zContext._load_certsc           	   
   C   s:  t | j}tj|st| tt| jd}|t	
| j W d    n1 s,w   Y  t| j}| j D ]S\}}tjtj||sTttj|| |j}|rht|tj||tj| |jr|j\}}t|tj||tj| t|tj||tj| q;t | j| _t| j| _d S )Nw)r   r   r6   r7   rI   makedirsr9   r	   writer:   dumpsr,   r
   r   r   rJ   rF   r   basenamerC   r   r   )	r   Zmeta_dirr@   rO   rP   r    Zca_file	cert_filekey_filer#   r#   r$   save   s4   






zContext.savec                 C   s8   t j| jrt| j t j| jrt| j d S d S r'   )r6   r7   rI   r   r   r   r)   r#   r#   r$   remove   s
   
zContext.removec                 C   s   d| j j d| j dS )N<z: 'z'>)	__class____name__r   r)   r#   r#   r$   __repr__   s   zContext.__repr__c                 C   s   t j|  ddS )N   )indent)r:   rU   r(   r)   r#   r#   r$   __str__   s   zContext.__str__c                 C   s"   | j }|| j || j |S r'   )r,   updateTLSMaterialStorage)r   resultr#   r#   r$   r(      s   zContext.__call__c                 C   s
   | j d u S r'   )r   r)   r#   r#   r$   is_docker_host   s   
zContext.is_docker_hostc                 C      | j S r'   )r   r)   r#   r#   r$   r+         zContext.Namec                 C   sF   | j r| j dkr| jdd }|r|dd S d S | j| j  dd S )Nr   r   r   )r   r   r   )r   rP   r#   r#   r$   r      s   zContext.Hostc                 C   rg   r'   )r   r)   r#   r#   r$   Orchestrator   rh   zContext.Orchestratorc                 C   s$   i }| j r
d| j i}| j|| jdS )Nr-   )r+   r,   r.   )r   r   r   )r   r3   r#   r#   r$   r,      s   
zContext.Metadatac                 C   s2   | j }|r	|dkrd}|| j v r| j| S d S )Nr   r   )r   r   rH   )r   rD   r#   r#   r$   r      s   
zContext.TLSConfigc                 C   sH   i }| j  D ]\}}|j\}}tttjj|j||g||< qd|iS )Nrc   )	r   r   rC   listmapr6   r7   rV   rF   )r   rN   rP   r    rC   rD   r#   r#   r$   rc      s   

zContext.TLSMaterialc                 C   s   d| j | jdiS )Nrd   )ZMetadataPathZTLSPath)r   r   r)   r#   r#   r$   rd      s
   zContext.Storage)NNNF)r   NNFN)r]   
__module____qualname____doc__r%   r&   r*   classmethodr5   r0   r1   rY   rZ   r^   ra   r(   rf   propertyr+   r   ri   r,   r   rc   rd   r#   r#   r#   r$   r      sD    
,




	





r   )r:   r6   shutilr   r   Zdocker.errorsr   Z
docker.tlsr   configr   r   r	   r
   r   r#   r#   r#   r$   <module>   s    