Revision: 5343
Author: siebrand
Date: 2008-05-09 16:32:01 +0000 (Fri, 09 May 2008)
Log Message:
-----------
Add feature to replace local image with shared repo image. New switches:
-replace: replace with confirmation
-replacealways: replace without confirmation (switch from image.py)
-replaceloose: use loose pattern matching when replacing (switch from image.py)
Modified Paths:
--------------
trunk/pywikipedia/nowcommons.py
Modified: trunk/pywikipedia/nowcommons.py
===================================================================
--- trunk/pywikipedia/nowcommons.py 2008-05-09 11:35:15 UTC (rev 5342)
+++ trunk/pywikipedia/nowcommons.py 2008-05-09 16:32:01 UTC (rev 5343)
@@ -9,13 +9,27 @@
the source wiki. If multiple versions of the file exist, the script will not
delete. If the MD5 comparison is not equal, the script will not delete.
-A sysop account is required for this script to work.
+A sysop account on the local wiki is required if you want this script to work
+properly.
This script understands various command-line arguments:
- -autonomous: run automatically, do not ask any questions. All files
- that qualify for deletion are deleted. Reduced screen
- output.
+ -autonomous: run automatically, do not ask any questions. All files
+ that qualify for deletion are deleted. Reduced screen
+ output.
+ -replace: replace links if the files are equal and the file names
+ differ
+
+ -replacealways: replace links if the files are equal and the file names
+ differ without asking for confirmation
+
+ -replaceloose: Do loose replacements. This will replace all occurences
+ of the name of the image (and not just explicit image
+ syntax). This should work to catch all instances of the
+ file, including where it is used as a template parameter
+ or in galleries. However, it can also make more
+ mistakes.
+
Known issues. Please fix these if you are capable and motivated:
- if a file marked nowcommons is not present on Wikimedia Commons, the bot
will exit.
@@ -31,14 +45,25 @@
import sys, re
import wikipedia, pagegenerators
+import image
# only for nowCommonsMessage
from imagetransfer import nowCommonsMessage
autonomous = False
+replace = False
+replacealways = False
+replaceloose = False
for arg in wikipedia.handleArgs():
if arg == '-autonomous':
autonomous = True
+ if arg == '-replace':
+ replace = True
+ if arg == '-replacealways':
+ replace = True
+ replacealways = True
+ if arg == '-replaceloose':
+ replaceloose = True
nowCommons = {
'_default': [
@@ -65,7 +90,7 @@
u'גם בוויקישיתוף'
],
'ja':[
- u'NowCommons',
+ u'NowCommons',
],
'ia': [
u'OraInCommons'
@@ -82,7 +107,7 @@
u'NowCommons'
],
'zh':[
- u'NowCommons',
+ u'NowCommons',
u'Nowcommons',
u'NCT',
],
@@ -104,7 +129,7 @@
def __init__(self):
self.site = wikipedia.getSite()
if repr(self.site) == 'commons:commons':
- sys.exit('Don\'t run this bot on Commons!')
+ sys.exit('Do not run this bot on Commons!')
ncList = self.ncTemplates()
self.nowCommonsTemplate = wikipedia.Page(self.site, 'Template:' + ncList[0])
@@ -150,23 +175,23 @@
if not filenameOnCommons:
wikipedia.output(u'NowCommons template not found.')
continue
- commonsImagePage = wikipedia.ImagePage(commons,
- 'Image:%s' % filenameOnCommons)
+ commonsImagePage = wikipedia.ImagePage(commons, 'Image:%s' % filenameOnCommons)
if len(localImagePage.getFileVersionHistory()) > 1:
- wikipedia.output(u"""\
-This image has a version history. Please delete it manually after making sure
-that the old versions aren't worth keeping.""")
+ wikipedia.output(u"This image has a version history. Please delete it manually after making sure that the old versions are not worth keeping.""")
continue
if localImagePage.titleWithoutNamespace() != commonsImagePage.titleWithoutNamespace():
usingPages = list(localImagePage.usingPages())
if usingPages and usingPages != [localImagePage]:
- wikipedia.output(
- '%s is still used in %i pages. Please change them manually.'
- % (localImagePage.title(), len(usingPages)))
+ wikipedia.output(u'\"\03{lightred}%s\03{default}\" is still used in %i pages.' % (localImagePage.titleWithoutNamespace(), len(usingPages)))
+ if replace == True:
+ wikipedia.output(u'Replacing \"\03{lightred}%s\03{default}\" by \"\03{lightgreen}%s\03{default}\".' % (localImagePage.titleWithoutNamespace(), commonsImagePage.titleWithoutNamespace()))
+ oImageRobot = image.ImageRobot(pagegenerators.FileLinksGenerator(localImagePage), localImagePage.titleWithoutNamespace(), commonsImagePage.titleWithoutNamespace(), '', replacealways, replaceloose)
+ oImageRobot.run()
+ else:
+ wikipedia.output(u'Please change them manually.')
continue
else:
- wikipedia.output('No page is using %s anymore.'
- % localImagePage.title())
+ wikipedia.output(u'No page is using \"\03{lightgreen}%s\03{default}\" anymore.' % localImagePage.titleWithoutNamespace())
commonsText = commonsImagePage.get()
if md5 == commonsImagePage.getFileMd5Sum():
wikipedia.output(u'The image is identical to the one on Commons.')
@@ -180,6 +205,8 @@
localImagePage.delete(comment + ' [[:commons:Image:%s]]' % filenameOnCommons, prompt = False)
else:
localImagePage.delete(comment + ' [[:commons:Image:%s]]' % filenameOnCommons, prompt = False)
+ else:
+ wikipedia.output(u'The image is not identical to the one on Commons.')
except (wikipedia.NoPage, wikipedia.IsRedirectPage), e:
wikipedia.output(u'%s' % e)
continue