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.
This commit is contained in:
Romain Bignon 2010-07-15 23:46:39 +02:00
commit 08700f4a31

View file

@ -43,7 +43,7 @@ else:
__all__ = ['BrowserIncorrectPassword', 'BrowserBanned', 'BrowserUnavailable', 'BrowserRetry', __all__ = ['BrowserIncorrectPassword', 'BrowserBanned', 'BrowserUnavailable', 'BrowserRetry',
'BasePage', 'BaseBrowser'] 'BrowserHTTPError', 'BasePage', 'BaseBrowser']
# Exceptions # Exceptions
@ -58,6 +58,9 @@ class BrowserBanned(BrowserIncorrectPassword):
class BrowserUnavailable(Exception): class BrowserUnavailable(Exception):
pass pass
class BrowserHTTPError(BrowserUnavailable):
pass
class BrowserRetry(Exception): class BrowserRetry(Exception):
pass pass
@ -226,7 +229,7 @@ class BaseBrowser(mechanize.Browser):
return inner return inner
@check_location @check_location
@retry(BrowserUnavailable, tries=3) @retry(BrowserHTTPError, tries=3)
def openurl(self, *args, **kwargs): def openurl(self, *args, **kwargs):
""" """
Open an URL but do not create a Page object. Open an URL but do not create a Page object.
@ -235,7 +238,7 @@ class BaseBrowser(mechanize.Browser):
try: try:
return mechanize.Browser.open_novisit(self, *args, **kwargs) return mechanize.Browser.open_novisit(self, *args, **kwargs)
except (mechanize.response_seek_wrapper, urllib2.HTTPError, urllib2.URLError), e: 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): except (mechanize.BrowserStateError, BrowserRetry):
self.home() self.home()
return mechanize.Browser.open(self, *args, **kwargs) return mechanize.Browser.open(self, *args, **kwargs)
@ -248,7 +251,7 @@ class BaseBrowser(mechanize.Browser):
self._change_location(mechanize.Browser.submit(self, *args, **kwargs)) self._change_location(mechanize.Browser.submit(self, *args, **kwargs))
except (mechanize.response_seek_wrapper, urllib2.HTTPError, urllib2.URLError), e: except (mechanize.response_seek_wrapper, urllib2.HTTPError, urllib2.URLError), e:
self.page = None self.page = None
raise BrowserUnavailable(e) raise BrowserHTTPError(e)
except (mechanize.BrowserStateError, BrowserRetry), e: except (mechanize.BrowserStateError, BrowserRetry), e:
self.home() self.home()
raise BrowserUnavailable(e) raise BrowserUnavailable(e)
@ -261,13 +264,13 @@ class BaseBrowser(mechanize.Browser):
self._change_location(mechanize.Browser.follow_link(self, *args, **kwargs)) self._change_location(mechanize.Browser.follow_link(self, *args, **kwargs))
except (mechanize.response_seek_wrapper, urllib2.HTTPError, urllib2.URLError), e: except (mechanize.response_seek_wrapper, urllib2.HTTPError, urllib2.URLError), e:
self.page = None 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: except (mechanize.BrowserStateError, BrowserRetry), e:
self.home() self.home()
raise BrowserUnavailable(e) raise BrowserUnavailable(e)
@check_location @check_location
@retry(BrowserUnavailable, tries=3) @retry(BrowserHTTPError, tries=3)
def location(self, *args, **kwargs): def location(self, *args, **kwargs):
""" """
Change location of browser on an URL. Change location of browser on an URL.
@ -289,7 +292,7 @@ class BaseBrowser(mechanize.Browser):
self.location(keep_args, keep_kwargs) self.location(keep_args, keep_kwargs)
except (mechanize.response_seek_wrapper, urllib2.HTTPError, urllib2.URLError), e: except (mechanize.response_seek_wrapper, urllib2.HTTPError, urllib2.URLError), e:
self.page = None 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: except mechanize.BrowserStateError:
self.home() self.home()
self.location(*keep_args, **keep_kwargs) self.location(*keep_args, **keep_kwargs)