River: Fix node and edges artefact deletions at data saves.

setup.py
Pierre-Antoine Rouby 2024-01-19 15:49:54 +01:00
parent 770bb5f96f
commit 4790b9c071
1 changed files with 29 additions and 1 deletions

View File

@ -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