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 105 of file cmssw_exportdb_xml.py.

References createNode().

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

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

Definition at line 5 of file cmssw_exportdb_xml.py.

References 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().

5 def createNode(xml_doc, node_name, values = {}, parent = None):
6  if (parent == None):
7  parent = xml_doc
8  #create node
9  node = xml_doc.createElement(node_name)
10  # assign the values
11  for (key, value) in values.items():
12  node.setAttribute(key, str(value))
13  parent.appendChild(node)
14 
15  return node
16 
17 
def createNode(xml_doc, node_name, values={}, parent=None)
#define str(s)
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 126 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().

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

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

Referenced by exportRunInfo().

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

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

Referenced by exportRunInfo().

197 def export_xml_memcheck(release, jobID, memcheck_errors, xml_doc, metadata = None, parentNode = None):
198  if not parentNode:
199  parentNode = _getXMLNode(xml_doc)
200 
201  values=jobID
202  values.update({"release": release})
203  if (metadata):
204  values.update(metadata)
205 
206  # we create a new XML element having all the statistics data for our candle, step, release
207  jobStatsNode = createNode(node_name= "jobStats", xml_doc=xml_doc, parent=parentNode,
208  values=values)
209 
210  xml_export_Memcheck(memcheck_errors, jobStatsNode, xml_doc)
211 
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 283 of file cmssw_exportdb_xml.py.

References _getXMLNode(), and createNode().

283 def exportECRules(xml_doc, rules):
284  node_xml = _getXMLNode(xml_doc)
285  runInfoNode = createNode(node_name= "EventContentRules", xml_doc=xml_doc, parent=node_xml,
286  values=rules)
287 
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 212 of file cmssw_exportdb_xml.py.

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

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

References createNode().

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

Definition at line 288 of file cmssw_exportdb_xml.py.

References edm.print(), and str.

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

Definition at line 31 of file cmssw_exportdb_xml.py.

Referenced by xml_export_Sequences().

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

Definition at line 65 of file cmssw_exportdb_xml.py.

References createNode().

Referenced by export_xml().

65 def xml_export_EdmRecord(data, curr_stat_node, xml_doc):
66  event_node =createNode(xml_doc, "EdmSize", values = data, parent = curr_stat_node)
67 
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 55 of file cmssw_exportdb_xml.py.

References createNode().

Referenced by export_xml().

55 def xml_export_EventRssRecord(evt_time_data, curr_stat_node, xml_doc):
56  #print "a"+str(evt_time_data)
57  (evt_num, evt_time) = evt_time_data
58  event_node =createNode(xml_doc, "EventRSS", values = {"evt_num": evt_num, "time": evt_time}, parent = curr_stat_node)
59 
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 49 of file cmssw_exportdb_xml.py.

References createNode().

Referenced by export_xml().

49 def xml_export_EventTimeRecord(evt_time_data, curr_stat_node, xml_doc):
50  #print "a"+str(evt_time_data)
51  (evt_num, evt_time) = evt_time_data
52 
53  event_node =createNode(xml_doc, "EventTime", values = {"evt_num": evt_num, "time": evt_time}, parent = curr_stat_node)
54 
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 60 of file cmssw_exportdb_xml.py.

References createNode().

Referenced by export_xml().

60 def xml_export_EventVsizeRecord(evt_time_data, curr_stat_node, xml_doc):
61  #print "a"+str(evt_time_data)
62  (evt_num, evt_time) = evt_time_data
63  event_node =createNode(xml_doc, "EventVSIZE", values = {"evt_num": evt_num, "time": evt_time}, parent = curr_stat_node)
64 
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 68 of file cmssw_exportdb_xml.py.

References createNode().

Referenced by export_xml_ig().

68 def xml_export_IgSummary(data, curr_stat_node, xml_doc):
69  event_node =createNode(xml_doc, "IgSummary", values = data, parent = curr_stat_node)
70 
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 71 of file cmssw_exportdb_xml.py.

References createNode().

Referenced by export_xml_memcheck().

71 def xml_export_Memcheck(data, curr_stat_node, xml_doc):
72  event_node =createNode(xml_doc, "Memcheck", values = data, parent = curr_stat_node)
73 
74 
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 36 of file cmssw_exportdb_xml.py.

References createNode().

Referenced by export_xml().

36 def xml_export_ModuleTimeRecord(data_dict, curr_stat_node, xml_doc):
37  #print "Dict: "+str(data_dict)
38  # create a module tag to be used to put the data into
39  module_node =createNode(xml_doc, "Module", values = data_dict, parent = curr_stat_node)
40 
41  # clean it up if there are old stats of ModuleTime, now there shouldn't be any anymore!
42  #xml_delete_children(module_node, "ModuleTime")
43 
44  # we create a new XML element having the statistics data
45  moduletime_stat =createNode(xml_doc, "ModuleTime", values = data_dict["stats"], parent = module_node)
46 
47  module_node.appendChild(moduletime_stat)
48 
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 75 of file cmssw_exportdb_xml.py.

References createNode().

Referenced by xml_export_Sequences().

75 def xml_export_SequenceRecord(data, curr_seq_node, xml_doc):
76  seq_node =createNode(xml_doc, "Sequence", values = data, parent = curr_seq_node)
77 
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 117 of file cmssw_exportdb_xml.py.

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

Referenced by cmsPerfSuiteHarvest.exportSequences().

117 def xml_export_Sequences(xml_doc, sequences, release):
118  currentNode = xml_init_Sequences(xml_doc, release)
119  xml_delete_children(currentNode, "Sequence")
120 
121  if (sequences):
122  for seq in sequences:
123  xml_export_SequenceRecord(data=seq, curr_seq_node=currentNode, xml_doc=xml_doc)
124 
125 
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 78 of file cmssw_exportdb_xml.py.

References createNode().

Referenced by xml_export_Sequences().

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