From: Michael Tremer Date: Fri, 20 Feb 2026 15:57:35 +0000 (+0000) Subject: checker: Fix running in async mode X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=c8a9f4a55987f8384e7d6505e9ec9dbe1c267171;p=dbl.git checker: Fix running in async mode Signed-off-by: Michael Tremer --- diff --git a/src/dbl/checker.py b/src/dbl/checker.py index 5e80801..8960c66 100644 --- a/src/dbl/checker.py +++ b/src/dbl/checker.py @@ -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) diff --git a/src/dbl/lists.py b/src/dbl/lists.py index a1eba73..c73d881 100644 --- a/src/dbl/lists.py +++ b/src/dbl/lists.py @@ -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 diff --git a/src/dbl/sources.py b/src/dbl/sources.py index 61a6347..6bd7e41 100644 --- a/src/dbl/sources.py +++ b/src/dbl/sources.py @@ -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!