
                             d Z ddlmZ 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	 edg d      Z
dZ ej                  d	      j                         Z G d
 de
      Zd Zd Zd Zd Z	 	 ddZy)z;This package manipulates v2.2 image configuration metadata.    )absolute_import)print_function)
namedtupleN
OverridesT)layers
entrypointcmdenvlabelsportsvolumesworkdiruserauthor
created_bycreation_timez1970-01-01T00:00:00Z    c                   \     e Zd ZdZ	 	 	 	 	 	 	 	 	 	 	 	 d fd	Z	 	 	 	 	 	 	 	 	 	 	 	 ddZ xZS )	Overridesz#Docker image configuration options.c                 D    t         t        |   | |||||||||	|
||      S )zConstructor.r   r   r	   r   r   r
   r   r   r   r   r   r   )superr   __new__)clsr   r   r	   r   r   r
   r   r   r   r   r   r   	__class__s                =lib/third_party/containerregistry/transform/v2_2/metadata_.pyr   zOverrides.__new__)   sE     C(# ) % %r   c                    t        |xs | j                  |xs | j                  |xs | j                  |xs | j                  |xs | j
                  |xs | j                  |xs | j                  |xs | j                  |	xs | j                  |
xs | j                  |xs | j                  |xs | j                        S )Nr   )r   r   r   r	   r   r   r
   r   r   r   r   r   r   )selfr   r   r	   r   r   r
   r   r   r   r   r   r   s                r   OverridezOverrides.OverrideF   s     $0O488TYY$O488!tzz'4<<'4<<$0#9t'9'9; ;r   )NNNNNNNNNNNN)__name__
__module____qualname____doc__r   r   __classcell__)r   s   @r   r   r   &   s\    + "%<   #;r   r   c                     t         j                  }	 |t         _        t         j                  j                  |       |t         _        S # |t         _        w xY w)z;Resolves environment variables embedded in the given value.)osenvironpath
expandvars)valueenvironment	outer_envs      r   _Resolver-   c   s8    jj)BJ77e$BJBJs   )A Ac                     t        | t              r%t        d t        j                  |       D              S t	        j
                  |       S )z$Do a deep copy, skipping null entry.c              3   R   K   | ]  \  }}|t        |      t        |      f ! y w)N)_DeepCopySkipNull).0kvs      r   	<genexpr>z$_DeepCopySkipNull.<locals>.<genexpr>q   s1      "/DAq= #1%'8';</s   %')
isinstancedictsix	iteritemscopydeepcopy)datas    r   r0   r0   n   s@    d "MM$/" " " 
t	r   c                 \    t               }| D ]  }|j                  dd      \  }}|||<    |S )z=Converts an iterable object of key=value pairs to dictionary.=   )r6   split)pairdkvr2   r3   s        r   _KeyValueToDictrC   w   s7    
f!bXXc1FQAaD  
(r   c                 j    t        | j                               D cg c]  }|d| |    c}S c c}w )Nr=   )sortedkeys)rA   r2   s     r   _DictToKeyValuerG      s0    '-affh'7	8'7!Q!
'7	88	8s   0c                 
   t        |       }t               }|j                  xs t        |d<   |j                  xs d|d<   ||d<   ||d<   d|v r|d   |d<   |j                  di       |d<   |j                  r|j                  |d   d<   |j                  r|j                  |d   d	<   |j                  r|j                  |d   d
<   |j                  ret        |d   j                  dg             }t        j                  |j                        D ]  \  }}t        ||      ||<    t        |      |d   d<   |j                  rI|d   j                  di       }	t        j                  |j                        D ]
  \  }}||	|<    |	|d   d<   |j                   r>d|d   vri |d   d<   |j                   D ]   }
d|
v ri |d   d   |
<   i |d   d   |
dz   <   " |j"                  r+d|d   vri |d   d<   |j"                  D ]  }
i |d   d   |
<    |j$                  r|j$                  |d   d<   |j                  di       j                  dg       }|j&                  r|j&                  }||D cg c]  }|t(        k7  sd|z   c}z  }d|d|d<   |j                  dg       }|D ]V  }|j                  xs t        |j*                  xs d|j                  xs dd}|t(        k(  rd|d<   |j-                  d|       X ||d<   |S c c}w )a  Create an image config possibly based on an existing one.

  Args:
    data: A dict of Docker image config to base on top of.
    options: Options specific to this image which will be merged with any
             existing data
    architecture: The architecture to write in the metadata (default: amd64)
    operating_system: The os to write in the metadata (default: linux)

  Returns:
    Image config for the new image
  createdUnknownr   architecturer&   z
os.versionconfig
EntrypointCmdUserEnvLabelsExposedPorts/z/tcpVolumes
WorkingDirrootfsdiff_idsz	sha256:%sr   )typerW   history)rI   r   r   Tempty_layerr   )r0   r6   r   _DEFAULT_TIMESTAMPr   getr   r	   r   r
   rC   r7   r8   r-   rG   r   r   r   r   r   _EMPTY_LAYERr   insert)r;   optionsrK   operating_systemdefaultsoutputenviron_dictr2   r3   
label_dictprW   r   lrY   cfgs                   r   r   r      s?     t$( 6&++A/A&^^0y&'&!&,X#L1F<\\(B/& %,%7%7F8\"[[%kkF8U\\&||F8V[["6(#3#7#7r#BCLgkk*1 L1l1o + .l;F8U ^^!%%h3Jgnn-1jm .!+F8X]]VH--)+fX~&]]	 /1x(+ 8:x(V4  __x(($&fXy!__')fXy!!$  __%,__F8\" \\(B'++J;(^^^^F&F&QA4Eq&FFHF8 ll9b)G**@.@**7iNN/ic
 
l	!MnnQ   F9	-' Gs   )L 8L )amd64linux)r#   
__future__r   r   collectionsr   r9   hashlibr&   r7   _OverridesTr[   sha256	hexdigestr]   r   r-   r0   rC   rG   r    r   r   <module>rq      s    B & % "   	 
  (  , w~~c",,.9; 9;z9 $ 'cr   