From 2f567473c6001160138aeb43dd6096093dd5448e Mon Sep 17 00:00:00 2001 From: pukkandan Date: Sat, 8 May 2021 20:45:14 +0530 Subject: [PATCH] [Plugins] Prioritize plugins over standard extractors and prevent plugins from overwriting the standard extractor classes Closes #304 --- yt_dlp/extractor/__init__.py | 6 +++--- yt_dlp/utils.py | 6 ++++-- 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/yt_dlp/extractor/__init__.py b/yt_dlp/extractor/__init__.py index 38f6df1816..7d540540e2 100644 --- a/yt_dlp/extractor/__init__.py +++ b/yt_dlp/extractor/__init__.py @@ -12,9 +12,6 @@ if not _LAZY_LOADER: from .extractors import * - - _PLUGIN_CLASSES = load_plugins('extractor', 'IE', globals()) - _ALL_CLASSES = [ klass for name, klass in globals().items() @@ -22,6 +19,9 @@ ] _ALL_CLASSES.append(GenericIE) + _PLUGIN_CLASSES = load_plugins('extractor', 'IE', globals()) + _ALL_CLASSES = _PLUGIN_CLASSES + _ALL_CLASSES + def gen_extractor_classes(): """ Return a list of supported extractors. diff --git a/yt_dlp/utils.py b/yt_dlp/utils.py index baa2a415e4..b80a8cedb3 100644 --- a/yt_dlp/utils.py +++ b/yt_dlp/utils.py @@ -6081,7 +6081,7 @@ def get_executable_path(): return os.path.abspath(path) -def load_plugins(name, type, namespace): +def load_plugins(name, suffix, namespace): plugin_info = [None] classes = [] try: @@ -6089,7 +6089,9 @@ def load_plugins(name, type, namespace): name, [os.path.join(get_executable_path(), 'ytdlp_plugins')]) plugins = imp.load_module(name, *plugin_info) for name in dir(plugins): - if not name.endswith(type): + if name in namespace: + continue + if not name.endswith(suffix): continue klass = getattr(plugins, name) classes.append(klass)