]> granicus.if.org Git - python/commitdiff
bpo-33985: Implement ContextVar.name attribute. (GH-7980)
authorMiss Islington (bot) <31488909+miss-islington@users.noreply.github.com>
Thu, 28 Jun 2018 17:39:54 +0000 (10:39 -0700)
committerGitHub <noreply@github.com>
Thu, 28 Jun 2018 17:39:54 +0000 (10:39 -0700)
(cherry picked from commit 41cb0baea96a80360971908a0bd79d9d40dd5e44)

Co-authored-by: Yury Selivanov <yury@magic.io>
Doc/library/contextvars.rst
Lib/test/test_context.py
Misc/NEWS.d/next/Core and Builtins/2018-06-27-18-56-41.bpo-33985.ILJ3Af.rst [new file with mode: 0644]
Python/context.c

index 9c7ea2bdb7b68bfc5ed5ffd17a7d8c4b2d4b26f8..8805661c456edb611c877ee1823cf8a1feb47f7c 100644 (file)
@@ -48,6 +48,8 @@ Context Variables
 
       The name of the variable.  This is a read-only property.
 
+      .. versionadded:: 3.7.1
+
    .. method:: get([default])
 
       Return a value for the context variable for the current context.
index 74d05fc5c412cd8455ba4bf51a64c106b418952d..efd7319a23ae0268b2d037aa76174adc343474bc 100644 (file)
@@ -30,8 +30,13 @@ class ContextTest(unittest.TestCase):
         with self.assertRaisesRegex(TypeError, 'must be a str'):
             contextvars.ContextVar(1)
 
-        c = contextvars.ContextVar('a')
-        self.assertNotEqual(hash(c), hash('a'))
+        c = contextvars.ContextVar('aaa')
+        self.assertEqual(c.name, 'aaa')
+
+        with self.assertRaises(AttributeError):
+            c.name = 'bbb'
+
+        self.assertNotEqual(hash(c), hash('aaa'))
 
     def test_context_var_new_2(self):
         self.assertIsNone(contextvars.ContextVar[int])
diff --git a/Misc/NEWS.d/next/Core and Builtins/2018-06-27-18-56-41.bpo-33985.ILJ3Af.rst b/Misc/NEWS.d/next/Core and Builtins/2018-06-27-18-56-41.bpo-33985.ILJ3Af.rst
new file mode 100644 (file)
index 0000000..07c8f90
--- /dev/null
@@ -0,0 +1 @@
+Implement contextvars.ContextVar.name attribute.
index b727748ee73987b001ca61bb359e6610610f7bb5..8ee048ccdd5c5949be2332bad5255cde1c26ee1c 100644 (file)
@@ -940,6 +940,10 @@ contextvar_cls_getitem(PyObject *self, PyObject *args)
     Py_RETURN_NONE;
 }
 
+static PyMemberDef PyContextVar_members[] = {
+    {"name", T_OBJECT, offsetof(PyContextVar, var_name), READONLY},
+    {NULL}
+};
 
 static PyMethodDef PyContextVar_methods[] = {
     _CONTEXTVARS_CONTEXTVAR_GET_METHODDEF
@@ -955,6 +959,7 @@ PyTypeObject PyContextVar_Type = {
     "ContextVar",
     sizeof(PyContextVar),
     .tp_methods = PyContextVar_methods,
+    .tp_members = PyContextVar_members,
     .tp_dealloc = (destructor)contextvar_tp_dealloc,
     .tp_getattro = PyObject_GenericGetAttr,
     .tp_flags = Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC,