Mercurial > repos > kls286 > chap_test_20230328
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() |