summaryrefslogtreecommitdiff
path: root/odoo/addons
diff options
context:
space:
mode:
Diffstat (limited to 'odoo/addons')
-rw-r--r--odoo/addons/base/data/res.country.state.csv2
-rw-r--r--odoo/addons/base/data/res_country_data.xml5
-rw-r--r--odoo/addons/base/models/ir_mail_server.py6
-rw-r--r--odoo/addons/base/models/qweb.py7
-rw-r--r--odoo/addons/base/models/res_users.py5
-rw-r--r--odoo/addons/base/rng/tree_view.rng2
-rw-r--r--odoo/addons/base/security/base_security.xml2
-rw-r--r--odoo/addons/base/tests/test_qweb.py21
-rw-r--r--odoo/addons/test_pylint/tests/test_pylint.py8
9 files changed, 48 insertions, 10 deletions
diff --git a/odoo/addons/base/data/res.country.state.csv b/odoo/addons/base/data/res.country.state.csv
index 4b445f52cf9..b64c8f78f12 100644
--- a/odoo/addons/base/data/res.country.state.csv
+++ b/odoo/addons/base/data/res.country.state.csv
@@ -450,7 +450,7 @@ state_es_m,es,"Madrid","M"
state_es_ma,es,"Málaga","MA"
state_es_ml,es,"Melilla","ME"
state_es_mu,es,"Murcia","MU"
-state_es_na,es,"Nafarroa (Navarra)","NA"
+state_es_na,es,"Navarra (Nafarroa)","NA"
state_es_or,es,"Ourense (Orense)","OR"
state_es_p,es,"Palencia","P"
state_es_po,es,"Pontevedra","PO"
diff --git a/odoo/addons/base/data/res_country_data.xml b/odoo/addons/base/data/res_country_data.xml
index 0e865be0fdf..1648d24430c 100644
--- a/odoo/addons/base/data/res_country_data.xml
+++ b/odoo/addons/base/data/res_country_data.xml
@@ -271,6 +271,7 @@
<field eval="'%(street)s\n%(street2)s\n%(city)s %(state_code)s %(zip)s\n%(country_name)s'" name="address_format" />
<field name="currency_id" ref="CAD" />
<field eval="1" name="phone_code" />
+ <field name="vat_label">HST</field>
</record>
<record id="cc" model="res.country">
<field name="name">Cocos (Keeling) Islands</field>
@@ -440,8 +441,10 @@
<field name="name">Dominican Republic</field>
<field name="code">do</field>
<field file="base/static/img/country_flags/do.png" name="image" type="base64" />
+ <field eval="'%(street)s\n%(street2)s\n%(city)s %(state_name)s %(zip)s\n%(country_name)s'" name="address_format" />
<field name="currency_id" ref="DOP" />
- <field eval="0" name="phone_code" />
+ <field eval="1" name="phone_code" />
+ <field name="vat_label">RNC</field>
</record>
<record id="dz" model="res.country">
<field name="name">Algeria</field>
diff --git a/odoo/addons/base/models/ir_mail_server.py b/odoo/addons/base/models/ir_mail_server.py
index 96edff27263..454e2dc0780 100644
--- a/odoo/addons/base/models/ir_mail_server.py
+++ b/odoo/addons/base/models/ir_mail_server.py
@@ -22,6 +22,8 @@ from odoo.tools import ustr, pycompat
_logger = logging.getLogger(__name__)
_test_logger = logging.getLogger('odoo.tests')
+SMTP_TIMEOUT = 60
+
class MailDeliveryException(except_orm):
"""Specific exception subclass for mail delivery errors"""
@@ -225,9 +227,9 @@ class IrMailServer(models.Model):
"You could use STARTTLS instead. "
"If SSL is needed, an upgrade to Python 2.6 on the server-side "
"should do the trick."))
- connection = smtplib.SMTP_SSL(smtp_server, smtp_port)
+ connection = smtplib.SMTP_SSL(smtp_server, smtp_port, timeout=SMTP_TIMEOUT)
else:
- connection = smtplib.SMTP(smtp_server, smtp_port)
+ connection = smtplib.SMTP(smtp_server, smtp_port, timeout=SMTP_TIMEOUT)
connection.set_debuglevel(smtp_debug)
if smtp_encryption == 'starttls':
# starttls() will perform ehlo() if needed first
diff --git a/odoo/addons/base/models/qweb.py b/odoo/addons/base/models/qweb.py
index 98697b87738..692db1bf0f3 100644
--- a/odoo/addons/base/models/qweb.py
+++ b/odoo/addons/base/models/qweb.py
@@ -308,8 +308,9 @@ class QWeb(object):
raise e
except Exception as e:
path = _options['last_path_node']
- node = element.getroottree().xpath(path)
- raise QWebException("Error when compiling AST", e, path, etree.tostring(node[0], encoding='unicode'), name)
+ element, document = self.get_template(template, options)
+ node = element.getroottree().xpath(path) if ':' not in path else None
+ raise QWebException("Error when compiling AST", e, path, node and etree.tostring(node[0], encoding='unicode'), name)
astmod.body.extend(_options['ast_calls'])
if 'profile' in options:
@@ -344,7 +345,7 @@ class QWeb(object):
except Exception as e:
path = log['last_path_node']
element, document = self.get_template(template, options)
- node = element.getroottree().xpath(path)
+ node = element.getroottree().xpath(path) if ':' not in path else None
raise QWebException("Error to render compiling AST", e, path, node and etree.tostring(node[0], encoding='unicode'), name)
return _compiled_fn
diff --git a/odoo/addons/base/models/res_users.py b/odoo/addons/base/models/res_users.py
index 02f9d90562c..204d4751eb6 100644
--- a/odoo/addons/base/models/res_users.py
+++ b/odoo/addons/base/models/res_users.py
@@ -789,6 +789,11 @@ class GroupsView(models.Model):
xml = E.field(E.group(*(xml1), col="2"), E.group(*(xml2), col="4"), name="groups_id", position="replace")
xml.addprevious(etree.Comment("GENERATED AUTOMATICALLY BY GROUPS"))
xml_content = etree.tostring(xml, pretty_print=True, encoding="unicode")
+ if not view.check_access_rights('write', raise_exception=False):
+ # erp manager has the rights to update groups/users but not
+ # to modify ir.ui.view
+ if self.env.user.has_group('base.group_erp_manager'):
+ view = view.sudo()
new_context = dict(view._context)
new_context.pop('install_mode_data', None) # don't set arch_fs for this computed view
diff --git a/odoo/addons/base/rng/tree_view.rng b/odoo/addons/base/rng/tree_view.rng
index 1dec8e9ab11..dc41ee5005c 100644
--- a/odoo/addons/base/rng/tree_view.rng
+++ b/odoo/addons/base/rng/tree_view.rng
@@ -17,6 +17,8 @@
<rng:optional><rng:attribute name="duplicate"/></rng:optional>
<rng:optional><rng:attribute name="import"/></rng:optional>
<rng:optional><rng:attribute name="class"/></rng:optional>
+ <!-- Allows to take a custom View widget for handling. Defined in view_manager. -->
+ <rng:optional><rng:attribute name="js_class"/></rng:optional>
<rng:optional><rng:attribute name="colors"/></rng:optional>
<rng:optional><rng:attribute name="fonts"/></rng:optional>
<rng:optional><rng:attribute name="default_order"/></rng:optional>
diff --git a/odoo/addons/base/security/base_security.xml b/odoo/addons/base/security/base_security.xml
index f3bf2f908dd..21401d88b47 100644
--- a/odoo/addons/base/security/base_security.xml
+++ b/odoo/addons/base/security/base_security.xml
@@ -78,7 +78,7 @@
<field name="name">res.partner.rule.private.employee</field>
<field name="model_id" ref="base.model_res_partner"/>
<field name="domain_force">
- [('type', '!=', 'private')]
+ ['|', ('type', '!=', 'private'), ('type', '=', False)]
</field>
<field name="groups" eval="[
(4, ref('base.group_user')),
diff --git a/odoo/addons/base/tests/test_qweb.py b/odoo/addons/base/tests/test_qweb.py
index bea0c74cabe..310c5220897 100644
--- a/odoo/addons/base/tests/test_qweb.py
+++ b/odoo/addons/base/tests/test_qweb.py
@@ -5,6 +5,7 @@ import collections
import json
import os.path
import re
+import sys
from lxml import etree
@@ -465,6 +466,26 @@ class TestQWebNS(TransactionCase):
expected_result
)
+ def test_render_dynamic_xml_with_code_error(self):
+ """ Test that, when rendering a template containing a namespaced node
+ that evaluates code with errors, the proper exception is raised
+ """
+ view1 = self.env['ir.ui.view'].create({
+ 'name': "dummy",
+ 'type': 'qweb',
+ 'arch': u"""
+ <t t-name="base.dummy">
+ <Invoice xmlns:od="http://odoo.com/od">
+ <od:name t-att-test="'a' + 1"/>
+ </Invoice>
+ </t>
+ """
+ })
+ error_msg = "Can't convert 'int' object to str implicitly"
+ if sys.version_info >= (3, 6):
+ error_msg = "must be str, not int"
+ with self.assertRaisesRegexp(QWebException, error_msg):
+ view1.render()
from copy import deepcopy
class FileSystemLoader(object):
diff --git a/odoo/addons/test_pylint/tests/test_pylint.py b/odoo/addons/test_pylint/tests/test_pylint.py
index 5681e013d38..e067c87a5fe 100644
--- a/odoo/addons/test_pylint/tests/test_pylint.py
+++ b/odoo/addons/test_pylint/tests/test_pylint.py
@@ -10,6 +10,7 @@ import subprocess
from distutils.version import LooseVersion
import os
from os.path import join
+import sys
from odoo.tests.common import TransactionCase
from odoo import tools
@@ -114,8 +115,11 @@ class TestPyLint(TransactionCase):
def test_pylint(self):
if pylint is None:
self._skip_test('please install pylint')
- if LooseVersion(getattr(pylint, '__version__', '0.0.1')) < LooseVersion('1.6.4'):
- self._skip_test('please upgrade pylint to >= 1.6.4')
+ required_pylint_version = LooseVersion('1.6.4')
+ if sys.version_info >= (3, 6):
+ required_pylint_version = LooseVersion('1.7.0')
+ if LooseVersion(getattr(pylint, '__version__', '0.0.1')) < required_pylint_version:
+ self._skip_test('please upgrade pylint to >= %s' % required_pylint_version)
paths = [tools.config['root_path']]
for module in get_modules():