1
2
3
4 """
5 A class for parsing an IceTray XML configuration and building a Python
6 IceTrayConfig object.
7
8 copyright (c) 2005 the icecube collaboration
9
10 @version: $Revision: $
11 @date: $Date: 2005/04/06 17:32:56 $
12 @author: T. McCauley <tpmccauley@lbl.gov>
13 @author: Paolo Desiati <paolo.desiati@icecube.wisc.edu>
14 @author: Juan Carlos Diaz Velez <juancarlos@icecube.wisc.edu>
15
16 @todo: Validation against schema
17 @todo: Add support for more project content (the "optional" option)
18 @todo: Be a bit more clever about handling of type tags
19 @todo: Commas and whitespace handling in projects attribute
20 @todo: What to do if libraries are included more than once?
21 @todo: Add some overall elegance
22 @todo: Fix the "inbox" problem
23 """
24
25 import sys,os
26 import string,re
27 import logging
28 import iceprod.core.logger
29 from iceprod.core.dataclasses import *
30 from iceprod.core import ipxml
31 from iceprod.core.metadata import *
32
33
34 logger = logging.getLogger('IceTrayXMLParser')
35
36 SupportedTypes = ['bool', 'int', 'long', 'float', 'double', 'string','OMKey']
37 VectorTypes = ['boolv', 'intv', 'longv', 'floatv', 'doublev', 'stringv','OMKeyv']
38 UnmetDependencyException = "Error: Un-met dependency:"
39
40
42
44 self.i3config = i3config
45 self.metadata = None
46 self.deprecated = False
47
50
52 """
53 Read Steering parameters from the XML configuration file
54 fill Steering object for each steering parameter
55 add Steering object to IceTrayConfig steering list
56 """
57
58
59 steering = doc.getElementsByTagName('steering')
60
61 for par in steering:
62
63 category = None
64 try:
65 category = par.getElementsByTagName('category')
66 i3config.SetCategory(category[0].firstChild.data)
67 except:
68 logger.debug("Document contains no category")
69
70 filterElement = par.getElementsByTagName('OF')
71 if filterElement:
72 filt = OfflineFilter()
73 if filterElement[0].hasAttribute('prefix'):
74 filt.SetPrefix(filterElement[0].getAttribute('prefix'))
75 if filterElement[0].hasAttribute('search'):
76 filt.search = False
77 if filterElement[0].getAttribute('search') == "True":
78 filt.search = True
79 for pathElement in filterElement[0].getElementsByTagName('path'):
80 path = Path(pathElement.firstChild.data)
81 if pathElement.hasAttribute('regex'):
82 path.regex = pathElement.getAttribute('regex')
83 filt.AddPath(path)
84 i3config.SetOF(filt)
85
86 xterns = par.getElementsByTagName('external')
87 for x in xterns:
88 ex = Extern()
89
90 name = x.getElementsByTagName('name')
91 ex.SetName(name[0].firstChild.data)
92
93 edesc = x.getElementsByTagName('description')
94 if edesc:
95 ex.SetDescription(edesc[0].firstChild.data)
96
97 executable = x.getElementsByTagName('executable')
98 ex.SetExec(executable[0].firstChild.data)
99
100 args = x.getElementsByTagName('args')
101 if args:
102 ex.SetArgs(args[0].firstChild.data)
103
104 infile = x.getElementsByTagName('in')
105 if infile:
106 ex.SetInFile(infile[0].firstChild.data)
107
108 outfile = x.getElementsByTagName('out')
109 if outfile:
110 ex.SetOutFile(outfile[0].firstChild.data)
111
112 errfile = x.getElementsByTagName('err')
113 if errfile:
114 ex.SetErrFile(errfile[0].firstChild.data)
115
116 esteer = x.getElementsByTagName('extern-steering')
117 for ef in esteer:
118 es = ExternSteering()
119 es_name = ef.getElementsByTagName('name')
120 es.SetName(es_name[0].firstChild.data)
121 es_text = ef.getElementsByTagName('text')
122 es.SetText(es_text[0].firstChild.data)
123 ex.AddSteering(es)
124
125 self.LoadParameters(x,ex)
126
127 i3config.AddExtern(ex)
128 logger.debug('Added external "%s" ' % ex.GetName())
129
130 self.LoadParameters(par,i3config)
131
132 batchopts = par.getElementsByTagName('batchopt')
133 system = par.getElementsByTagName('system')
134 for item in system: batchopts += item.getElementsByTagName('batchopt')
135 for o in batchopts:
136 opt = BatchOpt()
137
138 bname = o.getElementsByTagName('name')
139 bname = bname[0].firstChild.data
140 btype = o.getElementsByTagName('type')
141 if btype:
142 btype = btype[0].firstChild.data
143 else:
144 btype = '*'
145 bvalue = o.getElementsByTagName('value')
146 bvalue = bvalue[0].firstChild.data
147
148 opt.SetName(bname)
149 opt.SetType(btype)
150 opt.SetValue(bvalue)
151 i3config.AddBatchOpt(opt)
152
153 sysopts = []
154 for item in system: sysopts += item.getElementsByTagName('sysopt')
155 for o in sysopts:
156 opt = BatchOpt()
157
158 bname = o.getElementsByTagName('name')
159 bname = bname[0].firstChild.data
160 bvalue = o.getElementsByTagName('value')
161 bvalue = bvalue[0].firstChild.data
162
163 opt.SetName(bname)
164 opt.SetValue(bvalue)
165 i3config.AddSysOpt(opt)
166
167
168 depends = par.getElementsByTagName('dependency')
169 for darray in depends:
170
171
172 i3config.AddDependency(darray.firstChild.data)
173
174 desc = par.getElementsByTagName('description')
175 if desc:
176 i3config.SetDescription(desc[0].firstChild.data)
177
178 task_defs = par.getElementsByTagName('tasks')
179 if task_defs:
180 logger.debug("tasks section specified in config file")
181 self.LoadTaskDefinitions(task_defs[0],i3config)
182
184 task_defs = task_defs.getElementsByTagName("task")
185 if not task_defs:
186 logger.error("no tasks defined in tasks section")
187 trashcan_parents = []
188 for task_def in task_defs:
189 if task_def.hasAttribute("id"):
190 name = task_def.getAttribute("id")
191 td_obj = TaskDefinition(name)
192 reqs = task_def.getElementsByTagName("taskReqs")
193 parallel = task_def.getAttribute("parallel") == "true"
194 photonics = task_def.getAttribute("photonics") == "true"
195 td_obj.SetParallelExecution(parallel)
196 td_obj.SetUsesPhotonics(photonics)
197 logger.debug("found task definition %s (parallel=%s)" % (name,parallel))
198 if reqs:
199 reqs = reqs[0].firstChild.data
200 logger.debug("requirements for task definition %s: %s" % (name, reqs))
201 td_obj.SetRequirements(reqs)
202 trays = task_def.getElementsByTagName("taskTray")
203 if trays:
204 for tray in trays:
205 idx = tray.getAttribute('tray')
206 iters = tray.getAttribute('iters')
207 externs = tray.getAttribute('externs') == "true"
208 msg = "added tray to task definition %s: (idx=%s, iters=%s,"
209 msg += " externs=%s)"
210 logger.debug(msg % (name,idx,iters,externs))
211 td_obj.AddTray(idx, iters, externs)
212
213 if trays:
214
215 childNodes = ipxml.Evaluate('taskRel/taskChild[@taskId="%s"]' % name, task_def.parentNode)
216 for node in childNodes:
217 relNode = node.parentNode
218 parents = relNode.getElementsByTagName('taskParent')
219 for parent in parents:
220 parentName = parent.getAttribute('taskId')
221 logger.debug("task definition %s has parent %s", name, parentName)
222 td_obj.AddParent(parentName)
223
224
225 parentNodes = ipxml.Evaluate('taskRel/taskParent[@taskId="%s"]' % name, task_def.parentNode)
226 for node in parentNodes:
227 relNode = node.parentNode
228 children = relNode.getElementsByTagName('taskChild')
229 for child in children:
230 childName = child.getAttribute('taskId')
231 logger.debug("task definition %s has child %s", name, childName)
232 td_obj.AddChild(childName)
233
234 if not parentNodes and name != TASK_TRASHCAN_NAME:
235 trashcan_parents.append(name)
236
237 obj.AddTaskDefinition(td_obj)
238 else:
239 logger.error("task definition %s has no trays, skipping" % name)
240 else:
241 logger.error("task defined without id, skipping")
242
243 if obj.GetTaskDefinitions().has_key(TASK_TRASHCAN_NAME):
244 trashcan = obj.GetTaskDefinition(TASK_TRASHCAN_NAME)
245 else:
246 trashcan = TaskDefinition(TASK_TRASHCAN_NAME)
247 trashcan.AddTray(0, 0, 0)
248 obj.AddTaskDefinition(trashcan)
249 for parent in trashcan_parents:
250 trashcan.AddParent(parent)
251
253
254 params = par.getElementsByTagName('parameters')
255 if not params:
256 params = par
257 logger.debug("no parameters section found")
258 else:
259 params = params[0]
260
261 for stype in SupportedTypes:
262 ps = params.getElementsByTagName(stype)
263 if len(ps) != 0:
264 for p in ps:
265 stparameter = Parameter()
266
267 pname = p.getElementsByTagName('name')
268 pname = pname[0].firstChild.data
269 pvalues = p.getElementsByTagName('value')
270
271
272 stparameter.SetType(stype)
273 stparameter.SetName(pname)
274 if stype in VectorTypes:
275 valuearray = []
276 pvalue = map(lambda x: x.firstChild.data,pvalues)
277 else:
278 pvalue = pvalues[0].firstChild.data
279 stparameter.SetValue(pvalue)
280
281 logger.debug("steering %s %s %s" % (stype,pname,pvalue))
282
283
284 obj.AddParameter(stparameter)
285
286
289
290
291 - def AddTrays(self,configElement,i3config):
292 """
293 Detects what project is used by IceTray modules and services,
294 by inspecting the <icetray>, <module> and <service> attributes
295 in the icetray configuration file.
296
297 Builds a projects list.
298 """
299
300 logger.debug('ADD LIBRARIES')
301
302
303 i3array = []
304 for icetray in configElement.getElementsByTagName('icetray'):
305 i3tray = IceTrayConfig()
306 tray_name = icetray.getElementsByTagName('name')
307 if tray_name:
308 i3tray.SetName(tray_name[0].firstChild.data)
309 if icetray.hasAttribute('events'):
310 events = icetray.getAttribute('events')
311 i3tray.SetEvents(events)
312 if icetray.hasAttribute('iter'):
313 iter = icetray.getAttribute('iter')
314 i3tray.SetIterations(iter)
315 file_types = ('input', 'output')
316 for file_type in file_types:
317 if file_type == 'input':
318 func = i3tray.AddInputFile
319 else:
320 func = i3tray.AddOutputFile
321 nodes = ipxml.Evaluate('files/%s/file' % file_type, icetray)
322 for node in nodes:
323 photonics = False
324 if node.hasAttribute('photonics'):
325 photonics = node.getAttribute('photonics') == "true"
326 logger.debug("Added %s as an %s file" \
327 % (node.firstChild.data, file_type))
328 file = IceTrayFile(node.firstChild.data, photonics)
329 func(file)
330
331
332 i3config.AddTray(i3tray)
333 i3array.append((icetray,i3tray))
334 return i3array
335
380
381
383 """
384 Load projects from icetray configuration file
385 """
386 logger.debug('ADD PROJECTS')
387
388 projects = i3Element.getElementsByTagName('project')
389
390 for p in projects:
391 project = Project()
392
393
394 pname = p.getElementsByTagName('name')
395 pname = pname[0].firstChild.data
396 pver = p.Evaluate('version')
397 pver = pver[0].firstChild.data
398 project.SetName(pname)
399 project.SetVersion(pver)
400
401 depends = p.getAttribute('dependencies')
402 if depends:
403 for d in depends.split(','):
404 project.AddDependency(d)
405
406
407 i3tray.AddProject(pname,project)
408 logger.debug("added project %s" % project.GetName())
409
411 """
412 Load services from icetray configuration file
413 """
414 logger.debug('ADD IceProdPre')
415
416 xpre = i3Element.getElementsByTagName('IceProdPre')
417
418 for s in xpre:
419 pre = IceProdPre()
420
421 sclass = s.getAttribute('class')
422 sname = s.getElementsByTagName('name')
423 sname = sname[0].firstChild.data
424
425
426 pre.SetName(sname)
427 pre.SetClass(sclass)
428
429 parameters = s.getElementsByTagName('parameters')
430
431 if len(parameters) != 0:
432 for pmtr in parameters:
433 for stype in SupportedTypes + VectorTypes:
434 ps = pmtr.getElementsByTagName(stype)
435 if len(ps) != 0:
436 for p in ps:
437 sparameter = Parameter()
438
439 pname = p.getElementsByTagName('name')
440 pname = pname[0].firstChild.data
441 pvalues = p.getElementsByTagName('value')
442 pmaps = p.getElementsByTagName('map')
443
444
445 sparameter.SetType(stype)
446 sparameter.SetName(pname)
447
448 value = []
449
450 for pvalue in pvalues:
451 val = Value(pvalue.firstChild.data)
452 if pvalue.getAttribute('unit'):
453 punit = pvalue.getAttribute('unit')
454 val.unit = punit
455 if pvalue.getAttribute('format'):
456 pformat = pvalue.getAttribute('format')
457 val.format = pformat
458 value.append( val )
459
460 for pmap in pmaps:
461 pcvalues = pmap.getElementsByTagName('cvalue')
462 val = pyOMKey("0","0")
463 for pcval in pcvalues:
464 label = pcval.getAttribute('label')
465 if label == 'stringid':
466 val.stringid = pcval.firstChild.data
467 logger.debug("found stringid %s"% val.stringid)
468 elif label == 'omid':
469 val.omid = pcval.firstChild.data
470 logger.debug("found omid %s"% val.omid)
471 value.append( val )
472
473 if stype in VectorTypes: sparameter.SetValue( value )
474 else: sparameter.SetValue( value[0] )
475
476 pre.AddParameter(sparameter)
477 logger.debug("%s %s %s %s" % (sname,stype,pname,sparameter.GetValue()))
478
479
480
481 i3tray.AddIceProdPre(pre)
482
483
484 - def AddIceProdPost(self,i3Element,i3tray):
485 """
486 Load posts from icetray configuration file
487 """
488 logger.debug('ADD IceProdPosts')
489
490 xpost = i3Element.getElementsByTagName('IceProdPost')
491
492 for s in xpost:
493 post = IceProdPost()
494
495 sclass = s.getAttribute('class')
496 sname = s.getElementsByTagName('name')
497 sname = sname[0].firstChild.data
498
499
500 post.SetName(sname)
501 post.SetClass(sclass)
502
503 parameters = s.getElementsByTagName('parameters')
504
505 if len(parameters) != 0:
506 for pmtr in parameters:
507 for stype in SupportedTypes + VectorTypes:
508 ps = pmtr.getElementsByTagName(stype)
509 if len(ps) != 0:
510 for p in ps:
511 sparameter = Parameter()
512
513 pname = p.getElementsByTagName('name')
514 pname = pname[0].firstChild.data
515 pvalues = p.getElementsByTagName('value')
516 pmaps = p.getElementsByTagName('map')
517
518
519 sparameter.SetType(stype)
520 sparameter.SetName(pname)
521
522 value = []
523
524 for pvalue in pvalues:
525 val = Value(pvalue.firstChild.data)
526 if pvalue.getAttribute('unit'):
527 punit = pvalue.getAttribute('unit')
528 val.unit = punit
529 if pvalue.getAttribute('format'):
530 pformat = pvalue.getAttribute('format')
531 val.format = pformat
532 value.append( val )
533
534 for pmap in pmaps:
535 pcvalues = pmap.getElementsByTagName('cvalue')
536 val = pyOMKey("0","0")
537 for pcval in pcvalues:
538 label = pcval.getAttribute('label')
539 if label == 'stringid':
540 val.stringid = pcval.firstChild.data
541 logger.debug("found stringid %s"% val.stringid)
542 elif label == 'omid':
543 val.omid = pcval.firstChild.data
544 logger.debug("found omid %s"% val.omid)
545 value.append( val )
546
547 if stype in VectorTypes: sparameter.SetValue( value )
548 else: sparameter.SetValue( value[0] )
549
550 post.AddParameter(sparameter)
551 logger.debug("%s %s %s %s" % (sname,stype,pname,sparameter.GetValue()))
552
553
554
555 i3tray.AddIceProdPost(post)
556
558 """
559 Load services from icetray configuration file
560 """
561 logger.debug('ADD SERVICES')
562
563 service = i3Element.getElementsByTagName('service')
564
565 for s in service:
566 service = Service()
567
568 sclass = s.getAttribute('class')
569 if s.hasAttribute('projects'):
570 prname = s.getAttribute('projects')
571 prname = string.split(prname, ',')
572
573
574 if prname:
575 for prjname in prname:
576 project = i3tray.GetProject(prjname)
577 if not project:
578 raise UnmetDependencyException, "%s needed by %s"%(prjname,sclass)
579
580 service.AddProject(prjname,project)
581 logger.debug("service '%s' -- added dependency '%s'" % (sclass,project.GetName()))
582
583 sname = s.getElementsByTagName('name')
584 sname = sname[0].firstChild.data
585
586
587 service.SetName(sname)
588 service.SetClass(sclass)
589
590 parameters = s.getElementsByTagName('parameters')
591
592
593
594 if len(parameters) != 0:
595 for pmtr in parameters:
596 for stype in SupportedTypes + VectorTypes:
597 ps = pmtr.getElementsByTagName(stype)
598 if len(ps) != 0:
599 for p in ps:
600 sparameter = Parameter()
601
602 pname = p.getElementsByTagName('name')
603 pname = pname[0].firstChild.data
604 pvalues = p.getElementsByTagName('value')
605 pmaps = p.getElementsByTagName('map')
606
607
608 sparameter.SetType(stype)
609 sparameter.SetName(pname)
610
611 value = []
612
613 for pvalue in pvalues:
614 val = Value(pvalue.firstChild.data)
615 if pvalue.getAttribute('unit'):
616 punit = pvalue.getAttribute('unit')
617 val.unit = punit
618 if pvalue.getAttribute('format'):
619 pformat = pvalue.getAttribute('format')
620 val.format = pformat
621 value.append( val )
622
623 for pmap in pmaps:
624 pcvalues = pmap.getElementsByTagName('cvalue')
625 val = pyOMKey("0","0")
626 for pcval in pcvalues:
627 label = pcval.getAttribute('label')
628 if label == 'stringid':
629 val.stringid = pcval.firstChild.data
630 logger.debug("found stringid %s"% val.stringid)
631 elif label == 'omid':
632 val.omid = pcval.firstChild.data
633 logger.debug("found omid %s"% val.omid)
634 value.append( val )
635
636 if stype in VectorTypes: sparameter.SetValue( value )
637 else: sparameter.SetValue( value[0] )
638
639 service.AddParameter(sparameter)
640 logger.debug("%s %s %s %s" % (sname,stype,pname,sparameter.GetValue()))
641
642
643
644 i3tray.AddService(service)
645
646
648 """
649 Load modules from icetray configuration file
650 """
651
652 logger.debug('ADD MODULES')
653
654 modules = i3Element.getElementsByTagName('module')
655
656 for m in modules:
657 module = Module()
658
659 mclass = m.getAttribute('class')
660 if m.hasAttribute('projects'):
661 prname = m.getAttribute('projects')
662 if prname:
663 prname = string.split(prname, ',')
664
665 for prjname in prname:
666 project = i3tray.GetProject(prjname)
667 if not project:
668 raise UnmetDependencyException, "%s:%s needed by %s"%(m,prjname,mclass)
669
670 module.AddProject(prjname,project)
671
672 mname = m.getElementsByTagName('name')
673 mname = mname[0].firstChild.data
674
675
676 module.SetName(mname)
677 module.SetClass(mclass)
678
679 parameters = m.getElementsByTagName('parameters')
680
681
682 if len(parameters) != 0:
683 for pmtr in parameters:
684
685
686
687
688 for stype in SupportedTypes + VectorTypes:
689
690
691 ps = pmtr.getElementsByTagName(stype)
692
693
694 if len(ps) != 0:
695 for p in ps:
696 mparameter = Parameter()
697
698 pname = p.getElementsByTagName('name')
699 pname = pname[0].firstChild.data
700 pvalues = p.getElementsByTagName('value')
701 pmaps = p.getElementsByTagName('map')
702
703 mparameter.SetType(stype)
704 mparameter.SetName(pname)
705 value = []
706
707
708 for pvalue in pvalues:
709 val = Value(pvalue.firstChild.data)
710 if pvalue.getAttribute('unit'):
711 punit = pvalue.getAttribute('unit')
712 val.unit = punit
713 if pvalue.getAttribute('format'):
714 pformat = pvalue.getAttribute('format')
715 val.format = pformat
716 value.append( val )
717
718 for pmap in pmaps:
719 pcvalues = pmap.getElementsByTagName('cvalue')
720 val = pyOMKey("0","0")
721 for pcval in pcvalues:
722 label = pcval.getAttribute('label')
723 if label == 'stringid':
724 val.stringid = pcval.firstChild.data
725 logger.debug("found stringid %s"% val.stringid)
726 elif label == 'omid':
727 val.omid = pcval.firstChild.data
728 logger.debug("found omid %s"% val.omid)
729 value.append( val )
730
731 if stype in VectorTypes: mparameter.SetValue( value )
732 else: mparameter.SetValue( value[0] )
733
734 module.AddParameter(mparameter)
735 logger.debug("%s %s %s %s" %(mname,stype,pname,mparameter.GetValue()))
736
737
738 i3tray.AddModule(module)
739
740
742 """
743 Connect icetray boxes to complete IceTray configuration
744 """
745
746 logger.debug('CONNECT BOXES')
747
748 connections = i3Element.getElementsByTagName('connection')
749
750
751
752
753
754 for c in connections:
755 connection = Connection()
756
757 cfrom = c.getElementsByTagName('from')
758
759 from_module = cfrom[0].getElementsByTagName('module')
760 from_module = from_module[0].firstChild.data
761
762 outbox = cfrom[0].getElementsByTagName('outbox')
763 outbox = outbox[0].firstChild.data
764
765 cto = c.getElementsByTagName('to')
766
767 to_module = cto[0].getElementsByTagName('module')
768 to_module = to_module[0].firstChild.data
769
770 inbox = cto[0].getElementsByTagName('inbox')
771 inbox = inbox[0].firstChild.data
772
773
774 connection.From(from_module, outbox)
775 connection.To(to_module, inbox)
776
777
778 i3tray.AddConnection(connection)
779
780
781 - def ParseFile(self,config_file_name,validate=1):
782
783
784 doc = None
785 try:
786
787 xmlin = open(config_file_name, 'r')
788 logger.debug("opened %s" % config_file_name)
789 doc = ipxml.Parse(xmlin, validate=validate)
790 xmlin.close()
791
792 except Exception, xe:
793 logger.error("Exception: " + str(xe) )
794 logger.error("Could not validate. Perhaps using an old config file?")
795 sys.excepthook(sys.exc_type,sys.exc_value,sys.exc_traceback)
796 return
797 config = self.LoadDocument(doc)
798 del doc
799 return config
800
802
803 config = doc.getElementsByTagName('configuration')
804 if config[0].hasAttribute('parentid'):
805 self.i3config.SetParentId(int(config[0].getAttribute('parentid')))
806 if config[0].hasAttribute('version'):
807 self.i3config.SetVersion(int(config[0].getAttribute('version')))
808 else:
809 self.i3config.SetVersion(1)
810 print "could not read version"
811 difplus = config[0].getElementsByTagName('DIF_Plus')
812 if difplus:
813 metadataparser = MetadataParser()
814 metadataparser.LoadDIF(difplus[0])
815 metadataparser.LoadPlus(difplus[0])
816 self.i3config.AddDIFPlus(metadataparser.GetDIFPlus())
817
818
819 logger.debug("self.LoadSteering(doc)")
820 self.LoadSteering(doc.documentElement,self.i3config)
821
822
823 logger.debug("self.AddTrays(doc,i3config)")
824 for doctray,tray in self.AddTrays(doc,self.i3config):
825
826
827 logger.debug("self.AddMetaProjects(doc)")
828 self.AddMetaProjects(doctray,tray)
829
830
831
832
833
834
835 logger.debug("self.AddIceProdPre(doc)")
836 self.AddIceProdPre(doctray,tray)
837
838
839 logger.debug("self.AddServices(doc)")
840 self.AddServices(doctray,tray)
841
842
843 logger.debug("self.AddModules(doc)")
844 self.AddModules(doctray,tray)
845
846
847 logger.debug("self.AddConnections(doc)")
848 self.AddConnections(doctray,tray)
849
850
851 logger.debug("self.AddIceProdPost(doc)")
852 self.AddIceProdPost(doctray,tray)
853
854 if self.deprecated:
855 logger.warn("You are using a deprecated XML config. In the future this will not work!")
856
857 return self.i3config
858
859
860
861 if __name__ == '__main__':
862
863 logging.basicConfig()
864 if len(sys.argv) != 2:
865 logger.error('Usage: python config.py <xml config file>')
866 sys.exit()
867
868
869 i3config = Steering()
870 parser = IceTrayXMLParser(i3config)
871 i3config = parser.ParseFile(sys.argv[1],validate=1)
872
873 if i3config:
874 from iceprod.core import xmlwriter
875 writer = xmlwriter.IceTrayXMLWriter(i3config)
876 writer.write_to_file()
877 writer.write_to_file("testconfig-1.xml")
878