summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--ipalib/cli.py19
-rw-r--r--ipalib/plugins.py17
-rw-r--r--ipalib/public.py5
3 files changed, 31 insertions, 10 deletions
diff --git a/ipalib/cli.py b/ipalib/cli.py
index e0ba11f8..40edc890 100644
--- a/ipalib/cli.py
+++ b/ipalib/cli.py
@@ -21,8 +21,9 @@
Functionality for Command Line Inteface.
"""
-import sys
import re
+import sys
+import optparse
def to_cli(name):
@@ -43,6 +44,10 @@ def from_cli(cli_name):
return cli_name.replace('-', '_')
+def _(arg):
+ return arg
+
+
class CLI(object):
def __init__(self, api):
self.__api = api
@@ -74,4 +79,14 @@ class CLI(object):
self.run_cmd(cmd)
def run_cmd(self, cmd):
- print self[cmd]
+ (options, args) = self.build_parser(cmd)
+ print options
+
+ def build_parser(self, cmd):
+ parser = optparse.OptionParser()
+ for option in self[cmd].options:
+ parser.add_option('--%s' % to_cli(option.name),
+ help=option.get_doc(_),
+ )
+
+ (options, args) parser.parse_args()
diff --git a/ipalib/plugins.py b/ipalib/plugins.py
index 90bc184f..68731044 100644
--- a/ipalib/plugins.py
+++ b/ipalib/plugins.py
@@ -60,16 +60,19 @@ api.register(user_find)
# Register some properties for the 'user' object:
-class user_firstname(public.prop):
- pass
-api.register(user_firstname)
+class user_givenname(public.prop):
+ def get_doc(self, _):
+ return _('user first name')
+api.register(user_givenname)
-class user_lastname(public.prop):
- pass
-api.register(user_lastname)
+class user_sn(public.prop):
+ def get_doc(self, _):
+ return _('user last name')
+api.register(user_sn)
class user_login(public.prop):
- pass
+ def get_doc(self, _):
+ return _('user login')
api.register(user_login)
diff --git a/ipalib/public.py b/ipalib/public.py
index 57e9c002..e66e1368 100644
--- a/ipalib/public.py
+++ b/ipalib/public.py
@@ -45,6 +45,7 @@ class option(plugable.Plugin):
"""
__public__ = frozenset((
+ 'get_doc',
'normalize',
'default',
'validate',
@@ -167,7 +168,9 @@ class cmd(plugable.Plugin):
Returns the NameSpace containing the option proxy objects.
"""
if self.__options is None:
- self.__options = plugable.NameSpace(self.get_options())
+ object.__setattr__(self, '_cmd__options',
+ plugable.NameSpace(self.get_options()),
+ )
return self.__options
options = property(__get_options)