summaryrefslogtreecommitdiff
path: root/odoo
diff options
context:
space:
mode:
authorAdrian Torres <adt@odoo.com>2020-10-08 10:37:21 +0000
committerAdrian Torres <adt@odoo.com>2020-10-08 10:37:21 +0000
commit02e816877ec12471a1446ba894b5cfca309979da (patch)
tree3caf858da6452a01e3e4864becea34aa13863890 /odoo
parent481454e18e6cb1c5da317e12c820975a07d39411 (diff)
[FIX] base: allow custom fields to use time module
After commit 06a8c5264eb6e87c29ad1d23a14e12dd45aa281c it is no longer possible to pass bare modules to `safe_eval`'s context, however during the aforementioned commit only the wrapped datetime and dateutil modules were updated in ir_model's SAFE_EVAL_BASE context, thus the bare `time` module was still being passed (and this triggered a traceback whenever a custom computed field that used the time module was computed). The fix is simple: pass the wrapped time module to the `safe_eval` context instead of the bare one. This commit also introduces a regression test to verify that the passed modules actually work in custom fields. opw-2347711 closes odoo/odoo#59496 Signed-off-by: Olivier Dony (odo) <odo@openerp.com>
Diffstat (limited to 'odoo')
-rw-r--r--odoo/addons/base/models/ir_model.py3
-rw-r--r--odoo/addons/base/tests/test_ir_model.py19
2 files changed, 19 insertions, 3 deletions
diff --git a/odoo/addons/base/models/ir_model.py b/odoo/addons/base/models/ir_model.py
index b9330a3339e..b8b43fcae39 100644
--- a/odoo/addons/base/models/ir_model.py
+++ b/odoo/addons/base/models/ir_model.py
@@ -3,7 +3,6 @@
import itertools
import logging
import re
-import time
from ast import literal_eval
from collections import defaultdict
from collections.abc import Mapping
@@ -15,7 +14,7 @@ from odoo import api, fields, models, tools, _
from odoo.exceptions import AccessError, UserError, ValidationError
from odoo.osv import expression
from odoo.tools import pycompat, unique
-from odoo.tools.safe_eval import safe_eval, datetime, dateutil
+from odoo.tools.safe_eval import safe_eval, datetime, dateutil, time
_logger = logging.getLogger(__name__)
diff --git a/odoo/addons/base/tests/test_ir_model.py b/odoo/addons/base/tests/test_ir_model.py
index a46550fcf74..eea989f1237 100644
--- a/odoo/addons/base/tests/test_ir_model.py
+++ b/odoo/addons/base/tests/test_ir_model.py
@@ -4,7 +4,7 @@
from psycopg2 import IntegrityError
from odoo.exceptions import ValidationError
-from odoo.tests.common import TransactionCase, SavepointCase
+from odoo.tests.common import TransactionCase, SavepointCase, tagged
from odoo.tools import mute_logger
@@ -310,3 +310,20 @@ class TestIrModel(SavepointCase):
'__domain': [('x_ripeness_id', '=', self.ripeness_gone[0])],
}]
self.assertEqual(groups, expected, 'should include 2 empty ripeness stages')
+
+
+@tagged('test_eval_context')
+class TestEvalContext(TransactionCase):
+
+ def test_module_usage(self):
+ self.env['ir.model.fields'].create({
+ 'name': 'x_foo_bar_baz',
+ 'model_id': self.env['ir.model'].search([('model', '=', 'res.partner')]).id,
+ 'field_description': 'foo',
+ 'ttype': 'integer',
+ 'store': False,
+ 'depends': 'name',
+ 'compute': ("time.time()\ndatetime.datetime.now()\n"
+ "dateutil.relativedelta.relativedelta(hours=1)")
+ })
+ self.env['res.partner'].create({'name': 'foo'}).x_foo_bar_baz