mirror of
				https://github.com/python/cpython.git
				synced 2025-10-30 21:21:22 +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 |    Return a :term:`file object` associated with the socket.  The exact returned | ||||||
|    type depends on the arguments given to :meth:`makefile`.  These arguments are |    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 |    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 |    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): |                  encoding=None, errors=None, newline=None): | ||||||
|         """makefile(...) -> an I/O stream connected to the socket |         """makefile(...) -> an I/O stream connected to the socket | ||||||
| 
 | 
 | ||||||
|         The arguments are as for io.open() after the filename, |         The arguments are as for io.open() after the filename, except the only | ||||||
|         except the only mode characters supported are 'r', 'w' and 'b'. |         supported mode values are 'r' (default), 'w' and 'b'. | ||||||
|         The semantics are similar too.  (XXX refactor to share code?) |  | ||||||
|         """ |         """ | ||||||
|  |         # XXX refactor to share code? | ||||||
|         if not set(mode) <= {"r", "w", "b"}: |         if not set(mode) <= {"r", "w", "b"}: | ||||||
|             raise ValueError("invalid mode %r (only r, w, b allowed)" % (mode,)) |             raise ValueError("invalid mode %r (only r, w, b allowed)" % (mode,)) | ||||||
|         writing = "w" in mode |         writing = "w" in mode | ||||||
|  |  | ||||||
|  | @ -1374,6 +1374,20 @@ def test_unusable_closed_socketio(self): | ||||||
|             self.assertRaises(ValueError, fp.writable) |             self.assertRaises(ValueError, fp.writable) | ||||||
|             self.assertRaises(ValueError, fp.seekable) |             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): |     def test_pickle(self): | ||||||
|         sock = socket.socket() |         sock = socket.socket() | ||||||
|         with sock: |         with sock: | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Berker Peksag
						Berker Peksag