aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlban Gruin2018-09-23 19:34:27 +0200
committerAlban Gruin2018-09-23 19:39:57 +0200
commitb0211666b3f3437a0496b9c9f03a3613698b9804 (patch)
tree357108915bc13da182fac1be90fd54e6984d555c
parentfd516af7aedf938cc6fb65eca556e8341a0dfd92 (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>
-rw-r--r--management/parsers/ups2018.py7
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: