Compare commits

..

2 Commits

Author SHA1 Message Date
aee318bd0e La til xml export som valg 2022-05-30 16:26:39 +02:00
caca1fac99 La til støtte for gaffla løyper 2022-05-30 16:25:49 +02:00
2 changed files with 40 additions and 16 deletions

View File

@ -1,3 +1,4 @@
from copy import copy
import datetime
import csv
import re
@ -112,6 +113,8 @@ class Event:
runners_ranked.extend(runners_sorted)
for n in runners_ranked:
if n.status() == 'Active':
continue
person_result = ET.SubElement(class_result, 'PersonResult')
# <Person>
person = ET.SubElement(person_result, 'Person')
@ -149,17 +152,23 @@ class Event:
st = ET.SubElement(result, 'SplitTime')
xml_child(st, 'ControlCode', code)
xml_child(st, 'Time', split)
if code == n.o_class.course.codes[-1]:
if code == n.res_codes()[-1]:
break
# </SplitTime>
elif n.status() == 'Disqualified':
xml_child(result, 'Status', n.status())
for code in n.o_class.course.codes:
controls = copy(n.card_r.controls)
splits = copy(n.card_r.splits)
for code in n.res_codes():
st = ET.SubElement(result, 'SplitTime')
xml_child(st, 'ControlCode', code)
for control, split in zip(n.card_r.controls, n.card_r.splits):
for control, split in zip(controls, splits):
if code == control:
xml_child(st, 'Time', split)
controls.remove(control)
splits.remove(split)
break
else:
xml_child(result, 'Status', n.status())
else:
@ -206,7 +215,7 @@ class Event:
courses = []
for c in data['courses']:
courses.append(Course(c['name'], c['codes']))
courses.append(Course(c['name'], c['codes'], forked=c['forked'], variations=c['variations']))
o_classes = []
for c in data['o_classes']:
@ -335,11 +344,10 @@ class Runner:
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, list(self.card_r.controls))
return contains(self.res_codes(), self.card_r.controls)
def totaltime(self):
f_control = self.o_class.course.codes[-1]
f_control = self.res_codes()[-1]
try:
index = self.card_r.controls.index(f_control)
return self.card_r.splits[index]
@ -358,15 +366,24 @@ class Runner:
c_ranked = rank_runners(allrunners, self.o_class)
return c_ranked.index(self) + 1
def res_codes(self):
if self.o_class.course.forked == False:
return self.o_class.course.codes
else:
return self.o_class.course.variations[self.fork]
# Used for making result files and tables
def res_splits(self):
splits_cpy = self.card_r.splits.copy()
for control in self.card_r.controls:
if control not in self.o_class.course.codes:
if control not in self.res_codes():
index = self.card_r.controls.index(control)
split = self.card_r.splits[index]
splits_cpy.remove(split)
return splits_cpy # list
def asdict(self):
return {
'id': self.id,
@ -494,14 +511,14 @@ class Course:
self.codes = codes
try:
forked = kwargs['forked']
self.forked = kwargs['forked']
except KeyError:
forked = False
self.forked = False
try:
variations = kwargs['variations']
self.variations = kwargs['variations']
except KeyError:
variations = None
self.variations = None
def __repr__(self):
return f'name({self.name})'
@ -509,7 +526,9 @@ class Course:
def asdict(self):
return {
'name': self.name,
'codes': self.codes
'codes': self.codes,
'forked': self.forked,
'variations': self.variations
}
# Stored in Event.o_classes

View File

@ -21,7 +21,7 @@ def main():
case 1:
import_menu()
case 2:
print('export')
export_menu()
case 3:
print('edit')
case 4:
@ -131,7 +131,8 @@ def export_menu():
global event
while True:
try:
print(''' 1. export otime file
print(''' 1. Export otime file
2. Export iof 3.0 xml file
2. Back''')
try:
opt = int(input('Choose an option (1-2): '))
@ -142,9 +143,13 @@ def export_menu():
case 1:
filename = input('File: ')
f = open(filename, 'w')
f.write(event.create_json_file)
f.write(event.create_json_file())
case 2:
filename = input('File: ')
event.get_xml_res().write(filename)
case 3:
break
except FileNotFoundError: