258: Added some experimental features for interactively prompting for values

This commit is contained in:
Jason Gerard DeRose
2008-09-04 07:18:26 +00:00
parent 01b73e6910
commit 71d36aa6a0
2 changed files with 40 additions and 0 deletions

View File

@@ -147,8 +147,32 @@ class CLI(object):
def run_cmd(self, cmd, argv):
(args, kw) = self.parse(cmd, argv)
self.run_interactive(cmd, args, kw)
def run_interactive(self, cmd, args, kw):
for option in cmd.smart_option_order():
if option.name not in kw:
default = option.get_default(**kw)
if default is None:
prompt = '%s: ' % option.name
else:
prompt = '%s [%s]: ' % (option.name, default)
error = None
while True:
if error is not None:
print '>>> %s: %s' % (option.name, error)
value = raw_input(prompt)
if default is not None and len(value) == 0:
value = default
if len(value) == 0:
error = 'Must supply a value'
else:
kw[option.name] = value
break
cmd(*args, **kw)
def parse(self, cmd, argv):
parser = self.build_parser(cmd)
(kwc, args) = parser.parse_args(argv, KWCollector())