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()