[FIX] jsonp works

bzr revid: al@openerp.com-20111216164739-ei5hdk4sq32eppzc
This commit is contained in:
Antony Lesuisse 2011-12-16 17:47:39 +01:00
parent 3183c975af
commit 65c5eaca8d
4 changed files with 12 additions and 8 deletions

View File

@ -138,9 +138,10 @@ class JsonRequest(WebRequest):
:returns: an utf8 encoded JSON-RPC2 or JSONP reply :returns: an utf8 encoded JSON-RPC2 or JSONP reply
""" """
args = self.httprequest.args args = self.httprequest.args
jsonp = args.get('jsonp', False) jsonp = args.get('jsonp')
requestf = None requestf = None
request = None request = None
print "ARGS",args
if jsonp and self.httprequest.method == 'POST': if jsonp and self.httprequest.method == 'POST':
# jsonp 2 steps step1 POST: save call # jsonp 2 steps step1 POST: save call
@ -149,13 +150,13 @@ class JsonRequest(WebRequest):
headers=[('Content-Type', 'text/plain; charset=utf-8')] headers=[('Content-Type', 'text/plain; charset=utf-8')]
r = werkzeug.wrappers.Response(request_id, headers=headers) r = werkzeug.wrappers.Response(request_id, headers=headers)
return r return r
elif jsonp and args.get('r'):
# jsonp method GET
request = args.get('r')
elif jsonp and args.get('id'): elif jsonp and args.get('id'):
# jsonp 2 steps step2 GET: run and return result # jsonp 2 steps step2 GET: run and return result
self.init(args) self.init(args)
request = self.session.jsonp_requests.pop(args.get(id), "") request = self.session.jsonp_requests.pop(args.get(id), "")
elif jsonp and args.get('r'):
# jsonp method GET
request = args.get('r')
else: else:
# regular jsonrpc2 # regular jsonrpc2
requestf = self.httprequest.stream requestf = self.httprequest.stream
@ -167,6 +168,7 @@ class JsonRequest(WebRequest):
if requestf: if requestf:
self.jsonrequest = simplejson.load(requestf, object_hook=nonliterals.non_literal_decoder) self.jsonrequest = simplejson.load(requestf, object_hook=nonliterals.non_literal_decoder)
else: else:
print "CACA",request
self.jsonrequest = simplejson.loads(request, object_hook=nonliterals.non_literal_decoder) self.jsonrequest = simplejson.loads(request, object_hook=nonliterals.non_literal_decoder)
self.init(self.jsonrequest.get("params", {})) self.init(self.jsonrequest.get("params", {}))
if _logger.isEnabledFor(logging.DEBUG): if _logger.isEnabledFor(logging.DEBUG):

View File

@ -291,7 +291,7 @@ class Service(object):
""" """
self.connector = connector self.connector = connector
self.service_name = service_name self.service_name = service_name
self.__logger = _getChildLogger(_getChildLogger(_logger, 'service'),service_name) self.__logger = _getChildLogger(_getChildLogger(_logger, 'service'),service_name or "")
def __getattr__(self, method): def __getattr__(self, method):
""" """
@ -407,7 +407,7 @@ class Model(object):
""" """
self.connection = connection self.connection = connection
self.model_name = model_name self.model_name = model_name
self.__logger = _getChildLogger(_getChildLogger(_logger, 'object'), model_name) self.__logger = _getChildLogger(_getChildLogger(_logger, 'object'), model_name or "")
def __getattr__(self, method): def __getattr__(self, method):
""" """

View File

@ -1123,6 +1123,7 @@ openerp.web.EmbeddedClient = openerp.web.Widget.extend({
}); });
openerp.web.embed = function (origin, dbname, login, key, action, options) { openerp.web.embed = function (origin, dbname, login, key, action, options) {
// TODO insert <link rel="stylesheet" href="origin +'/web/webclient/css'"> into dom head
var currentScript = document.currentScript; var currentScript = document.currentScript;
if (!currentScript) { if (!currentScript) {
var sc = document.getElementsByTagName('script'); var sc = document.getElementsByTagName('script');
@ -1130,10 +1131,11 @@ openerp.web.embed = function (origin, dbname, login, key, action, options) {
} }
openerp.connection.bind(origin).then(function () { openerp.connection.bind(origin).then(function () {
openerp.connection.session_authenticate(dbname, login, key).then(function () { openerp.connection.session_authenticate(dbname, login, key).then(function () {
var client = new session.web.EmbeddedClient(action_id, options); var client = new openerp.web.EmbeddedClient(action, options);
client.insertAfter(currentScript); client.insertAfter(currentScript);
}); });
}); });
} }
}; };

View File

@ -480,7 +480,7 @@ openerp.web.Connection = openerp.web.CallbackEnabled.extend( /** @lends openerp.
}, url); }, url);
var payload_str = JSON.stringify(payload); var payload_str = JSON.stringify(payload);
var payload_url = $.param({r:payload_str}); var payload_url = $.param({r:payload_str});
if(playload_url.length < 2000) { if(payload_url.length < 2000) {
// Direct jsonp request // Direct jsonp request
ajax.data.r = payload_str; ajax.data.r = payload_str;
return $.ajax(ajax); return $.ajax(ajax);