Fix command name output of `be --complete`.
authorW. Trevor King <wking@drexel.edu>
Mon, 1 Feb 2010 16:36:21 +0000 (11:36 -0500)
committerW. Trevor King <wking@drexel.edu>
Mon, 1 Feb 2010 16:36:21 +0000 (11:36 -0500)
By adding command_names option to libbe.command.commands.  Previous
versions of `be --complete` printed "import_xml", not "import-xml".

Also fixed libbe.command.base's doctests, so test.py can run them.

libbe/command/base.py
libbe/command/util.py

index 6df04dba94dfe12e23258ec91d05d62086357ec3..6b1c05037c4d658e1e8f63f29c77378b7f6020f8 100644 (file)
@@ -72,10 +72,38 @@ def get_command_class(module=None, command_name=None):
         raise UnknownCommand(command_name)
     return cmd
 
-def commands():
+def modname_to_command_name(modname):
+    """Little hack to replicate
+    >>> import sys
+    >>> def real_modname_to_command_name(modname):
+    ...     mod = libbe.util.plugin.import_by_name(
+    ...         'libbe.command.%s' % modname)
+    ...     attrs = [getattr(mod, name) for name in dir(mod)]
+    ...     commands = []
+    ...     for attr_name in dir(mod):
+    ...         attr = getattr(mod, attr_name)
+    ...         try:
+    ...             if issubclass(attr, Command):
+    ...                 commands.append(attr)
+    ...         except TypeError, e:
+    ...             pass
+    ...     if len(commands) == 0:
+    ...         raise Exception('No Command classes in %s' % dir(mod))
+    ...     return commands[0].name
+    >>> real_modname_to_command_name('new')
+    'new'
+    >>> real_modname_to_command_name('import_xml')
+    'import-xml'
+    """
+    return modname.replace('_', '-')
+
+def commands(command_names=False):
     for modname in libbe.util.plugin.modnames('libbe.command'):
         if modname not in ['base', 'util']:
-            yield modname
+            if command_names == False:
+                yield modname
+            else:
+                yield modname_to_command_name(modname)
 
 class CommandInput (object):
     def __init__(self, name, help=''):
@@ -393,9 +421,10 @@ class StringInputOutput (InputOutput):
     >>> s.stdin.read()
     'hello'
     >>> s.stdin.read()
+    ''
     >>> print >> s.stdout, 'goodbye'
     >>> s.get_stdout()
-    'goodbye\n'
+    'goodbye\\n'
     >>> s.get_stdout()
     ''
 
@@ -406,7 +435,7 @@ class StringInputOutput (InputOutput):
     u'hello'
     >>> print >> s.stdout, u'goodbye'
     >>> s.get_stdout()
-    u'goodbye\n'
+    u'goodbye\\n'
     """
     def __init__(self):
         stdin = StringIO.StringIO()
index 977b596be209d8b0e5ef3b64709a00bc91dfe351..6e8e36c985302fc5a1b668125c6f96d5119f19fa 100644 (file)
@@ -32,7 +32,7 @@ def complete_command(command, argument, fragment=None):
 
     command argument is not used.
     """
-    return list(libbe.command.commands())
+    return list(libbe.command.commands(command_names=True))
 
 def comp_path(fragment=None):
     """List possible path completions for fragment."""