Add pagination to the repository list API to make it better for public
Fixes #1166
This commit is contained in:
parent
4905f55268
commit
534ec9cb2b
5 changed files with 69 additions and 98 deletions
|
@ -11,11 +11,12 @@ from peewee import IntegrityError
|
|||
import features
|
||||
|
||||
from app import app, billing as stripe, authentication, avatar
|
||||
from data.database import Repository as RepositoryTable
|
||||
from endpoints.api import (ApiResource, nickname, resource, validate_json_request, request_error,
|
||||
log_action, internal_only, NotFound, require_user_admin, parse_args,
|
||||
query_param, InvalidToken, require_scope, format_date, show_if,
|
||||
license_error, require_fresh_login, path_param, define_json_response,
|
||||
RepositoryParamResource)
|
||||
RepositoryParamResource, page_support)
|
||||
from endpoints.api.subscribe import subscribe
|
||||
from endpoints.common import common_login
|
||||
from endpoints.decorators import anon_allowed
|
||||
|
@ -30,6 +31,7 @@ from util.useremails import (send_confirmation_email, send_recovery_email, send_
|
|||
send_password_changed, send_org_recovery_email)
|
||||
from util.names import parse_single_urn
|
||||
|
||||
REPOS_PER_PAGE = 100
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
|
@ -833,15 +835,15 @@ class StarredRepositoryList(ApiResource):
|
|||
|
||||
@nickname('listStarredRepos')
|
||||
@parse_args()
|
||||
@query_param('page', 'Offset page number. (int)', type=int)
|
||||
@query_param('limit', 'Limit on the number of results (int)', type=int)
|
||||
@require_user_admin
|
||||
def get(self, parsed_args):
|
||||
@page_support()
|
||||
def get(self, page_token, parsed_args):
|
||||
""" List all starred repositories. """
|
||||
page = parsed_args['page']
|
||||
limit = parsed_args['limit']
|
||||
starred_repos = model.repository.get_user_starred_repositories(get_authenticated_user(),
|
||||
page=page, limit=limit)
|
||||
repo_query = model.repository.get_user_starred_repositories(get_authenticated_user())
|
||||
|
||||
repos, next_page_token = model.modelutil.paginate(repo_query, RepositoryTable,
|
||||
page_token=page_token, limit=REPOS_PER_PAGE)
|
||||
|
||||
def repo_view(repo_obj):
|
||||
return {
|
||||
'namespace': repo_obj.namespace_user.username,
|
||||
|
@ -850,7 +852,7 @@ class StarredRepositoryList(ApiResource):
|
|||
'is_public': repo_obj.visibility.name == 'public',
|
||||
}
|
||||
|
||||
return {'repositories': [repo_view(repo) for repo in starred_repos]}
|
||||
return {'repositories': [repo_view(repo) for repo in repos]}, next_page_token
|
||||
|
||||
@require_scope(scopes.READ_REPO)
|
||||
@nickname('createStar')
|
||||
|
|
Reference in a new issue