config_reader.py 5.12 KB
Newer Older
Jerome Mariette's avatar
Jerome Mariette committed
1
#
Jerome Mariette's avatar
Jerome Mariette committed
2
# Copyright (C) 2015 INRA
Jerome Mariette's avatar
Jerome Mariette committed
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# 
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
# 
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
# 
# You should have received a copy of the GNU General Public License
# along with this program.  If not, see <http://www.gnu.org/licenses/>.
#

import os
19
import sys
Jerome Mariette's avatar
Jerome Mariette committed
20
import inspect
Ibouniyamine Nabihoudine's avatar
Ibouniyamine Nabihoudine committed
21
import logging
Jerome Mariette's avatar
Jerome Mariette committed
22

23
from configparser import RawConfigParser, NoOptionError
24

Jerome Mariette's avatar
Jerome Mariette committed
25
from jflow.utils import which, display_error_message
Jerome Mariette's avatar
Jerome Mariette committed
26
27
28
29
30

class JFlowConfigReader(object):
    """
    """
    
Jerome Mariette's avatar
Jerome Mariette committed
31
    CONFIG_FILE_PATH = "../../application.properties"
Jerome Mariette's avatar
Jerome Mariette committed
32
33
34
35
    
    def __init__(self):
        """ 
        """
36
        self.reader = RawConfigParser()
Jerome Mariette's avatar
Jerome Mariette committed
37
38
39
        self.reader.read(os.path.join(os.path.dirname(inspect.getfile(self.__class__)), self.CONFIG_FILE_PATH))

    def get_tmp_directory(self):
40
41
42
        if not os.path.isdir(self.reader.get("storage", "tmp_directory").replace("###USER###",os.getenv("USER"))):
            os.makedirs(self.reader.get("storage", "tmp_directory").replace("###USER###",os.getenv("USER")), 0o751)
        return self.reader.get("storage", "tmp_directory").replace("###USER###",os.getenv("USER"))
Jerome Mariette's avatar
Jerome Mariette committed
43
        
Jerome Mariette's avatar
Jerome Mariette committed
44
    def get_work_directory(self):
45
        return self.reader.get("storage", "work_directory").replace("###USER###",os.getenv("USER"))
Jerome Mariette's avatar
Jerome Mariette committed
46
47
48
    
    def get_exec(self, software):
        try:
49
            return self.reader.get("softwares", software)
50
        except NoOptionError:
51
            return None
Jerome Mariette's avatar
Jerome Mariette committed
52

53
54
55
    def get_resource(self, resource):
        return self.reader.get("resources", resource)

Jerome Mariette's avatar
Jerome Mariette committed
56
57
58
59
60
61
    def get_log_file_path(self):
        """
        return the log file path
          @return: the path to the log file
        """
        try:
62
            return self.reader.get('storage', 'log_file').replace("###USER###",os.getenv("USER"))
Jerome Mariette's avatar
Jerome Mariette committed
63
        except :
64
            raise NoOptionError("Failed when parsing the config file, no section logging found!")
Jerome Mariette's avatar
Jerome Mariette committed
65
66
67
        
    def get_makeflow_path(self):
        try:
68
            exec_path = self.reader.get("global", "makeflow")
69
        except NoOptionError:
70
            exec_path = None
Jerome Mariette's avatar
Jerome Mariette committed
71
        if exec_path is None: exec_path = "makeflow"
72
        if which(exec_path) == None:
73
74
            logging.getLogger("jflow").exception("'makeflow' path connot be retrieved either in the PATH and in the application.properties file!")
            raise Exception("'makeflow' path connot be retrieved either in the PATH and in the application.properties file!")
75
        return exec_path
76
77
78
79
80

    def get_date_format(self):
        try:
            date_format = self.reader.get("global", "date_format")
        except:
81
            raise NoOptionError("Failed when parsing the config file, no parameter date_format!")
82
83
        return date_format

Jerome Mariette's avatar
Jerome Mariette committed
84
85
    def get_batch(self):
        try:
86
87
            type = self.reader.get("global", "batch_system_type")
            options = self.reader.get("global", "batch_options")
88
89
            limit_submission = self.reader.get("global", "limit_submission")
            return [type, options, limit_submission]
90
        except NoOptionError:
Jerome Mariette's avatar
Jerome Mariette committed
91
            return None
92
          
93
94
    def get_socket_options(self):
        try:
Jerome Mariette's avatar
Jerome Mariette committed
95
            return [self.reader.get("global", "server_socket_host"), int(self.reader.get("global", "server_socket_port"))]
96
        except:
Jerome Mariette's avatar
Jerome Mariette committed
97
            return ["127.0.0.1", 8080]
98
99
100
101
        
    def get_email_options(self):
        try: smtps = self.reader.get("email", "smtp_server")
        except: smtps = None
102
103
        try: smtpp = self.reader.get("email", "smtp_port")
        except: smtpp = None
104
105
        try: froma = self.reader.get("email", "from_address")
        except: froma = None
106
107
        try: fromp = self.reader.get("email", "from_password")
        except: fromp = None
108
109
110
111
112
113
        try: toa = self.reader.get("email", "to_address")
        except: toa = None
        try: subject = self.reader.get("email", "subject")
        except: subject = None
        try: message = self.reader.get("email", "message")
        except: message = None
114
        return [smtps, smtpp, froma, fromp, toa, subject, message]
115
    
116
117
118
119
120
    def get_component_batch_options(self, component_class):
        try:
            return self.reader.get("components", component_class+".batch_options")
        except:
            return ""
121
122
123
124
125
126

    def get_component_modules(self, component_class):
        try:
            return self.reader.get("components", component_class+".modules").split(",")
        except:
            return []
127
128
129
130
131
    
    def get_workflow_group(self, workflow_class):
        try:
            return self.reader.get("workflows", workflow_class+".group")
        except:
Ibouniyamine Nabihoudine's avatar
Ibouniyamine Nabihoudine committed
132
            return ""
133

134
135
    def get_browse_root_dir(self):
        return self.reader.get("storage", "browse_root_dir")
Floreal Cabanettes's avatar
Floreal Cabanettes committed
136
137
138
139
140
141

    def get_debug(self):
        try:
            return self.reader.get("global", "debug") == "True"
        except NoOptionError:
            return False