[project @ First attempt at script for configuring pipeline automatically.]
[htsworkflow.git] / bin / config_pipeline.py
1 #!/usr/bin/python
2 import subprocess
3 import re
4 import logging
5
6 logging.basicConfig(level=logging.DEBUG,
7                     format='%(asctime)s %(levelname)-8s %(message)s',
8                     datefmt='%a, %d %b %Y %H:%M:%S',
9                     filename='config_pipeline.log',
10                     filemode='w')
11
12 #Info
13 s_start = re.compile('Starting Genome Analyzer Pipeline')
14 s_gerald = re.compile("[\S\s]+--GERALD[\S\s]+--make[\S\s]+")
15 s_generating = re.compile('Generating journals, Makefiles and parameter files')
16
17 #Errors
18 s_invalid_cmdline = re.compile('Usage:[\S\s]*goat_pipeline.py')
19
20 #Ignore
21 s_skip = re.compile('s_[0-8]_[0-9]+')
22
23 def handler(line):
24
25   # Irrelevant line
26   if s_skip.search(line):
27     pass
28   elif s_invalid_cmdline.search(line):
29     logging.error("Invalid commandline options!")
30   elif s_start.search(line):
31     logging.info('START: Configuring pipeline')
32   elif s_gerald.search(line):
33     logging.info('Running make now')
34   elif s_generating.search(line):
35     logging.info('Make files generted')
36   else:
37     logging.warning('How to handle: %s' % (line))
38   
39
40 def configure():
41   #ERROR Test:
42   #pipe = subprocess.Popen(['goat_pipeline.py',
43   #                         '--GERALD=config32bk.txt',
44   #                         '--make .',],
45   #                         #'.'],
46   #                        stdout=subprocess.PIPE,
47   #                        stderr=subprocess.PIPE)
48
49   #Not a test; actual run attempt.
50   pipe = subprocess.Popen(['goat_pipeline.py',
51                            '--GERALD=config32bk.txt',
52                            '--make',
53                            '.'],
54                           stdout=subprocess.PIPE,
55                           stderr=subprocess.PIPE)
56   
57   line = pipe.stdout.readline()
58
59   while line != '':
60     handler(line)
61     line = pipe.stdout.readline()
62
63   #print pipe.poll()
64
65
66 if __name__ == '__main__':
67   configure()