From 170542fbd0dc9d6c28d1994a79564d135b20e05d Mon Sep 17 00:00:00 2001 From: Trygve Date: Mon, 21 Feb 2022 12:51:02 +0100 Subject: [PATCH] La til cli argumenter og resultattabell --- cli.py | 128 ++++++++++++++++++++++++++++++++++++++++++++++++--------- 1 file changed, 108 insertions(+), 20 deletions(-) mode change 100644 => 100755 cli.py diff --git a/cli.py b/cli.py old mode 100644 new mode 100755 index ddb18a6..d65f2fa --- a/cli.py +++ b/cli.py @@ -1,7 +1,11 @@ +#!/usr/bin/env python import otime +import argparse import datetime +from rich import print from rich.console import Console +from rich.columns import Columns from rich.table import Table def print_runners(Runners): table = Table(title="Runners") @@ -30,21 +34,48 @@ def print_time(Runners): tottime = 0 table.add_row(i.fullname(), i.o_class.name, str(i.splits), str(i.check_codes()), str(tottime)) + console = Console() + console.print(table) +def print_class_result(runners, o_class): + table = Table(title=o_class.name) + table.add_column("Pos", style="red", no_wrap=True) + table.add_column("Name", justify="right", style="cyan", no_wrap=True) + table.add_column("Club", style="magenta") + table.add_column("Time", justify="right", style="blue") + pos = 0 + if o_class: + runners = otime.get_runners_in_class(runners, o_class) + runners_ok = [] + for n in runners: + if n.status() == 'OK': + runners_ok.append(n) + runners_ok.sort(key=lambda x: x.totaltime()) + for i in runners_ok: + #if i.status() == 'OK': + pos += 1 + table.add_row(str(pos)+'.',i.fullname(), i.status(), str(datetime.timedelta(seconds=i.totaltime()))) + console = Console() console.print(table) def print_class_splits(runners, o_class): table = Table(title=o_class.name) + table.add_column("Pos", style="red", no_wrap=True) table.add_column("Name", justify="right", style="cyan", no_wrap=True) table.add_column("club", style="magenta") - table.add_column("card", style="red") - table.add_column("class", justify="right", style="green") - table.add_column("controls", justify="right", style="blue") - for i in o_class.course.codes: - table.add_column(str(i)) - - for i in runners: - if i.o_class == o_class: - table.add_row(i.fullname(), i.club ,str(i.card)) + if o_class: + for i in o_class.course.codes: + table.add_column(str(i)) + runners = otime.get_runners_in_class(runners, o_class) + runners_ok = [] + for n in runners: + if n.status() == 'OK': + runners_ok.append(n) + runners_ok.sort(key=lambda x: x.totaltime()) + pos = 0 + for i in runners_ok: + pos += 1 + list_string = map(lambda x:str(datetime.timedelta(seconds=x)), i.res_splits()) + table.add_row(str(pos)+'.', i.fullname(), i.club, *list_string) console = Console() console.print(table) @@ -60,15 +91,72 @@ def print_o_classes(class_list): console = Console() console.print(table) +def main(): + parser = argparse.ArgumentParser() + parser.add_argument( + '--debug', + action='store_true', + help='Print debug info' + ) + subparsers = parser.add_subparsers(dest='command') + show_runners = subparsers.add_parser('show_runners', help='show a table of runners') + show_runners.add_argument('--ttcnf', required=True, help='ttime configuration file') + show_runners.add_argument('--ttdb', required=True, help='ttime database file') + show_runners.add_argument('--mtr', required=True, help='mtr csv file') + + show_runners = subparsers.add_parser('show_result', help='show a table of runners') + show_runners.add_argument('--ttcnf', required=True, help='ttime configuration file') + show_runners.add_argument('--ttdb', required=True, help='ttime database file') + show_runners.add_argument('--mtr', required=True, help='mtr csv file') + show_runners.add_argument('--class', dest='o_class_str', help='Which class to show. Prints all classes if not set') + show_runners.add_argument('--splits', action='store_true', help='Shows split times') + + show_classes = subparsers.add_parser('show_classes', help='show a table of classes') + show_classes.add_argument('--ttcnf', required=True, help='ttime configuration file') + show_classes.add_argument('--ttdb', required=True, help='ttime db files') + show_classes.add_argument('--mtr', required=True, help='mtr csv file') + + create_xml = subparsers.add_parser('create_xml', help='Create xml result file') + create_xml.add_argument('--ttcnf', required=True, help='ttime configuration file') + create_xml.add_argument('--ttdb', required=True, help='ttime database file') + create_xml.add_argument('--mtr', required=True, help='mtr csv file') + create_xml.add_argument('--file', required=True, help='Filename for result file') + + args = parser.parse_args() + if args.command == 'show_runners': + courses = otime.courses_from_ttime_conf(args.ttcnf) + o_classes = otime.classes_from_ttime_conf(args.ttcnf, courses) + runner_list = otime.ttime_db_to_class(args.ttdb, o_classes) + otime.ttime_mtr_to_class(args.mtr, runner_list) + print_runners(runner_list) + if args.command == 'show_result': + courses = otime.courses_from_ttime_conf(args.ttcnf) + o_classes = otime.classes_from_ttime_conf(args.ttcnf, courses) + runner_list = otime.ttime_db_to_class(args.ttdb, o_classes) + otime.ttime_mtr_to_class(args.mtr, runner_list) + for n in o_classes: + if args.o_class_str == n.name: + o_class = n + break + else: + print('Class not found') + if args.splits: + print_class_splits(runner_list, o_class) + else: + print_class_result(runner_list, o_class) + elif args.command == 'show_classes': + courses = otime.courses_from_ttime_conf(args.ttcnf) + o_classes = otime.classes_from_ttime_conf(args.ttcnf, courses) + runner_list = otime.ttime_db_to_class(args.ttdb, o_classes) + otime.ttime_mtr_to_class(args.mtr, runner_list) + print_o_classes(o_classes) + + if args.command == 'create_xml': + courses = otime.courses_from_ttime_conf(args.ttcnf) + o_classes = otime.classes_from_ttime_conf(args.ttcnf, courses) + runner_list = otime.ttime_db_to_class(args.ttdb, o_classes) + otime.ttime_mtr_to_class(args.mtr, runner_list) + otime.gen_xml_result(runner_list, o_classes).write(args.file) + 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) + main()