#!/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ží soutěže pro dané kolo') parser.add_argument(dest='round', type=str, metavar='YY-C-S[p]', help='kód kola') parser.add_argument('-n', '--dry-run', default=False, action='store_true', help='pouze ukáže, co by bylo provedeno') 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.delegate: state = round.state else: state = db.RoundState.preparing if round.is_subround(): # Pokud je to podkolo, kopírujeme soutěže z hlavního kola for mc in sess.query(db.Contest).filter_by(round=round.master): r = mc.place print(f"Zakládám {round.round_code()} pro místo {r.name} (podsoutěž)") if not args.dry_run: c = db.Contest(round=round, place=r, master=mc, state=state) sess.add(c) sess.flush() mo.util.log(db.LogType.contest, c.contest_id, { 'action': 'created', }) else: regions = sess.query(db.Place).filter_by(level=round.level).all() assert regions, "Neexistují žádná místa dané úrovně" for r in regions: print(f"Zakládám {round.round_code()} pro místo {r.name}") if not args.dry_run: c = db.Contest(round=round, place=r, state=state) sess.add(c) sess.flush() c.master = c mo.util.log(db.LogType.contest, c.contest_id, { 'action': 'created', }) if not args.dry_run: sess.commit()