From 392307a9379f7f2ecd570d340348fa172e92ef7e Mon Sep 17 00:00:00 2001 From: yackob03 Date: Thu, 10 Oct 2013 00:40:25 -0400 Subject: [PATCH] Add a repository view with all images that has the list of tags for each image. --- endpoints/api.py | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/endpoints/api.py b/endpoints/api.py index 11b788244..a84a4f9f3 100644 --- a/endpoints/api.py +++ b/endpoints/api.py @@ -4,6 +4,7 @@ import stripe from flask import request, make_response, jsonify, abort from flask.ext.login import login_required, current_user from functools import wraps +from collections import defaultdict from data import model from app import app @@ -261,6 +262,31 @@ def role_view(repo_perm_obj): } +@app.route('/api/repository//image/', methods=['GET']) +@parse_repository_name +def list_repository_images(namespace, repository): + permission = ReadRepositoryPermission(namespace, repository) + if permission.can() or model.repository_is_public(namespace, repository): + all_images = model.get_repository_images(namespace, repository) + all_tags = model.list_repository_tags(namespace, repository) + + tags_by_image_id = defaultdict(list) + for tag in all_tags: + tags_by_image_id[tag.image.docker_image_id].append(tag.name) + + + def add_tags(image_json): + image_json['tags'] = tags_by_image_id[image_json['id']] + return image_json + + + return jsonify({ + 'images': [add_tags(image_view(image)) for image in all_images] + }) + + abort(403) + + @app.route('/api/repository//tag//images', methods=['GET']) @parse_repository_name