summaryrefslogtreecommitdiff
path: root/odoo/addons
diff options
context:
space:
mode:
authorChristophe Simonis <chs@odoo.com>2019-05-17 12:19:55 +0200
committerChristophe Simonis <chs@odoo.com>2019-05-17 12:19:55 +0200
commitd8c0826b078788be03c2835b01c4fbd08a2cd398 (patch)
tree0bb5f9955ddc4ee7ec5ed58ec4f386618ae1f70b /odoo/addons
parentcc641b3e2dda678c0d6928768c66047c2070ccb6 (diff)
parent37bca6ae5001d76789dc5c02bdbdfab9ddb557fa (diff)
[MERGE] forward port branch saas-11.3 up to 37bca6ae500
Diffstat (limited to 'odoo/addons')
-rw-r--r--odoo/addons/base/models/ir_mail_server.py12
-rw-r--r--odoo/addons/base/models/res_users.py8
-rw-r--r--odoo/addons/test_convert/__init__.py1
-rw-r--r--odoo/addons/test_convert/__manifest__.py1
-rw-r--r--odoo/addons/test_convert/ir.model.access.csv2
-rw-r--r--odoo/addons/test_convert/models.py16
-rw-r--r--odoo/addons/test_convert/tests/test_convert.py21
7 files changed, 55 insertions, 6 deletions
diff --git a/odoo/addons/base/models/ir_mail_server.py b/odoo/addons/base/models/ir_mail_server.py
index 285bc88822a..58eb2afe5a5 100644
--- a/odoo/addons/base/models/ir_mail_server.py
+++ b/odoo/addons/base/models/ir_mail_server.py
@@ -119,10 +119,18 @@ def encode_rfc2822_address_header(header_text):
# Header as a string, using an unlimited line length.", the old one
# was "A synonym for Header.encode()." so call encode() directly?
name = Header(pycompat.to_text(name)).encode()
- return formataddr((name, email))
+ # if the from does not follow the (name <addr>),* convention, we might
+ # try to encode meaningless strings as address, as getaddresses is naive
+ # note it would also fail on real addresses with non-ascii characters
+ try:
+ return formataddr((name, email))
+ except UnicodeEncodeError:
+ _logger.warning(_('Failed to encode the address %s\n'
+ 'from mail header:\n%s') % addr, header_text)
+ return ""
addresses = getaddresses([pycompat.to_native(ustr(header_text))])
- return COMMASPACE.join(encode_addr(a) for a in addresses)
+ return COMMASPACE.join(a for a in (encode_addr(addr) for addr in addresses) if a)
class IrMailServer(models.Model):
diff --git a/odoo/addons/base/models/res_users.py b/odoo/addons/base/models/res_users.py
index ea80fa7dbb2..69d923763d8 100644
--- a/odoo/addons/base/models/res_users.py
+++ b/odoo/addons/base/models/res_users.py
@@ -1113,9 +1113,9 @@ class UsersView(models.Model):
group_multi_company = self.env.ref('base.group_multi_company', False)
if group_multi_company and 'company_ids' in values:
if len(user.company_ids) <= 1 and user.id in group_multi_company.users.ids:
- group_multi_company.write({'users': [(3, user.id)]})
+ user.write({'groups_id': [(3, group_multi_company.id)]})
elif len(user.company_ids) > 1 and user.id not in group_multi_company.users.ids:
- group_multi_company.write({'users': [(4, user.id)]})
+ user.write({'groups_id': [(4, group_multi_company.id)]})
return user
@api.multi
@@ -1126,9 +1126,9 @@ class UsersView(models.Model):
if group_multi_company and 'company_ids' in values:
for user in self:
if len(user.company_ids) <= 1 and user.id in group_multi_company.users.ids:
- group_multi_company.write({'users': [(3, user.id)]})
+ user.write({'groups_id': [(3, group_multi_company.id)]})
elif len(user.company_ids) > 1 and user.id not in group_multi_company.users.ids:
- group_multi_company.write({'users': [(4, user.id)]})
+ user.write({'groups_id': [(4, group_multi_company.id)]})
return res
def _remove_reified_groups(self, values):
diff --git a/odoo/addons/test_convert/__init__.py b/odoo/addons/test_convert/__init__.py
index e69de29bb2d..0650744f6bc 100644
--- a/odoo/addons/test_convert/__init__.py
+++ b/odoo/addons/test_convert/__init__.py
@@ -0,0 +1 @@
+from . import models
diff --git a/odoo/addons/test_convert/__manifest__.py b/odoo/addons/test_convert/__manifest__.py
index af6cd1af6e4..a9c67447615 100644
--- a/odoo/addons/test_convert/__manifest__.py
+++ b/odoo/addons/test_convert/__manifest__.py
@@ -5,4 +5,5 @@
'name': 'test_convert',
'description': "Data for xml conversion tests",
'version': '0.0.1',
+ 'data': ['ir.model.access.csv'],
}
diff --git a/odoo/addons/test_convert/ir.model.access.csv b/odoo/addons/test_convert/ir.model.access.csv
new file mode 100644
index 00000000000..014e4d1c827
--- /dev/null
+++ b/odoo/addons/test_convert/ir.model.access.csv
@@ -0,0 +1,2 @@
+id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink
+access_test_convert_test_model,access_test_convert_test_model,model_test_convert_test_model,,1,1,1,1 \ No newline at end of file
diff --git a/odoo/addons/test_convert/models.py b/odoo/addons/test_convert/models.py
new file mode 100644
index 00000000000..0f059e56e86
--- /dev/null
+++ b/odoo/addons/test_convert/models.py
@@ -0,0 +1,16 @@
+from odoo import api, models
+
+class TestModel(models.Model):
+ _name = 'test_convert.test_model'
+
+ @api.model
+ def action_test_date(self, today_date):
+ return True
+
+ @api.model
+ def action_test_time(self, cur_time):
+ return True
+
+ @api.model
+ def action_test_timezone(self, timezone):
+ return True
diff --git a/odoo/addons/test_convert/tests/test_convert.py b/odoo/addons/test_convert/tests/test_convert.py
index e81526dd43c..1bb79619c21 100644
--- a/odoo/addons/test_convert/tests/test_convert.py
+++ b/odoo/addons/test_convert/tests/test_convert.py
@@ -4,8 +4,10 @@
import collections
import unittest
+from lxml import etree as ET
from lxml.builder import E
+import odoo
from odoo.tests import common
from odoo.tools.convert import _eval_xml
@@ -16,6 +18,25 @@ class TestEvalXML(common.TransactionCase):
def eval_xml(self, node, obj=None):
return _eval_xml(obj, node, self.env)
+ def test_function_eval(self):
+ def id_get(): pass
+ Obj = collections.namedtuple('Obj', ['module', 'idref', 'id_get'])
+ obj = Obj('test_convert', {}, id_get)
+
+ try:
+ test_datetime = ET.XML("<function name='action_test_date' model='test_convert.test_model' eval='[datetime.now().strftime(\"%Y-%m-%d %H:%M:%S\")]'/>")
+ self.eval_xml(node=test_datetime, obj=obj)
+ test_time = ET.XML("<function name='action_test_time' model='test_convert.test_model' eval='[time.strftime(\"%Y-%m-%d %H:%M:%S\")]'/>")
+ self.eval_xml(node=test_time, obj=obj)
+ test_timedelta = ET.XML("<function name='action_test_date' model='test_convert.test_model' eval='[(datetime.today()-timedelta(days=365)).strftime(\"%Y-%m-%d %H:%M:%S\")]'/>")
+ self.eval_xml(node=test_timedelta, obj=obj)
+ test_relativedelta = ET.XML("<function name='action_test_date' model='test_convert.test_model' eval='[(datetime.today()+relativedelta(months=3)).strftime(\"%Y-%m-%d %H:%M:%S\")]'/>")
+ self.eval_xml(node=test_relativedelta, obj=obj)
+ test_timezone = ET.XML("<function name='action_test_timezone' model='test_convert.test_model' eval='[pytz.timezone(\"Asia/Calcutta\")]'/>")
+ self.eval_xml(node=test_timezone, obj=obj)
+ except ValueError as e:
+ self.fail(e.message)
+
def test_char(self):
self.assertEqual(
self.eval_xml(Field("foo")),