#!/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)