summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBarney Gale <barney.gale@gmail.com>2023-12-27 15:32:35 (GMT)
committerGitHub <noreply@github.com>2023-12-27 15:32:35 (GMT)
commitf8b6e171ad79bf3e57e39ebc0d96ad097a310cbf (patch)
tree9b5f06f75c65f661ed36bd13f5ef4f79405e7e14
parent712afab5acbe27ceb1eddde5aa559078ae7eaa3b (diff)
downloadcpython-f8b6e171ad79bf3e57e39ebc0d96ad097a310cbf.zip
cpython-f8b6e171ad79bf3e57e39ebc0d96ad097a310cbf.tar.gz
cpython-f8b6e171ad79bf3e57e39ebc0d96ad097a310cbf.tar.bz2
GH-110109: pathlib ABCs: drop use of `io.text_encoding()` (#113417)
Do not use the locale-specific default encoding in `PathBase.read_text()` and `write_text()`. Locale settings shouldn't influence the operation of these base classes, which are intended mostly for implementing rich paths on *nonlocal* filesystems.
-rw-r--r--Lib/pathlib/__init__.py18
-rw-r--r--Lib/pathlib/_abc.py3
2 files changed, 18 insertions, 3 deletions
diff --git a/Lib/pathlib/__init__.py b/Lib/pathlib/__init__.py
index bfd2a92..ab87b49 100644
--- a/Lib/pathlib/__init__.py
+++ b/Lib/pathlib/__init__.py
@@ -270,6 +270,24 @@ class Path(_abc.PathBase, PurePath):
encoding = io.text_encoding(encoding)
return io.open(self, mode, buffering, encoding, errors, newline)
+ def read_text(self, encoding=None, errors=None, newline=None):
+ """
+ Open the file in text mode, read it, and close the file.
+ """
+ # Call io.text_encoding() here to ensure any warning is raised at an
+ # appropriate stack level.
+ encoding = io.text_encoding(encoding)
+ return _abc.PathBase.read_text(self, encoding, errors, newline)
+
+ def write_text(self, data, encoding=None, errors=None, newline=None):
+ """
+ Open the file in text mode, write to it, and close the file.
+ """
+ # Call io.text_encoding() here to ensure any warning is raised at an
+ # appropriate stack level.
+ encoding = io.text_encoding(encoding)
+ return _abc.PathBase.write_text(self, data, encoding, errors, newline)
+
def iterdir(self):
"""Yield path objects of the directory contents.
diff --git a/Lib/pathlib/_abc.py b/Lib/pathlib/_abc.py
index 43e2670..cfd59ec 100644
--- a/Lib/pathlib/_abc.py
+++ b/Lib/pathlib/_abc.py
@@ -1,5 +1,4 @@
import functools
-import io
import ntpath
import posixpath
import sys
@@ -755,7 +754,6 @@ class PathBase(PurePathBase):
"""
Open the file in text mode, read it, and close the file.
"""
- encoding = io.text_encoding(encoding)
with self.open(mode='r', encoding=encoding, errors=errors, newline=newline) as f:
return f.read()
@@ -775,7 +773,6 @@ class PathBase(PurePathBase):
if not isinstance(data, str):
raise TypeError('data must be str, not %s' %
data.__class__.__name__)
- encoding = io.text_encoding(encoding)
with self.open(mode='w', encoding=encoding, errors=errors, newline=newline) as f:
return f.write(data)