diff options
-rw-r--r-- | Lib/tempfile.py | 12 | ||||
-rw-r--r-- | Lib/test/test_tempfile.py | 3 | ||||
-rw-r--r-- | Misc/NEWS.d/next/Library/2019-12-10-21-11-05.bpo-39019.YIlgZ7.rst | 1 |
3 files changed, 16 insertions, 0 deletions
diff --git a/Lib/tempfile.py b/Lib/tempfile.py index 6287554..448163f 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 232c5da..5fe9506 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 0000000..7bdf291 --- /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`. |