summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPetr Viktorin <pviktori@redhat.com>2013-02-22 07:25:03 -0500
committerMartin Kosek <mkosek@redhat.com>2013-02-26 18:19:27 +0100
commit6b1111d1619dd82967421768fb84870e7e9cc5d6 (patch)
tree8b4eb3c3545a9f29416a0be49fffd09e48aaeb44
parent6540a25979b1c5dc87c2bacee9b96a5be8150a5e (diff)
downloadfreeipa.git-6b1111d1619dd82967421768fb84870e7e9cc5d6.tar.gz
freeipa.git-6b1111d1619dd82967421768fb84870e7e9cc5d6.tar.xz
freeipa.git-6b1111d1619dd82967421768fb84870e7e9cc5d6.zip
cli: Do interactive prompting after a context is created
Some commands require a connection for interactive prompting. Prompt after the connection is created. Option parsing is still done before connecting so that help can be printed out without a Kerberos ticket. https://fedorahosted.org/freeipa/ticket/3453
-rw-r--r--ipalib/cli.py6
-rw-r--r--tests/test_cmdline/test_cli.py3
2 files changed, 5 insertions, 4 deletions
diff --git a/ipalib/cli.py b/ipalib/cli.py
index f1d2f874..d267170c 100644
--- a/ipalib/cli.py
+++ b/ipalib/cli.py
@@ -1039,9 +1039,8 @@ class cli(backend.Executioner):
cmd = self.Command[name]
return cmd
- def argv_to_keyword_arguments(self, cmd, argv):
+ def process_keyword_arguments(self, cmd, kw):
"""Get the keyword arguments for a Command"""
- kw = self.parse(cmd, argv)
if self.env.interactive:
self.prompt_interactively(cmd, kw)
kw = cmd.split_csv(**kw)
@@ -1062,10 +1061,11 @@ class cli(backend.Executioner):
if cmd is None:
return
name = cmd.name
- kw = self.argv_to_keyword_arguments(cmd, argv[1:])
+ kw = self.parse(cmd, argv[1:])
if not isinstance(cmd, frontend.Local):
self.create_context()
try:
+ kw = self.process_keyword_arguments(cmd, kw)
result = self.execute(name, **kw)
if callable(cmd.output_for_cli):
for param in cmd.params():
diff --git a/tests/test_cmdline/test_cli.py b/tests/test_cmdline/test_cli.py
index 4d730d58..58d73775 100644
--- a/tests/test_cmdline/test_cli.py
+++ b/tests/test_cmdline/test_cli.py
@@ -18,7 +18,8 @@ class TestCLIParsing(object):
executioner = api.Backend.cli
cmd = executioner.get_command(argv)
- kw_got = executioner.argv_to_keyword_arguments(cmd, argv[1:])
+ kw_got = executioner.parse(cmd, argv[1:])
+ kw_got = executioner.process_keyword_arguments(cmd, kw_got)
util.assert_deepequal(expected_command_name, cmd.name, 'Command name')
util.assert_deepequal(kw_expected, kw_got)