summaryrefslogtreecommitdiff
path: root/urlgrabber
diff options
context:
space:
mode:
authorZdenek Pavlas <zpavlas@redhat.com>2013-01-16 13:38:05 +0100
committerZdenek Pavlas <zpavlas@redhat.com>2013-01-17 10:15:56 +0100
commitd53f2d6ac2b86c09e92fea5977501f6473b35781 (patch)
treee66aed082c5ae1842618d63b77ea18889d63af43 /urlgrabber
parent1f65e5f210e8452b2f462dafb5bc1082a99ae332 (diff)
downloadurlgrabber-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.py34
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]