layerindex-web/rrs/views.py
Aníbal Limón a7ede0d126 rrs: Add initial support of recipes page
templates/rrs/base_toplevel.html: Add support for display statistics by
Milestone.
templates/rrs/recipes.html: Add initial page that display Recipe
status by Milestone also details of every recipe.
rrs/views.py: Add RecipeLitView for support recipes page.
rrs/models.py: Add helper functions.
rrs/static/*: Add css and js resources.

Signed-off-by: Aníbal Limón <anibal.limon@linux.intel.com>
2018-05-04 23:57:51 +12:00

129 lines
5.0 KiB
Python

import urllib
from django.shortcuts import get_object_or_404
from django.views.generic import ListView
from django.core.urlresolvers import resolve
from layerindex.models import Recipe
from rrs.models import Milestone, Maintainer, RecipeMaintainer, RecipeUpstream, \
RecipeUpstreamHistory
class RecipeList():
name = None
version = None
summary = None
upstream_status = None
upstream_version = None
maintainer_name = None
def __init__(self, name, version, summary, upstream_status,
upstream_version, maintainer_name):
self.name = name
self.version = version
self.summary = summary
self.upstream_status = upstream_status
self.upstream_version = upstream_version
self.maintainer_name = maintainer_name
class RecipeListView(ListView):
context_object_name = 'recipe_list'
def get_queryset(self):
self.milestone_name = self.kwargs['milestone_name']
milestone = get_object_or_404(Milestone, 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'
recipe_upstream_history = RecipeUpstreamHistory.get_last_by_date_range(
milestone.start_date,
milestone.end_date
)
recipe_list = []
self.recipe_list_count = 0
self.recipes_up_to_date = 0
self.recipes_not_updated = 0
self.recipes_unknown = 0
self.recipes_percentage = '0.00'
if not recipe_upstream_history is None:
recipe_qry = Recipe.objects.filter().order_by('pn')
# get statistics by milestone
recipes_all = RecipeUpstream.objects.filter(history =
recipe_upstream_history).count()
self.recipes_up_to_date = RecipeUpstream.objects.filter(history =
recipe_upstream_history, status = 'Y').count()
self.recipes_not_updated = RecipeUpstream.objects.filter(history =
recipe_upstream_history, status = 'N').count()
self.recipes_unknown = recipes_all - (self.recipes_up_to_date +
self.recipes_not_updated)
self.recipes_percentage = "%.2f" % \
((float(self.recipes_up_to_date) / float(recipes_all)) * 100)
for recipe in recipe_qry:
recipe_upstream = RecipeUpstream.get_by_recipe_and_history(
recipe, recipe_upstream_history)
recipe_upstream_status = \
RecipeUpstream.RECIPE_UPSTREAM_STATUS_CHOICES_DICT[
recipe_upstream.status]
if self.upstream_status != 'All' and self.upstream_status != recipe_upstream_status:
continue
maintainer = RecipeMaintainer.get_maintainer_by_recipe(recipe)
if self.maintainer_name != 'All' and self.maintainer_name != maintainer.name:
continue
recipe_list_item = RecipeList(recipe.pn, recipe.pv, recipe.summary,
recipe_upstream_status, recipe_upstream.version, maintainer.name)
recipe_list.append(recipe_list_item)
self.recipe_list_count = len(recipe_list)
return recipe_list
def get_context_data(self, **kwargs):
context = super(RecipeListView, self).get_context_data(**kwargs)
context['this_url_name'] = resolve(self.request.path_info).url_name
context['milestone_name'] = self.milestone_name
context['all_milestones'] = Milestone.objects.filter().order_by('-id')
context['recipes_percentage'] = self.recipes_percentage
context['recipes_up_to_date'] = self.recipes_up_to_date
context['recipes_not_updated'] = self.recipes_not_updated
context['recipes_unknown'] = self.recipes_unknown
context['recipe_list_count'] = self.recipe_list_count
context['upstream_status'] = self.upstream_status
all_upstream_status = ['All']
for us in RecipeUpstream.RECIPE_UPSTREAM_STATUS_CHOICES:
all_upstream_status.append(us[1])
context['all_upstream_status'] = all_upstream_status
context['maintainer_name'] = self.maintainer_name
all_maintainers = ['All']
for rm in RecipeMaintainer.objects.filter().values(
'maintainer__name').distinct().order_by('maintainer__name'):
all_maintainers.append(rm['maintainer__name'])
context['all_maintainers'] = all_maintainers
extra_url_param = '?' + urllib.urlencode({
'upstream_status': self.upstream_status,
'maintainer_name': self.maintainer_name.encode('utf8')
})
context['extra_url_param'] = extra_url_param
return context