Skip to content
Permalink
Newer
Older
100644 98 lines (74 sloc) 3.42 KB
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>, "
May 1, 2009
41
"Amaury Forgeot d'Arc <amauryfa@gmail.com>, "
42
"Benjamin Peterson <benjamin@python.org>")
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"]
51
import _io
52
import abc
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)
60
# Pretend this exception was created here.
61
UnsupportedOperation.__module__ = "io"
62
63
# for seek()
64
SEEK_SET = 0
65
SEEK_CUR = 1
66
SEEK_END = 2
67
68
# Declaring ABCs in C is tricky so we do it here.
69
# Method descriptions and default implementations are inherited from the C
70
# version however.
71
class IOBase(_io._IOBase, metaclass=abc.ABCMeta):
72
__doc__ = _io._IOBase.__doc__
74
class RawIOBase(_io._RawIOBase, IOBase):
75
__doc__ = _io._RawIOBase.__doc__
77
class BufferedIOBase(_io._BufferedIOBase, IOBase):
78
__doc__ = _io._BufferedIOBase.__doc__
80
class TextIOBase(_io._TextIOBase, IOBase):
81
__doc__ = _io._TextIOBase.__doc__
83
RawIOBase.register(FileIO)
84
85
for klass in (BytesIO, BufferedReader, BufferedWriter, BufferedRandom,
86
BufferedRWPair):
87
BufferedIOBase.register(klass)
89
for klass in (StringIO, TextIOWrapper):
90
TextIOBase.register(klass)
91
del klass
92
93
try:
94
from _io import _WindowsConsoleIO
95
except ImportError:
96
pass
97
else:
98
RawIOBase.register(_WindowsConsoleIO)