changeset 738c1d725255 in trytond:default
details: https://hg.tryton.org/trytond?cmd=changeset&node=738c1d725255
description:
        Add remove_forbidden_chars in tools

        issue10684
        review371581002
diffstat:

 CHANGELOG                   |   1 +
 doc/ref/tools/misc.rst      |   5 +++++
 trytond/tests/test_tools.py |  14 +++++++++++++-
 trytond/tools/__init__.py   |   5 +++--
 trytond/tools/misc.py       |  10 ++++++++++
 5 files changed, 32 insertions(+), 3 deletions(-)

diffs (90 lines):

diff -r f6b0d437b5b6 -r 738c1d725255 CHANGELOG
--- a/CHANGELOG Mon Sep 13 23:40:28 2021 +0200
+++ b/CHANGELOG Mon Sep 13 23:43:03 2021 +0200
@@ -1,3 +1,4 @@
+* Add remove_forbidden_chars in tools
 * Manage errors during non-interactive operations
 * Add estimation count to ModelStorage
 * Support empty digits in format_number of Report
diff -r f6b0d437b5b6 -r 738c1d725255 doc/ref/tools/misc.rst
--- a/doc/ref/tools/misc.rst    Mon Sep 13 23:40:28 2021 +0200
+++ b/doc/ref/tools/misc.rst    Mon Sep 13 23:43:03 2021 +0200
@@ -26,3 +26,8 @@
 .. method:: firstline(text)
 
 Return first non-empty line of a text field.
+
+.. method:: remove_forbidden_chars(value)
+
+Return a copy of the string with forbidden char from
+:class:`~trytond.models.fields.Char` replaced by space.
diff -r f6b0d437b5b6 -r 738c1d725255 trytond/tests/test_tools.py
--- a/trytond/tests/test_tools.py       Mon Sep 13 23:40:28 2021 +0200
+++ b/trytond/tests/test_tools.py       Mon Sep 13 23:43:03 2021 +0200
@@ -13,7 +13,8 @@
 from trytond.tools import (
     reduce_ids, reduce_domain, decimal_, is_instance_method, file_open,
     strip_wildcard, lstrip_wildcard, rstrip_wildcard, slugify, sortable_values,
-    escape_wildcard, unescape_wildcard, is_full_text, firstline)
+    escape_wildcard, unescape_wildcard, is_full_text, firstline,
+    remove_forbidden_chars)
 from trytond.tools.string_ import StringPartitioned, LazyString
 from trytond.tools.domain_inversion import (
     domain_inversion, parse, simplify, merge, concat, unique_value,
@@ -848,6 +849,17 @@
             with self.subTest(text=text, result=result):
                 self.assertEqual(firstline(text), result)
 
+    def test_remove_forbidden_chars(self):
+        "Test remove_forbidden_chars"
+        for string, result in [
+                ("", ""),
+                (None, None),
+                ("\ttest", "test"),
+                (" test ", "test"),
+                ]:
+            with self.subTest(string=string):
+                self.assertEqual(remove_forbidden_chars(string), result)
+
 
 def suite():
     func = unittest.TestLoader().loadTestsFromTestCase
diff -r f6b0d437b5b6 -r 738c1d725255 trytond/tools/__init__.py
--- a/trytond/tools/__init__.py Mon Sep 13 23:40:28 2021 +0200
+++ b/trytond/tools/__init__.py Mon Sep 13 23:43:03 2021 +0200
@@ -9,7 +9,8 @@
     file_open, get_smtp_server, reduce_ids, reduce_domain,
     grouped_slice, is_instance_method, resolve, strip_wildcard,
     lstrip_wildcard, rstrip_wildcard, slugify, sortable_values,
-    escape_wildcard, unescape_wildcard, is_full_text, sql_pairing, firstline)
+    escape_wildcard, unescape_wildcard, is_full_text, sql_pairing, firstline,
+    remove_forbidden_chars)
 from .decimal_ import decistmt
 
 __all__ = ['file_open', 'get_smtp_server', 'reduce_ids',
@@ -17,7 +18,7 @@
     'strip_wildcard', 'lstrip_wildcard', 'rstrip_wildcard', 'slugify',
     'decistmt', 'ClassProperty', 'cursor_dict', 'cached_property',
     'sortable_values', 'escape_wildcard', 'unescape_wildcard', 'is_full_text',
-    'sql_pairing', 'firstline']
+    'sql_pairing', 'firstline', 'remove_forbidden_chars']
 
 
 class ClassProperty(property):
diff -r f6b0d437b5b6 -r 738c1d725255 trytond/tools/misc.py
--- a/trytond/tools/misc.py     Mon Sep 13 23:40:28 2021 +0200
+++ b/trytond/tools/misc.py     Mon Sep 13 23:43:03 2021 +0200
@@ -272,3 +272,13 @@
         return next((x for x in text.splitlines() if x.strip()))
     except StopIteration:
         return ''
+
+
+def remove_forbidden_chars(value):
+    from trytond.model.fields import Char
+    if value is None:
+        return value
+    for c in Char.forbidden_chars:
+        if c in value:
+            value = value.replace(c, ' ')
+    return value.strip()

Reply via email to