+# 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.
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 = []
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.'),
+ 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
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
if name != argument.name:
params.remove(name)
params[argument.name] = value
- if argument.callback != None:
- value = argument.callback(hooke, self, argument, value)
- params[argument.name] = value
+ if argument.callback != None:
+ value = argument.callback(hooke, self, argument, value)
+ params[argument.name] = value
argument.validate(value)
return params
"""
pass # TODO: validation
- # TODO: type conversion
-
-# TODO: type extensions?
# Useful callbacks
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))