forked from Trygve/otime
		
	
		
			
				
	
	
		
			201 lines
		
	
	
		
			7.8 KiB
		
	
	
	
		
			Python
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			201 lines
		
	
	
		
			7.8 KiB
		
	
	
	
		
			Python
		
	
	
		
			Executable File
		
	
	
	
	
#!/usr/bin/env python
 | 
						|
import otime
 | 
						|
 | 
						|
import argparse
 | 
						|
import datetime
 | 
						|
from rich import print
 | 
						|
from rich import inspect
 | 
						|
from rich.console import Console
 | 
						|
from rich.columns import Columns
 | 
						|
from rich.table import Table
 | 
						|
def print_runners(Runners):
 | 
						|
    table = Table(title="Runners")
 | 
						|
    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("Status", justify="right", style="blue")
 | 
						|
 | 
						|
    for i in Runners:
 | 
						|
      try:
 | 
						|
            o_class = i.o_class.name
 | 
						|
      except:
 | 
						|
            o_class = ''
 | 
						|
      table.add_row(i.fullname(), i.club ,str(i.card), o_class, i.status())
 | 
						|
 | 
						|
    console = Console()
 | 
						|
    console.print(table)
 | 
						|
def print_time(Runners):
 | 
						|
    table = Table(title="Time")
 | 
						|
    table.add_column("Name", justify="right", style="cyan", no_wrap=True)
 | 
						|
    table.add_column("club", style="magenta")
 | 
						|
    table.add_column("splits", style="red")
 | 
						|
    table.add_column("Check", style="green")
 | 
						|
    table.add_column("Time", justify="right", style="blue")
 | 
						|
    for i in Runners:
 | 
						|
      try:
 | 
						|
        tottime = datetime.timedelta(seconds = i.totaltime())
 | 
						|
      except:
 | 
						|
        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 = []
 | 
						|
        runners_dsq = []
 | 
						|
        for n in runners:
 | 
						|
            if n.status() == 'OK':
 | 
						|
                runners_ok.append(n)
 | 
						|
            elif n.status() == 'Disqualified':
 | 
						|
                runners_dsq.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.club, str(datetime.timedelta(seconds=i.totaltime())))
 | 
						|
    for i in runners_dsq:
 | 
						|
        	table.add_row('Dsq',i.fullname(), i.club, '')
 | 
						|
 | 
						|
    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")
 | 
						|
    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 = []
 | 
						|
        runners_dsq = []
 | 
						|
        for n in runners:
 | 
						|
            if n.status() == 'OK':
 | 
						|
                runners_ok.append(n)
 | 
						|
            elif n.status() == 'Disqualified':
 | 
						|
                runners_dsq.append(n)
 | 
						|
        runners_ok.sort(key=lambda x: x.totaltime())
 | 
						|
    pos = 0
 | 
						|
    for i in runners_ok:
 | 
						|
        splits = i.res_splits()
 | 
						|
        pos += 1
 | 
						|
        list_string = map(lambda x:str(datetime.timedelta(seconds=x)), splits)
 | 
						|
        table.add_row(str(pos)+'.', i.fullname(), i.club, *list_string)
 | 
						|
    for i in runners_dsq:
 | 
						|
        splits = i.res_splits()
 | 
						|
        list_string = map(lambda x:str(datetime.timedelta(seconds=x)), splits)
 | 
						|
        table.add_row('Dsq', i.fullname(), i.club, *list_string)
 | 
						|
    console = Console()
 | 
						|
    console.print(table)
 | 
						|
def print_o_classes(class_list):
 | 
						|
    table = Table(title="Classes")
 | 
						|
    table.add_column("Class", justify="right", style="cyan", no_wrap=True)
 | 
						|
    table.add_column("Course", style="magenta")
 | 
						|
    table.add_column("Controls", justify="right", style="green")
 | 
						|
 | 
						|
    for i in class_list:
 | 
						|
        table.add_row(i.name, i.course.name , str(i.course.codes))
 | 
						|
 | 
						|
    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_runner = subparsers.add_parser('show_runner', help='show a table of runners')
 | 
						|
    show_runner.add_argument('--ttcnf', required=True, help='ttime configuration file')
 | 
						|
    show_runner.add_argument('--ttdb', required=True, help='ttime database file')
 | 
						|
    show_runner.add_argument('--mtr', required=True, help='mtr csv file')
 | 
						|
    show_runner.add_argument('--runner', required=True, help='Which runner to print')
 | 
						|
 | 
						|
    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')
 | 
						|
 | 
						|
    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':
 | 
						|
        event = otime.event(0, 'NoName')
 | 
						|
        event.import_ttime_cnf(args.ttcnf)
 | 
						|
        event.import_ttime_db(args.ttdb)
 | 
						|
        event.import_mtr_file(args.mtr)
 | 
						|
        event.match_runners_cards()
 | 
						|
        print_runners(event.runners)
 | 
						|
    elif args.command == 'show_runner':
 | 
						|
        event = otime.event(0, 'NoName')
 | 
						|
        event.import_ttime_cnf(args.ttcnf)
 | 
						|
        event.import_ttime_db(args.ttdb)
 | 
						|
        event.import_mtr_file(args.mtr)
 | 
						|
        event.match_runners_cards()
 | 
						|
        for n in event.runners:
 | 
						|
            if args.runner == n.fullname():
 | 
						|
                inspect(n)
 | 
						|
                break
 | 
						|
        else:
 | 
						|
            print('Runner not found. Use full name.')
 | 
						|
 | 
						|
 | 
						|
    elif args.command == 'show_result':
 | 
						|
        event = otime.event(0, 'NoName')
 | 
						|
        event.import_ttime_cnf(args.ttcnf)
 | 
						|
        event.import_ttime_db(args.ttdb)
 | 
						|
        event.import_mtr_file(args.mtr)
 | 
						|
        event.match_runners_cards()
 | 
						|
        for n in event.o_classes:
 | 
						|
            if args.o_class_str == n.name:
 | 
						|
                sel_classes = [n]
 | 
						|
                break
 | 
						|
        else:
 | 
						|
            sel_classes = event.o_classes
 | 
						|
        for o_class in sel_classes:
 | 
						|
            if args.splits:
 | 
						|
                print_class_splits(event.runners, o_class)
 | 
						|
            else:
 | 
						|
                print_class_result(event.runners, o_class)
 | 
						|
    elif args.command == 'show_classes':
 | 
						|
        event = otime.event(0, 'NoName')
 | 
						|
        event.import_ttime_cnf(args.ttcnf)
 | 
						|
        print_o_classes(event.o_classes)
 | 
						|
 | 
						|
    elif args.command == 'create_xml':
 | 
						|
        event = otime.event(0, 'NoName')
 | 
						|
        event.import_ttime_cnf(args.ttcnf)
 | 
						|
        event.import_ttime_db(args.ttdb)
 | 
						|
        event.import_mtr_file(args.mtr)
 | 
						|
        event.match_runners_cards()
 | 
						|
        event.get_xml_res().write(args.file)
 | 
						|
 | 
						|
if __name__ == "__main__":
 | 
						|
    main()
 |