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

View File

@ -1,5 +1,8 @@
import urllib
import csv
from django.http import HttpResponse
from datetime import date
from django.http import Http404
from django.shortcuts import get_object_or_404
@ -101,39 +104,16 @@ class RecipeList():
self.name = name
self.summary = summary
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(
def _get_recipe_list(milestone):
recipe_maintainer_history = RecipeMaintainerHistory.get_by_end_date(
milestone.end_date)
recipe_upstream_history = RecipeUpstreamHistory.get_last_by_date_range(
milestone.start_date,
milestone.end_date
)
recipe_list = []
self.recipe_list_count = 0
current_date = date.today()
for recipe in Recipe.objects.filter().order_by('pn'):
if current_date >= milestone.start_date and \
@ -166,7 +146,7 @@ class RecipeListView(ListView):
upstream_version = recipe_upstream.version
maintainer = RecipeMaintainer.get_maintainer_by_recipe_and_history(
recipe, self.recipe_maintainer_history)
recipe, recipe_maintainer_history)
if maintainer is None:
maintainer_name = ''
else:
@ -179,6 +159,36 @@ class RecipeListView(ListView):
recipe_list_item.maintainer_name = maintainer_name
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)
return recipe_list
@ -226,6 +236,24 @@ class RecipeListView(ListView):
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():
title = None
version = None
@ -434,3 +462,4 @@ class MaintainerListView(ListView):
context['current_week'] = self.current_week
return context

View File

@ -71,7 +71,7 @@
<li class="divider-vertical"></li>
<li class="lead" id="unknown-recipes">Unknown: <span class="text-warning">{{ recipes_unknown }}</strong></li>
</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">
{% block navs %}{% endblock %}
</ul>