Merge pull request #49 from gbrindisi/prompt

Added basic yes/no prompt module
This commit is contained in:
Kenneth Reitz
2012-04-06 10:05:22 -07:00
2 changed files with 51 additions and 1 deletions
+2 -1
View File
@@ -19,4 +19,5 @@ Patches and Suggestions
- takluyver
- kracekumar
- Alejandro Gómez <alejandrogomez>
- Jason Piper <jpiper>
- Jason Piper <jpiper>
- Gianluca Brindisi <gbrindisi>
+49
View File
@@ -0,0 +1,49 @@
# -*- coding: utf8 -*-
"""
clint.textui.prompt
~~~~~~~~~~~~~~~~~~~
Module for simple interactive prompts handling
"""
from __future__ import absolute_import
from re import match, I
def yn(prompt, default='y', batch=False):
# A sanity check against default value
# If not y/n then y is assumed
if default not in ['y', 'n']:
default = 'y'
# Let's build the prompt
choicebox = '[Y/n]' if default == 'y' else '[y/N]'
prompt = prompt + ' ' + choicebox + ' '
# If input is not a yes/no variant or empty
# keep asking
while True:
# If batch option is True then auto reply
# with default input
if not batch:
input = raw_input(prompt).strip()
else:
print prompt
input = ''
# If input is empty default choice is assumed
# so we return True
if input == '':
return True
# Given 'yes' as input if default choice is y
# then return True, False otherwise
if match('y(?:es)?', input, I):
return True if default == 'y' else False
# Given 'no' as input if default choice is n
# then return True, False otherwise
elif match('n(?:o)?', input, I):
return True if default == 'n' else False