summaryrefslogtreecommitdiff
path: root/openerp/api.py
diff options
context:
space:
mode:
Diffstat (limited to 'openerp/api.py')
-rw-r--r--openerp/api.py18
1 files changed, 18 insertions, 0 deletions
diff --git a/openerp/api.py b/openerp/api.py
index da9e62f1549..94ed98c1265 100644
--- a/openerp/api.py
+++ b/openerp/api.py
@@ -815,6 +815,24 @@ class Environment(object):
env.computed.clear()
env.dirty.clear()
+ def clear(self):
+ """ Clear all record caches, and discard all fields to recompute.
+ This may be useful when recovering from a failed ORM operation.
+ """
+ self.invalidate_all()
+ self.all.todo.clear()
+
+ @contextmanager
+ def clear_upon_failure(self):
+ """ Context manager that clears the environments (caches and fields to
+ recompute) upon exception.
+ """
+ try:
+ yield
+ except Exception:
+ self.clear()
+ raise
+
def field_todo(self, field):
""" Check whether `field` must be recomputed, and returns a recordset
with all records to recompute for `field`.