URLGrabError(256) now includes attributes:

.url = relative url
.errors = list of mirrors' exceptions.

Note: This info was already passed to MG's failure_callback,
but processing that there would likely be hairy in yum.
---
 urlgrabber/mirror.py |   25 +++++++++++++++++++++++--
 1 files changed, 23 insertions(+), 2 deletions(-)

diff --git a/urlgrabber/mirror.py b/urlgrabber/mirror.py
index 8731aed..44a8f00 100644
--- a/urlgrabber/mirror.py
+++ b/urlgrabber/mirror.py
@@ -281,7 +281,10 @@ class MirrorGroup:
         #   return a random mirror so that multiple mirrors get used
         #   even without failures.
         if not gr.mirrors:
-            raise URLGrabError(256, _('No more mirrors to try.'))
+            e = URLGrabError(256, _('No more mirrors to try.'))
+            e.errors = gr.errors
+            e.url = gr.url
+            raise e
         return gr.mirrors[gr._next]
 
     def _failure(self, gr, cb_obj):
@@ -377,6 +380,7 @@ class MirrorGroup:
         gr.func = func
         gr.url  = url
         gr.kw   = dict(kw)
+        gr.errors = []
         self._load_gr(gr)
 
         for k in self.options:
@@ -401,6 +405,8 @@ class MirrorGroup:
                 obj.relative_url = gr.url
                 obj.url = fullurl
                 self._failure(gr, obj)
+                e.url = fullurl
+                gr.errors.append(e)
 
     def urlgrab(self, url, filename=None, **kwargs):
         kw = dict(kwargs)
@@ -453,4 +459,19 @@ class MGRandomOrder(MirrorGroup):
         random.shuffle(self.mirrors)
 
 if __name__ == '__main__':
-    pass
+  if 0:
+    from urlgrabber import grabber, mirror
+    ug = grabber.URLGrabber()
+    urls = ['http://invalid-host-%s.com' % h for h in 'AB']
+    mg = mirror.MirrorGroup(ug, urls)
+    try:
+        mg.urlread('a.rpm')
+    except grabber.URLGrabError, e:
+        assert e.errno == 256
+        print 'relative url', e.url
+        for m in e.errors:
+            print '\nfull url', m.url
+            print 'http code', m.code
+            print 'pycurl exception', m.exception
+            print 'UG errno', m.errno
+            print 'UG strerror', m.strerror
-- 
1.7.4.4

_______________________________________________
Yum-devel mailing list
[email protected]
http://lists.baseurl.org/mailman/listinfo/yum-devel

Reply via email to