jenkins-bot has submitted this change and it was merged.

Change subject: [FEAT/FIX] Use input_choice or new input_yn
......................................................................


[FEAT/FIX] Use input_choice or new input_yn

As inputChoice has been deprecated this updates all references to the
replacement (input_choice).

Also added input_yn which is like input_choice but returns a boolean and
automatically sets the answers to [y]es and [n]o.

Change-Id: Ib68e66a60e5bc5a78602253123312a380109657d
---
M generate_user_files.py
M pywikibot/__init__.py
M pywikibot/bot.py
M pywikibot/diff.py
M pywikibot/page.py
M scripts/add_text.py
M scripts/basic.py
M scripts/blockpageschecker.py
M scripts/blockreview.py
M scripts/capitalize_redirects.py
M scripts/casechecker.py
M scripts/cosmetic_changes.py
M scripts/interwiki.py
M scripts/maintenance/compat2core.py
M scripts/movepages.py
M scripts/nowcommons.py
M scripts/protect.py
M scripts/selflink.py
M scripts/solve_disambiguation.py
M scripts/spamremove.py
M scripts/template.py
M scripts/templatecount.py
M scripts/unlink.py
M scripts/upload.py
M scripts/welcome.py
25 files changed, 199 insertions(+), 208 deletions(-)

Approvals:
  John Vandenberg: Looks good to me, approved
  jenkins-bot: Verified



diff --git a/generate_user_files.py b/generate_user_files.py
index 8a99806..ea6915a 100644
--- a/generate_user_files.py
+++ b/generate_user_files.py
@@ -98,7 +98,7 @@
 set environment variables.""" % locals(), width=76)
     for line in msg:
         pywikibot.output(line)
-    if pywikibot.inputChoice("Is this OK?", ["yes", "no"], ["y", "n"], "n") == 
"y":
+    if pywikibot.input_yn('Is this OK?', default=False, automatic_quit=False):
         return new_base
     pywikibot.output("Aborting changes.")
     return False
@@ -170,10 +170,10 @@
     while not mylang:
         mylang = pywikibot.input(message) or default_lang
         if known_langs and mylang and mylang not in known_langs:
-            if pywikibot.inputChoice("The language code {0} is not in the "
-                                     "list of known languages. Do you want to "
-                                     "continue?".format(mylang),
-                                     ["yes", "no"], ["y", "n"], "n") == "n":
+            if not pywikibot.input_yn("The language code {0} is not in the "
+                                      "list of known languages. Do you want "
+                                      "to continue?".format(mylang),
+                                      default=False, automatic_quit=False):
                 mylang = None
 
     username = None
@@ -250,8 +250,8 @@
         main_family, main_lang, main_username = get_site_and_lang()
 
         usernames = [(main_family, main_lang, main_username)]
-        while pywikibot.inputChoice("Do you want to add any other projects?",
-                                    ["yes", "no"], ["y", "n"], "n") == "y":
+        while pywikibot.input_yn("Do you want to add any other projects?",
+                                 default=False, automatic_quit=False):
             usernames += [get_site_and_lang(main_family, main_lang,
                                             main_username)]
 
@@ -259,9 +259,9 @@
             u"usernames['{0}']['{1}'] = u'{2}'".format(*username)
             for username in usernames)
 
-        extended = pywikibot.inputChoice(
-            "Which variant of user_config.py?",
-            ["small", "extended (with further information)"], ["s", "e"]) == 
"e"
+        extended = pywikibot.input_yn("Would you like the extended version of "
+                                      "user-config.py, with explanations "
+                                      "included?", automatic_quit=False)
 
         if extended:
             # config2.py will be in the pywikibot/ directory relative to this
@@ -321,8 +321,8 @@
 if __name__ == "__main__":
     while True:
         pywikibot.output(u'\nYour default user directory is "%s"' % base_dir)
-        if pywikibot.inputChoice("How to proceed?", ["keep", "change"],
-                                 ["k", "c"], "k") == "c":
+        if pywikibot.input_yn("Do you want to use that directory?",
+                              default=False, automatic_quit=False):
             new_base = change_base_dir()
             if new_base:
                 base_dir = new_base
@@ -335,9 +335,10 @@
     while True:
         if os.path.exists(os.path.join(base_dir, "user-config.py")):
             break
-        if pywikibot.inputChoice(
+        if pywikibot.input_yn(
                 "Do you want to copy user files from an existing Pywikibot "
-                "installation?", ["yes", "no"], ["y", "n"]) == "y":
+                "installation?",
+                automatic_quit=False):
             oldpath = pywikibot.input("Path to existing user-config.py?")
             if not os.path.exists(oldpath):
                 pywikibot.error("Not a valid path")
@@ -361,16 +362,16 @@
         else:
             break
     if not os.path.isfile(os.path.join(base_dir, "user-config.py")):
-        if pywikibot.inputChoice("Create user-config.py file? Required for "
-                                 "running bots.",
-                                 ["yes", "no"], ["y", "n"], "n") == "y":
+        if pywikibot.input_yn('Create user-config.py file? Required for '
+                              'running bots.',
+                              default=False, automatic_quit=False):
             create_user_config()
     elif not copied_config:
         pywikibot.output("user-config.py already exists in the directory")
     if not os.path.isfile(os.path.join(base_dir, "user-fixes.py")):
-        if pywikibot.inputChoice("Create user-fixes.py file? Optional and for "
-                                 "advanced users.",
-                                 ["yes", "no"], ["y", "n"], "n") == "y":
+        if pywikibot.input_yn('Create user-fixes.py file? Optional and for '
+                              'advanced users.',
+                              default=False, automatic_quit=False):
             create_user_fixes()
     elif not copied_fixes:
         pywikibot.output("user-fixes.py already exists in the directory")
diff --git a/pywikibot/__init__.py b/pywikibot/__init__.py
index ad0c475..a007c9a 100644
--- a/pywikibot/__init__.py
+++ b/pywikibot/__init__.py
@@ -29,7 +29,7 @@
 from pywikibot import config2 as config
 from pywikibot.bot import (
     output, warning, error, critical, debug, stdout, exception,
-    input, input_choice, inputChoice, handle_args, showHelp, ui, log,
+    input, input_choice, input_yn, inputChoice, handle_args, showHelp, ui, log,
     calledModuleName, Bot, WikidataBot, QuitKeyboardInterrupt,
     # the following are flagged as deprecated on usage
     handleArgs,
@@ -68,7 +68,7 @@
            'ItemPage', 'PropertyPage', 'Claim', 'TimeStripper',
            'html2unicode', 'url2unicode', 'unicode2html',
            'stdout', 'output', 'warning', 'error', 'critical', 'debug',
-           'exception', 'input_choice', 'input', 'inputChoice',
+           'exception', 'input_choice', 'input', 'input_yn', 'inputChoice',
            'handle_args', 'handleArgs', 'showHelp', 'ui', 'log',
            'calledModuleName', 'Bot', 'WikidataBot',
            'Error', 'InvalidTitle', 'BadTitle', 'NoPage', 'SectionError',
@@ -699,11 +699,9 @@
             try:
                 _putthread.join(1)
             except KeyboardInterrupt:
-                answer = inputChoice(u"""\
-There are %i pages remaining in the queue. Estimated time remaining: %s
-Really exit?""" % remaining(),
-                    ['yes', 'no'], ['y', 'N'], 'N')
-                if answer == 'y':
+                if input_yn('There are %i pages remaining in the queue. '
+                            'Estimated time remaining: %s\nReally exit?'
+                            % remaining(), default=False, 
automatic_quit=False):
                     return
 
     # only need one drop() call because all throttles use the same global pid
diff --git a/pywikibot/bot.py b/pywikibot/bot.py
index 89ed75d..caafaca 100644
--- a/pywikibot/bot.py
+++ b/pywikibot/bot.py
@@ -516,6 +516,8 @@
     """
     Ask the user the question and return one of the valid answers.
 
