Reach: Fix deleted profile loading and manipulation.

scenarios
Pierre-Antoine 2025-08-28 10:43:20 +02:00
parent e3cbe3cf1f
commit cc5d86328b
1 changed files with 19 additions and 13 deletions

View File

@ -83,6 +83,11 @@ class Reach(SQLSubModel):
return new
def _db_save(self, execute, data=None):
if not self.must_be_saved():
return True
ok = True
execute(
"DELETE FROM geometry_profileXYZ " +
f"WHERE reach = {self.pamhyr_id} " +
@ -92,10 +97,10 @@ class Reach(SQLSubModel):
ind = 0
for profile in self._profiles:
data["ind"] = ind
profile._db_save(execute, data)
ok &= profile._db_save(execute, data)
ind += 1
return True
return ok
def profile(self, i):
"""Returns profile at index i
@ -169,7 +174,7 @@ class Reach(SQLSubModel):
"""
profile = ProfileXYZ(reach=self, status=self._status)
self.profiles.insert(index, profile)
self._profiles.insert(index, profile)
self.modified()
@ -187,7 +192,7 @@ class Reach(SQLSubModel):
if profile in self._profiles:
self.undelete([profile])
else:
self.profiles.insert(index, profile)
self._profiles.insert(index, profile)
self.modified()
@ -205,7 +210,7 @@ class Reach(SQLSubModel):
lambda p: p[1].set_as_deleted(),
filter(
lambda e: e[0] in indexes,
enumerate(self.profiles)
enumerate(self._profiles)
)
)
)
@ -237,13 +242,14 @@ class Reach(SQLSubModel):
def purge(self):
for el in self._profiles:
el.set_as_deleted()
self.modified()
def move_up_profile(self, index: int):
if index < len(self.profiles):
next = index - 1
p = self.profiles
p = self._profiles
p[index], p[next] = p[next], p[index]
self.modified()
@ -251,7 +257,7 @@ class Reach(SQLSubModel):
if index >= 0:
prev = index + 1
p = self.profiles
p = self._profiles
p[index], p[prev] = p[prev], p[index]
self.modified()
@ -522,8 +528,8 @@ class Reach(SQLSubModel):
@timer
def sort(self, is_reversed: bool = False):
self.profiles = sorted(
self.profiles,
self._profiles = sorted(
self._profiles,
key=lambda profile: profile.rk,
reverse=is_reversed
)
@ -534,11 +540,11 @@ class Reach(SQLSubModel):
if len(self.profiles) != len(indexes):
logger.critical("Indexes list do not correspond to profile list")
self.profiles = list(
self._profiles = list(
map(
lambda x: x[1],
sorted(
enumerate(self.profiles),
enumerate(self._profiles),
key=lambda x: indexes[x[0]]
)
)
@ -599,7 +605,7 @@ class Reach(SQLSubModel):
profiles.append(prof)
self.profiles = profiles + self.profiles
self._profiles = profiles + self._profiles
self._recompute_rk()
return profiles
@ -647,7 +653,7 @@ class Reach(SQLSubModel):
logger.error(e)
e.alert()
finally:
self.profiles = imported_profiles + self.profiles
self._profiles = self._profiles + imported_profiles
return imported_profiles