Kaydet (Commit) 605c2930 authored tarafından Antoine Pitrou's avatar Antoine Pitrou

Further tarfile / test_tarfile cleanup

üst b09a3d69
...@@ -410,28 +410,34 @@ class _Stream: ...@@ -410,28 +410,34 @@ class _Stream:
self.pos = 0 self.pos = 0
self.closed = False self.closed = False
if comptype == "gz": try:
try: if comptype == "gz":
import zlib try:
except ImportError: import zlib
raise CompressionError("zlib module is not available") except ImportError:
self.zlib = zlib raise CompressionError("zlib module is not available")
self.crc = zlib.crc32(b"") self.zlib = zlib
if mode == "r": self.crc = zlib.crc32(b"")
self._init_read_gz() if mode == "r":
else: self._init_read_gz()
self._init_write_gz() else:
self._init_write_gz()
if comptype == "bz2": if comptype == "bz2":
try: try:
import bz2 import bz2
except ImportError: except ImportError:
raise CompressionError("bz2 module is not available") raise CompressionError("bz2 module is not available")
if mode == "r": if mode == "r":
self.dbuf = b"" self.dbuf = b""
self.cmp = bz2.BZ2Decompressor() self.cmp = bz2.BZ2Decompressor()
else: else:
self.cmp = bz2.BZ2Compressor() self.cmp = bz2.BZ2Compressor()
except:
if not self._extfileobj:
self.fileobj.close()
self.closed = True
raise
def __del__(self): def __del__(self):
if hasattr(self, "closed") and not self.closed: if hasattr(self, "closed") and not self.closed:
...@@ -1729,9 +1735,12 @@ class TarFile(object): ...@@ -1729,9 +1735,12 @@ class TarFile(object):
if filemode not in "rw": if filemode not in "rw":
raise ValueError("mode must be 'r' or 'w'") raise ValueError("mode must be 'r' or 'w'")
t = cls(name, filemode, stream = _Stream(name, filemode, comptype, fileobj, bufsize)
_Stream(name, filemode, comptype, fileobj, bufsize), try:
**kwargs) t = cls(name, filemode, stream, **kwargs)
except:
stream.close()
raise
t._extfileobj = False t._extfileobj = False
return t return t
......
...@@ -423,7 +423,8 @@ class DetectReadTest(unittest.TestCase): ...@@ -423,7 +423,8 @@ class DetectReadTest(unittest.TestCase):
def _testfunc_fileobj(self, name, mode): def _testfunc_fileobj(self, name, mode):
try: try:
tar = tarfile.open(name, mode, fileobj=open(name, "rb")) with open(name, "rb") as f:
tar = tarfile.open(name, mode, fileobj=f)
except tarfile.ReadError as e: except tarfile.ReadError as e:
self.fail() self.fail()
else: else:
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment