mirror of
				https://gitlab.com/ytdl-org/youtube-dl.git
				synced 2025-11-04 03:27:06 -05:00 
			
		
		
		
	Add a couple of exceptions to avoid exiting from class methods
This commit is contained in:
		
				
					committed by
					
						
						Ricardo Garcia
					
				
			
			
				
	
			
			
			
						parent
						
							38acff0e77
						
					
				
				
					commit
					e5bf0f551b
				
			
							
								
								
									
										37
									
								
								youtube-dl
									
									
									
									
									
								
							
							
						
						
									
										37
									
								
								youtube-dl
									
									
									
									
									
								
							@@ -25,6 +25,23 @@ std_headers = {
 | 
			
		||||
 | 
			
		||||
simple_title_chars = string.ascii_letters.decode('ascii') + string.digits.decode('ascii')
 | 
			
		||||
 | 
			
		||||
class DownloadError(Exception):
 | 
			
		||||
	"""Download Error exception.
 | 
			
		||||
	
 | 
			
		||||
	This exception may be thrown by FileDownloader objects if they are not
 | 
			
		||||
	configured to continue on errors. They will contain the appropriate
 | 
			
		||||
	error message.
 | 
			
		||||
	"""
 | 
			
		||||
	pass
 | 
			
		||||
 | 
			
		||||
class SameFileError(Exception):
 | 
			
		||||
	"""Same File exception.
 | 
			
		||||
 | 
			
		||||
	This exception will be thrown by FileDownloader objects if they detect
 | 
			
		||||
	multiple files would have to be downloaded to the same file on disk.
 | 
			
		||||
	"""
 | 
			
		||||
	pass
 | 
			
		||||
 | 
			
		||||
class FileDownloader(object):
 | 
			
		||||
	"""File Downloader class.
 | 
			
		||||
 | 
			
		||||
@@ -165,22 +182,22 @@ class FileDownloader(object):
 | 
			
		||||
		"""Determine action to take when a download problem appears.
 | 
			
		||||
 | 
			
		||||
		Depending on if the downloader has been configured to ignore
 | 
			
		||||
		download errors or not, this method may exit the program or
 | 
			
		||||
		download errors or not, this method may throw an exception or
 | 
			
		||||
		not when errors are found, after printing the message. If it
 | 
			
		||||
		doesn't exit, it returns an error code suitable to be returned
 | 
			
		||||
		doesn't raise, it returns an error code suitable to be returned
 | 
			
		||||
		later as a program exit code to indicate error.
 | 
			
		||||
		"""
 | 
			
		||||
		if message is not None:
 | 
			
		||||
			self.to_stderr(message)
 | 
			
		||||
		if not self._params.get('ignoreerrors', False):
 | 
			
		||||
			sys.exit(1)
 | 
			
		||||
			raise DownloadError(message)
 | 
			
		||||
		return 1
 | 
			
		||||
 | 
			
		||||
	def download(self, url_list):
 | 
			
		||||
		"""Download a given list of URLs."""
 | 
			
		||||
		retcode = 0
 | 
			
		||||
		if len(url_list) > 1 and self.fixed_template():
 | 
			
		||||
			sys.exit('ERROR: fixed output name but more than one file to download')
 | 
			
		||||
			raise SameFileError(self._params['outtmpl'])
 | 
			
		||||
 | 
			
		||||
		for url in url_list:
 | 
			
		||||
			suitable_found = False
 | 
			
		||||
@@ -195,7 +212,7 @@ class FileDownloader(object):
 | 
			
		||||
					retcode = self.trouble()
 | 
			
		||||
 | 
			
		||||
				if len(results) > 1 and self.fixed_template():
 | 
			
		||||
					sys.exit('ERROR: fixed output name but more than one file to download')
 | 
			
		||||
					raise SameFileError(self._params['outtmpl'])
 | 
			
		||||
 | 
			
		||||
				for result in results:
 | 
			
		||||
 | 
			
		||||
@@ -401,7 +418,8 @@ class YoutubeIE(InfoExtractor):
 | 
			
		||||
			self.to_stdout('[youtube] Confirming age')
 | 
			
		||||
			age_results = urllib2.urlopen(request).read()
 | 
			
		||||
		except (urllib2.URLError, httplib.HTTPException, socket.error), err:
 | 
			
		||||
			sys.exit('ERROR: unable to confirm age: %s' % str(err))
 | 
			
		||||
			self.to_stderr('ERROR: unable to confirm age: %s' % str(err))
 | 
			
		||||
			return
 | 
			
		||||
 | 
			
		||||
	def _real_extract(self, url):
 | 
			
		||||
		# Extract video id from URL
 | 
			
		||||
@@ -429,7 +447,8 @@ class YoutubeIE(InfoExtractor):
 | 
			
		||||
			self.to_stdout('[youtube] %s: Downloading video webpage' % video_id)
 | 
			
		||||
			video_webpage = urllib2.urlopen(request).read()
 | 
			
		||||
		except (urllib2.URLError, httplib.HTTPException, socket.error), err:
 | 
			
		||||
			sys.exit('ERROR: unable to download video: %s' % str(err))
 | 
			
		||||
			self.to_stderr('ERROR: unable to download video webpage: %s' % str(err))
 | 
			
		||||
			return [None]
 | 
			
		||||
		self.to_stdout('[youtube] %s: Extracting video information' % video_id)
 | 
			
		||||
		
 | 
			
		||||
		# "t" param
 | 
			
		||||
@@ -558,5 +577,9 @@ if __name__ == '__main__':
 | 
			
		||||
		retcode = fd.download(args)
 | 
			
		||||
		sys.exit(retcode)
 | 
			
		||||
 | 
			
		||||
	except DownloadError:
 | 
			
		||||
		sys.exit(1)
 | 
			
		||||
	except SameFileError:
 | 
			
		||||
		sys.exit('ERROR: fixed output name but more than one file to download')
 | 
			
		||||
	except KeyboardInterrupt:
 | 
			
		||||
		sys.exit('\nERROR: Interrupted by user')
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user