Skip to content

Commit fb78692

Browse files
authored
bpo-43651: PEP 597: Fix EncodingWarning in some tests (GH-25189)
* Fix _sitebuiltins * Fix test_inspect * Fix test_interpreters * Fix test_io * Fix test_iter * Fix test_json * Fix test_linecache * Fix test_lltrace * Fix test_logging * Fix logging
1 parent f84d5a1 commit fb78692

11 files changed

+73
-63
lines changed

Lib/_sitebuiltins.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@ def __setup(self):
4747
data = None
4848
for filename in self.__filenames:
4949
try:
50-
with open(filename, "r") as fp:
50+
with open(filename, encoding='utf-8') as fp:
5151
data = fp.read()
5252
break
5353
except OSError:

Lib/logging/__init__.py

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1150,6 +1150,8 @@ def __init__(self, filename, mode='a', encoding=None, delay=False, errors=None):
11501150
self.baseFilename = os.path.abspath(filename)
11511151
self.mode = mode
11521152
self.encoding = encoding
1153+
if "b" not in mode:
1154+
self.encoding = io.text_encoding(encoding)
11531155
self.errors = errors
11541156
self.delay = delay
11551157
# bpo-26789: FileHandler keeps a reference to the builtin open()
@@ -2022,8 +2024,10 @@ def basicConfig(**kwargs):
20222024
filename = kwargs.pop("filename", None)
20232025
mode = kwargs.pop("filemode", 'a')
20242026
if filename:
2025-
if 'b'in mode:
2027+
if 'b' in mode:
20262028
errors = None
2029+
else:
2030+
encoding = io.text_encoding(encoding)
20272031
h = FileHandler(filename, mode,
20282032
encoding=encoding, errors=errors)
20292033
else:

Lib/logging/handlers.py

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@
2323
To use, simply 'import logging.handlers' and log away!
2424
"""
2525

26-
import logging, socket, os, pickle, struct, time, re
26+
import io, logging, socket, os, pickle, struct, time, re
2727
from stat import ST_DEV, ST_INO, ST_MTIME
2828
import queue
2929
import threading
@@ -150,6 +150,8 @@ def __init__(self, filename, mode='a', maxBytes=0, backupCount=0,
150150
# on each run.
151151
if maxBytes > 0:
152152
mode = 'a'
153+
if "b" not in mode:
154+
encoding = io.text_encoding(encoding)
153155
BaseRotatingHandler.__init__(self, filename, mode, encoding=encoding,
154156
delay=delay, errors=errors)
155157
self.maxBytes = maxBytes
@@ -205,6 +207,7 @@ class TimedRotatingFileHandler(BaseRotatingHandler):
205207
def __init__(self, filename, when='h', interval=1, backupCount=0,
206208
encoding=None, delay=False, utc=False, atTime=None,
207209
errors=None):
210+
encoding = io.text_encoding(encoding)
208211
BaseRotatingHandler.__init__(self, filename, 'a', encoding=encoding,
209212
delay=delay, errors=errors)
210213
self.when = when.upper()
@@ -442,6 +445,8 @@ class WatchedFileHandler(logging.FileHandler):
442445
"""
443446
def __init__(self, filename, mode='a', encoding=None, delay=False,
444447
errors=None):
448+
if "b" not in mode:
449+
encoding = io.text_encoding(encoding)
445450
logging.FileHandler.__init__(self, filename, mode=mode,
446451
encoding=encoding, delay=delay,
447452
errors=errors)

Lib/test/test_inspect.py

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -363,7 +363,7 @@ class GetSourceBase(unittest.TestCase):
363363
fodderModule = None
364364

365365
def setUp(self):
366-
with open(inspect.getsourcefile(self.fodderModule)) as fp:
366+
with open(inspect.getsourcefile(self.fodderModule), encoding="utf-8") as fp:
367367
self.source = fp.read()
368368

369369
def sourcerange(self, top, bottom):
@@ -773,8 +773,8 @@ class TestNoEOL(GetSourceBase):
773773
def setUp(self):
774774
self.tempdir = TESTFN + '_dir'
775775
os.mkdir(self.tempdir)
776-
with open(os.path.join(self.tempdir,
777-
'inspect_fodder3%spy' % os.extsep), 'w') as f:
776+
with open(os.path.join(self.tempdir, 'inspect_fodder3%spy' % os.extsep),
777+
'w', encoding='utf-8') as f:
778778
f.write("class X:\n pass # No EOL")
779779
with DirsOnSysPath(self.tempdir):
780780
import inspect_fodder3 as mod3
@@ -1805,7 +1805,7 @@ def test_no_dict_no_slots(self):
18051805

