From 337c9964d42066368460da9a7c0d770142e2d1c3 Mon Sep 17 00:00:00 2001 From: Jason Gerard DeRose Date: Wed, 13 Aug 2008 06:25:42 +0000 Subject: 145: Added new CLI.parse() method; added corresponding unit tests --- ipalib/cli.py | 16 +++++++++++++++- ipalib/tests/test_cli.py | 17 +++++++++++++++++ 2 files changed, 32 insertions(+), 1 deletion(-) (limited to 'ipalib') diff --git a/ipalib/cli.py b/ipalib/cli.py index 6f0305d64..bf96d3698 100644 --- a/ipalib/cli.py +++ b/ipalib/cli.py @@ -97,7 +97,9 @@ class CLI(object): sys.exit(2) self.run_cmd(cmd, sys.argv[2:]) - def run_cmd(self, cmd, args): + def run_cmd(self, cmd, given): + print self.parse(given) + sys.exit(0) kw = dict(self.parse_kw(args)) self[cmd](**kw) @@ -110,6 +112,18 @@ class CLI(object): m.group(2), ) + def parse(self, given): + args = [] + kw = {} + for g in given: + m = re.match(r'^--([a-z][-a-z0-9]*)=(.+)$', g) + if m: + kw[from_cli(m.group(1))] = m.group(2) + else: + args.append(g) + return (args, kw) + + def __get_mcl(self): """ Returns the Max Command Length. diff --git a/ipalib/tests/test_cli.py b/ipalib/tests/test_cli.py index e80dee43a..4e2942d7f 100644 --- a/ipalib/tests/test_cli.py +++ b/ipalib/tests/test_cli.py @@ -98,6 +98,23 @@ class test_CLI(ClassChecker): args = tuple('--%s=%s' % (cli.to_cli(k), v) for (k,v) in kw.items()) assert dict(o.parse_kw(args)) == kw + def test_parse(self): + """ + Tests the `parse` method. + """ + o = self.cls(None) + args = ['hello', 'naughty', 'nurse'] + kw = dict( + first_name='Naughty', + last_name='Nurse', + ) + opts = ['--%s=%s' % (k.replace('_', '-'), v) for (k, v) in kw.items()] + assert o.parse(args + []) == (args, {}) + assert o.parse(opts + []) == ([], kw) + assert o.parse(args + opts) == (args, kw) + assert o.parse(opts + args) == (args, kw) + + def test_mcl(self): """ Tests the `mcl` (Max Command Length) property . -- cgit