diff options
author | Alban Gruin | 2018-09-23 19:34:27 +0200 |
---|---|---|
committer | Alban Gruin | 2018-09-23 19:39:57 +0200 |
commit | b0211666b3f3437a0496b9c9f03a3613698b9804 (patch) | |
tree | 357108915bc13da182fac1be90fd54e6984d555c /management/parsers | |
parent | fd516af7aedf938cc6fb65eca556e8341a0dfd92 (diff) |
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 <alban at pa1ch dot fr>
Diffstat (limited to 'management/parsers')
-rw-r--r-- | management/parsers/ups2018.py | 7 |
1 files changed, 6 insertions, 1 deletions
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 <http://www.gnu.org/licenses/>. 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: |