2 # Copyright (C) 2010-2011 EDF R&D
4 # This library is free software; you can redistribute it and/or
5 # modify it under the terms of the GNU Lesser General Public
6 # License as published by the Free Software Foundation; either
7 # version 2.1 of the License.
9 # This library is distributed in the hope that it will be useful,
10 # but WITHOUT ANY WARRANTY; without even the implied warranty of
11 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 # Lesser General Public License for more details.
14 # You should have received a copy of the GNU Lesser General Public
15 # License along with this library; if not, write to the Free Software
16 # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
18 # See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
20 # Author: André Ribes, andre.ribes@edf.fr, EDF R&D
27 from daYacsSchemaCreator.infos_daComposant import *
31 logging.debug("Arguments are :" + str(args))
33 logging.fatal("Bad number of arguments: you have to provide two arguments (%d given)" % (len(args)))
36 def check_study(study_config):
38 logging.debug("[check_env] study_config : " + str(study_config))
41 if not isinstance(study_config, dict):
42 logging.fatal("Study configuration is not a dictionnary")
46 if "Name" not in study_config:
47 logging.fatal("Cannot found Name in the study configuration")
51 if "Algorithm" not in study_config:
52 logging.fatal("Cannot found Algorithm in the study configuration")
55 if study_config["Algorithm"] not in AssimAlgos:
56 logging.fatal("Algorithm provided is unknow : " + str(study_config["Algorithm"]) +
57 "\n You can choose between : " + str(AssimAlgos))
61 if "Debug" not in study_config:
62 study_config["Debug"] = "0"
65 check_repertory = False
67 if "Repertory" in study_config.keys():
68 repertory = study_config["Repertory"]
69 check_repertory = True
70 if not os.path.isabs(repertory):
71 logging.fatal("Study repertory should be an absolute path")
72 logging.fatal("Repertory provided is %s" % repertory)
75 # Check if all the data is provided
76 for key in AlgoDataRequirements[study_config["Algorithm"]]:
77 if key not in study_config.keys():
78 logging.fatal("Cannot found " + key + " in your study configuration !" +
79 "\n This key is mandatory into a study with " + study_config["Algorithm"] + " algorithm." +
80 "\n " + study_config["Algorithm"] + " requirements are " + str(AlgoDataRequirements[study_config["Algorithm"]]))
84 for key in study_config.keys():
86 check_data(key, study_config[key], check_repertory, repertory)
89 if "UserDataInit" in study_config.keys():
90 check_data("UserDataInit", study_config["UserDataInit"], check_repertory, repertory)
93 check_variables("InputVariables", study_config)
94 check_variables("OutputVariables", study_config)
97 if "UserPostAnalysis" in study_config.keys():
98 analysis_config = study_config["UserPostAnalysis"]
99 if "From" not in analysis_config:
100 logging.fatal("UserPostAnalysis found but From is not defined in the analysis configuration !")
103 if analysis_config["From"] not in AnalysisFromList:
104 logging.fatal("Analysis From defined in the study configuration does not have a correct type : " + str(analysis_config["From"])
105 + "\n You can have : " + str(AnalysisFromList))
107 if "Data" not in analysis_config:
108 logging.fatal("Analysis found but Data is not defined in the analysis configuration !")
111 if analysis_config["From"] == "Script":
114 check_file_name = os.path.join(repertory, os.path.basename(analysis_config["Data"]))
116 check_file_name = analysis_config["Data"]
117 if not os.path.exists(check_file_name):
118 logging.fatal("A script file cannot be found")
119 logging.fatal("File is %s" % check_file_name)
123 if "Observers" in study_config.keys():
124 for obs_var in study_config["Observers"]:
126 if not isinstance(study_config["Observers"][obs_var], type({})):
127 logging.fatal("An observer description has to be a Python dictionary")
128 logging.fatal("Observer is %s" % obs_var)
130 if "nodetype" not in study_config["Observers"][obs_var].keys():
131 logging.fatal("An observer description must provide a nodetype")
132 logging.fatal("Observer is %s" % obs_var)
134 nodetype = study_config["Observers"][obs_var]["nodetype"]
135 if not isinstance(study_config["Observers"][obs_var]["nodetype"], type("")):
136 logging.fatal("An observer nodetype description must be a string")
137 logging.fatal("Observer is %s" % obs_var)
139 if nodetype != "pyscript" and nodetype != "userfile":
140 logging.fatal("An observer nodetype must be equal to 'pyscript' or 'userfile'")
141 logging.fatal("Observer is %s" % obs_var)
143 if nodetype == "pyscript":
144 if "pyscript" not in study_config["Observers"][obs_var].keys():
145 logging.fatal("An observer with nodetype pyscript must provide a pyscript")
146 logging.fatal("Observer is %s" % obs_var)
148 if not isinstance(study_config["Observers"][obs_var]["pyscript"], type("")):
149 logging.fatal("An observer pyscript description must be a string")
150 logging.fatal("Observer is %s" % obs_var)
152 if nodetype == "userfile":
153 if "userfile" not in study_config["Observers"][obs_var].keys():
154 logging.fatal("An observer with nodetype userfileuserfilemust provide a pyscript")
155 logging.fatal("Observer is %s" % obs_var)
157 if not isinstance(study_config["Observers"][obs_var]["userfile"], type("")):
158 logging.fatal("An observer userfile description must be a string")
159 logging.fatal("Observer is %s" % obs_var)
161 if "scheduler" in study_config["Observers"][obs_var].keys():
162 if not isinstance(study_config["Observers"][obs_var]["scheduler"], type("")):
163 logging.fatal("An observer scheduler description must be a string")
164 logging.fatal("Observer is %s" % obs_var)
167 def check_variables(name, study_config):
169 if name not in study_config.keys():
170 logging.fatal("%s not found in your study configuration!" % name)
173 variable_config = study_config[name]
174 if "Order" not in variable_config.keys():
175 logging.fatal("Order not found in the %s configuration!" % name)
178 list_of_variables = variable_config["Order"]
179 if not isinstance(list_of_variables, type([])):
180 logging.fatal("Order sould be a list in the %s configuration!" % name)
182 if len(list_of_variables) < 1:
183 logging.fatal("Order should contain one or more names in the %s configuration!" % name)
186 for var in list_of_variables:
187 if var not in variable_config.keys():
188 logging.fatal("Variable %s not found in the %s configuration!" % name)
190 value = variable_config[var]
194 loggind.fatal("Variable %s value cannot be converted in an integer in the %s configuration!" % name)
197 def check_data(data_name, data_config, repertory_check=False, repertory=""):
199 logging.debug("[check_data] " + data_name)
200 data_name_data = "Data"
201 data_name_type = "Type"
202 data_name_from = "From"
204 if data_name_data not in data_config:
205 logging.fatal(data_name +" found but " + data_name_data +" is not defined in the study configuration !")
208 if data_name_type not in data_config:
209 logging.fatal(data_name +" found but " + data_name_type +" is not defined in the study configuration !")
212 if data_config[data_name_type] not in AssimType[data_name]:
213 logging.fatal(data_name_type + " defined in the study configuration does not have a correct type : " + str(data_config[data_name_type])
214 + "\n You can have : " + str(AssimType[data_name]))
216 if data_name_from not in data_config:
217 logging.fatal(data_name + " found but " + data_name_from + " is not defined in the study configuration !")
220 if data_config[data_name_from] not in FromNumpyList[data_config[data_name_type]]:
221 logging.fatal(data_name_from + " defined in the study configuration does not have a correct value : " + str(data_config[data_name_from])
222 + "\n You can have : " + str(FromNumpyList[data_config[data_name_type]]))
226 from_type = data_config["From"]
227 if from_type == "Script":
230 check_file_name = os.path.join(repertory, os.path.basename(data_config["Data"]))
232 check_file_name = data_config["Data"]
233 if not os.path.exists(check_file_name):
234 logging.fatal("A script file cannot be found")
235 logging.fatal("File is %s" % check_file_name)
237 elif from_type == "FunctionDict":
238 FunctionDict = data_config["Data"]
239 for FunctionName in FunctionDict["Function"]:
242 check_file_name = os.path.join(repertory, os.path.basename(FunctionDict["Script"][FunctionName]))
244 check_file_name = FunctionDict["Script"][FunctionName]
245 if not os.path.exists(check_file_name):
246 logging.fatal("A script file cannot be found")
247 logging.fatal("File is %s" % check_file_name)