xref: /aosp_15_r20/prebuilts/build-tools/common/py3-stdlib/io.py (revision cda5da8d549138a6648c5ee6d7a49cf8f4a657be)
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