102 lines
3.0 KiB
Python
102 lines
3.0 KiB
Python
|
|
import solo_turnier
|
|
import csv
|
|
import os
|
|
import logging
|
|
import re
|
|
from pprint import pformat
|
|
from .types import CSVResultRow as 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
|