13: Starting playing around with 'ipa' cli script

This commit is contained in:
Jason Gerard DeRose 2008-07-20 03:32:22 +00:00
parent 739e67ca7d
commit 370282819d
2 changed files with 63 additions and 1 deletions

49
ipa Executable file
View File

@ -0,0 +1,49 @@
#!/usr/bin/python
# Authors:
# Jason Gerard DeRose <jderose@redhat.com>
#
# Copyright (C) 2008 Red Hat
# see file 'COPYING' for use and warranty information
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License as
# published by the Free Software Foundation; version 2 only
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
"""
Command Line Interface to IPA.
"""
import sys
from ipalib.startup import api
def print_commands():
print 'Commands:'
m = api.max_cmd_len
for c in api.commands:
c = c.replace('_', '-')
print ' %s The help on %s' % (c.ljust(m), c)
def print_help(cmd):
print 'Help on %s' % cmd
if len(sys.argv) < 2:
print_commands()
print 'Usage: ipa COMMAND [OPTIONS]'
sys.exit(2)
cmd = sys.argv[1]
if cmd not in api.commands:
print_commands()
print 'ipa: ERROR: unknown command %r' % cmd
sys.exit(2)

View File

@ -94,7 +94,7 @@ class NameSpace(object):
"""
Returns True if namespace has an item named `key`.
"""
return key in self.__kw
return key.replace('-', '_') in self.__kw
def __iter__(self):
"""
@ -132,6 +132,10 @@ class Named(object):
return self.__class__.__name__
name = property(__get_name)
def __get_doc(self):
return self.__class__.__doc__
doc = property(__get_doc)
class ObjectMember(Named):
def __init__(self, obj):
@ -189,6 +193,7 @@ class Object(Named):
class API(object):
__objects = None
__commands = None
__max_cmd_len = None
def __init__(self):
self.__obj_d = {}
@ -201,6 +206,14 @@ class API(object):
return self.__commands
commands = property(__get_commands)
def __get_max_cmd_len(self):
if self.__max_cmd_len is None:
if self.__commands is None:
return 0
self.__max_cmd_len = max(len(n) for n in self.__commands)
return self.__max_cmd_len
max_cmd_len = property(__get_max_cmd_len)
def register_object(self, cls, override=False):
assert type(override) is bool
if not (inspect.isclass(cls) and issubclass(cls, Object)):