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()