[imp] made some modifications in rpc() that could possibly break compatibility, made the error_callback consistant (now you must use the second argument and make a prefentDefault() on it) and removed the default context in rpc calls

bzr revid: nicolas.vanhoren@openerp.com-20110629103046-rbsy0m6pke3ytqyl
This commit is contained in:
niv-openerp
2011-06-29 12:30:46 +02:00
3 changed files with 33 additions and 21 deletions
+30 -19
View File
@@ -350,30 +350,39 @@ openerp.base.Session = openerp.base.BasicController.extend( /** @lends openerp.b
* @param {Object} params call parameters
* @param {Function} success_callback function to execute on RPC call success
* @param {Function} error_callback function to execute on RPC call failure
* one
* @returns {jQuery.Deferred} jquery-provided ajax deferred
*/
rpc: function(url, params, success_callback, error_callback) {
var self = this;
// Construct a JSON-RPC2 request, method is currently unused
params.session_id = this.session_id;
params.context = typeof(params.context) != "undefined" ? params.context : this.context;
// Use a default error handler unless defined
error_callback = typeof(error_callback) != "undefined" ? error_callback : this.on_rpc_error;
// niv: wtf?
//params.context = typeof(params.context) != "undefined" ? params.context : this.context;
// Call using the rpc_mode
return this.rpc_ajax(url, {
var deferred = $.Deferred();
this.rpc_ajax(url, {
jsonrpc: "2.0",
method: "call",
params: params,
id:null
}, success_callback, error_callback);
}).then(function () {deferred.resolve.apply(deferred, arguments);},
function(error) {deferred.reject(error, $.Event());});
return deferred.fail(function() {
deferred.fail(function(error, event) {
if (!event.isDefaultPrevented()) {
self.on_rpc_error(error, event);
}
});
}).then(success_callback, error_callback).promise();
},
/**
* Raw JSON-RPC call
*
* @returns {jQuery.Deferred} ajax-based deferred object
*/
rpc_ajax: function(url, payload, success_callback, error_callback) {
rpc_ajax: function(url, payload) {
var self = this;
this.on_rpc_request();
// url can be an $.ajax option object
@@ -388,33 +397,35 @@ openerp.base.Session = openerp.base.BasicController.extend( /** @lends openerp.b
dataType: 'json',
contentType: 'application/json',
data: JSON.stringify(payload),
processData: false,
success: function(response, textStatus, jqXHR) {
processData: false
}, url);
var deferred = $.Deferred();
$.ajax(ajax).done(function(response, textStatus, jqXHR) {
self.on_rpc_response();
if (response.error) {
if (response.error.data.type == "session_invalid") {
self.uid = false;
self.on_session_invalid(function() {
self.rpc(url, payload.params, success_callback, error_callback);
self.rpc(url, payload.params,
function() {deferred.resolve.apply(deferred, arguments);},
function() {deferred.reject.apply(deferred, arguments);});
});
} else {
error_callback(response.error);
deferred.reject(response.error);
}
} else if (success_callback) {
success_callback(response["result"], textStatus, jqXHR);
} else {
deferred.resolve(response["result"], textStatus, jqXHR);
}
},
error: function(jqXHR, textStatus, errorThrown) {
}).fail(function(jqXHR, textStatus, errorThrown) {
self.on_rpc_response();
var error = {
code: -32098,
message: "XmlHttpRequestError " + errorThrown,
data: {type: "xhr"+textStatus, debug: jqXHR.responseText, objects: [jqXHR, errorThrown] }
};
error_callback(error);
}
}, url);
return $.ajax(ajax);
deferred.reject(error);
});
return deferred.promise();
},
on_rpc_request: function() {
},
+2 -1
View File
@@ -1266,7 +1266,8 @@ openerp.base.form.FieldMany2One = openerp.base.form.Field.extend({
var dataset = new openerp.base.DataSetStatic(this.session, this.field.relation, build_relation_context(self));
dataset.name_create(name, function(data) {
self._change_int_ext_value(data.result);
}).fail(function() {
}).fail(function(error, event) {
event.preventDefault();
self._change_int_value(null);
self._search_create_popup("form", undefined, {"default_name": name});
});
+1 -1
View File
@@ -201,7 +201,7 @@ class OpenERPSession(object):
ctx['context'] = ctx
# adding the context of the session to send to the openerp server
ccontext = nonliterals.CompoundContext(self.context, context_to_eval)
ccontext = nonliterals.CompoundContext(self.context, context_to_eval or {})
ccontext.session = self
return ccontext.evaluate(ctx)