CMS 3D CMS Logo

Functions
cmssw_exportdb_xml Namespace Reference

Functions

def _getXMLNode (xml_doc)
 
def createNode (xml_doc, node_name, values={}, parent=None)
 
def export_xml (release, jobID, timelog_result, xml_doc, metadata=None, edmSize_result=None, parentNode=None)
 
def export_xml_ig (release, jobID, igprof_result, xml_doc, metadata=None, parentNode=None)
 
def export_xml_memcheck (release, jobID, memcheck_errors, xml_doc, metadata=None, parentNode=None)
 
def exportECRules (xml_doc, rules)
 
def exportRunInfo (xml_doc, run_info, release=None, print_out=False)
 
def initXML (xmldoc)
 
def write_xml (xml_doc, remotedir, xmlFileName)
 
def xml_delete_children (nodes, child_name)
 
def xml_export_EdmRecord (data, curr_stat_node, xml_doc)
 
def xml_export_EventRssRecord (evt_time_data, curr_stat_node, xml_doc)
 
def xml_export_EventTimeRecord (evt_time_data, curr_stat_node, xml_doc)
 
def xml_export_EventVsizeRecord (evt_time_data, curr_stat_node, xml_doc)
 
def xml_export_IgSummary (data, curr_stat_node, xml_doc)
 
def xml_export_Memcheck (data, curr_stat_node, xml_doc)
 
def xml_export_ModuleTimeRecord (data_dict, curr_stat_node, xml_doc)
 
def xml_export_SequenceRecord (data, curr_seq_node, xml_doc)
 
def xml_export_Sequences (xml_doc, sequences, release)
 
def xml_init_Sequences (xml_doc, release)
 

Function Documentation

def cmssw_exportdb_xml._getXMLNode (   xml_doc)
private
opens existing or creates a new XML object 

Definition at line 104 of file cmssw_exportdb_xml.py.

References createNode().

Referenced by export_xml(), export_xml_ig(), export_xml_memcheck(), exportECRules(), and exportRunInfo().

104 def _getXMLNode(xml_doc):
105  """ opens existing or creates a new XML object """
106  try:
107  node_xml = xml_doc.getElementsByTagName("xml")[0]
108  except IndexError:
109  #doc = minidom.Document()
110  node_xml = createNode(xml_doc, "xml")
111  return node_xml
112 
113 
114 
115 
def createNode(xml_doc, node_name, values={}, parent=None)
def cmssw_exportdb_xml.createNode (   xml_doc,
  node_name,
  values = {},
  parent = None 
)

Definition at line 4 of file cmssw_exportdb_xml.py.

References harvestTrackValidationPlots.str.

Referenced by _getXMLNode(), export_xml(), export_xml_ig(), export_xml_memcheck(), exportECRules(), exportRunInfo(), initXML(), edm::WaitingTaskList::WaitNode.nextNode(), xml_export_EdmRecord(), xml_export_EventRssRecord(), xml_export_EventTimeRecord(), xml_export_EventVsizeRecord(), xml_export_IgSummary(), xml_export_Memcheck(), xml_export_ModuleTimeRecord(), xml_export_SequenceRecord(), and xml_init_Sequences().

4 def createNode(xml_doc, node_name, values = {}, parent = None):
5  if (parent == None):
6  parent = xml_doc
7  #create node
8  node = xml_doc.createElement(node_name)
9  # assign the values
10  for (key, value) in values.items():
11  node.setAttribute(key, str(value))
12  parent.appendChild(node)
13 
14  return node
15 
16 
def createNode(xml_doc, node_name, values={}, parent=None)
def cmssw_exportdb_xml.export_xml (   release,
  jobID,
  timelog_result,
  xml_doc,
  metadata = None,
  edmSize_result = None,
  parentNode = None 
)
jobID is a dictionary now ! 

Definition at line 125 of file cmssw_exportdb_xml.py.

References _getXMLNode(), createNode(), xml_export_EdmRecord(), xml_export_EventRssRecord(), xml_export_EventTimeRecord(), xml_export_EventVsizeRecord(), and xml_export_ModuleTimeRecord().

Referenced by exportRunInfo(), parserTimingReport.manual_run(), and parserTimingReport.perf_profile().

