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