Revision: 5848 Author: balasyum Date: 2008-08-26 20:24:33 +0000 (Tue, 26 Aug 2008)
Log Message: ----------- Applying patch [ 2033223 ] solve_disambiguation.py: redirects as disambiguation pages
Modified Paths: -------------- trunk/pywikipedia/solve_disambiguation.py
Modified: trunk/pywikipedia/solve_disambiguation.py =================================================================== --- trunk/pywikipedia/solve_disambiguation.py 2008-08-25 08:56:57 UTC (rev 5847) +++ trunk/pywikipedia/solve_disambiguation.py 2008-08-26 20:24:33 UTC (rev 5848) @@ -525,7 +525,12 @@ u'{{[Pp]rocessing}}', ), } - + + primary_redir_template = { + # Page.templates() format, first letter uppercase + 'hu': u'Egyért-redir', + } + def __init__(self, always, alternatives, getAlternatives, generator, primary, main_only): self.always = always self.alternatives = alternatives @@ -817,22 +822,38 @@
def findAlternatives(self, disambPage): if disambPage.isRedirectPage() and not self.primary: - try: - target = disambPage.getRedirectTarget().title() - self.alternatives.append(target) - except wikipedia.NoPage: - wikipedia.output(u"The specified page was not found.") - user_input = wikipedia.input(u"""\ + if self.primary_redir_template.has_key(disambPage.site().lang) and self.primary_redir_template[disambPage.site().lang] in disambPage.templates(get_redirect = True): + baseTerm = disambPage.title() + for template in disambPage.templatesWithParams(get_redirect = True): + if template[0] == self.primary_redir_template[disambPage.site().lang] and len(template[1]) > 0: + baseTerm = template[1][1] + disambTitle = primary_topic_format[self.mylang] % baseTerm + try: + disambPage2 = wikipedia.Page(self.mysite, disambTitle) + links = disambPage2.linkedPages() + links = [correctcap(l,disambPage2.get()) for l in links] + except wikipedia.NoPage: + wikipedia.output(u"No page at %s, using redirect target." % disambTitle) + links = disambPage.linkedPages()[:1] + links = [correctcap(l,disambPage.get(get_redirect = True)) for l in links] + self.alternatives += links + else: + try: + target = disambPage.getRedirectTarget().title() + self.alternatives.append(target) + except wikipedia.NoPage: + wikipedia.output(u"The specified page was not found.") + user_input = wikipedia.input(u"""\ Please enter the name of the page where the redirect should have pointed at, or press enter to quit:""") - if user_input == "": - sys.exit(1) - else: - self.alternatives.append(user_input) - except wikipedia.IsNotRedirectPage: - wikipedia.output( - u"The specified page is not a redirect. Skipping.") - return False + if user_input == "": + sys.exit(1) + else: + self.alternatives.append(user_input) + except wikipedia.IsNotRedirectPage: + wikipedia.output( + u"The specified page is not a redirect. Skipping.") + return False elif self.getAlternatives: try: if self.primary: