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)