diff --git a/Lib/bz2.py b/Lib/bz2.py index a2c588e748..4e9d1bcbdc 100644 --- a/Lib/bz2.py +++ b/Lib/bz2.py @@ -79,10 +79,12 @@ def __init__(self, filename, mode="r", *, compresslevel=9): if isinstance(filename, (str, bytes, os.PathLike)): self._fp = _builtin_open(filename, mode) + self.filename = filename self._closefp = True self._mode = mode_code elif hasattr(filename, "read") or hasattr(filename, "write"): self._fp = filename + self.filename = self._fp.name self._mode = mode_code else: raise TypeError("filename must be a str, bytes, file or PathLike object") @@ -263,6 +265,9 @@ def tell(self): return self._buffer.tell() return self._pos + def name(self): + return self.filename + def open(filename, mode="rb", compresslevel=9, encoding=None, errors=None, newline=None): diff --git a/Lib/test/test_bz2.py b/Lib/test/test_bz2.py index efed3a859b..2d50150f4e 100644 --- a/Lib/test/test_bz2.py +++ b/Lib/test/test_bz2.py @@ -105,6 +105,11 @@ def testBadArgs(self): # compresslevel is keyword-only self.assertRaises(TypeError, BZ2File, os.devnull, "r", 3) + def testNameExists(self): + with self.createTempFile() as fin: + with BZ2File(fin) as bz2f: + self.assertTrue((bz2f.name is not None) and (bz2f.name == self.filename)) + def testRead(self): self.createTempFile() with BZ2File(self.filename) as bz2f: