aboutsummaryrefslogtreecommitdiffstats
path: root/youtube_dlc
diff options
context:
space:
mode:
Diffstat (limited to 'youtube_dlc')
-rw-r--r--youtube_dlc/YoutubeDL.py11
-rw-r--r--youtube_dlc/extractor/__init__.py6
-rw-r--r--youtube_dlc/options.py9
-rw-r--r--youtube_dlc/utils.py29
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