diff --git a/Lib/bz2.py b/Lib/bz2.py index fabe4f73c8d808..8d26a897680c7d 100644 --- a/Lib/bz2.py +++ b/Lib/bz2.py @@ -94,6 +94,11 @@ def __init__(self, filename, mode="r", *, compresslevel=9): else: self._pos = 0 + if not isinstance(filename, (str, bytes)): + self.name = '' + else: + self.name = os.fspath(filename) + def close(self): """Flush and close the file. diff --git a/Lib/test/test_bz2.py b/Lib/test/test_bz2.py index 9965c1fe2e5f17..280f77c0309299 100644 --- a/Lib/test/test_bz2.py +++ b/Lib/test/test_bz2.py @@ -106,6 +106,27 @@ def testBadArgs(self): # compresslevel is keyword-only self.assertRaises(TypeError, BZ2File, os.devnull, "r", 3) + def testNameFile(self): + self.createTempFile() + with BZ2File(self.filename) as bz2f: + self.assertTrue(hasattr(bz2f, 'name')) + self.assertTrue(bz2f.name == self.filename) + + def testNameBytesIO(self): + bz2f = BZ2File(BytesIO(self.DATA)) + try: + self.assertTrue(hasattr(bz2f, 'name')) + self.assertTrue(bz2f.name == '') + finally: + bz2f.close() + + bz2f = BZ2File(BytesIO(), "w") + try: + self.assertTrue(hasattr(bz2f, 'name')) + self.assertTrue(bz2f.name == '') + finally: + bz2f.close() + def testRead(self): self.createTempFile() with BZ2File(self.filename) as bz2f: diff --git a/Misc/NEWS.d/next/Library/2022-04-04-18-56-26.bpo-47217.0Jd0lE.rst b/Misc/NEWS.d/next/Library/2022-04-04-18-56-26.bpo-47217.0Jd0lE.rst new file mode 100644 index 00000000000000..1a1378adc49338 --- /dev/null +++ b/Misc/NEWS.d/next/Library/2022-04-04-18-56-26.bpo-47217.0Jd0lE.rst @@ -0,0 +1 @@ +Added name attribute for BZ2File (where appropriate and possible).