summaryrefslogtreecommitdiff
path: root/odoo/tools/misc.py
diff options
context:
space:
mode:
Diffstat (limited to 'odoo/tools/misc.py')
-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