summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJason Gerard DeRose <jderose@redhat.com>2008-09-04 04:39:01 +0000
committerJason Gerard DeRose <jderose@redhat.com>2008-09-04 04:39:01 +0000
commitab81ca56fd336af4b83ef19a6f97dffe0b1a0923 (patch)
tree05bebd08f4ae1672b2259f797613346745bb8272
parente1f8619d4adbc15415e2959496640c0f707c54fe (diff)
downloadfreeipa.git-ab81ca56fd336af4b83ef19a6f97dffe0b1a0923.tar.gz
freeipa.git-ab81ca56fd336af4b83ef19a6f97dffe0b1a0923.tar.xz
freeipa.git-ab81ca56fd336af4b83ef19a6f97dffe0b1a0923.zip
255: CLI help, console commands now subclass from public.Application; other tweeking to make CLI utilize Application
-rw-r--r--ipalib/__init__.py1
-rw-r--r--ipalib/cli.py18
-rw-r--r--ipalib/public.py6
-rw-r--r--ipalib/tests/test_cli.py5
-rw-r--r--ipalib/tests/test_public.py13
5 files changed, 27 insertions, 16 deletions
diff --git a/ipalib/__init__.py b/ipalib/__init__.py
index a5fc3f11..b0f0a1fc 100644
--- a/ipalib/__init__.py
+++ b/ipalib/__init__.py
@@ -61,4 +61,5 @@ api = plugable.API(
public.Object,
public.Method,
public.Property,
+ public.Application,
)
diff --git a/ipalib/cli.py b/ipalib/cli.py
index 989c24f6..e1cbfa78 100644
--- a/ipalib/cli.py
+++ b/ipalib/cli.py
@@ -44,7 +44,7 @@ def from_cli(cli_name):
return str(cli_name).replace('-', '_')
-class help(public.Command):
+class help(public.Application):
'Display help on command'
def __call__(self, key):
if from_cli(key) not in self.api.Command:
@@ -53,7 +53,7 @@ class help(public.Command):
print 'Help on command %r:' % key
-class console(public.Command):
+class console(public.Application):
'Start IPA Interactive Python Console'
def __call__(self):
@@ -95,10 +95,16 @@ class CLI(object):
api.register(help)
api.register(console)
api.finalize()
- def d_iter():
- for cmd in api.Command():
- yield (to_cli(cmd.name), cmd)
- self.__d = dict(d_iter())
+ for a in api.Application():
+ a.set_application(self)
+ self.build_map()
+
+ def build_map(self):
+ assert self.__d is None
+ self.__d = dict(
+ (c.name.replace('_', '-'), c) for c in self.api.Command()
+ )
+
def run(self):
self.finalize()
diff --git a/ipalib/public.py b/ipalib/public.py
index c6611ab7..eb94ac52 100644
--- a/ipalib/public.py
+++ b/ipalib/public.py
@@ -396,6 +396,7 @@ class Application(Command):
__public__ = frozenset((
'application',
+ 'set_application'
)).union(Command.__public__)
__application = None
@@ -404,7 +405,9 @@ class Application(Command):
Returns external ``application`` object.
"""
return self.__application
- def __set_application(self, application):
+ application = property(__get_application)
+
+ def set_application(self, application):
"""
Sets the external application object to ``application``.
"""
@@ -418,4 +421,3 @@ class Application(Command):
)
object.__setattr__(self, '_Application__application', application)
assert self.application is application
- application = property(__get_application, __set_application)
diff --git a/ipalib/tests/test_cli.py b/ipalib/tests/test_cli.py
index 2c65bd06..df3f943e 100644
--- a/ipalib/tests/test_cli.py
+++ b/ipalib/tests/test_cli.py
@@ -75,6 +75,7 @@ class DummyAPI(object):
+
class test_CLI(ClassChecker):
"""
Tests the `cli.CLI` class.
@@ -117,7 +118,7 @@ class test_CLI(ClassChecker):
len(api.Command) == cnt
o = self.cls(api)
assert o.mcl is None
- o.finalize()
+ o.build_map()
assert o.mcl == 6 # len('cmd_99')
def test_dict(self):
@@ -128,7 +129,7 @@ class test_CLI(ClassChecker):
api = DummyAPI(cnt)
assert len(api.Command) == cnt
o = self.cls(api)
- o.finalize()
+ o.build_map()
for cmd in api.Command():
key = cli.to_cli(cmd.name)
assert key in o
diff --git a/ipalib/tests/test_public.py b/ipalib/tests/test_public.py
index 52fb9336..c071832a 100644
--- a/ipalib/tests/test_public.py
+++ b/ipalib/tests/test_public.py
@@ -707,19 +707,20 @@ class test_Application(ClassChecker):
Tests the `public.Application.application` property.
"""
assert 'application' in self.cls.__public__ # Public
+ assert 'set_application' in self.cls.__public__ # Public
app = 'The external application'
class example(self.cls):
'A subclass'
for o in (self.cls(), example()):
- assert o.application is None
- e = raises(TypeError, setattr, o, 'application', None)
+ assert read_only(o, 'application') is None
+ e = raises(TypeError, o.set_application, None)
assert str(e) == (
'%s.application cannot be None' % o.__class__.__name__
)
- o.application = app
- assert o.application is app
- e = raises(AttributeError, setattr, o, 'application', app)
+ o.set_application(app)
+ assert read_only(o, 'application') is app
+ e = raises(AttributeError, o.set_application, app)
assert str(e) == (
'%s.application can only be set once' % o.__class__.__name__
)
- assert o.application is app
+ assert read_only(o, 'application') is app