forked from Trygve/otime
		
	Fiksa iof xml import
This commit is contained in:
		
							parent
							
								
									7591523b37
								
							
						
					
					
						commit
						de4f288a4a
					
				@ -1,5 +1,6 @@
 | 
			
		||||
import datetime
 | 
			
		||||
import xml.etree.ElementTree as ET
 | 
			
		||||
import otime
 | 
			
		||||
 | 
			
		||||
def xml_child(parent, tag, content):
 | 
			
		||||
    # Used to make creating xml files easier
 | 
			
		||||
@ -120,8 +121,8 @@ def runners_from_xml_entries(xml_file):
 | 
			
		||||
            card = None
 | 
			
		||||
 | 
			
		||||
        start_time = None
 | 
			
		||||
        runners.append(Runner(rid, first, last, club=club_name, club_id=club_id,
 | 
			
		||||
                              country=country,card=card, o_class_str=class_str,
 | 
			
		||||
        runners.append(otime.Runner(rid, first, last, club=club_name, club_id=club_id,
 | 
			
		||||
                              country=country,card_id=card, o_class_str=class_str,
 | 
			
		||||
                              start_time=start_time, fee_id=fee_id))
 | 
			
		||||
    return runners
 | 
			
		||||
 | 
			
		||||
@ -151,7 +152,7 @@ def fees_from_xml_entries(xml_file):
 | 
			
		||||
            except AttributeError:
 | 
			
		||||
                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))
 | 
			
		||||
    return fee_objs
 | 
			
		||||
 | 
			
		||||
@ -171,5 +172,36 @@ def courses_from_xml(xml_file):
 | 
			
		||||
        controls.remove('STA1')
 | 
			
		||||
        controls.remove('FIN1')
 | 
			
		||||
        controls = [int(l) for l in controls]
 | 
			
		||||
        courseobjs.append(Course(name, controls))
 | 
			
		||||
        courseobjs.append(otime.Course(name, controls))
 | 
			
		||||
    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)
 | 
			
		||||
@ -7,7 +7,7 @@ import pdf
 | 
			
		||||
class Runner:
 | 
			
		||||
    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,
 | 
			
		||||
                 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.first = first
 | 
			
		||||
        self.last = last
 | 
			
		||||
@ -19,7 +19,7 @@ class Runner:
 | 
			
		||||
        self.fork = fork
 | 
			
		||||
        self.start_time = start_time
 | 
			
		||||
        self.fee_id = fee_id
 | 
			
		||||
        self.status_override = ''
 | 
			
		||||
        self.status_override = status_override
 | 
			
		||||
 | 
			
		||||
    def __repr__(self):
 | 
			
		||||
        return(f'name({self.fullname()})')
 | 
			
		||||
@ -337,29 +337,6 @@ class Event:
 | 
			
		||||
        self.add_fees(*fees_from_xml_entries(xml_file))
 | 
			
		||||
 | 
			
		||||
    # 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):
 | 
			
		||||
        self.courses = courses_from_xml(xml_file)
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user