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

Deterministické ne-mailové adresy

Účastníkovi by se během studia neměla měnit, pokud nezmění školu.
parent 5191f33e
No related branches found
No related tags found
No related merge requests found
......@@ -293,6 +293,32 @@ def email_check_domain(domain: str):
raise mo.CheckError(f'Doména {domain} nepřijímá poštu')
def email_or_synthesize(addr: Optional[str], first_name: Optional[str], last_name: Optional[str], grade: Optional[str], school: Optional[db.Place]) -> str:
"""
Pokud e-mailová adresa není zadaná, nějakou si vymyslíme podle jména, školy a ročníku.
Předpokládá, že parametry, které nejsou None, mají syntaxi zkontrolovanou.
"""
if addr:
return addr
if not first_name or not last_name or not grade or school is None:
raise mo.CheckError('Pokud není zadaná e-mailová adresa, je nutné uvést jméno, příjmení, školu a ročník')
# Spočítáme ročník MO, kdy daný účastník chodil do 1. třídy
norm_grade = mo.util.normalize_grade(grade)
if norm_grade < 0:
ref_year = 0
else:
ref_year = config.CURRENT_YEAR - norm_grade + 1
x = mo.util.asciify(f'{school.place_id}-{ref_year}.{first_name}.{last_name}')
x = re.sub(r'\s+', '-', x)
x = re.sub(r'[^0-9a-zA-Z.-]', "", x)
return normalize_email(x + '@nomail')
def normalize_email(addr: str, check_existence: bool = False, make_unique_nomail: bool = False) -> str:
if make_unique_nomail and addr == '@nomail':
addr = base64.b32encode(secrets.token_bytes(10)).decode('US-ASCII').lower() + '@nomail'
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment