summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAníbal Limón <anibal.limon@linux.intel.com>2015-02-16 23:26:55 -0600
committerPaul Eggleton <paul.eggleton@linux.intel.com>2018-05-04 23:57:51 +1200
commite1e3b372436e869ce6550f40f0132d1928315c69 (patch)
tree2e4ee1ba011b1f7a1d928cdbca45044d519ebdec
parent73a90437c32fa0095d592bc760325296f7482cce (diff)
downloadopenembedded-core-contrib-e1e3b372436e869ce6550f40f0132d1928315c69.tar.gz
rrs: Add support for export Recipes reports by Release/Milestone
Signed-off-by: Aníbal Limón <anibal.limon@linux.intel.com>
-rw-r--r--rrs/urls.py5
-rw-r--r--rrs/views.py131
-rw-r--r--templates/rrs/base_toplevel.html2
3 files changed, 85 insertions, 53 deletions
diff --git a/rrs/urls.py b/rrs/urls.py
index df2c178ce3..a44328f1dd 100644
--- a/rrs/urls.py
+++ b/rrs/urls.py
@@ -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'),
diff --git a/rrs/views.py b/rrs/views.py
index cb11e1784a..8072e607ed 100644
--- a/rrs/views.py
+++ b/rrs/views.py
@@ -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,6 +104,63 @@ class RecipeList():
self.name = name
self.summary = summary
+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 = []
+ current_date = date.today()
+ for recipe in Recipe.objects.filter().order_by('pn'):
+ if current_date >= milestone.start_date and \
+ current_date <= milestone.end_date:
+ version = recipe.pv
+ else:
+ rup = RecipeUpgrade.get_by_recipe_and_date(recipe,
+ milestone.end_date)
+
+ if rup is None: # Recipe don't exit in this Milestone
+ continue
+
+ version = rup.version
+
+ recipe_upstream = RecipeUpstream.get_by_recipe_and_history(
+ recipe, recipe_upstream_history)
+
+ if recipe_upstream is None:
+ upstream_status = ''
+ upstream_version = ''
+ else:
+ if recipe_upstream.status == 'N' and recipe_upstream.no_update_reason:
+ recipe_upstream.status = 'C'
+ upstream_status = \
+ RecipeUpstream.RECIPE_UPSTREAM_STATUS_CHOICES_DICT[
+ recipe_upstream.status]
+ if upstream_status == 'Downgrade':
+ upstream_status = 'Unknown' # Downgrade is displayed as Unknown
+
+ upstream_version = recipe_upstream.version
+
+ maintainer = RecipeMaintainer.get_maintainer_by_recipe_and_history(
+ recipe, recipe_maintainer_history)
+ if maintainer is None:
+ maintainer_name = ''
+ else:
+ maintainer_name = maintainer.name
+
+ recipe_list_item = RecipeList(recipe.id, recipe.pn, recipe.summary)
+ recipe_list_item.version = version
+ recipe_list_item.upstream_status = upstream_status
+ recipe_list_item.upstream_version = upstream_version
+ recipe_list_item.maintainer_name = maintainer_name
+ recipe_list.append(recipe_list_item)
+
+ return recipe_list
+
class RecipeListView(ListView):
context_object_name = 'recipe_list'
@@ -127,58 +187,8 @@ class RecipeListView(ListView):
self.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 \
- current_date <= milestone.end_date:
- version = recipe.pv
- else:
- rup = RecipeUpgrade.get_by_recipe_and_date(recipe,
- milestone.end_date)
-
- if rup is None: # Recipe don't exit in this Milestone
- continue
-
- version = rup.version
-
- recipe_upstream = RecipeUpstream.get_by_recipe_and_history(
- recipe, recipe_upstream_history)
-
- if recipe_upstream is None:
- upstream_status = ''
- upstream_version = ''
- else:
- if recipe_upstream.status == 'N' and recipe_upstream.no_update_reason:
- recipe_upstream.status = 'C'
- upstream_status = \
- RecipeUpstream.RECIPE_UPSTREAM_STATUS_CHOICES_DICT[
- recipe_upstream.status]
- if upstream_status == 'Downgrade':
- upstream_status = 'Unknown' # Downgrade is displayed as Unknown
-
- upstream_version = recipe_upstream.version
-
- maintainer = RecipeMaintainer.get_maintainer_by_recipe_and_history(
- recipe, self.recipe_maintainer_history)
- if maintainer is None:
- maintainer_name = ''
- else:
- maintainer_name = maintainer.name
-
- recipe_list_item = RecipeList(recipe.id, recipe.pn, recipe.summary)
- recipe_list_item.version = version
- recipe_list_item.upstream_status = upstream_status
- recipe_list_item.upstream_version = upstream_version
- recipe_list_item.maintainer_name = maintainer_name
- recipe_list.append(recipe_list_item)
+ 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
+
diff --git a/templates/rrs/base_toplevel.html b/templates/rrs/base_toplevel.html
index c09a6bed93..1591acb5e3 100644
--- a/templates/rrs/base_toplevel.html
+++ b/templates/rrs/base_toplevel.html
@@ -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>