125 def export_xml(release, jobID, timelog_result, xml_doc, metadata = None, edmSize_result =None, parentNode = None):
126  """ jobID is a dictionary now ! """
127 
128  if not parentNode:
129  #get the root XML node
130  parentNode = _getXMLNode(xml_doc)
131 
132  #create jobStats node
133  values=jobID
134  values.update({"release": release})
135  if (metadata):
136  values.update(metadata)
137 
138  # we create a new XML element having all the statistics data for our candle, step, release
139  jobStatsNode = createNode(node_name= "jobStats", xml_doc=xml_doc, parent=parentNode,
140  values=values)
141 
142  #TODO: load current module data or delete
143 
144  (mod_timelog_result, evt_timelog_result, rss_result, vsize_result) = timelog_result
145 
146  # modules data
147  for (mod_name, mod_time_result) in mod_timelog_result.items():
148  xml_export_ModuleTimeRecord(mod_time_result, jobStatsNode, xml_doc)
149 
150  """ #TODO: actualy we're not supposed to have any of the old statistics
151  # clean it up if there are old stats of EventTime,RSS,VSIZE
152  xml_delete_children(jobStatsNode, "EventTime")
153  xml_delete_children(jobStatsNode, "EventRSS")
154  xml_delete_children(jobStatsNode, "EventVSIZE")
155  xml_delete_children(jobStatsNode, "EdmSize") """
156 
157  #events data - so far only total time per event
158  if (evt_timelog_result):
159  for evt_time_item in evt_timelog_result:
160  xml_export_EventTimeRecord(evt_time_item, jobStatsNode, xml_doc)
161 
162  # rss
163  if (rss_result):
164  for evt_time_item in rss_result:
165  xml_export_EventRssRecord(evt_time_item, jobStatsNode, xml_doc)
166 
167  # vsize
168  if (vsize_result):
169  for evt_time_item in vsize_result:
170  xml_export_EventVsizeRecord(evt_time_item, jobStatsNode, xml_doc)
171  # edmSize
172  if (edmSize_result):
173  for edmItem in edmSize_result:
174  xml_export_EdmRecord(edmItem, jobStatsNode, xml_doc)
175 
def xml_export_EventTimeRecord(evt_time_data, curr_stat_node, xml_doc)
def xml_export_EventRssRecord(evt_time_data, curr_stat_node, xml_doc)
def xml_export_ModuleTimeRecord(data_dict, curr_stat_node, xml_doc)
def export_xml(release, jobID, timelog_result, xml_doc, metadata=None, edmSize_result=None, parentNode=None)
def createNode(xml_doc, node_name, values={}, parent=None)
def xml_export_EventVsizeRecord(evt_time_data, curr_stat_node, xml_doc)
def xml_export_EdmRecord(data, curr_stat_node, xml_doc)
def cmssw_exportdb_xml.export_xml_ig (   release,
  jobID,
  igprof_result,
  xml_doc,
  metadata = None,
  parentNode = None 
)
jobID is a dictionary now ! 

Definition at line 176 of file cmssw_exportdb_xml.py.

References _getXMLNode(), createNode(), and xml_export_IgSummary().

Referenced by exportRunInfo().

176 def export_xml_ig(release, jobID, igprof_result, xml_doc, metadata = None, parentNode = None):
177  """ jobID is a dictionary now ! """
178 
179  if not parentNode:
180  #get the root XML node
181  parentNode = _getXMLNode(xml_doc)
182 
183  #create jobStats node
184  values=jobID
185  values.update({"release": release})
186  if (metadata):
187  values.update(metadata)
188 
189  # we create a new XML element having all the statistics data for our candle, step, release
190  jobStatsNode = createNode(node_name= "jobStats", xml_doc=xml_doc, parent=parentNode,
191  values=values)
192 
193  for igsumm in igprof_result:
194  xml_export_IgSummary(igsumm, jobStatsNode, xml_doc)
195 
def createNode(xml_doc, node_name, values={}, parent=None)
def xml_export_IgSummary(data, curr_stat_node, xml_doc)
def export_xml_ig(release, jobID, igprof_result, xml_doc, metadata=None, parentNode=None)
def cmssw_exportdb_xml.export_xml_memcheck (   release,
  jobID,
  memcheck_errors,
  xml_doc,
  metadata = None,
  parentNode = None 
)

Definition at line 196 of file cmssw_exportdb_xml.py.

References _getXMLNode(), createNode(), and xml_export_Memcheck().

