Friction: Add scenario support.

test_sound
Pierre-Antoine Rouby 2024-09-06 14:41:25 +02:00
parent 5e3dbc18c3
commit 81264fa63e
4 changed files with 51 additions and 22 deletions

View File

@ -222,7 +222,7 @@ class AddFile(SQLSubModel):
f"'{self._db_format(self._name)}', " + f"'{self._db_format(self._name)}', " +
f"'{self._db_format(self._path)}', " + f"'{self._db_format(self._path)}', " +
f"'{self._db_format(self._text)}', " + f"'{self._db_format(self._text)}', " +
f"{self._status.scenario_id}" f"{self._status.scenario_id}" +
")" ")"
) )

View File

@ -30,10 +30,11 @@ logger = logging.getLogger()
class Friction(SQLSubModel): class Friction(SQLSubModel):
def __init__(self, id: int = -1, def __init__(self, id: int = -1,
status=None): status=None, owner_scenario=-1):
super(Friction, self).__init__(id) super(Friction, self).__init__(
id=id, status=status,
self._status = status owner_scenario=owner_scenario
)
self._reach = None self._reach = None
self._begin_rk = 0.0 self._begin_rk = 0.0
@ -46,6 +47,7 @@ class Friction(SQLSubModel):
execute(f""" execute(f"""
CREATE TABLE friction{ext} ( CREATE TABLE friction{ext} (
{cls.create_db_add_pamhyr_id()}, {cls.create_db_add_pamhyr_id()},
deleted BOOLEAN NOT NULL DEFAULT FALSE,
ind INTEGER NOT NULL, ind INTEGER NOT NULL,
begin_rk REAL NOT NULL, begin_rk REAL NOT NULL,
end_rk REAL NOT NULL, end_rk REAL NOT NULL,
@ -77,6 +79,13 @@ class Friction(SQLSubModel):
cls._db_update_to_0_1_0(execute, data) cls._db_update_to_0_1_0(execute, data)
if major == "0" and minor == "1":
if release < 2:
execute(
"ALTER TABLE friction " +
"ADD COLUMN deleted BOOLEAN NOT NULL DEFAULT FALSE"
)
return cls._update_submodel(execute, version, data) return cls._update_submodel(execute, version, data)
@classmethod @classmethod
@ -128,15 +137,22 @@ class Friction(SQLSubModel):
@classmethod @classmethod
def _db_load(cls, execute, data=None): def _db_load(cls, execute, data=None):
new = [] new = []
scenario = data["scenario"]
loaded = data['loaded_pid']
if scenario is None:
return new
reach = data["reach"] reach = data["reach"]
status = data["status"]
stricklers = data["stricklers"].stricklers stricklers = data["stricklers"].stricklers
table = execute( table = execute(
"SELECT pamhyr_id, begin_rk, end_rk, " + "SELECT pamhyr_id, deleted, begin_rk, end_rk, " +
"begin_strickler, end_strickler " + "begin_strickler, end_strickler, scenario " +
f"FROM friction WHERE reach = {reach.pamhyr_id} " + f"FROM friction " +
f"WHERE reach = {reach.pamhyr_id} " +
f"AND scenario = {scenario.id} " +
f"AND pamhyr_id NOT IN ({', '.join(map(str, loaded))}) " +
"ORDER BY ind ASC" "ORDER BY ind ASC"
) )
@ -144,10 +160,12 @@ class Friction(SQLSubModel):
it = iter(row) it = iter(row)
pid = next(it) pid = next(it)
deleted = (next(it) == 1)
begin_rk = next(it) begin_rk = next(it)
end_rk = next(it) end_rk = next(it)
begin_strickler_pid = next(it) begin_strickler_pid = next(it)
end_strickler_pid = next(it) end_strickler_pid = next(it)
owner_scenario = next(it)
# Get stricklers # Get stricklers
begin_strickler = None begin_strickler = None
@ -167,22 +185,32 @@ class Friction(SQLSubModel):
) )
) )
# Create friction
new_friction = cls( new_friction = cls(
id=pid, id=pid, status=data['status'],
status=status owner_scenario=owner_scenario
) )
if deleted:
f.set_as_deleted()
new_friction.reach = reach new_friction.reach = reach
new_friction.begin_rk = begin_rk new_friction.begin_rk = begin_rk
new_friction.end_rk = end_rk new_friction.end_rk = end_rk
new_friction.begin_strickler = begin_strickler new_friction.begin_strickler = begin_strickler
new_friction.end_strickler = begin_strickler new_friction.end_strickler = begin_strickler
loaded.add(pid)
new.append(new_friction) new.append(new_friction)
data["scenario"] = scenario.parent
new += cls._db_load(execute, data)
data["scenario"] = scenario
return new return new
def _db_save(self, execute, data=None): def _db_save(self, execute, data=None):
if not self.must_be_saved():
return True
ind = data["ind"] ind = data["ind"]
b_s_id = -1 b_s_id = -1
@ -195,13 +223,13 @@ class Friction(SQLSubModel):
execute( execute(
"INSERT INTO " + "INSERT INTO " +
"friction(pamhyr_id, ind, begin_rk, end_rk, " + "friction(pamhyr_id, deleted, ind, begin_rk, end_rk, " +
"reach, begin_strickler, end_strickler) " + "reach, begin_strickler, end_strickler, scenario) " +
"VALUES (" + "VALUES (" +
f"{self.id}, {ind}, " + f"{self.id}, {self._db_format(self.is_deleted())}, " +
f"{self._begin_rk}, {self._end_rk}, " + f"{ind}, {self._begin_rk}, {self._end_rk}, " +
f"{self._reach.id}, " + f"{self._reach.id}, {b_s_id}, {e_s_id}" +
f"{b_s_id}, {e_s_id}" + f"{self._status.scenario_id}" +
")" ")"
) )

View File

@ -22,7 +22,7 @@ from copy import copy
from tools import trace, timer from tools import trace, timer
from Model.Tools.PamhyrDB import SQLSubModel from Model.Tools.PamhyrDB import SQLSubModel
from Model.Tools.PamhyrList import PamhyrModelList from Model.Tools.PamhyrListExt import PamhyrModelList
from Model.Friction.Friction import Friction from Model.Friction.Friction import Friction
@ -60,7 +60,10 @@ class FrictionList(PamhyrModelList):
frictions = self.lst frictions = self.lst
reach = data["reach"] reach = data["reach"]
execute(f"DELETE FROM friction WHERE reach = {reach.id}") execute(
f"DELETE FROM friction WHERE reach = {reach.id} " +
f"WHERE scenario = {self._status.scenario_id}"
)
ok = True ok = True
ind = 0 ind = 0

View File

@ -36,8 +36,6 @@ class REPLine(SQLSubModel):
owner_scenario=owner_scenario owner_scenario=owner_scenario
) )
self._status = status
self._enabled = enabled self._enabled = enabled
self._name = f"Line #{self._pamhyr_id}" if name == "" else name self._name = f"Line #{self._pamhyr_id}" if name == "" else name
self._line = line self._line = line