Skip to content

Commit e1f2254

Browse files
authored
Merge pull request #2734 from RonnyPfannschmidt/simplify-string-safening
simplyfy ascii escaping by using backslashreplace error handling
2 parents f825b49 + 3d70727 commit e1f2254

File tree

2 files changed

+16
-8
lines changed

2 files changed

+16
-8
lines changed

_pytest/compat.py

Lines changed: 15 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
import types
88
import re
99
import functools
10+
import codecs
1011

1112
import py
1213

@@ -122,12 +123,24 @@ def isclass(object):
122123

123124

124125
if _PY3:
125-
import codecs
126126
imap = map
127127
izip = zip
128128
STRING_TYPES = bytes, str
129129
UNICODE_TYPES = str,
130130

131+
if PY35:
132+
def _bytes_to_ascii(val):
133+
return val.decode('ascii', 'backslashreplace')
134+
else:
135+
def _bytes_to_ascii(val):
136+
if val:
137+
# source: http://goo.gl/bGsnwC
138+
encoded_bytes, _ = codecs.escape_encode(val)
139+
return encoded_bytes.decode('ascii')
140+
else:
141+
# empty bytes crashes codecs.escape_encode (#1087)
142+
return ''
143+
131144
def _ascii_escaped(val):
132145
"""If val is pure ascii, returns it as a str(). Otherwise, escapes
133146
bytes objects into a sequence of escaped bytes:
@@ -147,13 +160,7 @@ def _ascii_escaped(val):
147160
148161
"""
149162
if isinstance(val, bytes):
150-
if val:
151-
# source: http://goo.gl/bGsnwC
152-
encoded_bytes, _ = codecs.escape_encode(val)
153-
return encoded_bytes.decode('ascii')
154-
else:
155-
# empty bytes crashes codecs.escape_encode (#1087)
156-
return ''
163+
return _bytes_to_ascii(val)
157164
else:
158165
return val.encode('unicode_escape').decode('ascii')
159166
else:

changelog/2734.trivial

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
Internal refactor: simplify ascii string escaping by using the backslashreplace error handler in newer Python 3 versions.

0 commit comments

Comments
 (0)