changeset 7fb5bf95e082 in tryton:default
details: https://hg.tryton.org/tryton?cmd=changeset;node=7fb5bf95e082
description:
        Detect all wild cards and escaped wild cards in likify

        issue10020
        review320611002
diffstat:

 tryton/common/domain_parser.py            |   6 +++---
 tryton/tests/test_common_domain_parser.py |  16 +++++++++++++++-
 2 files changed, 18 insertions(+), 4 deletions(-)

diffs (52 lines):

diff -r 2e64570bb195 -r 7fb5bf95e082 tryton/common/domain_parser.py
--- a/tryton/common/domain_parser.py    Fri Jan 29 00:04:29 2021 +0100
+++ b/tryton/common/domain_parser.py    Wed Feb 03 19:30:13 2021 +0100
@@ -98,12 +98,12 @@
         yield cur
 
 
-def likify(value):
+def likify(value, escape='\\'):
     "Add % if needed"
     if not value:
         return '%'
-    escaped = value.replace('%%', '__')
-    if '%' in escaped:
+    escaped = value.replace(escape + '%', '').replace(escape + '_', '')
+    if '%' in escaped or '_' in escaped:
         return value
     else:
         return '%' + value + '%'
diff -r 2e64570bb195 -r 7fb5bf95e082 tryton/tests/test_common_domain_parser.py
--- a/tryton/tests/test_common_domain_parser.py Fri Jan 29 00:04:29 2021 +0100
+++ b/tryton/tests/test_common_domain_parser.py Wed Feb 03 19:30:13 2021 +0100
@@ -7,7 +7,8 @@
 from tryton.common import untimezoned_date
 from tryton.common.domain_parser import (
     group_operator, quote, split_target_value, convert_value, format_value,
-    complete_value, parenthesize, rlist, operatorize, DomainParser, udlex)
+    complete_value, parenthesize, rlist, operatorize, DomainParser, udlex,
+    likify)
 
 
 class DomainParserTestCase(TestCase):
@@ -26,6 +27,19 @@
         self.assertEqual(
             list(group_operator(iter(['a', '>', '=', '=']))), ['a', '>=', '='])
 
+    def test_likify(self):
+        "Test likify"
+        for value, result in [
+                ('', '%'),
+                ('foo', '%foo%'),
+                ('foo%', 'foo%'),
+                ('foo_bar', 'foo_bar'),
+                ('foo\\%', '%foo\\%%'),
+                ('foo\\_bar', '%foo\\_bar%'),
+                ]:
+            with self.subTest(value=value):
+                self.assertEqual(likify(value), result)
+
     def test_quote(self):
         "Test quote"
         self.assertEqual(quote('test'), 'test')

Reply via email to