From 8d745f9f50d705007e3c3853f4af504624ad3c00 Mon Sep 17 00:00:00 2001 From: Olivier Dony Date: Wed, 20 May 2015 13:46:52 +0200 Subject: [PATCH] [FIX] account, mail, etc.: uniformize evaluated expressions opw-626694 --- addons/account/account.py | 7 ++++--- addons/account/wizard/account_invoice_refund.py | 1 + addons/account_test/report/account_test_report.py | 3 ++- addons/anonymization/anonymization.py | 1 + addons/base_action_rule/base_action_rule.py | 1 + addons/crm_partner_assign/crm_lead.py | 1 + addons/delivery/delivery.py | 1 + addons/google_drive/google_drive.py | 1 + addons/l10n_fr/report/base_report.py | 1 + addons/mail/mail_alias.py | 1 + addons/share/wizard/share_wizard.py | 4 ++-- addons/web_diagram/controllers/main.py | 1 + addons/website/models/ir_http.py | 1 + openerp/osv/orm.py | 2 ++ openerp/report/report_sxw.py | 1 + 15 files changed, 21 insertions(+), 6 deletions(-) diff --git a/addons/account/account.py b/addons/account/account.py index 58f8d19b13a..11a1886a58a 100644 --- a/addons/account/account.py +++ b/addons/account/account.py @@ -31,6 +31,7 @@ from openerp import tools from openerp.osv import fields, osv, expression from openerp.tools.translate import _ from openerp.tools.float_utils import float_round as round +from openerp.tools.safe_eval import safe_eval as eval import openerp.addons.decimal_precision as dp @@ -2001,7 +2002,7 @@ class account_tax(osv.osv): for tax in taxes: if tax.applicable_type=='code': localdict = {'price_unit':price_unit, 'product':product, 'partner':partner} - exec tax.python_applicable in localdict + eval(tax.python_applicable, localdict, mode="exec", nocopy=True) if localdict.get('result', False): res.append(tax) else: @@ -2042,7 +2043,7 @@ class account_tax(osv.osv): # data['amount'] = quantity elif tax.type=='code': localdict = {'price_unit':cur_price_unit, 'product':product, 'partner':partner, 'quantity': quantity} - exec tax.python_compute in localdict + eval(tax.python_compute, localdict, mode="exec", nocopy=True) amount = localdict['result'] data['amount'] = amount elif tax.type=='balance': @@ -2190,7 +2191,7 @@ class account_tax(osv.osv): elif tax.type=='code': localdict = {'price_unit':cur_price_unit, 'product':product, 'partner':partner} - exec tax.python_compute_inv in localdict + eval(tax.python_compute_inv, localdict, mode="exec", nocopy=True) amount = localdict['result'] elif tax.type=='balance': amount = cur_price_unit - reduce(lambda x,y: y.get('amount',0.0)+x, res, 0.0) diff --git a/addons/account/wizard/account_invoice_refund.py b/addons/account/wizard/account_invoice_refund.py index 0d6d7391ccf..5fbe6bb4325 100644 --- a/addons/account/wizard/account_invoice_refund.py +++ b/addons/account/wizard/account_invoice_refund.py @@ -23,6 +23,7 @@ import time from openerp.osv import fields, osv from openerp.tools.translate import _ +from openerp.tools.safe_eval import safe_eval as eval class account_invoice_refund(osv.osv_memory): diff --git a/addons/account_test/report/account_test_report.py b/addons/account_test/report/account_test_report.py index bb21e3807a8..857015bfc34 100644 --- a/addons/account_test/report/account_test_report.py +++ b/addons/account_test/report/account_test_report.py @@ -26,6 +26,7 @@ import time from openerp.osv import osv from openerp.tools.translate import _ from openerp.report import report_sxw +from openerp.tools.safe_eval import safe_eval as eval # @@ -68,7 +69,7 @@ class report_assert_account(report_sxw.rml_parse): 'result': None, #used to store the result of the test 'column_order': None, #used to choose the display order of columns (in case you are returning a list of dict) } - exec code_exec in localdict + eval(code_exec, localdict, mode="exec", nocopy=True) result = localdict['result'] column_order = localdict.get('column_order', None) diff --git a/addons/anonymization/anonymization.py b/addons/anonymization/anonymization.py index 92a60469ac3..6d1fed48c97 100644 --- a/addons/anonymization/anonymization.py +++ b/addons/anonymization/anonymization.py @@ -31,6 +31,7 @@ import random import datetime from openerp.osv import fields, osv from openerp.tools.translate import _ +from openerp.tools.safe_eval import safe_eval as eval from itertools import groupby from operator import itemgetter diff --git a/addons/base_action_rule/base_action_rule.py b/addons/base_action_rule/base_action_rule.py index 2bf83f93e83..7bcfb8928f4 100644 --- a/addons/base_action_rule/base_action_rule.py +++ b/addons/base_action_rule/base_action_rule.py @@ -27,6 +27,7 @@ import openerp from openerp import SUPERUSER_ID from openerp.osv import fields, osv from openerp.tools import DEFAULT_SERVER_DATETIME_FORMAT +from openerp.tools.safe_eval import safe_eval as eval _logger = logging.getLogger(__name__) diff --git a/addons/crm_partner_assign/crm_lead.py b/addons/crm_partner_assign/crm_lead.py index c0dd061f511..a7b81fbea27 100644 --- a/addons/crm_partner_assign/crm_lead.py +++ b/addons/crm_partner_assign/crm_lead.py @@ -21,6 +21,7 @@ from openerp.osv import osv from openerp.tools.translate import _ +from openerp.tools.safe_eval import safe_eval as eval class crm_lead(osv.osv): diff --git a/addons/delivery/delivery.py b/addons/delivery/delivery.py index d1a08b9ae45..4ba98c4c4c7 100644 --- a/addons/delivery/delivery.py +++ b/addons/delivery/delivery.py @@ -24,6 +24,7 @@ import time from openerp.osv import fields,osv from openerp.tools.translate import _ import openerp.addons.decimal_precision as dp +from openerp.tools.safe_eval import safe_eval as eval _logger = logging.getLogger(__name__) diff --git a/addons/google_drive/google_drive.py b/addons/google_drive/google_drive.py index 789b5527e31..8af18639299 100644 --- a/addons/google_drive/google_drive.py +++ b/addons/google_drive/google_drive.py @@ -23,6 +23,7 @@ from openerp import SUPERUSER_ID from openerp.addons.google_account import TIMEOUT from openerp.osv import fields, osv from openerp.tools.translate import _ +from openerp.tools.safe_eval import safe_eval as eval import werkzeug.urls import urllib2 diff --git a/addons/l10n_fr/report/base_report.py b/addons/l10n_fr/report/base_report.py index 14fcce0d88f..848bdfa813e 100644 --- a/addons/l10n_fr/report/base_report.py +++ b/addons/l10n_fr/report/base_report.py @@ -28,6 +28,7 @@ import time from openerp.report import report_sxw +from openerp.tools.safe_eval import safe_eval as eval class base_report(report_sxw.rml_parse): diff --git a/addons/mail/mail_alias.py b/addons/mail/mail_alias.py index 32d27985442..6ae88191fcd 100644 --- a/addons/mail/mail_alias.py +++ b/addons/mail/mail_alias.py @@ -28,6 +28,7 @@ from openerp.tools import ustr from openerp.modules.registry import RegistryManager from openerp import SUPERUSER_ID from openerp.tools.translate import _ +from openerp.tools.safe_eval import safe_eval as eval _logger = logging.getLogger(__name__) diff --git a/addons/share/wizard/share_wizard.py b/addons/share/wizard/share_wizard.py index 32bb9d71ea5..68db8a8c8cf 100644 --- a/addons/share/wizard/share_wizard.py +++ b/addons/share/wizard/share_wizard.py @@ -600,8 +600,8 @@ class share_wizard(osv.TransientModel): # other groups, so we duplicate if needed rule = self._check_personal_rule_or_duplicate(cr, group_id, rule, context=context) eval_ctx = rule_obj._eval_context_for_combinations() - org_domain = expression.normalize_domain(eval(rule.domain_force, eval_ctx)) - new_clause = expression.normalize_domain(eval(domain, eval_ctx)) + org_domain = expression.normalize_domain(safe_eval(rule.domain_force, eval_ctx)) + new_clause = expression.normalize_domain(safe_eval(domain, eval_ctx)) combined_domain = expression.AND([new_clause, org_domain]) rule.write({'domain_force': combined_domain, 'name': rule.name + _('(Modified)')}) _logger.debug("Combining sharing rule %s on model %s with domain: %s", rule.id, model_id, domain) diff --git a/addons/web_diagram/controllers/main.py b/addons/web_diagram/controllers/main.py index 0e89eb13db2..c45790c7264 100644 --- a/addons/web_diagram/controllers/main.py +++ b/addons/web_diagram/controllers/main.py @@ -1,4 +1,5 @@ import openerp +from openerp.tools.safe_eval import safe_eval as eval class DiagramView(openerp.http.Controller): diff --git a/addons/website/models/ir_http.py b/addons/website/models/ir_http.py index 64c65a75d28..2523c5289be 100644 --- a/addons/website/models/ir_http.py +++ b/addons/website/models/ir_http.py @@ -15,6 +15,7 @@ from openerp.addons.website.models.website import slug, url_for, _UNSLUG_RE from openerp.http import request from openerp.tools import config from openerp.osv import orm +from openerp.tools.safe_eval import safe_eval as eval logger = logging.getLogger(__name__) diff --git a/openerp/osv/orm.py b/openerp/osv/orm.py index db1da378bbe..835e29da7f9 100644 --- a/openerp/osv/orm.py +++ b/openerp/osv/orm.py @@ -11,6 +11,8 @@ from ..models import ( LOG_ACCESS_COLUMNS, ) +from openerp.tools.safe_eval import safe_eval as eval + # extra definitions for backward compatibility browse_record_list = BaseModel diff --git a/openerp/report/report_sxw.py b/openerp/report/report_sxw.py index 8f7de6d5cce..697c9466a18 100644 --- a/openerp/report/report_sxw.py +++ b/openerp/report/report_sxw.py @@ -38,6 +38,7 @@ from openerp import SUPERUSER_ID from openerp.osv.fields import float as float_field, function as function_field, datetime as datetime_field from openerp.tools.translate import _ from openerp.tools import DEFAULT_SERVER_DATE_FORMAT, DEFAULT_SERVER_DATETIME_FORMAT +from openerp.tools.safe_eval import safe_eval as eval _logger = logging.getLogger(__name__)