change in the obi programme according to the new obitools3.apps module
creation
This commit is contained in:
203
python/obi.py
203
python/obi.py
@ -16,30 +16,21 @@ It defines classes_and_methods
|
|||||||
@deffield updated: Updated
|
@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,
|
root_config_name='obi'
|
||||||
'loglevel' : 'INFO',
|
|
||||||
'version' : False,
|
|
||||||
'progress' : True
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
|
from obitools3.apps.config import getConfiguration # @UnresolvedImport
|
||||||
|
|
||||||
from obitools3 import command
|
|
||||||
from obitools3.version import version
|
from obitools3.version import version
|
||||||
|
|
||||||
__all__ = []
|
__all__ = []
|
||||||
__version__ = version
|
__version__ = version
|
||||||
__date__ = '2014-09-28'
|
__date__ = '2014-09-28'
|
||||||
__updated__ = '2014-09-28'
|
__updated__ = '2014-09-28'
|
||||||
|
|
||||||
DEBUG = 1
|
DEBUG = 1
|
||||||
@ -47,182 +38,12 @@ TESTRUN = 0
|
|||||||
PROFILE = 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__":
|
if __name__ =="__main__":
|
||||||
|
|
||||||
config = getConfiguration()
|
config = getConfiguration(root_config_name,
|
||||||
|
default_config)
|
||||||
|
|
||||||
config['obi']['module'].run(config)
|
config[root_config_name]['module'].run(config)
|
||||||
|
|
||||||
|
|
||||||
|
|
Reference in New Issue
Block a user