Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Supprimer un organisme lié à un jeu de données #171

Open
juliettefabre opened this issue Feb 6, 2023 · 1 comment
Open

Supprimer un organisme lié à un jeu de données #171

juliettefabre opened this issue Feb 6, 2023 · 1 comment

Comments

@juliettefabre
Copy link

Bonjour,

Quand on essaie de supprimer un organisme associé à un jeu de données, on obient cette erreur :
{"type": "Exception", "msg": "IntegrityError('(psycopg2.errors.ForeignKeyViolation) update or delete on table \"bib_organismes\" violates foreign key constraint \"fk_dataset_actor_id_organism\" on table \"cor_dataset_actor\"\\nDETAIL: Key (id_organisme)=(2) is still referenced from table \"cor_dataset_actor\".\\n')"}

Il faudrait le convertir en un message d'alerte du type "l'organisme est associé à un ou plusieurs jeux de données, etc .."

J'ai remarqué ce genre de problème pour plusieurs types d'objets, par exemple la suppression d'un groupe associé à une liste : {"type": "Exception", "msg": "IntegrityError('(psycopg2.errors.ForeignKeyViolation) update or delete on table \"t_roles\" violates foreign key constraint \"fk_cor_role_liste_id_role\" on table \"cor_role_liste\"\\nDETAIL: Key (id_role)=(1) is still referenced from table \"cor_role_liste\".\\n')"}

@andriacap
Copy link

andriacap commented Aug 7, 2024

Hello,

Je viens de voir cette issue que le CEN Ariège à également rencontré (mais sur la suppression d'utilisateur qui appartiennent encore à une liste d'utilisateurs) .
J'ai eu le temps de tester un truc qui permet de gérer les cas où une erreur est renvoyé et d'améliorer l'expérience utilisateur pour pas qu'il se retrouve sur une page "Internal Server Error".

Voici le comportement actuel (en terme de feedback utilisateur lorsqu'on supprime un utilisateur qui ne peut pas être supprimé car référencé dans une autre table ) :

Error_delete_users_Internal_Server_error

Et voici ce que j'ai testé en terme de code :

@route.route("users/delete/<id_role>", methods=["GET", "POST"])
@fnauth.check_auth(
    6,
)
def deluser(id_role):
    """
    Route qui supprime un utilisateurs dont l'id est donné en paramètres dans l'url
    Retourne une redirection vers la liste d'utilisateurs
    """
    try:
        TRoles.delete(id_role)
        flash("L'utilisateur a été supprimé avec succès.", "success")
    except IntegrityError as e:
            error_message = str(e.orig)
            
            # On extrait la partie du message après "DETAIL:"
            detail_match = re.search(r"DETAIL:\s*(.*)", error_message, re.IGNORECASE)
            if detail_match:
                detail_message = detail_match.group(1)
                # On formatte le message d'erreur en utilisant les détails extraits
                flash(f"L'utilisateur avec l'ID {id_role} ne peut pas être supprimé : {detail_message}", "error")
            else:
                flash("Une erreur est survenue lors de la suppression de l'utilisateur.", "error")
            
            log.error(f"Erreur lors de la suppression de l'utilisateur {id_role}: {error_message}", exc_info=True)
    except Exception as e:
            flash("Une erreur est survenue lors de la suppression de l'utilisateur.", "error")
            log.error(f"Erreur lors de la suppression de l'utilisateur {id_role}: {e}", exc_info=True)
    return redirect(url_for("user.users"))

Exemple de résultat coté frontend :

Info_erreur_suppression_utilisateur_references_autre_table

Merci pour vos retours

@camillemonchicourt @Pierre-Narcisi @jacquesfize @TheoLechemia

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

3 participants