]>
Commit | Line | Data |
---|---|---|
a9c7198a PH |
1 | import re |
2 | ||
3 | from .common import InfoExtractor | |
4 | from ..utils import ExtractorError | |
5 | ||
6 | ||
7 | class TestURLIE(InfoExtractor): | |
dfb1b146 | 8 | """ Allows addressing of the test cases as test:yout.*be_1 """ |
a9c7198a PH |
9 | |
10 | IE_DESC = False # Do not list | |
82d02080 | 11 | _VALID_URL = r'test(?:url)?:(?P<extractor>.+?)(?:_(?P<num>[0-9]+))?$' |
a9c7198a PH |
12 | |
13 | def _real_extract(self, url): | |
c487cf00 | 14 | from . import gen_extractor_classes |
a9c7198a | 15 | |
82d02080 | 16 | extractor_id, num = self._match_valid_url(url).group('extractor', 'num') |
a9c7198a PH |
17 | |
18 | rex = re.compile(extractor_id, flags=re.IGNORECASE) | |
82d02080 | 19 | matching_extractors = [e for e in gen_extractor_classes() if rex.search(e.IE_NAME)] |
a9c7198a PH |
20 | |
21 | if len(matching_extractors) == 0: | |
82d02080 | 22 | raise ExtractorError('No extractors matching {extractor_id!r} found', expected=True) |
a9c7198a | 23 | elif len(matching_extractors) > 1: |
82d02080 | 24 | try: # Check for exact match |
a9c7198a PH |
25 | extractor = next( |
26 | ie for ie in matching_extractors | |
27 | if ie.IE_NAME.lower() == extractor_id.lower()) | |
28 | except StopIteration: | |
29 | raise ExtractorError( | |
82d02080 | 30 | 'Found multiple matching extractors: %s' % ' '.join(ie.IE_NAME for ie in matching_extractors), |
a9c7198a | 31 | expected=True) |
4d756a9c PH |
32 | else: |
33 | extractor = matching_extractors[0] | |
a9c7198a | 34 | |
82d02080 | 35 | testcases = tuple(extractor.get_testcases(True)) |
a9c7198a | 36 | try: |
82d02080 | 37 | tc = testcases[int(num or 0)] |
a9c7198a PH |
38 | except IndexError: |
39 | raise ExtractorError( | |
82d02080 | 40 | f'Test case {num or 0} not found, got only {len(testcases)} tests', expected=True) |
a9c7198a | 41 | |
82d02080 | 42 | self.to_screen(f'Test URL: {tc["url"]}') |
43 | return self.url_result(tc['url']) |