summaryrefslogtreecommitdiff
path: root/addons/web/static/lib/py.js
diff options
context:
space:
mode:
Diffstat (limited to 'addons/web/static/lib/py.js')
-rw-r--r--addons/web/static/lib/py.js/README.rst2
-rw-r--r--addons/web/static/lib/py.js/TODO.rst1
-rw-r--r--addons/web/static/lib/py.js/lib/py.js14
3 files changed, 14 insertions, 3 deletions
diff --git a/addons/web/static/lib/py.js/README.rst b/addons/web/static/lib/py.js/README.rst
index 7601318df6d..5380f3e6c8f 100644
--- a/addons/web/static/lib/py.js/README.rst
+++ b/addons/web/static/lib/py.js/README.rst
@@ -53,7 +53,7 @@ Builtins
Same as tuple (``list`` is currently an alias for ``tuple``)
``dict``
- Implements trivial getting and setting, nothing beyond that.
+ Implements trivial getting, setting and len, nothing beyond that.
Note that most methods are probably missing from all of these.
diff --git a/addons/web/static/lib/py.js/TODO.rst b/addons/web/static/lib/py.js/TODO.rst
index a1309bd3fc5..dd3237e3572 100644
--- a/addons/web/static/lib/py.js/TODO.rst
+++ b/addons/web/static/lib/py.js/TODO.rst
@@ -35,7 +35,6 @@ Base methods requirement
* ``__getattr__``
* ``dict.get``
-* ``__len__``
In datamodel, not implemented in any type, untested
***************************************************
diff --git a/addons/web/static/lib/py.js/lib/py.js b/addons/web/static/lib/py.js/lib/py.js
index 2c738dc95d1..2c6c832f9fe 100644
--- a/addons/web/static/lib/py.js/lib/py.js
+++ b/addons/web/static/lib/py.js/lib/py.js
@@ -320,7 +320,7 @@ var py = {};
if (token === 'in' && tokens[tokens.length-1].id === 'not') {
symbol = symbols['not in'];
tokens.pop();
- } else if (token === 'not' && tokens[tokens.length-1].id === 'is') {
+ } else if (token === 'not' && tokens.length > 0 && tokens[tokens.length-1].id === 'is') {
symbol = symbols['is not'];
tokens.pop();
} else {
@@ -969,6 +969,12 @@ var py = {};
__init__: function () {
this._values = [];
},
+ __len__: function () {
+ return this._values.length;
+ },
+ __nonzero__: function () {
+ return py.PY_size(this) > 0 ? py.True : py.False;
+ },
__contains__: function (value) {
for(var i=0, len=this._values.length; i<len; ++i) {
if (py.PY_isTrue(this._values[i].__eq__(value))) {
@@ -1013,6 +1019,12 @@ var py = {};
__setitem__: function (key, value) {
this._store[key.__hash__()] = [key, value];
},
+ __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]]);
var h = args.k.__hash__();