Source code for wolframclient.cli.dispatch
# -*- coding: utf-8 -*-
from __future__ import absolute_import, print_function, unicode_literals
import sys
from wolframclient.cli.utils import SimpleCommand, discover_with_convention
from wolframclient.utils.importutils import import_string
from wolframclient.utils.require import require_module
[docs]class DispatchCommand(SimpleCommand):
modules = ["wolframclient.cli.commands"]
class_name = "Command"
default_command = None
dependencies = ()
[docs] def subcommands(self):
return discover_with_convention(self.modules, self.class_name)
[docs] def handle(self, attr=None):
all_commands = self.subcommands()
if attr is None and self.default_command:
attr = self.default_command
if attr in all_commands:
return import_string(all_commands[attr])(
self.subcommand_args(), name=all_commands[attr]
).main()
self.print("Select one of the following commands:")
for command in sorted(all_commands.keys()):
self.print(" -", command)
sys.exit(1)
[docs] def subcommand_args(self):
argv = list(self.argv)
if len(argv) > 1:
argv.pop(1)
return argv
[docs] def main(self):
if self.dependencies:
require_module(*self.dependencies)
if len(self.argv) > 1 and self.argv[1]:
return self.handle(self.argv[1])
return self.handle()
[docs]def execute_from_command_line(argv=None, **opts):
return DispatchCommand(argv).main()