diff --git a/scanner/scanner/__init__.py b/scanner/scanner/__init__.py index 1c5e3d79..0ac4f040 100644 --- a/scanner/scanner/__init__.py +++ b/scanner/scanner/__init__.py @@ -25,9 +25,9 @@ async def lifespan(_): get_db() as db, KyooClient() as client, TheMovieDatabase() as tmdb, + RequestProcessor(db, client, CompositeProvider(tmdb)) as processor ): - processor = RequestProcessor(db, client, CompositeProvider(tmdb)) - await processor.listen_for_requests() + # creating the processor makes it listen to requests event in pg async with ( get_db() as db, KyooClient() as client, diff --git a/scanner/scanner/requests.py b/scanner/scanner/requests.py index 7b794817..e607692b 100644 --- a/scanner/scanner/requests.py +++ b/scanner/scanner/requests.py @@ -1,6 +1,7 @@ from __future__ import annotations from logging import getLogger +from types import TracebackType from typing import Annotated, Literal from asyncpg import Connection @@ -61,9 +62,18 @@ class RequestProcessor: self._client = client self._providers = providers - async def listen_for_requests(self): + async def __aenter__(self): logger.info("Listening for requestes") await self._database.add_listener("scanner.requests", self.process_request) + return self + + async def __aexit__( + self, + exc_type: type[BaseException] | None, + exc_value: BaseException | None, + traceback: TracebackType | None, + ): + await self._database.remove_listener("scanner.requests", self.process_request) async def process_request(self): cur = await self._database.fetchrow(