[yocto] [PATCH] views.py: Add how long a recipe hasn't been updated

mariano.lopez at linux.intel.com mariano.lopez at linux.intel.com
Fri Jun 26 12:35:31 PDT 2015


From: Mariano Lopez <mariano.lopez at linux.intel.com>

This add a tooltip in the upstream status field that
show how long the recipe hasn't been updated.

Signed-off-by: Mariano Lopez <mariano.lopez at 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




More information about the yocto mailing list