Move hooke/test/default.000 -> test/data/picoforce.000
[hooke.git] / hooke / command.py
index 21e09b8060b51e16c2bd992b91452df4b74a45b5..1cdb56f80f43647c63d4f9b198a2cc78e090bf93 100644 (file)
@@ -1,5 +1,10 @@
 """The `command` module provides :class:`Command`\s and
 :class:`Argument`\s for defining commands.
+
+It also provides :class:`CommandExit` and subclasses for communicating
+command completion information between
+:class:`hooke.engine.CommandEngine`\s and
+:class:`hooke.ui.UserInterface`\s.
 """
 
 import Queue as queue
@@ -57,37 +62,14 @@ class UncaughtException (Failure):
             setattr(self, key, value)
         self.args = (self.traceback + str(self.exception),)
 
-class Interaction (object):
-    """Mid-command inter-process interaction.
-    """
-    pass
-
-class Request (Interaction):
-    """Command engine requests for information from the UI.
-    """
-    def __init__(self, msg, default=None):
-        super(Request, self).__init__()
-        self.msg = msg
-        self.default = default
-
-class Response (Interaction):
-    """UI response to a :class:`Request`.
-    """
-    def __init__(self, value):
-        super(Response, self).__init__()
-        self.value = value
-
-class BooleanRequest (Request):
-    pass
-
-class BooleanResponse (Response):
-    pass
 
 class Command (object):
     """One-line command description here.
 
     >>> c = Command(name='test', help='An example Command.')
-    >>> status = c.run(NullQueue(), PrintQueue(), help=True) # doctest: +REPORT_UDIFF
+    >>> hooke = None
+    >>> status = c.run(hooke, NullQueue(), PrintQueue(),
+    ...                help=True) # doctest: +REPORT_UDIFF
     ITEM:
     Command: test
     <BLANKLINE>
@@ -97,7 +79,7 @@ class Command (object):
     <BLANKLINE>
     An example Command.
     ITEM:
-    Success
+    <BLANKLINE>
     """
     def __init__(self, name, aliases=None, arguments=[], help=''):
         self.name = name
@@ -106,7 +88,7 @@ class Command (object):
         self.aliases = aliases
         self.arguments = [
             Argument(name='help', type='bool', default=False, count=1,
-                     callback=StoreValue(True), help='Print a help message.'),
+                     help='Print a help message.'),
             ] + arguments
         self._help = help
 
@@ -162,12 +144,14 @@ class Command (object):
                        '\n  '.join(['%s: %s' % (name,value)
                                     for name,value in sorted(settings)])))
             name,value = settings[0]
-            if name != argument.name:
-                params.remove(name)
+            if num_provided == 0:
                 params[argument.name] = value
+            else:
+                if name != argument.name:
+                    params.remove(name)
+                    params[argument.name] = value
             if argument.callback != None:
-                if num_provided > 0:
-                    value = argument.callback(hooke, self, argument, value)
+                value = argument.callback(hooke, self, argument, value)
                 params[argument.name] = value
             argument.validate(value)
         return params