diff --git a/src/Model/River.py b/src/Model/River.py index 99cf8d2116be0757151a08a9e6b142e0b7a9fde7..9a8da7814fc6f17116bf20eab4944280aa7777fc 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