changeset d85963a57040 in trytond:default
details: https://hg.tryton.org/trytond?cmd=changeset;node=d85963a57040
description:
        Add strip wildcards helpers

        issue7347
        review64541002
diffstat:

 CHANGELOG                   |   1 +
 trytond/tests/test_tools.py |  56 ++++++++++++++++++++++++++++++++++++++++++++-
 trytond/tools/misc.py       |  23 ++++++++++++++++++
 3 files changed, 79 insertions(+), 1 deletions(-)

diffs (111 lines):

diff -r 0e0591b85c0e -r d85963a57040 CHANGELOG
--- a/CHANGELOG Thu Apr 11 13:50:56 2019 +0200
+++ b/CHANGELOG Thu Apr 11 15:17:30 2019 +0200
@@ -1,3 +1,4 @@
+* Add strip wildcards helpers
 * Add list-form view
 * Do not set id for on_change calls if cached
 * Add cache on RPC
diff -r 0e0591b85c0e -r d85963a57040 trytond/tests/test_tools.py
--- a/trytond/tests/test_tools.py       Thu Apr 11 13:50:56 2019 +0200
+++ b/trytond/tests/test_tools.py       Thu Apr 11 15:17:30 2019 +0200
@@ -8,7 +8,8 @@
 import sql.operators
 
 from trytond.tools import (
-    reduce_ids, reduce_domain, decimal_, is_instance_method, file_open)
+    reduce_ids, reduce_domain, decimal_, is_instance_method, file_open,
+    strip_wildcard, lstrip_wildcard, rstrip_wildcard)
 from trytond.tools.string_ import StringPartitioned
 
 
@@ -132,6 +133,59 @@
         with self.assertRaisesRegex(IOError, "Permission denied:"):
             file_open('../trytond_suffix', subdir=None)
 
+    def test_strip_wildcard(self):
+        'Test strip wildcard'
+        for clause, result in [
+                ('%a%', 'a'),
+                ('%%%%a%%%', 'a'),
+                ('\\%a%', '\\%a'),
+                ('\\%a\\%', '\\%a\\%'),
+                ('a', 'a'),
+                ('', ''),
+                (None, None),
+                ]:
+            self.assertEqual(
+                strip_wildcard(clause), result, msg=clause)
+
+    def test_strip_wildcard_different_wildcard(self):
+        'Test strip wildcard with different wildcard'
+        self.assertEqual(strip_wildcard('___a___', '_'), 'a')
+
+    def test_lstrip_wildcard(self):
+        'Test lstrip wildcard'
+        for clause, result in [
+                ('%a', 'a'),
+                ('%a%', 'a%'),
+                ('%%%%a%', 'a%'),
+                ('\\%a%', '\\%a%'),
+                ('a', 'a'),
+                ('', ''),
+                (None, None),
+                ]:
+            self.assertEqual(
+                lstrip_wildcard(clause), result, msg=clause)
+
+    def test_lstrip_wildcard_different_wildcard(self):
+        'Test lstrip wildcard with different wildcard'
+        self.assertEqual(lstrip_wildcard('___a', '_'), 'a')
+
+    def test_rstrip_wildcard(self):
+        'Test rstrip wildcard'
+        for clause, result in [
+                ('a%', 'a'),
+                ('%a%', '%a'),
+                ('%a%%%%%', '%a'),
+                ('%a\\%', '%a\\%'),
+                ('a', 'a'),
+                ('', ''),
+                (None, None),
+                ]:
+            self.assertEqual(
+                rstrip_wildcard(clause), result, msg=clause)
+
+    def test_rstrip_wildcard_diferent_wildcard(self):
+        self.assertEqual(rstrip_wildcard('a___', '_'), 'a')
+
 
 class StringPartitionedTestCase(unittest.TestCase):
     "Test StringPartitioned"
diff -r 0e0591b85c0e -r d85963a57040 trytond/tools/misc.py
--- a/trytond/tools/misc.py     Thu Apr 11 13:50:56 2019 +0200
+++ b/trytond/tools/misc.py     Thu Apr 11 15:17:30 2019 +0200
@@ -248,3 +248,26 @@
         except AttributeError:
             found = importlib.import_module(used)
     return found
+
+
+def strip_wildcard(string, wildcard='%', escape='\\'):
+    "Strip starting and ending wildcard from string"
+    string = lstrip_wildcard(string, wildcard)
+    return rstrip_wildcard(string, wildcard, escape)
+
+
+def lstrip_wildcard(string, wildcard='%'):
+    "Strip starting wildcard from string"
+    if not string:
+        return string
+    return string.lstrip(wildcard)
+
+
+def rstrip_wildcard(string, wildcard='%', escape='\\'):
+    "Strip ending wildcard from string"
+    if not string:
+        return string
+    new_string = string.rstrip(wildcard)
+    if new_string[-1] == escape:
+        return string
+    return new_string

Reply via email to