From b99dbd566fba7f3c18d3832edeb8e019abcc8c87 Mon Sep 17 00:00:00 2001 From: Alban Gruin Date: Sat, 25 Nov 2017 13:25:51 +0100 Subject: Ne sélectionne plus les sous-groupes --- models.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'models.py') diff --git a/models.py b/models.py index 40406e3..40849c6 100644 --- a/models.py +++ b/models.py @@ -72,7 +72,7 @@ class Timetable(SlugModel): class GroupManager(Manager): def get_parents(self, group): - groups_criteria = Q(subgroup="") | Q(subgroup__startswith=group.subgroup) + groups_criteria = Q(subgroup="") if len(group.subgroup) != 0: groups_criteria |= reduce(lambda x, y: x | y, -- cgit v1.2.1 From 7f146b306760e1a70e8e1a79d58fc967d05fe194 Mon Sep 17 00:00:00 2001 From: Alban Gruin Date: Sat, 25 Nov 2017 13:30:42 +0100 Subject: Suppression de get_relevant_groups --- models.py | 14 +------------- 1 file changed, 1 insertion(+), 13 deletions(-) (limited to 'models.py') diff --git a/models.py b/models.py index 40849c6..9838377 100644 --- a/models.py +++ b/models.py @@ -16,8 +16,7 @@ from functools import reduce from django.db import models -from django.db.models import Count, Manager, Q, Subquery, Value -from django.db.models.expressions import OuterRef +from django.db.models import Count, Manager, Q from django.db.models.functions import ExtractWeek, ExtractYear from django.utils import timezone from django.utils.text import slugify @@ -82,17 +81,6 @@ class GroupManager(Manager): return self.get_queryset().filter(groups_criteria, mention=group.mention, timetable=group.timetable) - def get_relevant_groups(self, timetable, *args, **criteria): - sub = self.get_queryset().filter(timetable=timetable, - mention__startswith=OuterRef("mention"), - subgroup__startswith=OuterRef("subgroup")) \ - .annotate(v=Value(0)).values("v") \ - .annotate(c=Count("v")).values("c") # fuck Count() - - return self.get_queryset().filter(*args, timetable=timetable, hidden=False, **criteria) \ - .annotate(nbsub=Subquery(sub, output_field=models.IntegerField())) \ - .filter(Q(nbsub=1) | Q(nbsub__isnull=True)).order_by("name") - class Group(models.Model): objects = GroupManager() -- cgit v1.2.1 From d9e0cba8c24978150e66b9ccd7ea67aa50a5f22d Mon Sep 17 00:00:00 2001 From: Alban Gruin Date: Sat, 25 Nov 2017 14:01:54 +0100 Subject: Un groupe parent ne correspond plus à un groupe enfant Modification des tests --- models.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) (limited to 'models.py') diff --git a/models.py b/models.py index 9838377..bde27a7 100644 --- a/models.py +++ b/models.py @@ -101,8 +101,7 @@ class Group(models.Model): def corresponds_to(self, timetable_id, mention, subgroup): subgroup_corresponds = True if self.subgroup is not None and subgroup is not None: - subgroup_corresponds = subgroup.startswith(self.subgroup) or \ - self.subgroup.startswith(subgroup) + subgroup_corresponds = self.subgroup.startswith(subgroup) return self.timetable.id == timetable_id and \ (self.mention.startswith(mention) or \ -- 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. --- models.py | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) (limited to 'models.py') diff --git a/models.py b/models.py index bde27a7..59301e0 100644 --- a/models.py +++ b/models.py @@ -98,19 +98,18 @@ class Group(models.Model): hidden = models.BooleanField(verbose_name="caché", default=False) - def corresponds_to(self, timetable_id, mention, subgroup): + def corresponds_to(self, mention, subgroup): subgroup_corresponds = True if self.subgroup is not None and subgroup is not None: subgroup_corresponds = self.subgroup.startswith(subgroup) - return self.timetable.id == timetable_id and \ - (self.mention.startswith(mention) or \ - mention.startswith(self.mention)) and \ - subgroup_corresponds + return (self.mention.startswith(mention) or \ + mention.startswith(self.mention)) and \ + subgroup_corresponds @property def group_info(self): - return self.timetable.id, self.mention, self.subgroup + return self.mention, self.subgroup def __str__(self): return self.name -- 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. --- models.py | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) (limited to 'models.py') diff --git a/models.py b/models.py index 59301e0..cd19259 100644 --- a/models.py +++ b/models.py @@ -158,9 +158,10 @@ class CourseManager(Manager): return self.get_queryset() \ .filter(**criteria) \ .order_by("groups__name", "year", "week") \ - .annotate(_=Count(("groups", "year", "week", "begin")), - year=ExtractYear("begin"), - week=ExtractWeek("begin")) + .annotate(year=ExtractYear("begin"), + week=ExtractWeek("begin")) \ + .values("groups__mention", + "groups__subgroup", "year", "week") class Course(models.Model): -- 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 --- models.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'models.py') diff --git a/models.py b/models.py index cd19259..b260275 100644 --- a/models.py +++ b/models.py @@ -152,7 +152,7 @@ class CourseManager(Manager): def get_courses_for_group(self, group, **criteria): return self.get_queryset() \ .filter(groups__in=Group.objects.get_parents(group), **criteria) \ - .order_by("begin") + .order_by("begin").prefetch_related("rooms") def get_weeks(self, **criteria): return self.get_queryset() \ -- cgit v1.2.1 From f8c7775aac4a7eb2a4430d1aabb20b7f29939af7 Mon Sep 17 00:00:00 2001 From: Alban Gruin Date: Sun, 26 Nov 2017 13:53:10 +0100 Subject: Ajout d’un nouveau champ de groupe : le semestre --- models.py | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) (limited to 'models.py') diff --git a/models.py b/models.py index b260275..abb00bf 100644 --- a/models.py +++ b/models.py @@ -78,7 +78,9 @@ class GroupManager(Manager): [Q(subgroup=group.subgroup[:i]) for i in range(1, len(group.subgroup) + 1)]) - return self.get_queryset().filter(groups_criteria, mention=group.mention, + return self.get_queryset().filter(groups_criteria, + Q(semester=None) | Q(semester=group.semester), + mention=group.mention, timetable=group.timetable) @@ -92,6 +94,7 @@ class Group(models.Model): verbose_name="emploi du temps") mention = models.CharField(max_length=128) + semester = models.IntegerField(verbose_name="semestre", null=True) subgroup = models.CharField(max_length=16, verbose_name="sous-groupe", default="") slug = models.SlugField(max_length=64, default="") @@ -103,6 +106,7 @@ class Group(models.Model): if self.subgroup is not None and subgroup is not None: subgroup_corresponds = self.subgroup.startswith(subgroup) + # TODO adapter pour semester return (self.mention.startswith(mention) or \ mention.startswith(self.mention)) and \ subgroup_corresponds @@ -119,7 +123,7 @@ class Group(models.Model): self.name = self.celcat_name self.slug = slugify(self.name) - self.mention, self.subgroup = parse_group(self.name) + self.mention, self.semester, self.subgroup = parse_group(self.name) if self.subgroup is None: self.subgroup = "" @@ -127,7 +131,7 @@ class Group(models.Model): class Meta: - index_together = ("mention", "subgroup",) + index_together = ("mention", "semester", "subgroup",) unique_together = (("name", "timetable",), ("celcat_name", "timetable",), ("slug", "timetable",),) -- cgit v1.2.1 From 2aacb6e59e40c9d47d02719dc7b5541a36b3c9ed Mon Sep 17 00:00:00 2001 From: Alban Gruin Date: Sun, 26 Nov 2017 14:08:11 +0100 Subject: Correction d’un cas pouvant provoquer une erreur de parsage de groupe (si jamais il n’y a pas de semestre), renvoi du numéro de semestre dans group_info, adaptation de corresponds_to. --- models.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) (limited to 'models.py') diff --git a/models.py b/models.py index abb00bf..fb0e757 100644 --- a/models.py +++ b/models.py @@ -101,7 +101,7 @@ class Group(models.Model): hidden = models.BooleanField(verbose_name="caché", default=False) - def corresponds_to(self, mention, subgroup): + def corresponds_to(self, mention, semester, subgroup): subgroup_corresponds = True if self.subgroup is not None and subgroup is not None: subgroup_corresponds = self.subgroup.startswith(subgroup) @@ -109,11 +109,12 @@ class Group(models.Model): # TODO adapter pour semester return (self.mention.startswith(mention) or \ mention.startswith(self.mention)) and \ + (self.semester == semester or semester is None) and \ subgroup_corresponds @property def group_info(self): - return self.mention, self.subgroup + return self.mention, self.semester, self.subgroup def __str__(self): return self.name -- cgit v1.2.1 From 574bc0efb1061cd1c1fd747ba13f6f7ac14a3e51 Mon Sep 17 00:00:00 2001 From: Alban Gruin Date: Sun, 26 Nov 2017 14:09:49 +0100 Subject: Suppression des commentaires inutiles --- models.py | 1 - 1 file changed, 1 deletion(-) (limited to 'models.py') diff --git a/models.py b/models.py index fb0e757..0904b63 100644 --- a/models.py +++ b/models.py @@ -106,7 +106,6 @@ class Group(models.Model): if self.subgroup is not None and subgroup is not None: subgroup_corresponds = self.subgroup.startswith(subgroup) - # TODO adapter pour semester return (self.mention.startswith(mention) or \ mention.startswith(self.mention)) and \ (self.semester == semester or semester is None) and \ -- 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. --- models.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'models.py') diff --git a/models.py b/models.py index 0904b63..25ddd1b 100644 --- a/models.py +++ b/models.py @@ -164,7 +164,7 @@ class CourseManager(Manager): .order_by("groups__name", "year", "week") \ .annotate(year=ExtractYear("begin"), week=ExtractWeek("begin")) \ - .values("groups__mention", + .values("groups__mention", "groups__semester", "groups__subgroup", "year", "week") -- cgit v1.2.1