+    @param question: The question asked without trailing spaces.
+    @type answers: basestring
     @param answers: The valid answers each containing a full length answer and
         a shortcut. Each value must be unique.
     @type answers: Iterable containing an iterable of length two
@@ -527,7 +529,7 @@
         returned.
     @type return_shortcut: bool
     @param automatic_quit: Adds the option 'Quit' ('q') and throw a
-            L{QuitKeyboardInterrupt} if selected (default).
+            L{QuitKeyboardInterrupt} if selected.
     @type automatic_quit: bool
     @return: The selected answer shortcut or index. Is -1 if the default is
         selected, it does not return the shortcut and the default is not a
@@ -542,6 +544,34 @@
                            automatic_quit)
 
 
+def input_yn(question, default=None, automatic_quit=True):
+    """
+    Ask the user a yes/no question and returns the answer as a bool.
+
+    @param question: The question asked without trailing spaces.
+    @type answers: basestring
+    @param default: The result if no answer was entered. It must be a bool or
+        'y' or 'n' and can be disabled by setting it to None.
+    @type default: basestring or bool
+    @param automatic_quit: Adds the option 'Quit' ('q') and throw a
+            L{QuitKeyboardInterrupt} if selected.
+    @type automatic_quit: bool
+    @return: Return True if the user selected yes and False if the user
+        selected no. If the default is not None it'll return True if default
+        is True or 'y' and False if default is False or 'n'.
+    @rtype: bool
+    """
+    if default not in ['y', 'Y', 'n', 'N']:
+        if default:
+            default = 'y'
+        elif default is not None:
+            default = 'n'
+    assert default in ['y', 'Y', 'n', 'N', None]
+
+    return input_choice(question, [('Yes', 'y'), ('No', 'n')], default,
+                        automatic_quit=automatic_quit) == 'y'
+
+
 @deprecated('input_choice')
 def inputChoice(question, answers, hotkeys, default=None):
     """Ask the user a question with several options, return the user's choice.
diff --git a/pywikibot/diff.py b/pywikibot/diff.py
index 346fcba..7ac30dc 100644
--- a/pywikibot/diff.py
+++ b/pywikibot/diff.py
@@ -245,8 +245,8 @@
                     ]
 
         question = 'Accept this hunk?'
-        answers = ['yes', 'no', 'stop', 'all', 'review', 'help']
-        hotkeys = ['y', 'n', 's', 'a', 'r', 'h']
+        answers = [('yes', 'y'), ('no', 'n'), ('stop', 's'), ('all', 'a'),
+                   ('review', 'r'), ('help', 'h')]
         actions = {'y': Hunk.APPR,
                    'n': Hunk.NOT_APPR,
                    's': Hunk.NOT_APPR,
@@ -261,7 +261,8 @@
             hunk = pending.pop(0)
 
             pywikibot.output(hunk.header + hunk.diff_text)
-            choice = pywikibot.inputChoice(question, answers, hotkeys, 
default='r')
+            choice = pywikibot.input_choice(question, answers, default='r',
+                                            automatic_quit=False)
 
             if choice in actions.keys():
                 hunk.reviewed = actions[choice]
diff --git a/pywikibot/page.py b/pywikibot/page.py
index 2c3db36..e3d0755 100644
--- a/pywikibot/page.py
+++ b/pywikibot/page.py
@@ -1476,12 +1476,11 @@
         if self.site.username(sysop=True):
             answer = u'y'
             if prompt and not hasattr(self.site, '_noDeletePrompt'):
-                answer = pywikibot.inputChoice(
+                answer = pywikibot.input_choice(
                     u'Do you want to delete %s?' % self.title(
                         asLink=True, forceInterwiki=True),
-                    ['Yes', 'No', 'All'],
-                    ['y', 'n', 'a'],
-                    'n')
+                    [('Yes', 'y'), ('No', 'n'), ('All', 'a')],
+                    'n', automatic_quit=False)
                 if answer == 'a':
                     answer = 'y'
                     self.site._noDeletePrompt = True
@@ -1491,13 +1490,12 @@
             if mark or hasattr(self.site, '_noMarkDeletePrompt'):
                 answer = 'y'
             else:
-                answer = pywikibot.inputChoice(
+                answer = pywikibot.input_choice(
                     u"Can't delete %s; do you want to mark it "
                     "for deletion instead?" % self.title(asLink=True,
                                                          forceInterwiki=True),
-                    ['Yes', 'No', 'All'],
-                    ['y', 'n', 'a'],
-                    'n')
+                    [('Yes', 'y'), ('No', 'n'), ('All', 'a')],
+                    'n', automatic_quit=False)
                 if answer == 'a':
                     answer = 'y'
                     self.site._noMarkDeletePrompt = True
@@ -1651,12 +1649,11 @@
             pywikibot.bot.warning(u'"prompt" argument of protect() is '
                                   'deprecated')
         if prompt and not hasattr(self.site, '_noProtectPrompt'):
-            answer = pywikibot.inputChoice(
+            answer = pywikibot.input_choice(
                 u'Do you want to change the protection level of %s?'
                 % self.title(asLink=True, forceInterwiki=True),
-                ['Yes', 'No', 'All'],
-                ['y', 'N', 'a'],
-                'N')
+                [('Yes', 'y'), ('No', 'n'), ('All', 'a')],
+                'n', automatic_quit=False)
             if answer == 'a':
                 answer = 'y'
                 self.site._noProtectPrompt = True
diff --git a/scripts/add_text.py b/scripts/add_text.py
index 8979dba..d90e0cd 100644
--- a/scripts/add_text.py
+++ b/scripts/add_text.py
@@ -222,10 +222,10 @@
         # text in the page
         if putText:
             if not always:
-                choice = pywikibot.inputChoice(
+                choice = pywikibot.input_choice(
                     u'Do you want to accept these changes?',
-                    ['Yes', 'No', 'All', 'open in Browser'],
-                    ['y', 'n', 'a', 'b'], 'n')
+                    [('Yes', 'y'), ('No', 'n'), ('All', 'a'),
+                     ('open in Browser', 'b')], 'n', automatic_quit=False)
                 if choice == 'a':
                     always = True
                 elif choice == 'n':
diff --git a/scripts/basic.py b/scripts/basic.py
index c1af240..9c315ea 100755
--- a/scripts/basic.py
+++ b/scripts/basic.py
@@ -111,10 +111,9 @@
             pywikibot.showDiff(page.get(), text)
             pywikibot.output(u'Comment: %s' % comment)
             if not self.dry:
-                choice = pywikibot.inputChoice(
-                    u'Do you want to accept these changes?',
-                    ['Yes', 'No'], ['y', 'N'], 'N')
-                if choice == 'y':
+                if pywikibot.input_yn(
+                        u'Do you want to accept these changes?',
+                        default=False, automatic_quit=False):
                     try:
                         page.text = text
                         # Save the page
diff --git a/scripts/blockpageschecker.py b/scripts/blockpageschecker.py
index fd548af..52fd2fb 100755
--- a/scripts/blockpageschecker.py
+++ b/scripts/blockpageschecker.py
@@ -189,9 +189,10 @@
 
 
 def showQuest(page):
-    quest = pywikibot.inputChoice(u'Do you want to open the page?',
-                                  ['with browser', 'with gui', 'no'],
-                                  ['b', 'g', 'n'], 'n')
+    quest = pywikibot.input_choice(
+        u'Do you want to open the page?',
+        [('with browser', 'b'), ('with gui', 'g'), ('no', 'n')], 'n',
+        automatic_quit=False)
     site = page.site
     url = '%s://%s%s?redirect=no' % (site.protocol(),
                                      site.hostname(),
@@ -452,10 +453,10 @@
                              % page.title())
             pywikibot.showDiff(oldtext, text)
             if not always:
-                choice = pywikibot.inputChoice(u'Do you want to accept these '
-                                               u'changes?',
-                                               ['Yes', 'No', 'All'],
-                                               ['y', 'N', 'a'], 'N')
+                choice = pywikibot.input_choice(u'Do you want to accept these '
+                                                u'changes?',
+                                                [('Yes', 'y'), ('No', 'n'),
+                                                 ('All', 'a')], 'n')
                 if choice == 'a':
                     always = True
             if always or choice == 'y':
diff --git a/scripts/blockreview.py b/scripts/blockreview.py
index f3f9c98..9abbe12 100644
--- a/scripts/blockreview.py
+++ b/scripts/blockreview.py
@@ -279,10 +279,9 @@
             pywikibot.showDiff(page.get(), text)
             pywikibot.output(u'Comment: %s' % comment)
             if not self.dry:
-                choice = pywikibot.inputChoice(
-                    u'Do you want to accept these changes?',
-                    ['Yes', 'No'], ['y', 'N'], 'N')
-                if choice == 'y':
+                if pywikibot.input_yn(
+                        u'Do you want to accept these changes?',
+                        default=False, automatic_quit=False):
                     page.text = text
                     try:
                         # Save the page
diff --git a/scripts/capitalize_redirects.py b/scripts/capitalize_redirects.py
index d646b38..d74921c 100644
--- a/scripts/capitalize_redirects.py
+++ b/scripts/capitalize_redirects.py
@@ -66,13 +66,11 @@
             pywikibot.output(u'%s doesn\'t exist'
                              % page_cap.title(asLink=True))
             if not self.getOption('always'):
-                choice = pywikibot.inputChoice(
+                choice = pywikibot.input_choice(
                     u'Do you want to create a redirect?',
-                    ['Yes', 'No', 'All', 'Quit'], ['y', 'N', 'a', 'q'], 'N')
+                    [('Yes', 'y'), ('No', 'n'), ('All', 'a')], 'n')
                 if choice == 'a':
                     self.options['always'] = True
-                elif choice == 'q':
-                    self.quit()
             if self.getOption('always') or choice == 'y':
                 comment = i18n.twtranslate(
                     page.site,
diff --git a/scripts/casechecker.py b/scripts/casechecker.py
index 7d0c4da..8bc2b23 100644
--- a/scripts/casechecker.py
+++ b/scripts/casechecker.py
@@ -380,10 +380,9 @@
                     if self.replace:
                         if len(err[1]) == 1:
                             newTitle = err[1][0]
-##                            choice = pywikibot.inputChoice(u'Move %s to %s?'
-##                                                           % (title, 
newTitle),
-##                                                           ['Yes', 'No'],
-##                                                           ['y', 'n'])
+##                            choice = pywikibot.input_yn(u'Move %s to %s?'
+##                                                        % (title, newTitle),
+##                                                        automatic_quit=False)
                             editSummary = i18n.twtranslate(
                                 self.site, "casechecker-rename")
                             dst = self.Page(newTitle)
@@ -680,12 +679,10 @@
                     msg = u'page exists'
                 self.ColorCodeWord(u'  %d: %s (%s)\n' % (count, t, msg), True)
                 count += 1
-            answers = [str(i) for i in xrange(0, count)]
-            choice = int(pywikibot.inputChoice(
-                u'Which link to choose? (0 to skip)',
-                answers, [a[0] for a in answers]))
-            if choice > 0:
-                return candidates[choice - 1]
+            answers = [('skip', 's')] + [(str(i), i) for i in range(1, count)]
+            choice = pywikibot.input_choice(u'Which link to choose?', answers)
+            if choice != 's':
+                return candidates[int(choice) - 1]
 
     def ColorCodeWord(self, word, toScreen=False):
         if not toScreen:
diff --git a/scripts/cosmetic_changes.py b/scripts/cosmetic_changes.py
index e02e7ca..f0c892d 100755
--- a/scripts/cosmetic_changes.py
+++ b/scripts/cosmetic_changes.py
@@ -938,7 +938,6 @@
     @param args: command line arguments
     @type args: list of unicode
     """
