[yocto] [rrs][PATCH 2/2] rrs/views.py: Changed ORM to raw SQL calls

mariano.lopez at linux.intel.com mariano.lopez at linux.intel.com
Mon Jun 8 13:35:46 PDT 2015


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

Allow to use the new raw SQL call to get better performance in the
web page. Also removed SQL queries inside loops.
This is only for two views: recipes and maintainers

Signed-off-by: Mariano Lopez <mariano.lopez at linux.intel.com>
---
 rrs/views.py | 118 ++++++++++++++++++++++++++++++-----------------------------
 1 file changed, 61 insertions(+), 57 deletions(-)

diff --git a/rrs/views.py b/rrs/views.py
index c90fb37..ad741f6 100644
--- a/rrs/views.py
+++ b/rrs/views.py
@@ -12,7 +12,7 @@ from django.core.urlresolvers import resolve
 from layerindex.models import Recipe
 from rrs.models import Release, Milestone, Maintainer, RecipeMaintainerHistory, \
         RecipeMaintainer, RecipeUpstreamHistory, RecipeUpstream, \
-        RecipeDistro, RecipeUpgrade
+        RecipeDistro, RecipeUpgrade, Raw
 
 def _check_url_params(upstream_status, maintainer_name):
     get_object_or_404(Maintainer, name=maintainer_name)
@@ -53,28 +53,27 @@ def _get_milestone_statistics(milestone, maintainer_name=None):
         milestone_statistics['unknown'] = \
             RecipeUpstream.get_recipes_unknown(recipe_upstream_history).count()
     else:
-        recipe_maintainer_history = RecipeMaintainerHistory.get_by_end_date(
-            milestone.end_date)
-        recipe_maintainer_all = RecipeMaintainer.objects.filter(history = recipe_maintainer_history,
-            maintainer__name = maintainer_name)
+        recipe_maintainer_history = Raw.get_remahi_by_end_date(
+                milestone.end_date)
+        recipe_maintainer_all = Raw.get_re_by_mantainer_and_date(
+                maintainer_name, recipe_maintainer_history[0])
         milestone_statistics['all'] = len(recipe_maintainer_all)
-
-        recipe_upstream_all = []
-        for rm in recipe_maintainer_all:
-            ru_qry = RecipeUpstream.objects.filter(recipe = rm.recipe, history =
-                        recipe_upstream_history)
-            if ru_qry:
-                recipe_upstream_all.append(ru_qry[0])
+        if recipe_upstream_history:
+            recipe_upstream_all = Raw.get_reup_by_recipes_and_date(
+                    recipe_maintainer_all, recipe_upstream_history.id)
+        else:
+            recipe_upstream_all = Raw.get_reup_by_recipes_and_date(
+                    recipe_maintainer_all)
 
         milestone_statistics['up_to_date'] = 0
         milestone_statistics['not_updated'] = 0
         milestone_statistics['cant_be_updated'] = 0
         milestone_statistics['unknown'] = 0
         for ru in recipe_upstream_all:
-            if ru.status == 'Y':
+            if ru['status'] == 'Y':
                 milestone_statistics['up_to_date'] += 1
-            elif ru.status == 'N':
-                if ru.no_update_reason == '':
+            elif ru['status'] == 'N':
+                if ru['no_update_reason'] == '':
                     milestone_statistics['not_updated'] += 1
                 else:
                     milestone_statistics['cant_be_updated'] += 1
@@ -106,8 +105,8 @@ class RecipeList():
         self.summary = summary
 
 def _get_recipe_list(milestone):
-    recipe_maintainer_history = RecipeMaintainerHistory.get_by_end_date(
-        milestone.end_date)
+    recipe_maintainer_history = Raw.get_remahi_by_end_date(
+                milestone.end_date)
 
     recipe_upstream_history = RecipeUpstreamHistory.get_last_by_date_range(
         milestone.start_date,
@@ -115,57 +114,62 @@ def _get_recipe_list(milestone):
     )
 
     recipe_list = []
+    recipes_ids = []
+    recipe_upstream_dict_all = {}
+    maintainers_dict_all = {}
     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
+    recipes = Raw.get_reupg_by_date(
+            milestone.end_date)
+    for recipe in recipes:
+        recipes_ids.append(recipe['id'])
+
+    if recipe_upstream_history:
+        recipe_upstream_all = Raw.get_reup_by_recipes_and_date(
+                recipes_ids, recipe_upstream_history.id)
+        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 ma in maintainers_all:
+            maintainers_dict_all[ma['recipe_id']] = ma['name']
+    else:
+        recipe_upstream_all = None
 
+    for recipe in recipes:
         upstream_version = ''
         upstream_status = ''
         no_update_reason = ''
+
         if recipe_upstream_history:
-            recipe_upstream = RecipeUpstream.get_by_recipe_and_history(
-                    recipe, recipe_upstream_history)
-
-            if recipe_upstream is None:
-                recipe_upstream = RecipeUpstream()
-                recipe_upstream.history = recipe_upstream_history
-                recipe_upstream.recipe = recipe
-                recipe_upstream.version = ''
-                recipe_upstream.type = 'M' # Manual
-                recipe_upstream.status = 'U' # Unknown
-                recipe_upstream.no_update_reason = ''
-                recipe_upstream.date = recipe_upstream_history.end_date
-                recipe_upstream.save()
-
-            if recipe_upstream.status == 'N' and recipe_upstream.no_update_reason:
-                recipe_upstream.status = 'C'
+            recipe_upstream = recipe_upstream_dict_all.get(recipe['id'])
+            if not recipe_upstream:
+                recipe_add =  Recipe.objects.filter(id = recipe['id'])[0]
+                recipe_upstream_add = RecipeUpstream()
+                recipe_upstream_add.history = recipe_upstream_history
+                recipe_upstream_add.recipe = recipe_add
+                recipe_upstream_add.version = ''
+                recipe_upstream_add.type = 'M' # Manual
+                recipe_upstream_add.status = 'U' # Unknown
+                recipe_upstream_add.no_update_reason = ''
+                recipe_upstream_add.date = recipe_upstream_history.end_date
+                recipe_upstream_add.save()
+                recipe_upstream = {'version': '', 'status': 'U', 'type': 'M',
+                        'no_update_reason': ''}
+
+            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]
+                    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
-            no_update_reason = recipe_upstream.no_update_reason
-
-        maintainer = RecipeMaintainer.get_maintainer_by_recipe_and_history(
-                recipe, recipe_maintainer_history)
-        if maintainer is None:
-            maintainer_name = ''
-        else:
-            maintainer_name = maintainer.name
+            upstream_version = recipe_upstream['version']
+            no_update_reason = recipe_upstream['no_update_reason']
 
-        recipe_list_item = RecipeList(recipe.id, recipe.pn, recipe.summary)
-        recipe_list_item.version = version
+        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.maintainer_name = maintainer_name
-- 
1.9.1




More information about the yocto mailing list