diff --git a/bin/create-tasks b/bin/create-tasks index ca4c602860e1b5d132016f68df692cbd9a4bcdcb..88369ed7c30c78af97b7ea498c98bfad88a5dd62 100755 --- a/bin/create-tasks +++ b/bin/create-tasks @@ -1,16 +1,19 @@ #!/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(dest='round', type=str, metavar='YY-C-S[p]', help='kód kola') -parser.add_argument(dest='code', type=str, help='kód kola použitý v kódech úloh') -parser.add_argument(dest='count', type=int, help='počet úloh') +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() @@ -27,14 +30,18 @@ if round is None: if round.state != db.RoundState.preparing: die("Kolo musí být ve stavu 'připravuje se'") -for i in range(1, args.count + 1): - code = f'{round.category}-{args.code}-{i}' - task = sess.query(db.Task).filter_by(round=round, code=code).one_or_none() - if task: - print(f'{code}: již existuje') - else: - task = db.Task(round=round, code=code, name=f'Úloha {i}', max_points=args.points) - sess.add(task) - print(f'{code}: zakládám') - -sess.commit() +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)