mirror of
				https://github.com/python/cpython.git
				synced 2025-10-31 05:31:20 +00:00 
			
		
		
		
	Issue #16915: Clarify that mode parameter of socket.makefile() does not accept
the same values as open().
This commit is contained in:
		
							parent
							
								
									c12fef9aa3
								
							
						
					
					
						commit
						3fe64d0c5c
					
				
					 3 changed files with 19 additions and 4 deletions
				
			
		|  | @ -1006,7 +1006,8 @@ to sockets. | |||
| 
 | ||||
|    Return a :term:`file object` associated with the socket.  The exact returned | ||||
|    type depends on the arguments given to :meth:`makefile`.  These arguments are | ||||
|    interpreted the same way as by the built-in :func:`open` function. | ||||
|    interpreted the same way as by the built-in :func:`open` function, except | ||||
|    the only supported *mode* values are ``'r'`` (default), ``'w'`` and ``'b'``. | ||||
| 
 | ||||
|    The socket must be in blocking mode; it can have a timeout, but the file | ||||
|    object's internal buffer may end up in an inconsistent state if a timeout | ||||
|  |  | |||
|  | @ -209,10 +209,10 @@ def makefile(self, mode="r", buffering=None, *, | |||
|                  encoding=None, errors=None, newline=None): | ||||
|         """makefile(...) -> an I/O stream connected to the socket | ||||
| 
 | ||||
|         The arguments are as for io.open() after the filename, | ||||
|         except the only mode characters supported are 'r', 'w' and 'b'. | ||||
|         The semantics are similar too.  (XXX refactor to share code?) | ||||
|         The arguments are as for io.open() after the filename, except the only | ||||
|         supported mode values are 'r' (default), 'w' and 'b'. | ||||
|         """ | ||||
|         # XXX refactor to share code? | ||||
|         if not set(mode) <= {"r", "w", "b"}: | ||||
|             raise ValueError("invalid mode %r (only r, w, b allowed)" % (mode,)) | ||||
|         writing = "w" in mode | ||||
|  |  | |||
|  | @ -1374,6 +1374,20 @@ def test_unusable_closed_socketio(self): | |||
|             self.assertRaises(ValueError, fp.writable) | ||||
|             self.assertRaises(ValueError, fp.seekable) | ||||
| 
 | ||||
|     def test_makefile_mode(self): | ||||
|         for mode in 'r', 'rb', 'rw', 'w', 'wb': | ||||
|             with self.subTest(mode=mode): | ||||
|                 with socket.socket() as sock: | ||||
|                     with sock.makefile(mode) as fp: | ||||
|                         self.assertEqual(fp.mode, mode) | ||||
| 
 | ||||
|     def test_makefile_invalid_mode(self): | ||||
|         for mode in 'rt', 'x', '+', 'a': | ||||
|             with self.subTest(mode=mode): | ||||
|                 with socket.socket() as sock: | ||||
|                     with self.assertRaisesRegex(ValueError, 'invalid mode'): | ||||
|                         sock.makefile(mode) | ||||
| 
 | ||||
|     def test_pickle(self): | ||||
|         sock = socket.socket() | ||||
|         with sock: | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Berker Peksag
						Berker Peksag