[yum-commits] 2 commits - scripts/urlgrabber-ext-down test/test_mirror.py urlgrabber/grabber.py
zpavlas at osuosl.org
zpavlas at osuosl.org
Tue Apr 16 14:13:30 UTC 2013
scripts/urlgrabber-ext-down | 2 +-
test/test_mirror.py | 32 ++++++++++++++++++++++++++++++++
urlgrabber/grabber.py | 6 ++++--
3 files changed, 37 insertions(+), 3 deletions(-)
New commits:
commit 701a4b09c405c274ea7cb2edb1958241162b2117
Author: Zdenek Pavlas <zpavlas at redhat.com>
Date: Tue Apr 16 14:17:37 2013 +0200
add URLGrabError.code to the external downloader API
diff --git a/scripts/urlgrabber-ext-down b/scripts/urlgrabber-ext-down
index 3dafb12..9ea0e70 100755
--- a/scripts/urlgrabber-ext-down
+++ b/scripts/urlgrabber-ext-down
@@ -68,7 +68,7 @@ def main():
ug_err = 'OK'
except URLGrabError, e:
size = 0
- ug_err = '%d %s' % e.args
+ ug_err = '%d %d %s' % (e.errno, getattr(e, 'code', 0), e.strerror)
write('%d %d %d %.3f %s\n', opts._id, size, dlsz, dltm, ug_err)
if __name__ == '__main__':
diff --git a/urlgrabber/grabber.py b/urlgrabber/grabber.py
index 9526dc1..da15319 100644
--- a/urlgrabber/grabber.py
+++ b/urlgrabber/grabber.py
@@ -2052,7 +2052,7 @@ class _ExternalDownloader:
raise KeyboardInterrupt
for line in lines:
# parse downloader output
- line = line.split(' ', 5)
+ line = line.split(' ', 6)
_id, size = map(int, line[:2])
if len(line) == 2:
self.running[_id]._progress.update(size)
@@ -2063,7 +2063,9 @@ class _ExternalDownloader:
ug_err = None
if DEBUG: DEBUG.info('success')
else:
- ug_err = URLGrabError(int(line[4]), line[5])
+ ug_err = URLGrabError(int(line[4]), line[6])
+ if line[5] != '0':
+ ug_err.code = int(line[5])
if DEBUG: DEBUG.info('failure: %s', ug_err)
_TH.update(opts.url, int(line[2]), float(line[3]), ug_err, opts.async[0])
ret.append((opts, size, ug_err))
commit fe639831896aa1b561231a0f6e7bb3ed753eda3e
Author: Zdenek Pavlas <zpavlas at redhat.com>
Date: Tue Apr 16 14:03:53 2013 +0200
test added: URLGrabError should include the HTTP error code.
diff --git a/test/test_mirror.py b/test/test_mirror.py
index cb63a41..6fdb668 100644
--- a/test/test_mirror.py
+++ b/test/test_mirror.py
@@ -269,6 +269,38 @@ class ActionTests(TestCase):
self.assertEquals(urlgrabber.mirror.DEBUG.logs, expected_logs)
+class HttpReplyCode(TestCase):
+ def setUp(self):
+ def server():
+ import socket
+ s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
+ s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
+ s.bind(('localhost', 2000)); s.listen(1)
+ while 1:
+ c, a = s.accept()
+ while not c.recv(4096).endswith('\r\n\r\n'): pass
+ c.sendall('HTTP/1.1 %d %s\r\n' % self.reply)
+ c.close()
+ import thread
+ self.reply = 503, "Busy"
+ thread.start_new_thread(server, ())
+
+ def failure(obj):
+ self.code = getattr(obj.exception, 'code', None)
+ return {}
+ self.g = URLGrabber()
+ self.mg = MirrorGroup(self.g, ['http://localhost:2000/'], failure_callback = failure)
+
+ def test_grab(self):
+ self.assertRaises(URLGrabError, self.mg.urlgrab, 'foo')
+ self.assertEquals(self.code, 503); del self.code
+
+ err = []
+ self.mg.urlgrab('foo', async = True, failfunc = err.append)
+ urlgrabber.grabber.parallel_wait()
+ self.assertEquals([e.exception.errno for e in err], [256])
+ self.assertEquals(self.code, 503); del self.code
+
def suite():
tl = TestLoader()
return tl.loadTestsFromModule(sys.modules[__name__])
More information about the Yum-commits
mailing list