bpo-43651: PEP 597: Fix EncodingWarning in some tests (GH-25181)

* Fix test_shutil
* Fix test_imp
* Fix test_import
* Fix test_importlib
This commit is contained in:
Inada Naoki 2021-04-05 13:11:23 +09:00 committed by GitHub
parent ee952b5c73
commit c8e5eb904e
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
11 changed files with 55 additions and 50 deletions

View File

@ -102,7 +102,7 @@ class ImportTests(unittest.TestCase):
temp_mod_name = 'test_imp_helper'
sys.path.insert(0, '.')
try:
with open(temp_mod_name + '.py', 'w') as file:
with open(temp_mod_name + '.py', 'w', encoding="latin-1") as file:
file.write("# coding: cp1252\nu = 'test.test_imp'\n")
file, filename, info = imp.find_module(temp_mod_name)
file.close()
@ -157,7 +157,7 @@ class ImportTests(unittest.TestCase):
# if the curdir is not in sys.path the test fails when run with
# ./python ./Lib/test/regrtest.py test_imp
sys.path.insert(0, os.curdir)
with open(temp_mod_name + '.py', 'w') as file:
with open(temp_mod_name + '.py', 'w', encoding="utf-8") as file:
file.write('a = 1\n')
file, filename, info = imp.find_module(temp_mod_name)
with file:
@ -185,7 +185,7 @@ class ImportTests(unittest.TestCase):
if not os.path.exists(test_package_name):
os.mkdir(test_package_name)
with open(init_file_name, 'w') as file:
with open(init_file_name, 'w', encoding="utf-8") as file:
file.write('b = 2\n')
with warnings.catch_warnings():
warnings.simplefilter('ignore')
@ -310,7 +310,7 @@ class ImportTests(unittest.TestCase):
def test_multiple_calls_to_get_data(self):
# Issue #18755: make sure multiple calls to get_data() can succeed.
loader = imp._LoadSourceCompatibility('imp', imp.__file__,
open(imp.__file__))
open(imp.__file__, encoding="utf-8"))
loader.get_data(imp.__file__) # File should be closed
loader.get_data(imp.__file__) # Will need to create a newly opened file

View File

