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