Properly convert errors to strings
authorSergey M․ <dstftw@gmail.com>
Sat, 19 Dec 2015 23:27:38 +0000 (05:27 +0600)
committerSergey M․ <dstftw@gmail.com>
Sat, 19 Dec 2015 23:27:38 +0000 (05:27 +0600)
youtube_dl/YoutubeDL.py
youtube_dl/downloader/common.py
youtube_dl/extractor/common.py
youtube_dl/extractor/dailymotion.py
youtube_dl/extractor/facebook.py
youtube_dl/extractor/youtube.py

index c642a1fbfff6c910fb8ae3f9789209935d0559a2..26b3adb025432bfc39f1ba35a0723006e04d0d02 100755 (executable)
@@ -48,6 +48,7 @@ from .utils import (
     determine_ext,
     DownloadError,
     encodeFilename,
+    error_to_str,
     ExtractorError,
     format_bytes,
     formatSeconds,
@@ -681,7 +682,7 @@ class YoutubeDL(object):
                 raise
             except Exception as e:
                 if self.params.get('ignoreerrors', False):
-                    self.report_error(compat_str(e), tb=compat_str(traceback.format_exc()))
+                    self.report_error(error_to_str(e), tb=compat_str(traceback.format_exc()))
                     break
                 else:
                     raise
@@ -1459,7 +1460,7 @@ class YoutubeDL(object):
             if dn and not os.path.exists(dn):
                 os.makedirs(dn)
         except (OSError, IOError) as err:
-            self.report_error('unable to create directory ' + compat_str(err))
+            self.report_error('unable to create directory ' + error_to_str(err))
             return
 
         if self.params.get('writedescription', False):
@@ -2039,4 +2040,4 @@ class YoutubeDL(object):
                                    (info_dict['extractor'], info_dict['id'], thumb_display_id, thumb_filename))
                 except (compat_urllib_error.URLError, compat_http_client.HTTPException, socket.error) as err:
                     self.report_warning('Unable to download thumbnail "%s": %s' %
-                                        (t['url'], compat_str(err)))
+                                        (t['url'], error_to_str(err)))
index b8bf8daf8c3265f9baa53d3ac30ee78d1c149587..eb63ccffd9428f1a87fadcfc51094591b4083346 100644 (file)
@@ -5,9 +5,9 @@ import re
 import sys
 import time
 
-from ..compat import compat_str
 from ..utils import (
     encodeFilename,
+    error_to_str,
     decodeArgument,
     format_bytes,
     timeconvert,
@@ -186,7 +186,7 @@ class FileDownloader(object):
                 return
             os.rename(encodeFilename(old_filename), encodeFilename(new_filename))
         except (IOError, OSError) as err:
-            self.report_error('unable to rename file: %s' % compat_str(err))
+            self.report_error('unable to rename file: %s' % error_to_str(err))
 
     def try_utime(self, filename, last_modified_hdr):
         """Try to set the last-modified time of the given file."""
index 3ab72ff765bddd1d0b7f663106845a56c7572b15..5659e40c850aaf5f3eeedf0a03191c4b0532e798 100644 (file)
@@ -30,11 +30,11 @@ from ..utils import (
     clean_html,
     compiled_regex_type,
     determine_ext,
+    error_to_str,
     ExtractorError,
     fix_xml_ampersands,
     float_or_none,
     int_or_none,
-    preferredencoding,
     RegexNotFoundError,
     sanitize_filename,
     sanitized_Request,
@@ -333,12 +333,8 @@ class InfoExtractor(object):
                 return False
             if errnote is None:
                 errnote = 'Unable to download webpage'
-            err_str = str(err)
-            # On python 2 error byte string must be decoded with proper
-            # encoding rather than ascii
-            if sys.version_info[0] < 3:
-                err_str = err_str.decode(preferredencoding())
-            errmsg = '%s: %s' % (errnote, err_str)
+
+            errmsg = '%s: %s' % (errnote, error_to_str(err))
             if fatal:
                 raise ExtractorError(errmsg, sys.exc_info()[2], cause=err)
             else:
@@ -628,7 +624,7 @@ class InfoExtractor(object):
                 else:
                     raise netrc.NetrcParseError('No authenticators for %s' % self._NETRC_MACHINE)
             except (IOError, netrc.NetrcParseError) as err:
-                self._downloader.report_warning('parsing .netrc: %s' % compat_str(err))
+                self._downloader.report_warning('parsing .netrc: %s' % error_to_str(err))
 
         return (username, password)
 
index 428556213239651a6994cedf22c78d62d81e0434..7d66baf96f9bc309df18d02b4938b3ac708822ae 100644 (file)
@@ -7,10 +7,10 @@ import itertools
 
 from .common import InfoExtractor
 
-from ..compat import compat_str
 from ..utils import (
-    ExtractorError,
     determine_ext,
+    error_to_str,
+    ExtractorError,
     int_or_none,
     parse_iso8601,
     sanitized_Request,
@@ -278,7 +278,7 @@ class DailymotionIE(DailymotionBaseInfoExtractor):
                 'https://api.dailymotion.com/video/%s/subtitles?fields=id,language,url' % video_id,
                 video_id, note=False)
         except ExtractorError as err:
-            self._downloader.report_warning('unable to download video subtitles: %s' % compat_str(err))
+            self._downloader.report_warning('unable to download video subtitles: %s' % error_to_str(err))
             return {}
         info = json.loads(sub_list)
         if (info['total'] > 0):
index 321eec59ef672eb6f88bf07f78466ba83456afbc..296d3dd77d4f05391e16655be9deba98bff6cdda 100644 (file)
@@ -7,11 +7,11 @@ import socket
 from .common import InfoExtractor
 from ..compat import (
     compat_http_client,
-    compat_str,
     compat_urllib_error,
     compat_urllib_parse_unquote,
 )
 from ..utils import (
+    error_to_str,
     ExtractorError,
     limit_length,
     sanitized_Request,
@@ -116,7 +116,7 @@ class FacebookIE(InfoExtractor):
             if re.search(r'id="checkpointSubmitButton"', check_response) is not None:
                 self._downloader.report_warning('Unable to confirm login, you have to login in your brower and authorize the login.')
         except (compat_urllib_error.URLError, compat_http_client.HTTPException, socket.error) as err:
-            self._downloader.report_warning('unable to log in: %s' % compat_str(err))
+            self._downloader.report_warning('unable to log in: %s' % error_to_str(err))
             return
 
     def _real_initialize(self):
index 4556a16fb0d3d7a338e0b876f7094f561cfdf1b7..d63aa5f4e6e2eb78c100723f00d21f5648f1ca1e 100644 (file)
@@ -26,6 +26,7 @@ from ..compat import (
 from ..utils import (
     clean_html,
     encode_dict,
+    error_to_str,
     ExtractorError,
     float_or_none,
     get_element_by_attribute,
@@ -903,7 +904,7 @@ class YoutubeIE(YoutubeBaseInfoExtractor):
                 'https://video.google.com/timedtext?hl=en&type=list&v=%s' % video_id,
                 video_id, note=False)
         except ExtractorError as err:
-            self._downloader.report_warning('unable to download video subtitles: %s' % compat_str(err))
+            self._downloader.report_warning('unable to download video subtitles: %s' % error_to_str(err))
             return {}
 
         sub_lang_list = {}