#!/usr/bin/env python3 # PYTHON_ARGCOMPLETE_OK """ Managing plugins """ import argparse import sys import argcomplete from app.pluginmanager import PluginManager from app.attack_log import AttackLog class CmdlineArgumentException(Exception): """ An error in the user supplied command line """ def list_plugins(arguments): """ List plugins """ attack_logger = AttackLog(arguments.verbose) plugin_manager = PluginManager(attack_logger) plugin_manager.print_list() return 0 def check_plugins(arguments): """ Check plugins for validity """ attack_logger = AttackLog(arguments.verbose) plugin_manager = PluginManager(attack_logger) res = plugin_manager.print_check() if len(res) != 0: print("*************************************") print("Some issues in plugins were found: ") print("\n".join(res)) return len(res) def get_default_config(arguments): """ print default config of a specific plugin """ attack_logger = AttackLog(arguments.verbose) plugin_manager = PluginManager(attack_logger) if arguments.subclass_name is None: raise CmdlineArgumentException("Getting configuration requires a subclass_name") if arguments.plugin_name is None: raise CmdlineArgumentException("Getting configuration requires a plugin_name") plugin_manager.print_default_config(arguments.subclass_name, arguments.plugin_name) def create_parser(): """ Creates the parser for the command line arguments""" main_parser = argparse.ArgumentParser("Manage plugins") main_parser.add_argument('--verbose', '-v', action='count', default=0, help="Verbosity level") subparsers = main_parser.add_subparsers(help="sub-commands") # Sub parser for plugin list parser_list = subparsers.add_parser("list", help="list plugins") parser_list.set_defaults(func=list_plugins) # parser_list.add_argument("--configfile", default="experiment.yaml", help="Config file to create from") # Sub parser for plugin check parser_list = subparsers.add_parser("check", help="Check plugin implementation") parser_list.set_defaults(func=check_plugins) parser_default_config = subparsers.add_parser("raw_config", help="Print raw default config of the given plugin") parser_default_config.set_defaults(func=get_default_config) parser_default_config.add_argument("subclass_name", help="Name of the subclass") parser_default_config.add_argument("plugin_name", help="Name of the plugin") # TODO: Get default config return main_parser if __name__ == "__main__": parser = create_parser() argcomplete.autocomplete(parser) args = parser.parse_args() try: exit_val = args.func(args) sys.exit(exit_val) except CmdlineArgumentException as ex: parser.print_help() print(f"\nCommandline error: {ex}")