from flask import jsonify from app import model_cache from auth.registry_jwt_auth import process_registry_jwt_auth from data.registry_model import registry_model from endpoints.decorators import anon_protect, parse_repository_name from endpoints.v2 import v2_bp, require_repo_read, paginate from endpoints.v2.errors import NameUnknown @v2_bp.route('//tags/list', methods=['GET']) @parse_repository_name() @process_registry_jwt_auth(scopes=['pull']) @require_repo_read @anon_protect @paginate() def list_all_tags(namespace_name, repo_name, start_id, limit, pagination_callback): repository_ref = registry_model.lookup_repository(namespace_name, repo_name) if repository_ref is None: raise NameUnknown() # NOTE: We add 1 to the limit because that's how pagination_callback knows if there are # additional tags. tags = registry_model.lookup_cached_active_repository_tags(model_cache, repository_ref, start_id, limit + 1) response = jsonify({ 'name': '{0}/{1}'.format(namespace_name, repo_name), 'tags': [tag.name for tag in tags][0:limit], }) pagination_callback(tags, response) return response