Revision: 7181 Author: filnik Date: 2009-08-27 12:47:00 +0000 (Thu, 27 Aug 2009)
Log Message: ----------- Adding new feature: on it.wikipedia the template used is now only one for all the protection. I maintain the old settings for backward compatibily and because the old templates are still used (but deprecated)
Modified Paths: -------------- trunk/pywikipedia/blockpageschecker.py
Modified: trunk/pywikipedia/blockpageschecker.py =================================================================== --- trunk/pywikipedia/blockpageschecker.py 2009-08-27 11:20:54 UTC (rev 7180) +++ trunk/pywikipedia/blockpageschecker.py 2009-08-27 12:47:00 UTC (rev 7181) @@ -54,7 +54,7 @@ """ # # (C) Monobi a.k.a. Wikihermit, 2007 -# (C) Filnik, 2007-2008 +# (C) Filnik, 2007-2008-2009 # (C) NicDumZ, 2008 # # Distributed under the terms of the MIT license. @@ -75,9 +75,6 @@ #--------------------- PREFERENCES -------------------# ################### -- Edit below! -- #################
-# Added a new feature! Please update and add the settings in order -# to improve the intelligence of this script ;-) -# Regex to get the semi-protection template templateSemiProtection = { 'en': None, 'it':[r'{{(?:[Tt]emplate:|)[Aa]vvisobloccoparziale(?:|[ _]scad|.*?||.*?)}}', @@ -110,12 +107,21 @@ 'ja':[ur'(?<!<nowiki>){{(?:[Tt]emplate:|)移動保護(?:[Ss]|)(?:|.+|)}}(?!</nowiki>)\s*(?:\r\n|)*'], 'zh':[ur'{{(?:[Tt]emplate:|)Protected|(?:[Mm]|[Mm]ove|移[動动])(?:|.+|)}}(\n+?|)',ur'{{(?:[Tt]emplate:|)Mini-protected|(?:[Mm]|[Mm]ove|移[動动])(?:|.+|)}}(\n+?|)',ur'{{(?:[Tt]emplate:|)Protected-logo|(?:[Mm]|[Mm]ove|移[動动])(?:|.+|)}}(\n+?|)'], } -# Array: 0 => Semi-block, 1 => Total Block, 2 => Semi-Move, 3 => Total-Move + +# If you use only one template for all the type of protection, put it here. +# You may use only one template or an unique template and some other "old" template that the +# script should still check (as on it.wikipedia) +templateUnique = { + 'en': None, + 'it': [r'{{(?:[Tt]emplate:|)[Pp]rotetta}}'], +} + +# Array: 0 => Semi-block, 1 => Total Block, 2 => Semi-Move, 3 => Total-Move, 4 => template-unique templateNoRegex = { - 'it':['{{Avvisobloccoparziale}}', '{{Avvisoblocco}}', None, None], - 'fr':['{{Semi-protection}}', '{{Protection}}', None, None], - 'ja':[u'{{半保護}}', u'{{保護}}', u'{{移動半保護}}', u'{{移動保護}}'], - 'zh':[u'{{Protected/semi}}',u'{{Protected}}',u'{{Protected/ms}}',u'{{Protected/move}}'], + 'it':['{{Avvisobloccoparziale}}', '{{Avvisoblocco}}', None, None, '{{Protetta}}'], + 'fr':['{{Semi-protection}}', '{{Protection}}', None, None, None], + 'ja':[u'{{半保護}}', u'{{保護}}', u'{{移動半保護}}', u'{{移動保護}}', None], + 'zh':[u'{{Protected/semi}}',u'{{Protected}}',u'{{Protected/ms}}',u'{{Protected/move}}', None], }
# Category where the bot will check @@ -124,7 +130,7 @@ 'ar':[u'تصنيف:محتويات محمية'], 'fr':[u'Category:Page semi-protégée', u'Category:Page protégée', u'Catégorie:Article protégé'], 'he':[u'קטגוריה:ויקיפדיה: דפים מוגנים', u'קטגוריה:ויקיפדיה: דפים מוגנים חלקית'], - 'it':[u'Categoria:Pagine semiprotette', u'Categoria:Voci_protette'], + 'it':[u'Categoria:Pagine semiprotette', u'Categoria:Voci protette', u'Categoria:Pagine protette - scadute'], 'ja':[u'Category:編集保護中の記事',u'Category:編集半保護中の記事', u'Category:移動保護中の記事',], 'pt':[u'Category:!Páginas protegidas', u'Category:!Páginas semiprotegidas'], @@ -149,7 +155,7 @@ #------------------ END PREFERENCES ------------------# ################## -- Edit above! -- ##################
-def understandBlock(text, TTP, TSP, TSMP, TTMP): +def understandBlock(text, TTP, TSP, TSMP, TTMP, TU): """ Understand if the page is blocked and if it has the right template """ for catchRegex in TTP: # TTP = templateTotalProtection resultCatch = re.findall(catchRegex, text) @@ -159,6 +165,10 @@ resultCatch = re.findall(catchRegex, text) if resultCatch: return ('autoconfirmed-total', catchRegex) + for catchRegex in TU: + resultCatch = re.findall(catchRegex, text) + if resultCatch: + return ('unique', catchRegex) if TSMP != None and TTMP != None and TTP != TTMP and TSP != TSMP: for catchRegex in TTMP: resultCatch = re.findall(catchRegex, text) @@ -235,6 +245,7 @@ TSMP = wikipedia.translate(site, templateSemiMoveProtection) TTMP = wikipedia.translate(site, templateTotalMoveProtection) TNR = wikipedia.translate(site, templateNoRegex) + TU = wikipedia.translate(site, templateUnique)
category = wikipedia.translate(site, categoryToCheck) commentUsed = wikipedia.translate(site, comment) @@ -285,7 +296,7 @@
# Understand, according to the template in the page, what should be the protection # and compare it with what there really is. - TemplateInThePage = understandBlock(text, TTP, TSP, TSMP, TTMP) + TemplateInThePage = understandBlock(text, TTP, TSP, TSMP, TTMP, TU) # Only to see if the text is the same or not... oldtext = text # keep track of the changes for each step (edit then move) @@ -294,31 +305,37 @@ if not editRestr: # page is not edit-protected # Deleting the template because the page doesn't need it. - replaceToPerform = u'|'.join(TTP + TSP) + replaceToPerform = u'|'.join(TTP + TSP + TU) text, changes = re.subn('(?:<noinclude>|)(%s)(?:</noinclude>|)' % replaceToPerform, '', text) wikipedia.output(u'The page is editable for all, deleting the template...')
elif editRestr[0] == 'sysop': # total edit protection - if TemplateInThePage[0] == 'sysop-total' and TTP != None: + if (TemplateInThePage[0] == 'sysop-total' and TTP != None) or (TemplateInThePage[0] == 'unique' and TU != None): msg = 'The page is protected to the sysop' if not moveBlockCheck: msg += ', skipping...' wikipedia.output(msg) else: wikipedia.output(u'The page is protected to the sysop, but the template seems not correct. Fixing...') - text, changes = re.subn(TemplateInThePage[1], TNR[1], text) + if TU != None: + text, changes = re.subn(TemplateInThePage[1], TNR[4], text) + else: + text, changes = re.subn(TemplateInThePage[1], TNR[1], text)
- elif TSP != None: + elif TSP != None or TU != None: # implicitely editRestr[0] = 'autoconfirmed', edit-Semi-protection - if TemplateInThePage[0] == 'autoconfirmed-total': + if TemplateInThePage[0] == 'autoconfirmed-total' or TemplateInThePage[0] == 'unique': msg = 'The page is editable only for the autoconfirmed users' if not moveBlockCheck: msg += ', skipping...' wikipedia.output(msg) else: wikipedia.output(u'The page is editable only for the autoconfirmed users, but the template seems not correct. Fixing...') - text, changes = re.subn(TemplateInThePage[1], TNR[0], text) + if TU != None: + text, changes = re.subn(TemplateInThePage[1], TNR[4], text) + else: + text, changes = re.subn(TemplateInThePage[1], TNR[0], text)
if changes == 0: # We tried to fix edit-protection templates, but it did not work. @@ -332,23 +349,29 @@ if not moveRestr: wikipedia.output(u'The page is movable for all, deleting the template...') # Deleting the template because the page doesn't need it. - replaceToPerform = u'|'.join(TSMP + TTMP) + replaceToPerform = u'|'.join(TSMP + TTMP + TU) text, changes = re.subn('(?:<noinclude>|)(%s)(?:</noinclude>|)' % replaceToPerform, '', text)
elif moveRestr[0] == 'sysop': # move-total-protection - if TemplateInThePage[0] == 'sysop-move' and TTMP != None: + if (TemplateInThePage[0] == 'sysop-move' and TTMP != None) or (TemplateInThePage[0] == 'unique' and TU != None): wikipedia.output(u'The page is protected from moving to the sysop, skipping...') else: wikipedia.output(u'The page is protected from moving to the sysop, but the template seems not correct. Fixing...') + if TU != None: + text, changes = re.subn(TemplateInThePage[1], TNR[4], text) + else: text, changes = re.subn(TemplateInThePage[1], TNR[3], text)
- elif TSMP != None: + elif TSMP != None or TU != None: # implicitely moveRestr[0] = 'autoconfirmed', move-semi-protection - if TemplateInThePage[0] == 'autoconfirmed-move': + if TemplateInThePage[0] == 'autoconfirmed-move' or TemplateInThePage[0] == 'unique': wikipedia.output(u'The page is movable only for the autoconfirmed users, skipping...') else: wikipedia.output(u'The page is movable only for the autoconfirmed users, but the template seems not correct. Fixing...') + if TU != None: + text, changes = re.subn(TemplateInThePage[1], TNR[4], text) + else: text, changes = re.subn(TemplateInThePage[1], TNR[2], text)
if changes == 0:
pywikipedia-svn@lists.wikimedia.org