From: Barney Gale Date: Wed, 27 Dec 2023 15:32:35 +0000 (+0000) Subject: GH-110109: pathlib ABCs: drop use of `io.text_encoding()` (#113417) X-Git-Tag: v3.13.0a3~244 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=f8b6e171ad79bf3e57e39ebc0d96ad097a310cbf;p=thirdparty%2FPython%2Fcpython.git 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. --- diff --git a/Lib/pathlib/__init__.py b/Lib/pathlib/__init__.py index bfd2a9249797..ab87b49d0277 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 43e2670c4d02..cfd59ece2467 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)