http://www.mediawiki.org/wiki/Special:Code/pywikipedia/10599
Revision: 10599 Author: russblau Date: 2012-10-22 21:10:53 +0000 (Mon, 22 Oct 2012) Log Message: ----------- Fix Page.isDisambig(): caching of result breaks use of get_Index argument; need to cache disambig templates and index templates separately, then generate result each time based on the desired set of templates.
Modified Paths: -------------- branches/rewrite/pywikibot/page.py
Modified: branches/rewrite/pywikibot/page.py =================================================================== --- branches/rewrite/pywikibot/page.py 2012-10-21 14:53:53 UTC (rev 10598) +++ branches/rewrite/pywikibot/page.py 2012-10-22 21:10:53 UTC (rev 10599) @@ -524,51 +524,55 @@ appended regardless of its existence.
""" - if not hasattr(self, "_isDisambig"): - if not hasattr(self.site, "_disambigtemplates"): - try: - default = set(self.site.family.disambig('_default')) - except KeyError: - default = set([u'Disambig']) - try: - distl = self.site.family.disambig(self.site.code, - fallback=False) - except KeyError: - distl = None - if distl is None: - disambigpages = Page(self.site, - "MediaWiki:Disambiguationspage") - if disambigpages.exists(): - disambigs = set(link.title(withNamespace=False) - for link in disambigpages.linkedPages() - if link.namespace() == 10) - # add index article templates - if get_Index and \ - self.site.sitename() == 'wikipedia:en': - regex = re.compile('(((.+?)))') - content = disambigpages.get() - for index in regex.findall(content): - disambigs.add(index[:1].upper() + index[1:]) - else: - message = self.site.mediawiki_message( - 'disambiguationspage').split(':', 1)[1] - # add the default template(s) for default mw message - # only - disambigs = set([message[:1].upper() + - message[1:]]) | default - self.site._disambigtemplates = disambigs + if not hasattr(self.site, "_disambigtemplates"): + try: + default = set(self.site.family.disambig('_default')) + except KeyError: + default = set([u'Disambig']) + try: + distl = self.site.family.disambig(self.site.code, + fallback=False) + except KeyError: + distl = None + if distl is None: + disambigpages = Page(self.site, + "MediaWiki:Disambiguationspage") + indexes = set() + if disambigpages.exists(): + disambigs = set(link.title(withNamespace=False) + for link in disambigpages.linkedPages() + if link.namespace() == 10) + # cache index article templates separately + if self.site.sitename() == 'wikipedia:en': + regex = re.compile('(((.+?)))') + content = disambigpages.get() + for index in regex.findall(content): + indexes.add(index[:1].upper() + index[1:]) + self.site._indextemplates = indexes else: - # Normalize template capitalization - self.site._disambigtemplates = set( - t[:1].upper() + t[1:] for t in distl - ) - templates = set(tl.title(withNamespace=False) - for tl in self.templates()) - disambigInPage = self.site._disambigtemplates.intersection( - templates) - self._isDisambig = self.namespace() != 10 and \ - len(disambigInPage) > 0 - return self._isDisambig + message = self.site.mediawiki_message( + 'disambiguationspage').split(':', 1)[1] + # add the default template(s) for default mw message + # only + disambigs = set([message[:1].upper() + + message[1:]]) | default + self.site._disambigtemplates = disambigs + else: + # Normalize template capitalization + self.site._disambigtemplates = set( + t[:1].upper() + t[1:] for t in distl + ) + templates = set(tl.title(withNamespace=False) + for tl in self.templates()) + disambigs = set() + # always use cached disambig templates + disambigs.update(self.site._disambigtemplates) + # if get_Index is True, also use cached index templates + if get_Index and hasattr(self.site, '_indextemplates'): + disambigs.update(self.site._indextemplates) + # see if any template on this page is in the set of disambigs + disambigInPage = disambigs.intersection(templates) + return self.namespace() != 10 and len(disambigInPage) > 0
def getReferences(self, follow_redirects=True, withTemplateInclusion=True, onlyTemplateInclusion=False, redirectsOnly=False,
pywikipedia-svn@lists.wikimedia.org