On 26/06/2015 20:35, "mariano.lo...@linux.intel.com" <mariano.lo...@linux.intel.com> wrote:
>From: Mariano Lopez <mariano.lo...@linux.intel.com> > >This add a tooltip in the upstream status field that >show how long the recipe hasn't been updated. A tooltip is probably not the best way of showing this. If this information is of interest in the context of the recipes table, I would suggest adding a "Last update" column to the table, between the 'Upstream status' and the 'Maintainer' columns. The 'Last update' column should be sortable if possible. To improve readability and facilitate comparison between values in the table, I would change the date format, since the one we are currently using (e.g. Dec. 9, 2013, 6:01 p.m.) is too verbose. Something like MM/DD/YYYY (or DD/MM/YYYY) would work better. Also, I would remove the time, since it is probably not that relevant in this context (does it really matter if the patch was merged at 6:01 pm or at 3:25 pm?). The date format should be changed across the tool (both in the recipes table and the recipe details page). Cheers Belén > >Signed-off-by: Mariano Lopez <mariano.lo...@linux.intel.com> >--- > rrs/models.py | 15 +++++++++++++++ > rrs/views.py | 23 ++++++++++++++++++++++- > templates/rrs/recipes.html | 8 ++++---- > 3 files changed, 41 insertions(+), 5 deletions(-) > >diff --git a/rrs/models.py b/rrs/models.py >index 320670c..77e8442 100644 >--- a/rrs/models.py >+++ b/rrs/models.py >@@ -448,6 +448,21 @@ class Raw(): > return Raw.dictfetchall(cur) > > @staticmethod >+ def get_reup_by_last_updated(date): >+ cur = connection.cursor() >+ cur.execute("""SELECT te.recipe_id, te.status, te.date, >te.rownum FROM( >+ SELECT recipe_id, status, date, ROW_NUMBER() OVER( >+ PARTITION BY recipe_id >+ ORDER BY date DESC >+ ) AS rownum >+ FROM rrs_RecipeUpstream >+ WHERE status = 'Y' >+ AND date <= %s) AS te >+ WHERE te.rownum = 1; >+ """, [date]) >+ return Raw.dictfetchall(cur) >+ >+ @staticmethod > def dictfetchall(cursor): > "Returns all rows from a cursor as a dict" > desc = cursor.description >diff --git a/rrs/views.py b/rrs/views.py >index ad741f6..b0a5935 100644 >--- a/rrs/views.py >+++ b/rrs/views.py >@@ -3,7 +3,7 @@ import urllib > import csv > from django.http import HttpResponse > >-from datetime import date >+from datetime import date, datetime > from django.http import Http404 > from django.shortcuts import get_object_or_404 > from django.views.generic import ListView, DetailView >@@ -96,6 +96,7 @@ class RecipeList(): > summary = None > upstream_status = None > upstream_version = None >+ outdated = None > maintainer_name = None > no_update_reason = None > >@@ -116,6 +117,7 @@ def _get_recipe_list(milestone): > recipe_list = [] > recipes_ids = [] > recipe_upstream_dict_all = {} >+ recipe_last_updated_dict_all = {} > maintainers_dict_all = {} > current_date = date.today() > >@@ -127,12 +129,17 @@ def _get_recipe_list(milestone): > if recipe_upstream_history: > recipe_upstream_all = Raw.get_reup_by_recipes_and_date( > recipes_ids, recipe_upstream_history.id) >+ recipe_last_updated = Raw.get_reup_by_last_updated( >+ milestone.end_date) > maintainers_all = Raw.get_ma_by_recipes_and_date( > recipes_ids, recipe_maintainer_history[0]) > for reup in recipe_upstream_all: > recipe_upstream_dict_all[reup['recipe_id']] = reup >+ for rela in recipe_last_updated: >+ recipe_last_updated_dict_all[rela['recipe_id']] = rela > for ma in maintainers_all: > maintainers_dict_all[ma['recipe_id']] = ma['name'] >+ > else: > recipe_upstream_all = None > >@@ -140,6 +147,7 @@ def _get_recipe_list(milestone): > upstream_version = '' > upstream_status = '' > no_update_reason = '' >+ outdated = '' > > if recipe_upstream_history: > recipe_upstream = recipe_upstream_dict_all.get(recipe['id']) >@@ -167,11 +175,24 @@ def _get_recipe_list(milestone): > upstream_version = recipe_upstream['version'] > no_update_reason = recipe_upstream['no_update_reason'] > >+ #Get how long the recipe hasn't been updated >+ if recipe_upstream['status'] != 'Y': >+ recipe_last_updated = \ >+ recipe_last_updated_dict_all.get(recipe['id']) >+ if recipe_last_updated: >+ recipe_date = recipe_last_updated['date'] >+ outdated = (current_date - recipe_date.date()).days >+ else: >+ outdated = 'Unknown' >+ else: >+ outdated = 'Up-to-date' >+ > maintainer_name = maintainers_dict_all.get(recipe['id'], '') > recipe_list_item = RecipeList(recipe['id'], recipe['pn'], >recipe['summary']) > recipe_list_item.version = recipe['version'] > recipe_list_item.upstream_status = upstream_status > recipe_list_item.upstream_version = upstream_version >+ recipe_list_item.outdated = outdated > recipe_list_item.maintainer_name = maintainer_name > recipe_list_item.no_update_reason = no_update_reason > recipe_list.append(recipe_list_item) >diff --git a/templates/rrs/recipes.html b/templates/rrs/recipes.html >index 493b7cf..ca3c93e 100644 >--- a/templates/rrs/recipes.html >+++ b/templates/rrs/recipes.html >@@ -88,13 +88,13 @@ > <td class="version_column">{{ r.version }}</td> > <td class="upstream_version_column">{{ r.upstream_version }}</td> > {% if r.upstream_status == "Up-to-date" %} >- <td class="text-success"> >+ <td class="text-success" data-toggle="tooltip" >title="{{r.outdated}}"> > {% elif r.upstream_status == "Not updated" %} >- <td class="text-error"> >+ <td class="text-error" data-toggle="tooltip" title="{{r.outdated}}"> > {% elif r.upstream_status == "Can't be updated" %} >- <td class="muted"> >+ <td class="muted" data-toggle="tooltip" title="{{r.outdated}}"> > {% else %} >- <td class="text-warning"> >+ <td class="text-warning" data-toggle="tooltip" >title="{{r.outdated}}"> > {% endif %} > {{ r.upstream_status }} > </td> >-- >1.9.1 > >-- >_______________________________________________ >yocto mailing list >yocto@yoctoproject.org >https://lists.yoctoproject.org/listinfo/yocto -- _______________________________________________ yocto mailing list yocto@yoctoproject.org https://lists.yoctoproject.org/listinfo/yocto