diff options
| -rw-r--r-- | admin.py | 2 | ||||
| -rw-r--r-- | models.py | 10 | ||||
| -rw-r--r-- | utils.py | 26 | 
3 files changed, 21 insertions, 17 deletions
| @@ -44,7 +44,7 @@ class TimetableAdmin(admin.ModelAdmin):  class GroupAdmin(admin.ModelAdmin):      fieldsets = (          (None, {"fields": ("name", "celcat_name", "timetable", "hidden",)}), -        ("Groupes", {"fields": ("mention", "subgroup",)}),) +        ("Groupes", {"fields": ("mention", "semester", "subgroup",)}),)      list_display = ("name", "timetable", "hidden",)      list_editable = ("hidden",)      list_filter = ("timetable",) @@ -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",),) @@ -48,24 +48,24 @@ def group_courses(courses):  def parse_group(name):      # Explication de la regex      # -    # ^(.+?)\s*(s\d\s+)?((CM|TD|TP|G)(\w\d{0,3}))?(\s+\(.+\))?$ -    # ^                                                         début de la ligne -    #  (.+?)                                                    correspond à au moins un caractère -    #       \s*                                                 éventuellement un ou plusieurs espaces -    #          (s\d\s+)?                                        éventuellement un s suivi d’un nombre et d’un ou plusieurs espaces -    #                   ((CM|TD|TP|G)                           « CM » ou « TD » ou « TP » ou « G » -    #                                (\w\d{0,3})                suivi d’un caractère puis entre 0 et 3 chiffres -    #                                           )?              groupe optionnel -    #                                             (\s+          un ou plusieurs espaces -    #                                                 \(.+\))?  un ou pliseurs caractères entre parenthèses -    #                                                         $ fin de la ligne -    group_regex = re.compile(r"^(.+?)\s*(s\d\s+)?((CM|TD|TP|G)(\w\d{0,3}))?(\s+\(.+\))?$") +    # ^(.+?)\s*(s(\d)\s+)?((CM|TD|TP|G)(\w\d{0,3}))?(\s+\(.+\))?$ +    # ^                                                           début de la ligne +    #  (.+?)                                                      correspond à au moins un caractère +    #       \s*                                                   éventuellement un ou plusieurs espaces +    #          (s(\d)\s+)?                                        éventuellement un s suivi d’un nombre et d’un ou plusieurs espaces +    #                     ((CM|TD|TP|G)                           « CM » ou « TD » ou « TP » ou « G » +    #                                  (\w\d{0,3})                suivi d’un caractère puis entre 0 et 3 chiffres +    #                                             )?              groupe optionnel +    #                                               (\s+          un ou plusieurs espaces +    #                                                   \(.+\))?  un ou pliseurs caractères entre parenthèses +    #                                                           $ fin de la ligne +    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      parts = search.groups() -    return parts[0], parts[4] +    return parts[0], int(parts[2]), parts[5]  def tz_now():      """Retourne la date et l’heure avec le bon fuseau horaire""" | 
