diff --git a/Lib/tempfile.py b/Lib/tempfile.py index 62875540f8b..448163f0438 100644 --- a/Lib/tempfile.py +++ b/Lib/tempfile.py @@ -643,6 +643,18 @@ class SpooledTemporaryFile: 'encoding': encoding, 'newline': newline, 'dir': dir, 'errors': errors} + def __class_getitem__(cls, type): + """Provide minimal support for using this class as generic + (for example in type annotations). + + See PEP 484 and PEP 560 for more details. For example, + `SpooledTemporaryFile[str]` is a valid expression at runtime (type + argument `str` indicates whether the file is open in bytes or text + mode). Note, no type checking happens at runtime, but a static type + checker can be used. + """ + return cls + def _check(self, file): if self._rolled: return max_size = self._max_size diff --git a/Lib/test/test_tempfile.py b/Lib/test/test_tempfile.py index 232c5dae10f..5fe9506b0b7 100644 --- a/Lib/test/test_tempfile.py +++ b/Lib/test/test_tempfile.py @@ -1229,6 +1229,9 @@ class TestSpooledTemporaryFile(BaseTestCase): self.assertTrue(f._rolled) self.assertEqual(os.fstat(f.fileno()).st_size, 20) + def test_class_getitem(self): + self.assertIs(tempfile.SpooledTemporaryFile[bytes], + tempfile.SpooledTemporaryFile) if tempfile.NamedTemporaryFile is not tempfile.TemporaryFile: diff --git a/Misc/NEWS.d/next/Library/2019-12-10-21-11-05.bpo-39019.YIlgZ7.rst b/Misc/NEWS.d/next/Library/2019-12-10-21-11-05.bpo-39019.YIlgZ7.rst new file mode 100644 index 00000000000..7bdf291950f --- /dev/null +++ b/Misc/NEWS.d/next/Library/2019-12-10-21-11-05.bpo-39019.YIlgZ7.rst @@ -0,0 +1 @@ +Implement dummy ``__class_getitem__`` for :class:`tempfile.SpooledTemporaryFile`.