327: Improved formatting on show-api cli command

This commit is contained in:
Jason Gerard DeRose 2008-09-24 05:35:40 +00:00
parent f3ac709922
commit eaf15d5a52
2 changed files with 32 additions and 10 deletions

View File

@ -94,26 +94,46 @@ class console(frontend.Application):
) )
class namespaces(frontend.Application):
'Show details of plugable namespaces'
def run(self): class show_api(text_ui):
lines = self.__traverse() 'Show attributes on dynamic API object'
takes_args = ('namespaces*',)
def run(self, namespaces):
if namespaces is None:
names = tuple(self.api)
else:
for name in namespaces:
if name not in self.api:
exit_error('api has no such namespace: %s' % name)
names = namespaces
lines = self.__traverse(names)
ml = max(len(l[1]) for l in lines) ml = max(len(l[1]) for l in lines)
self.print_name()
first = True
for line in lines: for line in lines:
if line[0] == 0: if line[0] == 0 and not first:
print '' print ''
if first:
first = False
print '%s%s %r' % ( print '%s%s %r' % (
' ' * line[0], ' ' * line[0],
line[1].ljust(ml), line[1].ljust(ml),
line[2], line[2],
) )
if len(lines) == 1:
s = '1 attribute shown.'
else:
s = '%d attributes show.' % len(lines)
self.print_dashed(s)
def __traverse(self):
def __traverse(self, names):
lines = [] lines = []
for name in self.api: for name in names:
namespace = self.api[name] namespace = self.api[name]
self.__traverse_namespace(name, namespace, lines) self.__traverse_namespace('%s' % name, namespace, lines)
return lines return lines
def __traverse_namespace(self, name, namespace, lines, tab=0): def __traverse_namespace(self, name, namespace, lines, tab=0):
@ -155,7 +175,7 @@ class plugins(text_ui):
cli_application_commands = ( cli_application_commands = (
help, help,
console, console,
namespaces, show_api,
plugins, plugins,
) )
@ -253,6 +273,8 @@ class CLI(object):
def run_interactive(self, cmd, kw): def run_interactive(self, cmd, kw):
for param in cmd.params(): for param in cmd.params():
if param.name not in kw: if param.name not in kw:
if not param.required:
continue
default = param.get_default(**kw) default = param.get_default(**kw)
if default is None: if default is None:
prompt = '%s: ' % param.name prompt = '%s: ' % param.name

View File

@ -356,7 +356,7 @@ class Command(plugable.Plugin):
kw = self.convert(**kw) kw = self.convert(**kw)
kw.update(self.get_default(**kw)) kw.update(self.get_default(**kw))
self.validate(**kw) self.validate(**kw)
args = tuple(kw.pop(name) for name in self.args) args = tuple(kw.pop(name, None) for name in self.args)
return self.run(*args, **kw) return self.run(*args, **kw)
def run(self, *args, **kw): def run(self, *args, **kw):