From 68248f075dc750d7de5c0d060721ecce8f988217 Mon Sep 17 00:00:00 2001 From: Alban Gruin Date: Sat, 25 Nov 2017 13:17:35 +0100 Subject: Suppression de l’association automatique des groupes --- views.py | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) (limited to 'views.py') diff --git a/views.py b/views.py index c0c63cb..97d3048 100644 --- a/views.py +++ b/views.py @@ -61,7 +61,7 @@ def group_list_common(request, timetable, groups): def group_list(request, year_slug, timetable_slug): timetable = get_object_or_404(Timetable, year__slug=year_slug, slug=timetable_slug) - groups = Group.objects.get_relevant_groups(timetable) + groups = Group.objects.filter(timetable=timetable).order_by("name") return group_list_common(request, timetable, groups) def timetable(request, year_slug, timetable_slug, group_slug, year=None, week=None): @@ -79,12 +79,6 @@ def timetable(request, year_slug, timetable_slug, group_slug, year=None, week=No timetable = get_object_or_404(Timetable, year__slug=year_slug, slug=timetable_slug) group = get_object_or_404(Group, slug=group_slug, timetable=timetable) - if Group.objects.filter(timetable=timetable, mention=group.mention, - subgroup__startswith=group.subgroup).count() > 1: - subgroups = Group.objects.get_relevant_groups(timetable, mention=group.mention, - subgroup__startswith=group.subgroup) - return group_list_common(request, timetable, subgroups) - courses = Course.objects.get_courses_for_group(group, begin__gte=start, begin__lt=end) if courses.count() == 0 and provided_week: raise Http404 -- cgit v1.2.1 From 621f5d7f0d28f7252e1ff0c0f1286824fa55c33e Mon Sep 17 00:00:00 2001 From: Alban Gruin Date: Sat, 25 Nov 2017 14:22:03 +0100 Subject: On ne compare plus les id des emplois du temps dans corresponds_to() car dans le seul appel « utile », les arguments passés font forcément partie du même edt. Changement effectué pour des questions de performance. Correction des tests. --- views.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'views.py') diff --git a/views.py b/views.py index 97d3048..7bc5641 100644 --- a/views.py +++ b/views.py @@ -45,7 +45,7 @@ def group_list_common(request, timetable, groups): for group in groups: for group_week in groups_weeks: - if group.corresponds_to(timetable.id, group_week["groups__mention"], + if group.corresponds_to(group_week["groups__mention"], group_week["groups__subgroup"]): if not hasattr(group, "weeks"): group.weeks = [] -- cgit v1.2.1 From cbab00f4b745f4d80dd06a52699006d1d081be20 Mon Sep 17 00:00:00 2001 From: Alban Gruin Date: Sat, 25 Nov 2017 15:01:48 +0100 Subject: Fusion de group_list et de group_list_common. Légère modification de la requête pour récupérer les semaines de cours (au lieu de filtrer par l’emploi du temps, on filtre par les groupes), résultant en une nette accélération du traitement Avant modification : SQLite : ~420ms PostgreSQL : ~60ms puis ~30ms Après modification : SQLite : ~18ms PostgreSQL : ~23ms puis ~13ms La progression sur PostgreSQL est celle qui importe le plus, puisqu’il s’agit du SGBDR utilisé en production, mais la requête s’effectue tout de même plus rapidement (un peu plus qu’un rapport 2), ce qui reste intéressant. --- views.py | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) (limited to 'views.py') diff --git a/views.py b/views.py index 7bc5641..d4df8db 100644 --- a/views.py +++ b/views.py @@ -35,11 +35,14 @@ def mention_list(request, year_slug): return render(request, "index.html", {"year": year, "elements": timetables}) -def group_list_common(request, timetable, groups): +def group_list(request, year_slug, timetable_slug): + timetable = get_object_or_404(Timetable, year__slug=year_slug, slug=timetable_slug) + groups = Group.objects.filter(timetable=timetable, hidden=False).order_by("name") + start, _ = get_week(*get_current_week()) end = start + datetime.timedelta(weeks=4) - groups_weeks = Course.objects.get_weeks(begin__gte=start, begin__lt=end, timetable=timetable) \ + groups_weeks = Course.objects.get_weeks(begin__gte=start, begin__lt=end, groups__in=groups) \ .values("groups__mention", "groups__subgroup", "year", "week") @@ -57,12 +60,8 @@ def group_list_common(request, timetable, groups): if hasattr(group, "weeks"): group.weeks.sort() - return render(request, "group_list.html", {"timetable": timetable, "groups": groups}) -def group_list(request, year_slug, timetable_slug): - timetable = get_object_or_404(Timetable, year__slug=year_slug, slug=timetable_slug) - groups = Group.objects.filter(timetable=timetable).order_by("name") - return group_list_common(request, timetable, groups) + return render(request, "group_list.html", {"timetable": timetable, "groups": groups}) def timetable(request, year_slug, timetable_slug, group_slug, year=None, week=None): current_year, current_week = get_current_or_next_week() -- cgit v1.2.1 From f333d363a78821ebab78fb9bb900d7aefbf6079c Mon Sep 17 00:00:00 2001 From: Alban Gruin Date: Sat, 25 Nov 2017 15:14:52 +0100 Subject: Dans get_weeks(), l’annotation Count() ne sert à rien. --- views.py | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) (limited to 'views.py') diff --git a/views.py b/views.py index d4df8db..f1ec8d5 100644 --- a/views.py +++ b/views.py @@ -42,9 +42,7 @@ def group_list(request, year_slug, timetable_slug): start, _ = get_week(*get_current_week()) end = start + datetime.timedelta(weeks=4) - groups_weeks = Course.objects.get_weeks(begin__gte=start, begin__lt=end, groups__in=groups) \ - .values("groups__mention", "groups__subgroup", - "year", "week") + groups_weeks = Course.objects.get_weeks(begin__gte=start, begin__lt=end, groups__in=groups) for group in groups: for group_week in groups_weeks: -- cgit v1.2.1 From d1191533a29b5f80543faa0758c7303d0a4b450c Mon Sep 17 00:00:00 2001 From: Alban Gruin Date: Sat, 25 Nov 2017 16:16:26 +0100 Subject: Le sachiez-tu ? Parfois je met des espaces inutiles --- views.py | 1 - 1 file changed, 1 deletion(-) (limited to 'views.py') diff --git a/views.py b/views.py index f1ec8d5..9e88b3b 100644 --- a/views.py +++ b/views.py @@ -58,7 +58,6 @@ def group_list(request, year_slug, timetable_slug): if hasattr(group, "weeks"): group.weeks.sort() - return render(request, "group_list.html", {"timetable": timetable, "groups": groups}) def timetable(request, year_slug, timetable_slug, group_slug, year=None, week=None): -- cgit v1.2.1 From 4aebed8ca3f879aa4e2996620657a14ac9538477 Mon Sep 17 00:00:00 2001 From: Alban Gruin Date: Sat, 25 Nov 2017 20:43:21 +0100 Subject: get_week() convertit automatiquement les chaines de caractères en int --- views.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'views.py') diff --git a/views.py b/views.py index 9e88b3b..1269415 100644 --- a/views.py +++ b/views.py @@ -70,7 +70,7 @@ def timetable(request, year_slug, timetable_slug, group_slug, year=None, week=No elif (int(year), int(week)) < (current_year, current_week): is_old_timetable = True - start, end = get_week(int(year), int(week)) + start, end = get_week(year, week) timetable = get_object_or_404(Timetable, year__slug=year_slug, slug=timetable_slug) group = get_object_or_404(Group, slug=group_slug, timetable=timetable) -- cgit v1.2.1 From 34ba9c926cfd0725ebd2905e9c71823fd272dad2 Mon Sep 17 00:00:00 2001 From: Alban Gruin Date: Sun, 26 Nov 2017 13:27:40 +0100 Subject: Optimisation de deux requêtes : – sélection des cours d’un groupe : préchargement des salles – sélection des emplois du temps d’une année : préchargement de l’année --- views.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'views.py') diff --git a/views.py b/views.py index 1269415..5eb224e 100644 --- a/views.py +++ b/views.py @@ -31,7 +31,7 @@ def index(request): def mention_list(request, year_slug): year = get_object_or_404(Year, slug=year_slug) - timetables = Timetable.objects.order_by("name").filter(year=year) + timetables = Timetable.objects.order_by("name").filter(year=year).select_related("year") return render(request, "index.html", {"year": year, "elements": timetables}) -- cgit v1.2.1 From ef6f5e8517436b804265880b71a2ee88f9f5c179 Mon Sep 17 00:00:00 2001 From: Alban Gruin Date: Sun, 26 Nov 2017 14:22:13 +0100 Subject: Récupération du semestre pour générer la liste des groupes. --- views.py | 1 + 1 file changed, 1 insertion(+) (limited to 'views.py') diff --git a/views.py b/views.py index 5eb224e..4431891 100644 --- a/views.py +++ b/views.py @@ -47,6 +47,7 @@ def group_list(request, year_slug, timetable_slug): for group in groups: for group_week in groups_weeks: if group.corresponds_to(group_week["groups__mention"], + group_week["groups__semester"], group_week["groups__subgroup"]): if not hasattr(group, "weeks"): group.weeks = [] -- cgit v1.2.1 From 8cd40466e5b1ef9f00cf88c9375289d235abc009 Mon Sep 17 00:00:00 2001 From: Alban Gruin Date: Sun, 26 Nov 2017 14:27:16 +0100 Subject: Optimisation de la requête utilisée pour savoir si il y a des cours sur la semaine sélectionnée (utilisation de exists() au lieu de count()) --- views.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'views.py') diff --git a/views.py b/views.py index 4431891..c647fac 100644 --- a/views.py +++ b/views.py @@ -77,7 +77,7 @@ def timetable(request, year_slug, timetable_slug, group_slug, year=None, week=No group = get_object_or_404(Group, slug=group_slug, timetable=timetable) courses = Course.objects.get_courses_for_group(group, begin__gte=start, begin__lt=end) - if courses.count() == 0 and provided_week: + if not courses.exists() and provided_week: raise Http404 last_update = courses.aggregate(Max("last_update"))["last_update__max"] -- cgit v1.2.1