solo-auswertung/src/solo_turnier/reader.py

102 lines
3.0 KiB
Python
Raw Normal View History

2022-11-10 21:40:12 +00:00
import solo_turnier
import csv
import os
import logging
import re
2022-11-27 08:10:17 +00:00
from pprint import pformat
2022-12-03 13:30:20 +00:00
from .types import CSVResultRow as ResultRow
2022-11-28 19:11:50 +00:00
class CSVResultReader:
2022-11-10 21:40:12 +00:00
def __init__(self, fileName: str):
self.fileName = fileName
2022-12-03 13:29:35 +00:00
self.l = logging.getLogger('solo_turnier.reader.CSVResultReader')
2022-11-10 21:40:12 +00:00
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:]
}
2022-12-03 13:29:35 +00:00
self.l.log(5, 'Imported results from allresults.csv file: %s', (ret))
2022-11-10 21:40:12 +00:00
return ret
2022-11-28 19:11:50 +00:00
def extractResult(self, entries = None) -> list[ResultRow]:
if entries is None:
entries = self.readFile()
2022-12-03 13:29:35 +00:00
groupParser = solo_turnier.group.GroupParser()
classParser = solo_turnier.competition_class.CompetitionClassParser()
2022-11-28 19:11:50 +00:00
def __processRow(row):
result = ResultRow(
2022-12-03 13:29:35 +00:00
competitionGroup=groupParser.parseClass(row[2]),
competitionClass=classParser.parseClass(row[3]),
2022-11-28 19:11:50 +00:00
dance=row[4],
id=row[5],
firstName=row[6], lastName=row[7],
club=row[10],
place=row[12], placeTo=row[13],
2022-12-03 13:29:35 +00:00
group=groupParser.parseClass(row[15]),
class_=classParser.parseClass(row[16])
2022-11-28 19:11:50 +00:00
)
self.l.log(5, 'Found row in CSV: %s', result)
return result
2022-12-03 13:29:35 +00:00
ret = list(map(__processRow, entries['data']))
2022-11-28 19:11:50 +00:00
2022-12-03 13:29:35 +00:00
self.l.log(5, 'Extracted rows from CSV data: %s', ret)
2022-11-28 19:11:50 +00:00
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