diff options
author | Lars Gustäbel <lars@gustaebel.de> | 2011-12-06 12:44:10 (GMT) |
---|---|---|
committer | Lars Gustäbel <lars@gustaebel.de> | 2011-12-06 12:44:10 (GMT) |
commit | bb44b73e17e505c24160ca6a9bb560d32c53109a (patch) | |
tree | 3c865178e84eb7e6998d84e58e23a58abd727ca5 | |
parent | 45fb08218069ec5589c8595cc34d111846ce016d (diff) | |
download | cpython-bb44b73e17e505c24160ca6a9bb560d32c53109a.zip cpython-bb44b73e17e505c24160ca6a9bb560d32c53109a.tar.gz cpython-bb44b73e17e505c24160ca6a9bb560d32c53109a.tar.bz2 |
Remove no longer needed work-around for bz2 file object support.
-rw-r--r-- | Lib/tarfile.py | 66 | ||||
-rw-r--r-- | Lib/test/test_tarfile.py | 3 |
2 files changed, 5 insertions, 64 deletions
diff --git a/Lib/tarfile.py b/Lib/tarfile.py index c185954..1789828 100644 --- a/Lib/tarfile.py +++ b/Lib/tarfile.py @@ -632,66 +632,6 @@ class _StreamProxy(object): self.fileobj.close() # class StreamProxy -class _BZ2Proxy(object): - """Small proxy class that enables external file object - support for "r:bz2" and "w:bz2" modes. This is actually - a workaround for a limitation in bz2 module's BZ2File - class which (unlike gzip.GzipFile) has no support for - a file object argument. - """ - - blocksize = 16 * 1024 - - def __init__(self, fileobj, mode): - self.fileobj = fileobj - self.mode = mode - self.name = getattr(self.fileobj, "name", None) - self.init() - - def init(self): - import bz2 - self.pos = 0 - if self.mode == "r": - self.bz2obj = bz2.BZ2Decompressor() - self.fileobj.seek(0) - self.buf = b"" - else: - self.bz2obj = bz2.BZ2Compressor() - - def read(self, size): - x = len(self.buf) - while x < size: - raw = self.fileobj.read(self.blocksize) - if not raw: - break - data = self.bz2obj.decompress(raw) - self.buf += data - x += len(data) - - buf = self.buf[:size] - self.buf = self.buf[size:] - self.pos += len(buf) - return buf - - def seek(self, pos): - if pos < self.pos: - self.init() - self.read(pos - self.pos) - - def tell(self): - return self.pos - - def write(self, data): - self.pos += len(data) - raw = self.bz2obj.compress(data) - self.fileobj.write(raw) - - def close(self): - if self.mode == "w": - raw = self.bz2obj.flush() - self.fileobj.write(raw) -# class _BZ2Proxy - #------------------------ # Extraction file object #------------------------ @@ -1829,10 +1769,8 @@ class TarFile(object): except ImportError: raise CompressionError("bz2 module is not available") - if fileobj is not None: - fileobj = _BZ2Proxy(fileobj, mode) - else: - fileobj = bz2.BZ2File(name, mode, compresslevel=compresslevel) + fileobj = bz2.BZ2File(filename=name if fileobj is None else None, + mode=mode, fileobj=fileobj, compresslevel=compresslevel) try: t = cls.taropen(name, mode, fileobj, **kwargs) diff --git a/Lib/test/test_tarfile.py b/Lib/test/test_tarfile.py index 8bdef9f..a904e32 100644 --- a/Lib/test/test_tarfile.py +++ b/Lib/test/test_tarfile.py @@ -222,6 +222,9 @@ class CommonReadTest(ReadTest): class MiscReadTest(CommonReadTest): def test_no_name_argument(self): + if self.mode.endswith("bz2"): + # BZ2File has no name attribute. + return with open(self.tarname, "rb") as fobj: tar = tarfile.open(fileobj=fobj, mode=self.mode) self.assertEqual(tar.name, os.path.abspath(fobj.name)) |