18061806
def test_no_dict_no_slots_instance_member(self):
18071807
# returns descriptor
1808-
with open(__file__) as handle:
1808+
with open(__file__, encoding='utf-8') as handle:
18091809
self.assertEqual(inspect.getattr_static(handle, 'name'), type(handle).name)
18101810

18111811
def test_inherited_slots(self):
@@ -4045,7 +4045,7 @@ def foo():
40454045

40464046
def assertInspectEqual(self, path, source):
40474047
inspected_src = inspect.getsource(source)
4048-
with open(path) as src:
4048+
with open(path, encoding='utf-8') as src:
40494049
self.assertEqual(
40504050
src.read().splitlines(True),
40514051
inspected_src.splitlines(True)
@@ -4056,7 +4056,7 @@ def test_getsource_reload(self):
40564056
with _ready_to_import('reload_bug', self.src_before) as (name, path):
40574057
module = importlib.import_module(name)
40584058
self.assertInspectEqual(path, module)
4059-
with open(path, 'w') as src:
4059+
with open(path, 'w', encoding='utf-8') as src:
40604060
src.write(self.src_after)
40614061
self.assertInspectEqual(path, module)
40624062

Lib/test/test_interpreters.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -14,11 +14,11 @@ def _captured_script(script):
1414
indented = script.replace('\n', '\n ')
1515
wrapped = dedent(f"""
1616
import contextlib
17-
with open({w}, 'w') as spipe:
17+
with open({w}, 'w', encoding='utf-8') as spipe:
1818
with contextlib.redirect_stdout(spipe):
1919
{indented}
2020
""")
21-
return wrapped, open(r)
21+
return wrapped, open(r, encoding='utf-8')
2222

2323

2424
def clean_up_interpreters():
@@ -411,7 +411,7 @@ def f():
411411
def test_fork(self):
412412
interp = interpreters.create()
413413
import tempfile
414-
with tempfile.NamedTemporaryFile('w+') as file:
414+
with tempfile.NamedTemporaryFile('w+', encoding='utf-8') as file:
415415
file.write('')
416416
file.flush()
417417

@@ -421,7 +421,7 @@ def test_fork(self):
421421
try:
422422
os.fork()
423423
except RuntimeError:
424-
with open('{file.name}', 'w') as out:
424+
with open('{file.name}', 'w', encoding='utf-8') as out:
425425
out.write('{expected}')
426426
""")
427427
interp.run(script)

Lib/test/test_io.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2601,8 +2601,8 @@ def test_constructor(self):
26012601
self.assertEqual(t.encoding, "utf-8")
26022602
self.assertEqual(t.line_buffering, True)
26032603
self.assertEqual("\xe9\n", t.readline())
2604-
self.assertRaises(TypeError, t.__init__, b, newline=42)
2605-
self.assertRaises(ValueError, t.__init__, b, newline='xyzzy')
2604+
self.assertRaises(TypeError, t.__init__, b, encoding="utf-8", newline=42)
2605+
self.assertRaises(ValueError, t.__init__, b, encoding="utf-8", newline='xyzzy')
26062606

26072607
def test_uninitialized(self):
26082608
t = self.TextIOWrapper.__new__(self.TextIOWrapper)
@@ -3732,7 +3732,7 @@ def test_initialization(self):
37323732
r = self.BytesIO(b"\xc3\xa9\n\n")
37333733
b = self.BufferedReader(r, 1000)
37343734
t = self.TextIOWrapper(b, encoding="utf-8")
3735-
self.assertRaises(ValueError, t.__init__, b, newline='xyzzy')
3735+
self.assertRaises(ValueError, t.__init__, b, encoding="utf-8", newline='xyzzy')
37363736
self.assertRaises(ValueError, t.read)
37373737

37383738
t = self.TextIOWrapper.__new__(self.TextIOWrapper)

Lib/test/test_iter.py

Lines changed: 24 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -337,13 +337,13 @@ def test_iter_dict(self):
337337

338338
# Test a file
339339
def test_iter_file(self):
340-
f = open(TESTFN, "w")
340+
f = open(TESTFN, "w", encoding="utf-8")
341341
try:
342342
for i in range(5):
343343
f.write("%d\n" % i)
344344
finally:
345345
f.close()
346-
f = open(TESTFN, "r")
346+
f = open(TESTFN, "r", encoding="utf-8")
347347
try:
348348
self.check_for_loop(f, ["0\n", "1\n", "2\n", "3\n", "4\n"], pickle=False)
349349
self.check_for_loop(f, [], pickle=False)
@@ -366,13 +366,13 @@ def test_builtin_list(self):
366366
self.assertRaises(TypeError, list, list)
367367
self.assertRaises(TypeError, list, 42)
368368

369-
f = open(TESTFN, "w")
369+
f = open(TESTFN, "w", encoding="utf-8")
370370
try:
371371
for i in range(5):
372372
f.write("%d\n" % i)
373373
finally:
374374
f.close()
375-
f = open(TESTFN, "r")
375+
f = open(TESTFN, "r", encoding="utf-8")
376376
try:
377377
self.assertEqual(list(f), ["0\n", "1\n", "2\n", "3\n", "4\n"])
378378
f.seek(0, 0)
@@ -399,13 +399,13 @@ def test_builtin_tuple(self):
399399
self.assertRaises(TypeError, tuple, list)
400400
self.assertRaises(TypeError, tuple, 42)
401401

402-
f = open(TESTFN, "w")
402+
f = open(TESTFN, "w", encoding="utf-8")
403403
try:
404404
for i in range(5):
405405
f.write("%d\n" % i)
406406
finally:
407407
f.close()
408-
f = open(TESTFN, "r")
408+
f = open(TESTFN, "r", encoding="utf-8")
409409
try:
410410
self.assertEqual(tuple(f), ("0\n", "1\n", "2\n", "3\n", "4\n"))
411411
f.seek(0, 0)
@@ -476,14 +476,14 @@ def test_builtin_max_min(self):
476476
self.assertEqual(max(d.values()), 3)
477477
self.assertEqual(min(iter(d.values())), 1)
478478

479-
f = open(TESTFN, "w")
479+
f = open(TESTFN, "w", encoding="utf-8")
480480
try:
481481
f.write("medium line\n")
482482
f.write("xtra large line\n")
483483
f.write("itty-bitty line\n")
484484
finally:
485485
f.close()
486-
f = open(TESTFN, "r")
486+
f = open(TESTFN, "r", encoding="utf-8")
487487
try:
488488
self.assertEqual(min(f), "itty-bitty line\n")
489489
f.seek(0, 0)
@@ -509,13 +509,13 @@ def test_builtin_map(self):
509509
i < len(d) and dkeys[i] or None)
510510
for i in range(3)]
511511

512-
f = open(TESTFN, "w")
512+
f = open(TESTFN, "w", encoding="utf-8")
513513
try:
514514
for i in range(10):
515515
f.write("xy" * i + "\n") # line i has len 2*i+1
516516
finally:
517517
f.close()
518-
f = open(TESTFN, "r")
518+
f = open(TESTFN, "r", encoding="utf-8")
519519
try:
520520
self.assertEqual(list(map(len, f)), list(range(1, 21, 2)))
521521
finally:
@@ -556,12 +556,12 @@ def __next__(self):
556556
self.i = i+1
557557
return i
558558

559-
f = open(TESTFN, "w")
559+
f = open(TESTFN, "w", encoding="utf-8")
560560
try:
561561
f.write("a\n" "bbb\n" "cc\n")
562562
finally:
563563
f.close()
564-
f = open(TESTFN, "r")
564+
f = open(TESTFN, "r", encoding="utf-8")
565565
try:
566566
self.assertEqual(list(zip(IntsFrom(0), f, IntsFrom(-100))),
567567
[(0, "a\n", -100),
@@ -624,13 +624,13 @@ def __next__(self):
624624
return "fooled you!"
625625
return next(self.it)
626626

627-
f = open(TESTFN, "w")
627+
f = open(TESTFN, "w", encoding="utf-8")
628628
try:
629629
f.write("a\n" + "b\n" + "c\n")
630630
finally:
631631
f.close()
632632

633-
f = open(TESTFN, "r")
633+
f = open(TESTFN, "r", encoding="utf-8")
634634
# Nasty: string.join(s) can't know whether unicode.join() is needed
635635
# until it's seen all of s's elements. But in this case, f's
636636
# iterator cannot be restarted. So what we're testing here is
@@ -676,12 +676,12 @@ def test_in_and_not_in(self):
676676
self.assertIn((k, v), d.items())
677677
self.assertNotIn((v, k), d.items())
678678

679-
f = open(TESTFN, "w")
679+
f = open(TESTFN, "w", encoding="utf-8")
680680
try:
681681
f.write("a\n" "b\n" "c\n")
682682
finally:
683683
f.close()
684-
f = open(TESTFN, "r")
684+
f = open(TESTFN, "r", encoding="utf-8")
685685
try:
686686
for chunk in "abc":
687687
f.seek(0, 0)
@@ -713,12 +713,12 @@ def test_countOf(self):
713713
self.assertEqual(countOf(d.values(), 2j), 1)
714714
self.assertEqual(countOf(d.values(), 1j), 0)
715715

716-
f = open(TESTFN, "w")
716+
f = open(TESTFN, "w", encoding="utf-8")
717717
try:
718718
f.write("a\n" "b\n" "c\n" "b\n")
719719
finally:
720720
f.close()
721-
f = open(TESTFN, "r")
721+
f = open(TESTFN, "r", encoding="utf-8")
722722
try:
723723
for letter, count in ("a", 1), ("b", 2), ("c", 1), ("d", 0):
724724
f.seek(0, 0)
@@ -748,12 +748,12 @@ def test_indexOf(self):
748748
self.assertRaises(TypeError, indexOf, indexOf, indexOf)
749749
self.assertRaises(ZeroDivisionError, indexOf, BadIterableClass(), 1)
750750

751-
f = open(TESTFN, "w")
751+
f = open(TESTFN, "w", encoding="utf-8")
752752
try:
753753
f.write("a\n" "b\n" "c\n" "d\n" "e\n")
754754
finally:
755755
f.close()
756-
f = open(TESTFN, "r")
756+
f = open(TESTFN, "r", encoding="utf-8")
757757
try:
758758
fiter = iter(f)
759759
self.assertEqual(indexOf(fiter, "b\n"), 1)
@@ -774,7 +774,7 @@ def test_indexOf(self):
774774

775775
# Test iterators with file.writelines().
776776
def test_writelines(self):
777-
f = open(TESTFN, "w")
777+
f = open(TESTFN, "w", encoding="utf-8")
778778

779779
try:
780780
self.assertRaises(TypeError, f.writelines, None)
@@ -813,7 +813,7 @@ def __iter__(self):
813813
f.writelines(Whatever(6, 6+2000))
814814
f.close()
815815

816-
f = open(TESTFN)
816+
f = open(TESTFN, encoding="utf-8")
817817
expected = [str(i) + "\n" for i in range(1, 2006)]
818818
self.assertEqual(list(f), expected)
819819

@@ -857,14 +857,14 @@ def test_unpack_iter(self):
857857
a, b, c = {1: 42, 2: 42, 3: 42}.values()
858858
self.assertEqual((a, b, c), (42, 42, 42))
859859

860-
f = open(TESTFN, "w")
860+
f = open(TESTFN, "w", encoding="utf-8")
861861
lines = ("a\n", "bb\n", "ccc\n")
862862
try:
863863
for line in lines:
864864
f.write(line)
865865
finally:
866866
f.close()
867-
f = open(TESTFN, "r")
867+
f = open(TESTFN, "r", encoding="utf-8")
868868
try:
869869
a, b, c = f
870870
self.assertEqual((a, b, c), lines)

Lib/test/test_json/test_tool.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -125,7 +125,7 @@ def test_infile_outfile(self):
125125
outfile = os_helper.TESTFN + '.out'
126126
rc, out, err = assert_python_ok('-m', 'json.tool', infile, outfile)
127127
self.addCleanup(os.remove, outfile)
128-
with open(outfile, "r") as fp:
128+
with open(outfile, "r", encoding="utf-8") as fp:
129129
self.assertEqual(fp.read(), self.expect)
130130
self.assertEqual(rc, 0)
131131
self.assertEqual(out, b'')

0 commit comments

Comments
 (0)