Pamhyr2: Some fixes to prepare db update to 0.1.0.

scenarios
Pierre-Antoine Rouby 2024-07-31 11:23:43 +02:00
parent d8fe1d8b81
commit 16350b4dec
6 changed files with 42 additions and 41 deletions

View File

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

View File

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

View File

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

View File

@ -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 = []

View File

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

View File

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