Revision: 6461
Author: nicdumz
Date: 2009-03-02 07:00:46 +0000 (Mon, 02 Mar 2009)
Log Message:
-----------
Introducing a PageRelatedError abstract class, to use class level messages to have simpler
Error creations, and unified Error message.
For now only NoPage, IsRedirectPage, and IsNotRedirectPage are subclasses of that abstract
Error: others could too, I'm just converting the Errors that we will keep _for sure_
Modified Paths:
--------------
branches/rewrite/pywikibot/exceptions.py
branches/rewrite/pywikibot/page.py
branches/rewrite/pywikibot/site.py
Modified: branches/rewrite/pywikibot/exceptions.py
===================================================================
--- branches/rewrite/pywikibot/exceptions.py 2009-03-01 09:19:24 UTC (rev 6460)
+++ branches/rewrite/pywikibot/exceptions.py 2009-03-02 07:00:46 UTC (rev 6461)
@@ -25,24 +25,47 @@
def __str__(self):
return self.string
+class PageRelatedError(Error):
+ """Abstract Exception, used when the Exception concerns a particular
+ Page, and when a generic message can be written once for all"""
+ # Preformated UNICODE message where the page title will be inserted
+ # Override this in subclasses.
+ # u"Oh noes! Page %s is too funky, we should not delete it ;("
+ message = None
+ def __init__(self, page):
+ """
+ @param page
+ @type page: Page object
+ """
+ if self.message is None:
+ raise Error("PageRelatedError is abstract. Can't instantiate
it!")
+ super(PageRelatedError, self).__init__(self.message % page)
+ self._page = page
+
+ def getPage(self):
+ return self._page
+
class NoUsername(Error):
"""Username is not in user-config.py"""
-class NoPage(Error):
+class NoPage(PageRelatedError):
"""Page does not exist"""
+ message = u"Page %s doesn't exist."
class NoSuchSite(Error):
"""Site does not exist"""
-class IsRedirectPage(Error):
+class IsRedirectPage(PageRelatedError):
"""Page is a redirect page"""
+ message = u"Page %s is a redirect page."
-class IsNotRedirectPage(Error):
+class IsNotRedirectPage(PageRelatedError):
"""Page is not a redirect page"""
+ message = u"Page %s is not a redirect page."
class CircularRedirect(Error):
"""Page is a circular redirect
-
+
Exception argument is the redirect target; this may be the same title
as this page or a different title (in which case the target page directly
or indirectly redirects back to this one)
Modified: branches/rewrite/pywikibot/page.py
===================================================================
--- branches/rewrite/pywikibot/page.py 2009-03-01 09:19:24 UTC (rev 6460)
+++ branches/rewrite/pywikibot/page.py 2009-03-02 07:00:46 UTC (rev 6461)
@@ -283,8 +283,7 @@
exceptions that should be caught by the calling code:
- NoPage: The page does not exist
- - IsRedirectPage: The page is a redirect. The argument of the
- exception is the title of the page it redirects to.
+ - IsRedirectPage: The page is a redirect.
- SectionError: The section does not exist on a page with a #
link
@@ -304,7 +303,7 @@
else:
# Make sure we re-raise an exception we got on an earlier attempt
if hasattr(self, '_redirarg') and not get_redirect:
- raise pywikibot.IsRedirectPage, self._redirarg
+ raise pywikibot.IsRedirectPage(self)
elif hasattr(self, '_getexception'):
raise self._getexception
if force or not hasattr(self, "_revid") \
Modified: branches/rewrite/pywikibot/site.py
===================================================================
--- branches/rewrite/pywikibot/site.py 2009-03-01 09:19:24 UTC (rev 6460)
+++ branches/rewrite/pywikibot/site.py 2009-03-02 07:00:46 UTC (rev 6461)
@@ -939,7 +939,7 @@
def page_restrictions(self, page):
"""Returns a dictionary reflecting page
protections"""
if not self.page_exists(page):
- raise NoPage(u'No page %s.' % page)
+ raise NoPage(page)
if not hasattr(page, "_protection"):
self.loadpageinfo(page)
return page._protection
@@ -970,7 +970,7 @@
if not hasattr(page, "_redir"):
self.loadpageinfo(page)
if not page._redir:
- raise pywikibot.IsNotRedirectPage(page.title())
+ raise pywikibot.IsNotRedirectPage(page)
title = page.title(withSection=False)
query = api.Request(site=self, action="query",
property="info",
inprop="protection|talkid|subjectid",
@@ -1348,8 +1348,7 @@
u"loadrevisions: Query on %s returned data on
'%s'"
% (page, pagedata['title']))
if "missing" in pagedata:
- raise NoPage(u'Page %s does not exist'
- % page.title(asLink=True))
+ raise NoPage(page)
else:
page = Page(self, pagedata['title'])
api.update_page(page, pagedata)
@@ -2141,8 +2140,7 @@
except NoPage:
lastrev = None
if not recreate:
- raise Error("Page %s does not exist on %s wiki."
- % (page.title(withSection=False), self))
+ raise
token = self.token(page, "edit")
self.lock_page(page)
if lastrev is not None and page.latestRevision() != lastrev: