[Pywikipedia-l] SVN: [5296] trunk/pywikipedia/checkimages.py

filnik at svn.wikimedia.org filnik at svn.wikimedia.org
Fri May 2 14:32:05 UTC 2008


Revision: 5296
Author:   filnik
Date:     2008-05-02 14:32:04 +0000 (Fri, 02 May 2008)

Log Message:
-----------
Improving the duplicates detection and report

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

Modified: trunk/pywikipedia/checkimages.py
===================================================================
--- trunk/pywikipedia/checkimages.py	2008-05-02 12:47:15 UTC (rev 5295)
+++ trunk/pywikipedia/checkimages.py	2008-05-02 14:32:04 UTC (rev 5296)
@@ -316,7 +316,18 @@
         'it': u"{{subst:Utente:Filbot/Template_insufficiente|%s}} --~~~~",
         'ta': None,
         }
- 
+# Stub - will make it better in future (no time now)
+duplicatesText = {
+        'commons':u'\n{{Dupe|__image__}}',
+        'en':None,
+        'it':u'\n{{Cancella subito|Immagine doppia di __image__}}',
+        }
+duplicatesRegex = {
+        'commons':r'\{\{(?:[Tt]emplate:|)[Dd]upe[|}]',
+        'en':None,
+        'it':r'\{\{(?:[Tt]emplate:|)[Cc]ancella[ _]subito[|}]',
+        }
+
 # Add your project (in alphabetical order) if you want that the bot start
 project_inserted = [u'ar', u'commons', u'de', u'en', u'ja', u'hu', u'it', u'ta', u'zh']
 
@@ -569,6 +580,10 @@
 
     def checkImageDuplicated(self, image):
         """ Function to check the duplicated images. """
+        # {{Dupe|Image:Blanche_Montel.jpg}}
+        # report(unvertext, imageName, notification, head)
+        dupText = wikipedia.translate(self.site, duplicatesText)
+        dupRegex = wikipedia.translate(self.site, duplicatesRegex)
         self.image = image
         duplicateRegex = r'\n\*(?:\[\[:Image:%s\]\] has the following duplicates:|\*\[\[:Image:%s\]\])$' % (self.convert_to_url(self.image), self.convert_to_url(self.image))
         imagePage = wikipedia.ImagePage(self.site, 'Image:%s' % self.image)
@@ -594,8 +609,20 @@
             for duplicate in duplicates:
                 if self.convert_to_url(duplicate) == self.convert_to_url(self.image):
                     continue # the image itself, not report also this as duplicate
-                repme += "\n**[[:Image:%s]]" % self.convert_to_url(duplicate)
-            self.report_image(self.image, self.rep_page, self.com, repme, addings = False, regex = duplicateRegex)
+                repme += "\n**[[:Image:%s]]" % self.convert_to_url(duplicate)    
+            result = self.report_image(self.image, self.rep_page, self.com, repme, addings = False, regex = duplicateRegex)
+            if result and not dupText == None and not dupRegex == None:
+                for duplicate in duplicates:
+                    if self.convert_to_url(duplicate) == self.convert_to_url(self.image):
+                        continue # the image itself, not report also this as duplicate
+                    DupePage = wikipedia.Page(self.site, u'Image:%s' % duplicate)
+                    try:
+                        DupPageText = DupePage.get()
+                    except wikipedia.NoPage:
+                        continue # The page doesn't exists
+                    if re.findall(dupRegex, DupPageText) == []:
+                        wikipedia.output(u'Adding the duplicate template in the image...')
+                        report(re.sub(r'__image__', r'%s' % self.image, dupText), duplicate)                
         return True # Ok - No problem. Let's continue the checking phase
         
     def report_image(self, image, rep_page = None, com = None, rep_text = None, addings = True, regex = None):
@@ -690,13 +717,14 @@
 
 # I've seen that the report class before (the main) was to long to be called so,
 # here there is a function that has all the settings, so i can call it once ^__^
-def report(newtext, image, notification, head, notification2 = None, unver = True, commx = None, bot_list = bot_list):
+def report(newtext, image, notification = None, head = None, notification2 = None, unver = True, commx = None, bot_list = bot_list):
     # Adding the bot's nickname at the notification text if needed.
     botolist = wikipedia.translate(wikipedia.getSite(), bot_list)
     project = wikipedia.getSite().family.name
     bot = config.usernames[project]
     botnick = bot[wikipedia.getSite().lang]
-    notification = re.sub('__botnick__', botnick, notification)
+    if notification != None:
+        notification = re.sub('__botnick__', botnick, notification)
     if notification2 != None:
         notification2 = re.sub('__botnick__', botnick, notification2)
     # Ok, done, let's loop.
@@ -727,14 +755,17 @@
             else:
                 if resPutMex == False:
                     break
-        try:
-            run.put_talk(notification, head, notification2, commx)
-        except wikipedia.EditConflict:
-            wikipedia.output(u"Edit Conflict! Retrying...")
+        if notification != None and head != None:
             try:
                 run.put_talk(notification, head, notification2, commx)
-            except:
-                wikipedia.output(u"Another error... skipping the user..")
+            except wikipedia.EditConflict:
+                wikipedia.output(u"Edit Conflict! Retrying...")
+                try:
+                    run.put_talk(notification, head, notification2, commx)
+                except:
+                    wikipedia.output(u"Another error... skipping the user..")
+                    break
+            else:
                 break
         else:
             break





More information about the Pywikipedia-l mailing list