aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlban Gruin2017-09-23 17:20:00 +0200
committerAlban Gruin2017-09-23 17:20:00 +0200
commita2e31953c101d65c842c8673c0f5321f01206037 (patch)
tree75929171c156aa196b283d96da2e076c1f368932
parent9641fc9bb6ef2897c0d70e6d5d5ed3f8e295dbec (diff)
parentf6da809651874179c6deb2e008e7a294375d2264 (diff)
Merge branch 'stable/0.9.z' into prod/pa1ch/0.9.zv0.9.1-pa1ch
-rw-r--r--.gitignore2
-rw-r--r--README.md2
-rw-r--r--utils.py39
3 files changed, 24 insertions, 19 deletions
diff --git a/.gitignore b/.gitignore
index 9377785..0975a47 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,3 +1,5 @@
__pycache__/
migrations/
+.dir-locals.el
+TAGS
diff --git a/README.md b/README.md
index bc50388..82e6053 100644
--- a/README.md
+++ b/README.md
@@ -2,7 +2,7 @@
celcatsanitizer est un système qui permet de récupérer des emplois du temps Celcat au format XML pour les afficher correctement.
## Pourquoi ?
-Parce que j'en avait ma claque de consulter un emploi du temps mal formaté. Parce que j'en avait ma claque de voir mon Firefox se figer pour pouvoir vérifier mes horaires de la journée. Parce que j'en avait ma claque d'avoir de devoir retrouver une pépite d'information dans un océan de texte. (et parce que j'avais un peu trop de temps libre aussi)
+Parce que les emplois du temps Celcat sont peu lisibles et peuvent facilement faire planter un navigateur, à cause du surplus d’informations affichées.
## Comment faire tourner celcatsanitizer chez moi ?
celcatsanitizer est écrit en Python 3. Il dépend des bibliothèques suivantes :
diff --git a/utils.py b/utils.py
index d343def..3ded68e 100644
--- a/utils.py
+++ b/utils.py
@@ -48,26 +48,29 @@ def group_courses(courses):
def parse_group(name):
# Explication de la regex
#
- # ^([\w ]+?)(\s*(((CM)(\w))|((TD)(\w)(\d))|((TP)(\w)(\d)(\d))))?$
- # ^ début de la ligne
- # ([\w ]+?) correspond à au moins un caractère
- # (\s* zéro, un ou plusieurs espaces
- # (((CM)(\w))| correspond à CM suivi d'une lettre ou…
- # ((TD)(\w)(\d))| … à TD suivi d’une lettre et d'un chiffre ou…
- # ((TP)(\w)(\d)(\d))) … à TP suivi d’une lettre et de deux chiffres
- # )? groupe optionel
- # $ fin de la ligne
- group_regex = re.compile("^([\w ]+?)(\s*(((CM)(\w))|((TD)(\w)(\d))|((TP)(\w)(\d)(\d))))?$")
+ # ^([\w ]+?)\s+((CM(\w))|(TD(\w)(\d))|(TP(\w)(\d)(\d)))?(\s\(.+\))?$
+ # ^ début de la ligne
+ # ([\w ]+?) correspond à au moins un caractère
+ # \s+ un ou plusieurs espaces
+ # ((CM(\w))| correspond à CM suivi d'une lettre ou…
+ # (TD(\w)(\d))| … à TD suivi d’une lettre et d'un chiffre ou…
+ # (TP(\w)(\d)(\d)) … à TP suivi d’une lettre et de deux chiffres
+ # )? groupe optionnel
+ # (\s un espace
+ # \(.+\)) un ou plusieurs caractères quelconques entre parenthèses
+ # ? groupe optionnel
+ # $ fin de la ligne
+ group_regex = re.compile("^([\w ]+?)\s+((CM(\w))|(TD(\w)(\d))|(TP(\w)(\d)(\d)))?(\s\(.+\))?$")
search = group_regex.search(name)
if search is None:
return name, None, None, None
- parts = search.groups(0)
- if parts[1] == 0:
+ parts = search.groups()
+ if parts[1] is None: # Pas de groupe précis indiqué
return parts[0], None, None, None
- elif parts[4] == "CM":
- return parts[0], parts[5], None, None
- elif parts[7] == "TD":
- return parts[0], parts[8], parts[9], None
- elif parts[11] == "TP":
- return parts[0], parts[12], parts[13], parts[14]
+ elif parts[2] is not None: # Groupe de CM
+ return parts[0], parts[3], None, None
+ elif parts[4] is not None: # Groupe de TD
+ return parts[0], parts[5], parts[6], None
+ elif parts[7] is not None: # Groupe de TP
+ return parts[0], parts[8], parts[9], parts[10]