1 # -*- coding: utf-8 -*-
6 Backports the Python 3 ``socket.makefile`` method for use with anything that
7 wants to create a "fake" socket object.
10 from socket import SocketIO
13 def backport_makefile(
14 self, mode="r", buffering=None, encoding=None, errors=None, newline=None
17 Backport of ``socket.makefile`` from Python 3.5.
19 if not set(mode) <= {"r", "w", "b"}:
20 raise ValueError("invalid mode %r (only r, w, b allowed)" % (mode,))
22 reading = "r" in mode or not writing
23 assert reading or writing
30 raw = SocketIO(self, rawmode)
31 self._makefile_refs += 1
35 buffering = io.DEFAULT_BUFFER_SIZE
38 raise ValueError("unbuffered streams must be binary")
40 if reading and writing:
41 buffer = io.BufferedRWPair(raw, raw, buffering)
43 buffer = io.BufferedReader(raw, buffering)
46 buffer = io.BufferedWriter(raw, buffering)
49 text = io.TextIOWrapper(buffer, encoding, errors, newline)