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