mirror of
				https://gitlab.com/ytdl-org/youtube-dl.git
				synced 2025-11-04 00:27:07 -05:00 
			
		
		
		
	Bubble up all the stack of exceptions and retry download tests on timeout errors
This commit is contained in:
		@@ -20,6 +20,8 @@ from youtube_dl.utils import *
 | 
			
		||||
DEF_FILE = os.path.join(os.path.dirname(os.path.abspath(__file__)), 'tests.json')
 | 
			
		||||
PARAMETERS_FILE = os.path.join(os.path.dirname(os.path.abspath(__file__)), "parameters.json")
 | 
			
		||||
 | 
			
		||||
RETRIES = 3
 | 
			
		||||
 | 
			
		||||
# General configuration (from __init__, not very elegant...)
 | 
			
		||||
jar = compat_cookiejar.CookieJar()
 | 
			
		||||
cookie_processor = compat_urllib_request.HTTPCookieProcessor(jar)
 | 
			
		||||
@@ -94,7 +96,19 @@ def generator(test_case):
 | 
			
		||||
            _try_rm(tc['file'] + '.part')
 | 
			
		||||
            _try_rm(tc['file'] + '.info.json')
 | 
			
		||||
        try:
 | 
			
		||||
            fd.download([test_case['url']])
 | 
			
		||||
            for retry in range(1, RETRIES + 1):
 | 
			
		||||
                try:
 | 
			
		||||
                    fd.download([test_case['url']])
 | 
			
		||||
                except (DownloadError, ExtractorError) as err:
 | 
			
		||||
                    if retry == RETRIES: raise
 | 
			
		||||
 | 
			
		||||
                    # Check if the exception is not a network related one
 | 
			
		||||
                    if not err.exc_info[0] in (ZeroDivisionError, compat_urllib_error.URLError, socket.timeout):
 | 
			
		||||
                        raise
 | 
			
		||||
 | 
			
		||||
                    print('Retrying: {0} failed tries\n\n##########\n\n'.format(retry))
 | 
			
		||||
                else:
 | 
			
		||||
                    break
 | 
			
		||||
 | 
			
		||||
            for tc in test_cases:
 | 
			
		||||
                if not test_case.get('params', {}).get('skip_download', False):
 | 
			
		||||
 
 | 
			
		||||
@@ -227,11 +227,21 @@ class FileDownloader(object):
 | 
			
		||||
            self.to_stderr(message)
 | 
			
		||||
        if self.params.get('verbose'):
 | 
			
		||||
            if tb is None:
 | 
			
		||||
                tb_data = traceback.format_list(traceback.extract_stack())
 | 
			
		||||
                tb = u''.join(tb_data)
 | 
			
		||||
                if sys.exc_info()[0]:  # if .trouble has been called from an except block
 | 
			
		||||
                    tb = u''
 | 
			
		||||
                    if hasattr(sys.exc_info()[1], 'exc_info') and sys.exc_info()[1].exc_info[0]:
 | 
			
		||||
                        tb += u''.join(traceback.format_exception(*sys.exc_info()[1].exc_info))
 | 
			
		||||
                    tb += compat_str(traceback.format_exc())
 | 
			
		||||
                else:
 | 
			
		||||
                    tb_data = traceback.format_list(traceback.extract_stack())
 | 
			
		||||
                    tb = u''.join(tb_data)
 | 
			
		||||
            self.to_stderr(tb)
 | 
			
		||||
        if not self.params.get('ignoreerrors', False):
 | 
			
		||||
            raise DownloadError(message)
 | 
			
		||||
            if sys.exc_info()[0] and hasattr(sys.exc_info()[1], 'exc_info') and sys.exc_info()[1].exc_info[0]:
 | 
			
		||||
                exc_info = sys.exc_info()[1].exc_info
 | 
			
		||||
            else:
 | 
			
		||||
                exc_info = sys.exc_info()
 | 
			
		||||
            raise DownloadError(message, exc_info)
 | 
			
		||||
        self._download_retcode = 1
 | 
			
		||||
 | 
			
		||||
    def report_warning(self, message):
 | 
			
		||||
 
 | 
			
		||||
@@ -435,6 +435,7 @@ class ExtractorError(Exception):
 | 
			
		||||
        """ tb, if given, is the original traceback (so that it can be printed out). """
 | 
			
		||||
        super(ExtractorError, self).__init__(msg)
 | 
			
		||||
        self.traceback = tb
 | 
			
		||||
        self.exc_info = sys.exc_info()  # preserve original exception
 | 
			
		||||
 | 
			
		||||
    def format_traceback(self):
 | 
			
		||||
        if self.traceback is None:
 | 
			
		||||
@@ -449,7 +450,10 @@ class DownloadError(Exception):
 | 
			
		||||
    configured to continue on errors. They will contain the appropriate
 | 
			
		||||
    error message.
 | 
			
		||||
    """
 | 
			
		||||
    pass
 | 
			
		||||
    def __init__(self, msg, exc_info=None):
 | 
			
		||||
        """ exc_info, if given, is the original exception that caused the trouble (as returned by sys.exc_info()). """
 | 
			
		||||
        super(DownloadError, self).__init__(msg)
 | 
			
		||||
        self.exc_info = exc_info
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class SameFileError(Exception):
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user