Unify the get_layers calls across all implements of manifest schemas to ensure we have a common type returned
Also renames some methods to make it more clear what kind of information they return
This commit is contained in:
parent
180d8847db
commit
4e1ff90cb2
17 changed files with 210 additions and 124 deletions
|
@ -20,6 +20,7 @@ from jwt.utils import base64url_encode, base64url_decode
|
|||
|
||||
from digest import digest_tools
|
||||
from image.docker import ManifestException
|
||||
from image.docker.types import ManifestImageLayer
|
||||
from image.docker.interfaces import ManifestInterface
|
||||
from image.docker.v1 import DockerV1Metadata
|
||||
|
||||
|
@ -73,7 +74,7 @@ class InvalidSchema1Signature(ManifestException):
|
|||
|
||||
|
||||
class Schema1Layer(namedtuple('Schema1Layer', ['digest', 'v1_metadata', 'raw_v1_metadata',
|
||||
'compressed_size', 'is_remote'])):
|
||||
'compressed_size', 'is_remote', 'urls'])):
|
||||
"""
|
||||
Represents all of the data about an individual layer in a given Manifest.
|
||||
This is the union of the fsLayers (digest) and the history entries (v1_compatibility).
|
||||
|
@ -298,6 +299,25 @@ class DockerSchema1Manifest(ManifestInterface):
|
|||
self._layers = list(self._generate_layers())
|
||||
return self._layers
|
||||
|
||||
def get_layers(self, content_retriever):
|
||||
""" Returns the layers of this manifest, from base to leaf or None if this kind of manifest
|
||||
does not support layers. """
|
||||
for layer in self.layers:
|
||||
created_datetime = None
|
||||
try:
|
||||
created_datetime = dateutil.parser.parse(layer.v1_metadata.created).replace(tzinfo=None)
|
||||
except:
|
||||
pass
|
||||
|
||||
yield ManifestImageLayer(layer_id=layer.v1_metadata.image_id,
|
||||
compressed_size=layer.compressed_size,
|
||||
is_remote=False,
|
||||
urls=None,
|
||||
command=layer.v1_metadata.command,
|
||||
blob_digest=layer.digest,
|
||||
created_datetime=created_datetime,
|
||||
internal_layer=layer)
|
||||
|
||||
@property
|
||||
def blob_digests(self):
|
||||
return [str(layer.digest) for layer in self.layers]
|
||||
|
@ -356,7 +376,7 @@ class DockerSchema1Manifest(ManifestInterface):
|
|||
command, labels)
|
||||
|
||||
compressed_size = v1_metadata.get('Size')
|
||||
yield Schema1Layer(image_digest, extracted, metadata_string, compressed_size, False)
|
||||
yield Schema1Layer(image_digest, extracted, metadata_string, compressed_size, False, None)
|
||||
|
||||
@property
|
||||
def _payload(self):
|
||||
|
|
Reference in a new issue