[Pywikipedia-l] SVN: [5437] trunk/pywikipedia/wikipedia.py

valhallasw at svn.wikimedia.org valhallasw at svn.wikimedia.org
Sat May 24 00:55:15 UTC 2008


Revision: 5437
Author:   valhallasw
Date:     2008-05-24 00:55:14 +0000 (Sat, 24 May 2008)

Log Message:
-----------
Refactored interwikiFormat's sort function into interwikiSort

Modified Paths:
--------------
    trunk/pywikipedia/wikipedia.py

Modified: trunk/pywikipedia/wikipedia.py
===================================================================
--- trunk/pywikipedia/wikipedia.py	2008-05-23 20:10:36 UTC (rev 5436)
+++ trunk/pywikipedia/wikipedia.py	2008-05-24 00:55:14 UTC (rev 5437)
@@ -78,6 +78,8 @@
         getLanguageLinks
     interwikiFormat(links): convert a dict of interlanguage links to text
         (using same dict format as getLanguageLinks)
+    interwikiSort(sites, inSite): sorts a list of sites according to interwiki
+        sort preference of inSite.
     url2link: Convert urlname of a wiki page into interwiki link format.
 
 Wikitext manipulation functions for category links:
@@ -3348,25 +3350,9 @@
         insite = getSite()
     if not links:
         return ''
+    
+    ar = interwikiSort(links.keys(), insite)
     s = []
-    ar = links.keys()
-    ar.sort()
-    putfirst = insite.interwiki_putfirst()
-    if putfirst:
-        #In this case I might have to change the order
-        ar2 = []
-        for code in putfirst:
-            # The code may not exist in this family?
-            if code in insite.family.obsolete:
-                code = insite.family.obsolete[code]
-            if code in insite.validLanguageLinks():
-                site = insite.getSite(code = code)
-                if site in ar:
-                    del ar[ar.index(site)]
-                    ar2 = ar2 + [site]
-        ar = ar2 + ar
-    if insite.interwiki_putfirst_doubled(ar):
-        ar = insite.interwiki_putfirst_doubled(ar) + ar
     for site in ar:
         try:
             link = links[site].aslink(forceInterwiki=True)
@@ -3379,9 +3365,35 @@
         sep = u'\r\n'
     s=sep.join(s) + u'\r\n'
     return s
+    
+# Sort sites according to local interwiki sort logic
+def interwikiSort(sites, insite = None):
+    if insite is None:
+      insite = getSite()
+    if not sites:
+      return []
 
+    sites.sort()
+    putfirst = insite.interwiki_putfirst()
+    if putfirst:
+        #In this case I might have to change the order
+        firstsites = []
+        for code in putfirst:
+            # The code may not exist in this family?
+            if code in insite.family.obsolete:
+                code = insite.family.obsolete[code]
+            if code in insite.validLanguageLinks():
+                site = insite.getSite(code = code)
+                if site in sites:
+                    del sites[sites.index(site)]
+                    firstsites = firstsites + [site]
+        sites = firstsites + sites
+    if insite.interwiki_putfirst_doubled(sites): #some implementations return False
+        sites = insite.interwiki_putfirst_doubled(sites) + sites
+        
+    return sites
+    
 # Wikitext manipulation functions dealing with category links
-
 def getCategoryLinks(text, site):
     import catlib
     """Return a list of category links found in text.





More information about the Pywikipedia-l mailing list