3 from .common
import InfoExtractor
4 from ..utils
import ExtractorError
7 class TestURLIE(InfoExtractor
):
8 """ Allows addressing of the test cases as test:yout.*be_1 """
10 IE_DESC
= False # Do not list
11 _VALID_URL
= r
'test(?:url)?:(?P<extractor>.*?)(?:_(?P<num>[0-9]+))?$'
13 def _real_extract(self
, url
):
14 from . import gen_extractor_classes
16 extractor_id
, num
= self
._match
_valid
_url
(url
).group('extractor', 'num')
18 return {'id': ':test', 'title': '', 'url': url}
20 rex
= re
.compile(extractor_id
, flags
=re
.IGNORECASE
)
21 matching_extractors
= [e
for e
in gen_extractor_classes() if rex
.search(e
.IE_NAME
)]
23 if len(matching_extractors
) == 0:
24 raise ExtractorError(f
'No extractors matching {extractor_id!r} found', expected
=True)
25 elif len(matching_extractors
) > 1:
26 try: # Check for exact match
28 ie
for ie
in matching_extractors
29 if ie
.IE_NAME
.lower() == extractor_id
.lower())
32 'Found multiple matching extractors: %s' % ' '.join(ie
.IE_NAME
for ie
in matching_extractors
),
35 extractor
= matching_extractors
[0]
37 testcases
= tuple(extractor
.get_testcases(True))
39 tc
= testcases
[int(num
or 0)]
42 f
'Test case {num or 0} not found, got only {len(testcases)} tests', expected
=True)
44 self
.to_screen(f
'Test URL: {tc["url"]}')
45 return self
.url_result(tc
['url'])