-    answer = 'y'
     options = {}
 
     # Process global args and prepare generator args parser
@@ -972,11 +971,9 @@
 
     gen = genFactory.getCombinedGenerator()
     if gen:
-        if not options.get('always'):
-            answer = pywikibot.inputChoice(
+        if options.get('always') or pywikibot.input_yn(
                 warning + '\nDo you really want to continue?',
-                ['yes', 'no'], ['y', 'n'], 'n')
-        if answer == 'y':
+                default=False, automatic_quit=False):
             site.login()
             preloadingGen = pagegenerators.PreloadingGenerator(gen)
             bot = CosmeticChangesBot(preloadingGen, **options)
diff --git a/scripts/interwiki.py b/scripts/interwiki.py
index 61bc6b0..89a04a6 100755
--- a/scripts/interwiki.py
+++ b/scripts/interwiki.py
@@ -1058,12 +1058,13 @@
                            linkedPage.namespace(), preferredPage))
                     return True
                 else:
-                    choice = pywikibot.inputChoice(
+                    choice = pywikibot.input_choice(
 u'WARNING: %s is in namespace %i, but %s is in namespace %i. Follow it anyway?'
                         % (self.originPage, self.originPage.namespace(),
                            linkedPage, linkedPage.namespace()),
-                        ['Yes', 'No', 'Add an alternative', 'give up'],
-                        ['y', 'n', 'a', 'g'])
+                        [('Yes', 'y'), ('No', 'n'),
+                         ('Add an alternative', 'a'), ('give up', 'g')],
+                        automatic_quit=False)
                     if choice != 'y':
                         # Fill up foundIn, so that we will not ask again
                         self.foundIn[linkedPage] = [linkingPage]
