Left: | ||
Right: |
OLD | NEW |
---|---|
1 """ | 1 """ |
2 Python implementation of the io module. | 2 Python implementation of the io module. |
3 """ | 3 """ |
4 | 4 |
5 import os | 5 import os |
6 import abc | 6 import abc |
7 import codecs | 7 import codecs |
8 import warnings | 8 import warnings |
9 # Import _thread instead of threading to reduce startup cost | 9 # Import _thread instead of threading to reduce startup cost |
10 try: | 10 try: |
(...skipping 349 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
360 if msg is None else msg) | 360 if msg is None else msg) |
361 | 361 |
362 | 362 |
363 def readable(self) -> bool: | 363 def readable(self) -> bool: |
364 """Return whether object was opened for reading. | 364 """Return whether object was opened for reading. |
365 | 365 |
366 If False, read() will raise IOError. | 366 If False, read() will raise IOError. |
367 """ | 367 """ |
368 return False | 368 return False |
369 | 369 |
370 def _checkReadable(self, msg=None): | |
Antoine Pitrou
2009/04/17 21:11:15
Not sure why you're removing it. Currently it's us
brian1
2009/04/18 07:41:30
I didn't see the other usages. I removed it becaus
| |
371 """Internal: raise an IOError if file is not readable | |
372 """ | |
373 if not self.readable(): | |
374 raise IOError("File or stream is not readable." | |
375 if msg is None else msg) | |
376 | |
377 def writable(self) -> bool: | 370 def writable(self) -> bool: |
378 """Return whether object was opened for writing. | 371 """Return whether object was opened for writing. |
379 | 372 |
380 If False, write() and truncate() will raise IOError. | 373 If False, write() and truncate() will raise IOError. |
381 """ | 374 """ |
382 return False | 375 return False |
383 | 376 |
384 def _checkWritable(self, msg=None): | |
Antoine Pitrou
2009/04/17 21:11:15
Same question as for _checkReadable().
| |
385 """Internal: raise an IOError if file is not writable | |
386 """ | |
387 if not self.writable(): | |
388 raise IOError("File or stream is not writable." | |
389 if msg is None else msg) | |
390 | |
391 @property | 377 @property |
392 def closed(self): | 378 def closed(self): |
393 """closed: bool. True iff the file has been closed. | 379 """closed: bool. True iff the file has been closed. |
394 | 380 |
395 For backwards compatibility, this is a property, not a predicate. | 381 For backwards compatibility, this is a property, not a predicate. |
396 """ | 382 """ |
397 return self.__closed | 383 return self.__closed |
398 | 384 |
399 def _checkClosed(self, msg=None): | 385 def _checkClosed(self, msg=None): |
400 """Internal: raise an ValueError if file is closed | 386 """Internal: raise an ValueError if file is closed |
(...skipping 430 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
831 A buffer for a readable, sequential BaseRawIO object. | 817 A buffer for a readable, sequential BaseRawIO object. |
832 | 818 |
833 The constructor creates a BufferedReader for the given readable raw | 819 The constructor creates a BufferedReader for the given readable raw |
834 stream and buffer_size. If buffer_size is omitted, DEFAULT_BUFFER_SIZE | 820 stream and buffer_size. If buffer_size is omitted, DEFAULT_BUFFER_SIZE |
835 is used. | 821 is used. |
836 """ | 822 """ |
837 | 823 |
838 def __init__(self, raw, buffer_size=DEFAULT_BUFFER_SIZE): | 824 def __init__(self, raw, buffer_size=DEFAULT_BUFFER_SIZE): |
839 """Create a new buffered reader using the given readable raw IO object. | 825 """Create a new buffered reader using the given readable raw IO object. |
840 """ | 826 """ |
841 raw._checkReadable() | 827 |
828 if not raw.readable(): | |
829 raise IOError('"raw" argument must be readable.') | |
830 | |
842 _BufferedIOMixin.__init__(self, raw) | 831 _BufferedIOMixin.__init__(self, raw) |
843 if buffer_size <= 0: | 832 if buffer_size <= 0: |
844 raise ValueError("invalid buffer size") | 833 raise ValueError("invalid buffer size") |
845 self.buffer_size = buffer_size | 834 self.buffer_size = buffer_size |
846 self._reset_read_buf() | 835 self._reset_read_buf() |
847 self._read_lock = Lock() | 836 self._read_lock = Lock() |
848 | 837 |
849 def _reset_read_buf(self): | 838 def _reset_read_buf(self): |
850 self._read_buf = b"" | 839 self._read_buf = b"" |
851 self._read_pos = 0 | 840 self._read_pos = 0 |
(...skipping 110 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
962 | 951 |
963 The constructor creates a BufferedWriter for the given writeable raw | 952 The constructor creates a BufferedWriter for the given writeable raw |
964 stream. If the buffer_size is not given, it defaults to | 953 stream. If the buffer_size is not given, it defaults to |
965 DEFAULT_BUFFER_SIZE. | 954 DEFAULT_BUFFER_SIZE. |
966 """ | 955 """ |
967 | 956 |
968 _warning_stack_offset = 2 | 957 _warning_stack_offset = 2 |
969 | 958 |
970 def __init__(self, raw, | 959 def __init__(self, raw, |
971 buffer_size=DEFAULT_BUFFER_SIZE, max_buffer_size=None): | 960 buffer_size=DEFAULT_BUFFER_SIZE, max_buffer_size=None): |
972 raw._checkWritable() | 961 |
962 if not raw.writable(): | |
963 raise IOError('"raw" argument must be writable.') | |
964 | |
973 _BufferedIOMixin.__init__(self, raw) | 965 _BufferedIOMixin.__init__(self, raw) |
974 if buffer_size <= 0: | 966 if buffer_size <= 0: |
975 raise ValueError("invalid buffer size") | 967 raise ValueError("invalid buffer size") |
976 if max_buffer_size is not None: | 968 if max_buffer_size is not None: |
977 warnings.warn("max_buffer_size is deprecated", DeprecationWarning, | 969 warnings.warn("max_buffer_size is deprecated", DeprecationWarning, |
978 self._warning_stack_offset) | 970 self._warning_stack_offset) |
979 self.buffer_size = buffer_size | 971 self.buffer_size = buffer_size |
980 self._write_buf = bytearray() | 972 self._write_buf = bytearray() |
981 self._write_lock = Lock() | 973 self._write_lock = Lock() |
982 | 974 |
(...skipping 85 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1068 # objects) is questionable. | 1060 # objects) is questionable. |
1069 | 1061 |
1070 def __init__(self, reader, writer, | 1062 def __init__(self, reader, writer, |
1071 buffer_size=DEFAULT_BUFFER_SIZE, max_buffer_size=None): | 1063 buffer_size=DEFAULT_BUFFER_SIZE, max_buffer_size=None): |
1072 """Constructor. | 1064 """Constructor. |
1073 | 1065 |
1074 The arguments are two RawIO instances. | 1066 The arguments are two RawIO instances. |
1075 """ | 1067 """ |
1076 if max_buffer_size is not None: | 1068 if max_buffer_size is not None: |
1077 warnings.warn("max_buffer_size is deprecated", DeprecationWarning, 2 ) | 1069 warnings.warn("max_buffer_size is deprecated", DeprecationWarning, 2 ) |
1078 reader._checkReadable() | 1070 |
1079 writer._checkWritable() | 1071 if not reader.readable(): |
1072 raise IOError('"reader" argument must be readable.') | |
1073 | |
1074 if not writer.writable(): | |
1075 raise IOError('"writer" argument must be writable.') | |
1076 | |
1080 self.reader = BufferedReader(reader, buffer_size) | 1077 self.reader = BufferedReader(reader, buffer_size) |
1081 self.writer = BufferedWriter(writer, buffer_size) | 1078 self.writer = BufferedWriter(writer, buffer_size) |
1082 | 1079 |
1083 def read(self, n=None): | 1080 def read(self, n=None): |
1084 if n is None: | 1081 if n is None: |
1085 n = -1 | 1082 n = -1 |
1086 return self.reader.read(n) | 1083 return self.reader.read(n) |
1087 | 1084 |
1088 def readinto(self, b): | 1085 def readinto(self, b): |
1089 return self.reader.readinto(b) | 1086 return self.reader.readinto(b) |
(...skipping 600 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1690 self._snapshot = (dec_flags, input_chunk) | 1687 self._snapshot = (dec_flags, input_chunk) |
1691 | 1688 |
1692 # Skip chars_to_skip of the decoded characters. | 1689 # Skip chars_to_skip of the decoded characters. |
1693 if len(self._decoded_chars) < chars_to_skip: | 1690 if len(self._decoded_chars) < chars_to_skip: |
1694 raise IOError("can't restore logical file position") | 1691 raise IOError("can't restore logical file position") |
1695 self._decoded_chars_used = chars_to_skip | 1692 self._decoded_chars_used = chars_to_skip |
1696 | 1693 |
1697 return cookie | 1694 return cookie |
1698 | 1695 |
1699 def read(self, n=None): | 1696 def read(self, n=None): |
1700 self._checkReadable() | 1697 if not self.readable(): |
1698 raise IOError("File or stream is not readable.") | |
1699 | |
1701 if n is None: | 1700 if n is None: |
1702 n = -1 | 1701 n = -1 |
1703 decoder = self._decoder or self._get_decoder() | 1702 decoder = self._decoder or self._get_decoder() |
1704 if n < 0: | 1703 if n < 0: |
1705 # Read everything. | 1704 # Read everything. |
1706 result = (self._get_decoded_chars() + | 1705 result = (self._get_decoded_chars() + |
1707 decoder.decode(self.buffer.read(), final=True)) | 1706 decoder.decode(self.buffer.read(), final=True)) |
1708 self._set_decoded_chars('') | 1707 self._set_decoded_chars('') |
1709 self._snapshot = None | 1708 self._snapshot = None |
1710 return result | 1709 return result |
(...skipping 133 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1844 return self.buffer.getvalue().decode(self._encoding, self._errors) | 1843 return self.buffer.getvalue().decode(self._encoding, self._errors) |
1845 | 1844 |
1846 def __repr__(self): | 1845 def __repr__(self): |
1847 # TextIOWrapper tells the encoding in its repr. In StringIO, | 1846 # TextIOWrapper tells the encoding in its repr. In StringIO, |
1848 # that's a implementation detail. | 1847 # that's a implementation detail. |
1849 return object.__repr__(self) | 1848 return object.__repr__(self) |
1850 | 1849 |
1851 @property | 1850 @property |
1852 def encoding(self): | 1851 def encoding(self): |
1853 return None | 1852 return None |
OLD | NEW |