Path: blob/master/venv/Lib/site-packages/urllib3/packages/backports/makefile.py
811 views
# -*- coding: utf-8 -*-1"""2backports.makefile3~~~~~~~~~~~~~~~~~~45Backports the Python 3 ``socket.makefile`` method for use with anything that6wants to create a "fake" socket object.7"""8import io910from socket import SocketIO111213def backport_makefile(14self, mode="r", buffering=None, encoding=None, errors=None, newline=None15):16"""17Backport of ``socket.makefile`` from Python 3.5.18"""19if not set(mode) <= {"r", "w", "b"}:20raise ValueError("invalid mode %r (only r, w, b allowed)" % (mode,))21writing = "w" in mode22reading = "r" in mode or not writing23assert reading or writing24binary = "b" in mode25rawmode = ""26if reading:27rawmode += "r"28if writing:29rawmode += "w"30raw = SocketIO(self, rawmode)31self._makefile_refs += 132if buffering is None:33buffering = -134if buffering < 0:35buffering = io.DEFAULT_BUFFER_SIZE36if buffering == 0:37if not binary:38raise ValueError("unbuffered streams must be binary")39return raw40if reading and writing:41buffer = io.BufferedRWPair(raw, raw, buffering)42elif reading:43buffer = io.BufferedReader(raw, buffering)44else:45assert writing46buffer = io.BufferedWriter(raw, buffering)47if binary:48return buffer49text = io.TextIOWrapper(buffer, encoding, errors, newline)50text.mode = mode51return text525354