diff options
author | Yury Selivanov <yury@magic.io> | 2018-01-22 19:11:18 -0500 |
---|---|---|
committer | GitHub <noreply@github.com> | 2018-01-22 19:11:18 -0500 |
commit | f23746a934177c48eff754411aba54c31d6be2f0 (patch) | |
tree | 4b32964b53fa87701f71c71937792f2489b7bbb4 /Modules/_contextvarsmodule.c | |
parent | 9089a265918754d95e105a7c4c409ac9352c87bb (diff) | |
download | cpython-git-f23746a934177c48eff754411aba54c31d6be2f0.tar.gz |
bpo-32436: Implement PEP 567 (#5027)
Diffstat (limited to 'Modules/_contextvarsmodule.c')
-rw-r--r-- | Modules/_contextvarsmodule.c | 75 |
1 files changed, 75 insertions, 0 deletions
diff --git a/Modules/_contextvarsmodule.c b/Modules/_contextvarsmodule.c new file mode 100644 index 0000000000..b7d112dd60 --- /dev/null +++ b/Modules/_contextvarsmodule.c @@ -0,0 +1,75 @@ +#include "Python.h" + +#include "clinic/_contextvarsmodule.c.h" + +/*[clinic input] +module _contextvars +[clinic start generated code]*/ +/*[clinic end generated code: output=da39a3ee5e6b4b0d input=a0955718c8b8cea6]*/ + + +/*[clinic input] +_contextvars.copy_context +[clinic start generated code]*/ + +static PyObject * +_contextvars_copy_context_impl(PyObject *module) +/*[clinic end generated code: output=1fcd5da7225c4fa9 input=89bb9ae485888440]*/ +{ + return (PyObject *)PyContext_CopyCurrent(); +} + + +PyDoc_STRVAR(module_doc, "Context Variables"); + +static PyMethodDef _contextvars_methods[] = { + _CONTEXTVARS_COPY_CONTEXT_METHODDEF + {NULL, NULL} +}; + +static struct PyModuleDef _contextvarsmodule = { + PyModuleDef_HEAD_INIT, /* m_base */ + "_contextvars", /* m_name */ + module_doc, /* m_doc */ + -1, /* m_size */ + _contextvars_methods, /* m_methods */ + NULL, /* m_slots */ + NULL, /* m_traverse */ + NULL, /* m_clear */ + NULL, /* m_free */ +}; + +PyMODINIT_FUNC +PyInit__contextvars(void) +{ + PyObject *m = PyModule_Create(&_contextvarsmodule); + if (m == NULL) { + return NULL; + } + + Py_INCREF(&PyContext_Type); + if (PyModule_AddObject(m, "Context", + (PyObject *)&PyContext_Type) < 0) + { + Py_DECREF(&PyContext_Type); + return NULL; + } + + Py_INCREF(&PyContextVar_Type); + if (PyModule_AddObject(m, "ContextVar", + (PyObject *)&PyContextVar_Type) < 0) + { + Py_DECREF(&PyContextVar_Type); + return NULL; + } + + Py_INCREF(&PyContextToken_Type); + if (PyModule_AddObject(m, "Token", + (PyObject *)&PyContextToken_Type) < 0) + { + Py_DECREF(&PyContextToken_Type); + return NULL; + } + + return m; +} |