Mercurial > repos > kls286 > chap_test_20230328
comparison 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 |
comparison
equal
deleted
inserted
replaced
| -1:000000000000 | 0:cbbe42422d56 |
|---|---|
| 1 #!/usr/bin/env python | |
| 2 #-*- coding: utf-8 -*- | |
| 3 #pylint: disable= | |
| 4 """ | |
| 5 File : runner.py | |
| 6 Author : Valentin Kuznetsov <vkuznet AT gmail dot com> | |
| 7 Description: | |
| 8 """ | |
| 9 | |
| 10 # system modules | |
| 11 import argparse | |
| 12 import logging | |
| 13 import os | |
| 14 import sys | |
| 15 import yaml | |
| 16 | |
| 17 # local modules | |
| 18 from CHAP.pipeline import Pipeline | |
| 19 | |
| 20 | |
| 21 class OptionParser(): | |
| 22 def __init__(self): | |
| 23 "User based option parser" | |
| 24 self.parser = argparse.ArgumentParser(prog='PROG') | |
| 25 self.parser.add_argument("--config", action="store", | |
| 26 dest="config", default="", help="Input configuration file") | |
| 27 self.parser.add_argument('--log-level', choices=logging._nameToLevel.keys(), | |
| 28 dest='log_level', default='INFO', help='logging level') | |
| 29 | |
| 30 def main(): | |
| 31 "Main function" | |
| 32 optmgr = OptionParser() | |
| 33 opts = optmgr.parser.parse_args() | |
| 34 runner(opts) | |
| 35 | |
| 36 def runner(opts): | |
| 37 """ | |
| 38 Main runner function | |
| 39 | |
| 40 :param opts: opts is an instance of argparse.Namespace which contains all input parameters | |
| 41 """ | |
| 42 | |
| 43 logger = logging.getLogger(__name__) | |
| 44 log_level = getattr(logging, opts.log_level.upper()) | |
| 45 logger.setLevel(log_level) | |
| 46 log_handler = logging.StreamHandler() | |
| 47 log_handler.setFormatter(logging.Formatter('{name:20}: {message}', style='{')) | |
| 48 logger.addHandler(log_handler) | |
| 49 | |
| 50 config = {} | |
| 51 with open(opts.config) as file: | |
| 52 config = yaml.safe_load(file) | |
| 53 logger.info(f'Input configuration: {config}\n') | |
| 54 pipeline_config = config.get('pipeline', []) | |
| 55 objects = [] | |
| 56 kwds = [] | |
| 57 for item in pipeline_config: | |
| 58 # load individual object with given name from its module | |
| 59 if isinstance(item, dict): | |
| 60 name = list(item.keys())[0] | |
| 61 kwargs = item[name] | |
| 62 else: | |
| 63 name = item | |
| 64 kwargs = {} | |
| 65 modName, clsName = name.split('.') | |
| 66 module = __import__(f'CHAP.{modName}', fromlist=[clsName]) | |
| 67 obj = getattr(module, clsName)() | |
| 68 obj.logger.setLevel(log_level) | |
| 69 obj.logger.addHandler(log_handler) | |
| 70 logger.info(f'Loaded {obj}') | |
| 71 objects.append(obj) | |
| 72 kwds.append(kwargs) | |
| 73 pipeline = Pipeline(objects, kwds) | |
| 74 pipeline.logger.setLevel(log_level) | |
| 75 pipeline.logger.addHandler(log_handler) | |
| 76 logger.info(f'Loaded {pipeline} with {len(objects)} items\n') | |
| 77 logger.info(f'Calling "execute" on {pipeline}') | |
| 78 pipeline.execute() | |
| 79 | |
| 80 | |
| 81 if __name__ == '__main__': | |
| 82 main() |
