From 00709d5e9ae3db7cadded05f44272a7734d32b5d Mon Sep 17 00:00:00 2001 From: Simon Sawicki Date: Tue, 17 Jan 2023 14:54:08 +0100 Subject: [PATCH] Fix tests and add test for reloading --- test/test_plugins.py | 50 +++++++++++++++++-- .../yt_dlp_plugins/extractor/normal.py | 9 ++++ .../yt_dlp_plugins/postprocessor/normal.py | 5 ++ .../yt_dlp_plugins/extractor/normal.py | 2 +- .../yt_dlp_plugins/postprocessor/normal.py | 2 +- 5 files changed, 61 insertions(+), 7 deletions(-) create mode 100644 test/testdata/reload_plugins/yt_dlp_plugins/extractor/normal.py create mode 100644 test/testdata/reload_plugins/yt_dlp_plugins/postprocessor/normal.py diff --git a/test/test_plugins.py b/test/test_plugins.py index 6cde579e1..c53bef432 100644 --- a/test/test_plugins.py +++ b/test/test_plugins.py @@ -10,7 +10,8 @@ TEST_DATA_DIR = Path(os.path.dirname(os.path.abspath(__file__)), 'testdata') sys.path.append(str(TEST_DATA_DIR)) importlib.invalidate_caches() -from yt_dlp.plugins import PACKAGE_NAME, directories, load_plugins +from yt_dlp.plugins import PACKAGE_NAME, PluginType, directories, load_plugins +from yt_dlp.globals import extractors, postprocessors class TestPlugins(unittest.TestCase): @@ -24,7 +25,7 @@ class TestPlugins(unittest.TestCase): for module_name in tuple(sys.modules): if module_name.startswith(f'{PACKAGE_NAME}.extractor'): del sys.modules[module_name] - plugins_ie = load_plugins('extractor', 'IE') + plugins_ie = load_plugins(PluginType.EXTRACTORS) self.assertIn(f'{PACKAGE_NAME}.extractor.normal', sys.modules.keys()) self.assertIn('NormalPluginIE', plugins_ie.keys()) @@ -43,7 +44,7 @@ class TestPlugins(unittest.TestCase): self.assertIn('InAllPluginIE', plugins_ie.keys()) def test_postprocessor_classes(self): - plugins_pp = load_plugins('postprocessor', 'PP') + plugins_pp = load_plugins(PluginType.POSTPROCESSORS) self.assertIn('NormalPluginPP', plugins_pp.keys()) def test_importing_zipped_module(self): @@ -57,10 +58,10 @@ class TestPlugins(unittest.TestCase): package = importlib.import_module(f'{PACKAGE_NAME}.{plugin_type}') self.assertIn(zip_path / PACKAGE_NAME / plugin_type, map(Path, package.__path__)) - plugins_ie = load_plugins('extractor', 'IE') + plugins_ie = load_plugins(PluginType.EXTRACTORS) self.assertIn('ZippedPluginIE', plugins_ie.keys()) - plugins_pp = load_plugins('postprocessor', 'PP') + plugins_pp = load_plugins(PluginType.POSTPROCESSORS) self.assertIn('ZippedPluginPP', plugins_pp.keys()) finally: @@ -68,6 +69,45 @@ class TestPlugins(unittest.TestCase): os.remove(zip_path) importlib.invalidate_caches() # reset the import caches + def test_reloading_plugins(self): + reload_plugins_path = TEST_DATA_DIR / 'reload_plugins' + + for plugin_type in ('extractor', 'postprocessor'): + package = importlib.import_module(f'{PACKAGE_NAME}.{plugin_type}') + load_plugins(PluginType.EXTRACTORS) + load_plugins(PluginType.POSTPROCESSORS) + + # Remove default folder and add reload_plugin path + sys.path.remove(str(TEST_DATA_DIR)) + sys.path.append(str(reload_plugins_path)) + importlib.invalidate_caches() + try: + for plugin_type in ('extractor', 'postprocessor'): + package = importlib.import_module(f'{PACKAGE_NAME}.{plugin_type}') + self.assertIn(reload_plugins_path / PACKAGE_NAME / plugin_type, map(Path, package.__path__)) + + plugins_ie = load_plugins(PluginType.EXTRACTORS) + self.assertIn('NormalPluginIE', plugins_ie.keys()) + self.assertTrue( + plugins_ie['NormalPluginIE'].REPLACED, + msg='Reloading has not replaced original extractor plugin') + self.assertTrue( + extractors.get()['NormalPluginIE'].REPLACED, + msg='Reloading has not replaced original extractor plugin globally') + + plugins_pp = load_plugins(PluginType.POSTPROCESSORS) + self.assertIn('NormalPluginPP', plugins_pp.keys()) + self.assertTrue(plugins_pp['NormalPluginPP'].REPLACED, + msg='Reloading has not replaced original postprocessor plugin') + self.assertTrue( + postprocessors.get()['NormalPluginPP'].REPLACED, + msg='Reloading has not replaced original postprocessor plugin globally') + + finally: + sys.path.remove(str(reload_plugins_path)) + sys.path.append(str(TEST_DATA_DIR)) + importlib.invalidate_caches() + if __name__ == '__main__': unittest.main() diff --git a/test/testdata/reload_plugins/yt_dlp_plugins/extractor/normal.py b/test/testdata/reload_plugins/yt_dlp_plugins/extractor/normal.py new file mode 100644 index 000000000..ad99cf8ab --- /dev/null +++ b/test/testdata/reload_plugins/yt_dlp_plugins/extractor/normal.py @@ -0,0 +1,9 @@ +from yt_dlp.extractor.common import InfoExtractor + + +class NormalPluginIE(InfoExtractor): + REPLACED = True + + +class _IgnoreUnderscorePluginIE(InfoExtractor): + pass diff --git a/test/testdata/reload_plugins/yt_dlp_plugins/postprocessor/normal.py b/test/testdata/reload_plugins/yt_dlp_plugins/postprocessor/normal.py new file mode 100644 index 000000000..5e44ba2b5 --- /dev/null +++ b/test/testdata/reload_plugins/yt_dlp_plugins/postprocessor/normal.py @@ -0,0 +1,5 @@ +from yt_dlp.postprocessor.common import PostProcessor + + +class NormalPluginPP(PostProcessor): + REPLACED = True diff --git a/test/testdata/yt_dlp_plugins/extractor/normal.py b/test/testdata/yt_dlp_plugins/extractor/normal.py index b09009bdc..1f3feebfa 100644 --- a/test/testdata/yt_dlp_plugins/extractor/normal.py +++ b/test/testdata/yt_dlp_plugins/extractor/normal.py @@ -2,7 +2,7 @@ from yt_dlp.extractor.common import InfoExtractor class NormalPluginIE(InfoExtractor): - pass + REPLACED = False class _IgnoreUnderscorePluginIE(InfoExtractor): diff --git a/test/testdata/yt_dlp_plugins/postprocessor/normal.py b/test/testdata/yt_dlp_plugins/postprocessor/normal.py index 315b85a48..1e94d7b8b 100644 --- a/test/testdata/yt_dlp_plugins/postprocessor/normal.py +++ b/test/testdata/yt_dlp_plugins/postprocessor/normal.py @@ -2,4 +2,4 @@ from yt_dlp.postprocessor.common import PostProcessor class NormalPluginPP(PostProcessor): - pass + REPLACED = False