From: Michael Tremer Date: Mon, 2 Mar 2026 17:32:58 +0000 (+0000) Subject: lists: Whenever a list is updated, we refresh the timestamp X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=1259cceca9fba0055d53021959040e2fe3cc0cf8;p=dbl.git lists: Whenever a list is updated, we refresh the timestamp Further down in the code, we will compare timestamps which have not been manifested in the database, yet, and are therefore unknown. Signed-off-by: Michael Tremer --- diff --git a/src/dbl/exporters.py b/src/dbl/exporters.py index f4e130e..c5f7bb4 100644 --- a/src/dbl/exporters.py +++ b/src/dbl/exporters.py @@ -47,7 +47,7 @@ class Exporter(abc.ABC): The main entry point to export something with this exporter... """ # Ensure the list is optimized - await self.list.optimize() + await self.list.optimize(update_stats=False) # Export! with util.Stopwatch(_("Exporting %(name)s using %(exporter)s") % \ diff --git a/src/dbl/lists.py b/src/dbl/lists.py index 60a433e..0bd56d2 100644 --- a/src/dbl/lists.py +++ b/src/dbl/lists.py @@ -242,13 +242,26 @@ class List(sqlmodel.SQLModel, database.BackendMixin, table=True): break # The list has now been updated - self.updated_at = sqlmodel.func.current_timestamp() + await self.updated() # Updated At updated_at : datetime.datetime = sqlmodel.Field( sa_column_kwargs = {"server_default" : sqlmodel.text("CURRENT_TIMESTAMP")} ) + async def updated(self, optimized=False): + """ + Marks the list as updated + """ + self.updated_at = sqlmodel.func.current_timestamp() + + # Also mark as optimized + if optimized: + self.optimized_at = sqlmodel.func.current_timestamp() + + # Ensure that all timestamps have been manifested + await self.backend.db.flush_and_refresh(self) + def zone(self, prefix=None): s = ( self.slug, prefix, "ipfire.org.", @@ -349,7 +362,7 @@ class List(sqlmodel.SQLModel, database.BackendMixin, table=True): log.info("Domain %s has been added to %s" % (domain, self)) # The list has now been updated - self.updated_at = sqlmodel.func.current_timestamp() + await self.updated() return domain @@ -445,7 +458,7 @@ class List(sqlmodel.SQLModel, database.BackendMixin, table=True): # Update the timestamp if at least one source has actually fetched new data if updated: - self.updated_at = sqlmodel.func.current_timestamp() + await self.updated() # Optimize the list await self.optimize(update_stats=False) @@ -784,9 +797,6 @@ class List(sqlmodel.SQLModel, database.BackendMixin, table=True): """ Optimizes this list """ - # Ensure that all timestamps have been manifested - await self.backend.db.flush_and_refresh(self) - # Don't optimize if the list has not been changed if self.updated_at <= self.optimized_at: log.debug("%s does not require optimization..." % self) @@ -941,8 +951,8 @@ class List(sqlmodel.SQLModel, database.BackendMixin, table=True): log.info(_("Identified %s redunduant domain(s)") % len(redundant_names)) log.info(_("De-listed %s domain(s)") % len(delisted_names)) - # Mark as optimized - self.updated_at = self.optimized_at = sqlmodel.func.current_timestamp() + # Mark as updated and optimized + await self.updated(optimized=True) # Update all stats afterwards if update_stats: