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

Import: Účastníci bez mailové adresy

parent 372e57ed
No related branches found
No related tags found
No related merge requests found
...@@ -104,8 +104,11 @@ class Import: ...@@ -104,8 +104,11 @@ class Import:
except ValueError: except ValueError:
return self.error('ID uživatele není číslo') return self.error('ID uživatele není číslo')
def parse_email(self, email: str) -> Optional[str]: def parse_email(self, email: str, optional: bool) -> Optional[str]:
if email == "": if email == "":
if optional:
return ""
else:
return self.error('Chybí e-mailová adresa') return self.error('Chybí e-mailová adresa')
try: try:
...@@ -212,7 +215,6 @@ class Import: ...@@ -212,7 +215,6 @@ class Import:
return self.error('Pořadí kola v kategorii není číslo') return self.error('Pořadí kola v kategorii není číslo')
def find_or_create_user(self, email: str, krestni: Optional[str], prijmeni: Optional[str], is_org: bool) -> Optional[db.User]: def find_or_create_user(self, email: str, krestni: Optional[str], prijmeni: Optional[str], is_org: bool) -> Optional[db.User]:
try:
try: try:
user, is_new, is_user_to_org = mo.users.find_or_create_user(email, krestni, prijmeni, is_org, allow_change_user_to_org=self.allow_change_user_to_org, reason='import') user, is_new, is_user_to_org = mo.users.find_or_create_user(email, krestni, prijmeni, is_org, allow_change_user_to_org=self.allow_change_user_to_org, reason='import')
self.cnt_change_user_to_org += is_user_to_org self.cnt_change_user_to_org += is_user_to_org
...@@ -387,9 +389,11 @@ class Import: ...@@ -387,9 +389,11 @@ class Import:
return False return False
def get_row_name(self, row: mo.csv.Row) -> Optional[str]: def get_row_name(self, row: mo.csv.Row) -> Optional[str]:
if hasattr(row, 'email'): # čteme prvky potomka třídy Row
# čtení prvku potomka if hasattr(row, 'email') and row.email:
return row.email # type: ignore return row.email # type: ignore
if hasattr(row, 'krestni') and hasattr(row, 'prijmeni') and row.krestni and row.prijmeni:
return row.krestni + ' ' + row.prijmeni # type: ignore
return None return None
def generic_import(self, path: str, despite_warnings: bool) -> bool: def generic_import(self, path: str, despite_warnings: bool) -> bool:
...@@ -514,7 +518,7 @@ class ContestImport(Import): ...@@ -514,7 +518,7 @@ class ContestImport(Import):
assert self.round assert self.round
assert isinstance(r, ContestImportRow) assert isinstance(r, ContestImportRow)
num_prev_errs = len(self.errors) num_prev_errs = len(self.errors)
email = self.parse_email(r.email) email = self.parse_email(r.email, optional=True)
krestni = self.parse_name(r.krestni) if r.krestni else None krestni = self.parse_name(r.krestni) if r.krestni else None
prijmeni = self.parse_name(r.prijmeni) if r.prijmeni else None prijmeni = self.parse_name(r.prijmeni) if r.prijmeni else None
school_place = self.parse_school(r.kod_skoly) if r.kod_skoly else None school_place = self.parse_school(r.kod_skoly) if r.kod_skoly else None
...@@ -522,6 +526,7 @@ class ContestImport(Import): ...@@ -522,6 +526,7 @@ class ContestImport(Import):
school_place = self.default_place school_place = self.default_place
rocnik = self.parse_grade(r.rocnik, (school_place.school if school_place else None)) if r.rocnik else None rocnik = self.parse_grade(r.rocnik, (school_place.school if school_place else None)) if r.rocnik else None
rok_naroz = self.parse_born(r.rok_naroz) if r.rok_naroz else None rok_naroz = self.parse_born(r.rok_naroz) if r.rok_naroz else None
misto = self.parse_opt_place(r.kod_mista, 'místo') misto = self.parse_opt_place(r.kod_mista, 'místo')
if misto and not self.check_rights(self.round, misto): if misto and not self.check_rights(self.round, misto):
return self.error(f'Nemáte práva na správu soutěže {misto.name_locative()}') return self.error(f'Nemáte práva na správu soutěže {misto.name_locative()}')
...@@ -530,10 +535,13 @@ class ContestImport(Import): ...@@ -530,10 +535,13 @@ class ContestImport(Import):
if oblast and not self.check_rights(self.round, oblast): if oblast and not self.check_rights(self.round, oblast):
return self.error(f'Nemáte práva na správu soutěže {oblast.name_locative()}') return self.error(f'Nemáte práva na správu soutěže {oblast.name_locative()}')
if (len(self.errors) > num_prev_errs if len(self.errors) > num_prev_errs:
or email is None):
return return
try:
email = mo.users.email_or_synthesize(email, krestni, prijmeni, rocnik, school_place)
except mo.CheckError as e:
return self.error(str(e))
user = self.find_or_create_user(email, krestni, prijmeni, is_org=False) user = self.find_or_create_user(email, krestni, prijmeni, is_org=False)
if user is None: if user is None:
return return
...@@ -604,7 +612,7 @@ class OrgsImport(Import): ...@@ -604,7 +612,7 @@ class OrgsImport(Import):
def import_row(self, r: mo.csv.Row) -> None: def import_row(self, r: mo.csv.Row) -> None:
assert isinstance(r, OrgsImportRow) or isinstance(r, GlobalOrgsImportRow) assert isinstance(r, OrgsImportRow) or isinstance(r, GlobalOrgsImportRow)
num_prev_errs = len(self.errors) num_prev_errs = len(self.errors)
email = self.parse_email(r.email) email = self.parse_email(r.email, optional=False)
krestni = self.parse_name(r.krestni) krestni = self.parse_name(r.krestni)
prijmeni = self.parse_name(r.prijmeni) prijmeni = self.parse_name(r.prijmeni)
role = self.parse_role(r.role) role = self.parse_role(r.role)
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment