17db96d56Sopenharmony_ci"""The io module provides the Python interfaces to stream handling. The
27db96d56Sopenharmony_cibuiltin open function is defined in this module.
37db96d56Sopenharmony_ci
47db96d56Sopenharmony_ciAt the top of the I/O hierarchy is the abstract base class IOBase. It
57db96d56Sopenharmony_cidefines the basic interface to a stream. Note, however, that there is no
67db96d56Sopenharmony_ciseparation between reading and writing to streams; implementations are
77db96d56Sopenharmony_ciallowed to raise an OSError if they do not support a given operation.
87db96d56Sopenharmony_ci
97db96d56Sopenharmony_ciExtending IOBase is RawIOBase which deals simply with the reading and
107db96d56Sopenharmony_ciwriting of raw bytes to a stream. FileIO subclasses RawIOBase to provide
117db96d56Sopenharmony_cian interface to OS files.
127db96d56Sopenharmony_ci
137db96d56Sopenharmony_ciBufferedIOBase deals with buffering on a raw byte stream (RawIOBase). Its
147db96d56Sopenharmony_cisubclasses, BufferedWriter, BufferedReader, and BufferedRWPair buffer
157db96d56Sopenharmony_cistreams that are readable, writable, and both respectively.
167db96d56Sopenharmony_ciBufferedRandom provides a buffered interface to random access
177db96d56Sopenharmony_cistreams. BytesIO is a simple stream of in-memory bytes.
187db96d56Sopenharmony_ci
197db96d56Sopenharmony_ciAnother IOBase subclass, TextIOBase, deals with the encoding and decoding
207db96d56Sopenharmony_ciof streams into text. TextIOWrapper, which extends it, is a buffered text
217db96d56Sopenharmony_ciinterface to a buffered raw stream (`BufferedIOBase`). Finally, StringIO
227db96d56Sopenharmony_ciis an in-memory stream for text.
237db96d56Sopenharmony_ci
247db96d56Sopenharmony_ciArgument names are not part of the specification, and only the arguments
257db96d56Sopenharmony_ciof open() are intended to be used as keyword arguments.
267db96d56Sopenharmony_ci
277db96d56Sopenharmony_cidata:
287db96d56Sopenharmony_ci
297db96d56Sopenharmony_ciDEFAULT_BUFFER_SIZE
307db96d56Sopenharmony_ci
317db96d56Sopenharmony_ci   An int containing the default buffer size used by the module's buffered
327db96d56Sopenharmony_ci   I/O classes. open() uses the file's blksize (as obtained by os.stat) if
337db96d56Sopenharmony_ci   possible.
347db96d56Sopenharmony_ci"""
357db96d56Sopenharmony_ci# New I/O library conforming to PEP 3116.
367db96d56Sopenharmony_ci
377db96d56Sopenharmony_ci__author__ = ("Guido van Rossum <guido@python.org>, "
387db96d56Sopenharmony_ci              "Mike Verdone <mike.verdone@gmail.com>, "
397db96d56Sopenharmony_ci              "Mark Russell <mark.russell@zen.co.uk>, "
407db96d56Sopenharmony_ci              "Antoine Pitrou <solipsis@pitrou.net>, "
417db96d56Sopenharmony_ci              "Amaury Forgeot d'Arc <amauryfa@gmail.com>, "
427db96d56Sopenharmony_ci              "Benjamin Peterson <benjamin@python.org>")
437db96d56Sopenharmony_ci
447db96d56Sopenharmony_ci__all__ = ["BlockingIOError", "open", "open_code", "IOBase", "RawIOBase",
457db96d56Sopenharmony_ci           "FileIO", "BytesIO", "StringIO", "BufferedIOBase",
467db96d56Sopenharmony_ci           "BufferedReader", "BufferedWriter", "BufferedRWPair",
477db96d56Sopenharmony_ci           "BufferedRandom", "TextIOBase", "TextIOWrapper",
487db96d56Sopenharmony_ci           "UnsupportedOperation", "SEEK_SET", "SEEK_CUR", "SEEK_END"]
497db96d56Sopenharmony_ci
507db96d56Sopenharmony_ci
517db96d56Sopenharmony_ciimport _io
527db96d56Sopenharmony_ciimport abc
537db96d56Sopenharmony_ci
547db96d56Sopenharmony_cifrom _io import (DEFAULT_BUFFER_SIZE, BlockingIOError, UnsupportedOperation,
557db96d56Sopenharmony_ci                 open, open_code, FileIO, BytesIO, StringIO, BufferedReader,
567db96d56Sopenharmony_ci                 BufferedWriter, BufferedRWPair, BufferedRandom,
577db96d56Sopenharmony_ci                 IncrementalNewlineDecoder, text_encoding, TextIOWrapper)
587db96d56Sopenharmony_ci
597db96d56Sopenharmony_ci
607db96d56Sopenharmony_cidef __getattr__(name):
617db96d56Sopenharmony_ci    if name == "OpenWrapper":
627db96d56Sopenharmony_ci        # bpo-43680: Until Python 3.9, _pyio.open was not a static method and
637db96d56Sopenharmony_ci        # builtins.open was set to OpenWrapper to not become a bound method
647db96d56Sopenharmony_ci        # when set to a class variable. _io.open is a built-in function whereas
657db96d56Sopenharmony_ci        # _pyio.open is a Python function. In Python 3.10, _pyio.open() is now
667db96d56Sopenharmony_ci        # a static method, and builtins.open() is now io.open().
677db96d56Sopenharmony_ci        import warnings
687db96d56Sopenharmony_ci        warnings.warn('OpenWrapper is deprecated, use open instead',
697db96d56Sopenharmony_ci                      DeprecationWarning, stacklevel=2)
707db96d56Sopenharmony_ci        global OpenWrapper
717db96d56Sopenharmony_ci        OpenWrapper = open
727db96d56Sopenharmony_ci        return OpenWrapper
737db96d56Sopenharmony_ci    raise AttributeError(f"module {__name__!r} has no attribute {name!r}")
747db96d56Sopenharmony_ci
757db96d56Sopenharmony_ci
767db96d56Sopenharmony_ci# Pretend this exception was created here.
777db96d56Sopenharmony_ciUnsupportedOperation.__module__ = "io"
787db96d56Sopenharmony_ci
797db96d56Sopenharmony_ci# for seek()
807db96d56Sopenharmony_ciSEEK_SET = 0
817db96d56Sopenharmony_ciSEEK_CUR = 1
827db96d56Sopenharmony_ciSEEK_END = 2
837db96d56Sopenharmony_ci
847db96d56Sopenharmony_ci# Declaring ABCs in C is tricky so we do it here.
857db96d56Sopenharmony_ci# Method descriptions and default implementations are inherited from the C
867db96d56Sopenharmony_ci# version however.
877db96d56Sopenharmony_ciclass IOBase(_io._IOBase, metaclass=abc.ABCMeta):
887db96d56Sopenharmony_ci    __doc__ = _io._IOBase.__doc__
897db96d56Sopenharmony_ci
907db96d56Sopenharmony_ciclass RawIOBase(_io._RawIOBase, IOBase):
917db96d56Sopenharmony_ci    __doc__ = _io._RawIOBase.__doc__
927db96d56Sopenharmony_ci
937db96d56Sopenharmony_ciclass BufferedIOBase(_io._BufferedIOBase, IOBase):
947db96d56Sopenharmony_ci    __doc__ = _io._BufferedIOBase.__doc__
957db96d56Sopenharmony_ci
967db96d56Sopenharmony_ciclass TextIOBase(_io._TextIOBase, IOBase):
977db96d56Sopenharmony_ci    __doc__ = _io._TextIOBase.__doc__
987db96d56Sopenharmony_ci
997db96d56Sopenharmony_ciRawIOBase.register(FileIO)
1007db96d56Sopenharmony_ci
1017db96d56Sopenharmony_cifor klass in (BytesIO, BufferedReader, BufferedWriter, BufferedRandom,
1027db96d56Sopenharmony_ci              BufferedRWPair):
1037db96d56Sopenharmony_ci    BufferedIOBase.register(klass)
1047db96d56Sopenharmony_ci
1057db96d56Sopenharmony_cifor klass in (StringIO, TextIOWrapper):
1067db96d56Sopenharmony_ci    TextIOBase.register(klass)
1077db96d56Sopenharmony_cidel klass
1087db96d56Sopenharmony_ci
1097db96d56Sopenharmony_citry:
1107db96d56Sopenharmony_ci    from _io import _WindowsConsoleIO
1117db96d56Sopenharmony_ciexcept ImportError:
1127db96d56Sopenharmony_ci    pass
1137db96d56Sopenharmony_cielse:
1147db96d56Sopenharmony_ci    RawIOBase.register(_WindowsConsoleIO)
115