@ -117,7 +117,7 @@ class ImportTests(unittest.TestCase):
def test_from_import_star_invalid_type(self):
import re
with _ready_to_import() as (name, path):
with open(path, 'w') as f:
with open(path, 'w', encoding='utf-8') as f:
f.write("__all__ = [b'invalid_type']")
globals = {}
with self.assertRaisesRegex(
@ -126,7 +126,7 @@ class ImportTests(unittest.TestCase):
exec(f"from {name} import *", globals)
self.assertNotIn(b"invalid_type", globals)
with _ready_to_import() as (name, path):
with open(path, 'w') as f:
with open(path, 'w', encoding='utf-8') as f:
f.write("globals()[b'invalid_type'] = object()")
globals = {}
with self.assertRaisesRegex(
@ -155,7 +155,7 @@ class ImportTests(unittest.TestCase):
else:
pyc = TESTFN + ".pyc"
with open(source, "w") as f:
with open(source, "w", encoding='utf-8') as f:
print("# This tests Python's ability to import a",
ext, "file.", file=f)
a = random.randrange(1000)
@ -195,7 +195,7 @@ class ImportTests(unittest.TestCase):
filename = module + '.py'
# Create a file with a list of 65000 elements.
with open(filename, 'w') as f:
with open(filename, 'w', encoding='utf-8') as f:
f.write('d = [\n')
for i in range(65000):
f.write('"",\n')
@ -232,7 +232,7 @@ class ImportTests(unittest.TestCase):
def test_failing_import_sticks(self):
source = TESTFN + ".py"
with open(source, "w") as f:
with open(source, "w", encoding='utf-8') as f:
print("a = 1/0", file=f)
# New in 2.4, we shouldn't be able to import that no matter how often
@ -281,7 +281,7 @@ class ImportTests(unittest.TestCase):
def test_failing_reload(self):
# A failing reload should leave the module object in sys.modules.
source = TESTFN + os.extsep + "py"
with open(source, "w") as f:
with open(source, "w", encoding='utf-8') as f:
f.write("a = 1\nb=2\n")
sys.path.insert(0, os.curdir)
@ -298,7 +298,7 @@ class ImportTests(unittest.TestCase):
remove_files(TESTFN)
# Now damage the module.
with open(source, "w") as f:
with open(source, "w", encoding='utf-8') as f:
f.write("a = 10\nb=20//0\n")
self.assertRaises(ZeroDivisionError, importlib.reload, mod)
@ -320,7 +320,7 @@ class ImportTests(unittest.TestCase):
def test_file_to_source(self):
# check if __file__ points to the source file where available
source = TESTFN + ".py"
with open(source, "w") as f:
with open(source, "w", encoding='utf-8') as f:
f.write("test = None\n")
sys.path.insert(0, os.curdir)
@ -369,7 +369,7 @@ class ImportTests(unittest.TestCase):
try:
source = TESTFN + ".py"
compiled = importlib.util.cache_from_source(source)
with open(source, 'w') as f:
with open(source, 'w', encoding='utf-8') as f:
pass
try:
os.utime(source, (2 ** 33 - 5, 2 ** 33 - 5))
@ -574,7 +574,7 @@ class FilePermissionTests(unittest.TestCase):
# with later updates, see issue #6074 for details
with _ready_to_import() as (name, path):
# Write a Python file, make it read-only and import it
with open(path, 'w') as f:
with open(path, 'w', encoding='utf-8') as f:
f.write("x = 'original'\n")
# Tweak the mtime of the source to ensure pyc gets updated later
s = os.stat(path)
@ -584,7 +584,7 @@ class FilePermissionTests(unittest.TestCase):
self.assertEqual(m.x, 'original')
# Change the file and then reimport it
os.chmod(path, 0o600)
with open(path, 'w') as f:
with open(path, 'w', encoding='utf-8') as f:
f.write("x = 'rewritten'\n")
unload(name)
importlib.invalidate_caches()
@ -623,7 +623,7 @@ func_filename = func.__code__.co_filename
self.sys_path = sys.path[:]
self.orig_module = sys.modules.pop(self.module_name, None)
os.mkdir(self.dir_name)
with open(self.file_name, "w") as f:
with open(self.file_name, "w", encoding='utf-8') as f:
f.write(self.module_source)
sys.path.insert(0, self.dir_name)
importlib.invalidate_caches()
@ -704,7 +704,8 @@ class PathsTests(unittest.TestCase):
# Regression test for http://bugs.python.org/issue1293.
def test_trailing_slash(self):
with open(os.path.join(self.path, 'test_trailing_slash.py'), 'w') as f:
with open(os.path.join(self.path, 'test_trailing_slash.py'),
'w', encoding='utf-8') as f:
f.write("testdata = 'test_trailing_slash'")
sys.path.append(self.path+'/')
mod = __import__("test_trailing_slash")
@ -842,7 +843,7 @@ class PycacheTests(unittest.TestCase):
def setUp(self):
self.source = TESTFN + '.py'
self._clean()
with open(self.source, 'w') as fp:
with open(self.source, 'w', encoding='utf-8') as fp:
print('# This is a test file written by test_import.py', file=fp)
sys.path.insert(0, os.curdir)
importlib.invalidate_caches()
@ -941,9 +942,9 @@ class PycacheTests(unittest.TestCase):
os.mkdir('pep3147')
self.addCleanup(cleanup)
# Touch the __init__.py
with open(os.path.join('pep3147', '__init__.py'), 'w'):
with open(os.path.join('pep3147', '__init__.py'), 'wb'):
pass
with open(os.path.join('pep3147', 'foo.py'), 'w'):
with open(os.path.join('pep3147', 'foo.py'), 'wb'):
pass
importlib.invalidate_caches()
m = __import__('pep3147.foo')
@ -964,9 +965,9 @@ class PycacheTests(unittest.TestCase):
os.mkdir('pep3147')
self.addCleanup(cleanup)
# Touch the __init__.py
with open(os.path.join('pep3147', '__init__.py'), 'w'):
with open(os.path.join('pep3147', '__init__.py'), 'wb'):
pass
with open(os.path.join('pep3147', 'foo.py'), 'w'):
with open(os.path.join('pep3147', 'foo.py'), 'wb'):
pass
importlib.invalidate_caches()
m = __import__('pep3147.foo')
@ -986,7 +987,7 @@ class PycacheTests(unittest.TestCase):
# source size is enough to trigger recomputation of the pyc file.
__import__(TESTFN)
unload(TESTFN)
with open(self.source, 'a') as fp:
with open(self.source, 'a', encoding='utf-8') as fp:
print("x = 5", file=fp)
m = __import__(TESTFN)
self.assertEqual(m.x, 5)
@ -1118,7 +1119,7 @@ class ImportTracebackTests(unittest.TestCase):
def create_module(self, mod, contents, ext=".py"):
fname = os.path.join(TESTFN, mod + ext)
with open(fname, "w") as f:
with open(fname, "w", encoding='utf-8') as f:
f.write(contents)
self.addCleanup(unload, mod)
importlib.invalidate_caches()
@ -1195,10 +1196,10 @@ class ImportTracebackTests(unittest.TestCase):
os.mkdir(pkg_path)
# Touch the __init__.py
init_path = os.path.join(pkg_path, '__init__.py')
with open(init_path, 'w') as f:
with open(init_path, 'w', encoding='utf-8') as f:
f.write(parent)
bar_path = os.path.join(pkg_path, 'bar.py')
with open(bar_path, 'w') as f:
with open(bar_path, 'w', encoding='utf-8') as f:
f.write(child)
importlib.invalidate_caches()
return init_path, bar_path

View File

@ -250,7 +250,7 @@ def build_files(file_defs, prefix=pathlib.Path()):
with full_name.open('wb') as f:
f.write(contents)
else:
with full_name.open('w') as f:
with full_name.open('w', encoding='utf-8') as f:
f.write(DALS(contents))

View File

@ -124,7 +124,7 @@ class SimpleTest(abc.LoaderTests):
module = loader.load_module('_temp')
module_id = id(module)
module_dict_id = id(module.__dict__)
with open(mapping['_temp'], 'w') as file:
with open(mapping['_temp'], 'w', encoding='utf-8') as file:
file.write("testing_var = 42\n")
with warnings.catch_warnings():
warnings.simplefilter('ignore', DeprecationWarning)
@ -145,7 +145,7 @@ class SimpleTest(abc.LoaderTests):
orig_module = types.ModuleType(name)
for attr in attributes:
setattr(orig_module, attr, value)
with open(mapping[name], 'w') as file:
with open(mapping[name], 'w', encoding='utf-8') as file:
file.write('+++ bad syntax +++')
loader = self.machinery.SourceFileLoader('_temp', mapping['_temp'])
with self.assertRaises(SyntaxError):
@ -162,7 +162,7 @@ class SimpleTest(abc.LoaderTests):
# [syntax error]
def test_bad_syntax(self):
with util.create_modules('_temp') as mapping:
with open(mapping['_temp'], 'w') as file:
with open(mapping['_temp'], 'w', encoding='utf-8') as file:
file.write('=')
loader = self.machinery.SourceFileLoader('_temp', mapping['_temp'])
with self.assertRaises(SyntaxError):
@ -175,7 +175,7 @@ class SimpleTest(abc.LoaderTests):
# Loading a module found from an empty string entry on sys.path should
# not only work, but keep all attributes relative.
file_path = '_temp.py'
with open(file_path, 'w') as file:
with open(file_path, 'w', encoding='utf-8') as file:
file.write("# test file for importlib")
try:
with util.uncache('_temp'):
@ -199,7 +199,7 @@ class SimpleTest(abc.LoaderTests):
with util.create_modules('_temp') as mapping:
source = mapping['_temp']
compiled = self.util.cache_from_source(source)
with open(source, 'w') as f:
with open(source, 'w', encoding='utf-8') as f:
f.write("x = 5")
try:
os.utime(source, (2 ** 33 - 5, 2 ** 33 - 5))

View File

@ -127,7 +127,7 @@ class FinderTests(abc.FinderTests):
# The empty string from sys.path means to search in the cwd.
finder = self.machinery.FileFinder('', (self.machinery.SourceFileLoader,
self.machinery.SOURCE_SUFFIXES))
with open('mod.py', 'w') as file:
with open('mod.py', 'w', encoding='utf-8') as file:
file.write("# test file for importlib")
try:
loader = self._find(finder, 'mod', loader_only=True)

View File

@ -312,7 +312,7 @@ class ReloadTests:
'__file__': None,
}
os.mkdir(name)
with open(bad_path, 'w') as init_file:
with open(bad_path, 'w', encoding='utf-8') as init_file:
init_file.write('eggs = None')
module = self.init.import_module(name)
ns = vars(module).copy()

View File

@ -15,7 +15,7 @@ class FilesTests:
def test_read_text(self):
files = resources.files(self.data)
actual = files.joinpath('utf-8.file').read_text()
actual = files.joinpath('utf-8.file').read_text(encoding='utf-8')
assert actual == 'Hello, UTF-8 world!\n'
@unittest.skipUnless(

View File

@ -83,7 +83,7 @@ class NameNormalizationTests(fixtures.OnSysPath, fixtures.SiteDir, unittest.Test
metadata_dir = site_dir / 'my_pkg.dist-info'
metadata_dir.mkdir()
metadata = metadata_dir / 'METADATA'
with metadata.open('w') as strm:
with metadata.open('w', encoding='utf-8') as strm:
strm.write('Version: 1.0\n')
return 'my-pkg'
@ -102,7 +102,7 @@ class NameNormalizationTests(fixtures.OnSysPath, fixtures.SiteDir, unittest.Test
metadata_dir = site_dir / 'CherryPy.dist-info'
metadata_dir.mkdir()
metadata = metadata_dir / 'METADATA'
with metadata.open('w') as strm:
with metadata.open('w', encoding='utf-8') as strm:
strm.write('Version: 1.0\n')
return 'CherryPy'

View File

@ -42,7 +42,7 @@ class TestImport(unittest.TestCase):
compiled_path = cache_from_source(self.module_path)
if os.path.exists(compiled_path):
os.remove(compiled_path)
with open(self.module_path, 'w') as f:
with open(self.module_path, 'w', encoding='utf-8') as f:
f.write(contents)
def test_package_import__semantics(self):

View File

@ -116,7 +116,7 @@ def case_insensitive_tests(test):
def submodule(parent, name, pkg_dir, content=''):
path = os.path.join(pkg_dir, name + '.py')
with open(path, 'w') as subfile:
with open(path, 'w', encoding='utf-8') as subfile:
subfile.write(content)
return '{}.{}'.format(parent, name), path
@ -176,7 +176,7 @@ def temp_module(name, content='', *, pkg=False):
content = ''
if content is not None:
# not a namespace package
with open(modpath, 'w') as modfile:
with open(modpath, 'w', encoding='utf-8') as modfile:
modfile.write(content)
yield location
@ -384,7 +384,7 @@ def create_modules(*names):
os.mkdir(file_path)
created_paths.append(file_path)
file_path = os.path.join(file_path, name_parts[-1] + '.py')
with open(file_path, 'w') as file:
with open(file_path, 'w', encoding='utf-8') as file:
file.write(source.format(name))
created_paths.append(file_path)
mapping[name] = file_path

View File

@ -74,7 +74,9 @@ def write_file(path, content, binary=False):
"""
if isinstance(path, tuple):
path = os.path.join(*path)
with open(path, 'wb' if binary else 'w') as fp:
mode = 'wb' if binary else 'w'
encoding = None if binary else "utf-8"
with open(path, mode, encoding=encoding) as fp:
fp.write(content)
def write_test_file(path, size):
@ -104,7 +106,9 @@ def read_file(path, binary=False):
"""
if isinstance(path, tuple):
path = os.path.join(*path)
with open(path, 'rb' if binary else 'r') as fp:
mode = 'rb' if binary else 'r'
encoding = None if binary else "utf-8"
with open(path, mode, encoding=encoding) as fp:
return fp.read()
def rlistdir(path):
@ -674,7 +678,7 @@ class TestCopyTree(BaseTest, unittest.TestCase):
flag = []
src = self.mkdtemp()
dst = tempfile.mktemp(dir=self.mkdtemp())
with open(os.path.join(src, 'foo'), 'w') as f:
with open(os.path.join(src, 'foo'), 'w', encoding='utf-8') as f:
f.close()
shutil.copytree(src, dst, copy_function=custom_cpfun)
self.assertEqual(len(flag), 1)
@ -746,7 +750,7 @@ class TestCopyTree(BaseTest, unittest.TestCase):
src_dir = self.mkdtemp()
dst_dir = os.path.join(self.mkdtemp(), 'destination')
os.mkdir(os.path.join(src_dir, 'real_dir'))
with open(os.path.join(src_dir, 'real_dir', 'test.txt'), 'w'):
with open(os.path.join(src_dir, 'real_dir', 'test.txt'), 'wb'):
pass
os.symlink(os.path.join(src_dir, 'real_dir'),
os.path.join(src_dir, 'link_to_dir'),
@ -1172,14 +1176,14 @@ class TestCopy(BaseTest, unittest.TestCase):
src = os.path.join(TESTFN, 'cheese')
dst = os.path.join(TESTFN, 'shop')
try:
with open(src, 'w') as f:
with open(src, 'w', encoding='utf-8') as f:
f.write('cheddar')
try:
os.link(src, dst)
except PermissionError as e:
self.skipTest('os.link(): %s' % e)
self.assertRaises(shutil.SameFileError, shutil.copyfile, src, dst)
with open(src, 'r') as f:
with open(src, 'r', encoding='utf-8') as f:
self.assertEqual(f.read(), 'cheddar')
os.remove(dst)
finally:
@ -1192,14 +1196,14 @@ class TestCopy(BaseTest, unittest.TestCase):
src = os.path.join(TESTFN, 'cheese')
dst = os.path.join(TESTFN, 'shop')
try:
with open(src, 'w') as f:
with open(src, 'w', encoding='utf-8') as f:
f.write('cheddar')
# Using `src` here would mean we end up with a symlink pointing
# to TESTFN/TESTFN/cheese, while it should point at
# TESTFN/cheese.
os.symlink('cheese', dst)
self.assertRaises(shutil.SameFileError, shutil.copyfile, src, dst)
with open(src, 'r') as f:
with open(src, 'r', encoding='utf-8') as f:
self.assertEqual(f.read(), 'cheddar')
os.remove(dst)
finally:
@ -2586,7 +2590,7 @@ class TestGetTerminalSize(unittest.TestCase):
# sys.__stdout__ is not a terminal on Unix
# or fileno() not in (0, 1, 2) on Windows
with open(os.devnull, 'w') as f, \
with open(os.devnull, 'w', encoding='utf-8') as f, \
support.swap_attr(sys, '__stdout__', f):
size = shutil.get_terminal_size(fallback=(30, 40))
self.assertEqual(size.columns, 30)