mirror of
https://github.com/zoriya/Kyoo.git
synced 2025-07-08 02:34:16 -04:00
Fix listener
This commit is contained in:
parent
9c451a865e
commit
df23cf54d7
@ -1,5 +1,5 @@
|
|||||||
import logging
|
import logging
|
||||||
from asyncio import CancelledError, TaskGroup, create_task
|
from asyncio import CancelledError, TaskGroup, create_task, sleep
|
||||||
from contextlib import asynccontextmanager
|
from contextlib import asynccontextmanager
|
||||||
|
|
||||||
from fastapi import FastAPI
|
from fastapi import FastAPI
|
||||||
@ -25,15 +25,21 @@ async def lifespan(_):
|
|||||||
get_db() as db,
|
get_db() as db,
|
||||||
KyooClient() as client,
|
KyooClient() as client,
|
||||||
TheMovieDatabase() as tmdb,
|
TheMovieDatabase() as tmdb,
|
||||||
RequestProcessor(db, client, tmdb) as processor,
|
|
||||||
):
|
):
|
||||||
# there's no way someone else used the same id, right?
|
# there's no way someone else used the same id, right?
|
||||||
is_master = await db.fetchval("select pg_try_advisory_lock(198347)")
|
is_master = await db.fetchval("select pg_try_advisory_lock(198347)")
|
||||||
if is_master:
|
if is_master:
|
||||||
await migrate()
|
await migrate()
|
||||||
async with get_db() as db:
|
async with get_db() as scanner_db:
|
||||||
scanner = FsScanner(client, RequestCreator(db))
|
processor = RequestProcessor(db, client, tmdb)
|
||||||
tasks = create_task(background_startup(scanner, processor, is_master))
|
scanner = FsScanner(client, RequestCreator(scanner_db))
|
||||||
|
tasks = create_task(
|
||||||
|
background_startup(
|
||||||
|
scanner,
|
||||||
|
processor,
|
||||||
|
is_master,
|
||||||
|
)
|
||||||
|
)
|
||||||
yield
|
yield
|
||||||
_ = tasks.cancel()
|
_ = tasks.cancel()
|
||||||
|
|
||||||
@ -44,7 +50,7 @@ async def background_startup(
|
|||||||
is_master: bool | None,
|
is_master: bool | None,
|
||||||
):
|
):
|
||||||
async with TaskGroup() as tg:
|
async with TaskGroup() as tg:
|
||||||
_ = tg.create_task(processor.listen())
|
_ = tg.create_task(processor.listen(tg))
|
||||||
if is_master:
|
if is_master:
|
||||||
_ = tg.create_task(scanner.monitor())
|
_ = tg.create_task(scanner.monitor())
|
||||||
_ = tg.create_task(scanner.scan(remove_deleted=True))
|
_ = tg.create_task(scanner.scan(remove_deleted=True))
|
||||||
|
@ -1,10 +1,11 @@
|
|||||||
from __future__ import annotations
|
from __future__ import annotations
|
||||||
|
|
||||||
|
from asyncio import CancelledError, Future, TaskGroup, sleep
|
||||||
from logging import getLogger
|
from logging import getLogger
|
||||||
from types import TracebackType
|
from types import TracebackType
|
||||||
from typing import Literal
|
from typing import Literal, cast
|
||||||
|
|
||||||
from asyncpg import Connection
|
from asyncpg import Connection, Pool
|
||||||
from pydantic import Field, TypeAdapter
|
from pydantic import Field, TypeAdapter
|
||||||
|
|
||||||
from .client import KyooClient
|
from .client import KyooClient
|
||||||
@ -68,18 +69,17 @@ class RequestProcessor:
|
|||||||
self._client = client
|
self._client = client
|
||||||
self._providers = providers
|
self._providers = providers
|
||||||
|
|
||||||
async def __aenter__(self):
|
async def listen(self, tg: TaskGroup):
|
||||||
logger.info("Listening for requestes")
|
def process(*_):
|
||||||
await self._database.add_listener("scanner_requests", self.process_all)
|
_ = tg.create_task(self.process_all())
|
||||||
return self
|
|
||||||
|
|
||||||
async def __aexit__(
|
try:
|
||||||
self,
|
logger.info("Listening for requestes")
|
||||||
exc_type: type[BaseException] | None,
|
await self._database.add_listener("scanner_requests", process)
|
||||||
exc_value: BaseException | None,
|
await Future()
|
||||||
traceback: TracebackType | None,
|
except CancelledError as e:
|
||||||
):
|
logger.info("Stopped listening for requsets")
|
||||||
await self._database.remove_listener("scanner_requests", self.process_all)
|
await self._database.remove_listener("scanner_requests", process)
|
||||||
|
|
||||||
async def process_all(self):
|
async def process_all(self):
|
||||||
found = True
|
found = True
|
||||||
|
Loading…
x
Reference in New Issue
Block a user