Skip to content
Snippets Groups Projects
Commit a24c8602 authored by Jiří Kalvoda's avatar Jiří Kalvoda
Browse files

Přesunutí obecných validací z mo.imports do mo.users

parent 3eb04644
No related branches found
No related tags found
1 merge request!89Přidán formulář na editaci registrace do ročníku
This commit is part of merge request !89. Comments created here will be created in the context of that merge request.
......@@ -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,16 +169,10 @@ 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):
......
......
......@@ -12,6 +12,33 @@ import mo.db as db
import mo.util
import mo.tokens
def normalize_grade(rocnik:str, school:db.School) -> str:
  • Mezery za dvojtečkami, prosím.

    Nechceš si na to pouštět nějaký style checker?

  • Author Maintainer

    To bych mohl. Máš nějaký oblíbený včetně nastavení, které vyhazuje jen ty zajímavé chyby? (pycodestyle mi hlásí moc věcí, takže se s tím blbě pracuje)

  • Já jsem si v konfiguraci pycodestyle nastavil ignore = E402,E501,W503,W504 a jsem docela spokojený.

  • Author Maintainer

    Vyřešeno

  • Please register or sign in to reply
""" Aktuálně provádí jen kontrolu formátu. """
if not re.fullmatch(r'\d(/\d)?', rocnik):
raise mo.CheckError(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):
raise mo.CheckError(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):
raise mo.CheckError(f'Ročník pro základní školu ({school.place.name}) zapisujte jako číslici 1–9')
return rocnik
def validate_and_find_school(kod:str) -> db.Place:
if kod == "":
  • Část funkcí zvlášť ošetřuje prázdný řetězec, část ne. To by bylo lepší dělat jednotně. Myslím, že povinnost kódu školy má být spíš starost volajícího.

  • Please register or sign in to reply
raise mo.CheckError('Škola je povinná')
place = db.get_place_by_code(kod, fetch_school=True)
if not place:
raise mo.CheckError(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:
raise mo.CheckError(f'Kód školy "{kod}" neodpovídá škole')
return place
def normalize_email(addr: str) -> str:
if not re.fullmatch(r'.+@.+', addr):
......
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please to comment