Revision: 8581
Author: xqt
Date: 2010-09-19 20:47:22 +0000 (Sun, 19 Sep 2010)
Log Message:
-----------
update from rewrite
Modified Paths:
--------------
trunk/pywikipedia/wikipedia.py
Modified: trunk/pywikipedia/wikipedia.py
===================================================================
--- trunk/pywikipedia/wikipedia.py 2010-09-19 20:44:50 UTC (rev 8580)
+++ trunk/pywikipedia/wikipedia.py 2010-09-19 20:47:22 UTC (rev 8581)
@@ -940,7 +940,7 @@
self.latestRevision())
def latestRevision(self):
- """Return the latest revision id for this page."""
+ """Return the current revision id for this page."""
if not self._permalink:
# When we get the page with getall, the permalink is received
# automatically
@@ -949,7 +949,31 @@
if hasattr(self, '_getexception'):
raise self._getexception
return int(self._permalink)
+ def userName(self):
+ """Return name or IP address of last user to edit page.
+ Returns None unless page was retrieved with getAll().
+
+ """
+ return self._userName
+
+ def isIpEdit(self):
+ """Return True if last editor was unregistered.
+
+ Returns None unless page was retrieved with getAll() or _getEditPage().
+
+ """
+ return self._ipedit
+
+ def editTime(self):
+ """Return timestamp (in MediaWiki format) of last revision to page.
+
+ Returns None if last edit time is unknown.
+
+ """
+ return self._editTime
+
+
def previousRevision(self):
"""Return the revision id for the previous revision of this Page."""
vh = self.getVersionHistory(revCount=2)
@@ -1052,19 +1076,50 @@
def isStaticRedirect(self, force=False):
"""Return True if this is a redirect containing the magic word
- __STATICREDIRECT__, False if not or not existing."""
+ __STATICREDIRECT__, False if not or not existing.
+
+ """
+ found = False
if self.isRedirectPage():
staticKeys = self.site().getmagicwords('staticredirect')
text = self.get(get_redirect=True, force=force)
if staticKeys:
- found = False
for key in staticKeys:
if key in text:
found = True
break
- if found: return True
- return False
+ return found
+ def isCategoryRedirect(self, text=None):
+ """Return True if this is a category redirect page, False otherwise."""
+
+ if not self.isCategory():
+ return False
+ if not hasattr(self, "_catredirect"):
+ if not text:
+ try:
+ text = self.get(get_redirect=True)
+ except NoPage:
+ return False
+ catredirs = self.site().category_redirects()
+ for (t, args) in self.templatesWithParams(thistxt=text):
+ template = Page(self.site(), t, defaultNamespace=10
+ ).titleWithoutNamespace() # normalize title
+ if template in catredirs:
+ # Get target (first template argument)
+ self._catredirect = self.site().namespace(14) + ":" +
args[0]
+ break
+ else:
+ self._catredirect = False
+ return bool(self._catredirect)
+
+ def getCategoryRedirectTarget(self):
+ """If this is a category redirect, return the target category title."""
+ if self.isCategoryRedirect():
+ import catlib
+ return catlib.Category(self.site(), self._catredirect)
+ raise IsNotRedirectPage
+
def isEmpty(self):
"""Return True if the page text has less than 4 characters.
@@ -1085,6 +1140,94 @@
ns = self.namespace()
return ns >= 0 and ns % 2 == 1
+ def toggleTalkPage(self):
+ """Return other member of the article-talk page pair for this Page.
+
+ If self is a talk page, returns the associated content page;
+ otherwise, returns the associated talk page.
+ Returns None if self is a special page.
+
+ """
+ ns = self.namespace()
+ if ns < 0: # Special page
+ return None
+ if self.isTalkPage():
+ ns -= 1
+ else:
+ ns += 1
+
+ if ns == 6:
+ return ImagePage(self.site(), self.titleWithoutNamespace())
+
+ return Page(self.site(), self.titleWithoutNamespace(),
defaultNamespace=ns)
+
+ def isCategory(self):
+ """Return True if the page is a Category, False otherwise."""
+ return self.namespace() == 14
+
+ def isImage(self):
+ """Return True if this is an image description page, False
otherwise."""
+ return self.namespace() == 6
+
+ def isDisambig(self):
+ """Return True if this is a disambiguation page, False otherwise.
+
+ Relies on the presence of specific templates, identified in
+ the Family file or on a wiki page, to identify disambiguation
+ pages.
+
+ By default, loads a list of template names from the Family file;
+ if the value in the Family file is None, looks for the list on
+ [[MediaWiki:Disambiguationspage]].
+
+ """
+ if not hasattr(self, "_isDisambig"):
+ if not hasattr(self._site, "_disambigtemplates"):
+ distl = self._site.family.disambig(self._site.lang)
+ if distl is None:
+ try:
+ disambigpages = Page(self._site,
+ "MediaWiki:Disambiguationspage")
+ self._site._disambigtemplates = set(
+ link.titleWithoutNamespace()
+ for link in disambigpages.linkedPages()
+ if link.namespace() == 10
+ )
+ except NoPage:
+ self._site._disambigtemplates = set(['Disambig'])
+ else:
+ # Normalize template capitalization
+ self._site._disambigtemplates = set(
+ t[:1].upper() + t[1:] for t in distl
+ )
+ disambigInPage =
self._site._disambigtemplates.intersection(self.templates())
+ self._isDisambig = self.namespace() != 10 and len(disambigInPage)
> 0
+ return self._isDisambig
+
+ def canBeEdited(self):
+ """Return bool indicating whether this page can be edited.
+
+ This returns True if and only if:
+ - page is unprotected, and bot has an account for this site, or
+ - page is protected, and bot has a sysop account for this site.
+
+ """
+ try:
+ self.get()
+ except:
+ pass
+ if self.editRestriction == 'sysop':
+ userdict = config.sysopnames
+ else:
+ userdict = config.usernames
+ try:
+ userdict[self.site().family.name][self.site().lang]
+ return True
+ except:
+ # We don't have a user account for that wiki, or the
+ # page is locked and we don't have a sysop account.
+ return False
+
def botMayEdit(self, username):
"""Return True if this page allows bots to edit it.
@@ -1118,14 +1261,14 @@
if len(template[1]) == 0:
return True
else:
- (type, bots) = template[1][0].split('=', 1)
+ (ttype, bots) = template[1][0].split('=', 1)
bots = bots.split(',')
- if type == 'allow':
+ if ttype == 'allow':
if 'all' in bots or username in bots:
return True
else:
return False
- if type == 'deny':
+ if ttype == 'deny':
if 'all' in bots or username in bots:
return False
else:
@@ -1133,30 +1276,6 @@
# no restricting template found
return True
- def userName(self):
- """Return name or IP address of last user to edit page.
-
- Returns None unless page was retrieved with getAll().
-
- """
- return self._userName
-
- def isIpEdit(self):
- """Return True if last editor was unregistered.
-
- Returns None unless page was retrieved with getAll() or _getEditPage().
-
- """
- return self._ipedit
-
- def editTime(self):
- """Return timestamp (in MediaWiki format) of last revision to page.
-
- Returns None if last edit time is unknown.
-
- """
- return self._editTime
-
def namespace(self):
"""Return the number of the namespace of the page.
@@ -1166,79 +1285,6 @@
"""
return self._namespace
- def isCategory(self):
- """Return True if the page is a Category, False otherwise."""
- return self.namespace() == 14
-
- def isImage(self):
- """Return True if this is an image description page, False
otherwise."""
- return self.namespace() == 6
-
- def isCategoryRedirect(self, text=None):
- """Return True if this is a category redirect page, False otherwise."""
-
- if not self.isCategory():
- return False
- if not hasattr(self, "_catredirect"):
- if not text:
- try:
- text = self.get(get_redirect=True)
- except NoPage:
- return False
- catredirs = self.site().category_redirects()
- for (t, args) in self.templatesWithParams(thistxt=text):
- template = Page(self.site(), t, defaultNamespace=10
- ).titleWithoutNamespace() # normalize title
- if template in catredirs:
- # Get target (first template argument)
- self._catredirect = self.site().namespace(14) + ":" +
args[0]
- break
- else:
- self._catredirect = False
- return bool(self._catredirect)
-
- def getCategoryRedirectTarget(self):
- """If this is a category redirect, return the target category title."""
- if self.isCategoryRedirect():
- import catlib
- return catlib.Category(self.site(), self._catredirect)
- raise IsNotRedirectPage
-
- def isDisambig(self):
- """Return True if this is a disambiguation page, False otherwise.
-
- Relies on the presence of specific templates, identified in
- the Family file or on a wiki page, to identify disambiguation
- pages.
-
- By default, loads a list of template names from the Family file;
- if the value in the Family file is None, looks for the list on
- [[MediaWiki:Disambiguationspage]].
-
- """
- if not hasattr(self, "_isDisambig"):
- if not hasattr(self._site, "_disambigtemplates"):
- distl = self._site.family.disambig(self._site.lang)
- if distl is None:
- try:
- disambigpages = Page(self._site,
- "MediaWiki:Disambiguationspage")
- self._site._disambigtemplates = set(
- link.titleWithoutNamespace()
- for link in disambigpages.linkedPages()
- if link.namespace() == 10
- )
- except NoPage:
- self._site._disambigtemplates = set(['Disambig'])
- else:
- # Normalize template capitalization
- self._site._disambigtemplates = set(
- t[:1].upper() + t[1:] for t in distl
- )
- disambigInPage =
self._site._disambigtemplates.intersection(self.templates())
- self._isDisambig = self.namespace() != 10 and len(disambigInPage)
> 0
- return self._isDisambig
-
def getReferences(self, follow_redirects=True, withTemplateInclusion=True,
onlyTemplateInclusion=False, redirectsOnly=False, internal =
False):
"""Yield all pages that link to the page by API
@@ -2138,29 +2184,6 @@
return response.code, response.msg, data
- def canBeEdited(self):
- """Return bool indicating whether this page can be edited.
-
- This returns True if and only if:
- * page is unprotected, and bot has an account for this site, or
- * page is protected, and bot has a sysop account for this site.
- """
- try:
- self.get()
- except:
- pass
- if self.editRestriction == 'sysop':
- userdict = config.sysopnames
- else:
- userdict = config.usernames
- try:
- userdict[self.site().family.name][self.site().lang]
- return True
- except:
- # We don't have a user account for that wiki, or the
- # page is locked and we don't have a sysop account.
- return False
-
def protection(self):
"""Return list of dicts of this page protection level. like:
[{u'expiry': u'2010-05-26T14:41:51Z', u'type': u'edit', u'level':
u'autoconfirmed'}, {u'expiry': u'2010-05-26T14:41:51Z', u'type': u'move',
u'level': u'sysop'}]
@@ -2179,28 +2202,6 @@
data=datas['query']['pages'].values()[0]['protection']
return data
-
- def toggleTalkPage(self):
- """Return the other member of the article-talk page pair for this Page.
-
- If self is a talk page, returns the associated content page; otherwise,
- returns the associated talk page.
- Returns None if self is a special page.
-
- """
- ns = self.namespace()
- if ns < 0: # Special page
- return None
- if self.isTalkPage():
- ns -= 1
- else:
- ns += 1
-
- if ns == 6:
- return ImagePage(self.site(), self.titleWithoutNamespace())
-
- return Page(self.site(), self.titleWithoutNamespace(),
defaultNamespace=ns)
-
def interwiki(self):
"""Return a list of interwiki links in the page text.
_______________________________________________
Pywikipedia-svn mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/pywikipedia-svn