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)
|
.group_by(RepositoryActionCount.repository, Repository.name, Namespace.username)
|
||||||
.having(fn.Sum(RepositoryActionCount.count) >= action_count_threshold)
|
.having(fn.Sum(RepositoryActionCount.count) >= action_count_threshold)
|
||||||
.tuples())
|
.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 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 *
|
from test.fixtures import *
|
||||||
|
|
||||||
def test_duplicate_repository_different_kinds(initialized_db):
|
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.
|
# Try to create an app repo with the same name, which should fail.
|
||||||
with pytest.raises(IntegrityError):
|
with pytest.raises(IntegrityError):
|
||||||
create_repository('devtable', 'somenewrepo', None, repo_kind='application')
|
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:
|
if not repo or token != repo.badge_token:
|
||||||
abort(404)
|
abort(404)
|
||||||
|
|
||||||
# Lookup the tags for the repository.
|
is_empty = model.repository.is_empty(namespace_name, repo_name)
|
||||||
tags = model.tag.list_repository_tags(namespace_name, repo_name)
|
|
||||||
is_empty = len(list(tags)) == 0
|
|
||||||
recent_build = model.build.get_recent_repository_build(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'):
|
if not is_empty and (not recent_build or recent_build.phase == 'complete'):
|
||||||
status_name = 'ready'
|
status_name = 'ready'
|
||||||
elif recent_build and recent_build.phase == 'error':
|
elif recent_build and recent_build.phase == 'error':
|
||||||
|
|
Reference in a new issue