Skip to content
Snippets Groups Projects

Formulářová políčka; Přidání účastníka do soutěže; Editace registrace do ročníku

Merged Jiří Kalvoda requested to merge jk/add-contestant into devel
2 files
+ 49
22
Compare changes
  • Side-by-side
  • Inline

Files

+ 14
22
@@ -149,21 +149,16 @@ class Import:
return place
def parse_school(self, kod: str) -> Optional[db.Place]:
if kod == "":
return self.error('Škola je povinná')
if kod in self.school_place_cache:
return self.school_place_cache[kod]
place = db.get_place_by_code(kod, fetch_school=True)
if not place:
return self.error(f'Škola s kódem "{kod}" nenalezena'+
('. Nechybí vám # na začátku?' if re.fullmatch(r'\d+', kod) else ''))
if place.type != db.PlaceType.school:
return self.error(f'Kód školy "{kod}" neodpovídá škole')
try:
place = mo.users.validate_and_find_school(kod)
except mo.CheckError as e:
return self.error(str(e))
self.school_place_cache[kod] = place
return place
def parse_grade(self, rocnik: str, school: Optional[db.School]) -> Optional[str]:
@@ -174,24 +169,21 @@ class Import:
# lidé připisují všechny možné i nemožné znaky, které vypadají jako apostrof :)
rocnik = re.sub('[\'"\u00b4\u2019]', "", rocnik)
if (not re.fullmatch(r'\d(/\d)?', rocnik)):
return self.error(f'Ročník má neplatný formát, musí to být buď číslice, nebo číslice/číslice')
if (not school.is_zs and re.fullmatch(r'\d', rocnik)):
return self.error(f'Ročník pro střední školu ({school.place.name}) zapisujte ve formátu číslice/číslice')
if (not school.is_ss and re.fullmatch(r'\d/\d', rocnik)):
return self.error(f'Ročník pro základní školu ({school.place.name}) zapisujte jako číslici 1–9')
return rocnik
try:
return mo.users.normalize_grade(rocnik, school)
except mo.CheckError as e:
return self.error(str(e))
def parse_born(self, rok: str) -> Optional[int]:
if not re.fullmatch(r'\d{4}', rok):
return self.error('Rok narození musí být čtyřciferné číslo')
r = int(rok)
if r < 2000 or r > 2099:
return self.error('Rok narození musí být v intervalu [2000,2099]')
try:
mo.users.validate_born_year(r)
except mo.CheckError as e:
return self.error(str(e))
return r
Loading