@@ -1146,12 +1147,13 @@
                         % (page, self.originPage, disambig))
                     return (True, None)
                 else:
-                    choice = pywikibot.inputChoice(
+                    choice = pywikibot.input_choice(
                         u"WARNING: %s is a disambiguation page, but %s doesn't 
"
                         u"seem to be one. Follow it anyway?"
                         % (self.originPage, page),
-                        ['Yes', 'No', 'Add an alternative', 'Give up'],
-                        ['y', 'n', 'a', 'g'])
+                        [('Yes', 'y'), ('No', 'n'),
+                         ('Add an alternative', 'a'), ('give up', 'g')],
+                        automatic_quit=False)
             elif not self.originPage.isDisambig() and page.isDisambig():
                 nondisambig = self.getFoundNonDisambig(page.site)
                 if nondisambig:
@@ -1161,12 +1163,13 @@
                         % (page, self.originPage, nondisambig))
                     return (True, None)
                 else:
-                    choice = pywikibot.inputChoice(
+                    choice = pywikibot.input_choice(
                         u'WARNING: %s doesn\'t seem to be a disambiguation '
                         u'page, but %s is one. Follow it anyway?'
                         % (self.originPage, page),
-                        ['Yes', 'No', 'Add an alternative', 'Give up'],
-                        ['y', 'n', 'a', 'g'])
+                        [('Yes', 'y'), ('No', 'n'),
+                         ('Add an alternative', 'a'), ('give up', 'g')],
+                        automatic_quit=False)
             if choice == 'n':
                 return (True, None)
             elif choice == 'a':
