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-11-10 21:40:12 +00:00
2022-11-28 19:11:50 +00:00
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 :
2022-11-10 21:40:12 +00:00
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 : ]
}
2022-11-27 08:10:17 +00:00
l = logging . getLogger ( ' solo_turnier.reader.all_results ' )
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 ( )
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