83 |
|
try: |
84 |
|
os.mkdir(self.continue_dir) |
85 |
|
except OSError: |
86 |
< |
msg = 'Cannot create '+str(self.continue_dir) +' directory.\n' |
86 |
> |
msg = 'ERROR: Cannot create '+str(self.continue_dir) +' directory.\n' |
87 |
|
raise CrabException(msg) |
88 |
|
pass |
89 |
|
else: |
90 |
< |
msg = 'Directory '+str(self.continue_dir) +' already exist.\n' |
90 |
> |
msg = 'ERROR: Directory '+str(self.continue_dir) +' already exist.\n' |
91 |
|
raise CrabException(msg) |
92 |
|
|
93 |
|
os.putenv("MULTICRAB_WORKDIR",self.continue_dir) |
131 |
|
cfg_params = self.loadMultiConfig(self.cfg_fname) |
132 |
|
pass |
133 |
|
else: |
134 |
< |
msg = 'cfg-file '+self.cfg_fname+' not found.' |
134 |
> |
msg = 'ERROR: cfg-file '+self.cfg_fname+' not found.' |
135 |
|
raise CrabException(msg) |
136 |
|
pass |
137 |
|
pass |
152 |
|
self.cfg_params_dataset = {} |
153 |
|
common_opts = {} |
154 |
|
# first get common sections |
155 |
+ |
crab_cfg='crab.cfg' # this is the default |
156 |
|
for sec in cfg_params: |
157 |
|
if sec in ['MULTICRAB']: |
158 |
|
if 'cfg' in cfg_params[sec]: |
159 |
|
common_opts['cfg']=cfg_params[sec]['cfg'] |
160 |
+ |
crab_cfg=common_opts['cfg']; |
161 |
|
continue |
162 |
|
if sec in ['COMMON']: |
163 |
|
common_opts.update(cfg_params[sec]) |
164 |
|
continue |
165 |
|
pass |
166 |
|
|
165 |
– |
crab_cfg='crab.cfg' |
166 |
– |
if common_opts.has_key('cfg') : crab_cfg=common_opts['cfg'] |
167 |
– |
|
168 |
– |
# then Dataset's specific |
169 |
– |
for sec in cfg_params: |
170 |
– |
if sec in ['MULTICRAB', 'COMMON']: continue |
171 |
– |
self.cfg_params_dataset[sec]=cfg_params[sec] |
172 |
– |
# add common to all dataset |
173 |
– |
for key in common_opts: |
174 |
– |
self.cfg_params_dataset[sec][key]=common_opts[key] |
175 |
– |
pass |
176 |
– |
|
167 |
|
# read crab.cfg file and search for storage_path |
168 |
|
crab_cfg_params = loadConfig(crab_cfg,{}) |
169 |
|
# also USER.ui_working_dir USER.outputdir and USER.logdir need special treatment |
174 |
|
self.ui_working_dir = cfg_params["COMMON"].get("user.ui_working_dir", crab_cfg_params.get("USER.ui_working_dir",None)) |
175 |
|
self.publish_data_name = cfg_params["COMMON"].get("user.publish_data_name", crab_cfg_params.get("USER.publish_data_name",None)) |
176 |
|
else: |
177 |
< |
self.user_remote_dir = crab_cfg_params.get("USER.user_remote_dir",None) |
177 |
> |
self.user_remote_dir = crab_cfg_params.get("USER.user_remote_dir","./") |
178 |
|
self.outputdir = crab_cfg_params.get("USER.outputdir",None) |
179 |
|
self.logdir = crab_cfg_params.get("USER.logdir",None) |
180 |
|
self.ui_working_dir = crab_cfg_params.get("USER.ui_working_dir",None) |
181 |
|
self.publish_data_name = crab_cfg_params.get("USER.publish_data_name",None) |
182 |
|
|
183 |
+ |
if common_opts.has_key('cfg') : crab_cfg=common_opts['cfg'] |
184 |
+ |
|
185 |
+ |
# then Dataset's specific |
186 |
+ |
for sec in cfg_params: |
187 |
+ |
if sec in ['MULTICRAB', 'COMMON']: continue |
188 |
+ |
# add common to all dataset |
189 |
+ |
self.cfg_params_dataset[sec]=cfg_params[sec] |
190 |
+ |
# special tratment for some parameter |
191 |
+ |
if not self.cfg_params_dataset[sec].has_key("user.publish_data_name") and self.publish_data_name: |
192 |
+ |
self.cfg_params_dataset[sec]["user.publish_data_name"]=self.publish_data_name+"_"+sec |
193 |
+ |
if not self.cfg_params_dataset[sec].has_key("user.user_remote_dir") and self.user_remote_dir: |
194 |
+ |
self.cfg_params_dataset[sec]["user.user_remote_dir"]=self.user_remote_dir+"/"+sec |
195 |
+ |
if not self.cfg_params_dataset[sec].has_key("user.ui_working_dir") and self.ui_working_dir: |
196 |
+ |
self.cfg_params_dataset[sec]["user.ui_working_dir"]=self.ui_working_dir+"/"+sec |
197 |
+ |
if not self.cfg_params_dataset[sec].has_key("user.logdir") and self.logdir: |
198 |
+ |
self.cfg_params_dataset[sec]["user.logdir"]=self.logdir+"/"+sec |
199 |
+ |
if not self.cfg_params_dataset[sec].has_key("user.outputdir") and self.outputdir: |
200 |
+ |
self.cfg_params_dataset[sec]["user.outputdir"]=self.outputdir+"/"+sec |
201 |
+ |
for key in common_opts: |
202 |
+ |
if not self.cfg_params_dataset[sec].has_key(key): |
203 |
+ |
self.cfg_params_dataset[sec][key]=common_opts[key] |
204 |
+ |
pass |
205 |
+ |
|
206 |
|
return |
207 |
|
|
208 |
|
def loadMultiConfig(self, file): |
217 |
|
# print 'Section',sec |
218 |
|
config[sec]={} |
219 |
|
for opt in cp.options(sec): |
220 |
< |
#print 'config['+sec+'.'+opt+'] = '+string.strip(cp.get(sec,opt)) |
220 |
> |
# print 'config['+sec+'.'+opt+'] = '+string.strip(cp.get(sec,opt)) |
221 |
|
config[sec][opt] = string.strip(cp.get(sec,opt)) |
222 |
|
return config |
223 |
|
|
239 |
|
|
240 |
|
options[tmp]=self.cfg_params_dataset[sec][opt] |
241 |
|
|
242 |
+ |
# if ui_working_dir is set, change -c dir accordnigly |
243 |
+ |
if not self.cfg_params_dataset.has_key("USER.ui_working_dir") and self.ui_working_dir: |
244 |
+ |
if self.flag_continue: |
245 |
+ |
options['-c']=self.ui_working_dir+"/"+sec |
246 |
+ |
|
247 |
|
# check if user_remote_dir is set in multicrab.cfg |
248 |
|
# protect against no user_remote_dir |
249 |
< |
self.user_remote_dir =self.cfg_params_dataset[sec].get("user.user_remote_dir",self.user_remote_dir) |
250 |
< |
if not self.user_remote_dir: |
251 |
< |
self.user_remote_dir = "./" |
249 |
> |
# self.user_remote_dir =self.cfg_params_dataset[sec].get("user.user_remote_dir",self.user_remote_dir) |
250 |
> |
# if not self.user_remote_dir: |
251 |
> |
# self.user_remote_dir = "./" |
252 |
|
# add section to storage_path if exist in crab.cfg |
253 |
< |
if not self.cfg_params_dataset.has_key("USER.user_remote_dir") and self.user_remote_dir: |
254 |
< |
options["-USER.user_remote_dir"]=self.user_remote_dir+"/"+sec |
253 |
> |
# if not self.cfg_params_dataset.has_key("USER.user_remote_dir") and self.user_remote_dir: |
254 |
> |
# options["-USER.user_remote_dir"]=self.user_remote_dir+"/"+sec |
255 |
|
# print options["-USER.user_remote_dir"] |
256 |
|
# also for ui_working_dir |
257 |
< |
if not self.cfg_params_dataset.has_key("USER.ui_working_dir") and self.ui_working_dir: |
258 |
< |
options["-USER.ui_working_dir"]=self.ui_working_dir+"/"+sec |
241 |
< |
# if ui_working_dir is set, change -c dir accordnigly |
242 |
< |
if self.flag_continue: |
243 |
< |
options['-c']=self.ui_working_dir+"/"+sec |
244 |
< |
|
257 |
> |
# if not self.cfg_params_dataset.has_key("USER.ui_working_dir") and self.ui_working_dir: |
258 |
> |
# options["-USER.ui_working_dir"]=self.ui_working_dir+"/"+sec |
259 |
|
# also for logDir |
260 |
< |
if not self.cfg_params_dataset.has_key("USER.logdir") and self.logdir: |
261 |
< |
options["-USER.logdir"]=self.logdir+"/"+sec |
262 |
< |
# also for outputdir |
263 |
< |
if not self.cfg_params_dataset.has_key("USER.outputdir") and self.outputdir: |
264 |
< |
options["-USER.outputdir"]=self.outputdir+"/"+sec |
260 |
> |
# if not self.cfg_params_dataset.has_key("USER.logdir") and self.logdir: |
261 |
> |
# options["-USER.logdir"]=self.logdir+"/"+sec |
262 |
> |
# # also for outputdir |
263 |
> |
# if not self.cfg_params_dataset.has_key("USER.outputdir") and self.outputdir: |
264 |
> |
# options["-USER.outputdir"]=self.outputdir+"/"+sec |
265 |
|
# also for publish_data_name |
266 |
< |
if not self.cfg_params_dataset.has_key("USER.publish_data_name") and self.publish_data_name: |
267 |
< |
options["-USER.publish_data_name"]=self.publish_data_name+"_"+sec |
266 |
> |
# print sec," ",self.cfg_params_dataset[sec], self.cfg_params_dataset[sec].has_key("user.publish_data_name") |
267 |
> |
# if not self.cfg_params_dataset[sec].has_key("user.publish_data_name") and self.publish_data_name: |
268 |
> |
# options["-USER.publish_data_name"]=self.publish_data_name+"_"+sec |
269 |
> |
# print "adding user.publish_data_name", self.cfg_params_dataset.has_key("user.publish_data_name") |
270 |
|
|
271 |
|
# Input options (command) |
272 |
|
for opt in self.opts: |
277 |
|
del options['-cfg'] |
278 |
|
pass |
279 |
|
|
280 |
+ |
|
281 |
|
# write crab command to be executed later... |
282 |
|
cmd='crab ' |
283 |
|
for o in options: |