From ea6009bb0ad75a9ad529010c1c464aaa644fb0cc Mon Sep 17 00:00:00 2001 From: Christian Wolf Date: Tue, 15 Nov 2022 18:11:40 +0100 Subject: [PATCH] Merge HTML final status into main data structures --- src/solo_turnier/html_parser.py | 3 + src/solo_turnier/tests/test_worker.py | 96 ++++++++++++++++++++++++++- src/solo_turnier/worker.py | 12 ++++ 3 files changed, 110 insertions(+), 1 deletion(-) diff --git a/src/solo_turnier/html_parser.py b/src/solo_turnier/html_parser.py index 48661cd..5db8900 100644 --- a/src/solo_turnier/html_parser.py +++ b/src/solo_turnier/html_parser.py @@ -8,6 +8,9 @@ class HtmlParticipant: self.name = name self.place = place self.finalist = finalist + + def __str__(self): + return f'{self.name} (with place {self.place})' class HtmlImport: def __init__(self, title: str, participants: dict[int, HtmlParticipant]): diff --git a/src/solo_turnier/tests/test_worker.py b/src/solo_turnier/tests/test_worker.py index 9fbe0d2..8fcc828 100644 --- a/src/solo_turnier/tests/test_worker.py +++ b/src/solo_turnier/tests/test_worker.py @@ -1,4 +1,4 @@ -from solo_turnier import worker +from solo_turnier import worker, html_parser import os import json import pytest @@ -216,3 +216,97 @@ def test_createHtmlLUT(mocker): ('group3', 'class3', 'dance3'): importMock3, } assert expected == structure + +def test_mergeHtmlData(mocker): + person1 = worker.ResultPerson('Max 1', 'Mustermann', 'TSC Entenhausen') + person2 = worker.ResultPerson('Max 2', 'Mustermann', 'TSC Entenhausen') + person3 = worker.ResultPerson('Max 3', 'Mustermann', 'TSC Entenhausen') + person4 = worker.ResultPerson('Max 4', 'Mustermann', 'TSC Entenhausen') + + data = { + person1: [ + worker.CompetitionResult('Rumba', 'Kin.', 'Beg.', '1', '1', 1, 'Kin./Jun.', 'Beg.'), + worker.CompetitionResult('Cha Cha', 'Kin.', 'Adv.', '1', '1', 1, 'Kin.', 'Adv.'), + worker.CompetitionResult('Jive', 'Kin.', 'Beg.', '1', '2', 1, 'Kin.', 'Beg.'), + worker.CompetitionResult('Langs. Walzer', 'Kin.', 'Beg.', '1', '1', 1, 'Kin.', 'Newc./Beg.'), + ], + person2: [ + worker.CompetitionResult('Rumba', 'Kin.', 'Beg.', '2', '2', 2, 'Kin./Jun.', 'Beg.'), + worker.CompetitionResult('Cha Cha', 'Kin.', 'Adv.', '2', '2', 2, 'Kin.', 'Adv.'), + worker.CompetitionResult('Jive', 'Kin.', 'Beg.', '1', '2', 2, 'Kin.', 'Beg.'), + worker.CompetitionResult('Langs. Walzer', 'Kin.', 'Newc.', '1', '1', 2, 'Kin.', 'Newc./Beg.'), + ], + person3: [ + worker.CompetitionResult('Rumba', 'Jun.', 'Beg.', '1', '1', 3, 'Kin./Jun.', 'Beg.'), + # worker.CompetitionResult('Cha Cha', 'Jun.', 'Adv.', '1', '1', 3, 'Kin.', 'Adv.'), + # worker.CompetitionResult('Jive', 'Jun.', 'Beg.', '2', '2', 3, 'Kin.', 'Beg.'), + # worker.CompetitionResult('Langs. Walzer', 'Jun.', 'Newc./Beg.', '1', '1', 3, 'Kin.', 'Beg.'), + ], + person4: [ + worker.CompetitionResult('Rumba', 'Kin.', 'Beg.', '3', '3', 4, 'Kin./Jun.', 'Beg.'), + # worker.CompetitionResult('Cha Cha', 'Kin.', 'Adv.', '1', '1', 4, 'Kin.', 'Adv.'), + # worker.CompetitionResult('Jive', 'Kin.', 'Beg.', '2', '2', 4, 'Kin.', 'Beg.'), + # worker.CompetitionResult('Langs. Walzer', 'Kin.', 'Newc./Beg.', '1', '1', 4, 'Kin.', 'Beg.'), + ], + } + + htmlParticipant1Dance1 = html_parser.HtmlParticipant('Max 1 Mustermann', '1.', True) + htmlParticipant1Dance2 = html_parser.HtmlParticipant('Max 1 Mustermann', '1.', True) + htmlParticipant1Dance3 = html_parser.HtmlParticipant('Max 1 Mustermann', '1.-2.', True) + htmlParticipant1Dance4 = html_parser.HtmlParticipant('Max 1 Mustermann', '1.', True) + + htmlParticipant2Dance1 = html_parser.HtmlParticipant('Max 2 Mustermann', '2.', True) + htmlParticipant2Dance2 = html_parser.HtmlParticipant('Max 2 Mustermann', '2.', True) + htmlParticipant2Dance3 = html_parser.HtmlParticipant('Max 2 Mustermann', '1.-2.', True) + htmlParticipant2Dance4 = html_parser.HtmlParticipant('Max 2 Mustermann', '1.', True) + + htmlParticipant3Dance1 = html_parser.HtmlParticipant('Max 3 Mustermann', '1.', True) + + htmlParticipant4Dance1 = html_parser.HtmlParticipant('Max 4 Mustermann', '3.', False) + + htmlParticipantsDance1 = { + '1': htmlParticipant1Dance1, + '2': htmlParticipant2Dance1, + '3': htmlParticipant3Dance1, + '4': htmlParticipant4Dance1 + } + htmlParticipantsDance2 = { + '1': htmlParticipant1Dance2, + '2': htmlParticipant2Dance2, + } + htmlParticipantsDance3 = { + '1': htmlParticipant1Dance3, + '2': htmlParticipant2Dance3, + } + htmlParticipantsDance4 = { + '1': htmlParticipant1Dance4, + '2': htmlParticipant2Dance4, + } + + htmlCompetition1 = html_parser.HtmlImport('ETW, Solos Kin./Jun. Beginner Rumba', htmlParticipantsDance1) + htmlCompetition2 = html_parser.HtmlImport('ETW, Solos Kin. Advanced Cha Cha', htmlParticipantsDance2) + htmlCompetition3 = html_parser.HtmlImport('ETW, Solos Kinder Beginner Jive', htmlParticipantsDance3) + htmlCompetition4 = html_parser.HtmlImport('ETW, Solos Kin. Newc./Beg. Langs. Walzer', htmlParticipantsDance4) + + dataWorker = worker.DataWorker() + + dataWorker.mergeHtmlData(data, [htmlCompetition1, htmlCompetition2, htmlCompetition3, htmlCompetition4]) + + person1Finalist = [c.finalist for c in data[person1]] + person2Finalist = [c.finalist for c in data[person2]] + person3Finalist = [c.finalist for c in data[person3]] + person4Finalist = [c.finalist for c in data[person4]] + finalists = { + person1: person1Finalist, + person2: person2Finalist, + person3: person3Finalist, + person4: person4Finalist, + } + expectedFinalists = { + person1: [True, True, True, True], + person2: [True, True, True, True], + person3: [True], + person4: [False], + } + + assert finalists == expectedFinalists diff --git a/src/solo_turnier/worker.py b/src/solo_turnier/worker.py index 1ecd835..9e9cbe4 100644 --- a/src/solo_turnier/worker.py +++ b/src/solo_turnier/worker.py @@ -1,6 +1,7 @@ import logging from solo_turnier import html_parser + class ResultRow: def __init__(self, firstName, lastName, club, id, group, class_, dance, place, placeTo, competitionGroup, competitionClass): self.firstName = firstName @@ -207,3 +208,14 @@ class DataWorker: ret[key] = imp return ret + def mergeHtmlData(self, data:dict[ResultPerson, list[CompetitionResult]], htmlImports: list[html_parser.HtmlImport]): + lut = self._createHtmlLUT(htmlImports) + + for person in data: + for competition in data[person]: + key = (competition.competitionGroup, competition.competitionClass, competition.dance) + htmlImport = lut[key] + participant = htmlImport.participants[str(competition.id)] + if participant.name != person.name: + self.l.error(f'Names for {person} and participant in HTML import ({participant}) do not match. Please check carefully.') + competition.finalist = participant.finalist