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

Merge branch 'master' into devel

parents 13ddb4a1 ef8c58ff
No related branches found
No related tags found
No related merge requests found
...@@ -31,7 +31,7 @@ if round.is_subround(): ...@@ -31,7 +31,7 @@ if round.is_subround():
# Pokud je to podkolo, kopírujeme soutěže z hlavního kola # Pokud je to podkolo, kopírujeme soutěže z hlavního kola
for mc in sess.query(db.Contest).filter_by(round=round.master): for mc in sess.query(db.Contest).filter_by(round=round.master):
r = mc.place r = mc.place
print(f"Zakládám {round.round_code()} pro místo {r.name} (podsoutěž)") print(f"{round.round_code()} pro místo {r.name}: zakládám (podsoutěž)")
if not args.dry_run: if not args.dry_run:
c = db.Contest(round=round, place=r, master=mc, state=state) c = db.Contest(round=round, place=r, master=mc, state=state)
......
...@@ -15,6 +15,11 @@ parser.add_argument('-l', '--level', type=int, required=True, help='úroveň v h ...@@ -15,6 +15,11 @@ parser.add_argument('-l', '--level', type=int, required=True, help='úroveň v h
parser.add_argument('-p', '--part', type=int, default=0, help='část v rámci skupiny kol (default: 0)') 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')
parser.add_argument('-S', '--step', type=float, default=1, help='bodovací krok (default: 1)') parser.add_argument('-S', '--step', type=float, default=1, help='bodovací krok (default: 1)')
parser.add_argument('-t', '--type', type=str, default='other', help='typ kola (default: other)')
parser.add_argument('--score-mode', type=str, default='basic', help='režim výsledkové listiny (default: basic)')
parser.add_argument('--enroll-mode', type=str, default='manual', help='režim registrace (default: manual)')
parser.add_argument('--enroll-advert', type=str, default='', help='popis v přihlášce')
parser.add_argument('--publish-score', default=False, action='store_true', help='publikovat výsledkové listiny')
args = parser.parse_args() args = parser.parse_args()
...@@ -39,6 +44,11 @@ rnd = db.Round( ...@@ -39,6 +44,11 @@ rnd = db.Round(
level=args.level, level=args.level,
name=args.name, name=args.name,
points_step=args.step, points_step=args.step,
round_type=db.RoundType.coerce(args.type),
score_mode=db.RoundScoreMode.coerce(args.score_mode),
enroll_mode=db.RoundEnrollMode.coerce(args.enroll_mode),
enroll_advert=args.enroll_advert,
export_score_to_mo_web=args.publish_score,
) )
sess.add(rnd) sess.add(rnd)
......
...@@ -8,6 +8,7 @@ from mo.util import die, init_standalone ...@@ -8,6 +8,7 @@ from mo.util import die, init_standalone
parser = argparse.ArgumentParser(description='Založí úlohy pro dané kolo') 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='round', type=str, metavar='YY-C-S[p]', help='kód kola')
parser.add_argument(dest='code', type=str, help='kód kola použitý v kódech úloh')
parser.add_argument(dest='count', type=int, help='počet úloh') 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ů') parser.add_argument('-p', '--points', type=int, default=None, help='maximální počet bodů')
...@@ -27,7 +28,7 @@ if round.state != db.RoundState.preparing: ...@@ -27,7 +28,7 @@ if round.state != db.RoundState.preparing:
die("Kolo musí být ve stavu 'připravuje se'") die("Kolo musí být ve stavu 'připravuje se'")
for i in range(1, args.count + 1): for i in range(1, args.count + 1):
code = f'{round.category}-{round.code or round.seq}-{i}' code = f'{round.category}-{args.code}-{i}'
task = sess.query(db.Task).filter_by(round=round, code=code).one_or_none() task = sess.query(db.Task).filter_by(round=round, code=code).one_or_none()
if task: if task:
print(f'{code}: již existuje') print(f'{code}: již existuje')
......
#!/bin/bash
set -e
if [ $# != 1 ] ; then
echo >&2 "Použití: $0 <ročník>"
exit 1
fi
YEAR=$1
create_ss()
{
local CAT=$1
local ADV="$2"
bin/create-round --year $YEAR --cat $CAT --seq 1 \
--level 4 \
--type domaci --name 'Domácí kolo' \
--enroll-mode register --enroll-advert "$ADV"
bin/create-round --year $YEAR --cat $CAT --seq 2 \
--level 4 \
--type skolni --name 'Školní kolo'
bin/create-round --year $YEAR --cat $CAT --seq 3 \
--level 1 \
--type krajske --name 'Krajské kolo' \
--score-mode mo --publish-score
bin/create-contests $YEAR-$CAT-3
if [ $CAT = A ] ; then
bin/create-round --year $YEAR --cat $CAT --seq 4 --part 1 \
--level 0 \
--type ustredni --name 'Ústřední kolo (1. den)' \
--score-mode mo --publish-score
bin/create-contests $YEAR-$CAT-4a
bin/create-round --year $YEAR --cat $CAT --seq 4 --part 2 \
--level 0 \
--type ustredni --name 'Ústřední kolo (2. den)'
bin/create-contests $YEAR-$CAT-4b
fi
}
create_zs()
{
local CAT=$1
local ADV="$2"
bin/create-round --year $YEAR --cat $CAT --seq 1 \
--level 4 \
--type domaci --name 'Domácí kolo' \
--enroll-mode register --enroll-advert "$ADV"
bin/create-round --year $YEAR --cat $CAT --seq 2 \
--level 2 \
--type okresni --name 'Okresní kolo' \
--score-mode basic --publish-score
# Soutěze v okresech nezakládáme, založí se dodatečně jen tam, kde někdo soutěžil.
# bin/create-contests $YEAR-$CAT-2
if [ $CAT = Z9 ] ; then
bin/create-round --year $YEAR --cat $CAT --seq 3 \
--level 1 \
--type krajske --name 'Krajské kolo' \
--score-mode basic --publish-score
bin/create-contests $YEAR-$CAT-3
fi
}
create_p()
{
bin/create-round --year $YEAR --cat P --seq 1 \
--level 0 \
--type skolni --name 'Školní kolo' \
--enroll-mode register --enroll-advert "Programování"
bin/create-contests $YEAR-P-1
bin/create-round --year $YEAR --cat P --seq 2 \
--level 1 \
--type krajske --name 'Krajské kolo' \
--score-mode mo --publish-score
bin/create-contests $YEAR-P-2
bin/create-round --year $YEAR --cat P --seq 3 --part 1 \
--level 0 \
--type ustredni --name 'Ústřední kolo (1. den)' \
--score-mode mo --publish-score
bin/create-contests $YEAR-P-3a
bin/create-round --year $YEAR --cat P --seq 3 --part 2 \
--level 0 \
--type ustredni --name 'Ústřední kolo (2. den)'
bin/create-contests $YEAR-P-3b
}
create_ss A "3. a 4. ročník středních škol"
create_ss B "2. ročník středních škol"
create_ss C "1. ročník středních škol"
create_zs Z9 "9. ročník ZŠ"
create_zs Z8 "8. ročník ZŠ"
create_zs Z7 "7. ročník ZŠ"
create_zs Z6 "6. ročník ZŠ"
create_zs Z5 "5. ročník ZŠ"
create_p
...@@ -18,21 +18,25 @@ args = parser.parse_args() ...@@ -18,21 +18,25 @@ args = parser.parse_args()
init_standalone() init_standalone()
sess = db.get_session() sess = db.get_session()
round_query = sess.query(db.Round).filter_by(year=args.year, part=0) round_query = sess.query(db.Round).filter_by(year=args.year)
if args.cat is not None: if args.cat is not None:
round_query = round_query.filter_by(category=args.cat) round_query = round_query.filter_by(category=args.cat)
if args.seq is not None: if args.seq is not None:
round_query = round_query.filter_by(seq=args.seq) round_query = round_query.filter_by(seq=args.seq)
rounds = round_query.order_by(db.Round.category, db.Round.seq).all() rounds = round_query.order_by(db.Round.category, db.Round.seq, db.Round.part).all()
for round in rounds: for round in rounds:
print(round.round_code_short()) print(round.round_code(), ": ", sep="", end="")
if round.is_subround():
print('Sekundární kolo')
continue
if not round.export_score_to_mo_web: if not round.export_score_to_mo_web:
print('\tNemá povolený export') print('Nemá povolený export')
continue continue
if round.round_type == db.RoundType.other: if round.round_type == db.RoundType.other:
print('\tNemá nastavený typ') print('Nemá nastavený typ')
continue continue
print('OK')
for contest in sess.query(db.Contest).filter_by(round=round).options(joinedload(db.Contest.place), joinedload(db.Contest.scoretable)).all(): for contest in sess.query(db.Contest).filter_by(round=round).options(joinedload(db.Contest.place), joinedload(db.Contest.scoretable)).all():
print(f'\t{contest.place.code}: ', end="") print(f'\t{contest.place.code}: ', end="")
......
...@@ -307,7 +307,7 @@ class Round(Base): ...@@ -307,7 +307,7 @@ class Round(Base):
score_successful_limit = Column(Numeric) score_successful_limit = Column(Numeric)
points_step = Column(Numeric, nullable=False) points_step = Column(Numeric, nullable=False)
has_messages = Column(Boolean, nullable=False, server_default=text("false")) has_messages = Column(Boolean, nullable=False, server_default=text("false"))
enroll_mode = Column(Enum(RoundEnrollMode, name='enroll_mode'), nullable=False, server_default=text("'basic'::enroll_mode")) enroll_mode = Column(Enum(RoundEnrollMode, name='enroll_mode'), nullable=False, server_default=text("'manual'::enroll_mode"))
enroll_advert = Column(String(255), nullable=False, server_default=text("''::text")) enroll_advert = Column(String(255), nullable=False, server_default=text("''::text"))
master = relationship('Round', primaryjoin='Round.master_round_id == Round.round_id', remote_side='Round.round_id', post_update=True) master = relationship('Round', primaryjoin='Round.master_round_id == Round.round_id', remote_side='Round.round_id', post_update=True)
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment