jenkins-bot has submitted this change and it was merged.
Change subject: [FEAT] Raise QuitKeyboardInterrupt on Ctrl+C and Quit/q ......................................................................
[FEAT] Raise QuitKeyboardInterrupt on Ctrl+C and Quit/q
Whenever 'input()' is used all KeyboardInterrupts are changed into QuitKeyboardInterrupts. As 'inputChoice()' uses 'input()' as well this applies also to 'inputChoice()'.
Also sorted the inputs and didn't rename 'pywikibot' to 'wikipedia'.
Change-Id: Ib3ef5aef5d0f7ab7338a2ec9dfdf7592c4067923 --- M pywikibot/bot.py M pywikibot/userinterfaces/terminal_interface_base.py 2 files changed, 15 insertions(+), 16 deletions(-)
Approvals: John Vandenberg: Looks good to me, approved jenkins-bot: Verified
diff --git a/pywikibot/bot.py b/pywikibot/bot.py index 1011d85..2417922 100644 --- a/pywikibot/bot.py +++ b/pywikibot/bot.py @@ -909,10 +909,6 @@ pywikibot.output('\nUser quit %s bot run...' % self.__class__.__name__) except KeyboardInterrupt: - # TODO: If the ^C occurred during an input() - # it should be handled as a QuitKeyboardInterrupt - # as developers shouldnt need a backtrace to find - # where the input() code is. if config.verbose_output: raise else: diff --git a/pywikibot/userinterfaces/terminal_interface_base.py b/pywikibot/userinterfaces/terminal_interface_base.py index 411cc31..c1363e1 100755 --- a/pywikibot/userinterfaces/terminal_interface_base.py +++ b/pywikibot/userinterfaces/terminal_interface_base.py @@ -9,10 +9,10 @@ from . import transliteration import re import sys -import pywikibot as wikipedia +import logging +import pywikibot from pywikibot import config from pywikibot.bot import VERBOSE, INFO, STDOUT, INPUT, WARNING -import logging
transliterator = transliteration.transliterator(config.console_encoding)
@@ -185,11 +185,14 @@ sys.stdout.write('\07') # TODO: make sure this is logged as well self.output(question + ' ') - if password: - import getpass - text = getpass.getpass('') - else: - text = self._raw_input() + try: + if password: + import getpass + text = getpass.getpass('') + else: + text = self._raw_input() + except KeyboardInterrupt: + raise pywikibot.QuitKeyboardInterrupt() text = unicode(text, self.encoding) return text
@@ -245,20 +248,20 @@ """Show the user a CAPTCHA image and return the answer.""" try: import webbrowser - wikipedia.output(u'Opening CAPTCHA in your web browser...') + pywikibot.output(u'Opening CAPTCHA in your web browser...') if webbrowser.open(url): - return wikipedia.input( + return pywikibot.input( u'What is the solution of the CAPTCHA that is shown in ' u'your web browser?') else: raise except: - wikipedia.output(u'Error in opening web browser: %s' + pywikibot.output(u'Error in opening web browser: %s' % sys.exc_info()[0]) - wikipedia.output( + pywikibot.output( u'Please copy this url to your web browser and open it:\n %s' % url) - return wikipedia.input( + return pywikibot.input( u'What is the solution of the CAPTCHA at this url ?')
def argvu(self):