Revision: 6830
Author:   russblau
Date:     2009-05-05 17:10:40 +0000 (Tue, 05 May 2009)

Log Message:
-----------
Fix bug 2785994: Page.backlinks cannot work well on some pages

Modified Paths:
--------------
    branches/rewrite/pywikibot/page.py
    branches/rewrite/pywikibot/site.py

Modified: branches/rewrite/pywikibot/page.py
===================================================================
--- branches/rewrite/pywikibot/page.py  2009-05-05 17:00:40 UTC (rev 6829)
+++ branches/rewrite/pywikibot/page.py  2009-05-05 17:10:40 UTC (rev 6830)
@@ -83,6 +83,8 @@
                 nsindex = source.ns_index(title[ :pos])
                 if nsindex:
                     self._ns = nsindex
+                    # normalize namespace, in case an alias was used
+                    title = source.namespace(nsindex) + title[pos: ]
             if u"#" in title:
                 title, self._section = title.split(u"#", 1)
             else:

Modified: branches/rewrite/pywikibot/site.py
===================================================================
--- branches/rewrite/pywikibot/site.py  2009-05-05 17:00:40 UTC (rev 6829)
+++ branches/rewrite/pywikibot/site.py  2009-05-05 17:10:40 UTC (rev 6830)
@@ -1116,16 +1116,23 @@
             # really redirects to this page
             redirgen = api.PageGenerator("backlinks", gbltitle=bltitle,
                                          site=self, gblfilterredir="redirects")
-            genlist = [blgen]
+            genlist = {None: blgen}
             for redir in redirgen:
+                if redir == page:
+                    # if a wiki contains pages whose titles contain
+                    # namespace aliases that existed before those aliases
+                    # were defined (example: [[WP:Sandbox]] existed as a
+                    # redirect to [[Wikipedia:Sandbox]] before the WP: alias
+                    # was created) they can be returned as redirects to
+                    # themselves; skip these
+                    continue
                 if redir.getRedirectTarget() == page:
-                    genlist.append(
-                        self.pagebacklinks(
-                            redir, followRedirects=True,
-                            filterRedirects=filterRedirects,
-                            namespaces=namespaces))
+                    genlist[redir.title()] = self.pagebacklinks(
+                                                redir, followRedirects=True,
+                                                
filterRedirects=filterRedirects,
+                                                namespaces=namespaces)
             import itertools
-            return itertools.chain(*genlist)
+            return itertools.chain(*genlist.values())
         return blgen
 
     def page_embeddedin(self, page, filterRedirects=None, namespaces=None):



_______________________________________________
Pywikipedia-svn mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/pywikipedia-svn

Reply via email to