Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit bd1c68c

Browse files
committed
Patch #1303: Adapt str8 constructor to bytes (now buffer) one.
1 parent 97f9d4f commit bd1c68c

15 files changed

+215
-75
lines changed

Lib/modulefinder.py

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -17,12 +17,12 @@
1717
READ_MODE = "r"
1818

1919
# XXX Clean up once str8's cstor matches bytes.
20-
LOAD_CONST = str8(chr(dis.opname.index('LOAD_CONST')))
21-
IMPORT_NAME = str8(chr(dis.opname.index('IMPORT_NAME')))
22-
STORE_NAME = str8(chr(dis.opname.index('STORE_NAME')))
23-
STORE_GLOBAL = str8(chr(dis.opname.index('STORE_GLOBAL')))
20+
LOAD_CONST = str8([dis.opname.index('LOAD_CONST')])
21+
IMPORT_NAME = str8([dis.opname.index('IMPORT_NAME')])
22+
STORE_NAME = str8([dis.opname.index('STORE_NAME')])
23+
STORE_GLOBAL = str8([dis.opname.index('STORE_GLOBAL')])
2424
STORE_OPS = [STORE_NAME, STORE_GLOBAL]
25-
HAVE_ARGUMENT = str8(chr(dis.HAVE_ARGUMENT))
25+
HAVE_ARGUMENT = str8([dis.HAVE_ARGUMENT])
2626

