Switch V2 pagination back to using IDs, which should be much faster and easier on the DB
Also adds a test for the tags endpoint
This commit is contained in:
parent
b8b2c75822
commit
3161b60522
7 changed files with 105 additions and 31 deletions
|
@ -60,7 +60,7 @@ class PreOCIModel(DockerRegistryV2DataInterface):
|
|||
|
||||
def delete_manifest_by_digest(self, namespace_name, repo_name, digest):
|
||||
def _tag_view(tag):
|
||||
return Tag(name=tag.name, repository=RepositoryReference(
|
||||
return Tag(id=tag.id, name=tag.name, repository=RepositoryReference(
|
||||
id=tag.repository_id,
|
||||
name=repo_name,
|
||||
namespace_name=namespace_name,))
|
||||
|
@ -118,24 +118,32 @@ class PreOCIModel(DockerRegistryV2DataInterface):
|
|||
repository.id, tag_name, leaf_layer_docker_id, manifest_digest, manifest_bytes)
|
||||
return newly_created
|
||||
|
||||
def repository_tags(self, namespace_name, repo_name, limit, offset):
|
||||
def repository_tags(self, namespace_name, repo_name, start_id, limit):
|
||||
def _tag_view(tag):
|
||||
return Tag(name=tag.name, repository=RepositoryReference(
|
||||
return Tag(id=tag.id, name=tag.name, repository=RepositoryReference(
|
||||
id=tag.repository_id,
|
||||
name=repo_name,
|
||||
namespace_name=namespace_name,))
|
||||
|
||||
tags_query = model.tag.list_repository_tags(namespace_name, repo_name)
|
||||
tags_query = tags_query.limit(limit).offset(offset)
|
||||
tags_query = (tags_query
|
||||
.order_by(database.RepositoryTag.id)
|
||||
.limit(limit + 1))
|
||||
|
||||
if start_id is not None:
|
||||
tags_query = tags_query.where(database.RepositoryTag.id >= start_id)
|
||||
|
||||
return [_tag_view(tag) for tag in tags_query]
|
||||
|
||||
def get_visible_repositories(self, username, limit, offset, include_public=None):
|
||||
def get_visible_repositories(self, username, start_id, limit, include_public=None):
|
||||
if include_public is None:
|
||||
include_public = (username is None)
|
||||
|
||||
query = model.repository.get_visible_repositories(username, kind_filter='image',
|
||||
include_public=include_public)
|
||||
query = query.limit(limit).offset(offset)
|
||||
query = model.repository.get_visible_repositories(username,
|
||||
kind_filter='image',
|
||||
include_public=include_public,
|
||||
start_id=start_id,
|
||||
limit=limit + 1)
|
||||
return [_repository_for_repo(repo) for repo in query]
|
||||
|
||||
def create_blob_upload(self, namespace_name, repo_name, upload_uuid, location_name,
|
||||
|
@ -295,7 +303,7 @@ def _docker_v1_metadata(namespace_name, repo_name, repo_image):
|
|||
def _repository_for_repo(repo):
|
||||
""" Returns a Repository object representing the Pre-OCI data model repo instance given. """
|
||||
return Repository(
|
||||
id=repo.id,
|
||||
id=repo.id or repo.rid,
|
||||
name=repo.name,
|
||||
namespace_name=repo.namespace_user.username,
|
||||
description=repo.description,
|
||||
|
|
Reference in a new issue