mirror of
				https://github.com/yt-dlp/yt-dlp.git
				synced 2025-10-31 06:35:12 +00:00 
			
		
		
		
	Merge pull request #736 from rg3/retry
Exception stacking and test retry
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) | ||||
| @@ -93,8 +95,20 @@ def generator(test_case): | ||||
|             _try_rm(tc['file']) | ||||
|             _try_rm(tc['file'] + '.part') | ||||
|             _try_rm(tc['file'] + '.info.json') | ||||
|         try: | ||||
|             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): | ||||
|   | ||||
| @@ -231,11 +231,21 @@ class FileDownloader(object): | ||||
|             self.to_stderr(message) | ||||
|         if self.params.get('verbose'): | ||||
|             if tb is None: | ||||
|                 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
	 Filippo Valsorda
					Filippo Valsorda