Add image ancestry and update the test db accordingly.
This commit is contained in:
parent
abdf731f7a
commit
ea6df2b725
5 changed files with 43 additions and 14 deletions
|
@ -198,7 +198,7 @@ def set_image_checksum(image_id, repository, checksum):
|
|||
|
||||
|
||||
def set_image_metadata(image_id, namespace_name, repository_name,
|
||||
created_date_str, comment):
|
||||
created_date_str, comment, parent=None):
|
||||
joined = Image.select().join(Repository)
|
||||
image_list = list(joined.where(Repository.name == repository_name,
|
||||
Repository.namespace == namespace_name,
|
||||
|
@ -210,6 +210,10 @@ def set_image_metadata(image_id, namespace_name, repository_name,
|
|||
fetched = image_list[0]
|
||||
fetched.created = dateutil.parser.parse(created_date_str)
|
||||
fetched.comment = comment
|
||||
|
||||
if parent:
|
||||
fetched.ancestors = '%s%s/' % (parent.ancestors, parent.id)
|
||||
|
||||
fetched.save()
|
||||
return fetched
|
||||
|
||||
|
@ -220,15 +224,6 @@ def get_repository_images(namespace_name, repository_name):
|
|||
Repository.namespace == namespace_name)
|
||||
|
||||
|
||||
def get_tag_images(namespace_name, repository_name, tag_name):
|
||||
joined = Image.select().join(RepositoryTag).join(Repository)
|
||||
fetched = list(joined.where(Repository.name == repository_name,
|
||||
Repository.namespace == namespace_name,
|
||||
RepositoryTag.name == tag_name))
|
||||
|
||||
return fetched
|
||||
|
||||
|
||||
def list_repository_tags(namespace_name, repository_name):
|
||||
select = RepositoryTag.select(RepositoryTag, Image)
|
||||
with_repo = select.join(Repository)
|
||||
|
@ -238,13 +233,33 @@ def list_repository_tags(namespace_name, repository_name):
|
|||
|
||||
|
||||
def get_tag_image(namespace_name, repository_name, tag_name):
|
||||
fetched = get_tag_images(namespace_name, repository_name, tag_name)
|
||||
joined = Image.select().join(RepositoryTag).join(Repository)
|
||||
fetched = joined.where(Repository.name == repository_name,
|
||||
Repository.namespace == namespace_name,
|
||||
RepositoryTag.name == tag_name)
|
||||
|
||||
if not fetched:
|
||||
raise DataModelException('Unable to find image for tag.')
|
||||
|
||||
return fetched[0]
|
||||
|
||||
|
||||
def get_image_by_id(image_id):
|
||||
return Image.get(Image.image_id == image_id)
|
||||
|
||||
|
||||
def get_parent_images(image_obj):
|
||||
""" Returns a list of parent Image objects in chronilogical order. """
|
||||
parents = image_obj.ancestors
|
||||
parent_db_ids = parents.strip('/').split('/')
|
||||
|
||||
or_clauses = [(Image.id == db_id) for db_id in parent_db_ids]
|
||||
parent_images = Image.select().where(reduce(operator.or_, or_clauses))
|
||||
id_to_image = {unicode(image.id): image for image in parent_images}
|
||||
|
||||
return [id_to_image[parent_id] for parent_id in parent_db_ids]
|
||||
|
||||
|
||||
def create_or_update_tag(namespace_name, repository_name, tag_name,
|
||||
tag_image_id):
|
||||
repo = Repository.get(Repository.name == repository_name,
|
||||
|
|
Reference in a new issue