From c9388e29b2f9ee18a9e190683a8a33fb710684c5 Mon Sep 17 00:00:00 2001 From: Alban Gruin Date: Sat, 27 Jan 2018 17:56:45 +0100 Subject: PEP8 --- utils.py | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) (limited to 'utils.py') diff --git a/utils.py b/utils.py index 9f0a6b5..839d8bc 100644 --- a/utils.py +++ b/utils.py @@ -18,9 +18,11 @@ import re from django.utils import timezone + def get_current_week(): return tz_now().isocalendar()[:2] + def get_current_or_next_week(): year, week, day = tz_now().isocalendar() if day >= 6: @@ -28,6 +30,7 @@ def get_current_or_next_week(): return year, week + def get_week(year, week): start = timezone.make_aware(datetime.datetime.strptime( "{0}-W{1}-1".format(year, week), "%Y-W%W-%w")) @@ -35,6 +38,7 @@ def get_week(year, week): return start, end + def group_courses(courses): grouped_courses = [] for i, course in enumerate(courses): @@ -45,6 +49,7 @@ def group_courses(courses): return grouped_courses + def parse_group(name): # Explication de la regex # @@ -66,7 +71,8 @@ def parse_group(name): parts = search.groups() - # On retourne la section (parts[0]), le semestre (parts[2]) et le groupe (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: @@ -75,6 +81,7 @@ def parse_group(name): # une erreur. return parts[0], None, parts[5] + def tz_now(): """Retourne la date et l’heure avec le bon fuseau horaire""" return timezone.make_aware(datetime.datetime.now()) -- cgit v1.2.1 From 786fd4fc9bcff1534ea30fb516d5c1b3136aebef Mon Sep 17 00:00:00 2001 From: Alban Gruin Date: Sat, 10 Feb 2018 00:30:47 +0100 Subject: Correction de la regex pour parser correctement les groupes ne possédant pas de semestre. Les tests rajoutés au commit précédent passent donc avec succès. --- utils.py | 33 +++++++++++++++++---------------- 1 file changed, 17 insertions(+), 16 deletions(-) (limited to 'utils.py') diff --git a/utils.py b/utils.py index 839d8bc..080768b 100644 --- a/utils.py +++ b/utils.py @@ -53,18 +53,19 @@ 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+\(.+\))?$ + # ^(.+?)\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+ 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, None @@ -72,14 +73,14 @@ def parse_group(name): parts = search.groups() # On retourne la section (parts[0]), le semestre (parts[2]) et le - # groupe (parts[5]) + # groupe (parts[4]) if parts[2] is not None: - return parts[0], int(parts[2]), parts[5] + return parts[0], int(parts[2]), parts[4] 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] + # une erreur. parts[4] devrait être une chaîne vide ici. + return parts[0], None, parts[4] def tz_now(): -- cgit v1.2.1 From 0f9e5412482467bac55178f225e2f4f5cb9b4fe6 Mon Sep 17 00:00:00 2001 From: Alban Gruin Date: Sat, 10 Feb 2018 20:01:19 +0100 Subject: Correction de la regex pour supporter les groupes avec plusieurs parties entre parenthèse. Les nouveaux cas de tests passent avec succès. --- utils.py | 29 +++++++++++++++-------------- 1 file changed, 15 insertions(+), 14 deletions(-) (limited to 'utils.py') diff --git a/utils.py b/utils.py index 080768b..cd7f1f8 100644 --- a/utils.py +++ b/utils.py @@ -1,4 +1,4 @@ -# Copyright (C) 2017 Alban Gruin +# Copyright (C) 2017-2018 Alban Gruin # # celcatsanitizer is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as published @@ -53,19 +53,20 @@ 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+\(.+\))?$ - # ^(.+?)\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+ 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+ 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 plusieurs caractères (exceptés des espaces) 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, None -- cgit v1.2.1