]> jfr.im git - yt-dlp.git/commitdiff
[utils] Use `importlib` to load plugins (#1277)
authorÁkos Sülyi <redacted>
Mon, 18 Oct 2021 01:46:49 +0000 (03:46 +0200)
committerGitHub <redacted>
Mon, 18 Oct 2021 01:46:49 +0000 (07:16 +0530)
Authored by: sulyi

yt_dlp/utils.py

index 15bee0c4708d7a3bdae782c098602551d8b4196f..3ac2fbc4bec037507a5b891fe4b0ace68d4a2c3c 100644 (file)
@@ -18,7 +18,7 @@
 import gzip
 import hashlib
 import hmac
-import imp
+import importlib.util
 import io
 import itertools
 import json
@@ -6302,12 +6302,13 @@ def get_executable_path():
 
 
 def load_plugins(name, suffix, namespace):
-    plugin_info = [None]
     classes = {}
     try:
-        plugin_info = imp.find_module(
-            name, [os.path.join(get_executable_path(), 'ytdlp_plugins')])
-        plugins = imp.load_module(name, *plugin_info)
+        plugins_spec = importlib.util.spec_from_file_location(
+            name, os.path.join(get_executable_path(), 'ytdlp_plugins', name, '__init__.py'))
+        plugins = importlib.util.module_from_spec(plugins_spec)
+        sys.modules[plugins_spec.name] = plugins
+        plugins_spec.loader.exec_module(plugins)
         for name in dir(plugins):
             if name in namespace:
                 continue
@@ -6315,11 +6316,8 @@ def load_plugins(name, suffix, namespace):
                 continue
             klass = getattr(plugins, name)
             classes[name] = namespace[name] = klass
-    except ImportError:
+    except FileNotFoundError:
         pass
-    finally:
-        if plugin_info[0] is not None:
-            plugin_info[0].close()
     return classes