Development of an internal social media platform with personalised dashboards for students
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.

makefile.py 1.4KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. # -*- coding: utf-8 -*-
  2. """
  3. backports.makefile
  4. ~~~~~~~~~~~~~~~~~~
  5. Backports the Python 3 ``socket.makefile`` method for use with anything that
  6. wants to create a "fake" socket object.
  7. """
  8. import io
  9. from socket import SocketIO
  10. def backport_makefile(self, mode="r", buffering=None, encoding=None,
  11. errors=None, newline=None):
  12. """
  13. Backport of ``socket.makefile`` from Python 3.5.
  14. """
  15. if not set(mode) <= set(["r", "w", "b"]):
  16. raise ValueError(
  17. "invalid mode %r (only r, w, b allowed)" % (mode,)
  18. )
  19. writing = "w" in mode
  20. reading = "r" in mode or not writing
  21. assert reading or writing
  22. binary = "b" in mode
  23. rawmode = ""
  24. if reading:
  25. rawmode += "r"
  26. if writing:
  27. rawmode += "w"
  28. raw = SocketIO(self, rawmode)
  29. self._makefile_refs += 1
  30. if buffering is None:
  31. buffering = -1
  32. if buffering < 0:
  33. buffering = io.DEFAULT_BUFFER_SIZE
  34. if buffering == 0:
  35. if not binary:
  36. raise ValueError("unbuffered streams must be binary")
  37. return raw
  38. if reading and writing:
  39. buffer = io.BufferedRWPair(raw, raw, buffering)
  40. elif reading:
  41. buffer = io.BufferedReader(raw, buffering)
  42. else:
  43. assert writing
  44. buffer = io.BufferedWriter(raw, buffering)
  45. if binary:
  46. return buffer
  47. text = io.TextIOWrapper(buffer, encoding, errors, newline)
  48. text.mode = mode
  49. return text