CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
List of all members | Public Member Functions | Public Attributes | Static Public Attributes
cmsHarvester.DBSXMLHandler Class Reference

Helper class: DBSXMLHandler. More...

Inheritance diagram for cmsHarvester.DBSXMLHandler:

Public Member Functions

def __init__
 
def characters
 
def check_results_validity
 
def current_element
 
def endElement
 
def startElement
 

Public Attributes

 current_value
 
 element_position
 
 results
 
 tag_names
 

Static Public Attributes

dictionary mapping
 

Detailed Description

Helper class: DBSXMLHandler.

XML handler class to parse DBS results.

The tricky thing here is that older DBS versions (2.0.5 and
earlier) return results in a different XML format than newer
versions. Previously the result values were returned as attributes
to the `result' element. The new approach returns result values as
contents of named elements.

The old approach is handled directly in startElement(), the new
approach in characters().

NOTE: All results are returned in the form of string values of
      course!

Definition at line 184 of file cmsHarvester.py.

Constructor & Destructor Documentation

def cmsHarvester.DBSXMLHandler.__init__ (   self,
  tag_names 
)

Definition at line 217 of file cmsHarvester.py.

218  def __init__(self, tag_names):
219  # This is a list used as stack to keep track of where we are
220  # in the element tree.
222  self.tag_names = tag_names
223  self.results = {}

Member Function Documentation

def cmsHarvester.DBSXMLHandler.characters (   self,
  content 
)

Definition at line 256 of file cmsHarvester.py.

References cmsHarvester.DBSXMLHandler.current_element(), and cmsHarvester.DBSXMLHandler.tag_names.

257  def characters(self, content):
258  # NOTE: It is possible that the actual contents of the tag
259  # gets split into multiple pieces. This method will be called
260  # for each of the pieces. This means we have to concatenate
261  # everything ourselves.
262  if self.current_element() in self.tag_names:
263  self.current_value.append(content)
def cmsHarvester.DBSXMLHandler.check_results_validity (   self)
Make sure that all results arrays have equal length.

We should have received complete rows from DBS. I.e. all
results arrays in the handler should be of equal length.

Definition at line 267 of file cmsHarvester.py.

References cmsHarvester.DBSXMLHandler.results.

268  def check_results_validity(self):
269  """Make sure that all results arrays have equal length.
270 
271  We should have received complete rows from DBS. I.e. all
272  results arrays in the handler should be of equal length.
273 
274  """
275 
276  results_valid = True
277 
278  res_names = self.results.keys()
279  if len(res_names) > 1:
280  for res_name in res_names[1:]:
281  res_tmp = self.results[res_name]
282  if len(res_tmp) != len(self.results[res_names[0]]):
283  results_valid = False
284 
285  return results_valid
def cmsHarvester.DBSXMLHandler.current_element (   self)

Definition at line 264 of file cmsHarvester.py.

References cmsHarvester.DBSXMLHandler.element_position.

Referenced by cmsHarvester.DBSXMLHandler.characters(), and cmsHarvester.DBSXMLHandler.endElement().

265  def current_element(self):
266  return self.element_position[-1]
def cmsHarvester.DBSXMLHandler.endElement (   self,
  name 
)

Definition at line 243 of file cmsHarvester.py.

References python.multivaluedict.append(), cmsHarvester.DBSXMLHandler.current_element(), cmsHarvester.DBSXMLHandler.current_value, join(), cmsHarvester.DBSXMLHandler.results, and cmsHarvester.DBSXMLHandler.tag_names.

244  def endElement(self, name):
245  assert self.current_element() == name, \
246  "closing unopenend element `%s'" % name
247 
248  if self.current_element() in self.tag_names:
249  contents = "".join(self.current_value)
250  if self.results.has_key(self.current_element()):
251  self.results[self.current_element()].append(contents)
252  else:
253  self.results[self.current_element()] = [contents]
254 
255  self.element_position.pop()
static std::string join(char **cmd)
Definition: RemoteFile.cc:18
def cmsHarvester.DBSXMLHandler.startElement (   self,
  name,
  attrs 
)

Definition at line 224 of file cmsHarvester.py.

225  def startElement(self, name, attrs):
226  self.element_position.append(name)
228  self.current_value = []
229 
230  #----------
231 
232  # This is to catch results from DBS 2.0.5 and earlier.
233  if name == "result":
234  for name in self.tag_names:
235  key = DBSXMLHandler.mapping[name]
236  value = str(attrs[key])
237  try:
238  self.results[name].append(value)
239  except KeyError:
240  self.results[name] = [value]
241 
242  #----------

Member Data Documentation

cmsHarvester.DBSXMLHandler.current_value

Definition at line 227 of file cmsHarvester.py.

Referenced by cmsHarvester.DBSXMLHandler.endElement().

cmsHarvester.DBSXMLHandler.element_position

Definition at line 220 of file cmsHarvester.py.

Referenced by cmsHarvester.DBSXMLHandler.current_element().

dictionary cmsHarvester.DBSXMLHandler.mapping
static
Initial value:
1 = {
2  "dataset" : "PATH",
3  "dataset.tag" : "PROCESSEDDATASET_GLOBALTAG",
4  "datatype.type" : "PRIMARYDSTYPE_TYPE",
5  "run" : "RUNS_RUNNUMBER",
6  "run.number" : "RUNS_RUNNUMBER",
7  "file.name" : "FILES_LOGICALFILENAME",
8  "file.numevents" : "FILES_NUMBEROFEVENTS",
9  "algo.version" : "APPVERSION_VERSION",
10  "site" : "STORAGEELEMENT_SENAME",
11  }

Definition at line 205 of file cmsHarvester.py.

cmsHarvester.DBSXMLHandler.results

Definition at line 222 of file cmsHarvester.py.

Referenced by cmsHarvester.DBSXMLHandler.check_results_validity(), and cmsHarvester.DBSXMLHandler.endElement().

cmsHarvester.DBSXMLHandler.tag_names

Definition at line 221 of file cmsHarvester.py.

Referenced by cmsHarvester.DBSXMLHandler.characters(), and cmsHarvester.DBSXMLHandler.endElement().