forked from ScoDoc/ScoDoc
procces dups in emails
This commit is contained in:
parent
07d4ac7f90
commit
eb7642f082
58
scodoc.py
58
scodoc.py
@ -182,6 +182,64 @@ def create_role(rolename, permissions): # create-role
|
||||
db.session.commit()
|
||||
|
||||
|
||||
@app.cli.command()
|
||||
def unique_emails(): # unique_email
|
||||
"""rename duplicate emails.
|
||||
Objectif:
|
||||
- les email non doublonnés sont inchangés.
|
||||
- les email doublonnés sont classés (actif puis inactif, sinon accès plus récent en tête)
|
||||
- le premier compte de la liste garde l'email initial (on suppose que c est le vrai compte de l'utilsateur.
|
||||
- les autres sont altérés en suffixant avec le rang (:2, :3, :4, ...)
|
||||
"""
|
||||
from app.scodoc import notesdb as ndb
|
||||
|
||||
# click.confirm(
|
||||
# f"""Attention: Cela va affecter les adresse mail en doublon
|
||||
# Voulez-vous vraiment continuer ?
|
||||
# """,
|
||||
# abort=True,
|
||||
# )
|
||||
db.reflect()
|
||||
ndb.open_db_connection()
|
||||
cnx = ndb.GetDBConnexion()
|
||||
cursor = cnx.cursor()
|
||||
try:
|
||||
# crée la table qui recopie les données de user et ajoute le rang pour chaque ligne:
|
||||
# -> dups(user_name, email, rank)
|
||||
cursor.execute(
|
||||
'create temp table dups as select user_name, email, rank() over (partition by email order by active desc, last_seen desc) as rank from "user"'
|
||||
)
|
||||
# Met à jour dans la table dups les email des rangs > 1
|
||||
cursor.execute(
|
||||
"update dups set email = concat(email, ':', rank) where rank > 1"
|
||||
)
|
||||
# recopie dans la table user l'email calculé (ou non modifié)
|
||||
cursor.execute(
|
||||
'update "user" u set email = (select email from dups where user_name = u.user_name)'
|
||||
)
|
||||
# efface la table dups
|
||||
cursor.execute("drop table dups")
|
||||
print("Opération exécutée.")
|
||||
except:
|
||||
cnx.rollback()
|
||||
print("Problème dans l'exécution du script. Opératioin annulée")
|
||||
finally:
|
||||
cnx.commit()
|
||||
att_users = User.query.filter_by(active=True).filter(User.email.like("%:%")).all()
|
||||
if len(att_users) > 0:
|
||||
print("Voici la liste des comptes actifs dont les email ont été modifiés")
|
||||
print("-----------------------------------------------------------------")
|
||||
print(
|
||||
" login nouvel email dernière connexion"
|
||||
)
|
||||
else:
|
||||
print("Aucun compte actif n'a été modifié")
|
||||
for user in att_users:
|
||||
print("%20s %40s %40s" % (user.user_name, user.email, user.last_seen))
|
||||
db.session.commit()
|
||||
return 0
|
||||
|
||||
|
||||
@app.cli.command()
|
||||
@click.argument("rolename")
|
||||
@click.option("-a", "--add", "addpermissionname")
|
||||
|
Loading…
Reference in New Issue
Block a user