Fiksa iof xml import

This commit is contained in:
Trygve 2023-11-17 21:52:19 +01:00
parent 7591523b37
commit de4f288a4a
2 changed files with 38 additions and 29 deletions

View File

@ -1,5 +1,6 @@
import datetime import datetime
import xml.etree.ElementTree as ET import xml.etree.ElementTree as ET
import otime
def xml_child(parent, tag, content): def xml_child(parent, tag, content):
# Used to make creating xml files easier # Used to make creating xml files easier
@ -120,8 +121,8 @@ def runners_from_xml_entries(xml_file):
card = None card = None
start_time = None start_time = None
runners.append(Runner(rid, first, last, club=club_name, club_id=club_id, runners.append(otime.Runner(rid, first, last, club=club_name, club_id=club_id,
country=country,card=card, o_class_str=class_str, country=country,card_id=card, o_class_str=class_str,
start_time=start_time, fee_id=fee_id)) start_time=start_time, fee_id=fee_id))
return runners return runners
@ -151,7 +152,7 @@ def fees_from_xml_entries(xml_file):
except AttributeError: except AttributeError:
to_birth_date = None to_birth_date = None
fee_objs.append(Fee(fee_id, name, currency, amount, fee_objs.append(otime.Fee(fee_id, name, currency, amount,
from_birth_date=from_birth_date, to_birth_date=to_birth_date)) from_birth_date=from_birth_date, to_birth_date=to_birth_date))
return fee_objs return fee_objs
@ -171,5 +172,36 @@ def courses_from_xml(xml_file):
controls.remove('STA1') controls.remove('STA1')
controls.remove('FIN1') controls.remove('FIN1')
controls = [int(l) for l in controls] controls = [int(l) for l in controls]
courseobjs.append(Course(name, controls)) courseobjs.append(otime.Course(name, controls))
return courseobjs return courseobjs
def event_from_xml_entries(xml_file):
tree = ET.parse(xml_file)
root = tree.getroot()
url = '{http://www.orienteering.org/datastandard/3.0}'
event_el = root.find(f'./{url}Event')
event_id = int(event_el.find(f'./{url}Id').text)
name = event_el.find(f'./{url}Name').text
organiser = event_el.find(f'./{url}Organiser/{url}Name').text
start_ds = event_el.find(f'./{url}StartTime/{url}Date').text
start_ts = event_el.find(f'./{url}StartTime/{url}Time').text[:-1]
start_time = datetime.datetime.fromisoformat(f'{start_ds}T{start_ts}')
end_ds = event_el.find(f'./{url}EndTime/{url}Date').text
end_ts = event_el.find(f'./{url}EndTime/{url}Time').text[:-1]
end_time = datetime.datetime.fromisoformat(f'{end_ds}T{end_ts}')
person_entries = root.findall(f'./{url}PersonEntry')
class_names = []
for p_entry in person_entries:
class_names.append(p_entry.find(f'./{url}Class/{url}Name').text)
o_classes = [otime.OClass(i, []) for i in set(class_names)]
runners = runners_from_xml_entries(xml_file)
fees = fees_from_xml_entries(xml_file)
return otime.Event(event_id, name, organiser=organiser, runners=runners,
fees=fees, start_time=start_time, end_time=end_time, o_classes=o_classes)

View File

@ -7,7 +7,7 @@ import pdf
class Runner: class Runner:
def __init__(self, id: int, first: str, last: str, club=None, club_id=None, def __init__(self, id: int, first: str, last: str, club=None, club_id=None,
country=None, card_id=None, o_class_str=None, o_class=None, country=None, card_id=None, o_class_str=None, o_class=None,
fork=0, start_time=None, fee_id=None, fee=None): fork=0, start_time=None, fee_id=None, fee=None, status_override=''):
self.id = id self.id = id
self.first = first self.first = first
self.last = last self.last = last
@ -19,7 +19,7 @@ class Runner:
self.fork = fork self.fork = fork
self.start_time = start_time self.start_time = start_time
self.fee_id = fee_id self.fee_id = fee_id
self.status_override = '' self.status_override = status_override
def __repr__(self): def __repr__(self):
return(f'name({self.fullname()})') return(f'name({self.fullname()})')
@ -337,29 +337,6 @@ class Event:
self.add_fees(*fees_from_xml_entries(xml_file)) self.add_fees(*fees_from_xml_entries(xml_file))
# Må endres # Må endres
def from_xml_entries(xml_file):
tree = ET.parse(xml_file)
root = tree.getroot()
url = '{http://www.orienteering.org/datastandard/3.0}'
event_el = root.find(f'./{url}Event')
event_id = int(event_el.find(f'./{url}Id').text)
name = event_el.find(f'./{url}Name').text
organiser = event_el.find(f'./{url}Organiser/{url}Name').text
start_ds = event_el.find(f'./{url}StartTime/{url}Date').text
start_ts = event_el.find(f'./{url}StartTime/{url}Time').text[:-1]
start_time = datetime.datetime.fromisoformat(f'{start_ds}T{start_ts}')
end_ds = event_el.find(f'./{url}EndTime/{url}Date').text
end_ts = event_el.find(f'./{url}EndTime/{url}Time').text[:-1]
end_time = datetime.datetime.fromisoformat(f'{end_ds}T{end_ts}')
runners = runners_from_xml_entries(xml_file)
fees = fees_from_xml_entries(xml_file)
return Event(event_id, name, organiser=organiser, runners=runners,
fees=fees, start_time=start_time, end_time=end_time)
def read_xml_courses(self, xml_file): def read_xml_courses(self, xml_file):
self.courses = courses_from_xml(xml_file) self.courses = courses_from_xml(xml_file)