Beginning of redis support
This commit is contained in:
parent
f8d34778c9
commit
ec97541e18
|
|
@ -19,6 +19,7 @@ class SectionConfig:
|
||||||
'_log_backups': 7,
|
'_log_backups': 7,
|
||||||
'_log_level': 20,
|
'_log_level': 20,
|
||||||
'_unit_test': True,
|
'_unit_test': True,
|
||||||
|
'_enable_redis': True
|
||||||
}
|
}
|
||||||
|
|
||||||
def append(self, key, item):
|
def append(self, key, item):
|
||||||
|
|
@ -92,7 +93,10 @@ class ConfigManager:
|
||||||
|
|
||||||
self.__config.read(params_file if params_file is not None else 'params/params.ini')
|
self.__config.read(params_file if params_file is not None else 'params/params.ini')
|
||||||
|
|
||||||
self.__init_logger(self.__config['app'].getint('_log_level'), self.__config['app'].getint('_log_backups'))
|
self.log_level = self.__config['app'].getint('_log_level')
|
||||||
|
self.log_backups = self.__config['app'].getint('_log_backups')
|
||||||
|
|
||||||
|
self.init_logger()
|
||||||
|
|
||||||
logging.info(f"Container build date : {os.environ.get('DATE')}, git revision : {os.environ.get('GIT_BRANCH')} - {os.environ.get('GIT_REVISION')}")
|
logging.info(f"Container build date : {os.environ.get('DATE')}, git revision : {os.environ.get('GIT_BRANCH')} - {os.environ.get('GIT_REVISION')}")
|
||||||
|
|
||||||
|
|
@ -100,12 +104,11 @@ class ConfigManager:
|
||||||
self.__load_metadata()
|
self.__load_metadata()
|
||||||
self.__set_config_objects()
|
self.__set_config_objects()
|
||||||
|
|
||||||
@staticmethod
|
def init_logger(self):
|
||||||
def __init_logger(level=30, backup_count=7):
|
logging.basicConfig(level=self.log_level, format='[%(asctime)s][%(name)s][%(levelname)s] %(message)s', datefmt='%d-%m-%y %H:%M:%S')
|
||||||
logging.basicConfig(level=level, format='[%(asctime)s][%(name)s][%(levelname)s] %(message)s', datefmt='%d-%m-%y %H:%M:%S')
|
|
||||||
|
|
||||||
time_handler = handlers.TimedRotatingFileHandler('logs/ydl_api_ng', when='midnight', interval=1, backupCount=backup_count)
|
time_handler = handlers.TimedRotatingFileHandler('logs/ydl_api_ng', when='midnight', interval=1, backupCount=self.log_backups)
|
||||||
time_handler.setLevel(level)
|
time_handler.setLevel(self.log_level)
|
||||||
time_handler.setFormatter(logging.Formatter('[%(asctime)s][%(name)s][%(levelname)s] %(message)s', datefmt='%d-%m-%y %H:%M:%S'))
|
time_handler.setFormatter(logging.Formatter('[%(asctime)s][%(name)s][%(levelname)s] %(message)s', datefmt='%d-%m-%y %H:%M:%S'))
|
||||||
logging.getLogger().addHandler(time_handler)
|
logging.getLogger().addHandler(time_handler)
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -4,6 +4,8 @@ import logging
|
||||||
from urllib.parse import urlparse
|
from urllib.parse import urlparse
|
||||||
|
|
||||||
import yt_dlp as ydl
|
import yt_dlp as ydl
|
||||||
|
from redis import Redis
|
||||||
|
from rq import Queue
|
||||||
|
|
||||||
import config_manager
|
import config_manager
|
||||||
from params import progress_hooks, postprocessor_hooks, ydl_api_hooks
|
from params import progress_hooks, postprocessor_hooks, ydl_api_hooks
|
||||||
|
|
@ -43,6 +45,8 @@ class DownloadManager:
|
||||||
is_video = self.check_if_video()
|
is_video = self.check_if_video()
|
||||||
self.is_video = is_video if is_video is not None else False
|
self.is_video = is_video if is_video is not None else False
|
||||||
|
|
||||||
|
self.enable_redis = self.__cm.get_app_params().get('_enable_redis')
|
||||||
|
|
||||||
if post_body is not None and post_body.get('presets') is not None and len(post_body.get('presets')) > 0:
|
if post_body is not None and post_body.get('presets') is not None and len(post_body.get('presets')) > 0:
|
||||||
self.get_presets_from_post_request(post_body.get('presets'))
|
self.get_presets_from_post_request(post_body.get('presets'))
|
||||||
else:
|
else:
|
||||||
|
|
@ -259,23 +263,32 @@ class DownloadManager:
|
||||||
|
|
||||||
ydl_opts = copy.deepcopy(preset)
|
ydl_opts = copy.deepcopy(preset)
|
||||||
|
|
||||||
ydl_opts.append('progress_hooks', [functools.partial(progress_hooks.handler, ydl_opts, self, self.__cm), functools.partial(self.progress_hooks_proxy)])
|
ydl_opts.append('progress_hooks', [functools.partial(progress_hooks.handler, ydl_opts, self, self.get_current_config_manager()), functools.partial(self.progress_hooks_proxy)])
|
||||||
ydl_opts.append('postprocessor_hooks', [functools.partial(postprocessor_hooks.handler, ydl_opts, self, self.__cm)])
|
ydl_opts.append('postprocessor_hooks', [functools.partial(postprocessor_hooks.handler, ydl_opts, self, self.get_current_config_manager())])
|
||||||
ydl_opts.append('logger', logging.getLogger('youtube-dlp'))
|
ydl_opts.append('logger', logging.getLogger('youtube-dlp'))
|
||||||
|
|
||||||
ydl_api_hooks.pre_download_handler(ydl_opts, self, self.__cm)
|
ydl_api_hooks.pre_download_handler(ydl_opts, self, self.get_current_config_manager())
|
||||||
|
|
||||||
|
if self.enable_redis:
|
||||||
|
queue = Queue('ydl_api_ng', connection=Redis())
|
||||||
|
redis_id = queue.enqueue(self.send_download_order, args=[ydl_opts, True], job_timeout=-1).id
|
||||||
|
preset.append('_redis_id', redis_id)
|
||||||
|
else:
|
||||||
|
preset.append('_redis_id', None)
|
||||||
|
self.send_download_order(ydl_opts)
|
||||||
|
|
||||||
|
def send_download_order(self, ydl_opts):
|
||||||
|
if self.enable_redis:
|
||||||
|
self.get_current_config_manager().init_logger()
|
||||||
|
|
||||||
try:
|
try:
|
||||||
with ydl.YoutubeDL(ydl_opts.get_all()) as dl:
|
with ydl.YoutubeDL(ydl_opts.get_all()) as dl:
|
||||||
download_result = dl.download([self.url]) == 0
|
dl.download([self.url])
|
||||||
ydl_opts.append('__download_exception_message', None)
|
ydl_opts.append('__download_exception_message', None)
|
||||||
except ydl.utils.DownloadError as error:
|
except ydl.utils.DownloadError as error:
|
||||||
download_result = False
|
|
||||||
ydl_opts.append('__download_exception_message', str(error))
|
ydl_opts.append('__download_exception_message', str(error))
|
||||||
|
|
||||||
ydl_api_hooks.post_download_handler(ydl_opts, self, self.__cm, self.downloaded_files)
|
ydl_api_hooks.post_download_handler(ydl_opts, self, self.get_current_config_manager(), self.downloaded_files)
|
||||||
|
|
||||||
return download_result
|
|
||||||
|
|
||||||
def process_downloads(self):
|
def process_downloads(self):
|
||||||
for preset in self.presets:
|
for preset in self.presets:
|
||||||
|
|
@ -343,3 +356,6 @@ class DownloadManager:
|
||||||
'downloads_cannot_be_checked': self.downloads_cannot_be_checked,
|
'downloads_cannot_be_checked': self.downloads_cannot_be_checked,
|
||||||
'downloads': presets_display,
|
'downloads': presets_display,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
def get_current_config_manager(self):
|
||||||
|
return self.__cm
|
||||||
|
|
|
||||||
5
main.py
5
main.py
|
|
@ -68,7 +68,10 @@ async def download_request(response: Response, background_tasks: BackgroundTasks
|
||||||
response.status_code = dm.get_api_status_code()
|
response.status_code = dm.get_api_status_code()
|
||||||
|
|
||||||
if response.status_code != 400:
|
if response.status_code != 400:
|
||||||
background_tasks.add_task(dm.process_downloads)
|
if __cm.get_app_params().get('_enable_redis'):
|
||||||
|
dm.process_downloads()
|
||||||
|
else:
|
||||||
|
background_tasks.add_task(dm.process_downloads)
|
||||||
|
|
||||||
return dm.get_api_return_object()
|
return dm.get_api_return_object()
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -8,6 +8,8 @@ _log_level = 20
|
||||||
_log_backups = 7
|
_log_backups = 7
|
||||||
_listen_port = 80
|
_listen_port = 80
|
||||||
_listen_ip = 0.0.0.0
|
_listen_ip = 0.0.0.0
|
||||||
|
_enable_redis = true
|
||||||
|
|
||||||
_allow_dangerous_post_requests = false
|
_allow_dangerous_post_requests = false
|
||||||
|
|
||||||
;;;
|
;;;
|
||||||
|
|
|
||||||
|
|
@ -39,6 +39,7 @@ _log_level = 20
|
||||||
_log_backups = 7
|
_log_backups = 7
|
||||||
_listen_port = 80
|
_listen_port = 80
|
||||||
_listen_ip = 0.0.0.0
|
_listen_ip = 0.0.0.0
|
||||||
|
_enable_redis = true
|
||||||
|
|
||||||
;;; just for unit tests purpose, please don't mind
|
;;; just for unit tests purpose, please don't mind
|
||||||
_int_test = 42
|
_int_test = 42
|
||||||
|
|
|
||||||
|
|
@ -32,6 +32,7 @@ _float = _float_test
|
||||||
_bool = _allow_dangerous_post_requests
|
_bool = _allow_dangerous_post_requests
|
||||||
_bool_test
|
_bool_test
|
||||||
_dev_mode
|
_dev_mode
|
||||||
|
_enable_redis
|
||||||
_enable_users_management
|
_enable_users_management
|
||||||
allow_multiple_audio_streams
|
allow_multiple_audio_streams
|
||||||
allow_multiple_video_streams
|
allow_multiple_video_streams
|
||||||
|
|
|
||||||
|
|
@ -16,6 +16,7 @@ class TestActualParametersFile(unittest.TestCase):
|
||||||
self.assertFalse(self.config_manager.get_app_params().get('_enable_users_management'))
|
self.assertFalse(self.config_manager.get_app_params().get('_enable_users_management'))
|
||||||
self.assertEqual('0.0.0.0', self.config_manager.get_app_params().get('_listen_ip'))
|
self.assertEqual('0.0.0.0', self.config_manager.get_app_params().get('_listen_ip'))
|
||||||
self.assertFalse(self.config_manager.get_app_params().get('_allow_dangerous_post_requests'))
|
self.assertFalse(self.config_manager.get_app_params().get('_allow_dangerous_post_requests'))
|
||||||
|
self.assertTrue(self.config_manager.get_app_params().get('_enable_redis'))
|
||||||
|
|
||||||
|
|
||||||
class TestConfig(unittest.TestCase):
|
class TestConfig(unittest.TestCase):
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue