summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Lib/tempfile.py12
-rw-r--r--Lib/test/test_tempfile.py3
-rw-r--r--Misc/NEWS.d/next/Library/2019-12-10-21-11-05.bpo-39019.YIlgZ7.rst1
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`.