summaryrefslogtreecommitdiff
path: root/addons/mail
diff options
context:
space:
mode:
authorMartin Trigaux <mat@odoo.com>2020-01-22 15:16:22 +0000
committerMartin Trigaux <mat@odoo.com>2020-01-28 13:58:05 +0000
commita74a6480302620be364d2d15717fce59db3ddf4e (patch)
treeea350f32d91ceb078c4de5efd754bc15c08b450b /addons/mail
parent41a465bc869a96b7a4e2b49a691360827019b0ea (diff)
[IMP] *: use ast.literal_eval
When simply need to parse a domain, it is easier Add .strip() on ir.ui.view as ast.literal_eval produces an syntax error if the node starts with spaces (as done in the xpath of hr_attendance.view_employee_form_inherit_hr_attendance) closes odoo/odoo#43831 Related: odoo/enterprise#7894 Signed-off-by: Martin Trigaux (mat) <mat@odoo.com>
Diffstat (limited to 'addons/mail')
-rw-r--r--addons/mail/models/mail_alias.py4
-rw-r--r--addons/mail/models/mail_mail.py4
-rw-r--r--addons/mail/models/mail_thread.py6
-rw-r--r--addons/mail/wizard/mail_compose_message.py4
4 files changed, 9 insertions, 9 deletions
diff --git a/addons/mail/models/mail_alias.py b/addons/mail/models/mail_alias.py
index 4cc8234ba23..839123896c8 100644
--- a/addons/mail/models/mail_alias.py
+++ b/addons/mail/models/mail_alias.py
@@ -1,13 +1,13 @@
# -*- coding: utf-8 -*-
# Part of Odoo. See LICENSE file for full copyright and licensing details.
+import ast
import logging
import re
from odoo import _, api, fields, models
from odoo.exceptions import ValidationError
from odoo.tools import remove_accents
-from odoo.tools.safe_eval import safe_eval
_logger = logging.getLogger(__name__)
@@ -82,7 +82,7 @@ class Alias(models.Model):
def _check_alias_defaults(self):
for alias in self:
try:
- dict(safe_eval(alias.alias_defaults))
+ dict(ast.literal_eval(alias.alias_defaults))
except Exception:
raise ValidationError(_('Invalid expression, it must be a literal python dictionary definition e.g. "{\'field\': \'value\'}"'))
diff --git a/addons/mail/models/mail_mail.py b/addons/mail/models/mail_mail.py
index d554ff8edab..a94d70a7c26 100644
--- a/addons/mail/models/mail_mail.py
+++ b/addons/mail/models/mail_mail.py
@@ -1,6 +1,7 @@
# -*- coding: utf-8 -*-
# Part of Odoo. See LICENSE file for full copyright and licensing details.
+import ast
import base64
import datetime
import logging
@@ -14,7 +15,6 @@ from collections import defaultdict
from odoo import _, api, fields, models
from odoo import tools
from odoo.addons.base.models.ir_mail_server import MailDeliveryException
-from odoo.tools.safe_eval import safe_eval
_logger = logging.getLogger(__name__)
@@ -319,7 +319,7 @@ class MailMail(models.Model):
headers['Return-Path'] = '%s+%d@%s' % (bounce_alias, mail.id, catchall_domain)
if mail.headers:
try:
- headers.update(safe_eval(mail.headers))
+ headers.update(ast.literal_eval(mail.headers))
except Exception:
pass
diff --git a/addons/mail/models/mail_thread.py b/addons/mail/models/mail_thread.py
index ed0e9145344..2e94ea0cf44 100644
--- a/addons/mail/models/mail_thread.py
+++ b/addons/mail/models/mail_thread.py
@@ -1,6 +1,7 @@
# -*- coding: utf-8 -*-
# Part of Odoo. See LICENSE file for full copyright and licensing details.
+import ast
import base64
import datetime
import dateutil
@@ -31,7 +32,6 @@ from odoo.osv import expression
from odoo.tools import pycompat, ustr
from odoo.tools.misc import clean_context, split_every
-from odoo.tools.safe_eval import safe_eval
_logger = logging.getLogger(__name__)
@@ -416,7 +416,7 @@ class MailThread(models.AbstractModel):
doc = etree.XML(res['arch'])
for node in doc.xpath("//field[@name='message_ids']"):
# the 'Log a note' button is employee only
- options = safe_eval(node.get('options', '{}'))
+ options = ast.literal_eval(node.get('options', '{}'))
is_employee = self.env.user.has_group('base.group_user')
options['display_log_button'] = is_employee
# save options on the node
@@ -1001,7 +1001,7 @@ class MailThread(models.AbstractModel):
routes = []
for alias in dest_aliases:
user_id = self._mail_find_user_for_gateway(email_from, alias=alias).id or self._uid
- route = (alias.alias_model_id.model, alias.alias_force_thread_id, safe_eval(alias.alias_defaults), user_id, alias)
+ route = (alias.alias_model_id.model, alias.alias_force_thread_id, ast.literal_eval(alias.alias_defaults), user_id, alias)
route = self._routing_check_route(message, message_dict, route, raise_exception=True)
if route:
_logger.info(
diff --git a/addons/mail/wizard/mail_compose_message.py b/addons/mail/wizard/mail_compose_message.py
index fe4660e451b..520b8f94339 100644
--- a/addons/mail/wizard/mail_compose_message.py
+++ b/addons/mail/wizard/mail_compose_message.py
@@ -1,11 +1,11 @@
# -*- coding: utf-8 -*-
# Part of Odoo. See LICENSE file for full copyright and licensing details.
+import ast
import base64
import re
from odoo import _, api, fields, models, tools
-from odoo.tools.safe_eval import safe_eval
from odoo.exceptions import UserError
@@ -215,7 +215,7 @@ class MailComposer(models.TransientModel):
ActiveModel = ActiveModel.with_context(mail_notify_force_send=False, mail_create_nosubscribe=True)
# wizard works in batch mode: [res_id] or active_ids or active_domain
if mass_mode and wizard.use_active_domain and wizard.model:
- res_ids = self.env[wizard.model].search(safe_eval(wizard.active_domain)).ids
+ res_ids = self.env[wizard.model].search(ast.literal_eval(wizard.active_domain)).ids
elif mass_mode and wizard.model and self._context.get('active_ids'):
res_ids = self._context['active_ids']
else: