[Python-checkins] gh-93099: Fix _pyio to use locale module properly (gh-93136)
miss-islington
webhook-mailer at python.org
Mon May 23 21:03:46 EDT 2022
https://github.com/python/cpython/commit/97fe65a7bebf0f7acbd8af9537c6f4293301892e
commit: 97fe65a7bebf0f7acbd8af9537c6f4293301892e
branch: 3.11
author: Miss Islington (bot) <31488909+miss-islington at users.noreply.github.com>
committer: miss-islington <31488909+miss-islington at users.noreply.github.com>
date: 2022-05-23T18:03:37-07:00
summary:
gh-93099: Fix _pyio to use locale module properly (gh-93136)
(cherry picked from commit f7fabae75c7b8ecd0c5673b5d62a15db24a05953)
Co-authored-by: Dong-hee Na <donghee.na at python.org>
files:
M Lib/_pyio.py
M Lib/test/test_io.py
diff --git a/Lib/_pyio.py b/Lib/_pyio.py
index 0f647eed99d81..0bfdeaafae274 100644
--- a/Lib/_pyio.py
+++ b/Lib/_pyio.py
@@ -2022,13 +2022,7 @@ def __init__(self, buffer, encoding=None, errors=None, newline=None,
encoding = text_encoding(encoding)
if encoding == "locale":
- try:
- import locale
- except ImportError:
- # Importing locale may fail if Python is being built
- encoding = "utf-8"
- else:
- encoding = locale.getencoding()
+ encoding = self._get_locale_encoding()
if not isinstance(encoding, str):
raise ValueError("invalid encoding: %r" % encoding)
@@ -2162,7 +2156,7 @@ def reconfigure(self, *,
if not isinstance(encoding, str):
raise TypeError("invalid encoding: %r" % encoding)
if encoding == "locale":
- encoding = locale.getencoding()
+ encoding = self._get_locale_encoding()
if newline is Ellipsis:
newline = self._readnl
@@ -2267,6 +2261,15 @@ def _get_decoded_chars(self, n=None):
self._decoded_chars_used += len(chars)
return chars
+ def _get_locale_encoding(self):
+ try:
+ import locale
+ except ImportError:
+ # Importing locale may fail if Python is being built
+ return "utf-8"
+ else:
+ return locale.getencoding()
+
def _rewind_decoded_chars(self, n):
"""Rewind the _decoded_chars buffer."""
if self._decoded_chars_used < n:
diff --git a/Lib/test/test_io.py b/Lib/test/test_io.py
index 039da535d488a..daccbae5b4a1d 100644
--- a/Lib/test/test_io.py
+++ b/Lib/test/test_io.py
@@ -3570,6 +3570,10 @@ def seekable(self): return True
F.tell = lambda x: 0
t = self.TextIOWrapper(F(), encoding='utf-8')
+ def test_reconfigure_locale(self):
+ wrapper = io.TextIOWrapper(io.BytesIO(b"test"))
+ wrapper.reconfigure(encoding="locale")
+
def test_reconfigure_encoding_read(self):
# latin1 -> utf8
# (latin1 can decode utf-8 encoded string)
More information about the Python-checkins
mailing list