Mercurial > repos > kls286 > chap_test_20230328
diff CHAP/runner.py @ 0:cbbe42422d56 draft
planemo upload for repository https://github.com/CHESSComputing/ChessAnalysisPipeline/tree/galaxy commit 1401a7e1ae007a6bda260d147f9b879e789b73e0-dirty
author | kls286 |
---|---|
date | Tue, 28 Mar 2023 15:07:30 +0000 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/CHAP/runner.py Tue Mar 28 15:07:30 2023 +0000 @@ -0,0 +1,82 @@ +#!/usr/bin/env python +#-*- coding: utf-8 -*- +#pylint: disable= +""" +File : runner.py +Author : Valentin Kuznetsov <vkuznet AT gmail dot com> +Description: +""" + +# system modules +import argparse +import logging +import os +import sys +import yaml + +# local modules +from CHAP.pipeline import Pipeline + + +class OptionParser(): + def __init__(self): + "User based option parser" + self.parser = argparse.ArgumentParser(prog='PROG') + self.parser.add_argument("--config", action="store", + dest="config", default="", help="Input configuration file") + self.parser.add_argument('--log-level', choices=logging._nameToLevel.keys(), + dest='log_level', default='INFO', help='logging level') + +def main(): + "Main function" + optmgr = OptionParser() + opts = optmgr.parser.parse_args() + runner(opts) + +def runner(opts): + """ + Main runner function + + :param opts: opts is an instance of argparse.Namespace which contains all input parameters + """ + + logger = logging.getLogger(__name__) + log_level = getattr(logging, opts.log_level.upper()) + logger.setLevel(log_level) + log_handler = logging.StreamHandler() + log_handler.setFormatter(logging.Formatter('{name:20}: {message}', style='{')) + logger.addHandler(log_handler) + + config = {} + with open(opts.config) as file: + config = yaml.safe_load(file) + logger.info(f'Input configuration: {config}\n') + pipeline_config = config.get('pipeline', []) + objects = [] + kwds = [] + for item in pipeline_config: + # load individual object with given name from its module + if isinstance(item, dict): + name = list(item.keys())[0] + kwargs = item[name] + else: + name = item + kwargs = {} + modName, clsName = name.split('.') + module = __import__(f'CHAP.{modName}', fromlist=[clsName]) + obj = getattr(module, clsName)() + obj.logger.setLevel(log_level) + obj.logger.addHandler(log_handler) + logger.info(f'Loaded {obj}') + objects.append(obj) + kwds.append(kwargs) + pipeline = Pipeline(objects, kwds) + pipeline.logger.setLevel(log_level) + pipeline.logger.addHandler(log_handler) + logger.info(f'Loaded {pipeline} with {len(objects)} items\n') + logger.info(f'Calling "execute" on {pipeline}') + pipeline.execute() + + +if __name__ == '__main__': + main()