Merge pull request #2688 from coreos-inc/build-badge-query
Remove expensive call in build badge
This commit is contained in:
commit
b269cb84a3
3 changed files with 20 additions and 5 deletions
|
@ -620,3 +620,14 @@ def list_popular_public_repos(action_count_threshold, time_span, repo_kind='imag
|
|||
.group_by(RepositoryActionCount.repository, Repository.name, Namespace.username)
|
||||
.having(fn.Sum(RepositoryActionCount.count) >= action_count_threshold)
|
||||
.tuples())
|
||||
|
||||
|
||||
def is_empty(namespace_name, repository_name):
|
||||
""" Returns if the repository referenced by the given namespace and name is empty. If the repo
|
||||
doesn't exist, returns True.
|
||||
"""
|
||||
try:
|
||||
tag.list_repository_tags(namespace_name, repository_name).limit(1).get()
|
||||
return False
|
||||
except RepositoryTag.DoesNotExist:
|
||||
return True
|
||||
|
|
|
@ -2,7 +2,7 @@ import pytest
|
|||
|
||||
from peewee import IntegrityError
|
||||
|
||||
from data.model.repository import create_repository, purge_repository
|
||||
from data.model.repository import create_repository, purge_repository, is_empty
|
||||
from test.fixtures import *
|
||||
|
||||
def test_duplicate_repository_different_kinds(initialized_db):
|
||||
|
@ -12,3 +12,10 @@ def test_duplicate_repository_different_kinds(initialized_db):
|
|||
# Try to create an app repo with the same name, which should fail.
|
||||
with pytest.raises(IntegrityError):
|
||||
create_repository('devtable', 'somenewrepo', None, repo_kind='application')
|
||||
|
||||
|
||||
def test_is_empty(initialized_db):
|
||||
create_repository('devtable', 'somenewrepo', None, repo_kind='image')
|
||||
|
||||
assert is_empty('devtable', 'somenewrepo')
|
||||
assert not is_empty('devtable', 'simple')
|
||||
|
|
|
@ -479,11 +479,8 @@ def build_status_badge(namespace_name, repo_name):
|
|||
if not repo or token != repo.badge_token:
|
||||
abort(404)
|
||||
|
||||
# Lookup the tags for the repository.
|
||||
tags = model.tag.list_repository_tags(namespace_name, repo_name)
|
||||
is_empty = len(list(tags)) == 0
|
||||
is_empty = model.repository.is_empty(namespace_name, repo_name)
|
||||
recent_build = model.build.get_recent_repository_build(namespace_name, repo_name)
|
||||
|
||||
if not is_empty and (not recent_build or recent_build.phase == 'complete'):
|
||||
status_name = 'ready'
|
||||
elif recent_build and recent_build.phase == 'error':
|
||||
|
|
Reference in a new issue