From 5efac22043adc735d9502fb9f6f7466b85916573 Mon Sep 17 00:00:00 2001 From: Raphael Collet Date: Thu, 7 May 2015 16:46:48 +0200 Subject: [PATCH] [FIX] fields: when determining `digits()`, make sure to use a valid cursor --- openerp/fields.py | 5 +---- openerp/osv/fields.py | 18 ++++++++++-------- 2 files changed, 11 insertions(+), 12 deletions(-) diff --git a/openerp/fields.py b/openerp/fields.py index 1613b69cf98..d780bf5adb3 100644 --- a/openerp/fields.py +++ b/openerp/fields.py @@ -1054,10 +1054,7 @@ class Float(Field): @property def digits(self): if callable(self._digits): - # retrieve a cursor from any environment - from openerp.api import Environment - cr = next(iter(Environment.envs)).cr - return self._digits(cr) + return self._digits(fields.get_cursor()) else: return self._digits diff --git a/openerp/osv/fields.py b/openerp/osv/fields.py index 7bcb8606e64..02d24fdf47b 100644 --- a/openerp/osv/fields.py +++ b/openerp/osv/fields.py @@ -52,6 +52,14 @@ from openerp.tools import float_repr, float_round, frozendict, html_sanitize import simplejson from openerp import SUPERUSER_ID, registry +def get_cursor(): + # retrieve a valid cursor from any environment + from openerp.api import Environment + for env in Environment.envs: + if not env.cr.closed: + return env.cr + raise RuntimeError("No valid cursor found") + EMPTY_DICT = frozendict() _logger = logging.getLogger(__name__) @@ -388,10 +396,7 @@ class float(_column): @property def digits(self): if self._digits_compute: - # retrieve a cursor from any environment - from openerp.api import Environment - cr = next(iter(Environment.envs)).cr - return self._digits_compute(cr) + return self._digits_compute(get_cursor()) else: return self._digits @@ -1311,10 +1316,7 @@ class function(_column): @property def digits(self): if self._digits_compute: - # retrieve a cursor from any environment - from openerp.api import Environment - cr = next(iter(Environment.envs)).cr - return self._digits_compute(cr) + return self._digits_compute(get_cursor()) else: return self._digits