comparison build/lib/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}')
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()