summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLuis González <lgonzalez@vauxoo.com>2019-10-07 17:40:57 +0000
committerLuis González <lgonzalez@vauxoo.com>2019-10-08 16:28:23 +0000
commit2b8f5dce061269bca48aad5a54e0f8fa767fe17d (patch)
treeda9dbf7f14eb854748b21c607c3332406dc48f04
parentdbeba8ea2380fbc91e202cbe6abda371a5b6b1b8 (diff)
[IMP] base: Forbid spaces in external IDs
This introduces a new constraint to the `ir.model.data` model, to disallow external IDs containing spaces. Those cases may cause issues and should be avoided. For more information about why an external ID containing spaces is a bad idea, see: - https://github.com/odoo/odoo/commit/3c568aec0b46 - https://github.com/odoo/odoo/issues/25408 closes odoo/odoo#38139 Signed-off-by: Xavier Morel (xmo) <xmo@odoo.com>
-rw-r--r--odoo/addons/base/models/ir_model.py5
-rw-r--r--odoo/addons/base/tests/test_ir_model.py13
2 files changed, 18 insertions, 0 deletions
diff --git a/odoo/addons/base/models/ir_model.py b/odoo/addons/base/models/ir_model.py
index a2e079492df..e23ac5c21b4 100644
--- a/odoo/addons/base/models/ir_model.py
+++ b/odoo/addons/base/models/ir_model.py
@@ -1561,6 +1561,11 @@ class IrModelData(models.Model):
date_init = fields.Datetime(string='Init Date', default=fields.Datetime.now)
reference = fields.Char(string='Reference', compute='_compute_reference', readonly=True, store=False)
+ _sql_constraints = [
+ ('name_nospaces', "CHECK(name NOT LIKE '% %')",
+ "External IDs cannot contain spaces"),
+ ]
+
@api.depends('module', 'name')
def _compute_complete_name(self):
for res in self:
diff --git a/odoo/addons/base/tests/test_ir_model.py b/odoo/addons/base/tests/test_ir_model.py
index d00d2d1fb55..ea5b4a5fa2e 100644
--- a/odoo/addons/base/tests/test_ir_model.py
+++ b/odoo/addons/base/tests/test_ir_model.py
@@ -1,7 +1,10 @@
# -*- coding: utf-8 -*-
# Part of Odoo. See LICENSE file for full copyright and licensing details.
+from psycopg2 import IntegrityError
+
from odoo.tests.common import TransactionCase
+from odoo.tools import mute_logger
class TestXMLID(TransactionCase):
@@ -155,3 +158,13 @@ class TestXMLID(TransactionCase):
self.assertEqual(self.get_data('test_convert.foo').noupdate, True)
self.assertEqual(self.get_data('test_convert.bar').noupdate, True)
+
+ @mute_logger('odoo.sql_db', 'odoo.addons.base.models.ir_model')
+ def test_create_external_id_with_space(self):
+ model = self.env['res.partner.category']
+ data_list = [{
+ 'xml_id': 'test_convert.category_with space',
+ 'values': {'name': 'Bar'},
+ }]
+ with self.assertRaisesRegex(IntegrityError, 'ir_model_data_name_nospaces'):
+ model._load_records(data_list)