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