1 """The io module provides the Python interfaces to stream handling. The 2 builtin open function is defined in this module. 3 4 At the top of the I/O hierarchy is the abstract base class IOBase. It 5 defines the basic interface to a stream. Note, however, that there is no 6 separation between reading and writing to streams; implementations are 7 allowed to raise an OSError if they do not support a given operation. 8 9 Extending IOBase is RawIOBase which deals simply with the reading and 10 writing of raw bytes to a stream. FileIO subclasses RawIOBase to provide 11 an interface to OS files. 12 13 BufferedIOBase deals with buffering on a raw byte stream (RawIOBase). Its 14 subclasses, BufferedWriter, BufferedReader, and BufferedRWPair buffer 15 streams that are readable, writable, and both respectively. 16 BufferedRandom provides a buffered interface to random access 17 streams. BytesIO is a simple stream of in-memory bytes. 18 19 Another IOBase subclass, TextIOBase, deals with the encoding and decoding 20 of streams into text. TextIOWrapper, which extends it, is a buffered text 21 interface to a buffered raw stream (`BufferedIOBase`). Finally, StringIO 22 is an in-memory stream for text. 23 24 Argument names are not part of the specification, and only the arguments 25 of open() are intended to be used as keyword arguments. 26 27 data: 28 29 DEFAULT_BUFFER_SIZE 30 31 An int containing the default buffer size used by the module's buffered 32 I/O classes. open() uses the file's blksize (as obtained by os.stat) if 33 possible. 34 """ 35 # New I/O library conforming to PEP 3116. 36 37 __author__ = ("Guido van Rossum <guido@python.org>, " 38 "Mike Verdone <mike.verdone@gmail.com>, " 39 "Mark Russell <mark.russell@zen.co.uk>, " 40 "Antoine Pitrou <solipsis@pitrou.net>, " 41 "Amaury Forgeot d'Arc <amauryfa@gmail.com>, " 42 "Benjamin Peterson <benjamin@python.org>") 43 44 __all__ = ["BlockingIOError", "open", "open_code", "IOBase", "RawIOBase", 45 "FileIO", "BytesIO", "StringIO", "BufferedIOBase", 46 "BufferedReader", "BufferedWriter", "BufferedRWPair", 47 "BufferedRandom", "TextIOBase", "TextIOWrapper", 48 "UnsupportedOperation", "SEEK_SET", "SEEK_CUR", "SEEK_END"] 49 50 51 import _io 52 import abc 53 54 from _io import (DEFAULT_BUFFER_SIZE, BlockingIOError, UnsupportedOperation, 55 open, open_code, FileIO, BytesIO, StringIO, BufferedReader, 56 BufferedWriter, BufferedRWPair, BufferedRandom, 57 IncrementalNewlineDecoder, text_encoding, TextIOWrapper) 58 59 60 def __getattr__(name): 61 if name == "OpenWrapper": 62 # bpo-43680: Until Python 3.9, _pyio.open was not a static method and 63 # builtins.open was set to OpenWrapper to not become a bound method 64 # when set to a class variable. _io.open is a built-in function whereas 65 # _pyio.open is a Python function. In Python 3.10, _pyio.open() is now 66 # a static method, and builtins.open() is now io.open(). 67 import warnings 68 warnings.warn('OpenWrapper is deprecated, use open instead', 69 DeprecationWarning, stacklevel=2) 70 global OpenWrapper 71 OpenWrapper = open 72 return OpenWrapper 73 raise AttributeError(f"module {__name__!r} has no attribute {name!r}") 74 75 76 # Pretend this exception was created here. 77 UnsupportedOperation.__module__ = "io" 78 79 # for seek() 80 SEEK_SET = 0 81 SEEK_CUR = 1 82 SEEK_END = 2 83 84 # Declaring ABCs in C is tricky so we do it here. 85 # Method descriptions and default implementations are inherited from the C 86 # version however. 87 class IOBase(_io._IOBase, metaclass=abc.ABCMeta): 88 __doc__ = _io._IOBase.__doc__ 89 90 class RawIOBase(_io._RawIOBase, IOBase): 91 __doc__ = _io._RawIOBase.__doc__ 92 93 class BufferedIOBase(_io._BufferedIOBase, IOBase): 94 __doc__ = _io._BufferedIOBase.__doc__ 95 96 class TextIOBase(_io._TextIOBase, IOBase): 97 __doc__ = _io._TextIOBase.__doc__ 98 99 RawIOBase.register(FileIO) 100 101 for klass in (BytesIO, BufferedReader, BufferedWriter, BufferedRandom, 102 BufferedRWPair): 103 BufferedIOBase.register(klass) 104 105 for klass in (StringIO, TextIOWrapper): 106 TextIOBase.register(klass) 107 del klass 108 109 try: 110 from _io import _WindowsConsoleIO 111 except ImportError: 112 pass 113 else: 114 RawIOBase.register(_WindowsConsoleIO) 115