diff options
| author | Filippo Valsorda <filippo.valsorda@gmail.com> | 2012-05-09 09:41:34 +0000 | 
|---|---|---|
| committer | Filippo Valsorda <filosottile@ip-10-58-141-254.eu-west-1.compute.internal> | 2012-05-09 09:43:11 +0000 | 
| commit | 0b8c922da91fb7238ea15434d6a4792da84015bf (patch) | |
| tree | 92e39c5f122739b8ffa5d89acedd12432251d916 | |
| parent | 3fe294e4ef96317c61398707ed65a9e3f1c281c4 (diff) | |
Introduced Trouble(Exception) for more elegant non-fatal errors handling
| -rw-r--r-- | youtube_dl/InfoExtractors.py | 47 | ||||
| -rw-r--r-- | youtube_dl/utils.py | 7 | 
2 files changed, 30 insertions, 24 deletions
| diff --git a/youtube_dl/InfoExtractors.py b/youtube_dl/InfoExtractors.py index 01201a145..be6b0cb08 100644 --- a/youtube_dl/InfoExtractors.py +++ b/youtube_dl/InfoExtractors.py @@ -359,33 +359,32 @@ class YoutubeIE(InfoExtractor):  		# closed captions  		video_subtitles = None  		if self._downloader.params.get('writesubtitles', False): -			self.report_video_subtitles_download(video_id) -			request = urllib2.Request('http://video.google.com/timedtext?hl=en&type=list&v=%s' % video_id)  			try: -				srt_list = urllib2.urlopen(request).read() -			except (urllib2.URLError, httplib.HTTPException, socket.error), err: -				self._downloader.trouble(u'WARNING: unable to download video subtitles: %s' % str(err)) -			else: +				self.report_video_subtitles_download(video_id) +				request = urllib2.Request('http://video.google.com/timedtext?hl=en&type=list&v=%s' % video_id) +				try: +					srt_list = urllib2.urlopen(request).read() +				except (urllib2.URLError, httplib.HTTPException, socket.error), err: +					raise Trouble(u'WARNING: unable to download video subtitles: %s' % str(err))  				srt_lang_list = re.findall(r'lang_code="([\w\-]+)"', srt_list) -				if srt_lang_list: -					if self._downloader.params.get('subtitleslang', False): -						srt_lang = self._downloader.params.get('subtitleslang') -					elif 'en' in srt_lang_list: -						srt_lang = 'en' -					else: -						srt_lang = srt_lang_list[0] -					if not srt_lang in srt_lang_list: -						self._downloader.trouble(u'WARNING: no closed captions found in the specified language') -					else: -						request = urllib2.Request('http://video.google.com/timedtext?hl=en&lang=%s&v=%s' % (srt_lang, video_id)) -						try: -							srt_xml = urllib2.urlopen(request).read() -						except (urllib2.URLError, httplib.HTTPException, socket.error), err: -							self._downloader.trouble(u'WARNING: unable to download video subtitles: %s' % str(err)) -						else: -							video_subtitles = self._closed_captions_xml_to_srt(srt_xml.decode('utf-8')) +				if not srt_lang_list: +					raise Trouble(u'WARNING: video has no closed captions') +				if self._downloader.params.get('subtitleslang', False): +					srt_lang = self._downloader.params.get('subtitleslang') +				elif 'en' in srt_lang_list: +					srt_lang = 'en'  				else: -					self._downloader.trouble(u'WARNING: video has no closed captions') +					srt_lang = srt_lang_list[0] +				if not srt_lang in srt_lang_list: +					raise Trouble(u'WARNING: no closed captions found in the specified language') +				request = urllib2.Request('http://video.google.com/timedtext?hl=en&lang=%s&v=%s' % (srt_lang, video_id)) +				try: +					srt_xml = urllib2.urlopen(request).read() +				except (urllib2.URLError, httplib.HTTPException, socket.error), err: +					raise Trouble(u'WARNING: unable to download video subtitles: %s' % str(err)) +				video_subtitles = self._closed_captions_xml_to_srt(srt_xml.decode('utf-8')) +			except Trouble as trouble: +				self._downloader.trouble(trouble[0])  		# token  		video_token = urllib.unquote_plus(video_info['token'][0]) diff --git a/youtube_dl/utils.py b/youtube_dl/utils.py index 6e982157c..d18073d72 100644 --- a/youtube_dl/utils.py +++ b/youtube_dl/utils.py @@ -290,6 +290,13 @@ class ContentTooShortError(Exception):  		self.expected = expected +class Trouble(Exception): +	"""Trouble helper exception +	 +	This is an exception to be handled with +	FileDownloader.trouble +	""" +  class YoutubeDLHandler(urllib2.HTTPHandler):  	"""Handler for HTTP requests and responses. | 