Referenced by exportRunInfo().

196 def export_xml_memcheck(release, jobID, memcheck_errors, xml_doc, metadata = None, parentNode = None):
197  if not parentNode:
198  parentNode = _getXMLNode(xml_doc)
199 
200  values=jobID
201  values.update({"release": release})
202  if (metadata):
203  values.update(metadata)
204 
205  # we create a new XML element having all the statistics data for our candle, step, release
206  jobStatsNode = createNode(node_name= "jobStats", xml_doc=xml_doc, parent=parentNode,
207  values=values)
208 
209  xml_export_Memcheck(memcheck_errors, jobStatsNode, xml_doc)
210 
def createNode(xml_doc, node_name, values={}, parent=None)
def export_xml_memcheck(release, jobID, memcheck_errors, xml_doc, metadata=None, parentNode=None)
def xml_export_Memcheck(data, curr_stat_node, xml_doc)
def cmssw_exportdb_xml.exportECRules (   xml_doc,
  rules 
)

Definition at line 282 of file cmssw_exportdb_xml.py.

References _getXMLNode(), and createNode().

282 def exportECRules(xml_doc, rules):
283  node_xml = _getXMLNode(xml_doc)
284  runInfoNode = createNode(node_name= "EventContentRules", xml_doc=xml_doc, parent=node_xml,
285  values=rules)
286 
def createNode(xml_doc, node_name, values={}, parent=None)
def exportECRules(xml_doc, rules)
def cmssw_exportdb_xml.exportRunInfo (   xml_doc,
  run_info,
  release = None,
  print_out = False 
)

Definition at line 211 of file cmssw_exportdb_xml.py.

References _getXMLNode(), createNode(), export_xml(), export_xml_ig(), export_xml_memcheck(), and mps_monitormerge.items.

211 def exportRunInfo(xml_doc, run_info, release = None, print_out = False):
212  node_xml = _getXMLNode(xml_doc)
213  #get the simple string values
214  str_values = run_info["General"]
215 
216  #if we have the forced release name (e.g. icludes some special tags for testing but not official release)
217  # so TODO: probably the test_release_based_on string would be the same so we still save the (original) test release based string
218 
219  if release:
220  str_values["release"] = release
221  else:
222  str_values["release"] = str_values["test_release_based_on"]
223 
224  runInfoNode = createNode(node_name= "RunInfo", xml_doc=xml_doc, parent=node_xml,
225  values=str_values)
226  #create nodes for TestResults:
227  for (testName, result) in run_info["TestResults"].items():
228  #either we have one node or multiple ones (if list)
229  if type(result) == list:
230  for result_item in result:
231  result_item.update({"testname": testName})
232 
233  #We have JOBS so FAR only for TimeSize which we represent as a list
234  jobs = []
235  #we don't want jobs to be dumped as string
236  if "jobs" in result_item:
237  jobs = result_item["jobs"]
238  del result_item["jobs"]
239 
240  testNode = createNode(node_name="testResult", xml_doc=xml_doc, parent=runInfoNode, values=result_item)
241 
242 
243  for job in jobs:
244  #print job
245  if testName == "TimeSize":
246  export_xml(xml_doc = xml_doc, parentNode = testNode, **job)
247  elif testName == "IgProf_Mem":
248  export_xml_ig(xml_doc = xml_doc, parentNode = testNode, **job)
249  elif testName == "IgProf_Perf":
250  export_xml_ig(xml_doc = xml_doc, parentNode = testNode, **job)
251  elif testName == "Memcheck":
252  export_xml_memcheck(xml_doc = xml_doc, parentNode = testNode, **job)
253  else:
254  result.update({"testname": testName})
255  createNode(node_name="testResult", xml_doc=xml_doc, parent=runInfoNode, values=result)
256 
257  #DO we have some unrecognized JOBS?
258  if len(run_info['unrecognized_jobs']):
259  unrecognizedJobsNode = createNode(node_name="Unrecognized_JOBS", xml_doc=xml_doc, parent=runInfoNode, values={})
260 
261  for job in run_info['unrecognized_jobs']:
262  #print job
263  testName = job["metadata"]["testname"]
264  if testName == "TimeSize":
265  export_xml(xml_doc = xml_doc, parentNode = unrecognizedJobsNode, **job)
266  elif testName == "IgProf_Mem":
267  export_xml_ig(xml_doc = xml_doc, parentNode = unrecognizedJobsNode, **job)
268  elif testName == "IgProf_Perf":
269  export_xml_ig(xml_doc = xml_doc, parentNode = unrecognizedJobsNode, **job)
270  elif testName == "Memcheck":
271  export_xml_memcheck(xml_doc = xml_doc, parentNode = unrecognizedJobsNode, **job)
272 
273 
274  #cmsSciMark
275  cmsSciMarkNode = createNode(node_name="cmsSciMarks", xml_doc=xml_doc, parent=runInfoNode, values = {})
276  for csiMark in run_info["cmsSciMark"]:
277  #print csiMark
278  createNode(node_name="cmsSciMark", xml_doc=xml_doc, parent=cmsSciMarkNode, values=csiMark)
279  if print_out:
280  print xml_doc.toprettyxml(indent="\t")
281 
def export_xml(release, jobID, timelog_result, xml_doc, metadata=None, edmSize_result=None, parentNode=None)
def createNode(xml_doc, node_name, values={}, parent=None)
def export_xml_memcheck(release, jobID, memcheck_errors, xml_doc, metadata=None, parentNode=None)
def exportRunInfo(xml_doc, run_info, release=None, print_out=False)
def export_xml_ig(release, jobID, igprof_result, xml_doc, metadata=None, parentNode=None)
def cmssw_exportdb_xml.initXML (   xmldoc)
opens existing or creates a new XML file 
    
  ---- one of the erliest functions - quite nasty looking :)

