diff options
author | Alban Gruin | 2017-11-26 14:08:11 +0100 |
---|---|---|
committer | Alban Gruin | 2017-11-26 14:08:11 +0100 |
commit | 2aacb6e59e40c9d47d02719dc7b5541a36b3c9ed (patch) | |
tree | 8f5cedbe9d1a9a60fdb3fd8cf2a0b8176517226e | |
parent | f8c7775aac4a7eb2a4430d1aabb20b7f29939af7 (diff) |
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.
-rw-r--r-- | models.py | 5 | ||||
-rw-r--r-- | tests.py | 14 | ||||
-rw-r--r-- | utils.py | 12 |
3 files changed, 20 insertions, 11 deletions
@@ -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 @@ -152,12 +152,12 @@ class GroupTestCase(TestCase): general = Group.objects.get(celcat_name="L1 info (toutes sections et semestres confondus)", timetable=self.timetable) - self.assertEqual(cma.group_info, ("L1 info s2 ", "A")) - self.assertEqual(tda2.group_info, ("L1 info s2 ", "A2")) - self.assertEqual(tpa21.group_info, ("L1 info s2 ", "A21")) + self.assertEqual(cma.group_info, ("L1 info", 2, "A")) + self.assertEqual(tda2.group_info, ("L1 info", 2, "A2")) + self.assertEqual(tpa21.group_info, ("L1 info", 2, "A21")) - self.assertEqual(cmb.group_info, ("L1 info s2 ", "B")) - self.assertEqual(tdb2.group_info, ("L1 info s2 ", "B2")) - self.assertEqual(tpb21.group_info, ("L1 info s2 ", "B21")) + self.assertEqual(cmb.group_info, ("L1 info", 2, "B")) + self.assertEqual(tdb2.group_info, ("L1 info", 2, "B2")) + self.assertEqual(tpb21.group_info, ("L1 info", 2, "B21")) - self.assertEqual(general.group_info, ("L1 info ", "")) + self.assertEqual(general.group_info, ("L1 info", None, "")) @@ -62,10 +62,18 @@ def parse_group(name): group_regex = re.compile(r"^(.+?)\s*(s(\d)\s+)?((CM|TD|TP|G)(\w\d{0,3}))?(\s+\(.+\))?$") search = group_regex.search(name) if search is None: - return name, None + return name, None, None parts = search.groups() - return parts[0], int(parts[2]), parts[5] + + # On retourne la section (parts[0]), le semestre (parts[2]) et le groupe (parts[5]) + if parts[2] is not None: + return parts[0], int(parts[2]), parts[5] + else: + # Si jamais le semestre n’est pas présent dans la chaine parsée, + # parts[2] sera à None et sa conversion vers un int va provoquer + # une erreur. + return parts[0], None, parts[5] def tz_now(): """Retourne la date et l’heure avec le bon fuseau horaire""" |