You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					52 lines
				
				1.4 KiB
			
		
		
			
		
	
	
					52 lines
				
				1.4 KiB
			| 
								 
											3 years ago
										 
									 | 
							
								# -*- coding: utf-8 -*-
							 | 
						||
| 
								 | 
							
								"""
							 | 
						||
| 
								 | 
							
								backports.makefile
							 | 
						||
| 
								 | 
							
								~~~~~~~~~~~~~~~~~~
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								Backports the Python 3 ``socket.makefile`` method for use with anything that
							 | 
						||
| 
								 | 
							
								wants to create a "fake" socket object.
							 | 
						||
| 
								 | 
							
								"""
							 | 
						||
| 
								 | 
							
								import io
							 | 
						||
| 
								 | 
							
								from socket import SocketIO
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								def backport_makefile(
							 | 
						||
| 
								 | 
							
								    self, mode="r", buffering=None, encoding=None, errors=None, newline=None
							 | 
						||
| 
								 | 
							
								):
							 | 
						||
| 
								 | 
							
								    """
							 | 
						||
| 
								 | 
							
								    Backport of ``socket.makefile`` from Python 3.5.
							 | 
						||
| 
								 | 
							
								    """
							 | 
						||
| 
								 | 
							
								    if not set(mode) <= {"r", "w", "b"}:
							 | 
						||
| 
								 | 
							
								        raise ValueError("invalid mode %r (only r, w, b allowed)" % (mode,))
							 | 
						||
| 
								 | 
							
								    writing = "w" in mode
							 | 
						||
| 
								 | 
							
								    reading = "r" in mode or not writing
							 | 
						||
| 
								 | 
							
								    assert reading or writing
							 | 
						||
| 
								 | 
							
								    binary = "b" in mode
							 | 
						||
| 
								 | 
							
								    rawmode = ""
							 | 
						||
| 
								 | 
							
								    if reading:
							 | 
						||
| 
								 | 
							
								        rawmode += "r"
							 | 
						||
| 
								 | 
							
								    if writing:
							 | 
						||
| 
								 | 
							
								        rawmode += "w"
							 | 
						||
| 
								 | 
							
								    raw = SocketIO(self, rawmode)
							 | 
						||
| 
								 | 
							
								    self._makefile_refs += 1
							 | 
						||
| 
								 | 
							
								    if buffering is None:
							 | 
						||
| 
								 | 
							
								        buffering = -1
							 | 
						||
| 
								 | 
							
								    if buffering < 0:
							 | 
						||
| 
								 | 
							
								        buffering = io.DEFAULT_BUFFER_SIZE
							 | 
						||
| 
								 | 
							
								    if buffering == 0:
							 | 
						||
| 
								 | 
							
								        if not binary:
							 | 
						||
| 
								 | 
							
								            raise ValueError("unbuffered streams must be binary")
							 | 
						||
| 
								 | 
							
								        return raw
							 | 
						||
| 
								 | 
							
								    if reading and writing:
							 | 
						||
| 
								 | 
							
								        buffer = io.BufferedRWPair(raw, raw, buffering)
							 | 
						||
| 
								 | 
							
								    elif reading:
							 | 
						||
| 
								 | 
							
								        buffer = io.BufferedReader(raw, buffering)
							 | 
						||
| 
								 | 
							
								    else:
							 | 
						||
| 
								 | 
							
								        assert writing
							 | 
						||
| 
								 | 
							
								        buffer = io.BufferedWriter(raw, buffering)
							 | 
						||
| 
								 | 
							
								    if binary:
							 | 
						||
| 
								 | 
							
								        return buffer
							 | 
						||
| 
								 | 
							
								    text = io.TextIOWrapper(buffer, encoding, errors, newline)
							 | 
						||
| 
								 | 
							
								    text.mode = mode
							 | 
						||
| 
								 | 
							
								    return text
							 |