2727
# Modulefinder does a good job at simulating Python's, but it can not
2828
# handle __path__ modifications packages make at runtime. Therefore there
@@ -368,7 +368,7 @@ def scan_opcodes_25(self, co,
368368
consts = co.co_consts
369369
LOAD_LOAD_AND_IMPORT = LOAD_CONST + LOAD_CONST + IMPORT_NAME
370370
while code:
371-
c = str8(chr(code[0]))
371+
c = str8([code[0]])
372372
if c in STORE_OPS:
373373
oparg, = unpack('<H', code[1:3])
374374
yield "store", (names[oparg],)

Lib/pickletools.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1978,7 +1978,7 @@ def __init__(self, value):
19781978

19791979
_dis_test = r"""
19801980
>>> import pickle
1981-
>>> x = [1, 2, (3, 4), {str8('abc'): "def"}]
1981+
>>> x = [1, 2, (3, 4), {str8(b'abc'): "def"}]
19821982
>>> pkl = pickle.dumps(x, 0)
19831983
>>> dis(pkl)
19841984
0: ( MARK

Lib/struct.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@
3636
class Struct(_Struct):
3737
def __init__(self, fmt):
3838
if isinstance(fmt, str):
39-
fmt = str8(fmt)
39+
fmt = str8(fmt, 'latin1')
4040
_Struct.__init__(self, fmt)
4141

4242
_MAXCACHE = 100

Lib/test/test_builtin.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -580,7 +580,8 @@ def test_hash(self):
580580
self.assertEqual(hash(1), hash(1))
581581
self.assertEqual(hash(1), hash(1.0))
582582
hash('spam')
583-
self.assertEqual(hash('spam'), hash(str8('spam')))
583+
self.assertEqual(hash('spam'), hash(str8(b'spam'))) # remove str8()
584+
# when b"" is immutable
584585
hash((0,1,2,3))
585586
def f(): pass
586587
self.assertRaises(TypeError, hash, [])

Lib/test/test_bytes.py

Lines changed: 31 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -103,33 +103,33 @@ def test_compare(self):
103103
self.failIf(b3 <= b2)
104104

105105
def test_compare_to_str(self):
106-
self.assertEqual(b"abc" == str8("abc"), True)
107-
self.assertEqual(b"ab" != str8("abc"), True)
108-
self.assertEqual(b"ab" <= str8("abc"), True)
109-
self.assertEqual(b"ab" < str8("abc"), True)
110-
self.assertEqual(b"abc" >= str8("ab"), True)
111-
self.assertEqual(b"abc" > str8("ab"), True)
112-
113-
self.assertEqual(b"abc" != str8("abc"), False)
114-
self.assertEqual(b"ab" == str8("abc"), False)
115-
self.assertEqual(b"ab" > str8("abc"), False)
116-
self.assertEqual(b"ab" >= str8("abc"), False)
117-
self.assertEqual(b"abc" < str8("ab"), False)
118-
self.assertEqual(b"abc" <= str8("ab"), False)
119-
120-
self.assertEqual(str8("abc") == b"abc", True)
121-
self.assertEqual(str8("ab") != b"abc", True)
122-
self.assertEqual(str8("ab") <= b"abc", True)
123-
self.assertEqual(str8("ab") < b"abc", True)
124-
self.assertEqual(str8("abc") >= b"ab", True)
125-
self.assertEqual(str8("abc") > b"ab", True)
126-
127-
self.assertEqual(str8("abc") != b"abc", False)
128-
self.assertEqual(str8("ab") == b"abc", False)
129-
self.assertEqual(str8("ab") > b"abc", False)
130-
self.assertEqual(str8("ab") >= b"abc", False)
131-
self.assertEqual(str8("abc") < b"ab", False)
132-
self.assertEqual(str8("abc") <= b"ab", False)
106+
self.assertEqual(b"abc" == str8(b"abc"), True)
107+
self.assertEqual(b"ab" != str8(b"abc"), True)
108+
self.assertEqual(b"ab" <= str8(b"abc"), True)
109+
self.assertEqual(b"ab" < str8(b"abc"), True)
110+
self.assertEqual(b"abc" >= str8(b"ab"), True)
111+
self.assertEqual(b"abc" > str8(b"ab"), True)
112+
113+
self.assertEqual(b"abc" != str8(b"abc"), False)
114+
self.assertEqual(b"ab" == str8(b"abc"), False)
115+
self.assertEqual(b"ab" > str8(b"abc"), False)
116+
self.assertEqual(b"ab" >= str8(b"abc"), False)
117+
self.assertEqual(b"abc" < str8(b"ab"), False)
118+
self.assertEqual(b"abc" <= str8(b"ab"), False)
119+
120+
self.assertEqual(str8(b"abc") == b"abc", True)
121+
self.assertEqual(str8(b"ab") != b"abc", True)
122+
self.assertEqual(str8(b"ab") <= b"abc", True)
123+
self.assertEqual(str8(b"ab") < b"abc", True)
124+
self.assertEqual(str8(b"abc") >= b"ab", True)
125+
self.assertEqual(str8(b"abc") > b"ab", True)
126+
127+
self.assertEqual(str8(b"abc") != b"abc", False)
128+
self.assertEqual(str8(b"ab") == b"abc", False)
129+
self.assertEqual(str8(b"ab") > b"abc", False)
130+
self.assertEqual(str8(b"ab") >= b"abc", False)
131+
self.assertEqual(str8(b"abc") < b"ab", False)
132+
self.assertEqual(str8(b"abc") <= b"ab", False)
133133

134134
# Byte comparisons with unicode should always fail!
135135
# Test this for all expected byte orders and Unicode character sizes
@@ -345,7 +345,7 @@ def test_decode(self):
345345
self.assertEqual(b.decode("utf8", "ignore"), "Hello world\n")
346346

347347
def test_from_buffer(self):
348-
sample = str8("Hello world\n\x80\x81\xfe\xff")
348+
sample = str8(b"Hello world\n\x80\x81\xfe\xff")
349349
buf = memoryview(sample)
350350
b = bytes(buf)
351351
self.assertEqual(b, bytes(sample))
@@ -367,8 +367,8 @@ def test_concat(self):
367367
b1 = b"abc"
368368
b2 = b"def"
369369
self.assertEqual(b1 + b2, b"abcdef")
370-
self.assertEqual(b1 + str8("def"), b"abcdef")
371-
self.assertEqual(str8("def") + b1, b"defabc")
370+
self.assertEqual(b1 + str8(b"def"), b"abcdef")
371+
self.assertEqual(str8(b"def") + b1, b"defabc")
372372
self.assertRaises(TypeError, lambda: b1 + "def")
373373
self.assertRaises(TypeError, lambda: "abc" + b2)
374374

@@ -391,7 +391,7 @@ def test_iconcat(self):
391391
self.assertEqual(b, b"abcdef")
392392
self.assertEqual(b, b1)
393393
self.failUnless(b is b1)
394-
b += str8("xyz")
394+
b += str8(b"xyz")
395395
self.assertEqual(b, b"abcdefxyz")
396396
try:
397397
b += ""

Lib/test/test_codeccallbacks.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -181,15 +181,15 @@ def test_charmapencode(self):
181181
# mapped through the encoding again. This means, that
182182
# to be able to use e.g. the "replace" handler, the
183183
# charmap has to have a mapping for "?".
184-
charmap = dict((ord(c), str8(2*c.upper())) for c in "abcdefgh")
184+
charmap = dict((ord(c), str8(2*c.upper(), 'ascii')) for c in "abcdefgh")
185185
sin = "abc"
186186
sout = b"AABBCC"
187187
self.assertEquals(codecs.charmap_encode(sin, "strict", charmap)[0], sout)
188188

189189
sin = "abcA"
190190
self.assertRaises(UnicodeError, codecs.charmap_encode, sin, "strict", charmap)
191191

192-
charmap[ord("?")] = str8("XYZ")
192+
charmap[ord("?")] = str8(b"XYZ")
193193
sin = "abcDEF"
194194
sout = b"AABBCCXYZXYZXYZ"
195195
self.assertEquals(codecs.charmap_encode(sin, "replace", charmap)[0], sout)
@@ -309,7 +309,7 @@ def check_exceptionobjectargs(self, exctype, args, msg):
309309
# check with one argument too much
310310
self.assertRaises(TypeError, exctype, *(args + ["too much"]))
311311
# check with one argument of the wrong type
312-
wrongargs = [ "spam", str8("eggs"), b"spam", 42, 1.0, None ]
312+
wrongargs = [ "spam", str8(b"eggs"), b"spam", 42, 1.0, None ]
313313
for i in range(len(args)):
314314
for wrongarg in wrongargs:
315315
if type(wrongarg) is type(args[i]):

Lib/test/test_compile.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -157,7 +157,7 @@ def test_leading_newlines(self):
157157
s256 = "".join(["\n"] * 256 + ["spam"])
158158
co = compile(s256, 'fn', 'exec')
159159
self.assertEqual(co.co_firstlineno, 257)
160-
self.assertEqual(co.co_lnotab, str8(''))
160+
self.assertEqual(co.co_lnotab, str8())
161161

162162
def test_literals_with_leading_zeroes(self):
163163
for arg in ["077787", "0xj", "0x.", "0e", "090000000000000",

Lib/test/test_io.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -88,7 +88,7 @@ def write_ops(self, f):
8888
self.assertEqual(f.tell(), 6)
8989
self.assertEqual(f.seek(-1, 1), 5)
9090
self.assertEqual(f.tell(), 5)
91-
self.assertEqual(f.write(str8(" world\n\n\n")), 9)
91+
self.assertEqual(f.write(str8(b" world\n\n\n")), 9)
9292
self.assertEqual(f.seek(0), 0)
9393
self.assertEqual(f.write(b"h"), 1)
9494
self.assertEqual(f.seek(-1, 2), 13)

Lib/test/test_locale.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -82,7 +82,7 @@ def testformat(formatstr, value, grouping = 0, output=None, func=locale.format):
8282

8383
# Test BSD Rune locale's bug for isctype functions.
8484
def teststrop(s, method, output):
85-
s = str8(s)
85+
s = str8(s, 'latin1') # XXX
8686
if verbose:
8787
print("%s.%s() =? %s ..." % (repr(s), method, repr(output)), end=' ')
8888
result = getattr(s, method)()

Lib/test/test_struct.py

Lines changed: 22 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -101,7 +101,7 @@ def deprecated_err(func, *args):
101101
simple_err(struct.unpack, 'iii', s)
102102
simple_err(struct.unpack, 'i', s)
103103

104-
c = str8('a')
104+
c = str8(b'a')
105105
b = 1
106106
h = 255
107107
i = 65535
@@ -186,7 +186,7 @@ def deprecated_err(func, *args):
186186
if isinstance(arg, str):
187187
# Strings are returned as str8 since you can't know the encoding of
188188
# the string when packed.
189-
arg = str8(arg)
189+
arg = str8(arg, 'latin1')
190190
if rev != arg and not asy:
191191
raise TestFailed("unpack(%r, %r) -> (%r,) # expected (%r,)" % (
192192
fmt, res, rev, arg))
@@ -428,14 +428,14 @@ def run(self):
428428

429429
def test_p_code():
430430
for code, input, expected, expectedback in [
431-
('p','abc', '\x00', str8('')),
432-
('1p', 'abc', '\x00', str8('')),
433-
('2p', 'abc', '\x01a', str8('a')),
434-
('3p', 'abc', '\x02ab', str8('ab')),
435-
('4p', 'abc', '\x03abc', str8('abc')),
436-
('5p', 'abc', '\x03abc\x00', str8('abc')),
437-
('6p', 'abc', '\x03abc\x00\x00', str8('abc')),
438-
('1000p', 'x'*1000, '\xff' + 'x'*999, str8('x'*255))]:
431+
('p','abc', '\x00', str8()),
432+
('1p', 'abc', '\x00', str8()),
433+
('2p', 'abc', '\x01a', str8(b'a')),
434+
('3p', 'abc', '\x02ab', str8(b'ab')),
435+
('4p', 'abc', '\x03abc', str8(b'abc')),
436+
('5p', 'abc', '\x03abc\x00', str8(b'abc')),
437+
('6p', 'abc', '\x03abc\x00\x00', str8(b'abc')),
438+
('1000p', 'x'*1000, '\xff' + 'x'*999, str8(b'x'*255))]:
439439
expected = bytes(expected, "latin-1")
440440
got = struct.pack(code, input)
441441
if got != expected:
@@ -564,20 +564,24 @@ def test_unpack_from():
564564
if verbose:
565565
print("test_unpack_from using", cls.__name__)
566566
data = cls(test_string)
567-
vereq(s.unpack_from(data), (str8('abcd'),))
568-
vereq(s.unpack_from(data, 2), (str8('cd01'),))
569-
vereq(s.unpack_from(data, 4), (str8('0123'),))
567+
if not isinstance(data, (str8, bytes)):
568+
bytes_data = str8(data, 'latin1')
569+
else:
570+
bytes_data = data
571+
vereq(s.unpack_from(data), (str8(b'abcd'),))
572+
vereq(s.unpack_from(data, 2), (str8(b'cd01'),))
573+
vereq(s.unpack_from(data, 4), (str8(b'0123'),))
570574
for i in range(6):
571-
vereq(s.unpack_from(data, i), (str8(data[i:i+4]),))
575+
vereq(s.unpack_from(data, i), (bytes_data[i:i+4],))
572576
for i in range(6, len(test_string) + 1):
573577
simple_err(s.unpack_from, data, i)
574578
for cls in (str, str8, bytes): # XXX + memoryview
575579
data = cls(test_string)
576-
vereq(struct.unpack_from(fmt, data), (str8('abcd'),))
577-
vereq(struct.unpack_from(fmt, data, 2), (str8('cd01'),))
578-
vereq(struct.unpack_from(fmt, data, 4), (str8('0123'),))
580+
vereq(struct.unpack_from(fmt, data), (str8(b'abcd'),))
581+
vereq(struct.unpack_from(fmt, data, 2), (str8(b'cd01'),))
582+
vereq(struct.unpack_from(fmt, data, 4), (str8(b'0123'),))
579583
for i in range(6):
580-
vereq(struct.unpack_from(fmt, data, i), (str8(data[i:i+4]),))
584+
vereq(struct.unpack_from(fmt, data, i), (bytes_data[i:i+4],))
581585
for i in range(6, len(test_string) + 1):
582586
simple_err(struct.unpack_from, fmt, data, i)
583587

Lib/test/test_sys.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -300,7 +300,7 @@ def test_43581(self):
300300

301301
def test_intern(self):
302302
self.assertRaises(TypeError, sys.intern)
303-
s = str8("never interned before")
303+
s = str8(b"never interned before")
304304
self.assert_(sys.intern(s) is s)
305305
s2 = s.swapcase().swapcase()
306306
self.assert_(sys.intern(s2) is s)
@@ -314,7 +314,7 @@ class S(str8):
314314
def __hash__(self):
315315
return 123
316316

317-
self.assertRaises(TypeError, sys.intern, S("abc"))
317+
self.assertRaises(TypeError, sys.intern, S(b"abc"))
318318

319319
s = "never interned as unicode before"
320320
self.assert_(sys.intern(s) is s)

Lib/test/test_unicode.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -203,8 +203,8 @@ def test_replace(self):
203203
self.assertRaises(TypeError, 'replace'.replace, "r", 42)
204204

205205
def test_str8_comparison(self):
206-
self.assertEqual('abc' == str8('abc'), False)
207-
self.assertEqual('abc' != str8('abc'), True)
206+
self.assertEqual('abc' == str8(b'abc'), False)
207+
self.assertEqual('abc' != str8(b'abc'), True)
208208

209209
def test_comparison(self):
210210
# Comparisons:

Lib/test/test_unicodedata.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -176,7 +176,7 @@ def test_normalize(self):
176176

177177
def test_east_asian_width(self):
178178
eaw = self.db.east_asian_width
179-
self.assertRaises(TypeError, eaw, str8('a'))
179+
self.assertRaises(TypeError, eaw, str8(b'a'))
180180
self.assertRaises(TypeError, eaw, '')
181181
self.assertRaises(TypeError, eaw, 'ra')
182182
self.assertEqual(eaw('\x1e'), 'N')

Lib/test/testcodec.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ def getregentry():
3636
decoding_map = codecs.make_identity_dict(range(256))
3737
decoding_map.update({
3838
0x78: "abc", # 1-n decoding mapping
39-
str8("abc"): 0x0078,# 1-n encoding mapping
39+
str8(b"abc"): 0x0078,# 1-n encoding mapping
4040
0x01: None, # decoding mapping to <undefined>
4141
0x79: "", # decoding mapping to <remove character>
4242
})

0 commit comments

Comments
 (0)