[utils] Add `network_exceptions`

This commit is contained in:
pukkandan 2021-05-04 22:36:18 +05:30
parent 6ef6bcbd6b
commit 3158150cb7
No known key found for this signature in database
GPG Key ID: 0F00D95A001F4698
4 changed files with 15 additions and 16 deletions

View File

@ -19,7 +19,6 @@ import platform
import re import re
import shutil import shutil
import subprocess import subprocess
import socket
import sys import sys
import time import time
import tokenize import tokenize
@ -33,7 +32,6 @@ from .compat import (
compat_basestring, compat_basestring,
compat_cookiejar, compat_cookiejar,
compat_get_terminal_size, compat_get_terminal_size,
compat_http_client,
compat_kwargs, compat_kwargs,
compat_numeric_types, compat_numeric_types,
compat_os_name, compat_os_name,
@ -77,6 +75,7 @@ from .utils import (
make_dir, make_dir,
make_HTTPS_handler, make_HTTPS_handler,
MaxDownloadsReached, MaxDownloadsReached,
network_exceptions,
orderedSet, orderedSet,
PagedList, PagedList,
parse_filesize, parse_filesize,
@ -2271,7 +2270,7 @@ class YoutubeDL(object):
dl(sub_filename, sub_info.copy(), subtitle=True) dl(sub_filename, sub_info.copy(), subtitle=True)
sub_info['filepath'] = sub_filename sub_info['filepath'] = sub_filename
files_to_move[sub_filename] = sub_filename_final files_to_move[sub_filename] = sub_filename_final
except (ExtractorError, IOError, OSError, ValueError, compat_urllib_error.URLError, compat_http_client.HTTPException, socket.error) as err: except tuple([ExtractorError, IOError, OSError, ValueError] + network_exceptions) as err:
self.report_warning('Unable to download subtitle for "%s": %s' % self.report_warning('Unable to download subtitle for "%s": %s' %
(sub_lang, error_to_compat_str(err))) (sub_lang, error_to_compat_str(err)))
continue continue
@ -2475,7 +2474,7 @@ class YoutubeDL(object):
dl_filename = dl_filename or temp_filename dl_filename = dl_filename or temp_filename
info_dict['__finaldir'] = os.path.dirname(os.path.abspath(encodeFilename(full_filename))) info_dict['__finaldir'] = os.path.dirname(os.path.abspath(encodeFilename(full_filename)))
except (compat_urllib_error.URLError, compat_http_client.HTTPException, socket.error) as err: except network_exceptions as err:
self.report_error('unable to download video data: %s' % error_to_compat_str(err)) self.report_error('unable to download video data: %s' % error_to_compat_str(err))
return return
except (OSError, IOError) as err: except (OSError, IOError) as err:
@ -3070,7 +3069,7 @@ class YoutubeDL(object):
ret.append(suffix + thumb_ext) ret.append(suffix + thumb_ext)
self.to_screen('[%s] %s: Writing thumbnail %sto: %s' % self.to_screen('[%s] %s: Writing thumbnail %sto: %s' %
(info_dict['extractor'], info_dict['id'], thumb_display_id, thumb_filename)) (info_dict['extractor'], info_dict['id'], thumb_display_id, thumb_filename))
except (compat_urllib_error.URLError, compat_http_client.HTTPException, socket.error) as err: except network_exceptions as err:
self.report_warning('Unable to download thumbnail "%s": %s' % self.report_warning('Unable to download thumbnail "%s": %s' %
(t['url'], error_to_compat_str(err))) (t['url'], error_to_compat_str(err)))
if ret and not write_all: if ret and not write_all:

View File

@ -9,8 +9,6 @@ import netrc
import os import os
import random import random
import re import re
import socket
import ssl
import sys import sys
import time import time
import math import math
@ -58,6 +56,7 @@ from ..utils import (
js_to_json, js_to_json,
JSON_LD_RE, JSON_LD_RE,
mimetype2ext, mimetype2ext,
network_exceptions,
orderedSet, orderedSet,
parse_bitrate, parse_bitrate,
parse_codecs, parse_codecs,
@ -659,12 +658,9 @@ class InfoExtractor(object):
url_or_request = update_url_query(url_or_request, query) url_or_request = update_url_query(url_or_request, query)
if data is not None or headers: if data is not None or headers:
url_or_request = sanitized_Request(url_or_request, data, headers) url_or_request = sanitized_Request(url_or_request, data, headers)
exceptions = [compat_urllib_error.URLError, compat_http_client.HTTPException, socket.error]
if hasattr(ssl, 'CertificateError'):
exceptions.append(ssl.CertificateError)
try: try:
return self._downloader.urlopen(url_or_request) return self._downloader.urlopen(url_or_request)
except tuple(exceptions) as err: except network_exceptions as err:
if isinstance(err, compat_urllib_error.HTTPError): if isinstance(err, compat_urllib_error.HTTPError):
if self.__can_accept_status_code(err, expected_status): if self.__can_accept_status_code(err, expected_status):
# Retain reference to error to prevent file object from # Retain reference to error to prevent file object from

View File

@ -3,14 +3,11 @@ from __future__ import unicode_literals
import json import json
import re import re
import socket
from .common import InfoExtractor from .common import InfoExtractor
from ..compat import ( from ..compat import (
compat_etree_fromstring, compat_etree_fromstring,
compat_http_client,
compat_str, compat_str,
compat_urllib_error,
compat_urllib_parse_unquote, compat_urllib_parse_unquote,
compat_urllib_parse_unquote_plus, compat_urllib_parse_unquote_plus,
) )
@ -23,6 +20,7 @@ from ..utils import (
int_or_none, int_or_none,
js_to_json, js_to_json,
limit_length, limit_length,
network_exceptions,
parse_count, parse_count,
qualities, qualities,
sanitized_Request, sanitized_Request,
@ -370,7 +368,7 @@ class FacebookIE(InfoExtractor):
note='Confirming login') note='Confirming login')
if re.search(r'id="checkpointSubmitButton"', check_response) is not None: if re.search(r'id="checkpointSubmitButton"', check_response) is not None:
self.report_warning('Unable to confirm login, you have to login in your browser and authorize the login.') self.report_warning('Unable to confirm login, you have to login in your browser and authorize the login.')
except (compat_urllib_error.URLError, compat_http_client.HTTPException, socket.error) as err: except network_exceptions as err:
self.report_warning('unable to log in: %s' % error_to_compat_str(err)) self.report_warning('unable to log in: %s' % error_to_compat_str(err))
return return

View File

@ -2361,6 +2361,12 @@ class YoutubeDLError(Exception):
pass pass
network_exceptions = [compat_urllib_error.URLError, compat_http_client.HTTPException, socket.error]
if hasattr(ssl, 'CertificateError'):
network_exceptions.append(ssl.CertificateError)
network_exceptions = tuple(network_exceptions)
class ExtractorError(YoutubeDLError): class ExtractorError(YoutubeDLError):
"""Error during info extraction.""" """Error during info extraction."""
@ -2369,7 +2375,7 @@ class ExtractorError(YoutubeDLError):
If expected is set, this is a normal error message and most likely not a bug in yt-dlp. If expected is set, this is a normal error message and most likely not a bug in yt-dlp.
""" """
if sys.exc_info()[0] in (compat_urllib_error.URLError, socket.timeout, UnavailableVideoError): if sys.exc_info()[0] in network_exceptions:
expected = True expected = True
if video_id is not None: if video_id is not None:
msg = video_id + ': ' + msg msg = video_id + ': ' + msg