changeset 8b1644ea12fa in trytond:default
details: https://hg.tryton.org/trytond?cmd=changeset&node=8b1644ea12fa
description:
Escape wildcard in tree separator for name domain
issue11321
review356281002
diffstat:
trytond/model/tree.py | 4 +++-
trytond/tests/test_tree.py | 9 +++++++++
trytond/tests/tree.py | 8 ++++++++
3 files changed, 20 insertions(+), 1 deletions(-)
diffs (65 lines):
diff -r b9ed8d94a300 -r 8b1644ea12fa trytond/model/tree.py
--- a/trytond/model/tree.py Thu Apr 14 10:21:54 2022 +0200
+++ b/trytond/model/tree.py Sat Apr 16 11:25:38 2022 +0200
@@ -3,6 +3,7 @@
from itertools import chain
from trytond.i18n import gettext
+from trytond.tools import escape_wildcard
from .modelstorage import ValidationError
@@ -22,7 +23,8 @@
def __setup__(cls):
super(TreeMixin, cls).__setup__()
field = getattr(cls, name)
- clause = (name, 'not like', '%' + separator + '%')
+ clause = (
+ name, 'not like', '%' + escape_wildcard(separator) + '%')
# If TreeMixin is after the class where name is defined in
# __mro__, it modifies the base field copied so it must ensure
# to add only once the domain
diff -r b9ed8d94a300 -r 8b1644ea12fa trytond/tests/test_tree.py
--- a/trytond/tests/test_tree.py Thu Apr 14 10:21:54 2022 +0200
+++ b/trytond/tests/test_tree.py Sat Apr 16 11:25:38 2022 +0200
@@ -189,6 +189,15 @@
record.save()
@with_transaction()
+ def test_name_domain_wildcard(self):
+ "Test name domain on tree with wildcard"
+ pool = Pool()
+ Tree = pool.get('test.tree_wildcard')
+
+ record = Tree(name="test 10%")
+ record.save()
+
+ @with_transaction()
def test_rec_name(self):
"Test rec_name"
pool = Pool()
diff -r b9ed8d94a300 -r 8b1644ea12fa trytond/tests/tree.py
--- a/trytond/tests/tree.py Thu Apr 14 10:21:54 2022 +0200
+++ b/trytond/tests/tree.py Sat Apr 16 11:25:38 2022 +0200
@@ -12,6 +12,13 @@
parent = fields.Many2One('test.tree', "Parent")
+class TreeWildcard(tree(separator='\\'), ModelSQL):
+ "Tree separator wildcard"
+ __name__ = 'test.tree_wildcard'
+ name = fields.Char("Name")
+ parent = fields.Many2One('test.tree_wildcard', "Parent")
+
+
class Polytree(tree(parent='parents'), ModelSQL):
"PolyTree"
__name__ = 'test.polytree'
@@ -30,6 +37,7 @@
def register(module):
Pool.register(
Tree,
+ TreeWildcard,
Polytree,
PolytreeEdge,
module=module, type_='model')