diff options
Diffstat (limited to 'youtube_dlc')
-rw-r--r-- | youtube_dlc/YoutubeDL.py | 11 | ||||
-rw-r--r-- | youtube_dlc/extractor/__init__.py | 6 | ||||
-rw-r--r-- | youtube_dlc/options.py | 9 | ||||
-rw-r--r-- | youtube_dlc/utils.py | 29 |
4 files changed, 44 insertions, 11 deletions
diff --git a/youtube_dlc/YoutubeDL.py b/youtube_dlc/YoutubeDL.py index b45b1bbba..02cc97625 100644 --- a/youtube_dlc/YoutubeDL.py +++ b/youtube_dlc/YoutubeDL.py @@ -105,7 +105,7 @@ from .utils import ( process_communicate_or_kill, ) from .cache import Cache -from .extractor import get_info_extractor, gen_extractor_classes, _LAZY_LOADER +from .extractor import get_info_extractor, gen_extractor_classes, _LAZY_LOADER, _PLUGIN_CLASSES from .extractor.openload import PhantomJSwrapper from .downloader import get_suitable_downloader from .downloader.rtmp import rtmpdump_version @@ -2652,9 +2652,12 @@ class YoutubeDL(object): self.get_encoding())) write_string(encoding_str, encoding=None) - self._write_string('[debug] yt-dlp version ' + __version__ + '\n') + self._write_string('[debug] yt-dlp version %s\n' % __version__) if _LAZY_LOADER: - self._write_string('[debug] Lazy loading extractors enabled' + '\n') + self._write_string('[debug] Lazy loading extractors enabled\n') + if _PLUGIN_CLASSES: + self._write_string( + '[debug] Plugin Extractors: %s\n' % [ie.ie_key() for ie in _PLUGIN_CLASSES]) try: sp = subprocess.Popen( ['git', 'rev-parse', '--short', 'HEAD'], @@ -2663,7 +2666,7 @@ class YoutubeDL(object): out, err = process_communicate_or_kill(sp) out = out.decode().strip() if re.match('[0-9a-f]+', out): - self._write_string('[debug] Git HEAD: ' + out + '\n') + self._write_string('[debug] Git HEAD: %s\n' % out) except Exception: try: sys.exc_clear() diff --git a/youtube_dlc/extractor/__init__.py b/youtube_dlc/extractor/__init__.py index 18d8dbcd6..56251384d 100644 --- a/youtube_dlc/extractor/__init__.py +++ b/youtube_dlc/extractor/__init__.py @@ -1,13 +1,19 @@ from __future__ import unicode_literals +from ..utils import load_plugins + try: from .lazy_extractors import * from .lazy_extractors import _ALL_CLASSES _LAZY_LOADER = True + _PLUGIN_CLASSES = [] + except ImportError: _LAZY_LOADER = False from .extractors import * + _PLUGIN_CLASSES = load_plugins('extractor', 'IE', globals()) + _ALL_CLASSES = [ klass for name, klass in globals().items() diff --git a/youtube_dlc/options.py b/youtube_dlc/options.py index 7a18f0f84..97e8964d6 100644 --- a/youtube_dlc/options.py +++ b/youtube_dlc/options.py @@ -15,6 +15,7 @@ from .compat import ( ) from .utils import ( expand_path, + get_executable_path, preferredencoding, write_string, ) @@ -1226,13 +1227,7 @@ def parseOpts(overrideArguments=None): return [], None return config, current_path - def get_portable_path(): - path = os.path.dirname(sys.argv[0]) - if os.path.abspath(sys.argv[0]) != os.path.abspath(sys.executable): # Not packaged - path = os.path.join(path, '..') - return os.path.abspath(path) - - configs['portable'], paths['portable'] = read_options(get_portable_path()) + configs['portable'], paths['portable'] = read_options(get_executable_path()) if '--ignore-config' in configs['portable']: return diff --git a/youtube_dlc/utils.py b/youtube_dlc/utils.py index 6740f0cdb..34a14424a 100644 --- a/youtube_dlc/utils.py +++ b/youtube_dlc/utils.py @@ -16,6 +16,7 @@ import email.header import errno import functools import gzip +import imp import io import itertools import json @@ -5905,3 +5906,31 @@ def make_dir(path, to_screen=None): if callable(to_screen) is not None: to_screen('unable to create directory ' + error_to_compat_str(err)) return False + + +def get_executable_path(): + path = os.path.dirname(sys.argv[0]) + if os.path.abspath(sys.argv[0]) != os.path.abspath(sys.executable): # Not packaged + path = os.path.join(path, '..') + return os.path.abspath(path) + + +def load_plugins(name, type, 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) + for name in dir(plugins): + if not name.endswith(type): + continue + klass = getattr(plugins, name) + classes.append(klass) + namespace[name] = klass + except ImportError: + pass + finally: + if plugin_info[0] is not None: + plugin_info[0].close() + return classes |