annotate TEisotools-1.0/commons/core/checker/ConfigChecker.py @ 6:20ec0d14798e draft

Uploaded
author urgi-team
date Wed, 20 Jul 2016 05:00:24 -0400
parents
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
6
20ec0d14798e Uploaded
urgi-team
parents:
diff changeset
1 # Copyright INRA (Institut National de la Recherche Agronomique)
20ec0d14798e Uploaded
urgi-team
parents:
diff changeset
2 # http://www.inra.fr
20ec0d14798e Uploaded
urgi-team
parents:
diff changeset
3 # http://urgi.versailles.inra.fr
20ec0d14798e Uploaded
urgi-team
parents:
diff changeset
4 #
20ec0d14798e Uploaded
urgi-team
parents:
diff changeset
5 # This software is governed by the CeCILL license under French law and
20ec0d14798e Uploaded
urgi-team
parents:
diff changeset
6 # abiding by the rules of distribution of free software. You can use,
20ec0d14798e Uploaded
urgi-team
parents:
diff changeset
7 # modify and/ or redistribute the software under the terms of the CeCILL
20ec0d14798e Uploaded
urgi-team
parents:
diff changeset
8 # license as circulated by CEA, CNRS and INRIA at the following URL
20ec0d14798e Uploaded
urgi-team
parents:
diff changeset
9 # "http://www.cecill.info".
20ec0d14798e Uploaded
urgi-team
parents:
diff changeset
10 #
20ec0d14798e Uploaded
urgi-team
parents:
diff changeset
11 # As a counterpart to the access to the source code and rights to copy,
20ec0d14798e Uploaded
urgi-team
parents:
diff changeset
12 # modify and redistribute granted by the license, users are provided only
20ec0d14798e Uploaded
urgi-team
parents:
diff changeset
13 # with a limited warranty and the software's author, the holder of the
20ec0d14798e Uploaded
urgi-team
parents:
diff changeset
14 # economic rights, and the successive licensors have only limited
20ec0d14798e Uploaded
urgi-team
parents:
diff changeset
15 # liability.
20ec0d14798e Uploaded
urgi-team
parents:
diff changeset
16 #
20ec0d14798e Uploaded
urgi-team
parents:
diff changeset
17 # In this respect, the user's attention is drawn to the risks associated
20ec0d14798e Uploaded
urgi-team
parents:
diff changeset
18 # with loading, using, modifying and/or developing or reproducing the
20ec0d14798e Uploaded
urgi-team
parents:
diff changeset
19 # software by the user in light of its specific status of free software,
20ec0d14798e Uploaded
urgi-team
parents:
diff changeset
20 # that may mean that it is complicated to manipulate, and that also
20ec0d14798e Uploaded
urgi-team
parents:
diff changeset
21 # therefore means that it is reserved for developers and experienced
20ec0d14798e Uploaded
urgi-team
parents:
diff changeset
22 # professionals having in-depth computer knowledge. Users are therefore
20ec0d14798e Uploaded
urgi-team
parents:
diff changeset
23 # encouraged to load and test the software's suitability as regards their
20ec0d14798e Uploaded
urgi-team
parents:
diff changeset
24 # requirements in conditions enabling the security of their systems and/or
20ec0d14798e Uploaded
urgi-team
parents:
diff changeset
25 # data to be ensured and, more generally, to use and operate it in the
20ec0d14798e Uploaded
urgi-team
parents:
diff changeset
26 # same conditions as regards security.
20ec0d14798e Uploaded
urgi-team
parents:
diff changeset
27 #
20ec0d14798e Uploaded
urgi-team
parents:
diff changeset
28 # The fact that you are presently reading this means that you have had
20ec0d14798e Uploaded
urgi-team
parents:
diff changeset
29 # knowledge of the CeCILL license and that you accept its terms.
20ec0d14798e Uploaded
urgi-team
parents:
diff changeset
30
20ec0d14798e Uploaded
urgi-team
parents:
diff changeset
31
20ec0d14798e Uploaded
urgi-team
parents:
diff changeset
32 import re
20ec0d14798e Uploaded
urgi-team
parents:
diff changeset
33 import sys
20ec0d14798e Uploaded
urgi-team
parents:
diff changeset
34 from commons.core.utils.RepetConfigParser import RepetConfigParser
20ec0d14798e Uploaded
urgi-team
parents:
diff changeset
35 from commons.core.checker.ConfigValue import ConfigValue
20ec0d14798e Uploaded
urgi-team
parents:
diff changeset
36 from commons.core.checker.IChecker import IChecker
20ec0d14798e Uploaded
urgi-team
parents:
diff changeset
37 from commons.core.checker.RepetException import RepetException
20ec0d14798e Uploaded
urgi-team
parents:
diff changeset
38 from commons.core.utils.FileUtils import FileUtils
20ec0d14798e Uploaded
urgi-team
parents:
diff changeset
39
20ec0d14798e Uploaded
urgi-team
parents:
diff changeset
40 #TODO: add more tests!
20ec0d14798e Uploaded
urgi-team
parents:
diff changeset
41
20ec0d14798e Uploaded
urgi-team
parents:
diff changeset
42 class Rule(object):
20ec0d14798e Uploaded
urgi-team
parents:
diff changeset
43
20ec0d14798e Uploaded
urgi-team
parents:
diff changeset
44 def __init__(self, mandatory= False, isPattern=False, type="", set=(), help =""):
20ec0d14798e Uploaded
urgi-team
parents:
diff changeset
45 self.mandatory = mandatory
20ec0d14798e Uploaded
urgi-team
parents:
diff changeset
46 self.isPattern = isPattern
20ec0d14798e Uploaded
urgi-team
parents:
diff changeset
47 self.type = type
20ec0d14798e Uploaded
urgi-team
parents:
diff changeset
48 self.set = set
20ec0d14798e Uploaded
urgi-team
parents:
diff changeset
49 self.help = help
20ec0d14798e Uploaded
urgi-team
parents:
diff changeset
50
20ec0d14798e Uploaded
urgi-team
parents:
diff changeset
51 class ConfigRules(object):
20ec0d14798e Uploaded
urgi-team
parents:
diff changeset
52
20ec0d14798e Uploaded
urgi-team
parents:
diff changeset
53 def __init__(self, configName = "", configDescription = ""):
20ec0d14798e Uploaded
urgi-team
parents:
diff changeset
54 self.configName = configName
20ec0d14798e Uploaded
urgi-team
parents:
diff changeset
55 self.configDescription = configDescription
20ec0d14798e Uploaded
urgi-team
parents:
diff changeset
56 self.dRules4Sections={}
20ec0d14798e Uploaded
urgi-team
parents:
diff changeset
57
20ec0d14798e Uploaded
urgi-team
parents:
diff changeset
58 def _addRule(self, section, option="DEFAULT", mandatory=False, isPattern=False, type="", set=(), help =""):
20ec0d14798e Uploaded
urgi-team
parents:
diff changeset
59 if not self.dRules4Sections.has_key(section):
20ec0d14798e Uploaded
urgi-team
parents:
diff changeset
60 self.dRules4Sections[section] = {}
20ec0d14798e Uploaded
urgi-team
parents:
diff changeset
61 self.dRules4Sections[section][option]=Rule(mandatory, isPattern, type.lower(), set)
20ec0d14798e Uploaded
urgi-team
parents:
diff changeset
62
20ec0d14798e Uploaded
urgi-team
parents:
diff changeset
63 def addRuleSection(self, section, mandatory=False, isPattern=False, help = ""):
20ec0d14798e Uploaded
urgi-team
parents:
diff changeset
64 self._addRule(section = section, option = "DEFAULT", mandatory = mandatory, isPattern = isPattern, help = "")
20ec0d14798e Uploaded
urgi-team
parents:
diff changeset
65
20ec0d14798e Uploaded
urgi-team
parents:
diff changeset
66 def addRuleOption(self, section, option, mandatory=False, isPattern=False, type="", set=(), help = ""):
20ec0d14798e Uploaded
urgi-team
parents:
diff changeset
67 self._addRule(section = section, option = option, mandatory = mandatory, isPattern = isPattern, type = type, set=set , help = "")
20ec0d14798e Uploaded
urgi-team
parents:
diff changeset
68
20ec0d14798e Uploaded
urgi-team
parents:
diff changeset
69 def isSectionMandatory(self, section):
20ec0d14798e Uploaded
urgi-team
parents:
diff changeset
70 if self.dRules4Sections.has_key(section):
20ec0d14798e Uploaded
urgi-team
parents:
diff changeset
71 if self.dRules4Sections[section].has_key("DEFAULT"):
20ec0d14798e Uploaded
urgi-team
parents:
diff changeset
72 return self.dRules4Sections[section]["DEFAULT"].mandatory
20ec0d14798e Uploaded
urgi-team
parents:
diff changeset
73 return False
20ec0d14798e Uploaded
urgi-team
parents:
diff changeset
74
20ec0d14798e Uploaded
urgi-team
parents:
diff changeset
75 def isOptionMandatory(self, section, option):
20ec0d14798e Uploaded
urgi-team
parents:
diff changeset
76 if self.dRules4Sections.has_key(section):
20ec0d14798e Uploaded
urgi-team
parents:
diff changeset
77 if self.dRules4Sections[section].has_key(option):
20ec0d14798e Uploaded
urgi-team
parents:
diff changeset
78 return self.dRules4Sections[section][option].mandatory
20ec0d14798e Uploaded
urgi-team
parents:
diff changeset
79 return False
20ec0d14798e Uploaded
urgi-team
parents:
diff changeset
80
20ec0d14798e Uploaded
urgi-team
parents:
diff changeset
81 def getRule(self, section, option):
20ec0d14798e Uploaded
urgi-team
parents:
diff changeset
82 if self.dRules4Sections.has_key(section):
20ec0d14798e Uploaded
urgi-team
parents:
diff changeset
83 if self.dRules4Sections[section].has_key(option):
20ec0d14798e Uploaded
urgi-team
parents:
diff changeset
84 return self.dRules4Sections[section][option]
20ec0d14798e Uploaded
urgi-team
parents:
diff changeset
85 return None
20ec0d14798e Uploaded
urgi-team
parents:
diff changeset
86
20ec0d14798e Uploaded
urgi-team
parents:
diff changeset
87 class ConfigChecker(IChecker):
20ec0d14798e Uploaded
urgi-team
parents:
diff changeset
88
20ec0d14798e Uploaded
urgi-team
parents:
diff changeset
89 def __init__ (self, cfgFileName, iCfgRules):
20ec0d14798e Uploaded
urgi-team
parents:
diff changeset
90 self._configFileName = cfgFileName
20ec0d14798e Uploaded
urgi-team
parents:
diff changeset
91 self._iConfigRules = iCfgRules
20ec0d14798e Uploaded
urgi-team
parents:
diff changeset
92 self._iRawConfig = ConfigValue()
20ec0d14798e Uploaded
urgi-team
parents:
diff changeset
93 self._iExtendedConfigRules = ConfigRules()
20ec0d14798e Uploaded
urgi-team
parents:
diff changeset
94
20ec0d14798e Uploaded
urgi-team
parents:
diff changeset
95 def readConfigFile(self):
20ec0d14798e Uploaded
urgi-team
parents:
diff changeset
96 iConfig = RepetConfigParser()
20ec0d14798e Uploaded
urgi-team
parents:
diff changeset
97 try:
20ec0d14798e Uploaded
urgi-team
parents:
diff changeset
98 iConfig.readfp(open(self._configFileName))
20ec0d14798e Uploaded
urgi-team
parents:
diff changeset
99 return iConfig
20ec0d14798e Uploaded
urgi-team
parents:
diff changeset
100 # TODO USE OF CONFIG ERROR
20ec0d14798e Uploaded
urgi-team
parents:
diff changeset
101 # if DuplicateSectionError:
20ec0d14798e Uploaded
urgi-team
parents:
diff changeset
102 # raise Exception ("Duplicate section exist in config file %s" %(self._configFileName ))
20ec0d14798e Uploaded
urgi-team
parents:
diff changeset
103 except :
20ec0d14798e Uploaded
urgi-team
parents:
diff changeset
104 raise RepetException ("Unexpected error: %s" % sys.exc_info()[0])
20ec0d14798e Uploaded
urgi-team
parents:
diff changeset
105
20ec0d14798e Uploaded
urgi-team
parents:
diff changeset
106 def setRawConfig(self, iConfig ):
20ec0d14798e Uploaded
urgi-team
parents:
diff changeset
107 for sectionName in iConfig.sections():
20ec0d14798e Uploaded
urgi-team
parents:
diff changeset
108 for optionName in iConfig.options(sectionName):
20ec0d14798e Uploaded
urgi-team
parents:
diff changeset
109 optionValue = iConfig.get(sectionName, optionName)
20ec0d14798e Uploaded
urgi-team
parents:
diff changeset
110 self._iRawConfig.set(sectionName, optionName, optionValue)
20ec0d14798e Uploaded
urgi-team
parents:
diff changeset
111
20ec0d14798e Uploaded
urgi-team
parents:
diff changeset
112 def getOptionValueAccordingRule(self, iConfig, sectionName, optionName):
20ec0d14798e Uploaded
urgi-team
parents:
diff changeset
113 optionRule = self._iExtendedConfigRules.getRule(sectionName, optionName)
20ec0d14798e Uploaded
urgi-team
parents:
diff changeset
114 if optionRule == None :
20ec0d14798e Uploaded
urgi-team
parents:
diff changeset
115 return iConfig.get(sectionName, optionName)
20ec0d14798e Uploaded
urgi-team
parents:
diff changeset
116
20ec0d14798e Uploaded
urgi-team
parents:
diff changeset
117 if optionRule.type == "int":
20ec0d14798e Uploaded
urgi-team
parents:
diff changeset
118 optionValue = iConfig.getint(sectionName, optionName)
20ec0d14798e Uploaded
urgi-team
parents:
diff changeset
119 elif optionRule.type == "float":
20ec0d14798e Uploaded
urgi-team
parents:
diff changeset
120 optionValue = iConfig.getfloat(sectionName, optionName)
20ec0d14798e Uploaded
urgi-team
parents:
diff changeset
121 elif optionRule.type == "bool" or optionRule.type == "boolean":
20ec0d14798e Uploaded
urgi-team
parents:
diff changeset
122 optionValue = iConfig.getboolean(sectionName, optionName)
20ec0d14798e Uploaded
urgi-team
parents:
diff changeset
123 else:
20ec0d14798e Uploaded
urgi-team
parents:
diff changeset
124 optionValue = iConfig.get(sectionName, optionName)
20ec0d14798e Uploaded
urgi-team
parents:
diff changeset
125 if optionRule.set!=() and not(optionValue in optionRule.set):
20ec0d14798e Uploaded
urgi-team
parents:
diff changeset
126 raise RepetException ("value must be in '%s'" % str(optionRule.set))
20ec0d14798e Uploaded
urgi-team
parents:
diff changeset
127
20ec0d14798e Uploaded
urgi-team
parents:
diff changeset
128 return optionValue
20ec0d14798e Uploaded
urgi-team
parents:
diff changeset
129
20ec0d14798e Uploaded
urgi-team
parents:
diff changeset
130 def setConfig(self, iConfig ):
20ec0d14798e Uploaded
urgi-team
parents:
diff changeset
131 config = ConfigValue()
20ec0d14798e Uploaded
urgi-team
parents:
diff changeset
132 valueErr = ""
20ec0d14798e Uploaded
urgi-team
parents:
diff changeset
133 for sectionName in iConfig.sections():
20ec0d14798e Uploaded
urgi-team
parents:
diff changeset
134 for optionName in iConfig.options(sectionName):
20ec0d14798e Uploaded
urgi-team
parents:
diff changeset
135 try:
20ec0d14798e Uploaded
urgi-team
parents:
diff changeset
136 optionValue = self.getOptionValueAccordingRule(iConfig, sectionName, optionName )
20ec0d14798e Uploaded
urgi-team
parents:
diff changeset
137 config.set(sectionName, optionName, optionValue)
20ec0d14798e Uploaded
urgi-team
parents:
diff changeset
138 except RepetException, re :
20ec0d14798e Uploaded
urgi-team
parents:
diff changeset
139 valueErr += "\n\t- %s" % re.getMessage()
20ec0d14798e Uploaded
urgi-team
parents:
diff changeset
140 if valueErr == "":
20ec0d14798e Uploaded
urgi-team
parents:
diff changeset
141 self._iRawConfig = config
20ec0d14798e Uploaded
urgi-team
parents:
diff changeset
142 else:
20ec0d14798e Uploaded
urgi-team
parents:
diff changeset
143 raise RepetException ("Following errors occurred: %s\n" % valueErr)
20ec0d14798e Uploaded
urgi-team
parents:
diff changeset
144
20ec0d14798e Uploaded
urgi-team
parents:
diff changeset
145 def checkIfExistsConfigFile (self):
20ec0d14798e Uploaded
urgi-team
parents:
diff changeset
146 if not (FileUtils.isRessourceExists(self._configFileName)):
20ec0d14798e Uploaded
urgi-team
parents:
diff changeset
147 raise RepetException("CONFIG FILE not found - '%s'" % self._configFileName)
20ec0d14798e Uploaded
urgi-team
parents:
diff changeset
148
20ec0d14798e Uploaded
urgi-team
parents:
diff changeset
149 def checkMandatorySections (self):
20ec0d14798e Uploaded
urgi-team
parents:
diff changeset
150 missingSection = ""
20ec0d14798e Uploaded
urgi-team
parents:
diff changeset
151 for sectionName in self._iExtendedConfigRules.dRules4Sections.keys():
20ec0d14798e Uploaded
urgi-team
parents:
diff changeset
152 if self._iExtendedConfigRules.isSectionMandatory(sectionName) and not self._iRawConfig.has_section(sectionName):
20ec0d14798e Uploaded
urgi-team
parents:
diff changeset
153 missingSection += "\n - %s" %(sectionName)
20ec0d14798e Uploaded
urgi-team
parents:
diff changeset
154 if missingSection != "":
20ec0d14798e Uploaded
urgi-team
parents:
diff changeset
155 raise RepetException ("Error in configuration file %s, following sections are missing:%s\n" % (self._configFileName, missingSection))
20ec0d14798e Uploaded
urgi-team
parents:
diff changeset
156
20ec0d14798e Uploaded
urgi-team
parents:
diff changeset
157 def checkMandatoryOptions (self):
20ec0d14798e Uploaded
urgi-team
parents:
diff changeset
158 missingOption = ""
20ec0d14798e Uploaded
urgi-team
parents:
diff changeset
159 for sectionName in self._iExtendedConfigRules.dRules4Sections.keys():
20ec0d14798e Uploaded
urgi-team
parents:
diff changeset
160 if self._iExtendedConfigRules.isSectionMandatory(sectionName) or self._iRawConfig.has_section(sectionName) :
20ec0d14798e Uploaded
urgi-team
parents:
diff changeset
161 dRules4OptionsOfThisSection = self._iExtendedConfigRules.dRules4Sections[sectionName]
20ec0d14798e Uploaded
urgi-team
parents:
diff changeset
162 for optionName in dRules4OptionsOfThisSection.keys():
20ec0d14798e Uploaded
urgi-team
parents:
diff changeset
163 if optionName != "DEFAULT" and self._iExtendedConfigRules.isOptionMandatory(sectionName, optionName) and not self._iRawConfig.has_option(sectionName, optionName):
20ec0d14798e Uploaded
urgi-team
parents:
diff changeset
164 missingOption += "\n - [%s]: %s" % (sectionName, optionName)
20ec0d14798e Uploaded
urgi-team
parents:
diff changeset
165 if missingOption != "":
20ec0d14798e Uploaded
urgi-team
parents:
diff changeset
166 raise RepetException ("Error in configuration file %s, following options are missing: %s\n" % (self._configFileName, missingOption))
20ec0d14798e Uploaded
urgi-team
parents:
diff changeset
167
20ec0d14798e Uploaded
urgi-team
parents:
diff changeset
168 def getSectionNamesAccordingPatternRules (self, sectionWordOrPattern, isPattern):
20ec0d14798e Uploaded
urgi-team
parents:
diff changeset
169 lSectionsFoundAccordingPatternRules=[]
20ec0d14798e Uploaded
urgi-team
parents:
diff changeset
170 if isPattern == False:
20ec0d14798e Uploaded
urgi-team
parents:
diff changeset
171 if self._iRawConfig.has_section(sectionWordOrPattern):
20ec0d14798e Uploaded
urgi-team
parents:
diff changeset
172 lSectionsFoundAccordingPatternRules.append(sectionWordOrPattern)
20ec0d14798e Uploaded
urgi-team
parents:
diff changeset
173 else:
20ec0d14798e Uploaded
urgi-team
parents:
diff changeset
174 for sectionName in self._iRawConfig.sections():
20ec0d14798e Uploaded
urgi-team
parents:
diff changeset
175 if re.search(sectionWordOrPattern, sectionName, re.IGNORECASE):
20ec0d14798e Uploaded
urgi-team
parents:
diff changeset
176 lSectionsFoundAccordingPatternRules.append(sectionName)
20ec0d14798e Uploaded
urgi-team
parents:
diff changeset
177 return lSectionsFoundAccordingPatternRules
20ec0d14798e Uploaded
urgi-team
parents:
diff changeset
178
20ec0d14798e Uploaded
urgi-team
parents:
diff changeset
179 def getOptionsNamesAccordingPatternRules(self, sectionName, optionWordOrPattern, isPattern):
20ec0d14798e Uploaded
urgi-team
parents:
diff changeset
180 lOptionsFoundAccordingPatternRules=[]
20ec0d14798e Uploaded
urgi-team
parents:
diff changeset
181 if isPattern == False:
20ec0d14798e Uploaded
urgi-team
parents:
diff changeset
182 if self._iRawConfig.has_option(sectionName, optionWordOrPattern):
20ec0d14798e Uploaded
urgi-team
parents:
diff changeset
183 lOptionsFoundAccordingPatternRules.append(optionWordOrPattern)
20ec0d14798e Uploaded
urgi-team
parents:
diff changeset
184 else :
20ec0d14798e Uploaded
urgi-team
parents:
diff changeset
185 for optionName in self._iRawConfig.options(sectionName):
20ec0d14798e Uploaded
urgi-team
parents:
diff changeset
186 if re.search(optionWordOrPattern, optionName, re.IGNORECASE)!= None:
20ec0d14798e Uploaded
urgi-team
parents:
diff changeset
187 lOptionsFoundAccordingPatternRules.append(optionName)
20ec0d14798e Uploaded
urgi-team
parents:
diff changeset
188 return lOptionsFoundAccordingPatternRules
20ec0d14798e Uploaded
urgi-team
parents:
diff changeset
189
20ec0d14798e Uploaded
urgi-team
parents:
diff changeset
190 def extendConfigRulesWithPatternRules(self):
20ec0d14798e Uploaded
urgi-team
parents:
diff changeset
191 for sectionName in self._iConfigRules.dRules4Sections.keys():
20ec0d14798e Uploaded
urgi-team
parents:
diff changeset
192 dRules4OptionsOfThisSection = self._iConfigRules.dRules4Sections[sectionName]
20ec0d14798e Uploaded
urgi-team
parents:
diff changeset
193 lRawSections=[]
20ec0d14798e Uploaded
urgi-team
parents:
diff changeset
194 if dRules4OptionsOfThisSection.has_key("DEFAULT"):
20ec0d14798e Uploaded
urgi-team
parents:
diff changeset
195 mandatorySection = dRules4OptionsOfThisSection["DEFAULT"].mandatory
20ec0d14798e Uploaded
urgi-team
parents:
diff changeset
196 isPatternSection = dRules4OptionsOfThisSection["DEFAULT"].isPattern
20ec0d14798e Uploaded
urgi-team
parents:
diff changeset
197 lRawSections=self.getSectionNamesAccordingPatternRules(sectionName, isPatternSection)
20ec0d14798e Uploaded
urgi-team
parents:
diff changeset
198 for rawSectionName in lRawSections:
20ec0d14798e Uploaded
urgi-team
parents:
diff changeset
199 self._iExtendedConfigRules.addRuleSection(rawSectionName, "DEFAULT", mandatorySection )
20ec0d14798e Uploaded
urgi-team
parents:
diff changeset
200 if mandatorySection and (len(lRawSections)==0):
20ec0d14798e Uploaded
urgi-team
parents:
diff changeset
201 self._iExtendedConfigRules.addRuleSection(sectionName, "DEFAULT", mandatorySection )
20ec0d14798e Uploaded
urgi-team
parents:
diff changeset
202 else:
20ec0d14798e Uploaded
urgi-team
parents:
diff changeset
203 lRawSections.append(sectionName)
20ec0d14798e Uploaded
urgi-team
parents:
diff changeset
204 for optionName in dRules4OptionsOfThisSection.keys():
20ec0d14798e Uploaded
urgi-team
parents:
diff changeset
205 setOption = dRules4OptionsOfThisSection[optionName].set
20ec0d14798e Uploaded
urgi-team
parents:
diff changeset
206 isPatternOption = dRules4OptionsOfThisSection[optionName].isPattern
20ec0d14798e Uploaded
urgi-team
parents:
diff changeset
207 mandatoryOption = dRules4OptionsOfThisSection[optionName].mandatory
20ec0d14798e Uploaded
urgi-team
parents:
diff changeset
208 typeOption = dRules4OptionsOfThisSection[optionName].type
20ec0d14798e Uploaded
urgi-team
parents:
diff changeset
209 if optionName != "DEFAULT":
20ec0d14798e Uploaded
urgi-team
parents:
diff changeset
210 for rawSectionName in lRawSections:
20ec0d14798e Uploaded
urgi-team
parents:
diff changeset
211 lRawOptions=self.getOptionsNamesAccordingPatternRules(rawSectionName, optionName, isPatternOption)
20ec0d14798e Uploaded
urgi-team
parents:
diff changeset
212 for rawOptionName in lRawOptions:
20ec0d14798e Uploaded
urgi-team
parents:
diff changeset
213 self._iExtendedConfigRules.addRuleOption(rawSectionName, rawOptionName, mandatoryOption, False, typeOption, setOption)
20ec0d14798e Uploaded
urgi-team
parents:
diff changeset
214 if mandatoryOption and (len(lRawOptions)==0):
20ec0d14798e Uploaded
urgi-team
parents:
diff changeset
215 self._iExtendedConfigRules.addRuleOption(rawSectionName, optionName, mandatoryOption, False, typeOption, setOption)
20ec0d14798e Uploaded
urgi-team
parents:
diff changeset
216
20ec0d14798e Uploaded
urgi-team
parents:
diff changeset
217 def getConfig(self):
20ec0d14798e Uploaded
urgi-team
parents:
diff changeset
218 self.checkIfExistsConfigFile()
20ec0d14798e Uploaded
urgi-team
parents:
diff changeset
219 iConfig = self.readConfigFile()
20ec0d14798e Uploaded
urgi-team
parents:
diff changeset
220 self.setRawConfig(iConfig)
20ec0d14798e Uploaded
urgi-team
parents:
diff changeset
221 self.extendConfigRulesWithPatternRules()
20ec0d14798e Uploaded
urgi-team
parents:
diff changeset
222 self.checkMandatorySections()
20ec0d14798e Uploaded
urgi-team
parents:
diff changeset
223 self.checkMandatoryOptions()
20ec0d14798e Uploaded
urgi-team
parents:
diff changeset
224 self.setConfig(iConfig)
20ec0d14798e Uploaded
urgi-team
parents:
diff changeset
225 return self._iRawConfig