Fix pagination of public repos, make more efficient and add test

This commit is contained in:
Joseph Schorr 2016-08-10 15:08:06 -04:00
parent bf34916b26
commit 4a2acac5dc
3 changed files with 39 additions and 17 deletions

View file

@ -26,11 +26,13 @@ def paginate(query, model, descending=False, page_token=None, limit=50, id_alias
query = query.where(model.id <= start_id)
else:
query = query.where(model.id >= start_id)
else:
query = query.limit(limit + 1)
results = list(query)
page_token = None
if len(results) > limit:
start_id = results[limit].id
start_id = getattr(results[limit], id_alias or 'id')
page_token = {
'start_id': start_id
}

View file

@ -256,11 +256,12 @@ def get_visible_repositories(username, namespace=None, include_public=False):
query = (Repository
.select(Repository.name, Repository.id.alias('rid'),
Repository.description, Namespace.username, Repository.visibility)
.distinct()
.switch(Repository)
.join(Namespace, on=(Repository.namespace_user == Namespace.id))
.switch(Repository)
.join(RepositoryPermission, JOIN_LEFT_OUTER))
.join(Namespace, on=(Repository.namespace_user == Namespace.id)))
if username:
# Note: We only need the permissions table if we will filter based on a user's permissions.
query = query.switch(Repository).distinct().join(RepositoryPermission, JOIN_LEFT_OUTER)
query = _basequery.filter_to_repos_for_user(query, username, namespace, include_public)
return query