runner.py: new approach to dispatching

This commit is contained in:
Brian Warner 2016-02-17 16:03:30 -08:00
parent 3b447df0f4
commit d36d1cb063
2 changed files with 32 additions and 11 deletions

View File

@ -2,8 +2,6 @@ import argparse
from textwrap import dedent from textwrap import dedent
from .. import public_relay from .. import public_relay
from .. import __version__ from .. import __version__
from . import cmd_send, cmd_receive
from ..servers import cmd_server, cmd_usage
parser = argparse.ArgumentParser( parser = argparse.ArgumentParser(
usage="wormhole SUBCOMMAND (subcommand-options)", usage="wormhole SUBCOMMAND (subcommand-options)",
@ -51,11 +49,11 @@ sp_start.add_argument("-n", "--no-daemon", action="store_true")
# help=dedent("""\ # help=dedent("""\
# Additional arguments to pass to twistd"""), # Additional arguments to pass to twistd"""),
# ) # )
sp_start.set_defaults(func=cmd_server.start_server) sp_start.set_defaults(func="server/start")
sp_stop = sp.add_parser("stop", description="Stop the relay server", sp_stop = sp.add_parser("stop", description="Stop the relay server",
usage="wormhole server stop") usage="wormhole server stop")
sp_stop.set_defaults(func=cmd_server.stop_server) sp_stop.set_defaults(func="server/stop")
sp_restart = sp.add_parser("restart", description="Restart the relay server", sp_restart = sp.add_parser("restart", description="Restart the relay server",
usage="wormhole server restart") usage="wormhole server restart")
@ -69,17 +67,17 @@ sp_restart.add_argument("--blur-usage", default=None, type=int,
metavar="SECONDS", metavar="SECONDS",
help="round logged access times to improve privacy") help="round logged access times to improve privacy")
sp_restart.add_argument("-n", "--no-daemon", action="store_true") sp_restart.add_argument("-n", "--no-daemon", action="store_true")
sp_restart.set_defaults(func=cmd_server.restart_server) sp_restart.set_defaults(func="server/restart")
sp_show_usage = sp.add_parser("show-usage", description="Display usage data", sp_show_usage = sp.add_parser("show-usage", description="Display usage data",
usage="wormhole server show-usage") usage="wormhole server show-usage")
sp_show_usage.add_argument("-n", default=100, type=int, sp_show_usage.add_argument("-n", default=100, type=int,
help="show last N entries") help="show last N entries")
sp_show_usage.set_defaults(func=cmd_usage.show_usage) sp_show_usage.set_defaults(func="usage/usage")
sp_tail_usage = sp.add_parser("tail-usage", description="Follow latest usage", sp_tail_usage = sp.add_parser("tail-usage", description="Follow latest usage",
usage="wormhole server tail-usage") usage="wormhole server tail-usage")
sp_tail_usage.set_defaults(func=cmd_usage.tail_usage) sp_tail_usage.set_defaults(func="usage/tail")
# CLI: send # CLI: send
p = subparsers.add_parser("send", p = subparsers.add_parser("send",
@ -93,7 +91,7 @@ p.add_argument("-0", dest="zeromode", action="store_true",
help="enable no-code anything-goes mode") help="enable no-code anything-goes mode")
p.add_argument("what", nargs="?", default=None, metavar="[FILENAME|DIRNAME]", p.add_argument("what", nargs="?", default=None, metavar="[FILENAME|DIRNAME]",
help="the file/directory to send") help="the file/directory to send")
p.set_defaults(func=cmd_send.send) p.set_defaults(func="send/send")
# CLI: receive # CLI: receive
p = subparsers.add_parser("receive", p = subparsers.add_parser("receive",
@ -116,4 +114,4 @@ p.add_argument("code", nargs="?", default=None, metavar="[CODE]",
program will ask for it, using tab-completion."""), program will ask for it, using tab-completion."""),
type=type(u""), type=type(u""),
) )
p.set_defaults(func=cmd_receive.receive) p.set_defaults(func="receive/receive")

View File

@ -3,6 +3,30 @@ import os, sys
from ..errors import TransferError from ..errors import TransferError
from .cli_args import parser from .cli_args import parser
def dispatch(args):
if args.func == "server/start":
from ..servers import cmd_server
return cmd_server.start_server(args)
if args.func == "server/stop":
from ..servers import cmd_server
return cmd_server.stop_server(args)
if args.func == "server/restart":
from ..servers import cmd_server
return cmd_server.restart_server(args)
if args.func == "usage/usage":
from ..servers import cmd_usage
return cmd_usage.show_usage(args)
if args.func == "usage/tail":
from ..servers import cmd_usage
return cmd_usage.tail_usage(args)
if args.func == "send/send":
from . import cmd_send
return cmd_send.send(args)
if args.func == "receive/receive":
from . import cmd_receive
return cmd_receive.receive(args)
raise ValueError("unknown args.func %s" % args.func)
def run(args, cwd, stdout, stderr, executable=None): def run(args, cwd, stdout, stderr, executable=None):
"""This is invoked directly by the 'wormhole' entry-point script. It can """This is invoked directly by the 'wormhole' entry-point script. It can
also invoked by entry() below.""" also invoked by entry() below."""
@ -17,8 +41,7 @@ def run(args, cwd, stdout, stderr, executable=None):
args.stdout = stdout args.stdout = stdout
args.stderr = stderr args.stderr = stderr
try: try:
#rc = command.func(args, stdout, stderr) rc = dispatch(args)
rc = args.func(args)
return rc return rc
except TransferError as e: except TransferError as e:
print(e, file=stderr) print(e, file=stderr)