diff --git a/README.md b/README.md index 382bd8b31..39bc0112e 100644 --- a/README.md +++ b/README.md @@ -337,8 +337,12 @@ ## General Options: configuration files --plugin-dirs PATH Path to an additional directory to search for plugins. This option can be used - multiple times to add multiple directories - --no-plugins Disable plugin loading + multiple times to add multiple directories. + Use "default" to search the default plugin + directories (default) + --no-plugin-dirs Clear plugin directories to search, + including defaults and those provided by + previous --plugin-dirs --flat-playlist Do not extract a playlist's URL result entries; some entry metadata may be missing and downloading may be bypassed diff --git a/test/test_plugins.py b/test/test_plugins.py index 6499ed615..84e45e6e2 100644 --- a/test/test_plugins.py +++ b/test/test_plugins.py @@ -17,7 +17,7 @@ load_plugins, load_all_plugins, register_plugin_spec, - disable_plugins, + clear_plugins, ) from yt_dlp.globals import ( @@ -236,8 +236,8 @@ def test_append_plugin_dirs(self): self.assertIn(f'{PACKAGE_NAME}.extractor.package', sys.modules.keys()) self.assertIn('PackagePluginIE', plugin_ies.value) - def test_disable_plugins(self): - disable_plugins() + def test_clear_plugins(self): + clear_plugins() ies = load_plugins(EXTRACTOR_PLUGIN_SPEC) self.assertEqual(ies, {}) self.assertNotIn(f'{PACKAGE_NAME}.extractor.normal', sys.modules.keys()) @@ -248,13 +248,13 @@ def test_disable_plugins(self): self.assertNotIn(f'{PACKAGE_NAME}.postprocessor.normal', sys.modules.keys()) self.assertNotIn('NormalPluginPP', plugin_pps.value) - def test_disable_plugins_already_loaded(self): + def test_clear_plugins_already_loaded(self): register_plugin_spec(EXTRACTOR_PLUGIN_SPEC) register_plugin_spec(POSTPROCESSOR_PLUGIN_SPEC) load_all_plugins() with self.assertRaises(YoutubeDLError): - disable_plugins() + clear_plugins() ies = load_plugins(EXTRACTOR_PLUGIN_SPEC) self.assertIn('NormalPluginIE', ies) diff --git a/yt_dlp/YoutubeDL.py b/yt_dlp/YoutubeDL.py index ad69268a6..9f5e4369c 100644 --- a/yt_dlp/YoutubeDL.py +++ b/yt_dlp/YoutubeDL.py @@ -4095,12 +4095,15 @@ def get_encoding(stream): continue write_debug(f'{plugin_type} Plugins: {", ".join(sorted(display_list))}') + plugin_dirs_msg = 'none' if not plugin_dirs.value: - write_debug('Plugins are disabled') + plugin_dirs_msg = 'none (disabled)' else: - loaded_plugin_directories = plugin_directories() - if loaded_plugin_directories: - write_debug(f'Plugin directories: {loaded_plugin_directories}') + found_plugin_directories = plugin_directories() + if found_plugin_directories: + plugin_dirs_msg = ', '.join(found_plugin_directories) + + write_debug(f'Plugin directories: {plugin_dirs_msg}') @functools.cached_property def proxies(self): diff --git a/yt_dlp/options.py b/yt_dlp/options.py index e797f5407..38e30f7c6 100644 --- a/yt_dlp/options.py +++ b/yt_dlp/options.py @@ -416,13 +416,14 @@ def _alias_callback(option, opt_str, value, parser, opts, nargs): default=['default'], help=( 'Path to an additional directory to search for plugins. ' - 'This option can be used multiple times to add multiple directories')) + 'This option can be used multiple times to add multiple directories. ' + 'Use "default" to search the default plugin directories (default)')) general.add_option( - '--no-plugins', + '--no-plugin-dirs', dest='plugin_dirs', action='store_const', const=[], - help='Disable plugin loading') + help='Clear plugin directories to search, including defaults and those provided by previous --plugin-dirs') general.add_option( '--flat-playlist', action='store_const', dest='extract_flat', const='in_playlist', default=False, diff --git a/yt_dlp/plugins.py b/yt_dlp/plugins.py index dbc34f71a..85a0759a7 100644 --- a/yt_dlp/plugins.py +++ b/yt_dlp/plugins.py @@ -44,8 +44,8 @@ __all__ = [ 'COMPAT_PACKAGE_NAME', 'PACKAGE_NAME', + 'clear_plugins', 'directories', - 'disable_plugins', 'load_all_plugins', 'load_plugins', 'register_plugin_spec', @@ -258,12 +258,12 @@ def register_plugin_spec(plugin_spec: PluginSpec): sys.meta_path.insert(0, PluginFinder(f'{PACKAGE_NAME}.{plugin_spec.module_name}')) -def disable_plugins(): +def clear_plugins(): if ( all_plugins_loaded.value or any(len(plugin_spec.plugin_destination.value) != 0 for plugin_spec in plugin_specs.value.values()) ): # note: we can't detect all cases when plugins are loaded (e.g. if spec isn't registered) - raise YoutubeDLError('Plugins have already been loaded. Cannot disable plugins after loading plugins.') + raise YoutubeDLError('Plugins have already been loaded. Cannot clear plugins after loading plugins.') plugin_dirs.value = []