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()
|
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()
|
@app.cli.command()
|
||||||
@click.argument("rolename")
|
@click.argument("rolename")
|
||||||
@click.option("-a", "--add", "addpermissionname")
|
@click.option("-a", "--add", "addpermissionname")
|
||||||
|
Loading…
Reference in New Issue
Block a user