Source code for tangled.__main__

import argparse
import pkg_resources
import sys

from .abcs import ACommand
from .registry import process_registry


[docs]def main(argv=None): """Entry point for running a tangled command. Such commands are registered via the ``tangled.scripts`` entry point like so:: [tangled.scripts] mycommand = mypackage.mymodule:MyCommand The command can be run as ``tangled mycommand ...``. """ parser = argparse.ArgumentParser( description='Run a tangled command', ) subparsers = parser.add_subparsers(title='Subcommands') # Load subcommands from entry points # Command can also be added directly to the process registry entry_points = pkg_resources.iter_entry_points('tangled.scripts') for entry_point in entry_points: name = entry_point.name if not entry_point.attrs: entry_point.attrs = ('Command',) subparser = subparsers.add_parser(name) subparser.set_defaults(command_name=name) Command = entry_point.load() Command.configure(subparser) process_registry.register(ACommand, Command, name) args = parser.parse_args(argv) if hasattr(args, 'command_name'): command_type = process_registry.get(ACommand, args.command_name) command = command_type(parser, args) return command.run() else: parser.print_help() return -1
if __name__ == '__main__': return_code = main() sys.exit(return_code)