Skip to content

Commit 272d888

Browse files
authored
bpo-29783: Replace codecs.open() with io.open() (#599)
1 parent faa63d1 commit 272d888

File tree

5 files changed

+18
-39
lines changed

5 files changed

+18
-39
lines changed

Doc/tools/extensions/pyspecific.py

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
"""
1111

1212
import re
13-
import codecs
13+
import io
1414
from os import path
1515
from time import asctime
1616
from pprint import pformat
@@ -254,11 +254,8 @@ def run(self):
254254
fpath = path.join(source_dir, fname)
255255
self.state.document.settings.record_dependencies.add(fpath)
256256
try:
257-
fp = codecs.open(fpath, encoding='utf-8')
258-
try:
257+
with io.open(fpath, encoding='utf-8') as fp:
259258
content = fp.read()
260-
finally:
261-
fp.close()
262259
except Exception:
263260
text = 'The NEWS file is not available.'
264261
node = nodes.strong(text, text)

Lib/codecs.py

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,10 @@
55
66
(c) Copyright CNRI, All Rights Reserved. NO WARRANTY.
77
8-
"""#"
8+
"""
99

10-
import builtins, sys
10+
import builtins
11+
import sys
1112

1213
### Registry and builtin stateless codec functions
1314

@@ -739,7 +740,7 @@ def __getattr__(self, name,
739740
"""
740741
return getattr(self.stream, name)
741742

742-
# these are needed to make "with codecs.open(...)" work properly
743+
# these are needed to make "with StreamReaderWriter(...)" work properly
743744

744745
def __enter__(self):
745746
return self

Lib/lib2to3/pgen2/driver.py

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -94,11 +94,8 @@ def parse_stream(self, stream, debug=False):
9494

9595
def parse_file(self, filename, encoding=None, debug=False):
9696
"""Parse a file and return the syntax tree."""
97-
stream = codecs.open(filename, "r", encoding)
98-
try:
97+
with io.open(filename, "r", encoding=encoding) as stream:
9998
return self.parse_stream(stream, debug)
100-
finally:
101-
stream.close()
10299

103100
def parse_string(self, text, debug=False):
104101
"""Parse a string and return the syntax tree."""

Lib/lib2to3/refactor.py

Lines changed: 10 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -12,12 +12,12 @@
1212

1313

1414
# Python imports
15+
import io
1516
import os
1617
import sys
1718
import logging
1819
import operator
1920
import collections
20-
import io
2121
from itertools import chain
2222

2323
# Local imports
@@ -107,22 +107,6 @@ def get_fixers_from_package(pkg_name):
107107
def _identity(obj):
108108
return obj
109109

110-
if sys.version_info < (3, 0):
111-
import codecs
112-
_open_with_encoding = codecs.open
113-
# codecs.open doesn't translate newlines sadly.
114-
def _from_system_newlines(input):
115-
return input.replace("\r\n", "\n")
116-
def _to_system_newlines(input):
117-
if os.linesep != "\n":
118-
return input.replace("\n", os.linesep)
119-
else:
120-
return input
121-
else:
122-
_open_with_encoding = open
123-
_from_system_newlines = _identity
124-
_to_system_newlines = _identity
125-
126110

127111
def _detect_future_features(source):
128112
have_docstring = False
@@ -330,8 +314,8 @@ def _read_python_source(self, filename):
330314
encoding = tokenize.detect_encoding(f.readline)[0]
331315
finally:
332316
f.close()
333-
with _open_with_encoding(filename, "r", encoding=encoding) as f:
334-
return _from_system_newlines(f.read()), encoding
317+
with io.open(filename, "r", encoding=encoding) as f:
318+
return f.read(), encoding
335319

336320
def refactor_file(self, filename, write=False, doctests_only=False):
337321
"""Refactors a file."""
@@ -530,16 +514,16 @@ def write_file(self, new_text, filename, old_text, encoding=None):
530514
set.
531515
"""
532516
try:
533-
f = _open_with_encoding(filename, "w", encoding=encoding)
517+
fp = io.open(filename, "w", encoding=encoding)
534518
except OSError as err:
535519
self.log_error("Can't create %s: %s", filename, err)
536520
return
537-
try:
538-
f.write(_to_system_newlines(new_text))
539-
except OSError as err:
540-
self.log_error("Can't write %s: %s", filename, err)
541-
finally:
542-
f.close()
521+
522+
with fp:
523+
try:
524+
fp.write(new_text)
525+
except OSError as err:
526+
self.log_error("Can't write %s: %s", filename, err)
543527
self.log_debug("Wrote changes to %s", filename)
544528
self.wrote = True
545529

Lib/test/test_argparse.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4598,7 +4598,7 @@ class TestEncoding(TestCase):
45984598
def _test_module_encoding(self, path):
45994599
path, _ = os.path.splitext(path)
46004600
path += ".py"
4601-
with codecs.open(path, 'r', 'utf-8') as f:
4601+
with open(path, 'r', encoding='utf-8') as f:
46024602
f.read()
46034603

46044604
def test_argparse_module_encoding(self):

0 commit comments

Comments
 (0)