Definition at line 17 of file cmssw_exportdb_xml.py.

References createNode().

17 def initXML(xmldoc):
18  """ opens existing or creates a new XML file
19 
20  ---- one of the erliest functions - quite nasty looking :)"""
21 
22  try:
23  node_xml = xmldoc.getElementsByTagName("xml")[0]
24  except IndexError:
25  #doc = minidom.Document()
26  node_xml = createNode(xmldoc, "xml")
27 
28  return node_xml
29 
def createNode(xml_doc, node_name, values={}, parent=None)
def cmssw_exportdb_xml.write_xml (   xml_doc,
  remotedir,
  xmlFileName 
)

Definition at line 287 of file cmssw_exportdb_xml.py.

References harvestTrackValidationPlots.str.

287 def write_xml(xml_doc, remotedir,xmlFileName):
288  xml = xml_doc.toprettyxml(indent=" ")
289 
290  # return xml as string (if requested)
291  if (xmlFileName == ""):
292  return xml
293  #Adding a modification to make sure the file is written in /tmp/$USER_perfsuite_xml dir (to allow any used to harvest any workdir without permission issues.
294  tmp_dir="/tmp/%s_perfsuite_xml"%os.getenv("USER")
295  if not os.path.exists(tmp_dir):
296  os.system("mkdir %s"%tmp_dir)
297  xmlFileName=os.path.join(tmp_dir,xmlFileName)
298  # or save that as file
299  out = open(xmlFileName, "w")
300  #print xml locally
301  out.write(xml)
302  out.close()
303  print "Now copying %s to stage directory %s..."%(xmlFileName,remotedir)
304 
305  #FIXME: Here we could decide to archive it on CASTOR on a dedicated directory
306  if ":" in remotedir: #CAVEAT: since we report the timestamp as part of the xml filename we need to be careful..
307  (host,dir)=remotedir.split(":")
308  #change to the directory to avoid tar replicating /tmp/$USER_perfsuite_xml/ directory structure remotely:
309  copy_cmd='cd %s; tar cf - %s|ssh %s "cd %s;tar xf -"'%(tmp_dir,os.path.basename(xmlFileName),host,dir)
310  else:
311  if not os.path.exists(remotedir):
312  os.system("mkdir %s"%remotedir)
313  #tarpipe_cmd='cd %s;tar cf - %s|(cd %s;tar xf -)'%(tmp_dir,os.path.basename(xmlFileName),remotedir)
314  copy_cmd='cp -pR %s/%s %s'%(tmp_dir,os.path.basename(xmlFileName),remotedir)
315  try:
316  print copy_cmd
317  os.system(copy_cmd)
318  print "Successfully copied XML report %s to stage directory %s"%(xmlFileName,remotedir)
319  except Exception as e :
320  print "Issues with copying XML report %s to stage directory %s!\n%s"%(xmlFileName,remotedir,str(e))
321  #os.system("cd -") #just in case...
322 
323 
324 
def write_xml(xml_doc, remotedir, xmlFileName)
def cmssw_exportdb_xml.xml_delete_children (   nodes,
  child_name 
)

