Revision: 7667
Author:   multichill
Date:     2009-11-18 16:17:36 +0000 (Wed, 18 Nov 2009)

Log Message:
-----------
Changed commonscat.py to understand alternatives

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

Modified: trunk/pywikipedia/commonscat.py
===================================================================
--- trunk/pywikipedia/commonscat.py     2009-11-18 01:13:26 UTC (rev 7666)
+++ trunk/pywikipedia/commonscat.py     2009-11-18 16:17:36 UTC (rev 7667)
@@ -36,155 +36,157 @@
 
 import wikipedia, config, pagegenerators, add_text, re
 
+#Primary template, list of alternatives
 commonscatTemplates = {
-    '_default': u'Commonscat',
-    'af' : u'CommonsKategorie',
-    'als' : u'Commonscat',
-    'an' : u'Commonscat',
-    'ang' : u'Commonscat',
-    'ar' : u'تصنيف كومنز',
-    'ast' : u'Commonscat',
-    'az' : u'CommonsKat',
-    'bar' : u'Commonscat',
-    'bat-smg' : u'Commonscat',
-    'be' : u'Commonscat',
-    'bg' : u'Commonscat',
-    'bn' : u'কমন্সক্যাট',
-    'br' : u'Commonscat',
-    'ca' : u'Commonscat',
-    'cbk-zam' : u'Commonscat',
-    'chr' : u'Commonscat',
-    'crh' : u'CommonsKat',
-    'cs' : u'Commonscat',
-    'cu' : u'Commonscat',
-    'cv' : u'Commonscat',
-    'da' : u'Commonscat',
-    'de' : u'Commonscat',
-    'diq' : u'Commonscat',
-    'dv' : u'Commonscat',
-    'el' : u'Commonscat',
-    'en' : u'Commons cat',
-    'eo' : u'Commonscat',
-    'es' : u'Commonscat',
-    'eu' : u'Commonskat',
-    'fa' : u'انبار-رده',
-    'fi' : u'Commonscat',
-    'fr' : u'Commonscat',
-    'frp' : u'Commonscat',
-    'fy' : u'Commonscat',
-    'ga' : u'Catcómhaoin',
-    'gd' : u'Commonscat',
-    'gv' : u'Commonscat',
-    'ha' : u'Commonscat',
-    'he' : u'Commonscat',
-    'hi' : u'Commonscat',
-    'hr' : u'Commonscat',
-    'hu' : u'Közvagyonkat',
-    'hy' : u'Commonscat',
-    'ia' : u'Commonscat',
-    'id' : u'Commonscat',
-    'io' : u'Commonscat',
-    'is' : u'CommonsCat',
-    'it' : u'Commonscat',
-    'ja' : u'Commonscat',
-    'jv' : u'Commonscat',
-    'ka' : u'Commonscat',
-    'kaa' : u'Commons cat',
-    'kg' : u'Commonscat',
-    'kk' : u'Commonscat',
-    'km' : u'Commonscat',
-    'kn' : u'Commonscat',
-    'ko' : u'Commonscat',
-    'la' : u'CommuniaCat',
-    'lad' : u'Commonscat',
-    'lbe' : u'Commonscat',
-    'li' : u'Commonscat',
-    'lo' : u'Commonscat',
-    'lt' : u'Commonscat',
-    'lv' : u'Commonscat',
-    'mi' : u'Commonscat',
-    'mk' : u'Ризница-врска',
-    'ml' : u'Commonscat',
-    'mn' : u'Commonscat',
-    'ms' : u'Commonscat',
-    'nah' : u'Commonscat',
-    'nds-nl' : u'Commonscat',
-    'new' : u'Commonscat',
-    'nl' : u'Commonscat',
-    'nn' : u'Commonscat',
-    'no' : u'Commonscat',
-    'oc' : u'Commonscat',
-    'om' : u'Commonscat',
-    'os' : u'Commonscat',
-    'pam' : u'Commonscat',
-    'pl' : u'Commonscat',
-    'pt' : u'Commonscat',
-    'qu' : u'Commonscat',
-    'ro' : u'Commonscat',
-    'ru' : u'Commonscat',
-    'sah' : u'Commonscat',
-    'scn' : u'Commonscat',
-    'sd' : u'Commonscat',
-    'se' : u'Commonscat',
-    'sh' : u'Commonscat',
-    'si' : u'Commonscat',
-    'simple' : u'Commonscat',
-    'sk' : u'Commonscat',
-    'sl' : u'Kategorija v Zbirki',
-    'so' : u'Commonscat',
-    'sr' : u'Commonscat',
-    'su' : u'Commonscat',
-    'sv' : u'Commonscat',
-    'sw' : u'Commonscat',
-    'ta' : u'Commonscat',
-    'te' : u'Commonscat',
-    'th' : u'Commonscat',
-    'tl' : u'Commonscat',
-    'tr' : u'CommonsKat',
-    'tt' : u'Commonscat',
-    'udm' : u'Commonscat',
-    'uk' : u'Commonscat',
-    'uz' : u'Commonscat',
-    'vi' : u'Commonscat',
-    'vls' : u'Commonscat',
-    'war' : u'Commonscat',
-    'xal' : u'Commonscat',
-    'zea' : u'Commonscat',
-    'zh' : u'Commonscat',
-    'zh-classical' : u'共享類',
-    'zh-yue' : u'同享類',
+    '_default': (u'Commonscat', []),
+    'af' : (u'CommonsKategorie', [u'commonscat']),
+    'als' : (u'Commonscat', []),
+    'an' : (u'Commonscat', []),
+    'ang' : (u'Commonscat', []),
+    'ar' : (u'تصنيف كومنز', [u'Commonscat', u'تصنيف كومونز', u'Commons cat', 
u'CommonsCat']),
+    'ast' : (u'Commonscat', []),
+    'az' : (u'CommonsKat', []),
+    'bar' : (u'Commonscat', []),
+    'bat-smg' : (u'Commonscat', []),
+    'be' : (u'Commonscat', []),
+    'bg' : (u'Commonscat', []),
+    'bn' : (u'কমন্সক্যাট', []),
+    'br' : (u'Commonscat', []),
+    'ca' : (u'Commonscat', []),
+    'cbk-zam' : (u'Commonscat', []),
+    'chr' : (u'Commonscat', []),
+    'crh' : (u'CommonsKat', []),
+    'cs' : (u'Commonscat', [u'Commons cat']),
+    'cu' : (u'Commonscat', []),
+    'cv' : (u'Commonscat', []),
+    'da' : (u'Commonscat', [u'Commons cat']),
+    'de' : (u'Commonscat', []), # No alternatives found
+    'diq' : (u'Commonscat', []),
+    'dv' : (u'Commonscat', []),
+    'el' : (u'Commonscat', []),
+    'en' : (u'Commons category', [u'Commoncat', u'Commons2', 
u'Cms-catlist-up', u'Catlst commons', u'Commonscategory', u'Commonscat', 
u'Commons cat']),
+    'eo' : (u'Commonscat', []), # No alternatives found
+    'es' : (u'Commonscat', [u'Ccat', u'Commons cat', u'Categoría Commons', 
u'Commonscat-inline']),
+    'eu' : (u'Commonskat', [u'Commonscat']),
+    'fa' : (u'انبار-رده', [u'Commonscat', u'Commons cat', u'انبار رده', 
u'Commons category']),
+    'fi' : (u'Commonscat', []), # No alternatives found
+    'fr' : (u'Commonscat', [u'CommonsCat', u'Commons cat', u'Commons 
category']),
+    'frp' : (u'Commonscat', []),
+    'fy' : (u'Commonscat', []),
+    'ga' : (u'Catcómhaoin', []),
+    'gd' : (u'Commonscat', []),
+    'gv' : (u'Commonscat', []),
+    'ha' : (u'Commonscat', []),
+    'he' : (u'Commonscat', []),
+    'hi' : (u'Commonscat', []),
+    'hr' : (u'Commonscat', []),
+    'hu' : (u'Közvagyonkat', []),
+    'hy' : (u'Commonscat', []),
+    'ia' : (u'Commonscat', []),
+    'id' : (u'Commonscat', [u'Commons cat', u'Commons2', u'CommonsCat', 
u'Commons category']),
+    'io' : (u'Commonscat', []),
+    'is' : (u'CommonsCat', []),
+    'it' : (u'Commonscat', []),
+    'ja' : (u'Commonscat', [u'Commons cat', u'Commons category']),
+    'jv' : (u'Commonscat', []),
+    'ka' : (u'Commonscat', []),
+    'kaa' : (u'Commons cat', []),
+    'kg' : (u'Commonscat', []),
+    'kk' : (u'Commonscat', []),
+    'km' : (u'Commonscat', []),
+    'kn' : (u'Commonscat', []),
+    'ko' : (u'Commonscat', []),
+    'la' : (u'CommuniaCat', []),
+    'lad' : (u'Commonscat', []),
+    'lbe' : (u'Commonscat', []),
+    'li' : (u'Commonscat', []),
+    'lo' : (u'Commonscat', []),
+    'lt' : (u'Commonscat', []),
+    'lv' : (u'Commonscat', []),
+    'mi' : (u'Commonscat', []),
+    'mk' : (u'Ризница-врска', [u'Commonscat', u'Commons cat', u'CommonsCat', 
u'Commons2', u'Commons category']),
+    'ml' : (u'Commonscat', []),
+    'mn' : (u'Commonscat', []),
+    'ms' : (u'Commonscat', []),
+    'nah' : (u'Commonscat', []),
+    'nds-nl' : (u'Commonscat', []),
+    'new' : (u'Commonscat', []),
+    'nl' : (u'Commonscat', []), # No alternatives found
+    'nn' : (u'Commonscat', [u'Commons cat']),
+    'no' : (u'Commonscat', []), # No alternatives found
+    'oc' : (u'Commonscat', []),
+    'om' : (u'Commonscat', []),
+    'os' : (u'Commonscat', []),
+    'pam' : (u'Commonscat', []),
+    'pl' : (u'Commonscat', []), # No alternatives found
+    'pt' : (u'Commonscat', [u'Commons cat']),
+    'qu' : (u'Commonscat', []),
+    'ro' : (u'Commonscat', [u'Commons cat']),
+    'ru' : (u'Commonscat', [u'Викисклад-кат']),
+    'sah' : (u'Commonscat', []),
+    'scn' : (u'Commonscat', []),
+    'sd' : (u'Commonscat', []),
+    'se' : (u'Commonscat', []),
+    'sh' : (u'Commonscat', []),
+    'si' : (u'Commonscat', []),
+    'simple' : (u'Commonscat', []),
+    'sk' : (u'Commonscat', []), # No alternatives found
+    'sl' : (u'Kategorija v Zbirki', [u'Commonscat', u'Kategorija v zbirki', 
u'Commons cat', u'Katzbirke']),
+    'so' : (u'Commonscat', []),
+    'sr' : (u'Commonscat', []),
+    'su' : (u'Commonscat', []),
+    'sv' : (u'Commonscat', [u'Commonscat-rad', u'Commonskat', u'Commons cat']),
+    'sw' : (u'Commonscat', []),
+    'ta' : (u'Commonscat', []),
+    'te' : (u'Commonscat', []),
+    'th' : (u'Commonscat', []),
+    'tl' : (u'Commonscat', []),
+    'tr' : (u'CommonsKat', [u'Commonscat', u'Commons cat']),
+    'tt' : (u'Commonscat', []),
+    'udm' : (u'Commonscat', []),
+    'uk' : (u'Commonscat', []),
+    'uz' : (u'Commonscat', []),
+    'vi' : (u'Commonscat', [u'Commons2', u'Commons cat', u'Commons category', 
u'Commons+cat']),
+    'vls' : (u'Commonscat', []),
+    'war' : (u'Commonscat', []),
+    'xal' : (u'Commonscat', []),
+    'zea' : (u'Commonscat', []),
+    'zh' : (u'Commonscat', [u'Commons cat']),
+    'zh-classical' : (u'共享類', []),
+    'zh-yue' : (u'同享類', []),
 }
 
 ignoreTemplates = {
-    'af' : [u'commonscat', u'commons'],
-    'ar' : [u'تحويلة تصنيف', u'كومنز', u'كومونز', u'Commonscat', u'Commons'],
-    'cs' : [u'Commons', u'commons cat', u'Sestřičky', u'Sisterlinks'],
+    'af' : [u'commons'],
+    'ar' : [u'تحويلة تصنيف', u'كومنز', u'كومونز', u'Commons'],
+    'cs' : [u'Commons', u'Sestřičky', u'Sisterlinks'],
     'da' : [u'Commons', u'Commons left', u'Commons2', u'Commonsbilleder', 
u'Commonscat left', u'Commonscat2', u'GalleriCommons', u'Søsterlinks'],
-    'en' : [u'Category redirect', u'Commons', u'Commonscat', u'Commonscat1A', 
u'Commoncats', u'Commonscat4Ra', u'Sisterlinks', u'Sisterlinkswp', u'Tracking 
category', u'Template category', u'Wikipedia category'],
+    'en' : [u'Category redirect', u'Commons', u'Commonscat1A', u'Commoncats', 
u'Commonscat4Ra', u'Sisterlinks', u'Sisterlinkswp', u'Tracking category', 
u'Template category', u'Wikipedia category'],
     'eo' : [u'Commons', (u'Projekto/box', 'commons='), (u'Projekto', 
'commons='), (u'Projektoj', 'commons='), (u'Projektoj', 'commonscat=')],
     'es' : [u'Commons', u'IprCommonscat'],
-    'eu' : [u'Commonscat', u'Commons'],
-    'fa' : [u'Commonscat', u'Commons', u'ویکی‌انبار'],
+    'eu' : [u'Commons'],
+    'fa' : [u'Commons', u'ویکی‌انبار'],
     'fi' : [u'Commonscat-rivi', u'Commons-rivi', u'Commons'],
-    'fr' : [u'Commons', u'Commons cat', u'CommonsCat', u'Commons-inline', 
(u'Autres projets', 'commons=')],
+    'fr' : [u'Commons', u'Commons-inline', (u'Autres projets', 'commons=')],
     'fy' : [u'Commons', u'CommonsLyts'],
     'hr' : [u'Commons', (u'WProjekti', 'commonscat=')],
     'it' : [(u'Ip', 'commons='), (u'Interprogetto', 'commons=')],
-    'ja' : [u'CommonscatS', u'Commons cat', u'SisterlinksN', u'Interwikicat'],
+    'ja' : [u'CommonscatS', u'SisterlinksN', u'Interwikicat'],
     'nds-nl' : [u'Commons'],
     'nl' : [u'Commons', u'Commonsklein', u'Commonscatklein', u'Catbeg', 
u'Catsjab', u'Catwiki'],
     'om' : [u'Commons'],
     'ru' : [u'Навигация'],
 }
 
-def getTemplate (lang = None):
+def getCommonscatTemplate (lang = None):
     '''
-    Get the template name in a language. Expects the language code, returns 
the translation.
+    Get the template name in a language. Expects the language code.
+    Return as tuple containing the primary template and it's alternatives
     '''
     if lang in commonscatTemplates:
-        return commonscatTemplates[lang]
+        return  commonscatTemplates[lang]
     else:
-        return u'Commonscat'
+        return commonscatTemplates[u'_default']
 
 def skipPage(page):
     '''
@@ -233,19 +235,21 @@
     Take a page. Go to all the interwiki page looking for a commonscat 
template.
     When all the interwiki's links are checked and a proper category is found 
add it to the page.
     '''
-
     wikipedia.output(u'Working on ' + page.title());
-    if getTemplate(page.site().language()) in page.templates():
+    #Get the right templates for this page
+    primaryCommonscat, 
commonscatAlternatives=getCommonscatTemplate(page.site().language())
+    commonscatLink = getCommonscatLink (page)
+    if commonscatLink:
         wikipedia.output(u'Commonscat template is already on ' + page.title());
-        currentCommonscat = getCommonscatLink (page)
-        checkedCommonscat = checkCommonscatLink(currentCommonscat)
-        if (currentCommonscat==checkedCommonscat):
+        (currentCommonscatTemplate, currentCommonscatTarget) = commonscatLink
+        checkedCommonscatTarget = checkCommonscatLink(currentCommonscatTarget)
+        if (currentCommonscatTarget==checkedCommonscatTarget):
             #The current commonscat link is good
-            wikipedia.output(u'Commonscat link at ' + page.title() + u' to 
Category:' + currentCommonscat + u' is ok');
+            wikipedia.output(u'Commonscat link at ' + page.title() + u' to 
Category:' + currentCommonscatTarget + u' is ok');
             return (True, always)
-        elif checkedCommonscat!=u'':
+        elif checkedCommonscatTarget!=u'':
             #We have a new Commonscat link, replace the old one
-            changeCommonscat (page, currentCommonscat, checkedCommonscat)
+            changeCommonscat (page, currentCommonscatTemplate, 
currentCommonscat, primaryCommonscat, checkedCommonscat)
             return (True, always)
         else:
             #Commonscat link is wrong
@@ -260,19 +264,17 @@
     else:
         commonscatLink = findCommonscatLink(page)
         if (commonscatLink!=u''):
-            textToAdd = u'{{' + getTemplate(page.site().language()) + u'|' + 
commonscatLink + u'}}'
+            textToAdd = u'{{' + primaryCommonscat + u'|' + commonscatLink + 
u'}}'
             (success, status, always) = add_text.add_text(page, textToAdd, 
summary, None, None, always);
             return (True, always);
 
     return (True, always);
 
-def changeCommonscat (page = None, oldcat = u'', newcat = u''):
-    #newtext = page.get()
-    #print u'{{' +  + u'|' + oldcat + u'}}'
-    #print u'{{' + getTemplate(page.site().language()) + u'|' + newcat + u'}}'
-    #newtext = newtext.replace(u'{{' + getTemplate(page.site().language()) + 
u'|' + oldcat + u'}}',
-    #                u'{{' + getTemplate(page.site().language()) + u'|' + 
newcat + u'}}')
-    newtext = re.sub(u'(?i)\{\{' + getTemplate(page.site().language()) + 
u'\|?[^}]*\}\}',  u'{{' + getTemplate(page.site().language()) + u'|' + newcat + 
u'}}', page.get())
+def changeCommonscat (page = None, oldtemplate = u'', oldcat = u'', 
newtemplate = u'', newcat = u''):
+    '''
+    Change the current commonscat template and target. 
+    '''
+    newtext = re.sub(u'(?i)\{\{' + oldtemplate + u'\|?[^}]*\}\}',  u'{{' + 
newtemplate + u'|' + newcat + u'}}', page.get())
     comment = u'Changing commonscat link from [[:Commons:Category:' + oldcat + 
u'|' + oldcat + u']] to [[:Commons:Category:' + newcat + u'|' + newcat + u']]'
     wikipedia.showDiff(page.get(), newtext)
     page.put(newtext, comment)
@@ -280,8 +282,9 @@
 def findCommonscatLink (page=None):
     for ipage in page.interwiki():
         if(ipage.exists() and not ipage.isRedirectPage() and not 
ipage.isDisambig()):
-            possibleCommonscat = getCommonscatLink (ipage)
-            if (possibleCommonscat!= u''):
+            commonscatLink = getCommonscatLink (ipage)
+            if commonscatLink:
+                (currentCommonscatTemplate, possibleCommonscat) = 
commonscatLink
                 checkedCommonscat = checkCommonscatLink(possibleCommonscat)
                 if (checkedCommonscat!= u''):
                     wikipedia.output("Found link for " + page.title() + " at 
[[" + ipage.site().language() + ":" + ipage.title() + "]] to " + 
checkedCommonscat + ".")
@@ -290,23 +293,30 @@
 
 
 def getCommonscatLink (wikipediaPage=None):
+    '''
+    Go through the page and return a tuple of (<templatename>, <target>)
+    '''
+    primaryCommonscat, 
commonscatAlternatives=getCommonscatTemplate(wikipediaPage.site().language())
+    commonscatTemplate =u''
+    commonscatTarget = u''
     #See if commonscat is present
-    if getTemplate(wikipediaPage.site().language()) in 
wikipediaPage.templates():
-        #Go through all the templates at the page
-        for template in wikipediaPage.templatesWithParams():
-            #We found the template and it has the parameter set.
-            if ((template[0]==getTemplate(wikipediaPage.site().language())) 
and (len(template[1]) > 0)):
-                return template[1][0]
-        #The template is on the page, but without parameters.
-        return wikipediaPage.titleWithoutNamespace()
 
-    return u''
+    for template in wikipediaPage.templatesWithParams():
+        if template[0]==primaryCommonscat or template[0] in 
commonscatAlternatives:
+            commonscatTemplate = template[0]
+            if (len(template[1]) > 0):
+                commonscatTarget = template[1][0]
+            else:
+                commonscatTarget = wikipediaPage.titleWithoutNamespace()
+            return (commonscatTemplate, commonscatTarget)
 
+    return None
+
 def checkCommonscatLink (name = ""):
     '''
-    This function will retun a page object of the commons page
+    This function will retun the name of a valid commons category
     If the page is a redirect this function tries to follow it.
-    If the page doesnt exists the function will return None
+    If the page doesnt exists the function will return an empty string
     '''
     #wikipedia.output("getCommonscat: " + name );
     try:
@@ -357,7 +367,8 @@
                 generator = [wikipedia.Page(wikipedia.getSite(), arg[6:])]
         elif arg.startswith('-checkcurrent'):
             checkcurrent = True
-            generator = 
pagegenerators.NamespaceFilterPageGenerator(pagegenerators.ReferringPageGenerator(wikipedia.Page(wikipedia.getSite(),
 u'Template:' + getTemplate(wikipedia.getSite().language())), 
onlyTemplateInclusion=True), ns)
+            primaryCommonscat, commonscatAlternatives = 
getCommonscatTemplate(wikipedia.getSite().language())
+            generator = 
pagegenerators.NamespaceFilterPageGenerator(pagegenerators.ReferringPageGenerator(wikipedia.Page(wikipedia.getSite(),
 u'Template:' + primaryCommonscat), onlyTemplateInclusion=True), ns)
 
         elif arg == '-always':
             always = True



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

Reply via email to