Exemplo n.º 1
0
Arquivo: blob.py Projeto: quay/quay
def get_repository_blob_by_digest(repository, blob_digest):
    """
    Find the content-addressable blob linked to the specified repository and returns it or None if
    none.
    """
    # First try looking for a recently uploaded blob. If none found that is matching,
    # check the repository itself.
    storage = _lookup_blob_uploaded(repository, blob_digest)
    if storage is None:
        storage = _lookup_blob_in_repository(repository, blob_digest)

    return get_storage_by_uuid(storage.uuid) if storage is not None else None
Exemplo n.º 2
0
def get_repository_blob_by_digest(repository, blob_digest):
    """ Find the content-addressable blob linked to the specified repository.
  """
    assert blob_digest
    try:
        storage = (ImageStorage.select(ImageStorage.uuid).join(Image).where(
            Image.repository == repository,
            ImageStorage.content_checksum == blob_digest,
            ImageStorage.uploading == False).get())

        return storage_model.get_storage_by_uuid(storage.uuid)
    except (ImageStorage.DoesNotExist, InvalidImageException):
        raise BlobDoesNotExist(
            'Blob does not exist with digest: {0}'.format(blob_digest))
Exemplo n.º 3
0
def get_repository_blob_by_digest(repository, blob_digest):
    """ Find the content-addressable blob linked to the specified repository and
      returns it or None if none.
  """
    try:
        storage = (ImageStorage.select(
            ImageStorage.uuid).join(ManifestBlob).where(
                ManifestBlob.repository == repository,
                ImageStorage.content_checksum == blob_digest,
                ImageStorage.uploading == False).get())

        return get_storage_by_uuid(storage.uuid)
    except (ImageStorage.DoesNotExist, InvalidImageException):
        # TODO: Remove once we are no longer using the legacy tables.
        # Try the legacy call.
        try:
            return legacy_get(repository, blob_digest)
        except BlobDoesNotExist:
            return None
Exemplo n.º 4
0
def get_repo_blob_by_digest(namespace, repo_name, blob_digest):
    """ Find the content-addressable blob linked to the specified repository.
  """
    assert blob_digest
    try:
        storage = (ImageStorage.select(
            ImageStorage.uuid).join(Image).join(Repository).join(
                Namespace,
                on=(Namespace.id == Repository.namespace_user)).where(
                    Repository.name == repo_name,
                    Namespace.username == namespace,
                    ImageStorage.content_checksum == blob_digest,
                    ImageStorage.uploading == False,
                ).get())

        return storage_model.get_storage_by_uuid(storage.uuid)
    except (ImageStorage.DoesNotExist, InvalidImageException):
        raise BlobDoesNotExist(
            "Blob does not exist with digest: {0}".format(blob_digest))