diff options
author | Barney Gale <barney.gale@gmail.com> | 2023-12-27 15:32:35 (GMT) |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-12-27 15:32:35 (GMT) |
commit | f8b6e171ad79bf3e57e39ebc0d96ad097a310cbf (patch) | |
tree | 9b5f06f75c65f661ed36bd13f5ef4f79405e7e14 | |
parent | 712afab5acbe27ceb1eddde5aa559078ae7eaa3b (diff) | |
download | cpython-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__.py | 18 | ||||
-rw-r--r-- | Lib/pathlib/_abc.py | 3 |
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) |