Skip to content

Commit ca5e302

Browse files
committed
Remove is_reg() and add checks for filemode and follow_symlinks
1 parent c5c5d40 commit ca5e302

File tree

3 files changed

+29
-18
lines changed

3 files changed

+29
-18
lines changed

Doc/library/zipfile.rst

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -655,15 +655,11 @@ Instances have the following methods and attributes:
655655
This uses the entry's name: directories should always end with ``/``.
656656

657657
.. versionchanged:: 3.9
658-
Use the filemode contained in external file attributes.
659-
660-
.. method:: ZipInfo.is_reg()
661-
662-
Return :const:`True` if this archive member is a regular file.
658+
This uses the filemode contained in external file attributes.
663659

664660
.. method:: ZipInfo.is_file()
665661

666-
Same as :meth:`is_reg`.
662+
Return :const:`True` if this archive member is a regular file.
667663

668664
.. method:: ZipInfo.is_sym()
669665

Lib/test/test_zipfile.py

Lines changed: 26 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -2284,23 +2284,23 @@ def test_from_file(self):
22842284
self.assertEqual(posixpath.basename(zi.filename), 'test_zipfile.py')
22852285
self.assertFalse(zi.is_dir())
22862286
self.assertFalse(zi.is_sym())
2287-
self.assertTrue(zi.is_reg())
2287+
self.assertTrue(zi.is_file())
22882288
self.assertEqual(zi.file_size, os.path.getsize(__file__))
22892289

22902290
def test_from_file_pathlike(self):
22912291
zi = zipfile.ZipInfo.from_file(pathlib.Path(__file__))
22922292
self.assertEqual(posixpath.basename(zi.filename), 'test_zipfile.py')
22932293
self.assertFalse(zi.is_dir())
22942294
self.assertFalse(zi.is_sym())
2295-
self.assertTrue(zi.is_reg())
2295+
self.assertTrue(zi.is_file())
22962296
self.assertEqual(zi.file_size, os.path.getsize(__file__))
22972297

22982298
def test_from_file_bytes(self):
22992299
zi = zipfile.ZipInfo.from_file(os.fsencode(__file__), 'test')
23002300
self.assertEqual(posixpath.basename(zi.filename), 'test')
23012301
self.assertFalse(zi.is_dir())
23022302
self.assertFalse(zi.is_sym())
2303-
self.assertTrue(zi.is_reg())
2303+
self.assertTrue(zi.is_file())
23042304
self.assertEqual(zi.file_size, os.path.getsize(__file__))
23052305

23062306
def test_from_file_fileno(self):
@@ -2309,7 +2309,7 @@ def test_from_file_fileno(self):
23092309
self.assertEqual(posixpath.basename(zi.filename), 'test')
23102310
self.assertFalse(zi.is_dir())
23112311
self.assertFalse(zi.is_sym())
2312-
self.assertTrue(zi.is_reg())
2312+
self.assertTrue(zi.is_file())
23132313
self.assertEqual(zi.file_size, os.path.getsize(__file__))
23142314

23152315
def test_from_dir(self):
@@ -2318,19 +2318,37 @@ def test_from_dir(self):
23182318
self.assertEqual(zi.filename, 'stdlib_tests/')
23192319
self.assertTrue(zi.is_dir())
23202320
self.assertFalse(zi.is_sym())
2321-
self.assertFalse(zi.is_reg())
2321+
self.assertFalse(zi.is_file())
23222322
self.assertEqual(zi.compress_type, zipfile.ZIP_STORED)
23232323
self.assertEqual(zi.file_size, 0)
23242324

23252325
def test_from_symlink(self):
23262326
self.addCleanup(unlink, TESTFN)
23272327
os.symlink(os.path.abspath(__file__), TESTFN)
2328-
zi = zipfile.ZipInfo.from_file(TESTFN, 'symlink', follow_symlinks=False)
2329-
self.assertEqual(posixpath.basename(zi.filename), 'symlink')
2328+
2329+
zi = zipfile.ZipInfo.from_file(TESTFN, follow_symlinks=False)
2330+
self.assertEqual(posixpath.basename(zi.filename), TESTFN)
23302331
self.assertFalse(zi.is_dir())
2331-
self.assertFalse(zi.is_reg())
2332+
self.assertFalse(zi.is_file())
23322333
self.assertTrue(zi.is_sym())
23332334

2335+
zi = zipfile.ZipInfo.from_file(TESTFN, follow_symlinks=True)
2336+
self.assertEqual(posixpath.basename(zi.filename), TESTFN)
2337+
self.assertFalse(zi.is_dir())
2338+
self.assertTrue(zi.is_file())
2339+
self.assertFalse(zi.is_sym())
2340+
self.assertEqual(zi.file_size, os.path.getsize(__file__))
2341+
2342+
def test_filemode(self):
2343+
self.addCleanup(unlink, TESTFN)
2344+
with open(TESTFN, "w") as f:
2345+
f.write("the cake is a lie")
2346+
modes_to_test = (0o400, 0o777, 0o755, 0o600)
2347+
for mode in modes_to_test:
2348+
os.chmod(TESTFN, mode)
2349+
zi = zipfile.ZipInfo.from_file(TESTFN)
2350+
self.assertEqual(zi.filemode, os.stat(TESTFN).st_mode)
2351+
23342352

23352353
class CommandLineTest(unittest.TestCase):
23362354

Lib/zipfile.py

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -535,12 +535,9 @@ def from_file(cls, filename, arcname=None, *, strict_timestamps=True, follow_sym
535535
def filemode(self):
536536
return self.external_attr >> 16
537537

538-
def is_reg(self):
538+
def is_file(self):
539539
"""Return True if this archive member is a regular file."""
540540
return stat.S_ISREG(self.filemode)
541-
def is_file(self):
542-
"""Same as is_reg()."""
543-
return self.is_reg()
544541
def is_sym(self):
545542
"""Return True if this archive member is a symbolic link."""
546543
return stat.S_ISLNK(self.filemode)

0 commit comments

Comments
 (0)