From 74ee5cad562b6895925dcd8f43b97248cbb96900 Mon Sep 17 00:00:00 2001 From: Trygve Date: Thu, 30 Jun 2022 12:19:16 +0200 Subject: [PATCH] =?UTF-8?q?Startet=20p=C3=A5=20en=20pyscript=20side=20for?= =?UTF-8?q?=20ttime=20xml=20eksport?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- otime.py | 35 ++++++++++++++++++-------- web/index.html | 55 +++++++++++++++++++++++++++++++++++++++++ web/ps_ttime.py | 66 +++++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 146 insertions(+), 10 deletions(-) create mode 100755 web/index.html create mode 100644 web/ps_ttime.py diff --git a/otime.py b/otime.py index 8630272..120d78d 100644 --- a/otime.py +++ b/otime.py @@ -3,8 +3,9 @@ import datetime import csv import re import json +import io import xml.etree.ElementTree as ET -from fpdf import FPDF +# from fpdf import FPDF # The event object stores all the event data. @@ -70,13 +71,17 @@ class Event: def import_ttime_cnf(self, ttime_file): self.add_course(*courses_from_ttime_conf(ttime_file)) - ttime_file.seek(0) + if isinstance(ttime_file, io.TextIOBase): + ttime_file.seek(0) self.add_o_class(*classes_from_ttime_conf(ttime_file, self.courses)) def import_ttime_db(self, ttime_file): - csvreader = csv.reader(ttime_file, delimiter=';',) + if type(ttime_file) == str: + f_list = ttime_file.splitlines() + elif isinstance(ttime_file, io.TextIOBase): + csvreader = csv.reader(ttime_file, delimiter=';',) runnerarray = [] - for row in csvreader: + for row in f_list: if len(row) == 0 or row[1] == '': continue runnerarray.append(Runner.from_string(row, self.o_classes)) @@ -128,6 +133,7 @@ class Event: xml_child(event, 'Id', self.id) xml_child(event, 'Name', self.name) for i in self.o_classes: + print('Hmmmmmm') # class_result = ET.SubElement(root, 'ClassResult') # @@ -456,7 +462,7 @@ class Event: pdf.output(file_name) - +""" class PDF(FPDF): def footer(self): self.set_y(-15) @@ -467,7 +473,7 @@ class PDF(FPDF): self.cell(col_width, 7, 'oTime', border=1, align='L', fill=True) self.cell(col_width, 7, datetime.datetime.now().strftime('%d.%m.%Y %H:%M:%S'), border=1, align='C', fill=True) self.cell(col_width, 7, f"Side {self.page_no()} av {{nb}}", border=1, align='R', fill=True) - +""" # The runner object stores all the data specific to a runner. class Runner: def __init__(self, runner_id, first, last, club=None, club_id=None, @@ -546,7 +552,7 @@ class Runner: return self.card_r.splits[index] except: return 0 - + def status(self): if hasattr(self, 'card_r') is False or self.o_class is None: return 'Active' @@ -667,11 +673,13 @@ class CardDump: return(CardDump(card, controls, splits, read_time, s_time, f_time)) def list_from_mtr_f(mtr_f): - csvreader = csv.reader(mtr_f) + if type(mtr_f) == str: + f_list = mtr_f.splitlines() rows = [] cards = [] # hver rad er brikkenummer med tilhørende info + csvreader = csv.reader(f_list) for row in csvreader: if len(row) == 0: continue @@ -779,8 +787,12 @@ class Fee: # TODO: Take string instead of file. def courses_from_ttime_conf(ttime_file): + if type(ttime_file) == str: + conf = ttime_file.splitlines() + elif isinstance(ttime_file, io.TextIOBase): + conf = ttime_file.readlines() + courses = [] - conf = ttime_file.readlines() for line in conf: if '-codes' in line: code_list = re.search(r'(?<=\")(.*?)(?=\")', line).group().split(';') @@ -793,8 +805,11 @@ def courses_from_ttime_conf(ttime_file): return courses def classes_from_ttime_conf(ttime_file, courses): + if type(ttime_file) == str: + conf = ttime_file.splitlines() + elif isinstance(ttime_file, io.TextIOBase): + conf = ttime_file.readlines() o_classes = [] - conf = ttime_file.readlines() for line in conf: if '-courses' in line: raw_courselist = re.search(r'(?<=\")(.*?)(?=\")', line).group().split(';') diff --git a/web/index.html b/web/index.html new file mode 100755 index 0000000..bf815c5 --- /dev/null +++ b/web/index.html @@ -0,0 +1,55 @@ + + + + + + + File System Examples + + + + + - paths: + - ./otime.py + - ./ps_ttime.py + + + + + +
+
+
+
+ +
+ + +
+
+
+
+ +
+ + +
+
+
+
+ + + +

File Content:

+
+
+
+
+ + + from ps_ttime import main + main() + + + + diff --git a/web/ps_ttime.py b/web/ps_ttime.py new file mode 100644 index 0000000..035703e --- /dev/null +++ b/web/ps_ttime.py @@ -0,0 +1,66 @@ +import otime +import asyncio +from js import document, FileReader +from pyodide import create_proxy +import xml.etree.ElementTree as ET + +global event +event = otime.Event(0, 'PlaceHolder') + +async def process_conf(f_event): + global event + file_list = f_event.target.files.to_py() + for f in file_list: + data = await f.text() + document.getElementById('tt-cnf-cnt').innerHTML = data + event.import_ttime_cnf(data) + + for c in event.o_classes: + print(c.name, c.course.name) + +async def process_db(f_event): + global event + file_list = f_event.target.files.to_py() + for f in file_list: + data = await f.text() + document.getElementById('tt-db-cnt').innerHTML = data + event.import_ttime_db(data) + + +async def process_mtr(f_event): + global event + file_list = f_event.target.files.to_py() + for f in file_list: + data = await f.text() + document.getElementById('mtr-cnt').innerHTML = data + event.import_mtr_file(data) + +async def create_xml(f_event): + global event + + event.match_all() + + xml_res = ET.tostring(event.get_xml_res().getroot(), encoding='unicode', method='xml', xml_declaration=True) + #xml_res = dir(event.get_xml_res()) + document.getElementById('xml-cnt').innerHTML = xml_res.replace('&', '&').replace('<', '<').replace('>', '>') + +def main(): + global event + # Create a Python proxy for the callback function + # process_file() is your function to process events from FileReader + + cnf_f_event = create_proxy(process_conf) + ec = document.getElementById("tt-cnf") + ec.addEventListener("change", cnf_f_event, False) + + db_f_event = create_proxy(process_db) + ed = document.getElementById("tt-db") + ed.addEventListener("change", db_f_event, False) + + mtr_f_event = create_proxy(process_mtr) + em = document.getElementById("mtr") + em.addEventListener("change", mtr_f_event, False) + + xml_btn_call = create_proxy(create_xml) + eb = document.getElementById("xml-btn") + eb.addEventListener("click", xml_btn_call, False)