def get(self, namespace, repository, tag, parsed_args): """ List the images for the specified repository tag. """ repo_ref = registry_model.lookup_repository(namespace, repository) if repo_ref is None: raise NotFound() tag_ref = registry_model.get_repo_tag(repo_ref, tag, include_legacy_image=True) if tag_ref is None: raise NotFound() if tag_ref.legacy_image_if_present is None: return {"images": []} image_id = tag_ref.legacy_image.docker_image_id all_images = None if parsed_args["owned"]: # TODO: Remove the `owned` image concept once we are fully on V2_2. all_images = registry_model.get_legacy_images_owned_by_tag(tag_ref) else: image_with_parents = registry_model.get_legacy_image( repo_ref, image_id, include_parents=True) if image_with_parents is None: raise NotFound() all_images = [image_with_parents] + image_with_parents.parents return { "images": [image_dict(image) for image in all_images], }
def _manifest_dict(manifest): image = None if manifest.legacy_image_if_present is not None: image = image_dict(manifest.legacy_image, with_history=True) layers = None if not manifest.is_manifest_list: layers = registry_model.list_manifest_layers(manifest, storage) if layers is None: logger.debug('Missing layers for manifest `%s`', manifest.digest) abort(404) return { 'digest': manifest.digest, 'is_manifest_list': manifest.is_manifest_list, 'manifest_data': manifest.internal_manifest_bytes.as_unicode(), 'image': image, 'layers': ([_layer_dict(lyr.layer_info, idx) for idx, lyr in enumerate(layers)] if layers else None), }