Repository endpoint tags pagination (#3238)
* endpoint/api/repository: limit the number of tags returned - Limit the number of tags returned by /api/v1/repository/<ns:repo> to 500. - Uses the tag history endpoint instead, with an active tag filte. - Update UI to use tag history endpoint instead.
This commit is contained in:
parent
6d5489b254
commit
8e643ce5d9
16 changed files with 99 additions and 34 deletions
|
@ -7,7 +7,8 @@ from auth.auth_context import get_authenticated_user
|
|||
from data.registry_model import registry_model
|
||||
from endpoints.api import (resource, nickname, require_repo_read, require_repo_write,
|
||||
RepositoryParamResource, log_action, validate_json_request, path_param,
|
||||
parse_args, query_param, truthy_bool, disallow_for_app_repositories)
|
||||
parse_args, query_param, truthy_bool, disallow_for_app_repositories,
|
||||
format_date)
|
||||
from endpoints.api.image import image_dict
|
||||
from endpoints.exception import NotFound, InvalidRequest
|
||||
from util.names import TAG_ERROR, TAG_REGEX
|
||||
|
@ -30,6 +31,16 @@ def _tag_dict(tag):
|
|||
|
||||
if tag.legacy_image:
|
||||
tag_info['docker_image_id'] = tag.legacy_image.docker_image_id
|
||||
tag_info['image_id'] = tag.legacy_image.docker_image_id
|
||||
tag_info['size'] = tag.legacy_image.aggregate_size
|
||||
|
||||
if tag.lifetime_start_ts > 0:
|
||||
last_modified = format_date(datetime.fromtimestamp(tag.lifetime_start_ts))
|
||||
tag_info['last_modified'] = last_modified
|
||||
|
||||
if tag.lifetime_end_ts is not None:
|
||||
expiration = format_date(datetime.fromtimestamp(tag.lifetime_end_ts))
|
||||
tag_info['expiration'] = expiration
|
||||
|
||||
return tag_info
|
||||
|
||||
|
@ -46,11 +57,13 @@ class ListRepositoryTags(RepositoryParamResource):
|
|||
@query_param('limit', 'Limit to the number of results to return per page. Max 100.', type=int,
|
||||
default=50)
|
||||
@query_param('page', 'Page index for the results. Default 1.', type=int, default=1)
|
||||
@query_param('onlyActiveTags', 'Filter to only active tags.', type=truthy_bool, default=False)
|
||||
@nickname('listRepoTags')
|
||||
def get(self, namespace, repository, parsed_args):
|
||||
specific_tag = parsed_args.get('specificTag') or None
|
||||
page = max(1, parsed_args.get('page', 1))
|
||||
limit = min(100, max(1, parsed_args.get('limit', 50)))
|
||||
active_tags_only = parsed_args.get('onlyActiveTags')
|
||||
|
||||
repo_ref = registry_model.lookup_repository(namespace, repository)
|
||||
if repo_ref is None:
|
||||
|
@ -58,7 +71,8 @@ class ListRepositoryTags(RepositoryParamResource):
|
|||
|
||||
history, has_more = registry_model.list_repository_tag_history(repo_ref, page=page,
|
||||
size=limit,
|
||||
specific_tag_name=specific_tag)
|
||||
specific_tag_name=specific_tag,
|
||||
active_tags_only=active_tags_only)
|
||||
return {
|
||||
'tags': [_tag_dict(tag) for tag in history],
|
||||
'page': page,
|
||||
|
|
Reference in a new issue