[downloader/external] Fix download finalization when writing file to stdout (closes #10809)
An OSError or IOError generally indicates something a little more wrong than a "simple" UnavailableVideoError, so print the actual traceback that leads to the exception. Otherwise meaningful postmortem debugging a bug report is essentially infeasible.
This commit is contained in:
		
							parent
							
								
									0ff2c1ecb6
								
							
						
					
					
						commit
						80aa246094
					
				
					 2 changed files with 21 additions and 13 deletions
				
			
		| 
						 | 
					@ -249,12 +249,14 @@ class FileDownloader(object):
 | 
				
			||||||
            if self.params.get('noprogress', False):
 | 
					            if self.params.get('noprogress', False):
 | 
				
			||||||
                self.to_screen('[download] Download completed')
 | 
					                self.to_screen('[download] Download completed')
 | 
				
			||||||
            else:
 | 
					            else:
 | 
				
			||||||
                s['_total_bytes_str'] = format_bytes(s['total_bytes'])
 | 
					                if s.get('total_bytes') is not None:
 | 
				
			||||||
 | 
					                    s['_total_bytes_str'] = format_bytes(s['total_bytes'])
 | 
				
			||||||
 | 
					                    msg_template = '100%% of %(_total_bytes_str)s'
 | 
				
			||||||
 | 
					                else:
 | 
				
			||||||
 | 
					                    msg_template = 'Completed'
 | 
				
			||||||
                if s.get('elapsed') is not None:
 | 
					                if s.get('elapsed') is not None:
 | 
				
			||||||
                    s['_elapsed_str'] = self.format_seconds(s['elapsed'])
 | 
					                    s['_elapsed_str'] = self.format_seconds(s['elapsed'])
 | 
				
			||||||
                    msg_template = '100%% of %(_total_bytes_str)s in %(_elapsed_str)s'
 | 
					                    msg_template += ' in %(_elapsed_str)s'
 | 
				
			||||||
                else:
 | 
					 | 
				
			||||||
                    msg_template = '100%% of %(_total_bytes_str)s'
 | 
					 | 
				
			||||||
                self._report_progress_status(
 | 
					                self._report_progress_status(
 | 
				
			||||||
                    msg_template % s, is_last_line=True)
 | 
					                    msg_template % s, is_last_line=True)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -41,15 +41,21 @@ class ExternalFD(FileDownloader):
 | 
				
			||||||
            self.to_screen('[%s] Interrupted by user' % self.get_basename())
 | 
					            self.to_screen('[%s] Interrupted by user' % self.get_basename())
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        if retval == 0:
 | 
					        if retval == 0:
 | 
				
			||||||
            fsize = os.path.getsize(encodeFilename(tmpfilename))
 | 
					            if filename == '-':
 | 
				
			||||||
            self.to_screen('\r[%s] Downloaded %s bytes' % (self.get_basename(), fsize))
 | 
					                self._hook_progress({
 | 
				
			||||||
            self.try_rename(tmpfilename, filename)
 | 
					                    'filename': filename,
 | 
				
			||||||
            self._hook_progress({
 | 
					                    'status': 'finished',
 | 
				
			||||||
                'downloaded_bytes': fsize,
 | 
					                })
 | 
				
			||||||
                'total_bytes': fsize,
 | 
					            else:
 | 
				
			||||||
                'filename': filename,
 | 
					                fsize = os.path.getsize(encodeFilename(tmpfilename))
 | 
				
			||||||
                'status': 'finished',
 | 
					                self.to_screen('\r[%s] Downloaded %s bytes' % (self.get_basename(), fsize))
 | 
				
			||||||
            })
 | 
					                self.try_rename(tmpfilename, filename)
 | 
				
			||||||
 | 
					                self._hook_progress({
 | 
				
			||||||
 | 
					                    'downloaded_bytes': fsize,
 | 
				
			||||||
 | 
					                    'total_bytes': fsize,
 | 
				
			||||||
 | 
					                    'filename': filename,
 | 
				
			||||||
 | 
					                    'status': 'finished',
 | 
				
			||||||
 | 
					                })
 | 
				
			||||||
            return True
 | 
					            return True
 | 
				
			||||||
        else:
 | 
					        else:
 | 
				
			||||||
            self.to_stderr('\n')
 | 
					            self.to_stderr('\n')
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue