mirror of
https://github.com/python/cpython.git
synced 2025-09-17 06:06:25 +00:00
GH-128520: pathlib ABCs: validate magic_open()
arguments (#131617)
When `pathlib._os.magic_open()` is called to open a path in binary mode, raise `ValueError` if any of the *encoding*, *errors* or *newline* arguments are given. This matches the `open()` built-in.
This commit is contained in:
parent
fbfb0e1f6e
commit
d716ea34cb
3 changed files with 12 additions and 0 deletions
|
@ -186,6 +186,12 @@ def magic_open(path, mode='r', buffering=-1, encoding=None, errors=None,
|
||||||
pass
|
pass
|
||||||
else:
|
else:
|
||||||
return attr(path, buffering, encoding, errors, newline)
|
return attr(path, buffering, encoding, errors, newline)
|
||||||
|
elif encoding is not None:
|
||||||
|
raise ValueError("binary mode doesn't take an encoding argument")
|
||||||
|
elif errors is not None:
|
||||||
|
raise ValueError("binary mode doesn't take an errors argument")
|
||||||
|
elif newline is not None:
|
||||||
|
raise ValueError("binary mode doesn't take a newline argument")
|
||||||
|
|
||||||
try:
|
try:
|
||||||
attr = getattr(cls, f'__open_{mode}b__')
|
attr = getattr(cls, f'__open_{mode}b__')
|
||||||
|
|
|
@ -39,6 +39,9 @@ class ReadTestBase:
|
||||||
p = self.root / 'fileA'
|
p = self.root / 'fileA'
|
||||||
with magic_open(p, 'rb') as f:
|
with magic_open(p, 'rb') as f:
|
||||||
self.assertEqual(f.read(), b'this is file A\n')
|
self.assertEqual(f.read(), b'this is file A\n')
|
||||||
|
self.assertRaises(ValueError, magic_open, p, 'rb', encoding='utf8')
|
||||||
|
self.assertRaises(ValueError, magic_open, p, 'rb', errors='strict')
|
||||||
|
self.assertRaises(ValueError, magic_open, p, 'rb', newline='')
|
||||||
|
|
||||||
def test_read_bytes(self):
|
def test_read_bytes(self):
|
||||||
p = self.root / 'fileA'
|
p = self.root / 'fileA'
|
||||||
|
|
|
@ -41,6 +41,9 @@ class WriteTestBase:
|
||||||
#self.assertIsInstance(f, io.BufferedWriter)
|
#self.assertIsInstance(f, io.BufferedWriter)
|
||||||
f.write(b'this is file A\n')
|
f.write(b'this is file A\n')
|
||||||
self.assertEqual(self.ground.readbytes(p), b'this is file A\n')
|
self.assertEqual(self.ground.readbytes(p), b'this is file A\n')
|
||||||
|
self.assertRaises(ValueError, magic_open, p, 'wb', encoding='utf8')
|
||||||
|
self.assertRaises(ValueError, magic_open, p, 'wb', errors='strict')
|
||||||
|
self.assertRaises(ValueError, magic_open, p, 'wb', newline='')
|
||||||
|
|
||||||
def test_write_bytes(self):
|
def test_write_bytes(self):
|
||||||
p = self.root / 'fileA'
|
p = self.root / 'fileA'
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue