test/data/vclamp_jpk/README: Document sample versions
[hooke.git] / hooke / command.py
index 1cdb56f80f43647c63d4f9b198a2cc78e090bf93..be5a6773a3c396d0b51d6d0744b3c895f4e6e1cd 100644 (file)
@@ -1,3 +1,20 @@
+# Copyright (C) 2010-2012 W. Trevor King <wking@tremily.us>
+#
+# This file is part of Hooke.
+#
+# Hooke is free software: you can redistribute it and/or modify it under the
+# terms of the GNU Lesser General Public License as published by the Free
+# Software Foundation, either version 3 of the License, or (at your option) any
+# later version.
+#
+# Hooke 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 Lesser General Public License for more
+# details.
+#
+# You should have received a copy of the GNU Lesser General Public License
+# along with Hooke.  If not, see <http://www.gnu.org/licenses/>.
+
 """The `command` module provides :class:`Command`\s and
 :class:`Argument`\s for defining commands.
 
@@ -76,12 +93,15 @@ class Command (object):
     Arguments:
     <BLANKLINE>
     help BOOL (bool) Print a help message.
+    stack BOOL (bool) Add this command to appropriate command stacks.
     <BLANKLINE>
     An example Command.
     ITEM:
     <BLANKLINE>
     """
-    def __init__(self, name, aliases=None, arguments=[], help=''):
+    def __init__(self, name, aliases=None, arguments=[], help='',
+                 plugin=None):
+        # TODO: see_also=[other,command,instances,...]
         self.name = name
         if aliases == None:
             aliases = []
@@ -89,8 +109,11 @@ class Command (object):
         self.arguments = [
             Argument(name='help', type='bool', default=False, count=1,
                      help='Print a help message.'),
+            Argument(name='stack', type='bool', default=True, count=1,
+                     help='Add this command to appropriate command stacks.'),
             ] + arguments
         self._help = help
+        self.plugin = plugin
 
     def run(self, hooke, inqueue=None, outqueue=None, **kwargs):
         """`Normalize inputs and handle <Argument help> before punting
@@ -120,7 +143,7 @@ class Command (object):
         outqueue.put(e)
         return 0
 
-    def _run(self, inqueue, outqueue, params):
+    def _run(self, hooke, inqueue, outqueue, params):
         """This is where the command-specific magic will happen.
         """
         pass
@@ -229,9 +252,6 @@ class Argument (object):
         """
         pass # TODO: validation
 
-    # TODO: type conversion
-
-# TODO: type extensions?
 
 # Useful callbacks
 
@@ -271,4 +291,4 @@ class PrintQueue (NullQueue):
     def put(self, item, block=True, timeout=None):
         """Print `item` and then dump it into the void.
         """
-        print 'ITEM:\n%s' % item
+        print('ITEM:\n{}'.format(item))