GeometryProfilesXYZ: assignment of interpolated attribute, False by default, True when profile is created with mesh, and for the load of database, False by default, True when name starts with 'interpol'

new_design_pol
Dylan Jeannin 2026-09-01 16:29:43 +02:00
parent d6aeb5df21
commit a88a164ead
2 changed files with 40 additions and 8 deletions

View File

@ -141,6 +141,7 @@ class InternalMeshing(AMeshingTool):
dj*(profiles[i+1].rk - dj*(profiles[i+1].rk -
profiles[i].rk) profiles[i].rk)
p.name = f'interpol{p.rk}' p.name = f'interpol{p.rk}'
p.interpolated = True
new_profiles2.append(p) new_profiles2.append(p)
new_profiles.append(new_profiles2) new_profiles.append(new_profiles2)

View File

@ -59,7 +59,7 @@ class ProfileXYZ(Profile, SQLSubModel):
nb_point: int = 0, nb_point: int = 0,
code1: int = 0, code2: int = 0, code1: int = 0, code2: int = 0,
status=None, owner_scenario=-1, status=None, owner_scenario=-1,
enabled=True): enabled=True, interpolated=False):
"""ProfileXYZ constructor """ProfileXYZ constructor
Args: Args:
@ -92,6 +92,7 @@ class ProfileXYZ(Profile, SQLSubModel):
self._station = [] self._station = []
self.station_up_to_date = False self.station_up_to_date = False
self._enabled = bool(enabled) self._enabled = bool(enabled)
self._interpolated = bool(interpolated)
self._get_water_limits_cache = {} self._get_water_limits_cache = {}
self._get_water_limits_ac_cache = {} self._get_water_limits_ac_cache = {}
@ -111,6 +112,7 @@ class ProfileXYZ(Profile, SQLSubModel):
code2 INTEGER NOT NULL, code2 INTEGER NOT NULL,
sl INTEGER, sl INTEGER,
enabled BOOLEAN NOT NULL DEFAULT TRUE, enabled BOOLEAN NOT NULL DEFAULT TRUE,
interpolated BOOLEAN NOT NULL DEFAULT FALSE,
{Scenario.create_db_add_scenario()}, {Scenario.create_db_add_scenario()},
{Scenario.create_db_add_scenario_fk()}, {Scenario.create_db_add_scenario_fk()},
FOREIGN KEY(reach) REFERENCES river_reach(pamhyr_id), FOREIGN KEY(reach) REFERENCES river_reach(pamhyr_id),
@ -162,6 +164,20 @@ class ProfileXYZ(Profile, SQLSubModel):
"ADD COLUMN enabled BOOLEAN NOT NULL DEFAULT TRUE" "ADD COLUMN enabled BOOLEAN NOT NULL DEFAULT TRUE"
) )
if major == "0" and (int(minor) < 2 or
(minor == "2" and int(release) < 10)):
if minor != "0":
execute(
"ALTER TABLE geometry_profileXYZ " +
"ADD COLUMN interpolated BOOLEAN NOT NULL DEFAULT FALSE"
)
execute(
"UPDATE geometry_profileXYZ " +
"SET interpolated = CASE " +
"WHEN LOWER(name) LIKE 'interpol%' THEN TRUE " +
"ELSE FALSE END"
)
return cls._update_submodel(execute, version, data) return cls._update_submodel(execute, version, data)
@classmethod @classmethod
@ -247,7 +263,7 @@ class ProfileXYZ(Profile, SQLSubModel):
table = execute( table = execute(
"SELECT pamhyr_id, ind, deleted, name, rk, num, " + "SELECT pamhyr_id, ind, deleted, name, rk, num, " +
"code1, code2, sl, scenario, enabled " + "code1, code2, sl, scenario, enabled, interpolated " +
"FROM geometry_profileXYZ " + "FROM geometry_profileXYZ " +
f"WHERE reach = {reach.id} " + f"WHERE reach = {reach.id} " +
f"AND scenario = {scenario.id} " + f"AND scenario = {scenario.id} " +
@ -269,6 +285,7 @@ class ProfileXYZ(Profile, SQLSubModel):
sl = next(it) sl = next(it)
owner_scenario = next(it) owner_scenario = next(it)
enabled = (next(it) == 1) enabled = (next(it) == 1)
interpolated = (next(it) == 1)
profile = cls( profile = cls(
id=pid, ind=ind, num=num, id=pid, ind=ind, num=num,
@ -277,7 +294,8 @@ class ProfileXYZ(Profile, SQLSubModel):
reach=reach, reach=reach,
status=status, status=status,
owner_scenario=owner_scenario, owner_scenario=owner_scenario,
enabled=enabled enabled=enabled,
interpolated=interpolated
) )
if deleted: if deleted:
profile.set_as_deleted() profile.set_as_deleted()
@ -330,13 +348,14 @@ class ProfileXYZ(Profile, SQLSubModel):
execute( execute(
"INSERT OR REPLACE INTO " + "INSERT OR REPLACE INTO " +
"geometry_profileXYZ(pamhyr_id, deleted, ind, name, reach, " + "geometry_profileXYZ(pamhyr_id, deleted, ind, name, reach, " +
"rk, num, code1, code2, sl, scenario, enabled) " + "rk, num, code1, code2, sl, scenario, enabled, interpolated) " +
"VALUES (" + "VALUES (" +
f"{self.pamhyr_id}, {self._db_format(self.is_deleted())}, " + f"{self.pamhyr_id}, {self._db_format(self.is_deleted())}, " +
f"{ind}, '{self._db_format(self._name)}', " + f"{ind}, '{self._db_format(self._name)}', " +
f"{self.reach.pamhyr_id}, {self.rk}, {self.num}, " + f"{self.reach.pamhyr_id}, {self.rk}, {self.num}, " +
f"{self.code1}, {self.code1}, {sl}, {self._status.scenario_id}, " + f"{self.code1}, {self.code1}, {sl}, {self._status.scenario_id}, " +
f"{self._db_format(self._enabled)}" + f"{self._db_format(self._enabled)}, " +
f"{self._db_format(self._interpolated)}" +
")" ")"
) )
@ -404,7 +423,8 @@ class ProfileXYZ(Profile, SQLSubModel):
rk=self.rk, rk=self.rk,
reach=self.reach, reach=self.reach,
status=self._status, status=self._status,
enabled=self.is_enabled enabled=self.is_enabled,
interpolated=self.interpolated
) )
if self.is_deleted(): if self.is_deleted():
new_p.set_as_deleted() new_p.set_as_deleted()
@ -425,7 +445,8 @@ class ProfileXYZ(Profile, SQLSubModel):
rk=self.rk, rk=self.rk,
reach=new_reach, reach=new_reach,
status=self._status, status=self._status,
enabled=self.is_enabled enabled=self.is_enabled,
interpolated=self.interpolated
) )
if self.is_deleted(): if self.is_deleted():
new_p.set_as_deleted() new_p.set_as_deleted()
@ -1147,7 +1168,8 @@ class ProfileXYZ(Profile, SQLSubModel):
rk=self.rk, rk=self.rk,
reach=self.reach, reach=self.reach,
status=self._status, status=self._status,
enabled=self.is_enabled) enabled=self.is_enabled,
interpolated=self.interpolated)
for i, k in enumerate(self.points): for i, k in enumerate(self.points):
p.insert_point(i, k.copy()) p.insert_point(i, k.copy())
@ -1194,3 +1216,12 @@ class ProfileXYZ(Profile, SQLSubModel):
def enabled(self, value): def enabled(self, value):
self._enabled = bool(value) self._enabled = bool(value)
self.modified() self.modified()
@property
def interpolated(self):
return self._interpolated
@interpolated.setter
def interpolated(self, value):
self._interpolated = bool(value)
self.modified()