[extractor] Passthrough `errnote=False` to parsing

This commit is contained in:
pukkandan 2022-07-15 16:05:00 +05:30
parent 5f2da312fa
commit 6edf28081f
No known key found for this signature in database
GPG Key ID: 7EEE9E1E817D0A39
1 changed files with 17 additions and 19 deletions

View File

@ -929,39 +929,37 @@ class InfoExtractor:
return content
def _parse_xml(self, xml_string, video_id, transform_source=None, fatal=True):
def __print_error(self, errnote, fatal, video_id, err):
if fatal:
raise ExtractorError(f'{video_id}: {errnote} ', cause=err)
elif errnote:
self.report_warning(f'{video_id}: {errnote} {err}')
def _parse_xml(self, xml_string, video_id, transform_source=None, fatal=True, errnote=None):
if transform_source:
xml_string = transform_source(xml_string)
try:
return compat_etree_fromstring(xml_string.encode('utf-8'))
except xml.etree.ElementTree.ParseError as ve:
errmsg = '%s: Failed to parse XML ' % video_id
if fatal:
raise ExtractorError(errmsg, cause=ve)
else:
self.report_warning(errmsg + str(ve))
self.__print_error('Failed to parse XML' if errnote is None else errnote, fatal, video_id, ve)
def _parse_json(self, json_string, video_id, transform_source=None, fatal=True, **parser_kwargs):
def _parse_json(self, json_string, video_id, transform_source=None, fatal=True, errnote=None, **parser_kwargs):
try:
return json.loads(
json_string, cls=LenientJSONDecoder, strict=False, transform_source=transform_source, **parser_kwargs)
except ValueError as ve:
errmsg = f'{video_id}: Failed to parse JSON'
if fatal:
raise ExtractorError(errmsg, cause=ve)
else:
self.report_warning(f'{errmsg}: {ve}')
self.__print_error('Failed to parse JSON' if errnote is None else errnote, fatal, video_id, ve)
def _parse_socket_response_as_json(self, data, video_id, transform_source=None, fatal=True):
return self._parse_json(
data[data.find('{'):data.rfind('}') + 1],
video_id, transform_source, fatal)
def _parse_socket_response_as_json(self, data, *args, **kwargs):
return self._parse_json(data[data.find('{'):data.rfind('}') + 1], *args, **kwargs)
def __create_download_methods(name, parser, note, errnote, return_value):
def parse(ie, content, *args, **kwargs):
def parse(ie, content, *args, errnote=errnote, **kwargs):
if parser is None:
return content
if errnote is False:
kwargs['errnote'] = errnote
# parser is fetched by name so subclasses can override it
return getattr(ie, parser)(content, *args, **kwargs)
@ -973,7 +971,7 @@ class InfoExtractor:
if res is False:
return res
content, urlh = res
return parse(self, content, video_id, transform_source=transform_source, fatal=fatal), urlh
return parse(self, content, video_id, transform_source=transform_source, fatal=fatal, errnote=errnote), urlh
def download_content(self, url_or_request, video_id, note=note, errnote=errnote, transform_source=None,
fatal=True, encoding=None, data=None, headers={}, query={}, expected_status=None):
@ -988,7 +986,7 @@ class InfoExtractor:
self.report_warning(f'Unable to load request from disk: {e}')
else:
content = self.__decode_webpage(webpage_bytes, encoding, url_or_request.headers)
return parse(self, content, video_id, transform_source, fatal)
return parse(self, content, video_id, transform_source=transform_source, fatal=fatal, errnote=errnote)
kwargs = {
'note': note,
'errnote': errnote,