From 13949303a55e2e092712de563e7b746abcad8f3a Mon Sep 17 00:00:00 2001 From: Trygve Date: Sat, 5 Mar 2022 17:35:33 +0100 Subject: [PATCH] Everything is now contained in the Event class. --- dev.py | 13 ---------- otime.py | 79 ++++++++++---------------------------------------------- 2 files changed, 13 insertions(+), 79 deletions(-) diff --git a/dev.py b/dev.py index 80fc69a..a293163 100644 --- a/dev.py +++ b/dev.py @@ -6,23 +6,10 @@ from rich.columns import Columns from rich.table import Table if __name__ == "__main__": - #courses = otime.courses_from_ttime_conf('sc_2021_ttime/ttime.cnf.txt') - #o_classes = otime.classes_from_ttime_conf('sc_2021_ttime/ttime.cnf.txt', courses) - #runner_list = otime.ttime_db_to_class('sc_2021_ttime/db_eventor.csv', o_classes) - #runner_list = otime.xml_to_class('entries_KOK_Sommercup,_løp_2.xml', o_classes) - #otime.ttime_mtr_to_class('sc_2021_ttime/mtr.csv', runner_list) - #print_runners(runner_list) - #print_time(runner_list) - #print_o_classes(o_classes) - #print_class_splits(runner_list, o_classes[0]) - #print(otime.check_codes(runner_list[1])) - #otime.gen_xml_result(runner_list, o_classes) - event = otime.event(0, 'supercup') event.import_ttime_cnf('sc_2021_ttime/ttime.cnf.txt') event.import_ttime_db('sc_2021_ttime/db_eventor.csv') event.import_mtr_file('sc_2021_ttime/mtr.csv') #card_punches = otime.card_punch.list_from_mtr_f('sc_2021_ttime/mtr.csv') - event.append_punch_list(event.card_punches) event.match_runners_cards() event.get_xml_res().write('Resultater.xml') diff --git a/otime.py b/otime.py index 580cb5f..0b9e13e 100644 --- a/otime.py +++ b/otime.py @@ -38,16 +38,6 @@ class event: if n.card == i.card: n.card_r = i - # MIDLERTIDIG - def append_punch_list(self, punches): - for n in self.runners: - for i in punches: - if n.card == i.card: - n.controls = list(i.punches.keys()) - n.splits = list(i.punches.values()) - n.s_time = i.s_time - n.f_time = i.f_time - def get_xml_res(self): root = ET.Element('ResultList') root.set('xmlns', 'http://www.orienteering.org/datastandard/3.0') @@ -95,9 +85,9 @@ class event: # # result = ET.SubElement(person_result, 'Result') - if len(n.splits) > 2: - xml_child(result, 'StartTime', n.s_time.isoformat()) - xml_child(result, 'FinishTime', n.f_time.isoformat()) + if hasattr(n,'card_r') and len(n.card_r.punches) > 2: + xml_child(result, 'StartTime', n.card_r.s_time.isoformat()) + xml_child(result, 'FinishTime', n.card_r.f_time.isoformat()) xml_child(result, 'Time', n.totaltime()) if n.status() == 'OK': # @@ -106,7 +96,7 @@ class event: xml_child(result, 'Position', n.rank(self.runners)) xml_child(result, 'Status', n.status()) # - for code,split in zip(n.o_class.course.codes, n.res_splits(), strict=True): + for code,split in n.res_splits().items(): st = ET.SubElement(result, 'SplitTime') xml_child(st, 'ControlCode', code) xml_child(st, 'Time', split) @@ -116,7 +106,7 @@ class event: for code in n.o_class.course.codes: st = ET.SubElement(result, 'SplitTime') xml_child(st, 'ControlCode', code) - for control,split in zip(n.controls, n.splits): + for control,split in n.card_r.punches.items(): if code == control: xml_child(st, 'Time', split) else: @@ -137,16 +127,12 @@ class runner: self.country = country self.card = card self.o_class = o_class - self.controls = controls - self.splits = splits - self.s_time = 0 - self.f_time = 0 def fullname(self): return '{} {}'.format(self.first, self.last) def check_codes(self): # Returns False if not ok and touple if ok - return contains(self.o_class.course.codes, self.controls) + return contains(self.o_class.course.codes, list(self.card_r.punches.keys())) def totaltime(self): f_control = self.o_class.course.codes[-1] try: @@ -155,7 +141,7 @@ class runner: return list(self.card_r.punches.values())[-1] def status(self): - if self.controls == []: + if hasattr(self, 'card_r') == False: return 'Active' elif self.check_codes(): return 'OK' @@ -165,11 +151,12 @@ class runner: c_ranked = rank_runners(allrunners, self.o_class) return c_ranked.index(self) + 1 def res_splits(self): - res_p = self.card_r.punches.copy() - for key in res_p.keys: - if key not in self.o_class.course.codes - res_p.pop(key) - return res_p + punches = self.card_r.punches + punches_ret = punches.copy() + for key in punches.keys(): + if key not in self.o_class.course.codes: + punches_ret.pop(key) + return punches_ret class card_punch: def __init__(self, card, punches, s_time, f_time): @@ -321,46 +308,6 @@ def ttime_db_to_class(ttime_file, o_class_list=[]): runnerarray.append(runner(eventorid, first, last, club, country, card, runner_o_class, [], [])) return runnerarray -# Denne fjernes når card_punch klasses er ferdig -def ttime_mtr_to_class(csv_file, runnerarray): - csvreader = csv.reader(open(csv_file)) - fields = next(csvreader) - - fields = [] - rows = [] - # hver rad er brikkenummer med tilhørende info - for row in csvreader: - rows.append(row) - for row in rows: - controls = [] - splits = [] - # postkodene kommer på oddetall fra og med den 11. De blir hevet inn i controls - for item in row[11::2]: - if item != '000' and item != '0000' and item != '00000': - controls.append(int(item)) - # strekktidene kommer på partall fra og med den 12. De blir hevet i splits. - for item in row[12::2]: - if item != '000' and item != '0000' and item != '00000': - splits.append(int(item)) - # looper gjonnom løperobjektene og legger til poster og strekktider + start og sluttid - for runner in runnerarray: - if runner.card == int(row[6]): - runner.controls = controls - runner.splits = splits - - # usikker på om dette er riktig klokeslett - if len(runner.splits) > 2: - tl = row[5].split(' ') - tl[0] = tl[0].split('.') - tl[0][2] = '20' + tl[0][2] - tl[0] = list(map(int, tl[0])) - tl[1] = tl[1].split(':') - tl[1][2] = float(tl[1][2]) - tl[1] = list(map(int, tl[1])) - f_time = datetime.datetime(tl[0][2], tl[0][1], tl[0][0], tl[1][0], tl[1][1], tl[1][2]) - s_time = f_time - datetime.timedelta(seconds = runner.totaltime()) - runner.f_time = f_time - runner.s_time = s_time def contains(small, big): valid = True