@@ -1581,7 +1584,11 @@
                         answer = 'a'
                     else:
                         # TODO: allow answer to repeat previous or go back 
after a mistake
-                        answer = pywikibot.inputChoice(u'What should be 
done?', ['accept', 'reject', 'give up', 'accept all'], ['a', 'r', 'g', 'l'], 
'a')
+                        answer = pywikibot.input_choice(
+                            u'What should be done?',
+                            [('accept', 'a'), ('reject', 'r'),
+                             ('give up', 'g'), ('accept all', 'l')], 'a',
+                            automatic_quit=False)
                     if answer == 'l':  # accept all
                         acceptall = True
                         answer = 'a'
@@ -1952,10 +1959,12 @@
                 # If we cannot ask, deny permission
                 answer = 'n'
             else:
-                answer = pywikibot.inputChoice(u'Submit?',
-                                               ['Yes', 'No', 'open in Browser',
-                                                'Give up', 'Always'],
-                                               ['y', 'n', 'b', 'g', 'a'])
+                answer = pywikibot.input_choice(u'Submit?',
+                                                [('Yes', 'y'), ('No', 'n'),
+                                                 ('open in Browser', 'b'),
+                                                 ('Give up', 'g'),
+                                                 ('Always', 'a')],
+                                                automatic_quit=False)
                 if answer == 'b':
                     webbrowser.open("http://%s%s"; % (
                         page.site.hostname(),
diff --git a/scripts/maintenance/compat2core.py 
b/scripts/maintenance/compat2core.py
index bc74cf3..90b318f 100644
--- a/scripts/maintenance/compat2core.py
+++ b/scripts/maintenance/compat2core.py
@@ -144,9 +144,9 @@
 
     def get_dest(self):
         self.dest = u'%s-core.%s' % tuple(self.source.rsplit(u'.', 1))
-        if not self.warnonly and pywikibot.inputChoice(
+        if not self.warnonly and not pywikibot.input_yn(
                 u'Destination file is %s.' % self.dest,
-                ['Yes', 'No'], ['y', 'n'], 'y') == 'n':
+                default=True, automatic_quit=False):
             pywikibot.output('Quitting...')
             exit()
 
diff --git a/scripts/movepages.py b/scripts/movepages.py
index d5fc6ec..59edd26 100644
--- a/scripts/movepages.py
+++ b/scripts/movepages.py
@@ -104,16 +104,14 @@
             newPageTitle = (u'%s%s' % (self.getOption('prefix'), pagetitle))
         if self.getOption('prefix') or self.appendAll or self.regexAll:
             if not self.getOption('always'):
-                choice2 = pywikibot.inputChoice(
+                choice2 = pywikibot.input_choice(
                     u'Change the page title to "%s"?' % newPageTitle,
-                    ['yes', 'no', 'all', 'quit'], ['y', 'n', 'a', 'q'])
+                    [('yes', 'y'), ('no', 'n'), ('all', 'a')])
                 if choice2 == 'y':
                     self.moveOne(page, newPageTitle)
                 elif choice2 == 'a':
                     self.options['always'] = True
                     self.moveOne(page, newPageTitle)
-                elif choice2 == 'q':
-                    self.quit()
                 elif choice2 == 'n':
                     pass
                 else:
@@ -121,12 +119,11 @@
             else:
                 self.moveOne(page, newPageTitle)
         else:
-            choice = pywikibot.inputChoice(u'What do you want to do?',
-                                           ['change page name',
-                                            'append to page name',
-                                            'use a regular expression',
-                                            'next page', 'quit'],
-                                           ['c', 'a', 'r', 'n', 'q'])
+            choice = pywikibot.input_choice(u'What do you want to do?',
+                                            [('change page name', 'c'),
+                                             ('append to page name', 'a'),
+                                             ('use a regular expression', 'r'),
+                                             ('next page', 'n')])
             if choice == 'c':
                 newPageTitle = pywikibot.input(u'New page name:')
                 self.moveOne(page, newPageTitle)
@@ -136,24 +133,20 @@
                 newPageTitle = (u'%s%s%s'
                                 % (self.pagestart, pagetitle, self.pageend))
                 if namesp:
-                    choice2 = pywikibot.inputChoice(
-                        u'Do you want to remove the namespace prefix "%s:"?'
-                        % namesp, ['yes', 'no'], ['y', 'n'])
-                    if choice2 == 'y':
+                    if pywikibot.input_yn(u'Do you want to remove the '
+                                          'namespace prefix "%s:"?' % namesp,
+                                          automatic_quit=False):
                         self.noNamespace = True
                     else:
                         newPageTitle = (u'%s:%s' % (namesp, newPageTitle))
-                choice2 = pywikibot.inputChoice(
+                choice2 = pywikibot.input_choice(
                     u'Change the page title to "%s"?'
-                    % newPageTitle, ['yes', 'no', 'all', 'quit'],
-                    ['y', 'n', 'a', 'q'])
+                    % newPageTitle, [('yes', 'y'), ('no', 'n'), ('all', 'a')])
                 if choice2 == 'y':
                     self.moveOne(page, newPageTitle)
                 elif choice2 == 'a':
                     self.appendAll = True
                     self.moveOne(page, newPageTitle)
-                elif choice2 == 'q':
-                    self.quit()
                 elif choice2 == 'n':
                     pass
                 else:
@@ -167,35 +160,29 @@
                     newPageTitle = self.regex.sub(self.replacePattern,
                                                   page.title())
                 else:
-                    choice2 = pywikibot.inputChoice(
-                        u'Do you want to remove the namespace prefix "%s:"?'
-                        % namesp, ['yes', 'no'], ['y', 'n'])
-                    if choice2 == 'y':
+                    if pywikibot.input_yn(u'Do you want to remove the '
+                                          'namespace prefix "%s:"?' % namesp,
+                                          automatic_quit=False):
                         newPageTitle = self.regex.sub(
                             self.replacePattern, 
page.title(withNamespace=False))
                         self.noNamespace = True
                     else:
                         newPageTitle = self.regex.sub(self.replacePattern,
                                                       page.title())
-                choice2 = pywikibot.inputChoice(
+                choice2 = pywikibot.input_choice(
                     u'Change the page title to "%s"?'
-                    % newPageTitle, ['yes', 'no', 'all', 'quit'],
-                    ['y', 'n', 'a', 'q'])
+                    % newPageTitle, [('yes', 'y'), ('no', 'n'), ('all', 'a')])
                 if choice2 == 'y':
                     self.moveOne(page, newPageTitle)
                 elif choice2 == 'a':
                     self.regexAll = True
                     self.moveOne(page, newPageTitle)
-                elif choice2 == 'q':
-                    self.quit()
                 elif choice2 == 'n':
                     pass
                 else:
                     self.treat(page)
             elif choice == 'n':
                 pass
-            elif choice == 'q':
-                self.quit()
             else:
                 self.treat(page)
 
diff --git a/scripts/nowcommons.py b/scripts/nowcommons.py
index b3494e4..7d27c71 100644
--- a/scripts/nowcommons.py
+++ b/scripts/nowcommons.py
@@ -246,14 +246,14 @@
                 webbrowser.open(url_local, 0, 1)
                 webbrowser.open(url_commons, 0, 1)
                 if image_local.split('Image:')[1] == image_commons:
-                    choice = pywikibot.inputChoice(
-                        u'The local and the commons images have the same name, 
continue?',
-                        ['Yes', 'No'], ['y', 'N'], 'N')
+                    choice = pywikibot.input_yn(
+                        u'The local and the commons images have the same name, 
'
+                        'continue?', default=False, automatic_quit=False)
                 else:
-                    choice = pywikibot.inputChoice(
+                    choice = pywikibot.input_yn(
                         u'Are the two images equal?',
-                        ['Yes', 'No'], ['y', 'N'], 'N')
-                if choice == 'y':
+                        default=False, automatic_quit=False)
+                if choice:
                     yield [image_local, image_commons]
                 else:
                     continue
@@ -413,11 +413,11 @@
                                 u'\n\n>>>> Description on 
\03{lightpurple}%s\03{default} <<<<\n'
                                 % commonsImagePage.title())
                             pywikibot.output(commonsText)
-                            choice = pywikibot.inputChoice(u'Does the 
description \
-                                                           on Commons contain 
all required source and license\n'
-                                                           u'information?',
-                                                           ['yes', 'no'], 
['y', 'N'], 'N')
-                            if choice == 'y':
+                            if pywikibot.input_yn(
+                                    u'Does the description on Commons contain '
+                                    'all required source and license\n'
+                                    'information?',
+                                    default=False, automatic_quit=False):
                                 localImagePage.delete(
                                     '%s [[:commons:Image:%s]]'
                                     % (comment, filenameOnCommons), 
prompt=False)
diff --git a/scripts/protect.py b/scripts/protect.py
index 0a4279f..09144fb 100644
--- a/scripts/protect.py
+++ b/scripts/protect.py
@@ -91,12 +91,11 @@
         for page in self.generator:
             self.current_page = page
             if not self.getOption('always'):
-                choice = pywikibot.inputChoice(
+                choice = pywikibot.input_choice(
                     u'Do you want to change the protection level of %s?'
                     % page.title(asLink=True, forceInterwiki=True),
-                    ['yes', 'No', 'all'],
-                    ['y', 'N', 'a'],
-                    'n')
+                    [('yes', 'y'), ('No', 'n'), ('all', 'a')],
+                    'n', automatic_quit=False)
                 if choice == 'n':
                     continue
                 elif choice == 'a':
@@ -128,9 +127,9 @@
                 num += 1
             if level == default:
                 default_char = first_char[-1]
-        choice = pywikibot.inputChoice('Choice a protection level to %s:'
-                                       % operation, levels, first_char,
-                                       default=default_char)
+        choice = pywikibot.input_choice('Choice a protection level to %s:'
+                                        % operation, zip(levels, first_char),
+                                        default=default_char)
 
         return levels[first_char.index(choice)]
     else:
diff --git a/scripts/selflink.py b/scripts/selflink.py
index cb21cc9..1687c97 100644
--- a/scripts/selflink.py
+++ b/scripts/selflink.py
@@ -55,7 +55,6 @@
             r'(?P<section>#[^\]\|]*)?'
             '(\|(?P<label>[^\]]*))?\]\]'
             r'(?P<linktrail>' + linktrail + ')')
