Make sure list_manifest_layers is not callable for manifest lists
This commit is contained in:
parent
7fa60d5802
commit
a9b8586423
3 changed files with 10 additions and 6 deletions
|
@ -199,7 +199,7 @@ class RegistryDataInterface(object):
|
||||||
""" Returns an *ordered list* of the layers found in the manifest, starting at the base
|
""" Returns an *ordered list* of the layers found in the manifest, starting at the base
|
||||||
and working towards the leaf, including the associated Blob and its placements
|
and working towards the leaf, including the associated Blob and its placements
|
||||||
(if specified). The layer information in `layer_info` will be of type
|
(if specified). The layer information in `layer_info` will be of type
|
||||||
`image.docker.types.ManifestImageLayer`.
|
`image.docker.types.ManifestImageLayer`. Should not be called for a manifest list.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
@abstractmethod
|
@abstractmethod
|
||||||
|
@ -208,7 +208,7 @@ class RegistryDataInterface(object):
|
||||||
""" Returns an *ordered list* of the layers found in the parsed manifest, starting at the base
|
""" Returns an *ordered list* of the layers found in the parsed manifest, starting at the base
|
||||||
and working towards the leaf, including the associated Blob and its placements
|
and working towards the leaf, including the associated Blob and its placements
|
||||||
(if specified). The layer information in `layer_info` will be of type
|
(if specified). The layer information in `layer_info` will be of type
|
||||||
`image.docker.types.ManifestImageLayer`.
|
`image.docker.types.ManifestImageLayer`. Should not be called for a manifest list.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
@abstractmethod
|
@abstractmethod
|
||||||
|
|
|
@ -345,6 +345,8 @@ class SharedModel:
|
||||||
working towards the leaf, including the associated Blob and its placements (if specified).
|
working towards the leaf, including the associated Blob and its placements (if specified).
|
||||||
Returns None if the manifest could not be parsed and validated.
|
Returns None if the manifest could not be parsed and validated.
|
||||||
"""
|
"""
|
||||||
|
assert not parsed.is_manifest_list
|
||||||
|
|
||||||
retriever = RepositoryContentRetriever(repo_id, storage)
|
retriever = RepositoryContentRetriever(repo_id, storage)
|
||||||
requires_empty_blob = parsed.get_requires_empty_layer_blob(retriever)
|
requires_empty_blob = parsed.get_requires_empty_layer_blob(retriever)
|
||||||
|
|
||||||
|
|
|
@ -58,10 +58,12 @@ def _manifest_dict(manifest):
|
||||||
if manifest.legacy_image_if_present is not None:
|
if manifest.legacy_image_if_present is not None:
|
||||||
image = image_dict(manifest.legacy_image, with_history=True)
|
image = image_dict(manifest.legacy_image, with_history=True)
|
||||||
|
|
||||||
layers = registry_model.list_manifest_layers(manifest, storage)
|
layers = None
|
||||||
if layers is None and not manifest.is_manifest_list:
|
if not manifest.is_manifest_list:
|
||||||
logger.debug('Missing layers for manifest `%s`', manifest.digest)
|
layers = registry_model.list_manifest_layers(manifest, storage)
|
||||||
abort(404)
|
if layers is None:
|
||||||
|
logger.debug('Missing layers for manifest `%s`', manifest.digest)
|
||||||
|
abort(404)
|
||||||
|
|
||||||
return {
|
return {
|
||||||
'digest': manifest.digest,
|
'digest': manifest.digest,
|
||||||
|
|
Reference in a new issue