[IMP] maintenance: new method to get the contract status when a bug occure
[IMP] maintenance: new method to post the error details to openerp.com bzr revid: christophe@cobalt-20081231133303-q0dgibftxdtvxgc0
This commit is contained in:
@@ -34,7 +34,7 @@ import time
|
||||
import math
|
||||
from pprint import pprint as pp
|
||||
|
||||
from tools import config
|
||||
from tools import config, debug
|
||||
import xmlrpclib
|
||||
|
||||
class maintenance_contract_module(osv.osv):
|
||||
@@ -51,6 +51,49 @@ class maintenance_contract(osv.osv):
|
||||
_name = "maintenance.contract"
|
||||
_description = "Maintenance Contract"
|
||||
|
||||
def _get_valid_contracts(self, cr, uid):
|
||||
return [contract for contract in self.browse(cr, uid, self.search(cr, uid, [])) if contract.state == 'valid']
|
||||
|
||||
def status(self, cr, uid):
|
||||
covered_modules, uncovered_modules = set(), set()
|
||||
|
||||
status = 'none'
|
||||
for contract in self._get_valid_contracts(cr, uid):
|
||||
covered_modules.update([m.name for m in contract.module_ids])
|
||||
|
||||
if covered_modules:
|
||||
modobj = self.pool.get('ir.module.module')
|
||||
modids = modobj.search(cr, uid, [('state', '=', 'installed')])
|
||||
uncovered_modules = set(m.name for m in modobj.browse(cr, uid, modids)) - covered_modules
|
||||
status = ['full', 'partial'][len(uncovered_modules) > 0]
|
||||
|
||||
return {
|
||||
'status': status,
|
||||
'uncovered_modules': list(uncovered_modules),
|
||||
}
|
||||
|
||||
def send(self, cr, uid, tb, explanations, remarks=None):
|
||||
assert self.status(cr, uid) == 'full'
|
||||
contract = self._get_valid_contracts(cr, uid)[0]
|
||||
|
||||
content = "(%s) has reported the following bug:\n%s\nremarks: %s\nThe traceback is:\n%s" % (
|
||||
contract.name, explanations, remarks or '', tb
|
||||
)
|
||||
try:
|
||||
import urllib
|
||||
args = [('contract_id', contract.name),('data', content)]
|
||||
args = urllib.urlencode(args)
|
||||
fp = urllib.urlopen('http://www.openerp.com/scripts/survey.php', args)
|
||||
submit_result = fp.read()
|
||||
debug(submit_result)
|
||||
fp.close()
|
||||
except:
|
||||
# TODO schedule a retry
|
||||
return False
|
||||
return True
|
||||
|
||||
|
||||
|
||||
def _valid_get(self, cr, uid, ids, field_name, arg, context=None):
|
||||
res = {}
|
||||
for contract in self.browse(cr, uid, ids, context=context):
|
||||
|
||||
Reference in New Issue
Block a user