mirror of
				https://github.com/python/cpython.git
				synced 2025-10-31 21:51:50 +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 @@ def test_open_rb(self): | ||||||
|         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 @@ def test_open_wb(self): | ||||||
|             #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
	
	 Barney Gale
						Barney Gale