2022-04-17 20:58:28 +00:00
|
|
|
import contextlib
|
2021-10-21 12:54:05 +00:00
|
|
|
import os
|
2014-11-26 19:01:20 +00:00
|
|
|
|
2021-01-24 13:40:02 +00:00
|
|
|
from ..utils import load_plugins
|
|
|
|
|
2021-10-21 12:54:05 +00:00
|
|
|
_LAZY_LOADER = False
|
|
|
|
if not os.environ.get('YTDLP_NO_LAZY_EXTRACTORS'):
|
2022-04-17 20:58:28 +00:00
|
|
|
with contextlib.suppress(ImportError):
|
|
|
|
from .lazy_extractors import * # noqa: F403
|
2021-10-21 12:54:05 +00:00
|
|
|
from .lazy_extractors import _ALL_CLASSES
|
|
|
|
_LAZY_LOADER = True
|
2021-01-28 05:52:13 +00:00
|
|
|
|
|
|
|
if not _LAZY_LOADER:
|
2022-04-17 20:58:28 +00:00
|
|
|
from .extractors import * # noqa: F403
|
|
|
|
_ALL_CLASSES = [ # noqa: F811
|
2016-02-10 13:01:31 +00:00
|
|
|
klass
|
|
|
|
for name, klass in globals().items()
|
|
|
|
if name.endswith('IE') and name != 'GenericIE'
|
|
|
|
]
|
2022-04-17 20:58:28 +00:00
|
|
|
_ALL_CLASSES.append(GenericIE) # noqa: F405
|
2013-06-23 20:36:24 +00:00
|
|
|
|
2021-10-21 12:54:05 +00:00
|
|
|
_PLUGIN_CLASSES = load_plugins('extractor', 'IE', globals())
|
|
|
|
_ALL_CLASSES = list(_PLUGIN_CLASSES.values()) + _ALL_CLASSES
|
2021-05-08 15:15:14 +00:00
|
|
|
|
2013-08-24 19:10:03 +00:00
|
|
|
|
2016-02-10 12:16:18 +00:00
|
|
|
def gen_extractor_classes():
|
|
|
|
""" Return a list of supported extractors.
|
|
|
|
The order does matter; the first extractor matched is the one handling the URL.
|
|
|
|
"""
|
|
|
|
return _ALL_CLASSES
|
|
|
|
|
|
|
|
|
2013-06-23 20:36:24 +00:00
|
|
|
def gen_extractors():
|
|
|
|
""" Return a list of an instance of every supported extractor.
|
|
|
|
The order does matter; the first extractor matched is the one handling the URL.
|
|
|
|
"""
|
2016-02-10 12:16:18 +00:00
|
|
|
return [klass() for klass in gen_extractor_classes()]
|
2013-06-23 20:36:24 +00:00
|
|
|
|
2013-08-24 19:10:03 +00:00
|
|
|
|
2022-05-11 15:54:44 +00:00
|
|
|
def list_extractor_classes(age_limit=None):
|
2022-05-09 04:32:17 +00:00
|
|
|
"""Return a list of extractors that are suitable for the given age, sorted by extractor name"""
|
2022-05-11 15:54:44 +00:00
|
|
|
yield from sorted(filter(
|
|
|
|
lambda ie: ie.is_suitable(age_limit) and ie != GenericIE, # noqa: F405
|
|
|
|
gen_extractor_classes()), key=lambda ie: ie.IE_NAME.lower())
|
|
|
|
yield GenericIE # noqa: F405
|
|
|
|
|
|
|
|
|
|
|
|
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)]
|
2015-01-07 06:20:20 +00:00
|
|
|
|
|
|
|
|
2013-06-23 20:36:24 +00:00
|
|
|
def get_info_extractor(ie_name):
|
|
|
|
"""Returns the info extractor class with the given ie_name"""
|
2014-11-23 20:20:46 +00:00
|
|
|
return globals()[ie_name + 'IE']
|