diff --git a/etc/config.py.example b/etc/config.py.example index f7db910c8d24c676a30bba7a76e80c983ab6f1db..af31c885e4b8e54e644833d85064433a921fb6df 100644 --- a/etc/config.py.example +++ b/etc/config.py.example @@ -53,3 +53,6 @@ REG_MAX_PER_MINUTE = 10 # Jak dlouho vydrží tokeny používané při registraci a změnách e-mailu [min] REG_TOKEN_VALIDITY = 10 + +# Aktuální ročník MO +CURRENT_YEAR = 71 diff --git a/mo/__init__.py b/mo/__init__.py index 98d16b9ad30321087b30790a71fe913ae7eec036..d98ba045b8e901ab953bcc40df33a46e096b8c94 100644 --- a/mo/__init__.py +++ b/mo/__init__.py @@ -2,9 +2,6 @@ import datetime -# Aktuální ročník -current_year = 71 - # Referenční čas nastavovaný v initu requestu (web) nebo při volání skriptu now: datetime.datetime diff --git a/mo/imports.py b/mo/imports.py index 005f62f029da3f0a8840b9c16d462352ce53b38a..4cf8deede795e083e67eb21f7d97b0bd1a6c1408 100644 --- a/mo/imports.py +++ b/mo/imports.py @@ -7,6 +7,7 @@ from sqlalchemy import and_ from sqlalchemy.orm import joinedload, Query from typing import List, Optional, Any, Dict, Type, Union +import mo.config as config import mo.csv from mo.csv import FileFormat, MissingHeaderError import mo.db as db @@ -449,7 +450,7 @@ class ContestImport(Import): if user is None: return - part = self.find_or_create_participant(user, mo.current_year, school_place.place_id if school_place else None, rok_naroz, rocnik) + part = self.find_or_create_participant(user, config.CURRENT_YEAR, school_place.place_id if school_place else None, rok_naroz, rocnik) if part is None: return diff --git a/mo/web/acct.py b/mo/web/acct.py index cd3bc74e15d377bc877887ec678a6f6a2fbcab9d..a07888d3dd7b1682c5e3bbf0102374e26097384a 100644 --- a/mo/web/acct.py +++ b/mo/web/acct.py @@ -120,7 +120,7 @@ def user_settings(): if g.user.is_org or g.user.is_admin: pant = None else: - pant = sess.query(db.Participant).get((g.user.user_id, mo.current_year)) + pant = sess.query(db.Participant).get((g.user.user_id, config.CURRENT_YEAR)) return render_template('settings.html', user=g.user, pant=pant, roles=roles, roles_by_type=mo.rights.roles_by_type) diff --git a/mo/web/org.py b/mo/web/org.py index aebbfae957f8f0677327553d3a9a4e20b7671015..a07d62610d05d51728386fee3f087b75a2556cd3 100644 --- a/mo/web/org.py +++ b/mo/web/org.py @@ -3,6 +3,7 @@ from sqlalchemy import and_, or_ from sqlalchemy.orm import aliased, joinedload from typing import List, Set, Dict +import mo.config as config import mo.db as db import mo.rights import mo.users @@ -38,7 +39,7 @@ def org_index(): or_(db.UserRole.category == None, db.UserRole.category == db.Round.category), or_(db.UserRole.year == None, db.UserRole.year == db.Round.year), or_(db.UserRole.seq == None, db.UserRole.seq == db.Round.seq), - db.Round.year == mo.current_year, + db.Round.year == config.CURRENT_YEAR, db.Contest.round_id == db.Round.round_id, db.Contest.place_id == db.UserRole.place_id)) .options(joinedload(db.Contest.place)) diff --git a/mo/web/org_round.py b/mo/web/org_round.py index 88da8505708ee535929ad8fb9ccc2cc639a9153a..587821c920575090d5133294189a80db888588e7 100644 --- a/mo/web/org_round.py +++ b/mo/web/org_round.py @@ -16,7 +16,7 @@ import wtforms from wtforms import validators, ValidationError from wtforms.widgets.html5 import NumberInput -import mo +import mo.config as config import mo.db as db import mo.imports from mo.rights import Right, RoundRights @@ -54,7 +54,7 @@ def get_task(round: db.Round, task_id: int) -> db.Task: def org_rounds(): sess = db.get_session() - rounds = sess.query(db.Round).filter_by(year=mo.current_year).order_by(db.Round.year, db.Round.category, db.Round.seq, db.Round.part) + rounds = sess.query(db.Round).filter_by(year=config.CURRENT_YEAR).order_by(db.Round.year, db.Round.category, db.Round.seq, db.Round.part) return render_template('org_rounds.html', rounds=rounds, history=False) diff --git a/mo/web/user.py b/mo/web/user.py index ee53d404bccf1edcc9f0fd24b9aeb363a922ee66..4ac6b05af25726f8f34de0f6085f6eea3ddea26f 100644 --- a/mo/web/user.py +++ b/mo/web/user.py @@ -8,7 +8,6 @@ import werkzeug.exceptions import wtforms from wtforms.validators import Required -import mo import mo.config as config import mo.email import mo.db as db @@ -41,7 +40,7 @@ def load_pcrs() -> List[Tuple[db.Participation, db.Contest, db.Round]]: .join(db.Contest, db.Contest.master_contest_id == db.Participation.contest_id) .join(db.Round) .filter(db.Participation.user == g.user) - .filter(db.Round.year == mo.current_year) + .filter(db.Round.year == config.CURRENT_YEAR) .options(joinedload(db.Contest.place)) .order_by(db.Round.category, db.Round.seq, db.Round.part) .all()) @@ -52,7 +51,7 @@ def user_join(): available_rounds: List[db.Round] = ( db.get_session().query(db.Round) .select_from(db.Round) - .filter_by(year=mo.current_year) + .filter_by(year=config.CURRENT_YEAR) .filter(db.Round.enroll_mode.in_([db.RoundEnrollMode.register, db.RoundEnrollMode.confirm])) .filter_by(state=db.RoundState.running) .order_by(db.Round.category, db.Round.seq) @@ -87,7 +86,7 @@ def user_join_round(round_id): if not round: raise werkzeug.exceptions.NotFound() - if (round.year != mo.current_year + if (round.year != config.CURRENT_YEAR or round.part > 1 or round.enroll_mode not in [db.RoundEnrollMode.register, db.RoundEnrollMode.confirm] or round.state != db.RoundState.running): @@ -155,7 +154,7 @@ def user_join_round(round_id): def join_create_pant(form: JoinRoundForm) -> db.Participant: assert form.school.place is not None pant = db.Participant(user=g.user, - year=mo.current_year, + year=config.CURRENT_YEAR, school_place=form.school.place, grade=form.grade.data, birth_year=form.birth_year.data)