diff options
Diffstat (limited to 'openerp/api.py')
| -rw-r--r-- | openerp/api.py | 18 |
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`. |
