Mercurial > hg > MetaDataProvider
diff MetaData.py @ 14:281d223aa361
attribution works now
author | casties |
---|---|
date | Mon, 01 Aug 2011 19:30:12 +0200 |
parents | 5f48f956ffa3 |
children | 41b90f09a1f2 |
line wrap: on
line diff
--- a/MetaData.py Fri Jul 29 20:35:10 2011 +0200 +++ b/MetaData.py Mon Aug 01 19:30:12 2011 +0200 @@ -72,7 +72,7 @@ return path def getSubDom(self, path=None, dom=None): - """returns the subtree of the dom rooted in this element""" + """returns the subtree (list) of the dom rooted in this element""" if dom is None: # get from server md = self.getDomFromPathOrUrl(path) @@ -81,18 +81,20 @@ # lets assume dom is rooted in the first element xpath = '.' + self.getXmlPath(omitRoot=True) logging.debug("getSubDom looking for %s in %s"%(xpath, dom)) - elem = dom.find(xpath) + elem = dom.findall(xpath) return elem - def getData(self, path=None, dom=None, normalizeNames=True, recursive=0): + def getData(self, path=None, dom=None, normalizeNames=True, allOccurrences=False, allText=0): """returns dict with attributes and child elements from corresponding tag""" + logging.debug("getData(path=%s, dom=%s)"%(path,dom)) if path is None and dom is None: return None - data = {} - attr = {} - elem = self.getSubDom(path=path, dom=dom) - if elem is not None: + dataList = [] + elems = self.getSubDom(path=path, dom=dom) + for elem in elems: + data = {} + attr = {} # put attributes in @attr for attname in elem.keys(): attr[attname] = elem.get(attname) @@ -107,12 +109,20 @@ # put all subelements in dict if normalizeNames: for e in elem: - data[normalizeFieldName(e.tag)] = getText(e, recursive=recursive) + data[normalizeFieldName(e.tag)] = getText(e, recursive=allText) else: for e in elem: - data[e.tag] = getText(e, recursive=recursive) - - return data + data[e.tag] = getText(e, recursive=allText) + + dataList.append(data) + + if allOccurrences: + return dataList + + if dataList: + return dataList[0] + else: + return {} def getMapping(self, type): """returns MetaDataMapping for type""" @@ -232,8 +242,11 @@ logging.error("getFormatted: no generic template either: %s"%(template)) return "" - # put field descriptions in mdHash - fields = self.getMappedData(data, allFields=allFields) + if type: + # put field descriptions in mdHash + fields = self.getMappedData(data, allFields=allFields) + else: + fields = {} return tp(mdmap=fields, md=data)