diff --git a/python/obi.py b/python/obi.py index 355527a..9c05a1c 100644 --- a/python/obi.py +++ b/python/obi.py @@ -16,30 +16,21 @@ It defines classes_and_methods @deffield updated: Updated ''' -import sys -import pkgutil -import argparse -import logging -import json -default_config = { +default_config = { 'software' : "The OBITools", + 'log' : False, + 'loglevel' : 'INFO', + 'progress' : True + } - 'obi' : { 'log' : True, - 'loglevel' : 'INFO', - 'version' : False, - 'progress' : True - } - -} +root_config_name='obi' - - -from obitools3 import command +from obitools3.apps.config import getConfiguration # @UnresolvedImport from obitools3.version import version -__all__ = [] +__all__ = [] __version__ = version -__date__ = '2014-09-28' +__date__ = '2014-09-28' __updated__ = '2014-09-28' DEBUG = 1 @@ -47,182 +38,12 @@ TESTRUN = 0 PROFILE = 0 - -def loadCommand(name,loader): - ''' - Load a command module from its name and an ImpLoader - - This function is for internal use - - @param name: name of the module - @type name: str - @param loader: the module loader - @type loader: ImpLoader - - @return the loaded module - @rtype: module - ''' - - module = loader.find_module(name).load_module(name) - return module - -def getCommandsList(): - ''' - Returns the list of sub-commands available to the main `obi` command - - @return: a dict instance with key corresponding to each command and - value corresponding to the module - - @rtype: dict - ''' - cmds = dict((x[1],loadCommand(x[1],x[0])) - for x in pkgutil.iter_modules(command.__path__) - if not x[2]) - return cmds - -def getLogger(config): - ''' - Returns the logger as defined by the command line option - or by the config file - :param config: - ''' - - output = config['obi']['outputfilename'] - level = config['obi']['loglevel'] - logfile= config['obi']['log'] - - rootlogger = logging.getLogger() - logFormatter = logging.Formatter("%(asctime)s [%(levelname)-5.5s] %(message)s") - - stderrHandler = logging.StreamHandler(sys.stderr) - stderrHandler.setFormatter(logFormatter) - - rootlogger.addHandler(stderrHandler) - - if logfile: - fileHandler = logging.FileHandler("%s.log" % output) - fileHandler.setFormatter(logFormatter) - rootlogger.addHandler(fileHandler) - - try: - loglevel = getattr(logging, level) - except: - loglevel = logging.INFO - - rootlogger.setLevel(loglevel) - - config['obi']['logger']=rootlogger - - return rootlogger - - -class ObiParser(argparse.ArgumentParser): - def error(self, message): - sys.stderr.write('error: %s\n' % message) - self.print_help() - sys.exit(2) - -def buildArgumentParser(): - parser = ObiParser() - - parser.add_argument('--version', dest='obi:version', - action='store_true', - default=False, - help='Print the version of the OBITools') - - parser.add_argument('--no-log', dest='obi:log', - action='store_false', - default=None, - help='Do not create a logfile for the data analyze') - - parser.add_argument('--no-progress', dest='obi:progress', - action='store_false', - default=None, - help='Do not print the progress bar during analyzes') - - subparsers = parser.add_subparsers(title='subcommands', - description='valid subcommands', - help='additional help') - - commands = getCommandsList() - - for c in commands: - module = commands[c] - - if hasattr(module, "run"): - if hasattr(module, "__title__"): - sub = subparsers.add_parser(c,help=module.__title__) - else: - sub = subparsers.add_parser(c) - - if hasattr(module, "addOptions"): - module.addOptions(sub) - - sub.set_defaults(**{'obi:module' : module}) - - return parser - -def buildDefaultConfiguration(): - global default_config - - commands = getCommandsList() - - for c in commands: - module = commands[c] - - assert hasattr(module, "run") - - if hasattr(module, 'default_config'): - default_config[c]=module.default_config - else: - default_config[c]={} - - return default_config - - -def getConfiguration(): - global default_config - - if '__done__' in default_config: - return default_config - - parser = buildArgumentParser() - options = vars(parser.parse_args()) - - config = buildDefaultConfiguration() - - - for k in options: - section,key = k.split(':') - s = config[section] - if options[k] is not None: - s[key]=options[k] - - if config['obi']['version']: - print("The OBITools - Version %s" % __version__) - sys.exit(0) - - if not 'module' in config['obi']: - print('\nError: No obi command specified',file=sys.stderr) - parser.print_help() - sys.exit(2) - - - if config['obi']['outputfilename'] is None: - config['obi']['outputfilename']=config['obi']['indexfilename'] - - getLogger(config) - - config['__done__']=True - - return config - - if __name__ =="__main__": - config = getConfiguration() + config = getConfiguration(root_config_name, + default_config) - config['obi']['module'].run(config) + config[root_config_name]['module'].run(config) \ No newline at end of file