Adists: IC: Update load and save for scenario.

This commit is contained in:
parouby committed 2025-08-14 10:31:17 +02:00
1 parent a525d8a2b0
commit 4a0456cbce
2 files changed
+95 -64

No files matched your search

@@ -28,9 +28,7 @@ logger = logging.getLogger()
class ICAdisTSSpec(SQLSubModel):
_sub_classes = [
]
_id_cnt = 0
_sub_classes = []
def __init__(self, id: int = -1, name: str = "",
status=None):
@@ -38,11 +36,6 @@ class ICAdisTSSpec(SQLSubModel):
self._status = status
if id == -1:
self.id = ICAdisTSSpec._id_cnt
else:
self.id = id
self._name_section = name
self._reach = None
self._start_rk = None
@@ -54,8 +47,6 @@ class ICAdisTSSpec(SQLSubModel):
self._rate = None
self._enabled = True
ICAdisTSSpec._id_cnt = max(ICAdisTSSpec._id_cnt + 1, self.id)
@classmethod
def _db_create(cls, execute, ext=""):
execute(f"""
@@ -89,7 +80,7 @@ class ICAdisTSSpec(SQLSubModel):
if int(release) < 6:
cls._db_create(execute)
if major == "0" and int(minor) < 2:
elif major == "0" and int(minor) < 2:
cls._db_update_to_0_2_0(execute, data)
return True
@@ -121,35 +112,44 @@ class ICAdisTSSpec(SQLSubModel):
@classmethod
def _db_load(cls, execute, data=None):
new = []
status = data['status']
reachs = data["edges"]
scenario = data["scenario"]
loaded = data['loaded_pid']
if scenario is None:
return new
table = execute(
"SELECT id, ic_default, name, reach, start_rk, end_rk, " +
"concentration, eg, em, ed, rate, enabled " +
"SELECT id, name, reach, start_rk, end_rk, " +
"concentration, eg, em, ed, rate, enabled, scenario " +
"FROM initial_conditions_spec " +
f"WHERE ic_default = {data['ic_default_id']} "
f"WHERE ic_default = {data['ic_default_id']} " +
f"AND scenario = {scenario.id} " +
f"AND pamhyr_id NOT IN ({', '.join(map(str, loaded))}) "
)
if table is not None:
for row in table:
id = row[0]
name = row[2]
reach = row[3]
start_rk = row[4]
end_rk = row[5]
concentration = row[6]
eg = row[7]
em = row[8]
ed = row[9]
rate = row[10]
enabled = (row[11] == 1)
it = iter(row)
# new_spec = [name, reach, start_rk, end_rk,
# concentration, eg, em, ed, rate, enabled]
id = next(it)
name = next(it)
reach = next(it)
start_rk = next(it)
end_rk = next(it)
concentration = next(it)
eg = next(it)
em = next(it)
ed = next(it)
rate = next(it)
enabled = (next(it) == 1)
owner_scenario = next(it)
new_spec = cls(
id=id,
name=name,
status=data['status']
id=id, name=name,
status=status,
owner_scenario=owner_scenario
)
new_spec.reach = reach
@@ -162,30 +162,35 @@ class ICAdisTSSpec(SQLSubModel):
new_spec.rate = rate
new_spec.enabled = enabled
loaded.add(pid)
new.append(new_spec)
data["scenario"] = scenario.parent
new += cls._db_load(execute, data)
data["scenario"] = scenario
return new
def _db_save(self, execute, data=None):
if not self.must_be_saved():
return True
ic_default = data['ic_default_id']
sql = (
"INSERT INTO " +
"initial_conditions_spec(id, ic_default, name, reach, " +
"start_rk, end_rk, concentration, eg, em, ed, rate, enabled) " +
"start_rk, end_rk, concentration, eg, em, ed, rate, " +
"enabled, scenario) " +
"VALUES (" +
f"{self.id}, " +
f"{ic_default}, " +
f"{self.id}, {ic_default}, " +
f"'{self._db_format(self._name_section)}', " +
f"{self._reach}, " +
f"{self._start_rk}, " +
f"{self._end_rk}, " +
f"{self._start_rk}, {self._end_rk}, " +
f"{self._concentration}, " +
f"{self._eg}, " +
f"{self._em}, " +
f"{self._ed}, " +
f"{self._rate}, " +
f"{self._enabled}" +
f"{self._eg}, {self._em}, {self._ed}, " +
f"{self._rate}, {self._enabled}, " +
f"{self._status.scenario_id}" +
")"
)
execute(sql)