import solo_turnier import csv import os import logging import re from pprint import pformat class ResultRow: def __init__(self, firstName, lastName, club, id, group, class_, dance, place, placeTo, competitionGroup, competitionClass): self.firstName = firstName self.lastName = lastName self.name = f'{firstName} {lastName}' self.club = club self.id = id self.group = group self.class_ = class_ self.dance = dance self.place = place self.placeTo = placeTo self.competitionGroup = competitionGroup self.competitionClass = competitionClass def __str__(self): return f'{self.name} ({self.id}, {self.club}) is in {self.group} {self.class_} and danced the {self.dance} in {self.competitionGroup} {self.competitionClass} getting place {self.place}-{self.placeTo}' class CSVResultReader: def __init__(self, fileName: str): self.fileName = fileName def readFile(self): with open(self.fileName, 'r') as fp: dialect = csv.Sniffer().sniff(fp.read(1024)) fp.seek(0) csvReader = csv.reader(fp, dialect) rows = [] for row in csvReader: rows.append(row) ret = { 'header': rows[0], 'data': rows[1:] } l = logging.getLogger('solo_turnier.reader.all_results') l.log(5, 'Imported results from allresults.csv file: %s', (ret)) return ret def extractResult(self, entries = None) -> list[ResultRow]: if entries is None: entries = self.readFile() def __processRow(row): result = ResultRow( competitionGroup=self.__mapGroup(row[2]), competitionClass=self.__mapClass(row[3]), dance=row[4], id=row[5], firstName=row[6], lastName=row[7], club=row[10], place=row[12], placeTo=row[13], group=self.__mapGroup(row[15]), class_=self.__mapClass(row[16]) ) self.l.log(5, 'Found row in CSV: %s', result) return result ret = map(__processRow, imported['data']) return ret class CSVExtractor: def __init__(self): self.l = logging.getLogger('solo_turnier.worker') self.__groupMaps = { 'Kinder': 'Kin.', 'Junioren': 'Jun.', 'Jugend': 'Jug.' } self.__classMaps = { 'Newcomer': 'Newc.', 'Beginner': 'Beg.', 'Advanced': 'Adv.' } def __mapGroup(self, group): return self.__groupMaps.get(group, group) def __mapClass(self, class_): return self.__classMaps.get(class_, class_) def mapCSVImport(self, imported) -> list[ResultRow]: ret = [] def __processRow(row): result = ResultRow( competitionGroup=self.__mapGroup(row[2]), competitionClass=self.__mapClass(row[3]), dance=row[4], id=row[5], firstName=row[6], lastName=row[7], club=row[10], place=row[12], placeTo=row[13], group=self.__mapGroup(row[15]), class_=self.__mapClass(row[16]) ) ret.append(result) self.l.log(5, 'Found row in CSV: %s', result) for row in imported['data']: __processRow(row) return ret