rrs: Add support for export Recipes reports by Release/Milestone

Signed-off-by: Aníbal Limón <anibal.limon@linux.intel.com>
This commit is contained in:
Aníbal Limón 2015-02-16 23:26:55 -06:00 committed by Paul Eggleton
parent 73a90437c3
commit e1e3b37243
3 changed files with 85 additions and 53 deletions

View File

@ -1,7 +1,7 @@
from django.conf.urls import patterns, include, url from django.conf.urls import patterns, include, url
from rrs.models import Release, Milestone from rrs.models import Release, Milestone
from rrs.views import RecipeListView, RecipeDetailView, MaintainerListView from rrs.views import RecipeListView, recipes_report, RecipeDetailView, MaintainerListView
urlpatterns = patterns('', urlpatterns = patterns('',
url(r'^$', redirect_to, url(r'^$', redirect_to,
@ -18,6 +18,9 @@ urlpatterns = patterns('',
RecipeListView.as_view( RecipeListView.as_view(
template_name='rrs/recipes.html'), template_name='rrs/recipes.html'),
name='recipes'), name='recipes'),
url(r'^recipesreport/(?P<release_name>.*)/(?P<milestone_name>.*)/$',
recipes_report,
name="recipesreport"),
url(r'^recipedetail/(?P<pk>\d+)/$', url(r'^recipedetail/(?P<pk>\d+)/$',
RecipeDetailView.as_view( RecipeDetailView.as_view(
template_name='rrs/recipedetail.html'), template_name='rrs/recipedetail.html'),

View File

@ -1,5 +1,8 @@
import urllib import urllib
import csv
from django.http import HttpResponse
from datetime import date from datetime import date
from django.http import Http404 from django.http import Http404
from django.shortcuts import get_object_or_404 from django.shortcuts import get_object_or_404
@ -101,39 +104,16 @@ class RecipeList():
self.name = name self.name = name
self.summary = summary self.summary = summary
class RecipeListView(ListView): def _get_recipe_list(milestone):
context_object_name = 'recipe_list' recipe_maintainer_history = RecipeMaintainerHistory.get_by_end_date(
def get_queryset(self):
self.release_name = self.kwargs['release_name']
release = get_object_or_404(Release, name=self.release_name)
self.milestone_name = self.kwargs['milestone_name']
milestone = get_object_or_404(Milestone, release = release, name=self.milestone_name)
if 'upstream_status' in self.request.GET.keys():
self.upstream_status = self.request.GET['upstream_status']
else:
self.upstream_status = 'All'
if 'maintainer_name' in self.request.GET.keys():
self.maintainer_name = self.request.GET['maintainer_name']
else:
self.maintainer_name = 'All'
_check_url_params(self.upstream_status, self.maintainer_name)
self.milestone_statistics = _get_milestone_statistics(milestone)
self.recipe_maintainer_history = RecipeMaintainerHistory.get_by_end_date(
milestone.end_date) milestone.end_date)
recipe_upstream_history = RecipeUpstreamHistory.get_last_by_date_range( recipe_upstream_history = RecipeUpstreamHistory.get_last_by_date_range(
milestone.start_date, milestone.start_date,
milestone.end_date milestone.end_date
) )
recipe_list = [] recipe_list = []
self.recipe_list_count = 0
current_date = date.today() current_date = date.today()
for recipe in Recipe.objects.filter().order_by('pn'): for recipe in Recipe.objects.filter().order_by('pn'):
if current_date >= milestone.start_date and \ if current_date >= milestone.start_date and \
@ -166,7 +146,7 @@ class RecipeListView(ListView):
upstream_version = recipe_upstream.version upstream_version = recipe_upstream.version
maintainer = RecipeMaintainer.get_maintainer_by_recipe_and_history( maintainer = RecipeMaintainer.get_maintainer_by_recipe_and_history(
recipe, self.recipe_maintainer_history) recipe, recipe_maintainer_history)
if maintainer is None: if maintainer is None:
maintainer_name = '' maintainer_name = ''
else: else:
@ -179,6 +159,36 @@ class RecipeListView(ListView):
recipe_list_item.maintainer_name = maintainer_name recipe_list_item.maintainer_name = maintainer_name
recipe_list.append(recipe_list_item) recipe_list.append(recipe_list_item)
return recipe_list
class RecipeListView(ListView):
context_object_name = 'recipe_list'
def get_queryset(self):
self.release_name = self.kwargs['release_name']
release = get_object_or_404(Release, name=self.release_name)
self.milestone_name = self.kwargs['milestone_name']
milestone = get_object_or_404(Milestone, release = release, name=self.milestone_name)
if 'upstream_status' in self.request.GET.keys():
self.upstream_status = self.request.GET['upstream_status']
else:
self.upstream_status = 'All'
if 'maintainer_name' in self.request.GET.keys():
self.maintainer_name = self.request.GET['maintainer_name']
else:
self.maintainer_name = 'All'
_check_url_params(self.upstream_status, self.maintainer_name)
self.milestone_statistics = _get_milestone_statistics(milestone)
self.recipe_maintainer_history = RecipeMaintainerHistory.get_by_end_date(
milestone.end_date)
recipe_list = _get_recipe_list(milestone)
self.recipe_list_count = len(recipe_list) self.recipe_list_count = len(recipe_list)
return recipe_list return recipe_list
@ -226,6 +236,24 @@ class RecipeListView(ListView):
return context return context
def recipes_report(request, release_name, milestone_name):
release = get_object_or_404(Release, name=release_name)
milestone = get_object_or_404(Milestone, release = release, name=milestone_name)
recipe_list = _get_recipe_list(milestone)
response = HttpResponse(mimetype='text/csv')
response['Content-Disposition'] = 'attachment; filename="%s.csv"' % (milestone_name)
writer = csv.writer(response)
writer.writerow(['Upstream status', 'Name', 'Version',
'Upstream version', 'Maintainer', 'Summary'])
for r in recipe_list:
writer.writerow([r.upstream_status, r.name, r.version,
r.upstream_version, r.maintainer_name.encode('utf-8'), r.summary])
return response
class RecipeUpgradeDetail(): class RecipeUpgradeDetail():
title = None title = None
version = None version = None
@ -434,3 +462,4 @@ class MaintainerListView(ListView):
context['current_week'] = self.current_week context['current_week'] = self.current_week
return context return context

View File

@ -71,7 +71,7 @@
<li class="divider-vertical"></li> <li class="divider-vertical"></li>
<li class="lead" id="unknown-recipes">Unknown: <span class="text-warning">{{ recipes_unknown }}</strong></li> <li class="lead" id="unknown-recipes">Unknown: <span class="text-warning">{{ recipes_unknown }}</strong></li>
</ul> </ul>
<a href="#" class="btn pull-right">Export recipe list</a> <a href="{% url 'recipesreport' release_name milestone_name %}" class="btn pull-right">Export recipe list</a>
<ul class="nav"> <ul class="nav">
{% block navs %}{% endblock %} {% block navs %}{% endblock %}
</ul> </ul>