Fix Bugzilla/Issuezilla URLs (LP: #1019861)

As far as I can tell, IssueZilla and Bugzilla are API compatible (note)
This commit is contained in:
tsimpson 2012-07-04 14:21:37 +01:00
parent fcbe5e92ec
commit fbb7a7ae67

View File

@ -63,6 +63,8 @@ def _getnodetxt(node):
for childnode in node.childNodes: for childnode in node.childNodes:
if childnode.nodeType == childnode.TEXT_NODE: if childnode.nodeType == childnode.TEXT_NODE:
L.append(childnode.data) L.append(childnode.data)
if not L:
raise ValueError, "No text nodes"
val = ''.join(L) val = ''.join(L)
if node.hasAttribute('encoding'): if node.hasAttribute('encoding'):
encoding = node.getAttribute('encoding') encoding = node.getAttribute('encoding')
@ -583,7 +585,7 @@ class IBugtracker:
class Bugzilla(IBugtracker): class Bugzilla(IBugtracker):
def get_tracker(self, url): def get_tracker(self, url):
url = url.replace('show_bug','xml') url += '&ctype=xml'
try: try:
bugxml = utils.web.getUrl(url) bugxml = utils.web.getUrl(url)
tree = minidom.parseString(bugxml) tree = minidom.parseString(bugxml)
@ -600,7 +602,7 @@ class Bugzilla(IBugtracker):
except: except:
return None return None
def get_bug(self, id): def get_bug(self, id):
url = "%s/xml.cgi?id=%d" % (self.url,id) url = "%s/show_bug.cgi?id=%d&ctype=xml" % (self.url,id)
try: try:
bugxml = utils.web.getUrl(url) bugxml = utils.web.getUrl(url)
zilladom = minidom.parseString(bugxml) zilladom = minidom.parseString(bugxml)
@ -618,7 +620,7 @@ class Bugzilla(IBugtracker):
title = _getnodetxt(bug_n.getElementsByTagName('short_desc')[0]) title = _getnodetxt(bug_n.getElementsByTagName('short_desc')[0])
status = _getnodetxt(bug_n.getElementsByTagName('bug_status')[0]) status = _getnodetxt(bug_n.getElementsByTagName('bug_status')[0])
try: try:
status += ": " + _getnodetxt(bug_n.getElementsByTagName('resolution')[0]) status = "%s: %s" % (status, _getnodetxt(bug_n.getElementsByTagName('resolution')[0]))
except: except:
pass pass
component = _getnodetxt(bug_n.getElementsByTagName('component')[0]) component = _getnodetxt(bug_n.getElementsByTagName('component')[0])
@ -633,35 +635,37 @@ class Bugzilla(IBugtracker):
raise BugtrackerError, s raise BugtrackerError, s
return [(id, component, title, severity, status, assignee, "%s/show_bug.cgi?id=%d" % (self.url, id))] return [(id, component, title, severity, status, assignee, "%s/show_bug.cgi?id=%d" % (self.url, id))]
class Issuezilla(IBugtracker): class Issuezilla(Bugzilla):
def get_bug(self, id): pass
url = "%s/xml.cgi?id=%d" % (self.url,id) #class Issuezilla(IBugtracker):
try: # def get_bug(self, id):
bugxml = utils.web.getUrl(url) # url = "%s/show_bug.cgi?id=%d&ctype=xml" % (self.url,id)
zilladom = minidom.parseString(bugxml) # try:
except Exception, e: # bugxml = utils.web.getUrl(url)
s = 'Could not parse XML returned by %s: %s (%s)' % (self.description, e, url) # zilladom = minidom.parseString(bugxml)
raise BugtrackerError, s # except Exception, e:
bug_n = zilladom.getElementsByTagName('issue')[0] # s = 'Could not parse XML returned by %s: %s (%s)' % (self.description, e, url)
if not (bug_n.getAttribute('status_code') == '200'): # raise BugtrackerError, s
if bug_n.getAttribute('status_message') == 'NotFound': # bug_n = zilladom.getElementsByTagName('issue')[0]
raise BugNotFoundError # if not (bug_n.getAttribute('status_code') == '200'):
s = 'Error getting %s bug #%s: %s' % (self.description, id, bug_n.getAttribute('status_message')) # if bug_n.getAttribute('status_message') == 'NotFound':
raise BugtrackerError, s # raise BugNotFoundError
try: # s = 'Error getting %s bug #%s: %s' % (self.description, id, bug_n.getAttribute('status_message'))
title = _getnodetxt(bug_n.getElementsByTagName('short_desc')[0]) # raise BugtrackerError, s
status = _getnodetxt(bug_n.getElementsByTagName('issue_status')[0]) # try:
try: # title = _getnodetxt(bug_n.getElementsByTagName('short_desc')[0])
status += ": " + _getnodetxt(bug_n.getElementsByTagName('resolution')[0]) # status = _getnodetxt(bug_n.getElementsByTagName('issue_status')[0])
except: # try:
pass # status = "%s: %s" % (status, _getnodetxt(bug_n.getElementsByTagName('resolution')[0]))
component = _getnodetxt(bug_n.getElementsByTagName('component')[0]) # except:
severity = _getnodetxt(bug_n.getElementsByTagName('issue_type')[0]) # pass
assignee = _getnodetxt(bug_n.getElementsByTagName('assigned_to')[0]) # component = _getnodetxt(bug_n.getElementsByTagName('component')[0])
except Exception, e: # severity = _getnodetxt(bug_n.getElementsByTagName('issue_type')[0])
s = 'Could not parse XML returned by %s bugzilla: %s (%s)' % (self.description, e, url) # assignee = _getnodetxt(bug_n.getElementsByTagName('assigned_to')[0])
raise BugtrackerError, s # except Exception, e:
return [(id, component, title, severity, status, assignee, "%s/show_bug.cgi?id=%d" % (self.url, id))] # s = 'Could not parse XML returned by %s bugzilla: %s (%s)' % (self.description, e, url)
# raise BugtrackerError, s
# return [(id, component, title, severity, status, assignee, "%s/show_bug.cgi?id=%d" % (self.url, id))]
class Launchpad(IBugtracker): class Launchpad(IBugtracker):
statuses = ["Unknown", "Invalid", "Opinion", "Won't Fix", "Fix Released", "Fix Committed", "New", "Incomplete", "Confirmed", "Triaged", "In Progress"] statuses = ["Unknown", "Invalid", "Opinion", "Won't Fix", "Fix Released", "Fix Committed", "New", "Incomplete", "Confirmed", "Triaged", "In Progress"]