summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Lib/test/test_context.py7
-rw-r--r--Misc/NEWS.d/next/Library/2019-12-07-16-32-42.bpo-38979.q0sIHy.rst1
-rw-r--r--Python/context.c7
3 files changed, 9 insertions, 6 deletions
diff --git a/Lib/test/test_context.py b/Lib/test/test_context.py
index efd7319..b9e991a 100644
--- a/Lib/test/test_context.py
+++ b/Lib/test/test_context.py
@@ -38,9 +38,6 @@ class ContextTest(unittest.TestCase):
self.assertNotEqual(hash(c), hash('aaa'))
- def test_context_var_new_2(self):
- self.assertIsNone(contextvars.ContextVar[int])
-
@isolated_context
def test_context_var_repr_1(self):
c = contextvars.ContextVar('a')
@@ -361,6 +358,10 @@ class ContextTest(unittest.TestCase):
tp.shutdown()
self.assertEqual(results, list(range(10)))
+ def test_contextvar_getitem(self):
+ clss = contextvars.ContextVar
+ self.assertEqual(clss[str], clss)
+
# HAMT Tests
diff --git a/Misc/NEWS.d/next/Library/2019-12-07-16-32-42.bpo-38979.q0sIHy.rst b/Misc/NEWS.d/next/Library/2019-12-07-16-32-42.bpo-38979.q0sIHy.rst
new file mode 100644
index 0000000..6a91a12
--- /dev/null
+++ b/Misc/NEWS.d/next/Library/2019-12-07-16-32-42.bpo-38979.q0sIHy.rst
@@ -0,0 +1 @@
+Return class from ``ContextVar.__class_getitem__`` to simplify subclassing.
diff --git a/Python/context.c b/Python/context.c
index 26f2299..e0338c9 100644
--- a/Python/context.c
+++ b/Python/context.c
@@ -1024,9 +1024,10 @@ _contextvars_ContextVar_reset(PyContextVar *self, PyObject *token)
static PyObject *
-contextvar_cls_getitem(PyObject *self, PyObject *args)
+contextvar_cls_getitem(PyObject *self, PyObject *arg)
{
- Py_RETURN_NONE;
+ Py_INCREF(self);
+ return self;
}
static PyMemberDef PyContextVar_members[] = {
@@ -1039,7 +1040,7 @@ static PyMethodDef PyContextVar_methods[] = {
_CONTEXTVARS_CONTEXTVAR_SET_METHODDEF
_CONTEXTVARS_CONTEXTVAR_RESET_METHODDEF
{"__class_getitem__", contextvar_cls_getitem,
- METH_VARARGS | METH_STATIC, NULL},
+ METH_O | METH_CLASS, NULL},
{NULL, NULL}
};