Skip to content

Commit

Permalink
Introduced Trouble(Exception) for more elegant non-fatal errors handling
Browse files Browse the repository at this point in the history
  • Loading branch information
FiloSottile authored and Filippo Valsorda committed May 9, 2012
1 parent 3fe294e commit 0b8c922
Show file tree
Hide file tree
Showing 2 changed files with 30 additions and 24 deletions.
47 changes: 23 additions & 24 deletions youtube_dl/InfoExtractors.py
Expand Up @@ -359,33 +359,32 @@ def _real_extract(self, url):
# 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])
Expand Down
7 changes: 7 additions & 0 deletions youtube_dl/utils.py
Expand Up @@ -290,6 +290,13 @@ def __init__(self, downloaded, expected):
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.
Expand Down

0 comments on commit 0b8c922

Please sign in to comment.