yt-dlp-bot/worker/core/launcher.py

51 lines
1.7 KiB
Python
Raw Normal View History

2022-02-04 06:21:27 +08:00
import asyncio
import logging
from yt_dlp import version as ytdlp_version
2022-06-14 04:46:54 +08:00
from core.callbacks import rmq_callbacks as cb
2022-10-14 03:55:18 +08:00
from core.config import settings
2022-02-04 06:21:27 +08:00
from yt_shared.db import get_db
from yt_shared.rabbit import get_rabbitmq
from yt_shared.rabbit.rabbit_config import INPUT_QUEUE
from yt_shared.repositories.ytdlp import YtdlpRepository
class WorkerLauncher:
def __init__(self) -> None:
self._log = logging.getLogger(self.__class__.__name__)
self._rabbit_mq = get_rabbitmq()
2022-06-11 04:35:48 +08:00
def start(self):
self._log.info('Starting download worker instance')
loop = asyncio.get_event_loop()
loop.run_until_complete(self._start())
try:
loop.run_forever()
finally:
loop.run_until_complete(self.stop())
2022-02-04 06:21:27 +08:00
2022-06-11 04:35:48 +08:00
async def _start(self) -> None:
2022-10-14 03:55:18 +08:00
await self._perform_setup()
async def _perform_setup(self) -> None:
2022-02-04 06:21:27 +08:00
await asyncio.gather(self._setup_rabbit(), self._set_yt_dlp_version())
async def _setup_rabbit(self) -> None:
self._log.info('Setting up RabbitMQ connection')
await self._rabbit_mq.register()
2022-10-14 03:55:18 +08:00
await self._rabbit_mq.channel.set_qos(
prefetch_count=settings.MAX_SIMULTANEOUS_DOWNLOADS
)
2022-02-04 06:21:27 +08:00
await self._rabbit_mq.queues[INPUT_QUEUE].consume(cb.on_input_message)
async def _set_yt_dlp_version(self):
curr_version = ytdlp_version.__version__
self._log.info('Setting current yt-dlp version (%s)', curr_version)
async for db in get_db():
2022-06-11 04:35:48 +08:00
await YtdlpRepository().create_or_update_version(curr_version, db)
2022-02-04 06:21:27 +08:00
async def stop(self) -> None:
loop = asyncio.get_running_loop()
loop.run_until_complete(self._rabbit_mq.close())