initial import for Open Source 🎉
This commit is contained in:
parent
1898c361f3
commit
9c0dd3b722
2048 changed files with 218743 additions and 0 deletions
37
data/model/oci/retriever.py
Normal file
37
data/model/oci/retriever.py
Normal file
|
@ -0,0 +1,37 @@
|
|||
from image.docker.interfaces import ContentRetriever
|
||||
from data.database import Manifest
|
||||
from data.model.oci.blob import get_repository_blob_by_digest
|
||||
from data.model.storage import get_layer_path
|
||||
|
||||
class RepositoryContentRetriever(ContentRetriever):
|
||||
""" Implementation of the ContentRetriever interface for manifests that retrieves
|
||||
config blobs and child manifests for the specified repository.
|
||||
"""
|
||||
def __init__(self, repository_id, storage):
|
||||
self.repository_id = repository_id
|
||||
self.storage = storage
|
||||
|
||||
@classmethod
|
||||
def for_repository(cls, repository_id, storage):
|
||||
return RepositoryContentRetriever(repository_id, storage)
|
||||
|
||||
def get_manifest_bytes_with_digest(self, digest):
|
||||
""" Returns the bytes of the manifest with the given digest or None if none found. """
|
||||
query = (Manifest
|
||||
.select()
|
||||
.where(Manifest.repository == self.repository_id)
|
||||
.where(Manifest.digest == digest))
|
||||
|
||||
try:
|
||||
return query.get().manifest_bytes
|
||||
except Manifest.DoesNotExist:
|
||||
return None
|
||||
|
||||
def get_blob_bytes_with_digest(self, digest):
|
||||
""" Returns the bytes of the blob with the given digest or None if none found. """
|
||||
blob = get_repository_blob_by_digest(self.repository_id, digest)
|
||||
if blob is None:
|
||||
return None
|
||||
|
||||
assert blob.locations is not None
|
||||
return self.storage.get_content(blob.locations, get_layer_path(blob))
|
Reference in a new issue