Definition at line 30 of file cmssw_exportdb_xml.py.

Referenced by xml_export_Sequences().

30 def xml_delete_children(nodes, child_name):
31  for x in nodes.getElementsByTagName(child_name):
32  nodes.removeChild(x)
33 
34 
def xml_delete_children(nodes, child_name)
def cmssw_exportdb_xml.xml_export_EdmRecord (   data,
  curr_stat_node,
  xml_doc 
)

Definition at line 64 of file cmssw_exportdb_xml.py.

References createNode().

Referenced by export_xml().

64 def xml_export_EdmRecord(data, curr_stat_node, xml_doc):
65  event_node =createNode(xml_doc, "EdmSize", values = data, parent = curr_stat_node)
66 
def createNode(xml_doc, node_name, values={}, parent=None)
def xml_export_EdmRecord(data, curr_stat_node, xml_doc)
def cmssw_exportdb_xml.xml_export_EventRssRecord (   evt_time_data,
  curr_stat_node,
  xml_doc 
)

Definition at line 54 of file cmssw_exportdb_xml.py.

References createNode().

Referenced by export_xml().

54 def xml_export_EventRssRecord(evt_time_data, curr_stat_node, xml_doc):
55  #print "a"+str(evt_time_data)
56  (evt_num, evt_time) = evt_time_data
57  event_node =createNode(xml_doc, "EventRSS", values = {"evt_num": evt_num, "time": evt_time}, parent = curr_stat_node)
58 
def xml_export_EventRssRecord(evt_time_data, curr_stat_node, xml_doc)
def createNode(xml_doc, node_name, values={}, parent=None)
def cmssw_exportdb_xml.xml_export_EventTimeRecord (   evt_time_data,
  curr_stat_node,
  xml_doc 
)

Definition at line 48 of file cmssw_exportdb_xml.py.

References createNode().

Referenced by export_xml().

48 def xml_export_EventTimeRecord(evt_time_data, curr_stat_node, xml_doc):
49  #print "a"+str(evt_time_data)
50  (evt_num, evt_time) = evt_time_data
51 
52  event_node =createNode(xml_doc, "EventTime", values = {"evt_num": evt_num, "time": evt_time}, parent = curr_stat_node)
53 
def xml_export_EventTimeRecord(evt_time_data, curr_stat_node, xml_doc)
def createNode(xml_doc, node_name, values={}, parent=None)
def cmssw_exportdb_xml.xml_export_EventVsizeRecord (   evt_time_data,
  curr_stat_node,
  xml_doc 
)

Definition at line 59 of file cmssw_exportdb_xml.py.

References createNode().

Referenced by export_xml().

59 def xml_export_EventVsizeRecord(evt_time_data, curr_stat_node, xml_doc):
60  #print "a"+str(evt_time_data)
61  (evt_num, evt_time) = evt_time_data
62  event_node =createNode(xml_doc, "EventVSIZE", values = {"evt_num": evt_num, "time": evt_time}, parent = curr_stat_node)
63 
def createNode(xml_doc, node_name, values={}, parent=None)
def xml_export_EventVsizeRecord(evt_time_data, curr_stat_node, xml_doc)
def cmssw_exportdb_xml.xml_export_IgSummary (   data,
  curr_stat_node,
  xml_doc 
)

Definition at line 67 of file cmssw_exportdb_xml.py.

References createNode().

Referenced by export_xml_ig().

67 def xml_export_IgSummary(data, curr_stat_node, xml_doc):
68  event_node =createNode(xml_doc, "IgSummary", values = data, parent = curr_stat_node)
69 
def createNode(xml_doc, node_name, values={}, parent=None)
def xml_export_IgSummary(data, curr_stat_node, xml_doc)
def cmssw_exportdb_xml.xml_export_Memcheck (   data,
  curr_stat_node,
  xml_doc 
)

Definition at line 70 of file cmssw_exportdb_xml.py.

References createNode().

Referenced by export_xml_memcheck().

