Skip to content
Snippets Groups Projects
Commit b31bd86d authored by Martin Mareš's avatar Martin Mareš
Browse files

Skripty create-{contests,round} umí dělená kola

parent 4e576938
Branches
No related tags found
No related merge requests found
...@@ -7,7 +7,7 @@ import mo.util ...@@ -7,7 +7,7 @@ import mo.util
from mo.util import die, init_standalone from mo.util import die, init_standalone
parser = argparse.ArgumentParser(description='Založí soutěže pro dané kolo') parser = argparse.ArgumentParser(description='Založí soutěže pro dané kolo')
parser.add_argument(dest='round', type=str, metavar='YY-C-S', help='ID kola') parser.add_argument(dest='round', type=str, metavar='YY-C-S[p]', help='ID kola')
parser.add_argument('-n', '--dry-run', default=False, action='store_true', help='pouze ukáže, co by bylo provedeno') parser.add_argument('-n', '--dry-run', default=False, action='store_true', help='pouze ukáže, co by bylo provedeno')
args = parser.parse_args() args = parser.parse_args()
...@@ -22,6 +22,23 @@ round = mo.util.get_round_by_code(round_code) ...@@ -22,6 +22,23 @@ round = mo.util.get_round_by_code(round_code)
if round is None: if round is None:
die("Kolo s tímto kódem neexistuje!") die("Kolo s tímto kódem neexistuje!")
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)
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() regions = sess.query(db.Place).filter_by(level=round.level).all()
assert regions, "Neexistují žádná místa dané úrovně" assert regions, "Neexistují žádná místa dané úrovně"
...@@ -29,11 +46,14 @@ for r in regions: ...@@ -29,11 +46,14 @@ for r in regions:
print(f"Zakládám {round.round_code()} pro místo {r.name}") print(f"Zakládám {round.round_code()} pro místo {r.name}")
if not args.dry_run: if not args.dry_run:
c = db.Contest(round=round, place=r) c = db.Contest(round=round, place=r)
sess.add(c) sess.add(c)
sess.flush() sess.flush()
c.master = c
mo.util.log(db.LogType.contest, c.contest_id, { mo.util.log(db.LogType.contest, c.contest_id, {
'action': 'created', 'action': 'created',
}) })
if not args.dry_run:
sess.commit() sess.commit()
...@@ -4,12 +4,14 @@ import argparse ...@@ -4,12 +4,14 @@ import argparse
import mo.db as db import mo.db as db
import mo.util import mo.util
from mo.util import die
parser = argparse.ArgumentParser(description='Založí soutěžní kolo') parser = argparse.ArgumentParser(description='Založí soutěžní kolo')
parser.add_argument('-y', '--year', type=int, required=True, help='ročník') parser.add_argument('-y', '--year', type=int, required=True, help='ročník')
parser.add_argument('-c', '--cat', type=str, required=True, help='kategorie') parser.add_argument('-c', '--cat', type=str, required=True, help='kategorie')
parser.add_argument('-s', '--seq', type=int, required=True, help='pořadí kola') parser.add_argument('-s', '--seq', type=int, required=True, help='pořadí kola')
parser.add_argument('-l', '--level', type=int, required=True, help='úroveň v hierarchii oblastí') parser.add_argument('-l', '--level', type=int, required=True, help='úroveň v hierarchii oblastí')
parser.add_argument('-p', '--part', type=int, default=0, help='část v rámci skupiny kol (default: 0)')
parser.add_argument('-n', '--name', type=str, required=True, help='název kola') parser.add_argument('-n', '--name', type=str, required=True, help='název kola')
args = parser.parse_args() args = parser.parse_args()
...@@ -17,10 +19,20 @@ args = parser.parse_args() ...@@ -17,10 +19,20 @@ args = parser.parse_args()
mo.util.init_standalone() mo.util.init_standalone()
sess = db.get_session() sess = db.get_session()
if args.part > 1:
master_rnd = sess.query(db.Round).filter_by(year=args.year, category=args.cat, seq=args.seq, part=1).one_or_none()
if master_rnd is None or master_rnd.is_subround():
die("Nemohu nalézt hlavní kolo")
if master_rnd.level != args.level:
die("Hlavní kolo probíhá na odlišné úrovni hierarchie")
else:
master_rnd = None
rnd = db.Round( rnd = db.Round(
year=args.year, year=args.year,
category=args.cat, category=args.cat,
seq=args.seq, seq=args.seq,
part=args.part,
level=args.level, level=args.level,
name=args.name, name=args.name,
) )
...@@ -28,6 +40,11 @@ rnd = db.Round( ...@@ -28,6 +40,11 @@ rnd = db.Round(
sess.add(rnd) sess.add(rnd)
sess.flush() sess.flush()
if master_rnd is not None:
rnd.master_round_id = master_rnd.round_id
else:
rnd.master_round_id = rnd.round_id
mo.util.log( mo.util.log(
type=db.LogType.round, type=db.LogType.round,
what=rnd.round_id, what=rnd.round_id,
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment