
    4                         S r SSKJr  SSKJr  SSKJr  SSK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\R                  5      r " S S\R                  5      rg)z9This package provides compatibility interfaces for v1/v2.    )absolute_import)division)print_functionN)docker_image)docker_digest)util)zipc                   `    \ rS rSrSrS rS rS rS rS r	S r
S	 rS
 rS rS rS rS rSrg)V1FromV2   zEThis compatibility interface serves the v1 interface from a v2 image.c                 0    Xl         U R                  5         g)z[Constructor.

Args:
  v2_img: a v2 DockerImage on which __enter__ has already been called.
N)	_v2_image_ComputeLayerMapping)selfv2_imgs     9lib/third_party/containerregistry/client/v2/v1_compat_.py__init__V1FromV2.__init__!   s     N    c                     U R                   R                  5       n[        R                  " U5      nUS    Vs/ s H  o3S   PM	     nnUS    Vs/ s H  oUS   PM	     nnS n0 U l        0 U l        / U l        [        Xd5       H  u  pU" U5      n
XR                  ;   a,  U R                  U
   U	:X  d   eU R
                  U
   U:X  d   eMH  XR                  U
'   XR
                  U
'   U R                  R                  U
5        M     gs  snf s  snf )a  Parse the v2 manifest and extract indices to efficiently answer v1 apis.

This reads the v2 manifest, corrolating the v1 compatibility and v2 fsLayer
arrays and creating three indices for efficiently answering v1 queries:
  self._v1_to_v2: dict, maps from v1 layer id to v2 digest
  self._v1_json: dict, maps from v1 layer id to v1 json
  self._v1_ancestry: list, the order of the v1 layers
fsLayersblobSumhistoryv1Compatibilityc                 8    [         R                  " U 5      nUS   $ )Nid)jsonloads)v1_jsonv1_metadatas     r   	ExtractId0V1FromV2._ComputeLayerMapping.<locals>.ExtractId9   s    JJw'kr   N)	r   manifestr   r   	_v1_to_v2_v1_json_v1_ancestryr	   append)r   raw_manifestr#   fs_layerv2_ancestryv1_layerv1_jsonsr!   r   	v2_digestv1_ids              r   r   V1FromV2._ComputeLayerMapping*   s
    >>**,Lzz,'H7?
7KL7K8I&7KKL<DY<OP<O*+<OHP
 DNDMD #H : e	..	 ~~e$	111}}U#w...'nnU$mmE
u% !; MPs   DDc                      U R                   S   $ )	Override.r   )r&   r   s    r   topV1FromV2.topL   s    Qr   c                     gr1   N r2   s    r   repositoriesV1FromV2.repositoriesP   s     	r   c                 N    U R                  U5      n[        U5      S:X  a  gUS   $ )r1      N)ancestrylen)r   layer_idr<   s      r   parentV1FromV2.parentU   s)    }}X&H
8}A;r   c                 :    U R                   R                  US5      $ )r1   z{})r%   get)r   r>   s     r   r   V1FromV2.json]   s    ==Xt,,r   c                 n    U R                   R                  U5      nU R                  R                  U5      $ r1   )r$   rB   r   uncompressed_blobr   r>   r-   s      r   uncompressed_layerV1FromV2.uncompressed_layerb   s+    ""8,I>>++I66r   c                 n    U R                   R                  U5      nU R                  R                  U5      $ rE   )r$   rB   r   blobrG   s      r   layerV1FromV2.layerh   s+    ""8,I>>y))r   c                 j    U R                   R                  U R                  R                  U5      5      $ rE   )r   diff_idr$   rB   r   digests     r   rO   V1FromV2.diff_idm   s&    >>!!$.."4"4V"<==r   c                 V    U R                   R                  U5      nU R                   US $ r6   )r&   index)r   r>   rT   s      r   r<   V1FromV2.ancestryq   s+    ##H-EUV$$r   c                     U $ Nr7   r2   s    r   	__enter__V1FromV2.__enter__w       Kr   c                     g rW   r7   r   unused_typeunused_valueunused_tracebacks       r   __exit__V1FromV2.__exit__z       r   )r&   r%   r$   r   N)__name__
__module____qualname____firstlineno____doc__r   r   r3   r8   r?   r   rH   rL   rO   r<   rX   r`   __static_attributes__r7   r   r   r   r      sB    M &D 	
-
7*
>%	r   r   c                   B    \ rS rSrSrS rS rS rS rS r	S r
S	 rS
rg)V2FromV1~   zEThis compatibility interface serves the v2 interface from a v1 image.c                 0    Xl         U R                  5         g)zConstructor.

Args:
  v1_img: a v1 DockerImage on which __enter__ has already been called.

Raises:
  ValueError: an incorrectly typed argument was supplied.
N)	_v1_image_ProcessImage)r   v1_imgs     r   r   V2FromV1.__init__   s     N 	r   c                 F   / n0 U l         U R                  R                  U R                  R                  5       5       HJ  nU R                  R	                  U5      n[
        R                  " U5      nUSU0/-  nX R                   U'   ML     [        R                  " [        R                  " SSSSUU R                  R                  U R                  R                  5       5       Vs/ s H   nSU R                  R                  U5      0PM"     snS.SS95      U l        g s  snf )	Nr   r;   unusedamd64r   )schemaVersionnametagarchitecturer   r   T)	sort_keys)
_layer_maprm   r<   r3   rL   r   SHA256r   Signr   dumps	_manifest)r   	fs_layersr>   rK   rQ   s        r   rn   V2FromV1._ProcessImage   s   IDONN++DNN,>,>,@A^^!!(+d##D)fY'((i (oof	 B
 YY

  #'.."9"9$..:L:L:N"O"Oh &t~~':':8'D"O  #	DNs   %'Dc                     U R                   $ rE   )r}   r2   s    r   r#   V2FromV1.manifest   s    >>r   c                 R    U R                   R                  U R                  U   5      $ rE   )rm   rH   ry   rP   s     r   rF   V2FromV1.uncompressed_blob   s     >>,,T__V-DEEr   c                 R    U R                   R                  U R                  U   5      $ rE   )rm   rL   ry   rP   s     r   rK   V2FromV1.blob   s     >> 788r   c                     U $ rW   r7   r2   s    r   rX   V2FromV1.__enter__   rZ   r   c                     g rW   r7   r\   s       r   r`   V2FromV1.__exit__   rb   r   )ry   r}   rm   N)rc   rd   re   rf   rg   r   rn   r#   rF   rK   rX   r`   rh   r7   r   r   rj   rj   ~   s)    M8F9
	r   rj   )rg   
__future__r   r   r   r   containerregistry.client.v1r   v1_imagecontainerregistry.client.v2r   v2_imager   	six.movesr	   DockerImager   rj   r7   r   r   <module>r      sM    @ &  %  @ 5 @ , ]	x## ]	@>	x## >	r   