
                             S SK r S SKrS SKJrJr  S SKJr  S SKJr  S SK	J
r
  S SK	Jr  S SK	Jr  S SK	Jr   " S	 S
5      rg)    N)copyfilermtree)	TLSConfig)ContextException)get_meta_dir)get_meta_file)get_tls_dir)get_context_hostc                       \ rS rSrSr  SS jr  SS jrS r\S 5       r	\S 5       r
S	 rS
 rS rS rS rS rS r\S 5       r\S 5       r\S 5       r\S 5       r\S 5       r\S 5       r\S 5       rSrg)Context   z
A context.Nc                 ^   U(       d  [        S5      eXl        S U l        X l        0 U l        0 U l        SU l        SU l        U(       d,  U(       a  US:X  a  SOUnU[        X55      U(       + S.0U l        g UR                  5        H  u  px[        U[        5      (       d  [        SR                  X5      5      eXR                  U'   US:w  a  MJ  UR                  S[        X55      5      U R                  U   S'   [        UR                  SU(       + 5      5      U R                  U   S'   M     g )	NzName not providedz	IN MEMORYswarmdockerHostSkipTLSVerifyz>Unknown endpoint format for
                    context {}: {}r   r   )	Exceptionnamecontext_typeorchestrator	endpointstls_cfg	meta_pathtls_pathr
   items
isinstancedictr   formatgetbool)	selfr   r   hostr   tlsdefault_endpointkvs	            )lib/third_party/docker/context/context.py__init__Context.__init__   s)   /00	 ($# !LG$;  (# 
 !,T7),W#DN  OO%DAa&&& (&&,fTo7 7 !"NN1H}()f6F7 )DNN1f%15aeeS7* 2+DNN1o. &    c                     [        X$(       + 5      US.U R                  U'   U(       a  XPR                  U   S'   U(       a  X0R                  U'   g g )Nr   DefaultNamespace)r
   r   r   )r"   r   r#   r   skip_tls_verifydef_namespaces         r(   set_endpointContext.set_endpoint9   sM     %T+>?, 
t 7DNN4 !34!(LL r+   c                 "    U R                  5       $ N)__call__r"   s    r(   inspectContext.inspectF   s    }}r+   c                    [         R                  U5      nU(       aj  U " US   US   R                  SS 5      UR                  SS 5      S9nUS   R                  SS 5      Ul        UR	                  5         [        U5      Ul        U$ g )NNameMetadataStackOrchestrator	Endpoints)r   r   Type)r   
_load_metar    r   _load_certsr   r   )clsr   metainstances       r(   load_contextContext.load_contextI   s    !!$'V!*-112EtL((;57H %)$4$8$8$FH!  "!-d!3HOr+   c                 *   [        U5      n[        R                  R                  U5      (       d  g 0 n [	        U5       n[
        R                  " U5      nS S S 5        US   R                  5        HV  u  pgUS:w  a  M  UR                  S[        S S5      5      US   U   S'   [        UR                  SS5      5      US   U   S'   MX     U$ ! , (       d  f       N}= f! [        [        [        4 a  n[        SR                  X5      5      eS nAff = f)Nz@Detected corrupted meta file for
                context {} : {}r<   r   r   Fr   T)r   ospathisfileopenjsonloadOSErrorKeyError
ValueErrorr   r   r   r    r
   r!   )r@   r   	meta_filemetadatafer&   r'   s           r(   r>   Context._load_metaW   s    !$'	ww~~i((	4iA99Q< ! [)//1DAH}/0uu(u507H[!!$V,8<ot,9.H[!!$_5 2 # !:. 	4 ##)6$?4 4	4s4   C CC 
CC C D3DDc                    0 n[        U R                  5      nU R                  R                  5        GH  n[        R
                  R                  [        R
                  R                  X#5      5      (       d  MG  S nS nS n[        R                  " [        R
                  R                  X#5      5       H  nUR                  S5      (       a"  [        R
                  R                  X#U5      nM;  UR                  S5      (       a"  [        R
                  R                  X#U5      nMs  UR                  S5      (       d  M  [        R
                  R                  X#U5      nM     [        XEU/5      (       d  GMD  S nUS:X  a&  U R                  S   R                  SS5      (       d  Sn[        XV4XHS9X'   GM     Xl        X l        g )	Ncacertkeyr   r   FT)client_certca_certverify)r	   r   r   keysrF   rG   isdirjoinlistdir
startswithallr    r   r   r   )	r"   certstls_direndpointrY   rV   rW   filenamerZ   s	            r(   r?   Context._load_certsr   sR   dii(++-H77==g!@AAGDCJJrww||G'FG&&t,, ggll7hGG((0077<<8DD((//'',,w(CC H G3'((x'x0H0L0L'10 10!F"+!%W#M% .( r+   c                 J   [        U R                  5      n[        R                  R	                  U5      (       d  [        R
                  " U5        [        [        U R                  5      S5       nUR                  [        R                  " U R                  5      5        S S S 5        [        U R                  5      nU R                  R                  5        GH  u  pE[        R                  R	                  [        R                  R                  X45      5      (       d3  [        R
                  " [        R                  R                  X45      5        UR                   nU(       aG  [#        U[        R                  R                  X4[        R                  R%                  U5      5      5        UR&                  (       d  M  UR&                  u  px[#        U[        R                  R                  X4[        R                  R%                  U5      5      5        [#        U[        R                  R                  X4[        R                  R%                  U5      5      5        GM     [        U R                  5      U l        [        U R                  5      U l        g ! , (       d  f       GN= f)Nw)r   r   rF   rG   r\   makedirsrI   r   writerJ   dumpsr:   r	   r   r   r]   rY   r   basenamerV   r   r   )	r"   meta_dirrQ   rb   rc   r$   ca_file	cert_filekey_files	            r(   saveContext.save   s   		*ww}}X&&KK!-		*C0AGGDJJt}}-. 1 dii(!\\//1MH77==g!@AABGGLL;<kkG"'',,rww'7'7'@#B C xxx&)hh#	BGGLLrww'7'7	'B%D E277<<rww'7'7'A$C D 2  &dii0#DII.+ 10s   /0J
J"c                    [         R                  R                  U R                  5      (       a  [	        U R                  5        [         R                  R                  U R
                  5      (       a  [	        U R
                  5        g g r3   )rF   rG   r\   r   r   r   r5   s    r(   removeContext.remove   sM    77==((4>>"77==''4==! (r+   c                 P    SU R                   R                   SU R                   S3$ )N<z: 'z'>)	__class____name__r   r5   s    r(   __repr__Context.__repr__   s&    4>>**+3tyyk<<r+   c                 H    [         R                  " U R                  5       SS9$ )N   )indent)rJ   rj   r4   r5   s    r(   __str__Context.__str__   s    zz$--/!44r+   c                     U R                   nUR                  U R                  5        UR                  U R                  5        U$ r3   )r:   updateTLSMaterialStorage)r"   results     r(   r4   Context.__call__   s2    d&&'dll#r+   c                     U R                   S L $ r3   )r   r5   s    r(   is_docker_hostContext.is_docker_host   s      D((r+   c                     U R                   $ r3   )r   r5   s    r(   r9   Context.Name   s    yyr+   c                    U R                   (       a  U R                   S:X  a6  U R                  R                  SS 5      nU(       a  UR                  SS 5      $ g U R                  U R                      R                  SS 5      $ )Nr   r   r   )r   r   r    )r"   rc   s     r(   r   Context.Host   sg      D$5$5$@~~))(D9H||FD11~~d//044VTBBr+   c                     U R                   $ r3   )r   r5   s    r(   OrchestratorContext.Orchestrator   s       r+   c                 x    0 nU R                   (       a  SU R                   0nU R                  UU R                  S.$ )Nr;   )r9   r:   r<   )r   r   r   )r"   rA   s     r(   r:   Context.Metadata   s;    '):):;DII
 	
r+   c                     U R                   nU(       a  US:X  a  SnXR                  R                  5       ;   a  U R                  U   $ g )Nr   r   )r   r   r[   )r"   rW   s     r(   r   Context.TLSConfig   s@    cWnC,,##%%<<$$r+   c           	          0 nU R                   R                  5        HN  u  p#UR                  u  pE[        [	        [
        R                  R                  UR                  XE/5      5      X'   MP     SU0$ )Nr   )	r   r   rV   listmaprF   rG   rk   rY   )r"   ra   rc   r$   rV   rW   s         r(   r   Context.TLSMaterial   sf    !\\//1MHID"BGG$$s{{D&>?AEO 2
 5
 	
r+   c                 8    SU R                   U R                  S.0$ )Nr   )MetadataPathTLSPath)r   r   r5   s    r(   r   Context.Storage   s$      $== 	r+   )r   r   r   r   r   r   r   )NNNF)r   NNFN)rx   
__module____qualname____firstlineno____doc__r)   r0   r6   classmethodrC   r>   r?   rp   rs   ry   r~   r4   r   propertyr9   r   r   r:   r   r   r   __static_attributes__ r+   r(   r   r      s    EI(+V 5915)    4 4/6"=5)   C C ! ! 
 
   
 
  r+   r   )rF   rJ   shutilr   r   
docker.tlsr   docker.errorsr   docker.context.configr   r   r	   r
   r   r   r+   r(   <module>r      s,    	  #   * . / - 2g gr+   