diff options
author | Zdenek Pavlas <zpavlas@redhat.com> | 2013-01-16 13:38:05 +0100 |
---|---|---|
committer | Zdenek Pavlas <zpavlas@redhat.com> | 2013-01-17 10:15:56 +0100 |
commit | d53f2d6ac2b86c09e92fea5977501f6473b35781 (patch) | |
tree | e66aed082c5ae1842618d63b77ea18889d63af43 /urlgrabber | |
parent | 1f65e5f210e8452b2f462dafb5bc1082a99ae332 (diff) | |
download | urlgrabber-d53f2d6ac2b86c09e92fea5977501f6473b35781.tar.gz |
Improve error messages. BZ 832491
Curl does not always provide text descriptions in its error messages.
urlgrabber translates HTTP response codes to text, but not FTP codes.
Add text description of the curl error code as a fallback.
URLGrabError(14, 'FTP Error 530') becomes
URLGrabError(14, 'FTP Error 530 - Authentication failure') or
URLGrabError(14, 'FTP Error 530 - Access denied: 530') when curl is fixed.
Also make server-side exceptions more consistent with other exceptions,
remove failed URL from the message and put it into an .url attribute.
Diffstat (limited to 'urlgrabber')
-rw-r--r-- | urlgrabber/grabber.py | 34 |
1 files changed, 14 insertions, 20 deletions
diff --git a/urlgrabber/grabber.py b/urlgrabber/grabber.py index 80b7e0d..5bffb03 100644 --- a/urlgrabber/grabber.py +++ b/urlgrabber/grabber.py @@ -1514,17 +1514,6 @@ class PyCurlFileObject(object): err.url = errurl raise err - elif str(e.args[1]) == '' and code and not 200 <= code <= 299: - if self.scheme in ['http', 'https']: - if self.http_code in responses: - resp = responses[self.http_code] - msg = 'HTTP Error %s - %s : %s' % (self.http_code, resp, errurl) - else: - msg = 'HTTP Error %s : %s ' % (self.http_code, errurl) - elif self.scheme in ['ftp']: - msg = 'FTP Error %s : %s ' % (self.http_code, errurl) - else: - msg = "Unknown Error: URL=%s , scheme=%s" % (errurl, self.scheme) else: pyerr2str = { 5 : _("Couldn't resolve proxy"), 6 : _("Couldn't resolve host"), @@ -1569,15 +1558,20 @@ class PyCurlFileObject(object): 70 : _("Out of disk space on server"), 73 : _("Remove file exists"), } - errstr = str(e.args[1]) - if not errstr: - errstr = pyerr2str.get(errcode, '<Unknown>') - msg = 'curl#%s - "%s"' % (errcode, errstr) - code = errcode - err = URLGrabError(14, msg) - err.code = code - err.exception = e - raise err + errstr = str(e.args[1]) or pyerr2str.get(errcode, '<Unknown>') + if code and not 200 <= code <= 299: + msg = '%s Error %d - %s' % (self.scheme.upper(), code, + self.scheme in ('http', 'https') + and responses.get(code) or errstr) + else: + msg = 'curl#%s - "%s"' % (errcode, errstr) + code = errcode + + err = URLGrabError(14, msg) + err.url = errurl + err.code = code + raise err + else: if self._error[1]: msg = self._error[1] |