From 603ad53f6ad7ced540bd2a2f05a531342a453405 Mon Sep 17 00:00:00 2001 From: yackob03 Date: Thu, 7 Nov 2013 17:09:15 -0500 Subject: [PATCH] Fix some bugs in the tags registry api. --- data/model.py | 31 +++++++++++++++++++++++-------- endpoints/tags.py | 2 +- 2 files changed, 24 insertions(+), 9 deletions(-) diff --git a/data/model.py b/data/model.py index 05d9ff681..4c252eabb 100644 --- a/data/model.py +++ b/data/model.py @@ -640,9 +640,18 @@ def get_parent_images(image_obj): def create_or_update_tag(namespace_name, repository_name, tag_name, tag_docker_image_id): - repo = Repository.get(Repository.name == repository_name, - Repository.namespace == namespace_name) - image = Image.get(Image.docker_image_id == tag_docker_image_id) + try: + repo = Repository.get(Repository.name == repository_name, + Repository.namespace == namespace_name) + except Repository.DoesNotExist: + raise DataModelException('Invalid repository %s/%s' % + (namespace_name, repository_name)) + + try: + image = Image.get(Image.docker_image_id == tag_docker_image_id) + except Image.DoesNotExist: + raise DataModelException('Invalid image with id: %s' % + tag_docker_image_id) try: tag = RepositoryTag.get(RepositoryTag.repository == repo, @@ -656,11 +665,17 @@ def create_or_update_tag(namespace_name, repository_name, tag_name, def delete_tag(namespace_name, repository_name, tag_name): - repo = Repository.get(Repository.name == repository_name, - Repository.namespace == namespace_name) - tag = RepositoryTag.get(RepositoryTag.repository == repo, - RepositoryTag.name == tag_name) - tag.delete_instance() + joined = RepositoryTag.select().join(Repository) + found = list(joined.where(Repository.name == repository_name, + Repository.namespace == namespace_name, + RepositoryTag.name == tag_name)) + + if not found: + msg = ('Invalid repository tag \'%s\' on repository \'%s/%s\'' % + (tag_name, namespace_name, repository_name)) + raise DataModelException(msg) + + found[0].delete_instance() def delete_all_repository_tags(namespace_name, repository_name): diff --git a/endpoints/tags.py b/endpoints/tags.py index c9b2af2ae..41a103975 100644 --- a/endpoints/tags.py +++ b/endpoints/tags.py @@ -68,7 +68,7 @@ def delete_tag(namespace, repository, tag): permission = ModifyRepositoryPermission(namespace, repository) if permission.can(): - model.delete_tag(namespace, repository, tag_name) + model.delete_tag(namespace, repository, tag) return make_response('Deleted', 204)