Revert "Revert "Add filtering of builds and Version/Projects that is unexposed.""

This reverts commit 161d440763.
rtd2
Eric Holscher 2012-10-14 18:21:55 -07:00
parent 161d440763
commit 5ce0bce433
10 changed files with 208 additions and 18 deletions

View File

@ -217,6 +217,10 @@ p.build-success { font-size: .8em; color: #108830; margin: 0 0 3px; }
p.build-failure { font-size: .8em; color: #dc1020; margin: 0 0 3px; }
p.build-missing { font-size: .8em; color: #9d9a55; margin: 0 0 3px; }
/* build page */
#build_list select { width: 10em; }
/* dashboard bar */

View File

@ -0,0 +1,29 @@
import django_filters
from builds import constants
from builds.models import Build, Version
ANY_REPO = (
('', 'Any'),
)
BUILD_TYPES = ANY_REPO + constants.BUILD_TYPES
class VersionFilter(django_filters.FilterSet):
project = django_filters.CharFilter(name='project__name', lookup_type="icontains")
slug= django_filters.CharFilter(label="Slug", name='slug', lookup_type='icontains')
class Meta:
model = Version
fields = ['project', 'slug']
class BuildFilter(django_filters.FilterSet):
date = django_filters.DateRangeFilter(label="Build Date", name="date")
type = django_filters.ChoiceFilter(label="Build Type", choices=BUILD_TYPES)
class Meta:
model = Build
fields = ['type', 'date', 'version', 'success']

View File

@ -4,6 +4,7 @@ from django.shortcuts import get_object_or_404
from django.views.generic.list_detail import object_list, object_detail
from builds.models import Build
from builds.filters import BuildFilter
from projects.models import Project
from taggit.models import Tag
@ -12,6 +13,7 @@ def build_list(request, project_slug=None, tag=None):
"""Show a list of builds.
"""
queryset = Build.objects.all()
filter = BuildFilter(request.GET, queryset=queryset)
if tag:
tag = get_object_or_404(Tag, slug=tag)
@ -28,6 +30,7 @@ def build_list(request, project_slug=None, tag=None):
queryset=queryset,
extra_context={
'project': project,
'filter': filter,
'tag': tag,
'active_builds': active_builds
},

View File

@ -0,0 +1,25 @@
import django_filters
from projects import constants
from projects.models import Project
ANY_REPO = (
('', 'Any'),
)
REPO_CHOICES = ANY_REPO + constants.REPO_CHOICES
class ProjectFilter(django_filters.FilterSet):
name = django_filters.CharFilter(label="Name", name='name', lookup_type='icontains')
pub_date = django_filters.DateRangeFilter(label="Created Date", name="pub_date")
repo = django_filters.CharFilter(label="Repository URL", name='repo', lookup_type='icontains')
repo_type = django_filters.ChoiceFilter(
label="Repository",
name='repo',
lookup_type='icontains',
choices=REPO_CHOICES,
)
class Meta:
model = Project
fields = ['name', 'pub_date', 'repo', 'repo_type']

View File

@ -0,0 +1,29 @@
{% extends "base.html" %}
{% load i18n %}
{% block nav-dashboard %} class="active"{% endblock %}
{% block project_editing %}
<!-- BEGIN filter bar -->
<div id="project_bar">
<div class="wrapper">
<div class="project-title">
<h1>Filter</h1>
</div>
<div class="options">
<ul>
{% block filter_bar %}{% endblock %}
</ul>
</div>
</div>
</div>
<!-- END filter bar -->
{% endblock %}

View File

@ -7,30 +7,40 @@
{% block title %}Builds{% endblock %}
{% block content %}
<div id="build_list">
{% autopaginate build_list 15 %}
<form action="" method="get">
{{ filter.form.as_p }}
<input type="submit" value="Filter" />
</form>
<!-- BEGIN builds list -->
<div class="module">
<div class="module-wrapper">
{% autopaginate filter 15 %}
<div class="module-header">
<h1>{% trans "Recent Builds" %}</h1>
</div>
<div class="module-list">
<div class="module-list-wrapper">
<ul>
{% include "core/build_list_detailed.html" %}
</ul>
</div>
</div>
<!-- BEGIN builds list -->
<div class="module">
<div class="module-wrapper">
<div class="module-header">
<h1>{% trans "Recent Builds" %}</h1>
</div>
</div>
<!-- END builds list -->
{% paginate %}
<div class="module-list">
<div class="module-list-wrapper">
<ul>
{% with filter as build_list %}
{% include "core/build_list_detailed.html" %}
{% endwith %}
</ul>
</div>
</div>
</div>
</div>
<!-- END builds list -->
{% paginate %}
</div>
{% endblock %}

View File

@ -0,0 +1,22 @@
{% load i18n %}
<!-- BEGIN project bar -->
<div id="project_bar">
<div class="wrapper">
<div class="project-title">
<h1>Filter</h1>
</div>
<div class="options">
<ul>
{% block filter_bar %}{% endblock %}
</ul>
</div>
</div>
</div>
<!-- END project bar -->

View File

@ -0,0 +1,13 @@
{% load i18n %}
{% for obj in filter %}
<li class="module-item col-span">
<div id="obj-{{ build.id }}">
<a href="{{ obj.get_absolute_url }}">
{{ obj }}
</a>
</div>
</li>
{% empty %}
<li class="module-item quiet">{% trans "No projects found" %}</li>
{% endfor %}

View File

@ -0,0 +1,43 @@
{% extends "base_filter.html" %}
{% load i18n %}
{% load pagination_tags %}
{% block title %}Filter{% endblock %}
{% block filter_bar %}
<form method="get">
{{ filter.form.as_p }}
<input type="submit" value="Filter" />
</form>
{% endblock %}
{% block content %}
{% autopaginate filter 15 %}
<!-- BEGIN builds list -->
<div class="module">
<div class="module-wrapper">
<div class="module-header">
<h1>{% trans "Filtered Results" %}</h1>
</div>
<div class="module-list">
<div class="module-list-wrapper">
<ul>
{% include "core/filter_list.html" %}
</ul>
</div>
</div>
</div>
</div>
<!-- END builds list -->
{% paginate %}
{% endblock %}

View File

@ -6,9 +6,11 @@ from django.views.generic.simple import direct_to_template
from tastypie.api import Api
from api.base import ProjectResource, UserResource, BuildResource, VersionResource, FileResource
from builds.filters import VersionFilter
from core.forms import UserProfileForm
from core.views import SearchView
from projects.feeds import LatestProjectsFeed, NewProjectsFeed
from projects.filters import ProjectFilter
v1_api = Api(api_name='v1')
v1_api.register(BuildResource())
@ -60,6 +62,16 @@ urlpatterns = patterns('',
url(r'^random/$', 'core.views.random_page', name='random_page'),
url(r'^depth/$', 'core.views.queue_depth', name='queue_depth'),
url(r'^live/$', 'core.views.live_builds', name='live_builds'),
url(r'^filter/version/$',
'django_filters.views.object_filter',
{ 'filter_class': VersionFilter, 'template_name': 'filter.html' },
name='filter_version'
),
url(r'^filter/project/$',
'django_filters.views.object_filter',
{ 'filter_class': ProjectFilter, 'template_name': 'filter.html' },
name='filter_project'
),
url(r'^wipe/(?P<project_slug>[-\w]+)/(?P<version_slug>[-\w]+)/$',
'core.views.wipe_version',
name='wipe_version'