From b8f51c7f9edf7427130ceecb80724146be19787f Mon Sep 17 00:00:00 2001 From: Paul Eggleton Date: Sat, 3 Mar 2018 00:05:13 +1300 Subject: rrs: handle maintenance plans in views Insert maintenance plan into views, their corresponding URLs and templates. Signed-off-by: Paul Eggleton --- rrs/models.py | 17 ++++++------ rrs/urls.py | 8 +++--- rrs/views.py | 59 ++++++++++++++++++++++++++++------------ templates/rrs/base_toplevel.html | 10 +++---- templates/rrs/maintainers.html | 20 +++++++------- templates/rrs/recipedetail.html | 6 ++-- templates/rrs/recipes.html | 2 +- 7 files changed, 73 insertions(+), 49 deletions(-) diff --git a/rrs/models.py b/rrs/models.py index a71d1b8ed9..35dcc40a26 100644 --- a/rrs/models.py +++ b/rrs/models.py @@ -43,8 +43,9 @@ class Release(models.Model): end_date = models.DateField(db_index=True) @staticmethod - def get_by_date(date): - release_qry = Release.objects.filter(start_date__lte = date, + def get_by_date(maintplan, date): + release_qry = Release.objects.filter(plan=maintplan, + start_date__lte = date, end_date__gte = date).order_by('-end_date') if release_qry: @@ -53,11 +54,11 @@ class Release(models.Model): return None @staticmethod - def get_current(): + def get_current(maintplan): current = date.today() - current_release = Release.get_by_date(current) + current_release = Release.get_by_date(maintplan, current) - return current_release or Release.objects.filter().order_by('-end_date')[0] + return current_release or Release.objects.filter(plan=maintplan).order_by('-end_date')[0] def __str__(self): return '%s' % (self.name) @@ -73,15 +74,15 @@ class Milestone(models.Model): """ Get milestones, filtering don't exist yet and ordering """ @staticmethod - def get_by_release_name(release_name): + def get_by_release_name(maintplan, release_name): milestones = [] today = date.today() - mall = Milestone.objects.get(release__name = release_name, name = 'All') + mall = Milestone.objects.get(release__plan=maintplan, release__name=release_name, name='All') if mall: milestones.append(mall) - mqry = Milestone.objects.filter(release__name = release_name).order_by('-end_date') + mqry = Milestone.objects.filter(release__plan=maintplan, release__name=release_name).order_by('-end_date') for m in mqry: if m.name == 'All': continue diff --git a/rrs/urls.py b/rrs/urls.py index 4bd316ec42..9cc596da85 100644 --- a/rrs/urls.py +++ b/rrs/urls.py @@ -7,18 +7,18 @@ from rrs.views import RecipeListView, recipes_report, RecipeDetailView, \ urlpatterns = patterns('', url(r'^$', FrontPageRedirect.as_view(), name='rrs_frontpage'), - url(r'^recipes/(?P.*)/(?P.*)/$', + url(r'^recipes/(?P.*)/(?P.*)/(?P.*)/$', RecipeListView.as_view( template_name='rrs/recipes.html'), name='rrs_recipes'), - url(r'^recipesreport/(?P.*)/(?P.*)/$', + url(r'^recipesreport/(?P.*)/(?P.*)/(?P.*)/$', recipes_report, name="rrs_recipesreport"), - url(r'^recipedetail/(?P\d+)/$', + url(r'^recipedetail/(?P.*)/(?P\d+)/$', RecipeDetailView.as_view( template_name='rrs/recipedetail.html'), name='rrs_recipedetail'), - url(r'^maintainers/(?P.*)/(?P.*)/$', + url(r'^maintainers/(?P.*)/(?P.*)/(?P.*)/$', MaintainerListView.as_view( template_name='rrs/maintainers.html'), name="rrs_maintainers"), diff --git a/rrs/views.py b/rrs/views.py index 4c5b92e564..445708c973 100644 --- a/rrs/views.py +++ b/rrs/views.py @@ -13,7 +13,7 @@ from django.db import connection from layerindex.models import Recipe from rrs.models import Release, Milestone, Maintainer, RecipeMaintainerHistory, \ RecipeMaintainer, RecipeUpstreamHistory, RecipeUpstream, \ - RecipeDistro, RecipeUpgrade + RecipeDistro, RecipeUpgrade, MaintenancePlan @@ -21,9 +21,16 @@ class FrontPageRedirect(RedirectView): permanent = False def get_redirect_url(self): - release_name = Release.get_current().name - milestone_name = Milestone.get_current(Release.get_current()).name - return reverse('rrs_recipes', args=(release_name, milestone_name)) + maintplan = MaintenancePlan.objects.first() + if not maintplan: + raise Exception('No maintenance plans defined') + release = Release.get_current(maintplan) + if not release: + raise Exception('No releases defined for maintenance plan %s' % maintplan.name) + milestone = Milestone.get_current(release) + if not milestone: + raise Exception('No milestones defined for release %s' % release.name) + return reverse('rrs_recipes', args=(maintplan.name, release.name, milestone.name)) def _check_url_params(upstream_status, maintainer_name): get_object_or_404(Maintainer, name=maintainer_name) @@ -456,8 +463,10 @@ class RecipeListView(ListView): context_object_name = 'recipe_list' def get_queryset(self): + self.maintplan_name = self.kwargs['maintplan_name'] + maintplan = get_object_or_404(MaintenancePlan, name=self.maintplan_name) self.release_name = self.kwargs['release_name'] - release = get_object_or_404(Release, name=self.release_name) + release = get_object_or_404(Release, plan=maintplan, name=self.release_name) self.milestone_name = self.kwargs['milestone_name'] milestone = get_object_or_404(Milestone, release = release, name=self.milestone_name) @@ -498,10 +507,12 @@ class RecipeListView(ListView): context['this_url_name'] = resolve(self.request.path_info).url_name + context['maintplan_name'] = self.maintplan_name + maintplan = get_object_or_404(MaintenancePlan, name=self.maintplan_name) context['release_name'] = self.release_name - context['all_releases'] = Release.objects.filter().order_by('-end_date') + context['all_releases'] = Release.objects.filter(plan=maintplan).order_by('-end_date') context['milestone_name'] = self.milestone_name - context['all_milestones'] = Milestone.get_by_release_name(self.release_name) + context['all_milestones'] = Milestone.get_by_release_name(maintplan, self.release_name) context['recipes_percentage'] = self.milestone_statistics['percentage'] context['recipes_all_upgraded'] = self.milestone_statistics['all_upgraded'] @@ -541,8 +552,9 @@ class RecipeListView(ListView): return context -def recipes_report(request, release_name, milestone_name): - release = get_object_or_404(Release, name=release_name) +def recipes_report(request, maintplan_name, release_name, milestone_name): + maintplan = get_object_or_404(MaintenancePlan, name=maintplan_name) + release = get_object_or_404(Release, plan=maintplan, name=release_name) milestone = get_object_or_404(Milestone, release = release, name=milestone_name) recipe_list = _get_recipe_list(milestone) @@ -563,6 +575,7 @@ def recipes_report(request, release_name, milestone_name): class RecipeUpgradeDetail(): title = None version = None + maintplan_name = None release_name = None milestone_name = None date = None @@ -571,10 +584,11 @@ class RecipeUpgradeDetail(): commit = None commit_url = None - def __init__(self, title, version, release_name, milestone_name, date, + def __init__(self, title, version, maintplan_name, release_name, milestone_name, date, maintainer_name, is_recipe_maintainer, commit, commit_url): self.title = title self.version = version + self.maintplan_name = maintplan_name self.release_name = release_name self.milestone_name = milestone_name self.date = date @@ -583,12 +597,12 @@ class RecipeUpgradeDetail(): self.commit = commit self.commit_url = commit_url -def _get_recipe_upgrade_detail(recipe_upgrade): +def _get_recipe_upgrade_detail(maintplan, recipe_upgrade): release_name = '' milestone_name = '' recipe_maintainer_history = None - release = Release.get_by_date(recipe_upgrade.commit_date) + release = Release.get_by_date(maintplan, recipe_upgrade.commit_date) if release: release_name = release.name milestone = Milestone.get_by_release_and_date(release, @@ -615,7 +629,7 @@ def _get_recipe_upgrade_detail(recipe_upgrade): '/commit/?id=' + recipe_upgrade.sha1 rud = RecipeUpgradeDetail(recipe_upgrade.title, recipe_upgrade.version, \ - release_name, milestone_name, commit_date, maintainer_name, \ + maintplan.name, release_name, milestone_name, commit_date, maintainer_name, \ is_recipe_maintainer, commit, commit_url) return rud @@ -623,13 +637,18 @@ def _get_recipe_upgrade_detail(recipe_upgrade): class RecipeDetailView(DetailView): model = Recipe + def get_queryset(self): + self.maintplan_name = self.kwargs['maintplan_name'] + return super(RecipeDetailView, self).get_queryset() + def get_context_data(self, **kwargs): context = super(RecipeDetailView, self).get_context_data(**kwargs) recipe = self.get_object() if not recipe: raise django.http.Http404 - release = Release.get_current() + maintplan = get_object_or_404(MaintenancePlan, name=self.maintplan_name) + release = Release.get_current(maintplan) context['release_name'] = release.name milestone = Milestone.get_current(release) context['milestone_name'] = milestone.name @@ -666,7 +685,7 @@ class RecipeDetailView(DetailView): context['recipe_upgrade_details'] = [] for ru in RecipeUpgrade.objects.filter(recipe = recipe).order_by('-commit_date'): - context['recipe_upgrade_details'].append(_get_recipe_upgrade_detail(ru)) + context['recipe_upgrade_details'].append(_get_recipe_upgrade_detail(maintplan, ru)) context['recipe_upgrade_detail_count'] = len(context['recipe_upgrade_details']) context['recipe_layer_branch_url'] = _get_layer_branch_url( @@ -705,8 +724,10 @@ class MaintainerListView(ListView): maintainer_list = [] self.maintainer_count = 0 + self.maintplan_name = self.kwargs['maintplan_name'] + maintplan = get_object_or_404(MaintenancePlan, name=self.maintplan_name) self.release_name = self.kwargs['release_name'] - release = get_object_or_404(Release, name=self.release_name) + release = get_object_or_404(Release, plan=maintplan, name=self.release_name) self.milestone_name = self.kwargs['milestone_name'] milestone = get_object_or_404(Milestone, release = release, name=self.milestone_name) @@ -771,10 +792,12 @@ class MaintainerListView(ListView): context['this_url_name'] = resolve(self.request.path_info).url_name + context['maintplan_name'] = self.maintplan_name + maintplan = get_object_or_404(MaintenancePlan, name=self.maintplan_name) context['release_name'] = self.release_name - context['all_releases'] = Release.objects.filter().order_by('-end_date') + context['all_releases'] = Release.objects.filter(plan=maintplan).order_by('-end_date') context['milestone_name'] = self.milestone_name - context['all_milestones'] = Milestone.get_by_release_name(self.release_name) + context['all_milestones'] = Milestone.get_by_release_name(maintplan, self.release_name) context['recipes_percentage'] = self.milestone_statistics['percentage'] context['recipes_all_upgraded'] = self.milestone_statistics['all_upgraded'] diff --git a/templates/rrs/base_toplevel.html b/templates/rrs/base_toplevel.html index 9df5b3b5bd..ee6790864c 100644 --- a/templates/rrs/base_toplevel.html +++ b/templates/rrs/base_toplevel.html @@ -22,7 +22,7 @@ @@ -79,7 +79,7 @@ {{ rud.version }} {% if rud.milestone_name %} - + {{ rud.release_name }} {% if rud.milestone_name != "All" %} {{ rud.milestone_name }} @@ -97,7 +97,7 @@ {{ rud.date }} {% if rud.is_recipe_maintainer %} - {{ rud.maintainer_name }} + {{ rud.maintainer_name }} {% else %} {{ rud.maintainer_name }} {% endif %} diff --git a/templates/rrs/recipes.html b/templates/rrs/recipes.html index 89b4c6fb61..63dcb51abc 100644 --- a/templates/rrs/recipes.html +++ b/templates/rrs/recipes.html @@ -83,7 +83,7 @@ {% for r in recipe_list %} - {{ r.name }} + {{ r.name }} {{ r.version }} {{ r.upstream_version }} {% if r.upstream_status == "Up-to-date" %} -- cgit 1.2.3-korg