diff --git a/bin/import-points b/bin/import-points new file mode 100755 index 0000000000000000000000000000000000000000..17055911b7a7e5f2d95f4ca0c481a67b98b3d62e --- /dev/null +++ b/bin/import-points @@ -0,0 +1,53 @@ +#!/usr/bin/env python3 + +import argparse +import sys + +from mo.csv import FileFormat +import mo.db as db +from mo.imports import create_import, ImportType +import mo.users +import mo.util +from mo.util import die + +parser = argparse.ArgumentParser(description='Importuje body za úlohu (bez --import vypíše šablonu).') +parser.add_argument('--round', '-r', type=str, required=True, metavar='YY-C-S[p]', help='kód kola') +parser.add_argument('--task', '-t', type=str, required=True, metavar='ID', help='kód úlohy') +parser.add_argument('--user', '-u', type=str, required=True, metavar='EMAIL', help='uživatel, ktery provádí import') +parser.add_argument('--import', '-i', dest='import_file', type=str, metavar='NAME', help='importuje data ze souboru (TSV)') +parser.add_argument('--add-del', default=False, action='store_true', help='povolí zakládat/rušit řešení') + +args = parser.parse_args() +mo.util.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!") + +task = sess.query(db.Task).filter_by(round=round, code=args.task).one_or_none() +if task is None: + die("Úloha s tímto kódem neexistuje") + +user = mo.users.user_by_email(args.user) +if user is None: + die(f"Uživatel {args.user} neexistuje") + +imp = create_import( + user, + type=ImportType.points, + fmt=FileFormat.tsv, + round=round, + task=task, + allow_add_del=args.add_del, +) + +if args.import_file: + if not imp.run(args.import_file): + sys.exit(1) +else: + sys.stdout.write(imp.get_template())