From 1aeb747c6e06f11a005331713e5858438cdf8a60 Mon Sep 17 00:00:00 2001 From: Denis Ledoux Date: Wed, 16 Mar 2016 11:54:21 +0100 Subject: [FIX] web: len & non zero implementation for wrapping list/dict The implementation of `__len__` & `__nonzero__` were not defined for the py types `wrapping_dict` and `wrapping_list`. For instance, this prevented an empty list to be considered as `False` in domains evaluated by the web client. e.g., in the automatic partner merge wizard, the domain ``` [('id', 'in', partner_ids and partner_ids[0] and partner_ids[0][2] or False)] ``` is used. When the `partner_ids` list was empty (meaning the "partners to merge" list was empty in the wizard), it wasn't considered as `False`, and it therefore attempted to get `partner_ids[0]`, which resulted to a crash, as the list was empty. opw-672095 Closes #11343 Courtesy of Xavier Morel (xmo@odoo.com) --- addons/web/static/src/js/framework/pyeval.js | 12 ++++++++++++ 1 file changed, 12 insertions(+) (limited to 'addons/web/static/src/js/framework') diff --git a/addons/web/static/src/js/framework/pyeval.js b/addons/web/static/src/js/framework/pyeval.js index ce25e7af534..2b553d37e0f 100644 --- a/addons/web/static/src/js/framework/pyeval.js +++ b/addons/web/static/src/js/framework/pyeval.js @@ -757,6 +757,12 @@ var wrapping_dict = py.type('wrapping_dict', null, { __getattr__: function (key) { return this.__getitem__(py.str.fromJSON(key)); }, + __len__: function () { + return Object.keys(this._store).length + }, + __nonzero__: function () { + return py.PY_size(this) > 0 ? py.True : py.False; + }, get: function () { var args = py.PY_parseArgs(arguments, ['k', ['d', py.None]]); @@ -780,6 +786,12 @@ var wrapping_list = py.type('wrapping_list', null, { __getitem__: function (index) { return wrap(this._store[index.toJSON()]); }, + __len__: function () { + return this._store.length; + }, + __nonzero__: function () { + return py.PY_size(this) > 0 ? py.True : py.False; + }, fromJSON: function (ar) { var instance = py.PY_call(wrapping_list); instance._store = ar; -- cgit v1.2.3