From b0211666b3f3437a0496b9c9f03a3613698b9804 Mon Sep 17 00:00:00 2001 From: Alban Gruin Date: Sun, 23 Sep 2018 19:34:27 +0200 Subject: ups2018: déduplication avec OrderedDict au lieu de set() set() ne conserve pas nécessairement l’ordre des données, ce qui a plusieurs conséquences. Premièrement, un cours avec plusieurs noms séparés par un point-virgule peut changer de nom dans celcatsanitizer d’une mise à jour à une autre. Deuxièmement, cette fonctionnalité devient intestable de manière certaine. Pour remédier à cela, on utilise la structure OrderedDict à la place. Signed-off-by: Alban Gruin --- management/parsers/ups2018.py | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) (limited to 'management/parsers') diff --git a/management/parsers/ups2018.py b/management/parsers/ups2018.py index 15c629a..4ae7ef7 100644 --- a/management/parsers/ups2018.py +++ b/management/parsers/ups2018.py @@ -14,6 +14,7 @@ # along with celcatsanitizer. If not, see . from datetime import datetime, timedelta +from collections import OrderedDict import asyncio import calendar @@ -104,7 +105,11 @@ class Parser(AbstractParser): groups = data[i] if i - 1 >= 0: - course.name = ", ".join(set(data[i - 1].split(';'))) + # TODO: le jour où la version minimale supportée sera + # Python 3.7, il sera possible de remplacer OrderedDict + # par un dictionnaire classique. + names = OrderedDict.fromkeys(data[i - 1].split(';')) + course.name = ", ".join(names.keys()) else: course.name = "Sans nom" if i - 2 >= 0: -- cgit v1.2.1