permet de lever certaines vérifications lors de l import

This commit is contained in:
Jean-Marie Place 2021-10-13 16:32:43 +02:00
parent f0d641a31e
commit 9c528bec7f
3 changed files with 26 additions and 21 deletions

View File

@ -82,7 +82,7 @@ def generate_excel_sample():
) )
def import_excel_file(datafile): def import_excel_file(datafile, force=""):
""" """
Import scodoc users from Excel file. Import scodoc users from Excel file.
This method: This method:
@ -134,10 +134,10 @@ def import_excel_file(datafile):
d[fs[i]] = line[i] d[fs[i]] = line[i]
users.append(d) users.append(d)
return import_users(users) return import_users(users=users, force=force)
def import_users(users): def import_users(users, force=""):
""" """
Import users from a list of users_descriptors. Import users from a list of users_descriptors.
@ -178,8 +178,7 @@ def import_users(users):
line = line + 1 line = line + 1
user_ok, msg = sco_users.check_modif_user( user_ok, msg = sco_users.check_modif_user(
0, 0,
ignore_optionals=False, enforce_optionals=not force,
ajout_en_masse=True,
user_name=u["user_name"], user_name=u["user_name"],
nom=u["nom"], nom=u["nom"],
prenom=u["prenom"], prenom=u["prenom"],

View File

@ -387,8 +387,7 @@ def user_info_page(user_name=None):
def check_modif_user( def check_modif_user(
edit, edit,
ignore_optionals=False, enforce_optionals=False,
ajout_en_masse=False,
user_name="", user_name="",
nom="", nom="",
prenom="", prenom="",
@ -403,12 +402,7 @@ def check_modif_user(
(si ok est faux, l'utilisateur peut quand même forcer la creation) (si ok est faux, l'utilisateur peut quand même forcer la creation)
- msg: message warning à presenter à l'utilisateur - msg: message warning à presenter à l'utilisateur
""" """
if ajout_en_masse: MSG_OPT = """<br/>Attention: (vous pouvez forcer l'opération en cochant "<em>Ignorer les avertissements</em>" en bas de page)"""
MSG_OPT = (
"""<br/>Impossible de forcer l'opération lors d'une importation en masse"""
)
else:
MSG_OPT = """<br/>Attention: (vous pouvez forcer l'opération en cochant "<em>Ignorer les avertissements</em>" en bas de page)"""
# ce login existe ? # ce login existe ?
user = _user_list(user_name) user = _user_list(user_name)
if edit and not user: # safety net, le user_name ne devrait pas changer if edit and not user: # safety net, le user_name ne devrait pas changer
@ -423,11 +417,11 @@ def check_modif_user(
"identifiant '%s' invalide (pas d'accents ni de caractères spéciaux)" "identifiant '%s' invalide (pas d'accents ni de caractères spéciaux)"
% user_name, % user_name,
) )
if ignore_optionals and len(user_name) > 64: if enforce_optionals and len(user_name) > 64:
return False, "identifiant '%s' trop long (64 caractères)" % user_name return False, "identifiant '%s' trop long (64 caractères)" % user_name
if ignore_optionals and len(nom) > 64: if enforce_optionals and len(nom) > 64:
return False, "nom '%s' trop long (64 caractères)" % nom + MSG_OPT return False, "nom '%s' trop long (64 caractères)" % nom + MSG_OPT
if ignore_optionals and len(prenom) > 64: if enforce_optionals and len(prenom) > 64:
return False, "prenom '%s' trop long (64 caractères)" % prenom + MSG_OPT return False, "prenom '%s' trop long (64 caractères)" % prenom + MSG_OPT
# check that tha same user_name has not already been described in this import # check that tha same user_name has not already been described in this import
if not email: if not email:
@ -438,12 +432,12 @@ def check_modif_user(
return False, "l'adresse mail semble incorrecte" return False, "l'adresse mail semble incorrecte"
# check département # check département
if ( if (
ignore_optionals enforce_optionals
and dept != "" and dept != ""
and Departement.query.filter_by(acronym=dept).first() is None and Departement.query.filter_by(acronym=dept).first() is None
): ):
return False, "département '%s' inexistant" % dept + MSG_OPT return False, "département '%s' inexistant" % dept + MSG_OPT
if ignore_optionals and not roles: if enforce_optionals and not roles:
return False, "aucun rôle sélectionné, êtes vous sûr ?" + MSG_OPT return False, "aucun rôle sélectionné, êtes vous sûr ?" + MSG_OPT
# ok # ok
# Des noms/prénoms semblables existent ? # Des noms/prénoms semblables existent ?
@ -456,7 +450,7 @@ def check_modif_user(
minmatch = 1 minmatch = 1
else: else:
minmatch = 0 minmatch = 0
if len(similar_users) > minmatch: if enforce_optionals and len(similar_users) > minmatch:
return ( return (
False, False,
"des utilisateurs proches existent: " "des utilisateurs proches existent: "

View File

@ -382,7 +382,7 @@ def create_user_form(user_name=None, edit=0, all_roles=1):
return "\n".join(H) + "\n" + tf[1] + F return "\n".join(H) + "\n" + tf[1] + F
ok, msg = sco_users.check_modif_user( ok, msg = sco_users.check_modif_user(
edit, edit,
ignore_optionals=not force, enforce_optionals=not force,
user_name=user_name, user_name=user_name,
nom=vals["nom"], nom=vals["nom"],
prenom=vals["prenom"], prenom=vals["prenom"],
@ -531,6 +531,16 @@ def import_users_form():
"xlsfile", "xlsfile",
{"title": "Fichier Excel:", "input_type": "file", "size": 40}, {"title": "Fichier Excel:", "input_type": "file", "size": 40},
), ),
(
"force",
{
"title": "Ignorer les avertissements",
"input_type": "checkbox",
"explanation": "passer outre les avertissements (homonymes, etc)",
"labels": ("",),
"allowed_values": ("1",),
},
),
("formsemestre_id", {"input_type": "hidden"}), ("formsemestre_id", {"input_type": "hidden"}),
), ),
submitlabel="Télécharger", submitlabel="Télécharger",
@ -541,7 +551,9 @@ def import_users_form():
return flask.redirect(url_for("scolar.index_html", docodc_dept=g.scodoc_dept)) return flask.redirect(url_for("scolar.index_html", docodc_dept=g.scodoc_dept))
else: else:
# IMPORT # IMPORT
ok, diag, nb_created = sco_import_users.import_excel_file(tf[2]["xlsfile"]) ok, diag, nb_created = sco_import_users.import_excel_file(
tf[2]["xlsfile"], tf[2]["force"]
)
H = [html_sco_header.sco_header(page_title="Import utilisateurs")] H = [html_sco_header.sco_header(page_title="Import utilisateurs")]
H.append("<ul>") H.append("<ul>")
for d in diag: for d in diag: