cubicweb/rset.py
changeset 11874 ea1d92b677b5
parent 11870 3a84a79c4ed5
child 12063 4bcb58aa103a
--- a/cubicweb/rset.py	Fri Nov 18 18:19:10 2016 +0100
+++ b/cubicweb/rset.py	Wed Nov 23 17:19:51 2016 +0100
@@ -73,7 +73,7 @@
         # set by the cursor which returned this resultset
         self.req = None
         # actions cache
-        self._rsetactions = None
+        self._actions_cache = None
 
     def __str__(self):
         if not self.rows:
@@ -100,19 +100,20 @@
                                     for r, d in zip(rows, self.description)))
 
     def possible_actions(self, **kwargs):
-        if self._rsetactions is None:
-            self._rsetactions = {}
-        if kwargs:
-            key = tuple(sorted(kwargs.items()))
-        else:
-            key = None
-        try:
-            return self._rsetactions[key]
-        except KeyError:
+        """Return possible actions on this result set. Should always be called with the same
+        arguments so it may be computed only once.
+        """
+        key = tuple(sorted(kwargs.items()))
+        if self._actions_cache is None:
             actions = self.req.vreg['actions'].poss_visible_objects(
                 self.req, rset=self, **kwargs)
-            self._rsetactions[key] = actions
+            self._actions_cache = (key, actions)
             return actions
+        else:
+            assert key == self._actions_cache[0], \
+                'unexpected new arguments for possible actions (%s vs %s)' % (
+                    key, self._actions_cache[0])
+            return self._actions_cache[1]
 
     def __len__(self):
         """returns the result set's size"""