rev 3606 - debbugs-illa/bz

Pierre Habouzit madcoder at costa.debian.org
Wed Apr 19 10:33:52 UTC 2006


Author: madcoder
Date: 2006-04-19 10:33:52 +0000 (Wed, 19 Apr 2006)
New Revision: 3606

Modified:
   debbugs-illa/bz/report.py
Log:
parse the bug flags into a dict member, makes the code a loooooot clearer.



Modified: debbugs-illa/bz/report.py
===================================================================
--- debbugs-illa/bz/report.py	2006-04-19 10:28:35 UTC (rev 3605)
+++ debbugs-illa/bz/report.py	2006-04-19 10:33:52 UTC (rev 3606)
@@ -28,32 +28,70 @@
 # SUCH DAMAGE.
 ###############################################################################
 
+"""
+This module gets the bugzilla XML output for a bug
+
+the DTD for that XML can be seen at:
+    http://landfill.bugzilla.org/bugzilla-tip/bugzilla.dtd
+"""
+
 from xml.dom import minidom, Node
 
 class Report:
+
+    _multiple = [ 'keywords', 'dependson', 'blocked', 'cc', 'group',
+                  'flag', 'long_desc, attachment']
+
     def __init__(self, bugNum, str):
         self.bug = bugNum
-        self.doc = minidom.parseString(str)
+        self._data = {}.fromkeys(Report._multiple, [])
 
-    def unlink(self):
-        self.doc.unlink()
+        self.__iter__     = self._data.__iter__
+        self.__contains__ = self._data.__contains__
 
+        doc = minidom.parseString(str)
+        bug = doc.getElementsByTagName('bug')[0]
+        for node in bug.childNodes:
+            if not node.hasChildNodes() or len(node.childNodes) is not 1:
+                continue
+
+            son = node.childNodes[0]
+            if son.nodeType is not Node.TEXT_NODE:
+                continue
+
+            k = node.nodeName
+            if k in Report._multiple:
+                self[k].append(son.data)
+            else:
+                self[k] = son.data
+
+        doc.unlink()
+
+    def __len__(self):
+        return len(self._data)
+
+    def __getitem__(self, k):
+        return self._data[k]
+
+    def __setitem__(self, k, v):
+        self._data[k] = v
+
+    def __delitem__(self, k):
+        del self._data[k]
+
+    def has_key(self, k): return self._data.has_key(k)
+
+    def _softGet(self, key, failOnEmpty = True):
+        if self.has_key(key):
+            return self[key]
+        else: return None
+
     def getStatus(self):
-        try:
-            return self.doc.getElementsByTagName('bug_status')[0].childNodes[0].data
-        except:
-            return None
+        return self['bug_status']
 
+    def getCC(self):
+        return self['cc']
+
     def getResolution(self):
-        try:
-            return self.doc.getElementsByTagName('resolution')[0].childNodes[0].data
-        except:
-            return None
+        return self._softGet('resolution', True)
 
-    def getCC(self):
-        try:
-            ccs = self.doc.getElementsByTagName('cc')[0]
-            return map(lambda n: n.childNodes[0].data, ccs)
-        except:
-            return None
-




More information about the pkg-kde-commits mailing list