Skip to content

Commit 55adff5

Browse files
committed
zipfile: use file-like interface when given an argument that is both file-like and path-like.
1 parent 02e26b6 commit 55adff5

File tree

1 file changed

+6
-8
lines changed

1 file changed

+6
-8
lines changed

Lib/zipfile/__init__.py

Lines changed: 6 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1332,12 +1332,14 @@ def __init__(self, file, mode="r", compression=ZIP_STORED, allowZip64=True,
13321332
"metadata_encoding is only supported for reading files")
13331333

13341334
# Check if we were passed a file-like object
1335-
if isinstance(file, os.PathLike):
1336-
file = os.fspath(file)
1337-
if isinstance(file, str):
1335+
if hasattr(file, 'read') or hasattr(file, 'write'):
1336+
self._filePassed = 1
1337+
self.fp = file
1338+
self.filename = getattr(file, 'name', None)
1339+
else:
13381340
# No, it's a filename
13391341
self._filePassed = 0
1340-
self.filename = file
1342+
self.filename = os.fspath(file)
13411343
modeDict = {'r' : 'rb', 'w': 'w+b', 'x': 'x+b', 'a' : 'r+b',
13421344
'r+b': 'w+b', 'w+b': 'wb', 'x+b': 'xb'}
13431345
filemode = modeDict[mode]
@@ -1350,10 +1352,6 @@ def __init__(self, file, mode="r", compression=ZIP_STORED, allowZip64=True,
13501352
continue
13511353
raise
13521354
break
1353-
else:
1354-
self._filePassed = 1
1355-
self.fp = file
1356-
self.filename = getattr(file, 'name', None)
13571355
self._fileRefCnt = 1
13581356
self._lock = threading.RLock()
13591357
self._seekable = True

0 commit comments

Comments
 (0)