Add a couple of exceptions to avoid exiting from class methods
This commit is contained in:
		
							parent
							
								
									38acff0e77
								
							
						
					
					
						commit
						e5bf0f551b
					
				
					 1 changed files with 30 additions and 7 deletions
				
			
		
							
								
								
									
										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')
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue