diff --git a/src/Model/Geometry/Profile.py b/src/Model/Geometry/Profile.py index 3f55eb49..80084e0e 100644 --- a/src/Model/Geometry/Profile.py +++ b/src/Model/Geometry/Profile.py @@ -28,24 +28,15 @@ logger = logging.getLogger() class Profile(object): - _id_cnt = 0 - def __init__(self, id: int = -1, num: int = 0, rk: float = 0.0, name: str = "", code1: int = 0, code2: int = 0, _type: str = "", reach=None, status=None): - super(Profile, self).__init__() + super(Profile, self).__init__(id) self._status = status - if id == -1: - self.id = Profile._id_cnt - else: - self.id = id - - Profile._id_cnt = max(self.id, Profile._id_cnt+1) - self._num = int(num) self._code1 = int(code1) self._code2 = int(code2) diff --git a/src/Model/Network/Edge.py b/src/Model/Network/Edge.py index a21c89ab..4468544f 100644 --- a/src/Model/Network/Edge.py +++ b/src/Model/Network/Edge.py @@ -20,24 +20,15 @@ from Model.Network.Node import Node class Edge(object): - _id_cnt = 0 - def __init__(self, id: int, name: str, node1: Node = None, node2: Node = None, status=None): - super(Edge, self).__init__() + super(Edge, self).__init__(id) self._status = status - if id == -1: - type(self)._id_cnt += 1 - self.id = type(self)._id_cnt - else: - self.id = id - self._name = name - self.node1 = node1 self.node2 = node2 @@ -49,7 +40,7 @@ class Edge(object): if name == "name": ret = self.name elif name == "id": - ret = self.id + ret = self.pamhyr_id elif name == "node1": ret = self.node1.name elif name == "node2": @@ -63,7 +54,7 @@ class Edge(object): if name == "name": self._name = value elif name == "id": - self.id = value + self.pamhyr_id = value elif name == "node1": self.node1 = value elif name == "node2": @@ -73,6 +64,10 @@ class Edge(object): self._status.modified() + @property + def id(self): + return self.pamhyr_id + @property def name(self): name = self._name diff --git a/src/Model/Network/Node.py b/src/Model/Network/Node.py index eb763939..fa41f393 100644 --- a/src/Model/Network/Node.py +++ b/src/Model/Network/Node.py @@ -20,23 +20,15 @@ from Model.Network.Point import Point class Node(object): - _id_cnt = 0 - def __init__(self, id: int, name: str, x: float = 0.0, y: float = 0.0, status=None): - super(Node, self).__init__() + super(Node, self).__init__(id) self._status = status - if id == -1: - type(self)._id_cnt += 1 - self.id = type(self)._id_cnt - else: - self.id = id - if name == "": - self._name = f"Node {self.id}" + self._name = f"Node #{self.pamhyr_id}" else: self._name = name @@ -48,7 +40,7 @@ class Node(object): if key == "name": ret = self._name elif key == "id": - ret = self.id + ret = self.pamhyr_id elif key == "pos": ret = f"({self.pos.x},{self.pos.y})" @@ -58,7 +50,7 @@ class Node(object): if key == "name": self._name = value elif key == "id": - self.id = value + self.pamhyr_id = value self._status.modified() diff --git a/src/Model/Reservoir/Reservoir.py b/src/Model/Reservoir/Reservoir.py index a31f87fc..5addc096 100644 --- a/src/Model/Reservoir/Reservoir.py +++ b/src/Model/Reservoir/Reservoir.py @@ -178,6 +178,7 @@ class Reservoir(SQLSubModel): @classmethod def _db_update_to_0_1_0(cls, execute, data): table = "reservoir" + nodes = data['id2pid']['river_node'] cls.update_db_add_pamhyr_id( execute, table, @@ -196,6 +197,25 @@ class Reservoir(SQLSubModel): execute(f"DROP TABLE {table}") execute(f"ALTER TABLE {table}_tmp RENAME TO {table}") + cls._db_update_to_0_1_0_set_node_pid(execute, table, nodes) + + @classmethod + def _db_update_to_0_1_0_set_node_pid(cls, execute, table, nodes): + bcs = execute( + f"SELECT pamhyr_id, node FROM {table}" + ) + + for row in bcs: + it = iter(row) + pid = next(it) + node_id = next(it) + + execute( + f"UPDATE {table} " + + f"SET node = {nodes[node_id]}, " + + f"WHERE pamhyr_id = {pid}" + ) + @classmethod def _db_load(cls, execute, data=None): new = [] diff --git a/src/Model/River.py b/src/Model/River.py index b7bff114..0565b42b 100644 --- a/src/Model/River.py +++ b/src/Model/River.py @@ -191,8 +191,6 @@ class RiverReach(Edge, SQLSubModel): def _db_update(cls, execute, version, data=None): major, minor, release = version.strip().split(".") - logger.info(f"data = {data}") - if major == minor == "0": cls._db_update_to_0_1_0(execute, data) @@ -462,7 +460,8 @@ class River(Graph, SQLSubModel): "WHERE " + " OR ".join( map( - lambda n: f"( id <> {n.id} )", els + lambda n: f"( pamhyr_id <> {n.pamhyr_id} )", + els ) ) ) diff --git a/src/Model/Tools/PamhyrDB.py b/src/Model/Tools/PamhyrDB.py index 13987b0b..93d7dde9 100644 --- a/src/Model/Tools/PamhyrDB.py +++ b/src/Model/Tools/PamhyrDB.py @@ -105,7 +105,7 @@ class SQLModel(SQL): ok = True for obj in objs: - ok &= obj._db_save(fn) + ok &= obj._db_save(fn, data={}) self.commit() return ok @@ -116,7 +116,7 @@ class SQLModel(SQL): def _count(self): raise NotImplementedMethodeError(self, self._count) - def _save_count(self, objs, data=None): + def _save_count(self, objs, data={}): counter = { "insert": 0, "update": 0, @@ -137,7 +137,7 @@ class SQLModel(SQL): ok = True for obj in objs: - ok &= obj._db_save(fn) + ok &= obj._db_save(fn, data=data) logger.debug(counter) @@ -218,8 +218,12 @@ class SQLSubModel(PamhyrID): raise NotImplementedMethodeError(cls, cls._db_load) def _save_submodel(self, execute, objs, data=None): + ok = True + for o in objs: - o._db_save(execute, data=data) + ok &= o._db_save(execute, data=data) + + return ok def _db_save(self, execute, data=None): """Save class data to data base