From 4790b9c071ad3ebea20ebd6e72340879ef4d3852 Mon Sep 17 00:00:00 2001 From: Pierre-Antoine Rouby <pierre-antoine.rouby@inrae.fr> Date: Fri, 19 Jan 2024 15:49:54 +0100 Subject: [PATCH] River: Fix node and edges artefact deletions at data saves. --- src/Model/River.py | 30 +++++++++++++++++++++++++++++- 1 file changed, 29 insertions(+), 1 deletion(-) diff --git a/src/Model/River.py b/src/Model/River.py index 99cf8d21..9a8da781 100644 --- a/src/Model/River.py +++ b/src/Model/River.py @@ -16,7 +16,7 @@ # -*- coding: utf-8 -*- -from tools import flatten +from tools import flatten, logger_exception from Model.Tools.PamhyrDB import SQLSubModel @@ -326,6 +326,8 @@ class River(Graph, SQLSubModel): return new def _db_save(self, execute, data=None): + self._db_save_delete_artefact(execute, data) + objs = (self._nodes + self._edges) objs.append(self._boundary_condition) objs.append(self._initial_conditions) @@ -341,6 +343,32 @@ class River(Graph, SQLSubModel): self._save_submodel(execute, objs, data) return True + def _db_save_delete_artefact(self, execute, data=None): + self._db_save_delete_artefact_where_not_id( + execute, data, + "river_node", self._nodes + ) + self._db_save_delete_artefact_where_not_id( + execute, data, + "river_reach", self._edges + + ) + + def _db_save_delete_artefact_where_not_id(self, execute, data, + table:str, els:list): + try: + execute( + f"DELETE FROM {table} " + + "WHERE " + + " OR ".join( + map( + lambda n: f"( id <> {n.id} )", els + ) + ) + ) + except Exception as e: + logger_exception(e) + @property def boundary_condition(self): return self._boundary_condition -- GitLab