From 08700f4a317541ab16b8b8c7cf9703a317a626f8 Mon Sep 17 00:00:00 2001 From: Romain Bignon Date: Thu, 15 Jul 2010 23:46:39 +0200 Subject: [PATCH] new exception BrowserHTTPError, retry only when this one is raised For example, on aum, the exception AdopteWait is derived from BrowserUnavailable, which is normal. But when AdopteWait is raised, we don't care about retry. So only HTTP errors attempt to retry. --- weboob/tools/browser/browser.py | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/weboob/tools/browser/browser.py b/weboob/tools/browser/browser.py index f212faec..5a3773a5 100644 --- a/weboob/tools/browser/browser.py +++ b/weboob/tools/browser/browser.py @@ -43,7 +43,7 @@ else: __all__ = ['BrowserIncorrectPassword', 'BrowserBanned', 'BrowserUnavailable', 'BrowserRetry', - 'BasePage', 'BaseBrowser'] + 'BrowserHTTPError', 'BasePage', 'BaseBrowser'] # Exceptions @@ -58,6 +58,9 @@ class BrowserBanned(BrowserIncorrectPassword): class BrowserUnavailable(Exception): pass +class BrowserHTTPError(BrowserUnavailable): + pass + class BrowserRetry(Exception): pass @@ -226,7 +229,7 @@ class BaseBrowser(mechanize.Browser): return inner @check_location - @retry(BrowserUnavailable, tries=3) + @retry(BrowserHTTPError, tries=3) def openurl(self, *args, **kwargs): """ Open an URL but do not create a Page object. @@ -235,7 +238,7 @@ class BaseBrowser(mechanize.Browser): try: return mechanize.Browser.open_novisit(self, *args, **kwargs) except (mechanize.response_seek_wrapper, urllib2.HTTPError, urllib2.URLError), e: - raise BrowserUnavailable('%s (url="%s")' % (e, args and args[0] or 'None')) + raise BrowserHTTPError('%s (url="%s")' % (e, args and args[0] or 'None')) except (mechanize.BrowserStateError, BrowserRetry): self.home() return mechanize.Browser.open(self, *args, **kwargs) @@ -248,7 +251,7 @@ class BaseBrowser(mechanize.Browser): self._change_location(mechanize.Browser.submit(self, *args, **kwargs)) except (mechanize.response_seek_wrapper, urllib2.HTTPError, urllib2.URLError), e: self.page = None - raise BrowserUnavailable(e) + raise BrowserHTTPError(e) except (mechanize.BrowserStateError, BrowserRetry), e: self.home() raise BrowserUnavailable(e) @@ -261,13 +264,13 @@ class BaseBrowser(mechanize.Browser): self._change_location(mechanize.Browser.follow_link(self, *args, **kwargs)) except (mechanize.response_seek_wrapper, urllib2.HTTPError, urllib2.URLError), e: self.page = None - raise BrowserUnavailable('%s (url="%s")' % (e, args and args[0] or 'None')) + raise BrowserHTTPError('%s (url="%s")' % (e, args and args[0] or 'None')) except (mechanize.BrowserStateError, BrowserRetry), e: self.home() raise BrowserUnavailable(e) @check_location - @retry(BrowserUnavailable, tries=3) + @retry(BrowserHTTPError, tries=3) def location(self, *args, **kwargs): """ Change location of browser on an URL. @@ -289,7 +292,7 @@ class BaseBrowser(mechanize.Browser): self.location(keep_args, keep_kwargs) except (mechanize.response_seek_wrapper, urllib2.HTTPError, urllib2.URLError), e: self.page = None - raise BrowserUnavailable('%s (url="%s")' % (e, args and args[0] or 'None')) + raise BrowserHTTPError('%s (url="%s")' % (e, args and args[0] or 'None')) except mechanize.BrowserStateError: self.home() self.location(*keep_args, **keep_kwargs)