Fix PEP 567 to reflect changes in 3.7.1 (see bpo-34762) (GH-787)
This commit is contained in:
parent
04be11d785
commit
977a94d1a7
40
pep-0567.rst
40
pep-0567.rst
|
@ -30,6 +30,24 @@ Although it does provide a mechanism that can be used by Context
|
||||||
Managers to store their state.
|
Managers to store their state.
|
||||||
|
|
||||||
|
|
||||||
|
API Design and Implementation Revisions
|
||||||
|
=======================================
|
||||||
|
|
||||||
|
In **Python 3.7.1** the signatures of all context variables
|
||||||
|
C APIs were **changed** to use ``PyObject *`` pointers instead
|
||||||
|
of ``PyContext *``, ``PyContextVar *``, and ``PyContextToken *``,
|
||||||
|
e.g.::
|
||||||
|
|
||||||
|
// in 3.7.0:
|
||||||
|
PyContext *PyContext_New(void);
|
||||||
|
|
||||||
|
// in 3.7.1+:
|
||||||
|
PyObject *PyContext_New(void);
|
||||||
|
|
||||||
|
See [6]_ for more details. The `C API`_ section of this PEP was
|
||||||
|
updated to reflect the change.
|
||||||
|
|
||||||
|
|
||||||
Rationale
|
Rationale
|
||||||
=========
|
=========
|
||||||
|
|
||||||
|
@ -535,11 +553,11 @@ Python API
|
||||||
C API
|
C API
|
||||||
-----
|
-----
|
||||||
|
|
||||||
1. ``PyContextVar * PyContextVar_New(char *name, PyObject *default)``:
|
1. ``PyObject * PyContextVar_New(char *name, PyObject *default)``:
|
||||||
create a ``ContextVar`` object. The *default* argument can be
|
create a ``ContextVar`` object. The *default* argument can be
|
||||||
``NULL``, which means that the variable has no default value.
|
``NULL``, which means that the variable has no default value.
|
||||||
|
|
||||||
2. ``int PyContextVar_Get(PyContextVar *, PyObject *default_value, PyObject **value)``:
|
2. ``int PyContextVar_Get(PyObject *, PyObject *default_value, PyObject **value)``:
|
||||||
return ``-1`` if an error occurs during the lookup, ``0`` otherwise.
|
return ``-1`` if an error occurs during the lookup, ``0`` otherwise.
|
||||||
If a value for the context variable is found, it will be set to the
|
If a value for the context variable is found, it will be set to the
|
||||||
``value`` pointer. Otherwise, ``value`` will be set to
|
``value`` pointer. Otherwise, ``value`` will be set to
|
||||||
|
@ -548,26 +566,26 @@ C API
|
||||||
variable, which can be ``NULL`` too. ``value`` is always a new
|
variable, which can be ``NULL`` too. ``value`` is always a new
|
||||||
reference.
|
reference.
|
||||||
|
|
||||||
3. ``PyContextToken * PyContextVar_Set(PyContextVar *, PyObject *)``:
|
3. ``PyObject * PyContextVar_Set(PyObject *, PyObject *)``:
|
||||||
set the value of the variable in the current context.
|
set the value of the variable in the current context.
|
||||||
|
|
||||||
4. ``PyContextVar_Reset(PyContextVar *, PyContextToken *)``:
|
4. ``PyContextVar_Reset(PyObject *, PyObject *)``:
|
||||||
reset the value of the context variable.
|
reset the value of the context variable.
|
||||||
|
|
||||||
5. ``PyContext * PyContext_New()``: create a new empty context.
|
5. ``PyObject * PyContext_New()``: create a new empty context.
|
||||||
|
|
||||||
6. ``PyContext * PyContext_Copy(PyContext *)``: return a shallow
|
6. ``PyObject * PyContext_Copy(PyObject *)``: return a shallow
|
||||||
copy of the passed context object.
|
copy of the passed context object.
|
||||||
|
|
||||||
7. ``PyContext * PyContext_CopyCurrent()``: get a copy of the current
|
7. ``PyObject * PyContext_CopyCurrent()``: get a copy of the current
|
||||||
context.
|
context.
|
||||||
|
|
||||||
8. ``int PyContext_Enter(PyContext *)`` and
|
8. ``int PyContext_Enter(PyObject *)`` and
|
||||||
``int PyContext_Exit(PyContext *)`` allow to set and restore
|
``int PyContext_Exit(PyObject *)`` allow to set and restore
|
||||||
the context for the current OS thread. It is required to always
|
the context for the current OS thread. It is required to always
|
||||||
restore the previous context::
|
restore the previous context::
|
||||||
|
|
||||||
PyContext *old_ctx = PyContext_Copy();
|
PyObject *old_ctx = PyContext_Copy();
|
||||||
if (old_ctx == NULL) goto error;
|
if (old_ctx == NULL) goto error;
|
||||||
|
|
||||||
if (PyContext_Enter(new_ctx)) goto error;
|
if (PyContext_Enter(new_ctx)) goto error;
|
||||||
|
@ -858,6 +876,8 @@ References
|
||||||
|
|
||||||
.. [5] https://mail.python.org/pipermail/python-dev/2018-January/151878.html
|
.. [5] https://mail.python.org/pipermail/python-dev/2018-January/151878.html
|
||||||
|
|
||||||
|
.. [6] https://bugs.python.org/issue34762
|
||||||
|
|
||||||
|
|
||||||
Acknowledgments
|
Acknowledgments
|
||||||
===============
|
===============
|
||||||
|
|
Loading…
Reference in New Issue