summaryrefslogtreecommitdiff
path: root/odoo/tools
diff options
context:
space:
mode:
authorRaphael Collet <rco@odoo.com>2019-04-11 08:21:54 +0000
committerRaphael Collet <rco@odoo.com>2019-05-23 05:47:11 +0000
commitd0bb596f1d51b72a6aa20d56eef3e65aefbd09b2 (patch)
tree8d56a32b6f0eea496d0e9af26a4349e8979dfc37 /odoo/tools
parent60be9f2c098cfead8a5e3fd23453b7e93243e0c5 (diff)
[IMP] fields: x2many fields of new records are new records
The value of an x2many field on a new record are new records, possibly related to a real record, called its "origin".
Diffstat (limited to 'odoo/tools')
-rw-r--r--odoo/tools/misc.py16
1 files changed, 16 insertions, 0 deletions
diff --git a/odoo/tools/misc.py b/odoo/tools/misc.py
index 3d34c608fd4..e828443ae80 100644
--- a/odoo/tools/misc.py
+++ b/odoo/tools/misc.py
@@ -1045,12 +1045,28 @@ class OrderedSet(MutableSet):
def discard(self, elem):
self._map.pop(elem, None)
+
class LastOrderedSet(OrderedSet):
""" A set collection that remembers the elements last insertion order. """
def add(self, elem):
OrderedSet.discard(self, elem)
OrderedSet.add(self, elem)
+
+class IterableGenerator:
+ """ An iterable object based on a generator function, which is called each
+ time the object is iterated over.
+ """
+ __slots__ = ['func', 'args']
+
+ def __init__(self, func, *args):
+ self.func = func
+ self.args = args
+
+ def __iter__(self):
+ return self.func(*self.args)
+
+
def groupby(iterable, key=None):
""" Return a collection of pairs ``(key, elements)`` from ``iterable``. The
``key`` is a function computing a key value for each element. This