import solo_turnier import csv import os import logging import re from pprint import pformat from .types import ResultRow class CSVResultReader: def __init__(self, fileName: str): self.fileName = fileName self.l = logging.getLogger('solo_turnier.reader.CSVResultReader') 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:] } self.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() groupParser = solo_turnier.group.GroupParser() classParser = solo_turnier.competition_class.CompetitionClassParser() def __processRow(row): result = ResultRow( competitionGroup=groupParser.parseClass(row[2]), competitionClass=classParser.parseClass(row[3]), dance=row[4], id=row[5], firstName=row[6], lastName=row[7], club=row[10], place=row[12], placeTo=row[13], group=groupParser.parseClass(row[15]), class_=classParser.parseClass(row[16]) ) self.l.log(5, 'Found row in CSV: %s', result) return result ret = list(map(__processRow, entries['data'])) self.l.log(5, 'Extracted rows from CSV data: %s', ret) 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