|
@@ -21,6 +21,7 @@ from ..compat import (
|
|
|
compat_str,
|
|
|
)
|
|
|
from ..utils import (
|
|
|
+ age_restricted,
|
|
|
clean_html,
|
|
|
compiled_regex_type,
|
|
|
ExtractorError,
|
|
@@ -877,6 +878,35 @@ class InfoExtractor(object):
|
|
|
None, '/', True, False, expire_time, '', None, None, None)
|
|
|
self._downloader.cookiejar.set_cookie(cookie)
|
|
|
|
|
|
+ def get_testcases(self, include_onlymatching=False):
|
|
|
+ t = getattr(self, '_TEST', None)
|
|
|
+ if t:
|
|
|
+ assert not hasattr(self, '_TESTS'), \
|
|
|
+ '%s has _TEST and _TESTS' % type(self).__name__
|
|
|
+ tests = [t]
|
|
|
+ else:
|
|
|
+ tests = getattr(self, '_TESTS', [])
|
|
|
+ for t in tests:
|
|
|
+ if not include_onlymatching and t.get('only_matching', False):
|
|
|
+ continue
|
|
|
+ t['name'] = type(self).__name__[:-len('IE')]
|
|
|
+ yield t
|
|
|
+
|
|
|
+ def is_suitable(self, age_limit):
|
|
|
+ """ Test whether the extractor is generally suitable for the given
|
|
|
+ age limit (i.e. pornographic sites are not, all others usually are) """
|
|
|
+
|
|
|
+ any_restricted = False
|
|
|
+ for tc in self.get_testcases(include_onlymatching=False):
|
|
|
+ if 'playlist' in tc:
|
|
|
+ tc = tc['playlist'][0]
|
|
|
+ is_restricted = age_restricted(
|
|
|
+ tc.get('info_dict', {}).get('age_limit'), age_limit)
|
|
|
+ if not is_restricted:
|
|
|
+ return True
|
|
|
+ any_restricted = any_restricted or is_restricted
|
|
|
+ return not any_restricted
|
|
|
+
|
|
|
|
|
|
class SearchInfoExtractor(InfoExtractor):
|
|
|
"""
|