view bts_webui/amancay/btsqueries.py @ 154:0f77cb692ec9 draft

btsqueries: don't return duplicates in pkg search Also add bugs-rietz as an alternative for SOAP access. We should try to have some kind of autodetection of illness in bugs.debian.org.
author diegoe-guest
date Wed, 12 Aug 2009 20:52:29 +0000
parents 9fce97fb7498
children b18760c0a34f
line wrap: on
line source

# vim: set sw=4 ts=4 sts=4 noet:
import SOAPpy

class BtsQueries:
	"""
	Abstract class implementing stubs for the required BTS queries the
	different implementations should support.

	"""
	def get_bugs_status(self, bug_numbers):
		"""
		Returns an array with the status for all bug_numbers received.
		"""
		pass

	def get_packages_bugs(self, packages):
		"""
		Returns an array of bug numbers, for all received packages.
		"""
		pass

	def get_submitters_bugs(self, emails):
		"""
		Returns an array of bug numbers, for which the emails received are
		submitters.
		"""
		pass

	def get_maintainers_bugs(self, emails):
		"""
		Returns an array of bug numbers, for which the emails received are
		maintainers.
		"""
		pass

# ************************ SOAP Queries *****************************
# Uncomment those to enable debugging
#server.config.dumpSOAPOut = 1
#server.config.dumpSOAPIn = 1

class SoapQueries(BtsQueries):
	"""
	SOAP based BtsQueries class.
	"""
	def __init__(self):
		#self.url = 'http://bugs.debian.org/cgi-bin/soap.cgi'
		self.url = 'http://bugs-rietz.debian.org/cgi-bin/soap.cgi'
		#self.url = 'http://bugs.donarmstrong.com/cgi-bin/soap.cgi'
		self.ns = 'Debbugs/SOAP'
		self.server = SOAPpy.SOAPProxy(self.url, self.ns)

	def get_bugs_status(self, bug_numbers):
		result = self.server.get_status(bug_numbers)

		# FIXME: looks like a bug in debbugs SOAP implementation
		# empty results turn out as "" or " "
		if result == "" or result == " ":
			return []

		if isinstance(result.item, list):
			return [item.value for item in result.item]
		else:
			return [result.item.value]

	def get_packages_bugs(self, packages):
		result = self.server.get_bugs('package', packages)
		return result

	def get_submitters_bugs(self, emails):
		result = self.server.get_bugs('submitter', emails)
		return result

	def get_maintainers_bugs(self, emails):
		result = self.server.get_bugs('maint', emails)
		return result

	def get_all_packages_bugs(self, packages):
		# FIXME: Not in BtsQueries
		pkg = self.server.get_bugs('package', packages)
		src = self.server.get_bugs('src', packages)
		# this gives us only unique elements
		result = set(pkg + src)

		return list(result)

	def get_bug_log(self, bug):
		# FIXME: Not in BtsQueries
		result = self.server.get_bug_log(bug)
		return result

	def get_tagged_bugs(self, users):
		# FIXME: Not in BtsQueries
		# TODO: ask Don to allow many users at the same time
		result = {}
		for user in users:
			result[user] = self.server.get_usertag(user)
		return result