[FIX] correctly display crash manager in case of report error

lp bug: https://launchpad.net/bugs/917227 fixed

bzr revid: xmo@openerp.com-20120119144837-dp6r7vqx581b4mrt
This commit is contained in:
Xavier Morel 2012-01-19 15:48:37 +01:00
parent c078d23d16
commit f9cbad5bf6
5 changed files with 49 additions and 23 deletions

View File

@ -3,6 +3,7 @@
# OpenERP Web HTTP layer
#----------------------------------------------------------
import ast
import cgi
import contextlib
import functools
import logging
@ -254,7 +255,30 @@ class HttpRequest(WebRequest):
else:
akw[key] = type(value)
_logger.debug("%s --> %s.%s %r", self.httprequest.method, controller.__class__.__name__, method.__name__, akw)
r = method(controller, self, **self.params)
try:
r = method(controller, self, **self.params)
except xmlrpclib.Fault, e:
r = werkzeug.exceptions.InternalServerError(cgi.escape(simplejson.dumps({
'code': 200,
'message': "OpenERP Server Error",
'data': {
'type': 'server_exception',
'fault_code': e.faultCode,
'debug': "Server %s\nClient %s" % (
e.faultString, traceback.format_exc())
}
})))
except Exception:
logging.getLogger(__name__ + '.HttpRequest.dispatch').exception(
"An error occurred while handling a json request")
r = werkzeug.exceptions.InternalServerError(cgi.escape(simplejson.dumps({
'code': 300,
'message': "OpenERP WebClient Error",
'data': {
'type': 'client_exception',
'debug': "Client %s" % traceback.format_exc()
}
})))
if self.debug or 1:
if isinstance(r, (werkzeug.wrappers.BaseResponse, werkzeug.exceptions.HTTPException)):
_logger.debug('<-- %s', r)

View File

@ -6,6 +6,7 @@ import csv
import glob
import itertools
import operator
import traceback
import os
import re
import simplejson
@ -17,6 +18,7 @@ from xml.etree import ElementTree
from cStringIO import StringIO
import babel.messages.pofile
import werkzeug.exceptions
import werkzeug.utils
try:
import xlwt
@ -321,18 +323,13 @@ class Database(openerpweb.Controller):
@openerpweb.httprequest
def backup(self, req, backup_db, backup_pwd, token):
try:
db_dump = base64.b64decode(
req.session.proxy("db").dump(backup_pwd, backup_db))
return req.make_response(db_dump,
[('Content-Type', 'application/octet-stream; charset=binary'),
('Content-Disposition', 'attachment; filename="' + backup_db + '.dump"')],
{'fileToken': int(token)}
)
except xmlrpclib.Fault, e:
if e.faultCode and e.faultCode.split(':')[0] == 'AccessDenied':
return 'Backup Database|' + e.faultCode
return 'Backup Database|Could not generate database backup'
db_dump = base64.b64decode(
req.session.proxy("db").dump(backup_pwd, backup_db))
return req.make_response(db_dump,
[('Content-Type', 'application/octet-stream; charset=binary'),
('Content-Disposition', 'attachment; filename="' + backup_db + '.dump"')],
{'fileToken': int(token)}
)
@openerpweb.httprequest
def restore(self, req, db_file, restore_pwd, new_db):

View File

@ -472,16 +472,13 @@ openerp.web.Database = openerp.web.Widget.extend(/** @lends openerp.web.Database
self.blockUI();
self.session.get_file({
form: form,
error: function (body) {
var error = body.firstChild.data.split('|');
self.display_error({
title: error[0],
error: error[1]
});
success: function () {
self.do_notify(_t("Backed"),
_t("Database backed up successfully"));
},
error: openerp.webclient.crashmanager.on_rpc_error,
complete: function() {
self.unblockUI();
self.do_notify(_t("Backed"), _t("Database backed up successfully"));
}
});
}

View File

@ -809,8 +809,15 @@ openerp.web.Connection = openerp.web.CallbackEnabled.extend( /** @lends openerp.
.attr({id: id, name: id})
.appendTo(document.body)
.load(function () {
if (options.error) { options.error(this.contentDocument.body); }
complete();
try {
if (options.error) {
options.error(JSON.parse(
this.contentDocument.body.childNodes[1].textContent
));
}
} finally {
complete();
}
});
if (options.form) {

View File

@ -195,7 +195,8 @@ session.web.ActionManager = session.web.Widget.extend({
on_closed();
}
self.dialog_stop();
}
},
error: session.webclient.crashmanager.on_rpc_error
})
});
},