-        self.done = False
 
     def handleNextLink(self, page, match, context=100):
         """Process the next link on a page, offering the user choices.
@@ -97,11 +96,10 @@
             matchText = match.group(0)
             pywikibot.output(
                 pre + '\03{lightred}' + matchText + '\03{default}' + post)
-            choice = pywikibot.inputChoice(
+            choice = pywikibot.input_choice(
                 u'\nWhat shall be done with this selflink?\n',
-                ['unlink', 'make bold', 'skip', 'edit', 'more context',
-                 'unlink all', 'quit'],
-                ['U', 'b', 's', 'e', 'm', 'a', 'q'], 'u')
+                [('unlink', 'u'), ('make bold', 'b'), ('skip', 's'),
+                 ('edit', 'e'), ('more context', 'm'), ('unlink all')], 'u')
             pywikibot.output(u'')
 
             if choice == 's':
@@ -121,9 +119,6 @@
                 return self.handleNextLink(page, match, context=context + 100)
             elif choice == 'a':
                 self.always = True
-            elif choice == 'q':
-                self.done = True
-                return False
 
         # choice was 'U', 'b', or 'a'
         new = match.group('label') or match.group('title')
@@ -151,7 +146,7 @@
                     % page.title(asLink=True))
                 return
             curpos = 0
-            while curpos < len(page.text) or self.done:
+            while curpos < len(page.text):
                 match = self.linkR.search(page.text, pos=curpos)
                 if not match:
                     break
@@ -176,12 +171,6 @@
                              % page.title(asLink=True))
         except pywikibot.LockedPage:
             pywikibot.output(u"Page %s is locked." % page.title(asLink=True))
-
-    def run(self):
-        for page in self.generator:
-            if self.done:
-                break
-            self.treat(page)
 
 
 def main(*args):
diff --git a/scripts/solve_disambiguation.py b/scripts/solve_disambiguation.py
index e79eab8..c3edae1 100644
--- a/scripts/solve_disambiguation.py
+++ b/scripts/solve_disambiguation.py
@@ -570,10 +570,9 @@
                              % (refPage.title(), disambPage.title()))
             if disambPage.isRedirectPage():
                 target = self.alternatives[0]
-                choice = pywikibot.inputChoice(
-                    u'Do you want to make redirect %s point to %s?'
-                    % (refPage.title(), target), ['yes', 'no'], ['y', 'N'], 
'N')
-                if choice == 'y':
+                if pywikibot.input_yn(u'Do you want to make redirect %s point '
+                                      'to %s?' % (refPage.title(), target),
+                                      default=False, automatic_quit=False):
                     redir_text = '#%s [[%s]]' \
                                  % (self.mysite.redirect(default=True), target)
                     try:
@@ -581,10 +580,11 @@
                     except pywikibot.PageNotSaved as error:
                         pywikibot.output(u'Page not saved: %s' % error.args)
             else:
-                choice = pywikibot.inputChoice(
+                choice = pywikibot.input_choice(
                     u'Do you want to work on pages linking to %s?'
-                    % refPage.title(), ['yes', 'no', 'change redirect'],
-                                       ['y', 'N', 'c'], 'N')
+                    % refPage.title(),
+                    [('yes', 'y'), ('no', 'n'), ('change redirect', 'c')], 'n',
+                    automatic_quit=False)
                 if choice == 'y':
                     gen = ReferringPageGeneratorWithIgnore(refPage,
                                                            self.primary)
@@ -1065,10 +1065,10 @@
                 if page.exists():
                     alternatives.append(page.title())
                 else:
-                    answer = pywikibot.inputChoice(
-                        u'Possibility %s does not actually exist. Use it 
anyway?'
-                        % page.title(), ['yes', 'no'], ['y', 'N'], 'N')
-                    if answer == 'y':
+                    if pywikibot.input_yn(
+                            u'Possibility %s does not actually exist. Use it '
+                            'anyway?' % page.title(),
+                            default=False, automatic_quit=False):
                         alternatives.append(page.title())
             else:
                 alternatives.append(arg[5:])
diff --git a/scripts/spamremove.py b/scripts/spamremove.py
index 17cb25f..ec92df4 100755
--- a/scripts/spamremove.py
+++ b/scripts/spamremove.py
@@ -100,9 +100,10 @@
         if always:
             answer = "y"
         else:
-            answer = pywikibot.inputChoice(u'\nDelete the red lines?',
-                                           ['yes', 'no', 'edit'],
-                                           ['y', 'N', 'e'], 'n')
+            answer = pywikibot.input_choice(
+                u'\nDelete the red lines?',
+                [('yes', 'y'), ('no', 'n'), ('edit', 'e')],
+                'n', automatic_quit=False)
         if answer == "n":
             continue
         elif answer == "e":
diff --git a/scripts/template.py b/scripts/template.py
index b6389d8..5eaa837 100755
--- a/scripts/template.py
+++ b/scripts/template.py
@@ -277,10 +277,8 @@
                 template = pywikibot.Page(site, new, ns=10)
                 if not template.exists():
                     pywikibot.warning(u'Template "%s" does not exist.' % new)
-                    choice = pywikibot.inputChoice(
-                        u'Do you want to proceed anyway?',
-                        ['Yes', 'No'], ['y', 'N'], 'N')
-                    if choice == 'n':
+                    if not pywikibot.input_yn('Do you want to proceed anyway?',
+                                              default=False, 
automatic_quit=False):
                         continue
                 replacements.append((templateRegex,
                                      '{{%s\g<parameters>}}' % new))
diff --git a/scripts/templatecount.py b/scripts/templatecount.py
index fd67c21..ab70b97 100644
--- a/scripts/templatecount.py
+++ b/scripts/templatecount.py
@@ -145,8 +145,10 @@
     if 'reflist' in argsList:
         pywikibot.output(
             u'NOTE: it will take a long time to count "reflist".')
-        choice = pywikibot.inputChoice(
-            u'Proceed anyway?', ['yes', 'no', 'skip'], ['y', 'n', 's'], 'y')
+        choice = pywikibot.input_choice(
+            u'Proceed anyway?',
+            [('yes', 'y'), ('no', 'n'), ('skip', 's')], 'y',
+            automatic_quit=False)
         if choice == 's':
             argsList.remove('reflist')
         elif choice == 'n':
diff --git a/scripts/unlink.py b/scripts/unlink.py
index a94ff9f..ea24f7c 100755
--- a/scripts/unlink.py
+++ b/scripts/unlink.py
@@ -104,11 +104,10 @@
                     text[max(0, match.start() - context):match.start()]
                     + '\03{lightred}' + text[match.start():match.end()]
                     + '\03{default}' + text[match.end():match.end() + context])
-                choice = pywikibot.inputChoice(
+                choice = pywikibot.input_choice(
                     u'\nWhat shall be done with this link?\n',
-                    ['unlink', 'skip', 'edit', 'more context',
-                     'unlink all', 'quit'],
-                    ['U', 's', 'e', 'm', 'a', 'q'], 'u')
+                    [('unlink', 'u'), ('skip', 's'), ('edit', 'e'),
+                     ('more context', 'm'), ('unlink all', 'a')], 'u')
                 pywikibot.output(u'')
 
                 if choice == 's':
@@ -128,8 +127,6 @@
                                                context=context + 100)
                 elif choice == 'a':
                     self.options['always'] = True
-                elif choice == 'q':
-                    self.quit()
             new = match.group('label') or match.group('title')
             new += match.group('linktrail')
             return text[:match.start()] + new + text[match.end():], False
diff --git a/scripts/upload.py b/scripts/upload.py
index 69127b0..90cb164 100755
--- a/scripts/upload.py
+++ b/scripts/upload.py
@@ -48,7 +48,6 @@
 import pywikibot
 import pywikibot.data.api
 from pywikibot import config
-from pywikibot.bot import QuitKeyboardInterrupt
 
 if sys.version_info[0] > 2:
     from urllib.parse import urlparse
@@ -190,11 +189,10 @@
                         'Invalid character(s): %s. Please try again' % c)
                     continue
                 if ext not in allowed_formats:
-                    choice = pywikibot.inputChoice(
-                        u"File format is not one of [%s], but %s. Continue?"
-                        % (u' '.join(allowed_formats), ext),
-                        ['yes', 'no'], ['y', 'N'], 'N')
-                    if choice == 'n':
+                    if not pywikibot.input_yn(
+                            u"File format is not one of [%s], but %s. 
Continue?"
+                            % (u' '.join(allowed_formats), ext),
+                            default=False, automatic_quit=False):
                         continue
                 break
             if newfn != '':
@@ -215,21 +213,16 @@
                     'without a summary/description.\03{default}')
 
             # if no description, default is 'yes'
-            default = 'y' if not self.description else 'n'
-            choice = pywikibot.inputChoice(
-                u'Do you want to change this description?',
-                ['Yes', 'No', 'Quit'], ['y', 'n', 'q'], default)
-            if choice == 'y':
+            if pywikibot.input_yn(
+                    u'Do you want to change this description?',
+                    default=not self.description):
                 from pywikibot import editor as editarticle
                 editor = editarticle.TextEditor()
                 newDescription = editor.edit(self.description)
                 # if user saved / didn't press Cancel
                 if newDescription:
                     self.description = newDescription
-            if choice == 'q':
-                raise QuitKeyboardInterrupt
-            else:
-                self.verifyDescription = False
+            self.verifyDescription = False
 
         return filename
 
@@ -272,12 +265,9 @@
         except pywikibot.data.api.UploadWarning as warn:
             pywikibot.output(
                 u'We got a warning message: {0}'.format(warn.message))
-            if self.abort_on_warn(warn.code):
-                answer = "N"
-            else:
-                answer = pywikibot.inputChoice(u"Do you want to ignore?",
-                                               ['Yes', 'No'], ['y', 'N'], 'N')
-            if answer == "y":
+            if (not self.abort_on_warn(warn.code) and
+                    pywikibot.input_yn(u"Do you want to ignore?",
+                                       default=False, automatic_quit=False)):
                 self.ignoreWarning = True
                 self.keepFilename = True
                 return self.upload_image(debug)
diff --git a/scripts/welcome.py b/scripts/welcome.py
index 63a9764..c37a582 100644
--- a/scripts/welcome.py
+++ b/scripts/welcome.py
@@ -563,10 +563,11 @@
         #Queue process
         if name:
             if globalvar.confirm:
-                answer = pywikibot.inputChoice(
+                answer = pywikibot.input_choice(
                     u'%s may have an unwanted username, do you want to report '
                     u'this user?' % name,
-                    ['Yes', 'No', 'All'], ['y', 'N', 'a'], 'N')
+                    [('Yes', 'y'), ('No', 'n'), ('All', 'a')], 'n',
+                    automatic_quit=False)
                 if answer in ['a', 'all']:
                     answer = 'y'
                     globalvar.confirm = False

-- 
To view, visit https://gerrit.wikimedia.org/r/168225
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings

Gerrit-MessageType: merged
Gerrit-Change-Id: Ib68e66a60e5bc5a78602253123312a380109657d
Gerrit-PatchSet: 7
Gerrit-Project: pywikibot/core
Gerrit-Branch: master
Gerrit-Owner: XZise <[email protected]>
Gerrit-Reviewer: John Vandenberg <[email protected]>
Gerrit-Reviewer: Ladsgroup <[email protected]>
Gerrit-Reviewer: Merlijn van Deen <[email protected]>
Gerrit-Reviewer: XZise <[email protected]>
Gerrit-Reviewer: jenkins-bot <>

_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits

Reply via email to