]> git.ipfire.org Git - dbl.git/commitdiff
lists: Whenever a list is updated, we refresh the timestamp
authorMichael Tremer <michael.tremer@ipfire.org>
Mon, 2 Mar 2026 17:32:58 +0000 (17:32 +0000)
committerMichael Tremer <michael.tremer@ipfire.org>
Mon, 2 Mar 2026 17:32:58 +0000 (17:32 +0000)
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 <michael.tremer@ipfire.org>
src/dbl/exporters.py
src/dbl/lists.py

index f4e130e4886536488292683200ac60bef779f1b1..c5f7bb48d0002767401aa93872fc0b48e446883d 100644 (file)
@@ -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") % \
index 60a433e1c12ae1b206594453b86eb7dcf98edd41..0bd56d27d5efafae3cff62fdf7fdfd415433898a 100644 (file)
@@ -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: