-from __future__ import unicode_literals
+from ..compat.compat_utils import passthrough_module
-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
-
-if not _LAZY_LOADER:
- from .extractors import *
- _ALL_CLASSES = [
- klass
- for name, klass in globals().items()
- if name.endswith('IE') and name != 'GenericIE'
- ]
- _ALL_CLASSES.append(GenericIE)
-
- _PLUGIN_CLASSES = load_plugins('extractor', 'IE', globals())
- _ALL_CLASSES = _PLUGIN_CLASSES + _ALL_CLASSES
+passthrough_module(__name__, '.extractors')
+del passthrough_module
def gen_extractor_classes():
""" Return a list of supported extractors.
The order does matter; the first extractor matched is the one handling the URL.
"""
+ from .extractors import _ALL_CLASSES
+
return _ALL_CLASSES
return [klass() for klass in gen_extractor_classes()]
-def list_extractors(age_limit):
- """
- Return a list of extractors that are suitable for the given age,
- sorted by extractor ID.
- """
+def list_extractor_classes(age_limit=None):
+ """Return a list of extractors that are suitable for the given age, sorted by extractor name"""
+ from .generic import GenericIE
+
+ yield from sorted(filter(
+ lambda ie: ie.is_suitable(age_limit) and ie != GenericIE,
+ gen_extractor_classes()), key=lambda ie: ie.IE_NAME.lower())
+ yield GenericIE
- return sorted(
- filter(lambda ie: ie.is_suitable(age_limit), gen_extractors()),
- key=lambda ie: ie.IE_NAME.lower())
+
+def list_extractors(age_limit=None):
+ """Return a list of extractor instances that are suitable for the given age, sorted by extractor name"""
+ return [ie() for ie in list_extractor_classes(age_limit)]
def get_info_extractor(ie_name):
"""Returns the info extractor class with the given ie_name"""
- return globals()[ie_name + 'IE']
+ from . import extractors
+
+ return getattr(extractors, f'{ie_name}IE')