From 229a3c6ccbafee07178437b69a20778c0ed3412b Mon Sep 17 00:00:00 2001
From: Martin Mares <mj@ucw.cz>
Date: Wed, 23 Aug 2023 17:54:45 +0200
Subject: [PATCH] =?UTF-8?q?create-tasks:=20Vyu=C5=BE=C3=ADv=C3=A1=20nov?=
 =?UTF-8?q?=C3=A9=20zakl=C3=A1d=C3=A1n=C3=AD=20s=C3=A9ri=C3=AD=20=C3=BAloh?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 bin/create-tasks | 35 +++++++++++++++++++++--------------
 1 file changed, 21 insertions(+), 14 deletions(-)

diff --git a/bin/create-tasks b/bin/create-tasks
index ca4c6028..88369ed7 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)
-- 
GitLab