70 def xml_export_Memcheck(data, curr_stat_node, xml_doc):
71  event_node =createNode(xml_doc, "Memcheck", values = data, parent = curr_stat_node)
72 
73 
def createNode(xml_doc, node_name, values={}, parent=None)
def xml_export_Memcheck(data, curr_stat_node, xml_doc)
def cmssw_exportdb_xml.xml_export_ModuleTimeRecord (   data_dict,
  curr_stat_node,
  xml_doc 
)

Definition at line 35 of file cmssw_exportdb_xml.py.

References createNode().

Referenced by export_xml().

35 def xml_export_ModuleTimeRecord(data_dict, curr_stat_node, xml_doc):
36  #print "Dict: "+str(data_dict)
37  # create a module tag to be used to put the data into
38  module_node =createNode(xml_doc, "Module", values = data_dict, parent = curr_stat_node)
39 
40  # clean it up if there are old stats of ModuleTime, now there shouldn't be any anymore!
41  #xml_delete_children(module_node, "ModuleTime")
42 
43  # we create a new XML element having the statistics data
44  moduletime_stat =createNode(xml_doc, "ModuleTime", values = data_dict["stats"], parent = module_node)
45 
46  module_node.appendChild(moduletime_stat)
47 
def xml_export_ModuleTimeRecord(data_dict, curr_stat_node, xml_doc)
def createNode(xml_doc, node_name, values={}, parent=None)
def cmssw_exportdb_xml.xml_export_SequenceRecord (   data,
  curr_seq_node,
  xml_doc 
)

Definition at line 74 of file cmssw_exportdb_xml.py.

References createNode().

Referenced by xml_export_Sequences().

74 def xml_export_SequenceRecord(data, curr_seq_node, xml_doc):
75  seq_node =createNode(xml_doc, "Sequence", values = data, parent = curr_seq_node)
76 
def createNode(xml_doc, node_name, values={}, parent=None)
def xml_export_SequenceRecord(data, curr_seq_node, xml_doc)
def cmssw_exportdb_xml.xml_export_Sequences (   xml_doc,
  sequences,
  release 
)

Definition at line 116 of file cmssw_exportdb_xml.py.

References xml_delete_children(), xml_export_SequenceRecord(), and xml_init_Sequences().

Referenced by cmsPerfSuiteHarvest.exportSequences().

116 def xml_export_Sequences(xml_doc, sequences, release):
117  currentNode = xml_init_Sequences(xml_doc, release)
118  xml_delete_children(currentNode, "Sequence")
119 
120  if (sequences):
121  for seq in sequences:
122  xml_export_SequenceRecord(data=seq, curr_seq_node=currentNode, xml_doc=xml_doc)
123 
124 
def xml_export_Sequences(xml_doc, sequences, release)
def xml_delete_children(nodes, child_name)
def xml_init_Sequences(xml_doc, release)
def xml_export_SequenceRecord(data, curr_seq_node, xml_doc)
def cmssw_exportdb_xml.xml_init_Sequences (   xml_doc,
  release 
)
opens existing or creates a new XML file 
    returns the (existing or created) unique element for statiscs

Definition at line 77 of file cmssw_exportdb_xml.py.

References createNode().

Referenced by xml_export_Sequences().

77 def xml_init_Sequences(xml_doc, release):
78  #TODO: this was copied from init_XML - it should not be like that - refactor
79  """ opens existing or creates a new XML file
80  returns the (existing or created) unique element for statiscs"""
81  try:
82  node_xml = xml_doc.getElementsByTagName("xml")[0]
83  except IndexError:
84  #doc = minidom.Document()
85  node_xml = createNode(xml_doc, "xml")
86 
87  nodes =node_xml.getElementsByTagName("Sequences")
88 
89  currentNode = [node for node in nodes
90  if (release ==node.attributes["release"].value)]
91  #TODO: end of copied
92 
93  if (currentNode):
94  currentNode = currentNode[0]
95  #TODO: this part looks nasty
96  else:
97  values={"release": release}
98  # we create a new XML element having all the statistics data for our candle, step, release
99  currentNode = createNode(node_name= "Sequences", xml_doc=xml_doc, parent=node_xml,
100  values=values)
101  node_xml.appendChild(currentNode)
102  return currentNode
103 
def createNode(xml_doc, node_name, values={}, parent=None)
def xml_init_Sequences(xml_doc, release)