runner: tweaked runner to make it easier to extend with additional subcommands

runner provides the main point of entry for the 'tahoe' command, and 
provides various subcommands by default. this provides a hook whereby
additional subcommands can be added in in other contexts, providing a
simple way to extend the (sub)commands space available through 'tahoe'
This commit is contained in:
robk-tahoe 2008-02-19 17:05:14 -07:00
parent f75c17ed29
commit 21f2d03203
1 changed files with 13 additions and 11 deletions

View File

@ -19,19 +19,19 @@ class Options(BaseOptions, usage.Options):
if not hasattr(self, 'subOptions'): if not hasattr(self, 'subOptions'):
raise usage.UsageError("must specify a command") raise usage.UsageError("must specify a command")
class OptionsNoNodeControl(Options):
synopsis = "Usage: tahoe <command> [command options]"
subCommands = []
subCommands += _general_commands
def runner(argv, run_by_human=True, stdout=sys.stdout, stderr=sys.stderr, def runner(argv, run_by_human=True, stdout=sys.stdout, stderr=sys.stderr,
install_node_control=True): install_node_control=True, additional_commands=None):
if install_node_control:
config = Options() config = Options()
else: if install_node_control:
config = OptionsNoNodeControl() config.subCommands.extend(startstop_node.subCommands)
ac_dispatch = {}
if additional_commands:
for ac in additional_commands:
config.subCommands.extend(ac.subCommands)
ac_dispatch.update(ac.dispatch)
try: try:
config.parseOptions(argv) config.parseOptions(argv)
except usage.error, e: except usage.error, e:
@ -60,6 +60,8 @@ def runner(argv, run_by_human=True, stdout=sys.stdout, stderr=sys.stderr,
rc = debug.dispatch[command](so, stdout, stderr) rc = debug.dispatch[command](so, stdout, stderr)
elif command in cli.dispatch: elif command in cli.dispatch:
rc = cli.dispatch[command](so, stdout, stderr) rc = cli.dispatch[command](so, stdout, stderr)
elif command in ac_dispatch:
rc = ac_dispatch[command](so, stdout, stderr)
else: else:
raise usage.UsageError() raise usage.UsageError()