Skip to content
Snippets Groups Projects
Select Git revision
  • 81480563861c5231230af4a6a5bee27362e3fe93
  • devel default
  • master
  • fo
  • jirka/typing
  • fo-base
  • mj/submit-images
  • jk/issue-96
  • jk/issue-196
  • honza/add-contestant
  • honza/mr7
  • honza/mrf
  • honza/mrd
  • honza/mra
  • honza/mr6
  • honza/submit-images
  • honza/kolo-vs-soutez
  • jh-stress-test-wip
  • shorten-schools
19 results

create-tasks

Blame
  • Martin Mares's avatar
    Martin Mareš authored and Jan Prachař committed
    81480563
    History
    create-tasks 1.20 KiB
    #!/usr/bin/env python3
    
    import argparse
    
    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='count', type=int, help='počet úloh')
    parser.add_argument('-p', '--points', type=int, default=None, help='maximální počet bodů')
    
    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'")
    
    for i in range(1, args.count + 1):
        code = f'{round.category}-{round.code or round.seq}-{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()