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

control

Blame
  • import-points 1.70 KiB
    #!/usr/bin/env python3
    
    import argparse
    import sys
    
    from mo.csv import FileFormat
    import mo.db as db
    from mo.imports import PointsImport
    import mo.users
    import mo.util
    from mo.util import die
    
    parser = argparse.ArgumentParser(description='Importuje body za jednu nebo více úloh (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, metavar='ID', help='kód úlohy (default: všechny úlohy kola)')
    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!")
    
    if args.task is not None:
        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")
    else:
        task = None
    
    user = mo.users.user_by_email(args.user)
    if user is None:
        die(f"Uživatel {args.user} neexistuje")
    
    imp = PointsImport(
        user,
        round=round,
        task=task,
        allow_add_del=args.add_del,
    )
    imp.fmt = FileFormat.tsv
    
    if args.import_file:
        if not imp.run(args.import_file):
            sys.exit(1)
    else:
        sys.stdout.write(imp.get_template())