summaryrefslogtreecommitdiffstats
path: root/Lib/gzip.py
diff options
context:
space:
mode:
authorAntoine Pitrou <solipsis@pitrou.net>2010-09-29 10:49:46 (GMT)
committerAntoine Pitrou <solipsis@pitrou.net>2010-09-29 10:49:46 (GMT)
commitc3ed2e7f8326d703ed971220a7eb76317341efbf (patch)
treed7bfa945b55a990f608aa5ccb9b8a3caaac2a02d /Lib/gzip.py
parent4c2e4fa242d2567e6f0bb5d112cc4e3c5d085b68 (diff)
downloadcpython-c3ed2e7f8326d703ed971220a7eb76317341efbf.zip
cpython-c3ed2e7f8326d703ed971220a7eb76317341efbf.tar.gz
cpython-c3ed2e7f8326d703ed971220a7eb76317341efbf.tar.bz2
Issue #9962: GzipFile now has the peek() method.
Diffstat (limited to 'Lib/gzip.py')
-rw-r--r--Lib/gzip.py25
1 files changed, 24 insertions, 1 deletions
diff --git a/Lib/gzip.py b/Lib/gzip.py
index 3edc839..58e866b 100644
--- a/Lib/gzip.py
+++ b/Lib/gzip.py
@@ -204,7 +204,10 @@ class GzipFile(io.BufferedIOBase):
return self.name
def __repr__(self):
- s = repr(self.fileobj)
+ fileobj = self.fileobj
+ if isinstance(fileobj, _PaddedFile):
+ fileobj = fileobj.file
+ s = repr(fileobj)
return '<gzip ' + s[1:-1] + ' ' + hex(id(self)) + '>'
def _init_write(self, filename):
@@ -336,6 +339,26 @@ class GzipFile(io.BufferedIOBase):
self.offset += size
return chunk
+ def peek(self, n):
+ if self.mode != READ:
+ import errno
+ raise IOError(errno.EBADF, "read() on write-only GzipFile object")
+
+ # Do not return ridiculously small buffers
+ if n < 100:
+ n = 100
+ if self.extrasize == 0:
+ if self.fileobj is None:
+ return b''
+ try:
+ self._read(max(self.max_read_chunk, n))
+ except EOFError:
+ pass
+ offset = self.offset - self.extrastart
+ remaining = self.extrasize
+ assert remaining == len(self.extrabuf) - offset
+ return self.extrabuf[offset:offset + n]
+
def _unread(self, buf):
self.extrasize = len(buf) + self.extrasize
self.offset -= len(buf)