Skip to content

Commit

Permalink
GH-110109: pathlib ABCs: drop use of io.text_encoding() (#113417)
Browse files Browse the repository at this point in the history
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.
  • Loading branch information
barneygale committed Dec 27, 2023
1 parent 712afab commit f8b6e17
Show file tree
Hide file tree
Showing 2 changed files with 18 additions and 3 deletions.
18 changes: 18 additions & 0 deletions Lib/pathlib/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -270,6 +270,24 @@ def open(self, mode='r', buffering=-1, encoding=None,
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.
Expand Down
3 changes: 0 additions & 3 deletions Lib/pathlib/_abc.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
import functools
import io
import ntpath
import posixpath
import sys
Expand Down Expand Up @@ -755,7 +754,6 @@ def read_text(self, encoding=None, errors=None, newline=None):
"""
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()

Expand All @@ -775,7 +773,6 @@ def write_text(self, data, encoding=None, errors=None, newline=None):
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)

Expand Down

0 comments on commit f8b6e17

Please sign in to comment.