diff --git a/tools/python/jwutils/Cmd.py b/tools/python/jwutils/Cmd.py index c801e56..936e764 100644 --- a/tools/python/jwutils/Cmd.py +++ b/tools/python/jwutils/Cmd.py @@ -1,13 +1,7 @@ from abc import ABCMeta, abstractmethod -import argparse -import os -import sys -import inspect -import re -import importlib +import argparse import Object -import jwutils.log class Cmd(Object.Object): # export @@ -30,27 +24,3 @@ class Cmd(Object.Object): # export r.set_defaults(func=self.run) return r -def run_sub_commands(description = '', filter = '^Cmd.*', modules=None): # export - - parser = argparse.ArgumentParser(usage=os.path.basename(sys.argv[0]) + ' [command] [options]', - formatter_class=argparse.ArgumentDefaultsHelpFormatter, description=description) - parser.add_argument('--log-level', help='Log level', default='notice') - parser.add_argument('--log-flags', help='Log flags', default='stderr,position,prio,color') - subparsers = parser.add_subparsers(title='Available commands', metavar='') - - if modules == None: - modules = [ '__main__' ] - for m in modules: - if m != '__main__': - importlib.import_module(m) - for name, c in inspect.getmembers(sys.modules[m], inspect.isclass): - if not re.match(filter, name): - continue - if inspect.isabstract(c): - continue - c().add_parser(subparsers) - args = parser.parse_args() - jwutils.log.set_level(args.log_level) - jwutils.log.set_flags(args.log_flags) - - args.func(args) diff --git a/tools/python/jwutils/Cmds.py b/tools/python/jwutils/Cmds.py new file mode 100644 index 0000000..7ff5078 --- /dev/null +++ b/tools/python/jwutils/Cmds.py @@ -0,0 +1,44 @@ +import os +import sys +import argparse +import Object +import jwutils.log +import importlib +import inspect +import re + +class Cmds(Object.Object): # export + + def __init__(self, description = '', filter = '^Cmd.*', modules=None): + self.__description = description + self.__filter = filter + self.__modules = modules + self.__parser = argparse.ArgumentParser(usage=os.path.basename(sys.argv[0]) + ' [command] [options]', + formatter_class=argparse.ArgumentDefaultsHelpFormatter, description=self.__description) + self.__parser.add_argument('--log-flags', help='Log flags', default='stderr,position,prio,color') + self.__parser.add_argument('--log-level', help='Log level', default=jwutils.log.NOTICE) + subparsers = self.__parser.add_subparsers(title='Available commands', metavar='') + if self.__modules == None: + self.__modules = [ '__main__' ] + for m in self.__modules: + if m != '__main__': + importlib.import_module(m) + for name, c in inspect.getmembers(sys.modules[m], inspect.isclass): + if not re.match(self.__filter, name): + continue + if inspect.isabstract(c): + continue + c().add_parser(subparsers) + + def parser(): + return self.__parser + + def run(self): + args = self.__parser.parse_args() + jwutils.log.set_level(args.log_level) + jwutils.log.set_flags(args.log_flags) + args.func(args) + +def run_sub_commands(description = '', filter = '^Cmd.*', modules=None): # export + cmds = Cmds(description, filter, modules) + cmds.run()