[Pywikipedia-l] SVN: [4635] trunk/pywikipedia/blockpageschecker.py

filnik at svn.wikimedia.org filnik at svn.wikimedia.org
Mon Dec 3 17:09:51 UTC 2007


Revision: 4635
Author:   filnik
Date:     2007-12-03 17:09:51 +0000 (Mon, 03 Dec 2007)

Log Message:
-----------
Adding an except block to prevent server crash

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

Modified: trunk/pywikipedia/blockpageschecker.py
===================================================================
--- trunk/pywikipedia/blockpageschecker.py	2007-12-03 16:18:14 UTC (rev 4634)
+++ trunk/pywikipedia/blockpageschecker.py	2007-12-03 17:09:51 UTC (rev 4635)
@@ -55,6 +55,7 @@
     always = False
     generator = False
     genFactory = pagegenerators.GeneratorFactory()
+    errorCount = 0
     # Loading the default options.
     for arg in wikipedia.handleArgs():
         if arg == '-always':
@@ -103,28 +104,40 @@
                 wikipedia.output(u"\n\n>>> \03{lightpurple}%s\03{default} <<<" % page.title())
                 wikipedia.showDiff(oldtext, text)
                 choice = ''
-                if not always:
-                    choice = wikipedia.inputChoice(u'Do you want to accept these changes?', ['Yes', 'No', 'All'], ['y', 'N', 'a'], 'N')
-                if choice.lower() in ['a', 'all']:
-                    always = True
-                if choice.lower() in ['n', 'no']:
-                    break
-                if choice.lower() in ['y', 'yes'] or always:
-                    try:
-                        page.put(text, commentUsed)
-                    except wikipedia.EditConflict:
-                        wikipedia.output(u'Edit conflict! skip!')
-                        continue
-                    except wikipedia.SpamfilterError, e:
-                        wikipedia.output(u'Cannot change %s because of blacklist entry %s' % (page.title(), e.url))
-                        continue
-                    except wikipedia.PageNotSaved, error:
-                        wikipedia.output(u'Error putting page: %s' % (error.args,))
-                        continue
-                    except wikipedia.LockedPage:
-                        wikipedia.output(u'The page is still protected. Skipping...')
-                        continue
-
+                while 1:
+                    if not always:
+                        choice = wikipedia.inputChoice(u'Do you want to accept these changes?', ['Yes', 'No', 'All'], ['y', 'N', 'a'], 'N')
+                    if choice.lower() in ['a', 'all']:
+                        always = True
+                    if choice.lower() in ['n', 'no']:
+                        break
+                    if choice.lower() in ['y', 'yes'] or always:
+                        try:
+                            page.put(text, commentUsed)
+                        except wikipedia.EditConflict:
+                            wikipedia.output(u'Edit conflict! skip!')
+                            break
+                        except wikipedia.ServerError:
+                            errorCount += 1
+                            if errorCount < 5:
+                                wikipedia.output(u'Server Error! Wait..')
+                                time.sleep(3)
+                                continue
+                            else:
+                                raise wikipedia.ServerError(u'Fifth Server Error!')
+                        except wikipedia.SpamfilterError, e:
+                            wikipedia.output(u'Cannot change %s because of blacklist entry %s' % (page.title(), e.url))
+                            break
+                        except wikipedia.PageNotSaved, error:
+                            wikipedia.output(u'Error putting page: %s' % (error.args,))
+                            break
+                        except wikipedia.LockedPage:
+                            wikipedia.output(u'The page is still protected. Skipping...')
+                            break
+                        else:
+                            # Break only if the errors are one after the other...
+                            errorCount = 0
+                            break
 if __name__ == "__main__":
     try:
         main()





More information about the Pywikipedia-l mailing list