Vérifie l'unicité des logins

This commit is contained in:
Tom Hubrecht 2020-12-23 17:08:43 +01:00
parent 83525a7984
commit 8e60374091

View file

@ -10,7 +10,7 @@ def create_users(election, csv_file):
"""Crée les votant·e·s pour l'élection donnée, en remplissant les champs """Crée les votant·e·s pour l'élection donnée, en remplissant les champs
`username`, `election` et `full_name`. `username`, `election` et `full_name`.
""" """
dialect = csv.Sniffer().sniff(csv_file.read(1024).decode("utf-8")) dialect = csv.Sniffer().sniff(csv_file.readline().decode("utf-8"))
csv_file.seek(0) csv_file.seek(0)
reader = csv.reader(io.StringIO(csv_file.read().decode("utf-8")), dialect) reader = csv.reader(io.StringIO(csv_file.read().decode("utf-8")), dialect)
for (username, full_name, email) in reader: for (username, full_name, email) in reader:
@ -22,7 +22,7 @@ def create_users(election, csv_file):
def check_csv(csv_file): def check_csv(csv_file):
"""Vérifie que le fichier donnant la liste de votant·e·s est bien formé""" """Vérifie que le fichier donnant la liste de votant·e·s est bien formé"""
try: try:
dialect = csv.Sniffer().sniff(csv_file.read(1024).decode("utf-8")) dialect = csv.Sniffer().sniff(csv_file.readline().decode("utf-8"))
except csv.Error: except csv.Error:
return [ return [
_( _(
@ -33,9 +33,8 @@ def check_csv(csv_file):
csv_file.seek(0) csv_file.seek(0)
reader = csv.reader(io.StringIO(csv_file.read().decode("utf-8")), dialect) reader = csv.reader(io.StringIO(csv_file.read().decode("utf-8")), dialect)
columns = [_("login"), _("nom"), _("email")]
errors = [] errors = []
users = {}
line_nb = 0 line_nb = 0
for line in reader: for line in reader:
line_nb += 1 line_nb += 1
@ -44,11 +43,22 @@ def check_csv(csv_file):
_("La ligne {} n'a pas le bon nombre d'éléments.").format(line_nb) _("La ligne {} n'a pas le bon nombre d'éléments.").format(line_nb)
) )
else: else:
if line[0] == "" or line[1] == "": if line[0] == "":
errors.append( errors.append(
_("Valeur manquante dans la ligne {} : '{}'.").format( _("Valeur manquante dans la ligne {} : 'login'.").format(line_nb)
line_nb, columns[line.index("")] )
else:
if line[0] in users:
errors.append(
_("Doublon dans les logins : lignes {} et {}.").format(
line_nb, users[line[0]]
)
) )
else:
users[line[0]] = line_nb
if line[1] == "":
errors.append(
_("Valeur manquante dans la ligne {} : 'nom'.").format(line_nb)
) )
try: try:
validate_email(line[2]) validate_email(line[2])