From f9670e67a24e4e6ce1090ffa8682fffa94e35dd1 Mon Sep 17 00:00:00 2001 From: Xavier Morel Date: Mon, 3 Dec 2012 13:23:12 +0100 Subject: [PATCH] [FIX] rollback default conversion of js Object to py.object (not py.dict) and add default toJSON to all py.object * Accesses in contexts & domains are object derefs, so using dicts was dumb * But objects still need to round-trip through in case of e.g. o2m commands in contexts, so py.object needs a toJSON (or a special object kind needs to be added, specifically for round-tripping objects through) bzr revid: xmo@openerp.com-20121203122312-gc499mujf4l0nuz7 --- addons/web/static/lib/py.js/lib/py.js | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/addons/web/static/lib/py.js/lib/py.js b/addons/web/static/lib/py.js/lib/py.js index f36cfd665b3..4ef92b40112 100644 --- a/addons/web/static/lib/py.js/lib/py.js +++ b/addons/web/static/lib/py.js/lib/py.js @@ -393,7 +393,13 @@ var py = {}; switch(val.constructor) { case Object: - return py.dict.fromJSON(val); + var out = py.PY_call(py.object); + for(var k in val) { + if (val.hasOwnProperty(k)) { + out[k] = val[k]; + } + } + return out; case Array: return py.list.fromJSON(val); } @@ -756,7 +762,14 @@ var py = {}; // Conversion toJSON: function () { - throw new Error(this.constructor.name + ' can not be converted to JSON'); + var out = {}; + for(var k in this) { + if (this.hasOwnProperty(k) && !/^__/.test(k)) { + var val = this[k]; + out[k] = val.toJSON ? val.toJSON() : val; + } + } + return out; } }); var NoneType = py.type('NoneType', null, {