Skip to content

Commit aa9bf50

Browse files
committed
optimize string escaping
1 parent 298d5c5 commit aa9bf50

File tree

2 files changed

+25
-13
lines changed

2 files changed

+25
-13
lines changed

logwrap/repr_utils.py

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,18 @@ def _simple(item: typing.Any) -> bool:
3939
return not isinstance(item, (list, set, tuple, dict, frozenset))
4040

4141

42+
SPECIAL_SYMBOLS_ESCAPE: typing.Dict[str, str] = {
43+
"\\": "\\\\",
44+
"\n": "\\n",
45+
"\r": "\\r",
46+
"\f": "\\f",
47+
"\v": "\\v",
48+
"\b": "\\b",
49+
"\t": "\\t",
50+
"\a": "\\a",
51+
}
52+
53+
4254
class ReprParameter:
4355
"""Parameter wrapper wor repr and str operations over signature."""
4456

@@ -350,9 +362,7 @@ def _strings_repr(indent: int, val: typing.Union[bytes, str]) -> str:
350362
else:
351363
prefix = "u"
352364
string = val
353-
escaped: str = string.replace("\\", "\\\\").replace("\n", "\\n").replace("\r", "\\r").replace(
354-
"\f", "\\f"
355-
).replace("\v", "\\v").replace("\b", "\\b").replace("\t", "\\t").replace("\a", "\\a")
365+
escaped: str = "".join(SPECIAL_SYMBOLS_ESCAPE.get(sym, sym) for sym in string)
356366
return f"{'':<{indent}}{prefix}'''{escaped}'''"
357367

358368
def _repr_simple(self, src: typing.Any, indent: int = 0, no_indent_start: bool = False) -> str:

logwrap/repr_utils.pyx

Lines changed: 12 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,17 @@ cdef:
3535
"""Check for nested iterations: True, if not."""
3636
return not isinstance(item, (list, set, tuple, dict, frozenset))
3737

38+
dict SPECIAL_SYMBOLS_ESCAPE = {
39+
"\\": "\\\\",
40+
"\n": "\\n",
41+
"\r": "\\r",
42+
"\f": "\\f",
43+
"\v": "\\v",
44+
"\b": "\\b",
45+
"\t": "\\t",
46+
"\a": "\\a"
47+
}
48+
3849

3950
class ReprParameter:
4051
"""Parameter wrapper wor repr and str operations over signature."""
@@ -339,16 +350,7 @@ cdef class PrettyRepr(PrettyFormat):
339350
else:
340351
prefix = "u"
341352
string = val
342-
escaped = (
343-
string.replace("\\", "\\\\")
344-
.replace("\n", "\\n")
345-
.replace("\r", "\\r")
346-
.replace("\f", "\\f")
347-
.replace("\v", "\\v")
348-
.replace("\b", "\\b")
349-
.replace("\t", "\\t")
350-
.replace("\a", "\\a")
351-
)
353+
escaped = "".join(SPECIAL_SYMBOLS_ESCAPE.get(sym, sym) for sym in string)
352354
return f"{'':<{indent}}{prefix}'''{escaped}'''"
353355

354356
str _repr_simple(

0 commit comments

Comments
 (0)