def describe_images(self, repository_name, registry_id=None, image_ids=None): if repository_name in self.repositories: repository = self.repositories[repository_name] else: raise RepositoryNotFoundException(repository_name, registry_id or DEFAULT_REGISTRY_ID) if image_ids: response = set() for image_id in image_ids: found = False for image in repository.images: if (('imageDigest' in image_id and image.get_image_digest() == image_id['imageDigest']) or ('imageTag' in image_id and image_id['imageTag'] in image.image_tags)): found = True response.add(image) if not found: image_id_representation = "{imageDigest:'%s', imageTag:'%s'}" % ( image_id.get('imageDigest', 'null'), image_id.get('imageTag', 'null'), ) raise ImageNotFoundException( image_id=image_id_representation, repository_name=repository_name, registry_id=registry_id or DEFAULT_REGISTRY_ID) else: response = [] for image in repository.images: response.append(image) return response
def _get_image(self, image_tag, image_digest): # you can either search for one or both image = next( (i for i in self.images if (not image_tag or image_tag in i.image_tags) and ( not image_digest or image_digest == i.get_image_digest())), None, ) if not image: image_id_rep = "{{imageDigest:'{0}', imageTag:'{1}'}}".format( image_digest or "null", image_tag or "null") raise ImageNotFoundException( image_id=image_id_rep, repository_name=self.name, registry_id=self.registry_id, ) return image