110: Started fleshing out more in cli.py

This commit is contained in:
Jason Gerard DeRose 2008-08-11 19:35:57 +00:00
parent 5313e5a491
commit 9282418291
5 changed files with 65 additions and 3 deletions

6
ipa
View File

@ -27,6 +27,12 @@ Just proof of concept stuff in here right now.
import sys import sys
from ipalib.startup import api from ipalib.startup import api
from ipalib.cli import CLI
cli = CLI(api)
cli.run()
sys.exit()
TAB_WIDTH = 2 TAB_WIDTH = 2

View File

@ -21,6 +21,8 @@
Functionality for Command Line Inteface. Functionality for Command Line Inteface.
""" """
import sys
import re
def to_cli(name): def to_cli(name):
""" """
@ -38,3 +40,32 @@ def from_cli(cli_name):
""" """
assert isinstance(cli_name, basestring) assert isinstance(cli_name, basestring)
return cli_name.replace('-', '_') return cli_name.replace('-', '_')
class CLI(object):
def __init__(self, api):
self.__api = api
def __get_api(self):
return self.__api
api = property(__get_api)
def print_commands(self):
for cmd in self.api.cmd:
print to_cli(cmd.name)
def run(self):
if len(sys.argv) < 2:
self.print_commands()
print 'Usage: ipa COMMAND [OPTIONS]'
sys.exit(2)
return
name= sys.argv[1]
if name == '_api_':
print_api()
sys.exit()
elif name not in api.cmd:
print_commands()
print 'ipa: ERROR: unknown command %r' % name
sys.exit(2)
api.cmd[name]()

View File

@ -199,7 +199,7 @@ class cmd(plugable.Plugin):
if key in self.options: if key in self.options:
self.options[key].validate(value) self.options[key].validate(value)
def execute(self, **kw) def execute(self, **kw):
pass pass
def print_n_call(self, method, kw): def print_n_call(self, method, kw):
@ -214,8 +214,7 @@ class cmd(plugable.Plugin):
kw = self.normalize(**kw) kw = self.normalize(**kw)
kw.update(self.default(**kw)) kw.update(self.default(**kw))
self.validate(**kw) self.validate(**kw)
self.execute(**kw) return self.execute(**kw)
class obj(plugable.Plugin): class obj(plugable.Plugin):

View File

@ -21,6 +21,7 @@
Unit tests for `ipalib.cli` module. Unit tests for `ipalib.cli` module.
""" """
from tstutil import raises, getitem, no_set, no_del, read_only, ClassChecker
from ipalib import cli from ipalib import cli
@ -34,3 +35,21 @@ def test_from_cli():
f = cli.from_cli f = cli.from_cli
assert f('initialize') == 'initialize' assert f('initialize') == 'initialize'
assert f('user-add') == 'user_add' assert f('user-add') == 'user_add'
class test_CLI(ClassChecker):
"""
Tests the `CLI` class.
"""
_cls = cli.CLI
def test_class(self):
assert type(self.cls.api) is property
def test_api(self):
"""
Tests the `api` property.
"""
api = 'the plugable.API instance'
o = self.cls(api)
assert read_only(o, 'api') is api

View File

@ -267,6 +267,13 @@ class test_cmd(ClassChecker):
sub.validate(**okay) sub.validate(**okay)
raises(errors.RuleError, sub.validate, **fail) raises(errors.RuleError, sub.validate, **fail)
def test_execute(self):
"""
Tests the `execute` method.
"""
assert 'execute' in self.cls.__public__ # Public
def test_obj(): def test_obj():
cls = public.obj cls = public.obj