diff options
-rwxr-xr-x | git-bz | 47 |
1 files changed, 28 insertions, 19 deletions
@@ -893,6 +893,32 @@ class BugServer(object): return self._xmlrpc_proxy + # Query the server for the legal values of the given field; returns an + # array, or None if the query failed + def _legal_values(self, field): + try: + response = self.get_xmlrpc_proxy().Bug.legal_values({ 'field': field }) + cache.set(self.host, 'legal_' + field, response['values']) + return response['values'] + except xmlrpclib.Fault, e: + if e.faultCode == -32000: # https://bugzilla.mozilla.org/show_bug.cgi?id=513511 + return None + raise + except xmlrpclib.ProtocolError, e: + if e.errcode == 500: # older bugzilla versions die this way + return None + elif e.errcode == 404: # really old bugzilla, no XML-RPC + return None + raise + + def legal_values(self, field): + try: + return cache.get(self.host, 'legal_' + field) + except IndexError: + values = self._legal_values(field) + cache.set(self.host, 'legal_' + field, values) + return values + class BugTransport(xmlrpclib.Transport): def __init__(self, server): xmlrpclib.Transport.__init__(self) @@ -1104,23 +1130,6 @@ class Bug(object): print "Attached %s" % filename - # Query the server for the legal values of the given field; returns an - # array, or None if the query failed - def legal_values(self, field): - try: - response = self.server.get_xmlrpc_proxy().Bug.legal_values({ 'field': field }) - return response['values'] - except xmlrpclib.Fault, e: - if e.faultCode == -32000: # https://bugzilla.mozilla.org/show_bug.cgi?id=513511 - return None - raise - except xmlrpclib.ProtocolError, e: - if e.errcode == 500: # older bugzilla versions die this way - return None - elif e.errcode == 404: # really old bugzilla, no XML-RPC - return None - raise - # Update specified fields of a bug; keyword arguments are interpreted # as field_name=value def update(self, **changes): @@ -1492,7 +1501,7 @@ def edit_bug(bug, applied_commits=None): template.write("# Uncommment and edit to change resolution\n") else: template.write("# Uncomment to resolve bug\n") - legal_resolutions = bug.legal_values('resolution') + legal_resolutions = bug.server.legal_values('resolution') if legal_resolutions: # Require non-empty resolution. DUPLICATE, MOVED would need special support legal_resolutions = [x for x in legal_resolutions if x not in ('', 'DUPLICATE', 'MOVED')] @@ -1507,7 +1516,7 @@ def edit_bug(bug, applied_commits=None): template.write("\n# Lines below change patch status, unless commented out\n") else: template.write("\n# To change patch status, uncomment below, edit 'committed' as appropriate.\n") - legal_statuses = bug.legal_values('attachments.status') + legal_statuses = bug.server.legal_values('attachments.status') if legal_statuses: legal_statuses.append('obsolete') template.write("# possible statuses: %s\n" % abbreviation_help_string(legal_statuses)) |