]> git.ipfire.org Git - dbl.git/commitdiff
checker: Fix running in async mode
authorMichael Tremer <michael.tremer@ipfire.org>
Fri, 20 Feb 2026 15:57:35 +0000 (15:57 +0000)
committerMichael Tremer <michael.tremer@ipfire.org>
Fri, 20 Feb 2026 15:57:35 +0000 (15:57 +0000)
Signed-off-by: Michael Tremer <michael.tremer@ipfire.org>
src/dbl/checker.py
src/dbl/lists.py
src/dbl/sources.py

index 5e8080139c03dd51e6cf33217dea1d7af9b0f7b6..8960c66619053ab97582779c88eed419e78d4a19 100644 (file)
@@ -47,7 +47,7 @@ class Checker(object):
 
                self.results = {}
 
-       def check(self, *domains, batch_size=10240):
+       async def check(self, *domains, batch_size=10240):
                """
                        Checks all domains that need checking.
                """
@@ -62,7 +62,7 @@ class Checker(object):
                        while True:
                                # Submit some more domains for checking unless we have been given
                                # some by the caller.
-                               for domain in domains:
+                               async for domain in domains:
                                        self.submit(domain)
 
                                        # Break when we have submitted enough domains
@@ -75,22 +75,22 @@ class Checker(object):
 
                                try:
                                        for result in concurrent.futures.as_completed(self.results, timeout=1):
-                                               self._store(result)
+                                               await self._store(result)
 
                                # If nothing has completed, we just start a new iteration
                                except TimeoutError:
                                        pass
 
                                # Manually commit after a batch has been processed
-                               self.backend.db.commit()
+                               await self.backend.db.commit()
 
                # Update all stats after we checked all domains
-               for source in self.backend.sources:
-                       source.update_stats()
+               async for source in self.backend.sources:
+                       await source.update_stats()
 
                # Update all stats for all lists
-               for list in self.backend.lists:
-                       list.update_stats()
+               async for list in self.backend.lists:
+                       await list.update_stats()
 
        def get_domains(self, limit=None):
                """
@@ -160,7 +160,7 @@ class Checker(object):
 
                return result
 
-       def _store(self, result):
+       async def _store(self, result):
                """
                        Called after we have received a result for the queried domain
                """
@@ -214,4 +214,4 @@ class Checker(object):
                )
 
                # Store the result
-               self.backend.db.execute(stmt)
+               await self.backend.db.execute(stmt)
index a1eba73783369f2268eab473e252a3b82c8776aa..c73d881c822169ed5ff6ca15dd735c6463012add 100644 (file)
@@ -237,7 +237,7 @@ class List(sqlmodel.SQLModel, database.BackendMixin, table=True):
                # Delete the source
                for source in self.sources:
                        if source.url == url:
-                               source.delete(**kwargs)
+                               await source.delete(**kwargs)
                                break
 
                # The list has now been updated
index 61a63474cb7ee303a349e42d991bfe628de4471b..6bd7e41099ddc4068c4ff6448a00db480c8fc595 100644 (file)
@@ -143,7 +143,9 @@ class Source(sqlmodel.SQLModel, database.BackendMixin, table=True):
        list_id : int = sqlmodel.Field(foreign_key="lists.id", exclude=True)
 
        # List
-       list : "List" = sqlmodel.Relationship(back_populates="sources")
+       list : "List" = sqlmodel.Relationship(
+               back_populates="sources", sa_relationship_kwargs={ "lazy" : "selectin" },
+       )
 
        # Last Modified At
        last_modified_at : datetime.datetime | None = sqlmodel.Field(exclude=True)
@@ -155,7 +157,7 @@ class Source(sqlmodel.SQLModel, database.BackendMixin, table=True):
        updated_at : datetime.datetime | None
 
        # Domains
-       domains : "Domain" = sqlmodel.Relationship(back_populates="source")
+       domains: "Domain" = sqlmodel.Relationship(back_populates="source")
 
        # Delete!