Skip to content
Snippets Groups Projects
Select Git revision
  • 7e11e3841cff96efa733e7cd85834d8d735f55fe
  • master default protected
2 results

splay_operation.h

Blame
  • create-tasks 1.52 KiB
    #!/usr/bin/env python3
    
    import argparse
    import sys
    
    import mo.db as db
    import mo.util
    from mo.util import die, init_standalone
    
    parser = argparse.ArgumentParser(description='Založí úlohy pro dané kolo')
    parser.add_argument('-r', '--round', required=True, type=str, metavar='YY-C-S[p]', help='kód kola')
    parser.add_argument('-k', '--code', required=True, type=str, help='kód první úlohy')
    parser.add_argument('-n', '--name', required=True, type=str, help='název první úlohy')
    parser.add_argument('-c', '--count', default=1, type=int, help='počet úloh (default: 1)')
    parser.add_argument('-p', '--points', type=int, default=None, help='maximální počet bodů')
    parser.add_argument('-t', '--type', type=str, default='regular', help='typ úlohy: regular (default) / cms')
    
    args = parser.parse_args()
    
    init_standalone()
    sess = db.get_session()
    
    round_code = mo.util.RoundCode.parse(args.round)
    if round_code is None:
        die("Chybná syntaxe kódu kola")
    round = mo.util.get_round_by_code(round_code)
    if round is None:
        die("Kolo s tímto kódem neexistuje!")
    
    if round.state != db.RoundState.preparing:
        die("Kolo musí být ve stavu 'připravuje se'")
    
    try:
        task_type = db.TaskType.coerce(args.type)
    except ValueError:
        die(f'Neznámý typ úlohy {args.type}')
    
    tmpl = db.Task(round=round, code=args.code, name=args.name, max_points=args.points, type=task_type)
    okays, errors = mo.util.create_tasks(tmpl, args.count, 'script')
    
    for m in okays:
        print(m)
    for m in errors:
        print(m, file=sys.stderr)
    
    if errors:
        sys.exit(1)