[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