mirror of
https://github.com/python/cpython.git
synced 2026-01-05 23:12:38 +00:00
zipfile: remove remaining ResourceWarnings
This commit is contained in:
parent
e94980a64f
commit
a9f054b423
2 changed files with 24 additions and 16 deletions
|
|
@ -609,7 +609,7 @@ def tearDown(self):
|
|||
|
||||
class PyZipFileTests(unittest.TestCase):
|
||||
def test_write_pyfile(self):
|
||||
with zipfile.PyZipFile(TemporaryFile(), "w") as zipfp:
|
||||
with TemporaryFile() as t, zipfile.PyZipFile(t, "w") as zipfp:
|
||||
fn = __file__
|
||||
if fn.endswith('.pyc') or fn.endswith('.pyo'):
|
||||
path_split = fn.split(os.sep)
|
||||
|
|
@ -627,7 +627,7 @@ def test_write_pyfile(self):
|
|||
self.assertTrue(bn + 'o' in zipfp.namelist() or
|
||||
bn + 'c' in zipfp.namelist())
|
||||
|
||||
with zipfile.PyZipFile(TemporaryFile(), "w") as zipfp:
|
||||
with TemporaryFile() as t, zipfile.PyZipFile(t, "w") as zipfp:
|
||||
fn = __file__
|
||||
if fn.endswith(('.pyc', '.pyo')):
|
||||
fn = fn[:-1]
|
||||
|
|
@ -643,7 +643,7 @@ def test_write_python_package(self):
|
|||
import email
|
||||
packagedir = os.path.dirname(email.__file__)
|
||||
|
||||
with zipfile.PyZipFile(TemporaryFile(), "w") as zipfp:
|
||||
with TemporaryFile() as t, zipfile.PyZipFile(t, "w") as zipfp:
|
||||
zipfp.writepy(packagedir)
|
||||
|
||||
# Check for a couple of modules at different levels of the
|
||||
|
|
@ -666,26 +666,25 @@ def test_write_python_directory(self):
|
|||
with open(os.path.join(TESTFN2, "mod2.txt"), "w") as fp:
|
||||
fp.write("bla bla bla\n")
|
||||
|
||||
zipfp = zipfile.PyZipFile(TemporaryFile(), "w")
|
||||
zipfp.writepy(TESTFN2)
|
||||
with TemporaryFile() as t, zipfile.PyZipFile(t, "w") as zipfp:
|
||||
zipfp.writepy(TESTFN2)
|
||||
|
||||
names = zipfp.namelist()
|
||||
self.assertTrue('mod1.pyc' in names or 'mod1.pyo' in names)
|
||||
self.assertTrue('mod2.pyc' in names or 'mod2.pyo' in names)
|
||||
self.assertNotIn('mod2.txt', names)
|
||||
names = zipfp.namelist()
|
||||
self.assertTrue('mod1.pyc' in names or 'mod1.pyo' in names)
|
||||
self.assertTrue('mod2.pyc' in names or 'mod2.pyo' in names)
|
||||
self.assertNotIn('mod2.txt', names)
|
||||
|
||||
finally:
|
||||
shutil.rmtree(TESTFN2)
|
||||
|
||||
def test_write_non_pyfile(self):
|
||||
with zipfile.PyZipFile(TemporaryFile(), "w") as zipfp:
|
||||
with TemporaryFile() as t, zipfile.PyZipFile(t, "w") as zipfp:
|
||||
with open(TESTFN, 'w') as f:
|
||||
f.write('most definitely not a python file')
|
||||
self.assertRaises(RuntimeError, zipfp.writepy, TESTFN)
|
||||
os.remove(TESTFN)
|
||||
|
||||
|
||||
|
||||
class OtherTests(unittest.TestCase):
|
||||
zips_with_bad_crc = {
|
||||
zipfile.ZIP_STORED: (
|
||||
|
|
|
|||
|
|
@ -897,10 +897,8 @@ def open(self, name, mode="r", pwd=None):
|
|||
# given a file object in the constructor
|
||||
if self._filePassed:
|
||||
zef_file = self.fp
|
||||
should_close = False
|
||||
else:
|
||||
zef_file = io.open(self.filename, 'rb')
|
||||
should_close = True
|
||||
|
||||
# Make sure we have an info object
|
||||
if isinstance(name, ZipInfo):
|
||||
|
|
@ -908,8 +906,12 @@ def open(self, name, mode="r", pwd=None):
|
|||
zinfo = name
|
||||
else:
|
||||
# Get info object for name
|
||||
zinfo = self.getinfo(name)
|
||||
|
||||
try:
|
||||
zinfo = self.getinfo(name)
|
||||
except KeyError:
|
||||
if not self._filePassed:
|
||||
zef_file.close()
|
||||
raise
|
||||
zef_file.seek(zinfo.header_offset, 0)
|
||||
|
||||
# Skip the file header:
|
||||
|
|
@ -923,6 +925,8 @@ def open(self, name, mode="r", pwd=None):
|
|||
zef_file.read(fheader[_FH_EXTRA_FIELD_LENGTH])
|
||||
|
||||
if fname != zinfo.orig_filename.encode("utf-8"):
|
||||
if not self._filePassed:
|
||||
zef_file.close()
|
||||
raise BadZipFile(
|
||||
'File name in directory %r and header %r differ.'
|
||||
% (zinfo.orig_filename, fname))
|
||||
|
|
@ -934,6 +938,8 @@ def open(self, name, mode="r", pwd=None):
|
|||
if not pwd:
|
||||
pwd = self.pwd
|
||||
if not pwd:
|
||||
if not self._filePassed:
|
||||
zef_file.close()
|
||||
raise RuntimeError("File %s is encrypted, "
|
||||
"password required for extraction" % name)
|
||||
|
||||
|
|
@ -952,9 +958,12 @@ def open(self, name, mode="r", pwd=None):
|
|||
# compare against the CRC otherwise
|
||||
check_byte = (zinfo.CRC >> 24) & 0xff
|
||||
if h[11] != check_byte:
|
||||
if not self._filePassed:
|
||||
zef_file.close()
|
||||
raise RuntimeError("Bad password for file", name)
|
||||
|
||||
return ZipExtFile(zef_file, mode, zinfo, zd, close_fileobj=should_close)
|
||||
return ZipExtFile(zef_file, mode, zinfo, zd,
|
||||
close_fileobj=not self._filePassed)
|
||||
|
||||
def extract(self, member, path=None, pwd=None):
|
||||
"""Extract a member from the archive to the current working directory,
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue