Add common helper for interactive prompts

This patch adds a common method, textui.prompt_helper, that handles
encoding, decoding and error handling for interactive prompts.
On EOFError (Ctrl+D) or  KeyboardInterrupt (Ctrl+C), it raises
a new InvocationError, PromptFailed.

The helper is used in prompt, prompt_yesno, and prompt_password,
each of which originally only handled one of Ctrl+C and Ctrl+D.
This fixes https://fedorahosted.org/freeipa/ticket/2345
And it means prompt_yesno will no longer return None on error.

A minor fix restores errors.py's ability print out the list of
errors when run as a script.
This commit is contained in:
Petr Viktorin
2012-02-09 09:09:03 -05:00
committed by Rob Crittenden
parent 8125c11a8d
commit efb37739ab
2 changed files with 40 additions and 30 deletions

View File

@@ -816,6 +816,15 @@ class NotConfiguredError(InvocationError):
format = _('Client is not configured. Run ipa-client-install.')
class PromptFailed(InvocationError):
"""
**3014** Raise when an interactive prompt failed.
"""
errno = 3014
format = _('Could not get %(name)s interactively')
##############################################################################
# 4000 - 4999: Execution errors
@@ -1587,5 +1596,5 @@ public_errors = tuple(
if __name__ == '__main__':
for klass in public_errors:
print '%d\t%s' % (klass.code, klass.__name__)
print '%d\t%s' % (klass.errno, klass.__name__)
print '(%d public errors)' % len(public_errors)